summaryrefslogtreecommitdiffstats
path: root/zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java
diff options
context:
space:
mode:
Diffstat (limited to 'zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java')
-rw-r--r--zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java109
1 files changed, 109 insertions, 0 deletions
diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java b/zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java
new file mode 100644
index 0000000..8d8667c
--- /dev/null
+++ b/zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java
@@ -0,0 +1,109 @@
+
+package com.zylin.zpu.simulator;
+
+import com.zylin.zpu.simulator.exceptions.CPUException;
+import com.zylin.zpu.simulator.exceptions.MemoryAccessException;
+
+public class Abel extends Simulator
+{
+
+ protected int getIO()
+ {
+ return 0x8000;
+ }
+
+
+
+ protected int ioRead(int addr) throws CPUException
+ {
+ switch (addr)
+ {
+ case 0xc000:
+ return syscall.readUART();
+
+ /* FIFO empty? bit 0, FIFO full bit 1(never the case) */
+ case 0xc004:
+ return syscall.readFIFO();
+
+ case 0x9000:
+ case 0x9004:
+ case 0x9008:
+ case 0x900c:
+
+ case 0x9010:
+ case 0x9014:
+ case 0x9018:
+ case 0x901c:
+ return readSampledTimer(addr, 0x9000);
+
+ case 0x8800:
+ return readMHz();
+
+ default:
+ throw new MemoryAccessException();
+ }
+ }
+
+ /*
+ ; Read/write are on different addresses
+ ; The registers are 8 bits and mapped to bit[7:0]
+ ;
+ ; 0xC000 Write: Writes to UART TX FIFO (4 byte FIFO)
+ ; Read : Reads from UART RX FIFO (4 byte FIFO)
+ ; 0xC004 Read : UART status register
+ ; Bit 0 = RX FIFO empty
+ ; Bit 1 = TX FIFO full
+ ; 0xA000 Write: 8 LED's
+ */
+
+ /*
+ 0x9000 Write: bit 0: 1= reset counter
+ 0= counter running
+ bit 1: 1= sample counter (when set to 1)
+ 0=not used
+ Read : counter bit[7:0]
+ 0x9004 Read: counter bit [15:8]
+ 0x9008 Read: counter bit [23:16]
+ 0x900C Read: counter bit [31:24]
+ 0x9010 Read: counter bit [39:32]
+ 0x9014 Read: counter bit [47:40]
+ 0x9018 Read: counter bit [55:48]
+ 0x901C Read: counter bit [63:56]
+
+ 0x8800 Read: unsigned 8-bit integer with FPGA frequency (in MHz)
+ */
+
+ protected void ioWrite(int addr, int val) throws MemoryAccessException
+ {
+ switch (addr)
+ {
+ case 0x9000:
+ writeTimerSampleReg(val);
+ case 0xc000:
+ syscall.writeUART(val);
+ break;
+ default:
+ throw new MemoryAccessException();
+ }
+ }
+
+ Abel() throws CPUException
+ {
+ }
+
+ protected boolean emulateConfig()
+ {
+ return true;
+ }
+
+ protected int getStartStack()
+ {
+ return getRAMSIZE()-8;
+ }
+
+ protected int getRAMSIZE()
+ {
+ return 32768;
+ }
+
+}
OpenPOWER on IntegriCloud