branches/alto2/src/emu/cpu/alto2/alto2.c
| r26046 | r26047 | |
| 27 | 27 | |
| 28 | 28 | alto2_cpu_device::alto2_cpu_device(const machine_config& mconfig, const char* tag, device_t* owner, UINT32 clock) : |
| 29 | 29 | cpu_device(mconfig, ALTO2, "Xerox Alto-II", tag, owner, clock, "alto2", __FILE__), |
| 30 | | m_ucode_config("program", ENDIANNESS_BIG, 32, 32, 0), |
| 31 | | m_ram_config("io", ENDIANNESS_BIG, 16, 16, 0) |
| 30 | /* name, endianness_t endian, datawidth, addrwidth, addrshift = 0, address_map_constructor internal = NULL, address_map_constructor defmap = NULL */ |
| 31 | m_ucode_config("microcode", ENDIANNESS_BIG, 32, 16, 0), |
| 32 | m_const_config("constants", ENDIANNESS_BIG, 16, 8, 0), |
| 33 | m_ram_config("memory", ENDIANNESS_BIG, 16, 17, 0) |
| 32 | 34 | { |
| 33 | 35 | } |
| 34 | 36 | |
| r26046 | r26047 | |
| 39 | 41 | // FIXME |
| 40 | 42 | void alto2_cpu_device::device_start() |
| 41 | 43 | { |
| 44 | m_ucode = &space(AS_PROGRAM); |
| 45 | m_const = &space(AS_DATA); |
| 46 | m_ram = &space(AS_IO); |
| 42 | 47 | |
| 48 | save_item(NAME(m_task_mpc)); |
| 49 | save_item(NAME(m_task_next2)); |
| 50 | save_item(NAME(m_ntime)); |
| 51 | save_item(NAME(m_task)); |
| 52 | save_item(NAME(m_next_task)); |
| 53 | save_item(NAME(m_next2_task)); |
| 54 | save_item(NAME(m_mpc)); |
| 55 | save_item(NAME(m_mir)); |
| 56 | save_item(NAME(m_rsel)); |
| 57 | save_item(NAME(m_next)); |
| 58 | save_item(NAME(m_next2)); |
| 59 | save_item(NAME(m_r)); |
| 60 | save_item(NAME(m_s)); |
| 61 | save_item(NAME(m_bus)); |
| 62 | save_item(NAME(m_t)); |
| 63 | save_item(NAME(m_alu)); |
| 64 | save_item(NAME(m_aluc0)); |
| 65 | save_item(NAME(m_l)); |
| 66 | save_item(NAME(m_shifter)); |
| 67 | save_item(NAME(m_laluc0)); |
| 68 | save_item(NAME(m_m)); |
| 69 | save_item(NAME(m_cram_addr)); |
| 70 | save_item(NAME(m_task_wakeup)); |
| 71 | save_item(NAME(m_reset_mode)); |
| 72 | save_item(NAME(m_rdram_flag)); |
| 73 | save_item(NAME(m_wrtram_flag)); |
| 74 | save_item(NAME(m_s_reg_bank)); |
| 75 | save_item(NAME(m_bank_reg)); |
| 76 | save_item(NAME(m_ether_enable)); |
| 77 | save_item(NAME(m_ewfct)); |
| 78 | save_item(NAME(m_dsp_time)); |
| 79 | save_item(NAME(m_dsp_state)); |
| 80 | save_item(NAME(m_unload_time)); |
| 81 | save_item(NAME(m_unload_word)); |
| 82 | save_item(NAME(m_mouse.x)); |
| 83 | save_item(NAME(m_mouse.y)); |
| 84 | save_item(NAME(m_mouse.dx)); |
| 85 | save_item(NAME(m_mouse.dy)); |
| 86 | save_item(NAME(m_mouse.latch)); |
| 87 | save_item(NAME(m_unit_selected)); |
| 88 | save_item(NAME(m_head_selected)); |
| 89 | save_item(NAME(m_dsk.drive)); |
| 90 | save_item(NAME(m_dsk.kaddr)); |
| 91 | save_item(NAME(m_dsk.kadr)); |
| 92 | save_item(NAME(m_dsk.kstat)); |
| 93 | save_item(NAME(m_dsk.kcom)); |
| 94 | save_item(NAME(m_dsk.krecno)); |
| 95 | save_item(NAME(m_dsk.shiftin)); |
| 96 | save_item(NAME(m_dsk.shiftout)); |
| 97 | save_item(NAME(m_dsk.datain)); |
| 98 | save_item(NAME(m_dsk.dataout)); |
| 99 | save_item(NAME(m_dsk.krwc)); |
| 100 | save_item(NAME(m_dsk.kfer)); |
| 101 | save_item(NAME(m_dsk.wdtskena)); |
| 102 | save_item(NAME(m_dsk.wdinit0)); |
| 103 | save_item(NAME(m_dsk.wdinit)); |
| 104 | save_item(NAME(m_dsk.strobe)); |
| 105 | save_item(NAME(m_dsk.bitclk)); |
| 106 | save_item(NAME(m_dsk.datin)); |
| 107 | save_item(NAME(m_dsk.bitcount)); |
| 108 | save_item(NAME(m_dsk.carry)); |
| 109 | save_item(NAME(m_dsk.seclate)); |
| 110 | save_item(NAME(m_dsk.seekok)); |
| 111 | save_item(NAME(m_dsk.ok_to_run)); |
| 112 | save_item(NAME(m_dsk.ready_mf31a)); |
| 113 | save_item(NAME(m_dsk.seclate_mf31b)); |
| 114 | #if 0 |
| 115 | save_item(NAME(m_dsk.ff_21a)); |
| 116 | save_item(NAME(m_dsk.ff_21a_old)); |
| 117 | save_item(NAME(m_dsk.ff_21b)); |
| 118 | save_item(NAME(m_dsk.ff_22a)); |
| 119 | save_item(NAME(m_dsk.ff_22b)); |
| 120 | save_item(NAME(m_dsk.ff_43b)); |
| 121 | save_item(NAME(m_dsk.ff_53a)); |
| 122 | save_item(NAME(m_dsk.ff_43a)); |
| 123 | save_item(NAME(m_dsk.ff_53b)); |
| 124 | save_item(NAME(m_dsk.ff_44a)); |
| 125 | save_item(NAME(m_dsk.ff_44b)); |
| 126 | save_item(NAME(m_dsk.ff_45a)); |
| 127 | save_item(NAME(m_dsk.ff_45b)); |
| 128 | #endif |
| 129 | save_item(NAME(m_dsp.hlc)); |
| 130 | save_item(NAME(m_dsp.a63)); |
| 131 | save_item(NAME(m_dsp.a66)); |
| 132 | save_item(NAME(m_dsp.setmode)); |
| 133 | save_item(NAME(m_dsp.inverse)); |
| 134 | save_item(NAME(m_dsp.halfclock)); |
| 135 | save_item(NAME(m_dsp.clr)); |
| 136 | save_item(NAME(m_dsp.fifo)); |
| 137 | save_item(NAME(m_dsp.fifo_wr)); |
| 138 | save_item(NAME(m_dsp.fifo_rd)); |
| 139 | save_item(NAME(m_dsp.dht_blocks)); |
| 140 | save_item(NAME(m_dsp.dwt_blocks)); |
| 141 | save_item(NAME(m_dsp.curt_blocks)); |
| 142 | save_item(NAME(m_dsp.curt_wakeup)); |
| 143 | save_item(NAME(m_dsp.vblank)); |
| 144 | save_item(NAME(m_dsp.xpreg)); |
| 145 | save_item(NAME(m_dsp.csr)); |
| 146 | save_item(NAME(m_dsp.curword)); |
| 147 | save_item(NAME(m_dsp.curdata)); |
| 148 | save_item(NAME(m_mem.mar)); |
| 149 | save_item(NAME(m_mem.rmdd)); |
| 150 | save_item(NAME(m_mem.wmdd)); |
| 151 | save_item(NAME(m_mem.md)); |
| 152 | save_item(NAME(m_mem.cycle)); |
| 153 | save_item(NAME(m_mem.access)); |
| 154 | save_item(NAME(m_mem.error)); |
| 155 | save_item(NAME(m_mem.mear)); |
| 156 | save_item(NAME(m_mem.mecr)); |
| 157 | save_item(NAME(m_emu.ir)); |
| 158 | save_item(NAME(m_emu.skip)); |
| 159 | save_item(NAME(m_emu.cy)); |
| 160 | save_item(NAME(m_eth.fifo)); |
| 161 | save_item(NAME(m_eth.fifo_rd)); |
| 162 | save_item(NAME(m_eth.fifo_wr)); |
| 163 | save_item(NAME(m_eth.status)); |
| 164 | save_item(NAME(m_eth.rx_crc)); |
| 165 | save_item(NAME(m_eth.tx_crc)); |
| 166 | save_item(NAME(m_eth.rx_count)); |
| 167 | save_item(NAME(m_eth.tx_count)); |
| 168 | save_item(NAME(m_eth.duckbreath)); |
| 169 | |
| 170 | state_add( A2_AC3, "AC(3)", m_r[A2_AC3]).formatstr("%04X"); |
| 171 | state_add( A2_AC2, "AC(2)", m_r[A2_AC2]).formatstr("%04X"); |
| 172 | state_add( A2_AC1, "AC(1)", m_r[A2_AC1]).formatstr("%04X"); |
| 173 | state_add( A2_AC0, "AC(0)", m_r[A2_AC0]).formatstr("%04X"); |
| 174 | state_add( A2_R04, "R04", m_r[A2_R04]).formatstr("%04X"); |
| 175 | state_add( A2_R05, "R05", m_r[A2_R05]).formatstr("%04X"); |
| 176 | state_add( A2_PC, "PC", m_r[A2_PC]).formatstr("%04X"); |
| 177 | state_add( A2_R07, "R07", m_r[A2_R07]).formatstr("%04X"); |
| 178 | state_add( A2_R10, "R10", m_r[A2_R10]).formatstr("%04X"); |
| 179 | state_add( A2_R11, "R11", m_r[A2_R11]).formatstr("%04X"); |
| 180 | state_add( A2_R12, "R12", m_r[A2_R12]).formatstr("%04X"); |
| 181 | state_add( A2_R13, "R13", m_r[A2_R13]).formatstr("%04X"); |
| 182 | state_add( A2_R14, "R14", m_r[A2_R14]).formatstr("%04X"); |
| 183 | state_add( A2_R15, "R15", m_r[A2_R15]).formatstr("%04X"); |
| 184 | state_add( A2_R16, "R16", m_r[A2_R16]).formatstr("%04X"); |
| 185 | state_add( A2_R17, "R17", m_r[A2_R17]).formatstr("%04X"); |
| 186 | state_add( A2_R20, "R20", m_r[A2_R20]).formatstr("%04X"); |
| 187 | state_add( A2_R21, "R21", m_r[A2_R21]).formatstr("%04X"); |
| 188 | state_add( A2_R22, "R22", m_r[A2_R22]).formatstr("%04X"); |
| 189 | state_add( A2_R23, "R23", m_r[A2_R23]).formatstr("%04X"); |
| 190 | state_add( A2_R24, "R24", m_r[A2_R24]).formatstr("%04X"); |
| 191 | state_add( A2_R25, "R25", m_r[A2_R25]).formatstr("%04X"); |
| 192 | state_add( A2_R26, "R26", m_r[A2_R26]).formatstr("%04X"); |
| 193 | state_add( A2_R27, "R27", m_r[A2_R27]).formatstr("%04X"); |
| 194 | state_add( A2_R30, "R30", m_r[A2_R30]).formatstr("%04X"); |
| 195 | state_add( A2_R31, "R31", m_r[A2_R31]).formatstr("%04X"); |
| 196 | state_add( A2_R32, "R32", m_r[A2_R32]).formatstr("%04X"); |
| 197 | state_add( A2_R33, "R33", m_r[A2_R33]).formatstr("%04X"); |
| 198 | state_add( A2_R34, "R34", m_r[A2_R34]).formatstr("%04X"); |
| 199 | state_add( A2_R35, "R35", m_r[A2_R35]).formatstr("%04X"); |
| 200 | state_add( A2_R36, "R36", m_r[A2_R36]).formatstr("%04X"); |
| 201 | state_add( A2_R37, "R37", m_r[A2_R37]).formatstr("%04X"); |
| 202 | |
| 203 | state_add(STATE_GENPC, "curpc", m_mpc).formatstr("%03X").noshow(); |
| 204 | state_add(STATE_GENFLAGS, "GENFLAGS", m_aluc0).formatstr("%5s").noshow(); |
| 205 | |
| 206 | m_icountptr = &m_icount; |
| 207 | |
| 208 | // reverse dwords and invert hardware specific bits |
| 209 | for (UINT32 addr = 0; addr < ALTO2_UCODE_PAGE_SIZE; addr++) { |
| 210 | UINT32 ucode = m_ucode->read_dword(4*addr); |
| 211 | ucode ^= ALTO2_UCODE_INVERTED; |
| 212 | m_ucode->write_dword(4*addr, ucode); |
| 213 | } |
| 214 | for (UINT32 addr = 0; addr < ALTO2_UCODE_PAGE_SIZE; addr++) { |
| 215 | UINT32 ucode = m_ucode->read_dword(4*(ALTO2_UCODE_PAGE_SIZE+addr)); |
| 216 | ucode ^= ALTO2_UCODE_INVERTED; |
| 217 | m_ucode->write_dword(4*(ALTO2_UCODE_PAGE_SIZE+addr), ucode); |
| 218 | } |
| 219 | |
| 220 | for (UINT32 addr = 0; addr < 256; addr++) { |
| 221 | printf("%02x: %04x\n", addr, m_const->read_word(addr)); |
| 222 | } |
| 223 | |
| 224 | hard_reset(); |
| 43 | 225 | } |
| 44 | 226 | |
| 45 | 227 | //------------------------------------------------- |
| r26046 | r26047 | |
| 49 | 231 | // FIXME |
| 50 | 232 | void alto2_cpu_device::device_reset() |
| 51 | 233 | { |
| 52 | | |
| 234 | soft_reset(); |
| 53 | 235 | } |
| 54 | 236 | |
| 55 | 237 | //------------------------------------------------- |
| r26046 | r26047 | |
| 60 | 242 | // FIXME |
| 61 | 243 | void alto2_cpu_device::execute_set_input(int inputnum, int state) |
| 62 | 244 | { |
| 63 | | |
| 64 | 245 | } |
| 65 | 246 | |
| 66 | 247 | //------------------------------------------------- |
| r26046 | r26047 | |
| 852 | 1033 | LOG((0,0,"invalid address (%06o)\n", val)); |
| 853 | 1034 | return; |
| 854 | 1035 | } |
| 855 | | val = m_ucode_raw[addr] ^ ALTO2_UCODE_INVERTED; |
| 1036 | val = m_ucode->read_dword(addr) ^ ALTO2_UCODE_INVERTED; |
| 856 | 1037 | if (GET_CRAM_HALFSEL(m_cram_addr)) { |
| 857 | 1038 | val = val >> 16; |
| 858 | 1039 | LOG((0,0,"upper:%06o\n", val)); |
| r26046 | r26047 | |
| 889 | 1070 | return; |
| 890 | 1071 | } |
| 891 | 1072 | LOG((0,0,"\n")); |
| 892 | | m_ucode_raw[addr] = ((m_m << 16) | m_alu) ^ ALTO2_UCODE_INVERTED; |
| 1073 | m_ucode->write_dword(addr, ((m_m << 16) | m_alu) ^ ALTO2_UCODE_INVERTED); |
| 893 | 1074 | } |
| 894 | 1075 | |
| 895 | 1076 | #if USE_ALU_74181 |
| r26046 | r26047 | |
| 1264 | 1445 | m_next = m_task_mpc[m_task]; // get current task's next mpc and address modifier |
| 1265 | 1446 | m_next2 = m_task_next2[m_task]; |
| 1266 | 1447 | |
| 1267 | | for (;;) { |
| 1448 | do { |
| 1268 | 1449 | int do_bs, flags; |
| 1269 | 1450 | UINT32 alu; |
| 1270 | 1451 | UINT8 aluf; |
| r26046 | r26047 | |
| 1306 | 1487 | |
| 1307 | 1488 | /* next instruction's mpc */ |
| 1308 | 1489 | m_mpc = m_next; |
| 1309 | | m_mir = m_ucode_raw[m_mpc]; |
| 1490 | debugger_instruction_hook(this, m_next); |
| 1491 | m_mir = m_ucode->read_dword(m_mpc); |
| 1310 | 1492 | m_rsel = MIR_RSEL(m_mir); |
| 1311 | 1493 | m_next = MIR_NEXT(m_mir) | m_next2; |
| 1312 | | m_next2 = A2_GET32(m_ucode_raw[m_next], 32, NEXT0, NEXT9) | (m_next2 & ~ALTO2_UCODE_PAGE_MASK); |
| 1494 | m_next2 = A2_GET32(m_ucode->read_dword(m_next), 32, NEXT0, NEXT9) | (m_next2 & ~ALTO2_UCODE_PAGE_MASK); |
| 1313 | 1495 | aluf = MIR_ALUF(m_mir); |
| 1314 | 1496 | bs = MIR_BS(m_mir); |
| 1315 | 1497 | f1 = MIR_F1(m_mir); |
| r26046 | r26047 | |
| 1778 | 1960 | } |
| 1779 | 1961 | } |
| 1780 | 1962 | } |
| 1781 | | } |
| 1963 | } while (m_icount-- > 0); |
| 1782 | 1964 | |
| 1783 | 1965 | /* save this task's mpc and address modifier */ |
| 1784 | 1966 | m_task_mpc[m_task] = m_next; |
branches/alto2/src/emu/cpu/alto2/alto2dsm.c
| r26046 | r26047 | |
| 180 | 180 | |
| 181 | 181 | if (a < 020) { |
| 182 | 182 | // start value for mpc per task is the task number |
| 183 | | snprintf(dst, sizeof(buffer[0]), "→%s", taskname[a]); |
| 183 | snprintf(dst, sizeof(buffer[0]), "*%s", taskname[a]); |
| 184 | 184 | } else { |
| 185 | 185 | snprintf(dst, sizeof(buffer[0]), "%04o", a); |
| 186 | 186 | } |
| r26046 | r26047 | |
| 189 | 189 | |
| 190 | 190 | offs_t alto2_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) |
| 191 | 191 | { |
| 192 | | const UINT8* src; |
| 193 | 192 | size_t len = 128; |
| 194 | 193 | |
| 195 | | src = oprom + 4 * pc; |
| 196 | | UINT32 mir = (static_cast<UINT32>(src[0]) << 24) | |
| 197 | | (static_cast<UINT32>(src[1]) << 16) | |
| 198 | | (static_cast<UINT32>(src[2]) << 8) | |
| 199 | | (static_cast<UINT32>(src[3])); |
| 194 | UINT32 mir = (static_cast<UINT32>(oprom[0]) << 24) | |
| 195 | (static_cast<UINT32>(oprom[1]) << 16) | |
| 196 | (static_cast<UINT32>(oprom[2]) << 8) | |
| 197 | (static_cast<UINT32>(oprom[3])); |
| 200 | 198 | UINT8 rsel = static_cast<UINT8>((mir >> 27) & 31); |
| 201 | 199 | UINT8 aluf = static_cast<UINT8>((mir >> 23) & 15); |
| 202 | 200 | UINT8 bs = static_cast<UINT8>((mir >> 20) & 7); |
| r26046 | r26047 | |
| 205 | 203 | UINT8 t = static_cast<UINT8>((mir >> 11) & 1); |
| 206 | 204 | UINT8 l = static_cast<UINT8>((mir >> 10) & 1); |
| 207 | 205 | offs_t next = static_cast<offs_t>(mir & 1023); |
| 208 | | src = oprom + 4 * next; |
| 206 | const UINT8* src = oprom + 4 * next; |
| 209 | 207 | UINT32 next2 = (static_cast<UINT32>(src[0]) << 24) | |
| 210 | 208 | (static_cast<UINT32>(src[1]) << 16) | |
| 211 | 209 | (static_cast<UINT32>(src[2]) << 8) | |
| r26046 | r26047 | |
| 214 | 212 | char *dst = buffer; |
| 215 | 213 | int pa; |
| 216 | 214 | |
| 215 | dst += snprintf(dst, len - (size_t)(dst - buffer), "[%08X] ", mir); |
| 217 | 216 | switch (aluf) { |
| 218 | 217 | case 0: // T?: BUS |
| 219 | 218 | if (t) |
| 220 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU "); |
| 219 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU "); |
| 221 | 220 | if (l) |
| 222 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 221 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 223 | 222 | if (bs == 1) |
| 224 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 223 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 225 | 224 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS) "); |
| 226 | 225 | break; |
| 227 | 226 | case 1: // : T |
| 228 | 227 | if (t) |
| 229 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS "); |
| 228 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS "); |
| 230 | 229 | if (l) |
| 231 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 230 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 232 | 231 | if (bs == 1) |
| 233 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 232 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 234 | 233 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(T) "); |
| 235 | 234 | break; |
| 236 | 235 | case 2: // T?: BUS OR T |
| 237 | 236 | if (t) |
| 238 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU "); |
| 237 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU "); |
| 239 | 238 | if (l) |
| 240 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 239 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 241 | 240 | if (bs == 1) |
| 242 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 241 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 243 | 242 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS OR T) "); |
| 244 | 243 | break; |
| 245 | 244 | case 3: // : BUS AND T |
| 246 | 245 | if (t) |
| 247 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS "); |
| 246 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS "); |
| 248 | 247 | if (l) |
| 249 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 248 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 250 | 249 | if (bs == 1) |
| 251 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 250 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 252 | 251 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS AND T) "); |
| 253 | 252 | break; |
| 254 | 253 | case 4: // : BUS XOR T |
| 255 | 254 | if (t) |
| 256 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS "); |
| 255 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS "); |
| 257 | 256 | if (l) |
| 258 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 257 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 259 | 258 | if (bs == 1) |
| 260 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 259 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 261 | 260 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS XOR T) "); |
| 262 | 261 | break; |
| 263 | 262 | case 5: // T?: BUS + 1 |
| 264 | 263 | if (t) |
| 265 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU "); |
| 264 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU "); |
| 266 | 265 | if (l) |
| 267 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 266 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 268 | 267 | if (bs == 1) |
| 269 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 268 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 270 | 269 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + 1) "); |
| 271 | 270 | break; |
| 272 | 271 | case 6: // T?: BUS - 1 |
| 273 | 272 | if (t) |
| 274 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU "); |
| 273 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU "); |
| 275 | 274 | if (l) |
| 276 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 275 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 277 | 276 | if (bs == 1) |
| 278 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 277 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 279 | 278 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS - 1) "); |
| 280 | 279 | break; |
| 281 | 280 | case 7: // : BUS + T |
| 282 | 281 | if (t) |
| 283 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS "); |
| 282 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS "); |
| 284 | 283 | if (l) |
| 285 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 284 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 286 | 285 | if (bs == 1) |
| 287 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 286 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 288 | 287 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + T) "); |
| 289 | 288 | break; |
| 290 | 289 | case 8: // : BUS - T |
| 291 | 290 | if (t) |
| 292 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS "); |
| 291 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS "); |
| 293 | 292 | if (l) |
| 294 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 293 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 295 | 294 | if (bs == 1) |
| 296 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 295 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 297 | 296 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS - T) "); |
| 298 | 297 | break; |
| 299 | 298 | case 9: // : BUS - T - 1 |
| 300 | 299 | if (t) |
| 301 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS "); |
| 300 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS "); |
| 302 | 301 | if (l) |
| 303 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 302 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 304 | 303 | if (bs == 1) |
| 305 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 304 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 306 | 305 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS - T - 1) "); |
| 307 | 306 | break; |
| 308 | 307 | case 10: // T?: BUS + T + 1 |
| 309 | 308 | if (t) |
| 310 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU "); |
| 309 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU "); |
| 311 | 310 | if (l) |
| 312 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 311 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 313 | 312 | if (bs == 1) |
| 314 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 313 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 315 | 314 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + T + 1) "); |
| 316 | 315 | break; |
| 317 | 316 | case 11: // T?: BUS + SKIP |
| 318 | 317 | if (t) |
| 319 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU "); |
| 318 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU "); |
| 320 | 319 | if (l) |
| 321 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 320 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 322 | 321 | if (bs == 1) |
| 323 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 322 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 324 | 323 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS + SKIP) "); |
| 325 | 324 | break; |
| 326 | 325 | case 12: // T?: BUS, T (AND) |
| 327 | 326 | if (t) |
| 328 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←ALU "); |
| 327 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-ALU "); |
| 329 | 328 | if (l) |
| 330 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 329 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 331 | 330 | if (bs == 1) |
| 332 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 331 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 333 | 332 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS AND T) "); |
| 334 | 333 | break; |
| 335 | 334 | case 13: // : BUS AND NOT T |
| 336 | 335 | if (t) |
| 337 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS "); |
| 336 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS "); |
| 338 | 337 | if (l) |
| 339 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 338 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 340 | 339 | if (bs == 1) |
| 341 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 340 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 342 | 341 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(BUS AND NOT T) "); |
| 343 | 342 | break; |
| 344 | 343 | case 14: // : undefined |
| 345 | 344 | if (t) |
| 346 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS "); |
| 345 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS "); |
| 347 | 346 | if (l) |
| 348 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 347 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 349 | 348 | if (bs == 1) |
| 350 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 349 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 351 | 350 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(14) "); |
| 352 | 351 | break; |
| 353 | 352 | case 15: // : undefined |
| 354 | 353 | if (t) |
| 355 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "T←BUS "); |
| 354 | dst += snprintf(dst, len - (size_t)(dst - buffer), "T<-BUS "); |
| 356 | 355 | if (l) |
| 357 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "L← "); |
| 356 | dst += snprintf(dst, len - (size_t)(dst - buffer), "L<- "); |
| 358 | 357 | if (bs == 1) |
| 359 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s← ", regname[rsel]); |
| 358 | dst += snprintf(dst, len - (size_t)(dst - buffer), "%s<- ", regname[rsel]); |
| 360 | 359 | dst += snprintf(dst, len - (size_t)(dst - buffer), "ALUF(15) "); |
| 361 | 360 | break; |
| 362 | 361 | } |
| 363 | 362 | |
| 364 | 363 | switch (bs) { |
| 365 | 364 | case 0: // read R |
| 366 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←%s ", regname[rsel]); |
| 365 | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-%s ", regname[rsel]); |
| 367 | 366 | break; |
| 368 | 367 | case 1: // load R from shifter output |
| 369 | | // dst += snprintf(dst, len - (size_t)(dst - buffer), "; %s←", rn[rsel]); |
| 368 | // dst += snprintf(dst, len - (size_t)(dst - buffer), "; %s<-", rn[rsel]); |
| 370 | 369 | break; |
| 371 | 370 | case 2: // enables no source to the BUS, leaving it all ones |
| 372 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←177777 "); |
| 371 | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-177777 "); |
| 373 | 372 | break; |
| 374 | 373 | case 3: // performs different functions in different tasks |
| 375 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←BS3 "); |
| 374 | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-BS3 "); |
| 376 | 375 | break; |
| 377 | 376 | case 4: // performs different functions in different tasks |
| 378 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←BS4 "); |
| 377 | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-BS4 "); |
| 379 | 378 | break; |
| 380 | 379 | case 5: // memory data |
| 381 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←MD "); |
| 380 | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-MD "); |
| 382 | 381 | break; |
| 383 | 382 | case 6: // BUS[3-0] <- MOUSE; BUS[15-4] <- -1 |
| 384 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←MOUSE "); |
| 383 | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-MOUSE "); |
| 385 | 384 | break; |
| 386 | 385 | case 7: // IR[7-0], possibly sign extended |
| 387 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←DISP "); |
| 386 | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-DISP "); |
| 388 | 387 | break; |
| 389 | 388 | } |
| 390 | 389 | |
| r26046 | r26047 | |
| 393 | 392 | case 0: // no operation |
| 394 | 393 | break; |
| 395 | 394 | case 1: // load MAR from ALU output; start main memory reference |
| 396 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "MAR←ALU "); |
| 395 | dst += snprintf(dst, len - (size_t)(dst - buffer), "MAR<-ALU "); |
| 397 | 396 | break; |
| 398 | 397 | case 2: // switch tasks if higher priority wakeup is pending |
| 399 | 398 | dst += snprintf(dst, len - (size_t)(dst - buffer), "[TASK] "); |
| r26046 | r26047 | |
| 402 | 401 | dst += snprintf(dst, len - (size_t)(dst - buffer), "[BLOCK] "); |
| 403 | 402 | break; |
| 404 | 403 | case 4: // SHIFTER output will be L shifted left one place |
| 405 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTER←L(LSH1) "); |
| 404 | dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTER<-L(LSH1) "); |
| 406 | 405 | break; |
| 407 | 406 | case 5: // SHIFTER output will be L shifted right one place |
| 408 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTER←L(RSH1) "); |
| 407 | dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTER<-L(RSH1) "); |
| 409 | 408 | break; |
| 410 | 409 | case 6: // SHIFTER output will be L rotated left 8 places |
| 411 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTER←L(LCY8) "); |
| 410 | dst += snprintf(dst, len - (size_t)(dst - buffer), "SHIFTER<-L(LCY8) "); |
| 412 | 411 | break; |
| 413 | 412 | case 7: // put the constant from PROM (RSELECT,BS) on the bus |
| 414 | 413 | pa = (rsel << 3) | bs; |
| 415 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←[%03o]%05o ", pa, const_prom[pa]); |
| 414 | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-[%03o]%05o ", pa, const_prom[pa]); |
| 416 | 415 | break; |
| 417 | 416 | default: |
| 418 | 417 | dst += snprintf(dst, len - (size_t)(dst - buffer), "F1_%02o ", f1); |
| r26046 | r26047 | |
| 422 | 421 | switch (f2) { |
| 423 | 422 | case 0: // no operation |
| 424 | 423 | break; |
| 425 | | case 1: // NEXT ← NEXT OR (if (BUS=0) then 1 else 0) |
| 424 | case 1: // NEXT <- NEXT OR (if (BUS=0) then 1 else 0) |
| 426 | 425 | dst += snprintf(dst, len - (size_t)(dst - buffer), "[(BUS=0) ? %s : %s] ", |
| 427 | 426 | addrname((prefetch | 1) & MCODE_MASK), |
| 428 | 427 | addrname(prefetch & MCODE_MASK)); |
| 429 | 428 | break; |
| 430 | | case 2: // NEXT ← NEXT OR (if (SHIFTER OUTPUT<0) then 1 else 0) |
| 429 | case 2: // NEXT <- NEXT OR (if (SHIFTER OUTPUT<0) then 1 else 0) |
| 431 | 430 | dst += snprintf(dst, len - (size_t)(dst - buffer), "[(SH=0) ? %s : %s] ", |
| 432 | 431 | addrname((prefetch | 1) & MCODE_MASK), |
| 433 | 432 | addrname(prefetch & MCODE_MASK)); |
| 434 | 433 | break; |
| 435 | | case 3: // NEXT ← NEXT OR (if (SHIFTER OUTPUT<0) then 1 else 0) |
| 434 | case 3: // NEXT <- NEXT OR (if (SHIFTER OUTPUT<0) then 1 else 0) |
| 436 | 435 | dst += snprintf(dst, len - (size_t)(dst - buffer), "[(SH<0) ? %s : %s] ", |
| 437 | 436 | addrname((prefetch | 1) & MCODE_MASK), |
| 438 | 437 | addrname(prefetch & MCODE_MASK)); |
| 439 | 438 | break; |
| 440 | | case 4: // NEXT ← NEXT OR BUS |
| 441 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "NEXT←BUS "); |
| 439 | case 4: // NEXT <- NEXT OR BUS |
| 440 | dst += snprintf(dst, len - (size_t)(dst - buffer), "NEXT<-BUS "); |
| 442 | 441 | break; |
| 443 | | case 5: // NEXT ← NEXT OR ALUC0. ALUC0 is the carry produced by last L loading microinstruction. |
| 442 | case 5: // NEXT <- NEXT OR ALUC0. ALUC0 is the carry produced by last L loading microinstruction. |
| 444 | 443 | dst += snprintf(dst, len - (size_t)(dst - buffer), "[(ALUC0) ? %s : %s] ", |
| 445 | 444 | addrname((prefetch | 1) & MCODE_MASK), |
| 446 | 445 | addrname(prefetch & MCODE_MASK)); |
| 447 | 446 | break; |
| 448 | 447 | case 6: // deliver BUS data to memory |
| 449 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "MD←BUS "); |
| 448 | dst += snprintf(dst, len - (size_t)(dst - buffer), "MD<-BUS "); |
| 450 | 449 | break; |
| 451 | 450 | case 7: // put on the bus the constant from PROM (RSELECT,BS) |
| 452 | 451 | pa = (rsel << 3) | bs; |
| 453 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←[%03o]%05o ", pa, const_prom[pa]); |
| 452 | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-[%03o]%05o ", pa, const_prom[pa]); |
| 454 | 453 | break; |
| 455 | 454 | default: |
| 456 | | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS←F2_%02o ", f2); |
| 455 | dst += snprintf(dst, len - (size_t)(dst - buffer), "BUS<-F2_%02o ", f2); |
| 457 | 456 | break; |
| 458 | 457 | } |
| 459 | | return pc + 4; |
| 458 | return 4; |
| 460 | 459 | } |
branches/alto2/src/mess/drivers/alto2.c
| r26046 | r26047 | |
| 11 | 11 | #include "includes/alto2.h" |
| 12 | 12 | |
| 13 | 13 | |
| 14 | // FIXME: Is this required? How to access the address space dwords? |
| 14 | 15 | READ32_MEMBER( alto2_state::alto2_ucode_r ) |
| 15 | 16 | { |
| 16 | 17 | return 0; |
| 17 | 18 | } |
| 18 | 19 | |
| 20 | // FIXME: Is this required? How to access the address space dwords? |
| 19 | 21 | WRITE32_MEMBER( alto2_state::alto2_ucode_w ) |
| 20 | 22 | { |
| 21 | 23 | |
| 22 | 24 | } |
| 23 | 25 | |
| 26 | // FIXME: Is this required? How to access the address space words? |
| 27 | // This has to somehow be mapped to the a2mem half DWORD accesses |
| 28 | // and (optionally) Hamming code and parity flag updating |
| 24 | 29 | READ16_MEMBER( alto2_state::alto2_ram_r ) |
| 25 | 30 | { |
| 26 | 31 | return 0; |
| 27 | 32 | } |
| 28 | 33 | |
| 34 | // FIXME: Is this required? How to access the address space words? |
| 35 | // This has to somehow be mapped to the a2mem half DWORD accesses |
| 36 | // and (optionally) Hamming code and parity flag updating |
| 29 | 37 | WRITE16_MEMBER( alto2_state::alto2_ram_w ) |
| 30 | 38 | { |
| 31 | 39 | |
| 32 | 40 | } |
| 33 | 41 | |
| 42 | // FIXME: Dispatch to the a2mem mmio handlers |
| 34 | 43 | READ16_MEMBER( alto2_state::alto2_mmio_r ) |
| 35 | 44 | { |
| 36 | 45 | return 0; |
| 37 | 46 | } |
| 38 | 47 | |
| 48 | // FIXME: Dispatch to the a2mem mmio handlers |
| 39 | 49 | WRITE16_MEMBER( alto2_state::alto2_mmio_w ) |
| 40 | 50 | { |
| 41 | 51 | |
| r26046 | r26047 | |
| 43 | 53 | |
| 44 | 54 | /* Memory Maps */ |
| 45 | 55 | |
| 56 | /* micro code from ALTO2_UCODE_ROM_PAGES times PROMs and ALTO2_UCODE_RAM_PAGES times RAMs of ALTO2_UCODE_PAGE_SIZE 32-bit words each */ |
| 46 | 57 | static ADDRESS_MAP_START( alto2_ucode_map, AS_PROGRAM, 32, alto2_state ) |
| 47 | 58 | AM_RANGE(0, ALTO2_UCODE_RAM_BASE-1) AM_ROM |
| 48 | 59 | AM_RANGE(ALTO2_UCODE_RAM_BASE, ALTO2_UCODE_SIZE-1) AM_READWRITE(alto2_ucode_r, alto2_ucode_w) |
| 49 | 60 | ADDRESS_MAP_END |
| 50 | 61 | |
| 62 | /* constant PROM with 256 16-bit words */ |
| 63 | static ADDRESS_MAP_START( alto2_const_map, AS_DATA, 16, alto2_state ) |
| 64 | AM_RANGE(0, 255) AM_ROM |
| 65 | ADDRESS_MAP_END |
| 66 | |
| 67 | /* main memory and memory mapped i/o in range ALTO2_IO_PAGE_BASE ... ALTO2_IO_PAGE_BASE + ALTO2_IO_PAGE_SIZE - 1 */ |
| 51 | 68 | static ADDRESS_MAP_START( alto2_ram_map, AS_IO, 16, alto2_state ) |
| 52 | 69 | AM_RANGE(0, ALTO2_IO_PAGE_BASE - 1) AM_READWRITE(alto2_ram_r, alto2_ram_w) |
| 53 | 70 | AM_RANGE(ALTO2_IO_PAGE_BASE, 0177777) AM_READWRITE(alto2_mmio_r, alto2_mmio_w) |
| r26046 | r26047 | |
| 274 | 291 | /* basic machine hardware */ |
| 275 | 292 | MCFG_CPU_ADD("maincpu", ALTO2, XTAL_20_16MHz) |
| 276 | 293 | MCFG_CPU_PROGRAM_MAP(alto2_ucode_map) |
| 294 | MCFG_CPU_DATA_MAP(alto2_const_map) |
| 277 | 295 | MCFG_CPU_IO_MAP(alto2_ram_map) |
| 278 | 296 | |
| 279 | 297 | /* video hardware */ |
| r26046 | r26047 | |
| 288 | 306 | /* ROMs */ |
| 289 | 307 | |
| 290 | 308 | ROM_START(alto2) |
| 291 | | ROM_REGION( 01500, "2k_ctrl", 0 ) |
| 292 | | ROMX_LOAD( "2kctl.u3", 00000, 00400, CRC(5f8d89e8) SHA1(487cd944ab074290aea73425e81ef4900d92e250), ROM_NIBBLE) //!< 3601-1 256x4 BPROM; Emulator address modifier |
| 293 | | ROMX_LOAD( "2kctl.u76", 00400, 00400, CRC(1edef867) SHA1(928b8a15ac515a99109f32672441832173883b81), ROM_NIBBLE) //!< 3601-1 256x4 BPROM; 2KCTL replacement for u51 (1KCTL) |
| 294 | | ROMX_LOAD( "3kcram.a37", 01000, 00400, CRC(9417360d) SHA1(bfcdbc56ee4ffafd0f2f672c0c869a55d6dd194b), ROM_NIBBLE) |
| 295 | | ROMX_LOAD( "2kctl.u38", 01400, 00040, CRC(fc51b1d1) SHA1(e36c2a12a5da377394264899b5ae504e2ffda46e), 0) //!< 82S23 32x8 BPROM; task priority and initial address |
| 296 | | ROMX_LOAD( "alu.a10", 01440, 00040, CRC(e0857892) SHA1(dcd389767139f0acc1f87cf074459115abc5b90b), ROM_NIBBLE) |
| 297 | | |
| 298 | | ROM_REGION16_BE( 0400, "const", 0 ) |
| 299 | | // constant PROMs, 4 x 4bit |
| 300 | | // UINT16 src = BITS(addr, 3,2,1,4,5,6,7,0); |
| 301 | | // UINT16 u16 = ~((const[src] << 8) | (const[src+0x100)); |
| 302 | | // m_const[addr] = u16; |
| 303 | | ROMX_LOAD( "madr.a6", 00000, 00400, CRC(c2c196b2) SHA1(8b2a599ac839ec2a070dbfef2f1626e645c858ca), ROM_NIBBLE | ROM_BITSHIFT(12)) //!< 0000-0377 C(00)',C(01)',C(02)',C(03)' |
| 304 | | ROMX_LOAD( "madr.a5", 00000, 00400, CRC(42336101) SHA1(c77819cf40f063af3abf66ea43f17cc1a62e928b), ROM_NIBBLE | ROM_BITSHIFT( 8)) //!< 0000-0377 C(04)',C(05)',C(06)',C(07)' |
| 305 | | ROMX_LOAD( "madr.a4", 00000, 00400, CRC(b957e490) SHA1(c72660ad3ada4ca0ed8697c6bb6275a4fe703184), ROM_NIBBLE | ROM_BITSHIFT( 4)) //!< 0000-0377 C(08)',C(09)',C(10)',C(11)' |
| 306 | | ROMX_LOAD( "madr.a3", 00000, 00400, CRC(e0992757) SHA1(5c45ea824970663cb9ee672dc50861539c860249), ROM_NIBBLE | ROM_BITSHIFT( 0)) //!< 0000-0377 C(12)',C(13)',C(14)',C(15)' |
| 307 | | |
| 308 | | #if 0 // FIXME: just different names - the hashes are the same... remove? |
| 309 | | ROM_REGION16_BE( 0400, "const_alt", 0 ) |
| 310 | | // alternate constant PROMs, 4 x 4bit |
| 311 | | // UINT16 src = BITS(addr, 3,2,1,4,5,6,7,0); |
| 312 | | // UINT16 u16 = ~((const[src] << 8) | (const[src+0x100)); |
| 313 | | // m_const[addr] = u16; |
| 314 | | ROMX_LOAD( "c3.3", 00000, 00400, CRC(c2c196b2) SHA1(8b2a599ac839ec2a070dbfef2f1626e645c858ca), ROM_NIBBLE | ROM_BITSHIFT(12)) //!< 0000-0377 C(00)',C(01)',C(02)',C(03)' |
| 315 | | ROMX_LOAD( "c2.3", 00000, 00400, CRC(42336101) SHA1(c77819cf40f063af3abf66ea43f17cc1a62e928b), ROM_NIBBLE | ROM_BITSHIFT( 8)) //!< 0000-0377 C(04)',C(05)',C(06)',C(07)' |
| 316 | | ROMX_LOAD( "c1.3", 00000, 00400, CRC(b957e490) SHA1(c72660ad3ada4ca0ed8697c6bb6275a4fe703184), ROM_NIBBLE | ROM_BITSHIFT( 4)) //!< 0000-0377 C(08)',C(09)',C(10)',C(11)' |
| 317 | | ROMX_LOAD( "c0.3", 00000, 00400, CRC(e0992757) SHA1(5c45ea824970663cb9ee672dc50861539c860249), ROM_NIBBLE | ROM_BITSHIFT( 0)) //!< 0000-0377 C(12)',C(13)',C(14)',C(15)' |
| 318 | | #endif |
| 319 | | |
| 320 | | ROM_REGION32_BE( 02000, "ucode", ROMREGION_INVERT ) |
| 321 | 309 | // micro code PROMs, 8 x 4bit |
| 322 | 310 | // UINT32 src = addr ^ 0x3ff; |
| 323 | 311 | // UINT32 u32 = ~((ucode[src] << 24) | (ucode[src+0x400] << 16) | (ucode[src+0x800] << 8) | (ucode[src+0xc00)); |
| 324 | 312 | // m_ucode[addr] = u32 ^ ALTO2_UCODE_INVERTED; |
| 325 | | ROMX_LOAD( "55x.3", 00000, 02000, CRC(de870d75) SHA1(2b98cc769d8302cb39948711424d987d94e4159b), ROM_NIBBLE | ROM_BITSHIFT(28)) //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)' |
| 326 | | ROMX_LOAD( "64x.3", 00000, 02000, CRC(51b444c0) SHA1(8756e51f7f3253a55d75886465beb7ee1be6e1c4), ROM_NIBBLE | ROM_BITSHIFT(24)) //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)' |
| 327 | | ROMX_LOAD( "65x.3", 00000, 02000, CRC(741d1437) SHA1(01f7cf07c2173ac93799b2475180bfbbe7e0149b), ROM_NIBBLE | ROM_BITSHIFT(20)) //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)' |
| 328 | | ROMX_LOAD( "63x.3", 00000, 02000, CRC(f22d5028) SHA1(c65a42baef702d4aff2d9ad8e363daec27de6801), ROM_NIBBLE | ROM_BITSHIFT(16)) //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)' |
| 329 | | ROMX_LOAD( "53x.3", 00000, 02000, CRC(3c89a740) SHA1(95d812d489b2bde03884b2f126f961caa6c8ec45), ROM_NIBBLE | ROM_BITSHIFT(12)) //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)' |
| 330 | | ROMX_LOAD( "60x.3", 00000, 02000, CRC(a35de0bf) SHA1(7fa4aead44dcf5393bbfd1706c0ada24aa6fd3ac), ROM_NIBBLE | ROM_BITSHIFT( 8)) //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)' |
| 331 | | ROMX_LOAD( "61x.3", 00000, 02000, CRC(f25bcb2d) SHA1(acb57f3104a8dc4ba750dd1bf22ccc81cce9f084), ROM_NIBBLE | ROM_BITSHIFT( 4)) //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)' |
| 332 | | ROMX_LOAD( "62x.3", 00000, 02000, CRC(1b20a63f) SHA1(41dc86438e91c12b0fe42ffcce6b2ac2eb9e714a), ROM_NIBBLE | ROM_BITSHIFT( 0)) //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)' |
| 313 | ROM_REGION( ALTO2_UCODE_SIZE, "maincpu", ROMREGION_INVERT ) |
| 314 | ROMX_LOAD( "62x.3", 00000, 02000, CRC(1b20a63f) SHA1(41dc86438e91c12b0fe42ffcce6b2ac2eb9e714a), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 0)) //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)' |
| 315 | ROMX_LOAD( "61x.3", 00000, 02000, CRC(f25bcb2d) SHA1(acb57f3104a8dc4ba750dd1bf22ccc81cce9f084), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 4)) //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)' |
| 316 | ROMX_LOAD( "60x.3", 00000, 02000, CRC(a35de0bf) SHA1(7fa4aead44dcf5393bbfd1706c0ada24aa6fd3ac), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 8)) //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)' |
| 317 | ROMX_LOAD( "53x.3", 00000, 02000, CRC(3c89a740) SHA1(95d812d489b2bde03884b2f126f961caa6c8ec45), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(12)) //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)' |
| 318 | ROMX_LOAD( "63x.3", 00000, 02000, CRC(f22d5028) SHA1(c65a42baef702d4aff2d9ad8e363daec27de6801), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(16)) //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)' |
| 319 | ROMX_LOAD( "65x.3", 00000, 02000, CRC(741d1437) SHA1(01f7cf07c2173ac93799b2475180bfbbe7e0149b), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(20)) //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)' |
| 320 | ROMX_LOAD( "64x.3", 00000, 02000, CRC(51b444c0) SHA1(8756e51f7f3253a55d75886465beb7ee1be6e1c4), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(24)) //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)' |
| 321 | ROMX_LOAD( "55x.3", 00000, 02000, CRC(de870d75) SHA1(2b98cc769d8302cb39948711424d987d94e4159b), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(28)) //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)' |
| 333 | 322 | |
| 334 | | ROM_REGION32_BE( 02000, "xm_mesa_5.1", ROMREGION_INVERT ) |
| 335 | 323 | // extended memory Mesa 5.1 micro code PROMs, 8 x 4bit |
| 336 | | ROMX_LOAD( "xm51.u54", 00000, 02000, CRC(11086ae9) SHA1(c394e3fadbfb91801ddc1a70cb25dc6f606c4f76), ROM_NIBBLE | ROM_BITSHIFT(28)) //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)' |
| 337 | | ROMX_LOAD( "xm51.u74", 00000, 02000, CRC(be8224f2) SHA1(ea9abcc3832b26a094319796901237e1e3f238b6), ROM_NIBBLE | ROM_BITSHIFT(24)) //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)' |
| 338 | | ROMX_LOAD( "xm51.u75", 00000, 02000, CRC(dfe3e3ac) SHA1(246fd29f92150a5d5d7627fbb4f2504c7b6cd5ec), ROM_NIBBLE | ROM_BITSHIFT(20)) //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)' |
| 339 | | ROMX_LOAD( "xm51.u73", 00000, 02000, CRC(6c20fa46) SHA1(a054330c65048011f12209aaed5c6da73d95f029), ROM_NIBBLE | ROM_BITSHIFT(16)) //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)' |
| 340 | | ROMX_LOAD( "xm51.u52", 00000, 02000, CRC(0a31eec8) SHA1(4e2ad5daa5e6a6f2143ee4de00c7b625d096fb02), ROM_NIBBLE | ROM_BITSHIFT(12)) //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)' |
| 341 | | ROMX_LOAD( "xm51.u70", 00000, 02000, CRC(5c64ee54) SHA1(0eb16d1b5e5967be7c1bf8c8ef6efdf0518a752c), ROM_NIBBLE | ROM_BITSHIFT( 8)) //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)' |
| 342 | | ROMX_LOAD( "xm51.u71", 00000, 02000, CRC(7283bf71) SHA1(819fdcc407ed0acdd8f12b02db6efbcab7bec19a), ROM_NIBBLE | ROM_BITSHIFT( 4)) //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)' |
| 343 | | ROMX_LOAD( "xm51.u72", 00000, 02000, CRC(a28e5251) SHA1(44dd8ad4ad56541b5394d30ce3521b4d1d561394), ROM_NIBBLE | ROM_BITSHIFT( 0)) //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)' |
| 324 | ROMX_LOAD( "xm51.u72", 02000, 02000, CRC(a28e5251) SHA1(44dd8ad4ad56541b5394d30ce3521b4d1d561394), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 0)) //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)' |
| 325 | ROMX_LOAD( "xm51.u71", 02000, 02000, CRC(7283bf71) SHA1(819fdcc407ed0acdd8f12b02db6efbcab7bec19a), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 4)) //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)' |
| 326 | ROMX_LOAD( "xm51.u70", 02000, 02000, CRC(5c64ee54) SHA1(0eb16d1b5e5967be7c1bf8c8ef6efdf0518a752c), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 8)) //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)' |
| 327 | ROMX_LOAD( "xm51.u52", 02000, 02000, CRC(0a31eec8) SHA1(4e2ad5daa5e6a6f2143ee4de00c7b625d096fb02), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(12)) //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)' |
| 328 | ROMX_LOAD( "xm51.u73", 02000, 02000, CRC(6c20fa46) SHA1(a054330c65048011f12209aaed5c6da73d95f029), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(16)) //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)' |
| 329 | ROMX_LOAD( "xm51.u75", 02000, 02000, CRC(dfe3e3ac) SHA1(246fd29f92150a5d5d7627fbb4f2504c7b6cd5ec), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(20)) //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)' |
| 330 | ROMX_LOAD( "xm51.u74", 02000, 02000, CRC(be8224f2) SHA1(ea9abcc3832b26a094319796901237e1e3f238b6), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(24)) //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)' |
| 331 | ROMX_LOAD( "xm51.u54", 02000, 02000, CRC(11086ae9) SHA1(c394e3fadbfb91801ddc1a70cb25dc6f606c4f76), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(28)) //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)' |
| 344 | 332 | |
| 345 | | ROM_REGION32_BE( 02000, "xm_mesa_4.1", ROMREGION_INVERT ) |
| 346 | | // extended memory Mesa 4.1 (?) micro code PROMs, 8 x 4bit |
| 347 | | ROMX_LOAD( "xm654.41", 00000, 02000, CRC(beace302) SHA1(0002fea03a0261f57365095c4b87385d833f7063), ROM_NIBBLE | ROM_BITSHIFT(28)) //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)' |
| 348 | | ROMX_LOAD( "xm674.41", 00000, 02000, CRC(7db5c097) SHA1(364bc41951baa3ad274031bd49abec1cf5b7a980), ROM_NIBBLE | ROM_BITSHIFT(24)) //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)' |
| 349 | | ROMX_LOAD( "xm675.41", 00000, 02000, CRC(26eac1e7) SHA1(9220a1386afae8de96bdb2cf084afbadeeb61d42), ROM_NIBBLE | ROM_BITSHIFT(20)) //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)' |
| 350 | | ROMX_LOAD( "xm673.41", 00000, 02000, CRC(8173d7e3) SHA1(7fbacf6dccb60dfe9cef88a248c3a1660efddcf4), ROM_NIBBLE | ROM_BITSHIFT(16)) //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)' |
| 351 | | ROMX_LOAD( "xm652.41", 00000, 02000, CRC(ddfa94bb) SHA1(38625e269400aaf38cd07b5dbf36c0087a0f1b92), ROM_NIBBLE | ROM_BITSHIFT(12)) //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)' |
| 352 | | ROMX_LOAD( "xm670.41", 00000, 02000, CRC(1cd187f3) SHA1(0fd5eff7c6b5c2383aa20148a795b80286554675), ROM_NIBBLE | ROM_BITSHIFT( 8)) //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)' |
| 353 | | ROMX_LOAD( "xm671.41", 00000, 02000, CRC(f21b1ad7) SHA1(1e18bdb35de7802892ac373c128f900786d40886), ROM_NIBBLE | ROM_BITSHIFT( 4)) //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)' |
| 354 | | ROMX_LOAD( "xm672.41", 00000, 02000, CRC(110ee075) SHA1(bb72fceba5ce9e5e8c8a0024915006bdd011a3f3), ROM_NIBBLE | ROM_BITSHIFT( 0)) //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)' |
| 333 | // constant PROMs, 4 x 4bit |
| 334 | // UINT16 src = BITS(addr, 3,2,1,4,5,6,7,0); |
| 335 | // UINT16 u16 = ~((const[src] << 8) | (const[src+0x100)); |
| 336 | // m_const[addr] = u16; |
| 337 | ROM_REGION( 0400, "const", ROMREGION_INVERT ) |
| 338 | ROMX_LOAD( "madr.a3", 00000, 00400, CRC(e0992757) SHA1(5c45ea824970663cb9ee672dc50861539c860249), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 0)) //!< 0000-0377 C(12)',C(13)',C(14)',C(15)' |
| 339 | ROMX_LOAD( "madr.a4", 00000, 00400, CRC(b957e490) SHA1(c72660ad3ada4ca0ed8697c6bb6275a4fe703184), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 4)) //!< 0000-0377 C(08)',C(09)',C(10)',C(11)' |
| 340 | ROMX_LOAD( "madr.a5", 00000, 00400, CRC(42336101) SHA1(c77819cf40f063af3abf66ea43f17cc1a62e928b), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 8)) //!< 0000-0377 C(04)',C(05)',C(06)',C(07)' |
| 341 | ROMX_LOAD( "madr.a6", 00000, 00400, CRC(c2c196b2) SHA1(8b2a599ac839ec2a070dbfef2f1626e645c858ca), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(12)) //!< 0000-0377 C(00)',C(01)',C(02)',C(03)' |
| 355 | 342 | |
| 343 | ROM_REGION( 01500, "2k_ctrl", 0 ) |
| 344 | ROMX_LOAD( "2kctl.u3", 00000, 00400, CRC(5f8d89e8) SHA1(487cd944ab074290aea73425e81ef4900d92e250), ROM_NIBBLE) //!< 3601-1 256x4 BPROM; Emulator address modifier |
| 345 | ROMX_LOAD( "2kctl.u76", 00400, 00400, CRC(1edef867) SHA1(928b8a15ac515a99109f32672441832173883b81), ROM_NIBBLE) //!< 3601-1 256x4 BPROM; 2KCTL replacement for u51 (1KCTL) |
| 346 | ROMX_LOAD( "3kcram.a37", 01000, 00400, CRC(9417360d) SHA1(bfcdbc56ee4ffafd0f2f672c0c869a55d6dd194b), ROM_NIBBLE) |
| 347 | ROMX_LOAD( "2kctl.u38", 01400, 00040, CRC(fc51b1d1) SHA1(e36c2a12a5da377394264899b5ae504e2ffda46e), 0) //!< 82S23 32x8 BPROM; task priority and initial address |
| 348 | ROMX_LOAD( "alu.a10", 01440, 00040, CRC(e0857892) SHA1(dcd389767139f0acc1f87cf074459115abc5b90b), ROM_NIBBLE) |
| 349 | |
| 356 | 350 | ROM_REGION( 01040, "displ", 0 ) |
| 357 | 351 | ROMX_LOAD( "displ.a38", 00000, 00400, CRC(fd30beb7) SHA1(65e4a19ba4ff748d525122128c514abedd55d866), ROM_NIBBLE) //!< P3601 256x4 BPROM; display FIFO control: STOPWAKE, MBEMPTY |
| 358 | 352 | ROMX_LOAD( "displ.a66", 00400, 00400, CRC(9f91aad9) SHA1(69b1d4c71f4e18103112e8601850c2654e9265cf), ROM_NIBBLE) //!< P3601 256x4 BPROM; display VSYNC and VBLANK |
| r26046 | r26047 | |
| 370 | 364 | ROMX_LOAD( "madr.a90", 01400, 00400, CRC(7a2d8799) SHA1(c3760dba147740729d33b9b88e59088a4cc7437a), ROM_NIBBLE) |
| 371 | 365 | ROMX_LOAD( "madr.a91", 02000, 00400, CRC(dd556aeb) SHA1(900f333a091e3ccde0843019c25f25fba62e6023), ROM_NIBBLE) |
| 372 | 366 | |
| 373 | | ROM_REGION( ALTO2_RAM_SIZE, "io", 0 ) |
| 367 | ROM_REGION( ALTO2_RAM_SIZE, "ram", 0 ) |
| 368 | |
| 369 | // extended memory Mesa 4.1 (?) micro code PROMs, 8 x 4bit (unused) |
| 370 | ROM_REGION32_BE( 02000, "xm_mesa_4.1", ROMREGION_INVERT ) |
| 371 | ROMX_LOAD( "xm672.41", 00000, 02000, CRC(110ee075) SHA1(bb72fceba5ce9e5e8c8a0024915006bdd011a3f3), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 0)) //!< 00000-01777 NEXT(6)',NEXT(7)',NEXT(8)',NEXT(9)' |
| 372 | ROMX_LOAD( "xm671.41", 00000, 02000, CRC(f21b1ad7) SHA1(1e18bdb35de7802892ac373c128f900786d40886), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 4)) //!< 00000-01777 NEXT(2)',NEXT(3)',NEXT(4)',NEXT(5)' |
| 373 | ROMX_LOAD( "xm670.41", 00000, 02000, CRC(1cd187f3) SHA1(0fd5eff7c6b5c2383aa20148a795b80286554675), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT( 8)) //!< 00000-01777 LOADT',LOADL,NEXT(0)',NEXT(1)' |
| 374 | ROMX_LOAD( "xm652.41", 00000, 02000, CRC(ddfa94bb) SHA1(38625e269400aaf38cd07b5dbf36c0087a0f1b92), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(12)) //!< 00000-01777 F2(0),F2(1)',F2(2)',F2(3)' |
| 375 | ROMX_LOAD( "xm673.41", 00000, 02000, CRC(8173d7e3) SHA1(7fbacf6dccb60dfe9cef88a248c3a1660efddcf4), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(16)) //!< 00000-01777 F1(0),F1(1)',F1(2)',F1(3)' |
| 376 | ROMX_LOAD( "xm675.41", 00000, 02000, CRC(26eac1e7) SHA1(9220a1386afae8de96bdb2cf084afbadeeb61d42), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(20)) //!< 00000-01777 ALUF(3)',BS(0)',BS(1)',BS(2)' |
| 377 | ROMX_LOAD( "xm674.41", 00000, 02000, CRC(7db5c097) SHA1(364bc41951baa3ad274031bd49abec1cf5b7a980), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(24)) //!< 00000-01777 RSEL(4)',ALUF(0)',ALUF(1)',ALUF(2)' |
| 378 | ROMX_LOAD( "xm654.41", 00000, 02000, CRC(beace302) SHA1(0002fea03a0261f57365095c4b87385d833f7063), ROM_NIBBLE | ROM_NOSKIP | ROM_BITSHIFT(28)) //!< 00000-01777 RSEL(0)',RSEL(1)',RSEL(2)',RSEL(3)' |
| 374 | 379 | ROM_END |
| 375 | 380 | |
| 376 | 381 | /* Game Drivers */ |