(int register, TYPE type, int value, RAMEvent e)
| 89 | } |
| 90 | |
| 91 | @Override |
| 92 | protected void handleIOAccess(int register, TYPE type, int value, RAMEvent e) { |
| 93 | // Emulator.getFrame().addIndicator(this, indicator); |
| 94 | value &= 0x0ff; |
| 95 | switch (register) { |
| 96 | case 0: |
| 97 | case 4: |
| 98 | // Lo-byte of pointer |
| 99 | if (type.isRead()) { |
| 100 | e.setNewValue(addressPointer & 0x0ff); |
| 101 | } else { |
| 102 | addressPointer = (addressPointer & 0x0ffff00) | value; |
| 103 | if (RAM_SIZE <= 1024) { |
| 104 | addressPointer |= 0x0f00000; |
| 105 | } |
| 106 | } |
| 107 | break; |
| 108 | case 1: |
| 109 | case 5: |
| 110 | // Mid-byte of pointer |
| 111 | if (type.isRead()) { |
| 112 | e.setNewValue((addressPointer >> 8) & 0x0ff); |
| 113 | } else { |
| 114 | addressPointer = (addressPointer & 0x0ff00ff) | (value << 8); |
| 115 | if (RAM_SIZE <= 1024) { |
| 116 | addressPointer |= 0x0f00000; |
| 117 | } |
| 118 | } |
| 119 | break; |
| 120 | case 2: |
| 121 | case 6: |
| 122 | // Hi-byte of pointer |
| 123 | if (type.isRead()) { |
| 124 | if (RAM_SIZE <= 1024) { |
| 125 | e.setNewValue(0x0f0 | ((addressPointer >> 16) & 0x0ff)); |
| 126 | } else { |
| 127 | e.setNewValue((addressPointer >> 16) & 0x0ff); |
| 128 | } |
| 129 | } else { |
| 130 | addressPointer = (addressPointer & 0x00ffff) | (value << 16); |
| 131 | if (RAM_SIZE <= 1024) { |
| 132 | addressPointer |= 0x0f00000; |
| 133 | } |
| 134 | } |
| 135 | break; |
| 136 | case 3: |
| 137 | case 7: |
| 138 | if (type.isRead()) { |
| 139 | e.setNewValue(readMemory(addressPointer)); |
| 140 | } else { |
| 141 | writeMemory(addressPointer, (byte) value); |
| 142 | } |
| 143 | addressPointer++; |
| 144 | // Keep the pointer in range |
| 145 | addressPointer &= 0x0ffffff; |
| 146 | break; |
| 147 | case 15: { |
| 148 | // Firmware bank select |
nothing calls this directly
no test coverage detected