|
Message
From: cvs at opencores.org<cvs@o...>
Date: Sat Sep 16 14:38:56 CEST 2006
Subject: [cvs-checkins] MODIFIED: jop ...
Date: 00/06/09 16:14:38 Modified: jop/java/tools/src/com/jopdesign/tools JopSim.java Log: cleanup of mem/io interface, support memory size detection at startup Revision Changes Path 1.21 jop/java/tools/src/com/jopdesign/tools/JopSim.java http://www.opencores.org/cvsweb.shtml/jop/java/tools/src/com/jopdesign/tools/JopSim.java.diff?r1=1.20&r2=1.21 (In the diff below, changes in quantity of whitespace are not shown.) Index: JopSim.java =================================================================== RCS file: /cvsroot/martin/jop/java/tools/src/com/jopdesign/tools/JopSim.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -b -r1.20 -r1.21 --- JopSim.java 19 Feb 2006 15:14:19 -0000 1.20 +++ JopSim.java 16 Sep 2006 12:38:56 -0000 1.21 @@ -25,6 +25,7 @@ static final int MAX_MEM = 1024*1024/4; static final int MAX_STACK = 256; // with internal memory + static final int MEM_TEST_OFF = 256; static final int MIN_WB_ADDRESS = -128; @@ -192,36 +193,38 @@ return mem[addr]; } + int readMem(int addr) { // System.out.println(addr+" "+mem[addr]); rdMemCnt++; ioCnt += 12; - if (addr>MAX_MEM || addr<MIN_WB_ADDRESS) { + if (addr>MAX_MEM+MEM_TEST_OFF || addr<MIN_WB_ADDRESS) { System.out.println("readMem: wrong address: "+addr); System.exit(-1); } if (addr<0) { - return 0; // no Simulation of the Wishbone devices + return sysRd(addr); } - return mem[addr]; + return mem[addr%MAX_MEM]; } void writeMem(int addr, int data) { wrMemCnt++; ioCnt += 12; - if (addr>MAX_MEM || addr<MIN_WB_ADDRESS) { + if (addr>MAX_MEM+MEM_TEST_OFF || addr<MIN_WB_ADDRESS) { System.out.println("writeMem: wrong address: "+addr); System.exit(-1); } if (addr<0) { + sysWr(addr, data); return; // no Simulation of the Wishbone devices } - mem[addr] = data; + mem[addr%MAX_MEM] = data; } int readOpd16u() { @@ -298,17 +301,17 @@ // } // } - void sysRd() { + int sysRd(int addr) { - int addr = stack[sp]; + int val; int i; try { switch (addr) { case Const.IO_STATUS: - stack[sp] = Const.MSK_UA_TDRE; + val = Const.MSK_UA_TDRE; if (System.in.available()!=0) { - stack[sp] |= Const.MSK_UA_RDRF; + val |= Const.MSK_UA_RDRF; } break; case Const.IO_STATUS2: @@ -323,13 +326,13 @@ // } // rdrf // } // i |= Const.MSK_UA_TDRE; // tdre is alwais true on OutputStream - stack[sp] = i; + val = i; break;
case Const.IO_UART:
if (System.in.available()!=0) {
- stack[sp] = System.in.read();
+ val = System.in.read();
} else {
- stack[sp] = '_';
+ val = '_';
}
break;
case Const.IO_UART2:
@@ -339,31 +342,33 @@
// } catch (IOException e) {
// e.printStackTrace();
// }
- stack[sp] = i;
+ val = i;
break;
case Const.IO_CNT:
- stack[sp] = ioCnt;
+ val = ioCnt;
break;
case Const.IO_US_CNT:
- stack[sp] = usCnt();
+ val = usCnt();
break;
case 1234:
// trigger cache debug output
// cache.rawData();
// cache.resetCnt();
+ val = 0;
break;
default:
- stack[sp] = 0;
+ val = 0;
}
} catch (Exception e) {
System.out.println(e);
+ val = 0;
}
+
+ return val;
}
- void sysWr() {
+ void sysWr(int addr, int val) {
- int addr = stack[sp--];
- int val = stack[sp--];
switch (addr) {
case Const.IO_UART:
if (log) System.out.print("\t->");
@@ -1426,24 +1431,19 @@
noim(208);
break;
case 209 : // jopsys_rd
- sysRd();
+ ref = stack[sp--];
+ stack[++sp] = readMem(ref);
break;
case 210 : // jopsys_wr
- sysWr();
+ ref = stack[sp--];
+ val = stack[sp--];
+ writeMem(ref, val);
break;
case 211 : // jopsys_rdmem
- if (stack[sp]<0) {
- sysRd();
- break;
- }
ref = stack[sp--];
stack[++sp] = readMem(ref);
break;
case 212 : // jopsys_wrmem
- if (stack[sp]<0) {
- sysWr();
- break;
- }
ref = stack[sp--];
val = stack[sp--];
writeMem(ref, val);
|
 |