MCPcopy Create free account
hub / github.com/badvision/jace / handleIOAccess

Method handleIOAccess

src/main/java/jace/hardware/CardRamFactor.java:91–160  ·  view source on GitHub ↗
(int register, TYPE type, int value, RAMEvent e)

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 5

readMemoryMethod · 0.95
writeMemoryMethod · 0.95
updateFirmwareMemoryMethod · 0.95
isReadMethod · 0.80
setNewValueMethod · 0.80

Tested by

no test coverage detected