| Previous | 199869 Revisions | Next |
| r17703 Friday 7th September, 2012 at 19:46:27 UTC by Oliver Stöneberg |
|---|
| added missing \n to some fatalerror() calls (no whatsnew) |
| [src/emu/cpu] | drcbec.c drcbeut.c drcbex64.c drcbex86.c drcuml.c uml.c |
| [src/emu/cpu/am29000] | am29000.c |
| [src/emu/cpu/arm7] | arm7.c arm7core.c |
| [src/emu/cpu/cosmac] | cosmac.c |
| [src/emu/cpu/dsp32] | dsp32ops.c |
| [src/emu/cpu/dsp56k] | dsp56ops.c |
| [src/emu/cpu/e132xs] | e132xs.c |
| [src/emu/cpu/h83002] | h8_16.c h8_8.c h8ops.h |
| [src/emu/cpu/i386] | i386.c i386op16.c i386op32.c i386ops.c i486ops.c pentops.c x87ops.c |
| [src/emu/cpu/i960] | i960.c |
| [src/emu/cpu/jaguar] | jaguar.c |
| [src/emu/cpu/mc68hc11] | hc11ops.c |
| [src/emu/cpu/mcs48] | mcs48.c |
| [src/emu/cpu/mips] | mips3.c mips3com.c mips3drc.c |
| [src/emu/cpu/pic16c5x] | 16c5xdsm.c |
| [src/emu/cpu/pic16c62x] | 16c62xdsm.c |
| [src/emu/cpu/powerpc] | drc_ops.c ppc.c ppc403.c ppc602.c ppc603.c ppc_mem.c ppc_ops.c ppccom.c ppcdrc.c |
| [src/emu/cpu/rsp] | rspdrc.c |
| [src/emu/cpu/sh2] | sh2comn.c sh2drc.c |
| [src/emu/cpu/sharc] | compute.c sharc.c sharcdma.c sharcmem.c sharcops.c |
| [src/emu/cpu/tms32010] | 32010dsm.c |
| [src/emu/cpu/tms32025] | 32025dsm.c |
| [src/emu/cpu/tms32031] | 32031ops.c |
| [src/emu/cpu/tms32051] | 32051ops.c |
| [src/emu/cpu/tms34010] | tms34010.c |
| [src/emu/cpu/tms57002] | tms57002.c |
| [src/emu/cpu/upd7810] | upd7810.c |
| [src/emu/cpu/v60] | am1.c am2.c am3.c op12.c op2.c op5.c op7a.c v60.c |
| [src/emu/cpu/v810] | v810.c |
| [src/emu/cpu/z80] | z80daisy.c |
| [src/osd/sdl] | draw13.c |
| r17702 | r17703 | |
|---|---|---|
| 622 | 622 | |
| 623 | 623 | if (!sdl->sdl_renderer) |
| 624 | 624 | { |
| 625 | fatalerror("Error on creating renderer: %s | |
| 625 | fatalerror("Error on creating renderer: %s | |
| 626 | 626 | } |
| 627 | 627 | |
| 628 | 628 | //SDL_SelectRenderer(window->sdl_window); |
| r17702 | r17703 | |
|---|---|---|
| 492 | 492 | case CPUINFO_INT_INPUT_STATE + H8_SCI_1_RX: h8_3002_InterruptRequest(h8, 57, info->i); break; |
| 493 | 493 | |
| 494 | 494 | default: |
| 495 | fatalerror("h8_set_info unknown request %x", state); | |
| 495 | fatalerror("h8_set_info unknown request %x\n", state); | |
| 496 | 496 | break; |
| 497 | 497 | } |
| 498 | 498 | } |
| r17702 | r17703 | |
| 529 | 529 | case CPUINFO_INT_INPUT_STATE + H8_SCI_1_RX: h8_3002_InterruptRequest(h8, 85, info->i); break; |
| 530 | 530 | |
| 531 | 531 | default: |
| 532 | fatalerror("h8_set_info unknown request %x", state); | |
| 532 | fatalerror("h8_set_info unknown request %x\n", state); | |
| 533 | 533 | break; |
| 534 | 534 | } |
| 535 | 535 | } |
| r17702 | r17703 | |
|---|---|---|
| 247 | 247 | |
| 248 | 248 | if (h8->h8err) |
| 249 | 249 | { |
| 250 | fatalerror("H8/3xx: Unknown opcode (PC=%x) %x", h8->ppc, opcode); | |
| 250 | fatalerror("H8/3xx: Unknown opcode (PC=%x) %x\n", h8->ppc, opcode); | |
| 251 | 251 | } |
| 252 | 252 | } |
| 253 | 253 |
| r17702 | r17703 | |
|---|---|---|
| 504 | 504 | case CPUINFO_INT_INPUT_STATE + H8_SCI_1_RX: h8_300_InterruptRequest(h8, 32, info->i); break; |
| 505 | 505 | |
| 506 | 506 | default: |
| 507 | fatalerror("h8_set_info unknown request %x", state); | |
| 507 | fatalerror("h8_set_info unknown request %x\n", state); | |
| 508 | 508 | break; |
| 509 | 509 | } |
| 510 | 510 | } |
| r17702 | r17703 | |
|---|---|---|
| 135 | 135 | case 'x': |
| 136 | 136 | bit --; |
| 137 | 137 | break; |
| 138 | default: fatalerror("Invalid instruction encoding '%s %s'", | |
| 138 | default: fatalerror("Invalid instruction encoding '%s %s'\n", | |
| 139 | 139 | ops[0],ops[1]); |
| 140 | 140 | } |
| 141 | 141 | } |
| 142 | 142 | if (bit != -1 ) |
| 143 | 143 | { |
| 144 | fatalerror("not enough bits in encoding '%s %s' %d", | |
| 144 | fatalerror("not enough bits in encoding '%s %s' %d\n", | |
| 145 | 145 | ops[0],ops[1],bit); |
| 146 | 146 | } |
| 147 | 147 | while (isspace((UINT8)*p)) p++; |
| r17702 | r17703 | |
| 224 | 224 | case 'k': k <<=1; k |= ((code & (1<<bit)) ? 1 : 0); bit--; break; |
| 225 | 225 | case ' ': break; |
| 226 | 226 | case '1': case '0': case 'x': bit--; break; |
| 227 | case '\0': fatalerror("premature end of parse string, opcode %x, bit = %d",code,bit); | |
| 227 | case '\0': fatalerror("premature end of parse string, opcode %x, bit = %d\n",code,bit); | |
| 228 | 228 | } |
| 229 | 229 | cp++; |
| 230 | 230 | } |
| r17702 | r17703 | |
| 250 | 250 | case 'F': if (f < 0x20) sprintf(num,"%s",regfile[f]); else sprintf(num,"Reg$%02X",f); break; |
| 251 | 251 | case 'K': sprintf(num,"%02Xh",k); break; |
| 252 | 252 | default: |
| 253 | fatalerror("illegal escape character in format '%s'",Op[op].fmt); | |
| 253 | fatalerror("illegal escape character in format '%s'\n",Op[op].fmt); | |
| 254 | 254 | } |
| 255 | 255 | q = num; while (*q) *buffer++ = *q++; |
| 256 | 256 | *buffer = '\0'; |
| r17702 | r17703 | |
|---|---|---|
| 274 | 274 | return state->direct->read_decrypted_dword(address); |
| 275 | 275 | else |
| 276 | 276 | { |
| 277 | fatalerror("Am29000 instruction MMU translation enabled!"); | |
| 277 | fatalerror("Am29000 instruction MMU translation enabled!\n"); | |
| 278 | 278 | } |
| 279 | 279 | return 0; |
| 280 | 280 | } |
| r17702 | r17703 | |
| 425 | 425 | } |
| 426 | 426 | else |
| 427 | 427 | { |
| 428 | fatalerror("Am29000: Non vectored interrupt fetch!"); | |
| 428 | fatalerror("Am29000: Non vectored interrupt fetch!\n"); | |
| 429 | 429 | } |
| 430 | 430 | |
| 431 | 431 | am29000->exceptions = 0; |
| r17702 | r17703 | |
|---|---|---|
| 997 | 997 | |
| 998 | 998 | /* interlaced timing not supported */ |
| 999 | 999 | if ((SMART_IOREG(tms, DPYCTL) & 0x4000) == 0) |
| 1000 | fatalerror("Interlaced video configured on the TMS34010 (unsupported)"); | |
| 1000 | fatalerror("Interlaced video configured on the TMS34010 (unsupported)\n"); | |
| 1001 | 1001 | } |
| 1002 | 1002 | } |
| 1003 | 1003 | } |
| r17702 | r17703 | |
|---|---|---|
| 110 | 110 | |
| 111 | 111 | void tms3203x_device::unimplemented(UINT32 op) |
| 112 | 112 | { |
| 113 | fatalerror("Unimplemented op @ %06X: %08X (tbl=%03X)", m_pc - 1, op, op >> 21); | |
| 113 | fatalerror("Unimplemented op @ %06X: %08X (tbl=%03X)\n", m_pc - 1, op, op >> 21); | |
| 114 | 114 | } |
| 115 | 115 | |
| 116 | 116 | |
| r17702 | r17703 | |
| 855 | 855 | #if USE_FP |
| 856 | 856 | void tms3203x_device::norm(tmsreg &dst, tmsreg &src) |
| 857 | 857 | { |
| 858 | fatalerror("norm not implemented"); | |
| 858 | fatalerror("norm not implemented\n"); | |
| 859 | 859 | } |
| 860 | 860 | #else |
| 861 | 861 | void tms3203x_device::norm(tmsreg &dst, tmsreg &src) |
| r17702 | r17703 | |
|---|---|---|
| 1434 | 1434 | else if (ramsize == 256) |
| 1435 | 1435 | info->i = 8; |
| 1436 | 1436 | else |
| 1437 | fatalerror("mcs48_generic_get_info: Invalid RAM size"); | |
| 1437 | fatalerror("mcs48_generic_get_info: Invalid RAM size\n"); | |
| 1438 | 1438 | break; |
| 1439 | 1439 | |
| 1440 | 1440 | /* --- the following bits of info are returned as pointers to functions --- */ |
| r17702 | r17703 | |
| 1448 | 1448 | else if (romsize == 4096) |
| 1449 | 1449 | info->init = CPU_INIT_NAME(mcs48_4k_rom); |
| 1450 | 1450 | else |
| 1451 | fatalerror("mcs48_generic_get_info: Invalid ROM size"); | |
| 1451 | fatalerror("mcs48_generic_get_info: Invalid ROM size\n"); | |
| 1452 | 1452 | break; |
| 1453 | 1453 | |
| 1454 | 1454 | case CPUINFO_FCT_DISASSEMBLE: |
| r17702 | r17703 | |
| 1469 | 1469 | else if (romsize == 4096) |
| 1470 | 1470 | info->internal_map8 = ADDRESS_MAP_NAME(program_12bit); |
| 1471 | 1471 | else |
| 1472 | fatalerror("mcs48_generic_get_info: Invalid RAM size"); | |
| 1472 | fatalerror("mcs48_generic_get_info: Invalid RAM size\n"); | |
| 1473 | 1473 | break; |
| 1474 | 1474 | |
| 1475 | 1475 | case CPUINFO_PTR_INTERNAL_MEMORY_MAP + AS_DATA: |
| r17702 | r17703 | |
| 1480 | 1480 | else if (ramsize == 256) |
| 1481 | 1481 | info->internal_map8 = ADDRESS_MAP_NAME(data_8bit); |
| 1482 | 1482 | else |
| 1483 | fatalerror("mcs48_generic_get_info: Invalid RAM size"); | |
| 1483 | fatalerror("mcs48_generic_get_info: Invalid RAM size\n"); | |
| 1484 | 1484 | break; |
| 1485 | 1485 | |
| 1486 | 1486 | /* --- the following bits of info are returned as NULL-terminated strings --- */ |
| r17702 | r17703 | |
|---|---|---|
| 18 | 18 | (cpustate->internal_ram_block1[addr + 1]); |
| 19 | 19 | } |
| 20 | 20 | else { |
| 21 | fatalerror("SHARC: PM Bus Read %08X at %08X", address, cpustate->pc); | |
| 21 | fatalerror("SHARC: PM Bus Read %08X at %08X\n", address, cpustate->pc); | |
| 22 | 22 | } |
| 23 | 23 | } |
| 24 | 24 | |
| r17702 | r17703 | |
| 42 | 42 | return; |
| 43 | 43 | } |
| 44 | 44 | else { |
| 45 | fatalerror("SHARC: PM Bus Write %08X, %08X at %08X", address, data, cpustate->pc); | |
| 45 | fatalerror("SHARC: PM Bus Write %08X, %08X at %08X\n", address, data, cpustate->pc); | |
| 46 | 46 | } |
| 47 | 47 | } |
| 48 | 48 | |
| r17702 | r17703 | |
| 66 | 66 | ((UINT64)(cpustate->internal_ram_block1[addr + 2]) << 0); |
| 67 | 67 | } |
| 68 | 68 | else { |
| 69 | fatalerror("SHARC: PM Bus Read %08X at %08X", address, cpustate->pc); | |
| 69 | fatalerror("SHARC: PM Bus Read %08X at %08X\n", address, cpustate->pc); | |
| 70 | 70 | } |
| 71 | 71 | |
| 72 | 72 | return 0; |
| r17702 | r17703 | |
| 94 | 94 | return; |
| 95 | 95 | } |
| 96 | 96 | else { |
| 97 | fatalerror("SHARC: PM Bus Write %08X, %04X%08X at %08X", address, (UINT16)(data >> 32),(UINT32)data, cpustate->pc); | |
| 97 | fatalerror("SHARC: PM Bus Write %08X, %04X%08X at %08X\n", address, (UINT16)(data >> 32),(UINT32)data, cpustate->pc); | |
| 98 | 98 | } |
| 99 | 99 | } |
| 100 | 100 |
| r17702 | r17703 | |
|---|---|---|
| 245 | 245 | break; |
| 246 | 246 | } |
| 247 | 247 | |
| 248 | default: fatalerror("SHARC: iop_write_latency_effect: unknown IOP register %02X", cpustate->iop_latency_reg); | |
| 248 | default: fatalerror("SHARC: iop_write_latency_effect: unknown IOP register %02X\n", cpustate->iop_latency_reg); | |
| 249 | 249 | } |
| 250 | 250 | } |
| 251 | 251 | |
| r17702 | r17703 | |
| 267 | 267 | } |
| 268 | 268 | return r; |
| 269 | 269 | } |
| 270 | default: fatalerror("sharc_iop_r: Unimplemented IOP reg %02X at %08X", address, cpustate->pc); | |
| 270 | default: fatalerror("sharc_iop_r: Unimplemented IOP reg %02X at %08X\n", address, cpustate->pc); | |
| 271 | 271 | } |
| 272 | 272 | return 0; |
| 273 | 273 | } |
| r17702 | r17703 | |
| 324 | 324 | case 0x4e: cpustate->dma[7].ext_modifier = data; return; |
| 325 | 325 | case 0x4f: cpustate->dma[7].ext_count = data; return; |
| 326 | 326 | |
| 327 | default: fatalerror("sharc_iop_w: Unimplemented IOP reg %02X, %08X at %08X", address, data, cpustate->pc); | |
| 327 | default: fatalerror("sharc_iop_w: Unimplemented IOP reg %02X, %08X at %08X\n", address, data, cpustate->pc); | |
| 328 | 328 | } |
| 329 | 329 | } |
| 330 | 330 | |
| r17702 | r17703 | |
| 579 | 579 | break; |
| 580 | 580 | |
| 581 | 581 | default: |
| 582 | fatalerror("SHARC: Unimplemented boot mode %d", cpustate->boot_mode); | |
| 582 | fatalerror("SHARC: Unimplemented boot mode %d\n", cpustate->boot_mode); | |
| 583 | 583 | } |
| 584 | 584 | |
| 585 | 585 | cpustate->pc = 0x20004; |
| r17702 | r17703 | |
| 618 | 618 | } |
| 619 | 619 | else |
| 620 | 620 | { |
| 621 | fatalerror("sharc_set_flag_input: flag %d is set output!", flag_num); | |
| 621 | fatalerror("sharc_set_flag_input: flag %d is set output!\n", flag_num); | |
| 622 | 622 | } |
| 623 | 623 | } |
| 624 | 624 | } |
| r17702 | r17703 | |
| 755 | 755 | } |
| 756 | 756 | case 1: // counter-based, length 1 |
| 757 | 757 | { |
| 758 | //fatalerror("SHARC: counter-based loop, length 1 at %08X", cpustate->pc); | |
| 758 | //fatalerror("SHARC: counter-based loop, length 1 at %08X\n", cpustate->pc); | |
| 759 | 759 | //break; |
| 760 | 760 | } |
| 761 | 761 | case 2: // counter-based, length 2 |
| 762 | 762 | { |
| 763 | //fatalerror("SHARC: counter-based loop, length 2 at %08X", cpustate->pc); | |
| 763 | //fatalerror("SHARC: counter-based loop, length 2 at %08X\n", cpustate->pc); | |
| 764 | 764 | //break; |
| 765 | 765 | } |
| 766 | 766 | case 3: // counter-based, length >2 |
| r17702 | r17703 | |
|---|---|---|
| 161 | 161 | |
| 162 | 162 | if ((data & 0x1) != (oldreg & 0x1)) |
| 163 | 163 | { |
| 164 | fatalerror("SHARC: systemreg_latency_op: enable I8 bit-reversing"); | |
| 164 | fatalerror("SHARC: systemreg_latency_op: enable I8 bit-reversing\n"); | |
| 165 | 165 | } |
| 166 | 166 | if ((data & 0x2) != (oldreg & 0x2)) |
| 167 | 167 | { |
| 168 | fatalerror("SHARC: systemreg_latency_op: enable I0 bit-reversing"); | |
| 168 | fatalerror("SHARC: systemreg_latency_op: enable I0 bit-reversing\n"); | |
| 169 | 169 | } |
| 170 | 170 | if ((data & 0x4) != (oldreg & 0x4)) |
| 171 | 171 | { |
| 172 | fatalerror("SHARC: systemreg_latency_op: enable MR alternate"); | |
| 172 | fatalerror("SHARC: systemreg_latency_op: enable MR alternate\n"); | |
| 173 | 173 | } |
| 174 | 174 | |
| 175 | 175 | if ((data & 0x8) != (oldreg & 0x8)) /* Switch DAG1 7-4 */ |
| r17702 | r17703 | |
| 260 | 260 | } |
| 261 | 261 | break; |
| 262 | 262 | } |
| 263 | default: fatalerror("SHARC: systemreg_latency_op: unknown register %02X at %08X", cpustate->systemreg_latency_reg, cpustate->pc); | |
| 263 | default: fatalerror("SHARC: systemreg_latency_op: unknown register %02X at %08X\n", cpustate->systemreg_latency_reg, cpustate->pc); | |
| 264 | 264 | } |
| 265 | 265 | |
| 266 | 266 | cpustate->systemreg_latency_reg = -1; |
| r17702 | r17703 | |
| 332 | 332 | switch(reg) |
| 333 | 333 | { |
| 334 | 334 | case 0x4: return cpustate->pcstack[cpustate->pcstkp]; /* PCSTK */ |
| 335 | default: fatalerror("SHARC: GET_UREG: unknown register %08X at %08X", ureg, cpustate->pc); | |
| 335 | default: fatalerror("SHARC: GET_UREG: unknown register %08X at %08X\n", ureg, cpustate->pc); | |
| 336 | 336 | } |
| 337 | 337 | break; |
| 338 | 338 | } |
| r17702 | r17703 | |
| 358 | 358 | } |
| 359 | 359 | case 0xd: return cpustate->imask; /* IMASK */ |
| 360 | 360 | case 0xe: return cpustate->stky; /* STKY */ |
| 361 | default: fatalerror("SHARC: GET_UREG: unknown register %08X at %08X", ureg, cpustate->pc); | |
| 361 | default: fatalerror("SHARC: GET_UREG: unknown register %08X at %08X\n", ureg, cpustate->pc); | |
| 362 | 362 | } |
| 363 | 363 | break; |
| 364 | 364 | } |
| r17702 | r17703 | |
| 371 | 371 | case 0xb: return (UINT32)(cpustate->px); /* PX */ |
| 372 | 372 | case 0xc: return (UINT16)(cpustate->px); /* PX1 */ |
| 373 | 373 | case 0xd: return (UINT32)(cpustate->px >> 16); /* PX2 */ |
| 374 | default: fatalerror("SHARC: GET_UREG: unknown register %08X at %08X", ureg, cpustate->pc); | |
| 374 | default: fatalerror("SHARC: GET_UREG: unknown register %08X at %08X\n", ureg, cpustate->pc); | |
| 375 | 375 | } |
| 376 | 376 | break; |
| 377 | 377 | } |
| 378 | 378 | |
| 379 | default: fatalerror("SHARC: GET_UREG: unknown register %08X at %08X", ureg, cpustate->pc); | |
| 379 | default: fatalerror("SHARC: GET_UREG: unknown register %08X at %08X\n", ureg, cpustate->pc); | |
| 380 | 380 | } |
| 381 | 381 | } |
| 382 | 382 | |
| r17702 | r17703 | |
| 441 | 441 | { |
| 442 | 442 | case 0x5: cpustate->pcstkp = data; break; /* PCSTKP */ |
| 443 | 443 | case 0x8: cpustate->lcntr = data; break; /* LCNTR */ |
| 444 | default: fatalerror("SHARC: SET_UREG: unknown register %08X at %08X", ureg, cpustate->pc); | |
| 444 | default: fatalerror("SHARC: SET_UREG: unknown register %08X at %08X\n", ureg, cpustate->pc); | |
| 445 | 445 | } |
| 446 | 446 | break; |
| 447 | 447 | |
| r17702 | r17703 | |
| 471 | 471 | } |
| 472 | 472 | |
| 473 | 473 | case 0xe: cpustate->stky = data; break; /* STKY */ |
| 474 | default: fatalerror("SHARC: SET_UREG: unknown register %08X at %08X", ureg, cpustate->pc); | |
| 474 | default: fatalerror("SHARC: SET_UREG: unknown register %08X at %08X\n", ureg, cpustate->pc); | |
| 475 | 475 | } |
| 476 | 476 | break; |
| 477 | 477 | |
| r17702 | r17703 | |
| 480 | 480 | { |
| 481 | 481 | case 0xc: cpustate->px &= U64(0xffffffffffff0000); cpustate->px |= (data & 0xffff); break; /* PX1 */ |
| 482 | 482 | case 0xd: cpustate->px &= U64(0x000000000000ffff); cpustate->px |= (UINT64)data << 16; break; /* PX2 */ |
| 483 | default: fatalerror("SHARC: SET_UREG: unknown register %08X at %08X", ureg, cpustate->pc); | |
| 483 | default: fatalerror("SHARC: SET_UREG: unknown register %08X at %08X\n", ureg, cpustate->pc); | |
| 484 | 484 | } |
| 485 | 485 | break; |
| 486 | 486 | |
| 487 | default: fatalerror("SHARC: SET_UREG: unknown register %08X at %08X", ureg, cpustate->pc); | |
| 487 | default: fatalerror("SHARC: SET_UREG: unknown register %08X at %08X\n", ureg, cpustate->pc); | |
| 488 | 488 | } |
| 489 | 489 | } |
| 490 | 490 | |
| r17702 | r17703 | |
| 694 | 694 | break; |
| 695 | 695 | } |
| 696 | 696 | |
| 697 | default: fatalerror("SHARC: unimplemented shift operation %02X at %08X", shiftop, cpustate->pc); | |
| 697 | default: fatalerror("SHARC: unimplemented shift operation %02X at %08X\n", shiftop, cpustate->pc); | |
| 698 | 698 | } |
| 699 | 699 | } |
| 700 | 700 | |
| r17702 | r17703 | |
| 786 | 786 | } |
| 787 | 787 | |
| 788 | 788 | default: |
| 789 | fatalerror("SHARC: compute: multi-function opcode %02X not implemented ! (%08X, %08X)", multiop, cpustate->pc, opcode); | |
| 789 | fatalerror("SHARC: compute: multi-function opcode %02X not implemented ! (%08X, %08X)\n", multiop, cpustate->pc, opcode); | |
| 790 | 790 | break; |
| 791 | 791 | } |
| 792 | 792 | } |
| r17702 | r17703 | |
| 853 | 853 | break; |
| 854 | 854 | } |
| 855 | 855 | |
| 856 | default: fatalerror("SHARC: compute: unimplemented ALU operation %02X (%08X, %08X)", op, cpustate->pc, opcode); | |
| 856 | default: fatalerror("SHARC: compute: unimplemented ALU operation %02X (%08X, %08X)\n", op, cpustate->pc, opcode); | |
| 857 | 857 | } |
| 858 | 858 | break; |
| 859 | 859 | } |
| r17702 | r17703 | |
| 875 | 875 | case 0xb2: REG(rn) = compute_mrb_plus_mul_ssin(cpustate, rx, ry); break; |
| 876 | 876 | |
| 877 | 877 | default: |
| 878 | fatalerror("SHARC: compute: multiplier operation %02X not implemented ! (%08X, %08X)", op, cpustate->pc, opcode); | |
| 878 | fatalerror("SHARC: compute: multiplier operation %02X not implemented ! (%08X, %08X)\n", op, cpustate->pc, opcode); | |
| 879 | 879 | break; |
| 880 | 880 | } |
| 881 | 881 | break; |
| r17702 | r17703 | |
| 1046 | 1046 | } |
| 1047 | 1047 | |
| 1048 | 1048 | default: |
| 1049 | fatalerror("SHARC: compute: shift operation %02X not implemented ! (%08X, %08X)", op, cpustate->pc, opcode); | |
| 1049 | fatalerror("SHARC: compute: shift operation %02X not implemented ! (%08X, %08X)\n", op, cpustate->pc, opcode); | |
| 1050 | 1050 | } |
| 1051 | 1051 | break; |
| 1052 | 1052 | } |
| 1053 | 1053 | |
| 1054 | 1054 | default: |
| 1055 | fatalerror("SHARC: compute: invalid single-function operation %02X", cu); | |
| 1055 | fatalerror("SHARC: compute: invalid single-function operation %02X\n", cu); | |
| 1056 | 1056 | } |
| 1057 | 1057 | } |
| 1058 | 1058 | } |
| r17702 | r17703 | |
| 1062 | 1062 | cpustate->pcstkp++; |
| 1063 | 1063 | if(cpustate->pcstkp >= 32) |
| 1064 | 1064 | { |
| 1065 | fatalerror("SHARC: PC Stack overflow | |
| 1065 | fatalerror("SHARC: PC Stack overflow | |
| 1066 | 1066 | } |
| 1067 | 1067 | |
| 1068 | 1068 | if (cpustate->pcstkp == 0) |
| r17702 | r17703 | |
| 1084 | 1084 | |
| 1085 | 1085 | if(cpustate->pcstkp == 0) |
| 1086 | 1086 | { |
| 1087 | fatalerror("SHARC: PC Stack underflow | |
| 1087 | fatalerror("SHARC: PC Stack underflow | |
| 1088 | 1088 | } |
| 1089 | 1089 | |
| 1090 | 1090 | cpustate->pcstkp--; |
| r17702 | r17703 | |
| 1111 | 1111 | cpustate->lstkp++; |
| 1112 | 1112 | if(cpustate->lstkp >= 6) |
| 1113 | 1113 | { |
| 1114 | fatalerror("SHARC: Loop Stack overflow | |
| 1114 | fatalerror("SHARC: Loop Stack overflow | |
| 1115 | 1115 | } |
| 1116 | 1116 | |
| 1117 | 1117 | if (cpustate->lstkp == 0) |
| r17702 | r17703 | |
| 1133 | 1133 | { |
| 1134 | 1134 | if(cpustate->lstkp == 0) |
| 1135 | 1135 | { |
| 1136 | fatalerror("SHARC: Loop Stack underflow | |
| 1136 | fatalerror("SHARC: Loop Stack underflow | |
| 1137 | 1137 | } |
| 1138 | 1138 | |
| 1139 | 1139 | cpustate->lstkp--; |
| r17702 | r17703 | |
| 1156 | 1156 | cpustate->status_stkp++; |
| 1157 | 1157 | if (cpustate->status_stkp >= 5) |
| 1158 | 1158 | { |
| 1159 | fatalerror("SHARC: Status stack overflow | |
| 1159 | fatalerror("SHARC: Status stack overflow | |
| 1160 | 1160 | } |
| 1161 | 1161 | |
| 1162 | 1162 | if (cpustate->status_stkp == 0) |
| r17702 | r17703 | |
| 1180 | 1180 | cpustate->status_stkp--; |
| 1181 | 1181 | if (cpustate->status_stkp < 0) |
| 1182 | 1182 | { |
| 1183 | fatalerror("SHARC: Status stack underflow | |
| 1183 | fatalerror("SHARC: Status stack underflow | |
| 1184 | 1184 | } |
| 1185 | 1185 | |
| 1186 | 1186 | if (cpustate->status_stkp == 0) |
| r17702 | r17703 | |
| 2254 | 2254 | int compute = cpustate->opcode & 0x7fffff; |
| 2255 | 2255 | |
| 2256 | 2256 | //if(lr) |
| 2257 | // fatalerror("SHARC: rts: loop reentry not implemented | |
| 2257 | // fatalerror("SHARC: rts: loop reentry not implemented | |
| 2258 | 2258 | |
| 2259 | 2259 | if (e) /* IF...ELSE */ |
| 2260 | 2260 | { |
| r17702 | r17703 | |
| 2646 | 2646 | break; |
| 2647 | 2647 | } |
| 2648 | 2648 | default: |
| 2649 | fatalerror("SHARC: sysreg_bitop: invalid bitop %d", bop); | |
| 2649 | fatalerror("SHARC: sysreg_bitop: invalid bitop %d\n", bop); | |
| 2650 | 2650 | break; |
| 2651 | 2651 | } |
| 2652 | 2652 | |
| r17702 | r17703 | |
| 2681 | 2681 | /* I register bit-reverse */ |
| 2682 | 2682 | static void sharcop_bit_reverse(SHARC_REGS *cpustate) |
| 2683 | 2683 | { |
| 2684 | fatalerror("SHARC: sharcop_bit_reverse unimplemented"); | |
| 2684 | fatalerror("SHARC: sharcop_bit_reverse unimplemented\n"); | |
| 2685 | 2685 | } |
| 2686 | 2686 | |
| 2687 | 2687 | /*****************************************************************************/ |
| r17702 | r17703 | |
| 2692 | 2692 | { |
| 2693 | 2693 | if (cpustate->opcode & U64(0x008000000000)) |
| 2694 | 2694 | { |
| 2695 | fatalerror("sharcop_push_pop_stacks: push loop not implemented"); | |
| 2695 | fatalerror("sharcop_push_pop_stacks: push loop not implemented\n"); | |
| 2696 | 2696 | } |
| 2697 | 2697 | if (cpustate->opcode & U64(0x004000000000)) |
| 2698 | 2698 | { |
| 2699 | fatalerror("sharcop_push_pop_stacks: pop loop not implemented"); | |
| 2699 | fatalerror("sharcop_push_pop_stacks: pop loop not implemented\n"); | |
| 2700 | 2700 | } |
| 2701 | 2701 | if (cpustate->opcode & U64(0x002000000000)) |
| 2702 | 2702 | { |
| 2703 | //fatalerror("sharcop_push_pop_stacks: push sts not implemented"); | |
| 2703 | //fatalerror("sharcop_push_pop_stacks: push sts not implemented\n"); | |
| 2704 | 2704 | PUSH_STATUS_STACK(cpustate); |
| 2705 | 2705 | } |
| 2706 | 2706 | if (cpustate->opcode & U64(0x001000000000)) |
| 2707 | 2707 | { |
| 2708 | //fatalerror("sharcop_push_pop_stacks: pop sts not implemented"); | |
| 2708 | //fatalerror("sharcop_push_pop_stacks: pop sts not implemented\n"); | |
| 2709 | 2709 | POP_STATUS_STACK(cpustate); |
| 2710 | 2710 | } |
| 2711 | 2711 | if (cpustate->opcode & U64(0x000800000000)) |
| r17702 | r17703 | |
| 2750 | 2750 | char dasm[1000]; |
| 2751 | 2751 | CPU_DISASSEMBLE_NAME(sharc)(NULL, dasm, cpustate->pc, NULL, NULL, 0); |
| 2752 | 2752 | mame_printf_debug("SHARC: %08X: %s\n", cpustate->pc, dasm); |
| 2753 | fatalerror("SHARC: Unimplemented opcode %04X%08X at %08X", (UINT16)(cpustate->opcode >> 32), (UINT32)(cpustate->opcode), cpustate->pc); | |
| 2753 | fatalerror("SHARC: Unimplemented opcode %04X%08X at %08X\n", (UINT16)(cpustate->opcode >> 32), (UINT32)(cpustate->opcode), cpustate->pc); | |
| 2754 | 2754 | } |
| r17702 | r17703 | |
|---|---|---|
| 21 | 21 | |
| 22 | 22 | if (cpustate->dmaop_cycles > 0) |
| 23 | 23 | { |
| 24 | fatalerror("schedule_chained_dma_op: DMA operation already scheduled at %08X!", cpustate->pc); | |
| 24 | fatalerror("schedule_chained_dma_op: DMA operation already scheduled at %08X!\n", cpustate->pc); | |
| 25 | 25 | } |
| 26 | 26 | |
| 27 | 27 | if (chained_direction) // Transmit to external |
| r17702 | r17703 | |
| 54 | 54 | { |
| 55 | 55 | if (cpustate->dmaop_cycles > 0) |
| 56 | 56 | { |
| 57 | fatalerror("schedule_dma_op: DMA operation already scheduled at %08X!", cpustate->pc); | |
| 57 | fatalerror("schedule_dma_op: DMA operation already scheduled at %08X!\n", cpustate->pc); | |
| 58 | 58 | } |
| 59 | 59 | |
| 60 | 60 | cpustate->dmaop_channel = channel; |
| r17702 | r17703 | |
| 155 | 155 | //flsh = (cpustate->dma[channel].control >> 13) & 0x1; |
| 156 | 156 | |
| 157 | 157 | if (ishake) |
| 158 | fatalerror("SHARC: dma_exec: handshake not supported"); | |
| 158 | fatalerror("SHARC: dma_exec: handshake not supported\n"); | |
| 159 | 159 | if (intio) |
| 160 | fatalerror("SHARC: dma_exec: single-word interrupt enable not supported"); | |
| 160 | fatalerror("SHARC: dma_exec: single-word interrupt enable not supported\n"); | |
| 161 | 161 | |
| 162 | 162 | |
| 163 | 163 |
| r17702 | r17703 | |
|---|---|---|
| 114 | 114 | UINT32 r = REG(rx) + REG(ry); |
| 115 | 115 | |
| 116 | 116 | if (cpustate->mode1 & MODE1_ALUSAT) |
| 117 | fatalerror("SHARC: compute_add: ALU saturation not implemented | |
| 117 | fatalerror("SHARC: compute_add: ALU saturation not implemented | |
| 118 | 118 | |
| 119 | 119 | CLEAR_ALU_FLAGS(); |
| 120 | 120 | SET_FLAG_AN(r); |
| r17702 | r17703 | |
| 132 | 132 | UINT32 r = REG(rx) - REG(ry); |
| 133 | 133 | |
| 134 | 134 | if (cpustate->mode1 & MODE1_ALUSAT) |
| 135 | fatalerror("SHARC: compute_sub: ALU saturation not implemented | |
| 135 | fatalerror("SHARC: compute_sub: ALU saturation not implemented | |
| 136 | 136 | |
| 137 | 137 | CLEAR_ALU_FLAGS(); |
| 138 | 138 | SET_FLAG_AN(r); |
| r17702 | r17703 | |
| 151 | 151 | UINT32 r = REG(rx) + REG(ry) + c; |
| 152 | 152 | |
| 153 | 153 | if (cpustate->mode1 & MODE1_ALUSAT) |
| 154 | fatalerror("SHARC: compute_add_ci: ALU saturation not implemented | |
| 154 | fatalerror("SHARC: compute_add_ci: ALU saturation not implemented | |
| 155 | 155 | |
| 156 | 156 | CLEAR_ALU_FLAGS(); |
| 157 | 157 | SET_FLAG_AN(r); |
| r17702 | r17703 | |
| 170 | 170 | UINT32 r = REG(rx) - REG(ry) + c - 1; |
| 171 | 171 | |
| 172 | 172 | if (cpustate->mode1 & MODE1_ALUSAT) |
| 173 | fatalerror("SHARC: compute_sub_ci: ALU saturation not implemented | |
| 173 | fatalerror("SHARC: compute_sub_ci: ALU saturation not implemented | |
| 174 | 174 | |
| 175 | 175 | CLEAR_ALU_FLAGS(); |
| 176 | 176 | SET_FLAG_AN(r); |
| r17702 | r17703 | |
| 971 | 971 | { |
| 972 | 972 | case 0: SET_UREG(cpustate, rk, (UINT32)(cpustate->mrf)); break; |
| 973 | 973 | case 1: SET_UREG(cpustate, rk, (UINT32)(cpustate->mrf >> 32)); break; |
| 974 | case 2: fatalerror("SHARC: tried to load MR2F"); break; | |
| 974 | case 2: fatalerror("SHARC: tried to load MR2F\n"); break; | |
| 975 | 975 | case 4: SET_UREG(cpustate, rk, (UINT32)(cpustate->mrb)); break; |
| 976 | 976 | case 5: SET_UREG(cpustate, rk, (UINT32)(cpustate->mrb >> 32)); break; |
| 977 | case 6: fatalerror("SHARC: tried to load MR2B"); break; | |
| 978 | default: fatalerror("SHARC: unknown ai %d in mr_to_reg", ai); | |
| 977 | case 6: fatalerror("SHARC: tried to load MR2B\n"); break; | |
| 978 | default: fatalerror("SHARC: unknown ai %d in mr_to_reg\n", ai); | |
| 979 | 979 | } |
| 980 | 980 | |
| 981 | 981 | CLEAR_MULTIPLIER_FLAGS(); |
| r17702 | r17703 | |
| 987 | 987 | { |
| 988 | 988 | case 0: cpustate->mrf &= ~0xffffffff; cpustate->mrf |= GET_UREG(cpustate, rk); break; |
| 989 | 989 | case 1: cpustate->mrf &= 0xffffffff; cpustate->mrf |= (UINT64)(GET_UREG(cpustate, rk)) << 32; break; |
| 990 | case 2: fatalerror("SHARC: tried to write MR2F"); break; | |
| 990 | case 2: fatalerror("SHARC: tried to write MR2F\n"); break; | |
| 991 | 991 | case 4: cpustate->mrb &= ~0xffffffff; cpustate->mrb |= GET_UREG(cpustate, rk); break; |
| 992 | 992 | case 5: cpustate->mrb &= 0xffffffff; cpustate->mrb |= (UINT64)(GET_UREG(cpustate, rk)) << 32; break; |
| 993 | case 6: fatalerror("SHARC: tried to write MR2B"); break; | |
| 994 | default: fatalerror("SHARC: unknown ai %d in reg_to_mr", ai); | |
| 993 | case 6: fatalerror("SHARC: tried to write MR2B\n"); break; | |
| 994 | default: fatalerror("SHARC: unknown ai %d in reg_to_mr\n", ai); | |
| 995 | 995 | } |
| 996 | 996 | |
| 997 | 997 | CLEAR_MULTIPLIER_FLAGS(); |
| r17702 | r17703 | |
|---|---|---|
| 759 | 759 | #undef CINTRP |
| 760 | 760 | |
| 761 | 761 | default: |
| 762 | fatalerror("Unhandled opcode in tms57002_execute"); | |
| 762 | fatalerror("Unhandled opcode in tms57002_execute\n"); | |
| 763 | 763 | } |
| 764 | 764 | } |
| 765 | 765 | inst: |
| r17702 | r17703 | |
|---|---|---|
| 211 | 211 | } |
| 212 | 212 | catch (drcuml_block::abort_compilation &) |
| 213 | 213 | { |
| 214 | fatalerror("Out of cache space in drcuml_state::reset"); | |
| 214 | fatalerror("Out of cache space in drcuml_state::reset\n"); | |
| 215 | 215 | } |
| 216 | 216 | } |
| 217 | 217 | |
| r17702 | r17703 | |
| 401 | 401 | // get a pointer to the next instruction |
| 402 | 402 | instruction &curinst = m_inst[m_nextinst++]; |
| 403 | 403 | if (m_nextinst > m_maxinst) |
| 404 | fatalerror("Overran maxinst in drcuml_block_append"); | |
| 404 | fatalerror("Overran maxinst in drcuml_block_append\n"); | |
| 405 | 405 | |
| 406 | 406 | return curinst; |
| 407 | 407 | } |
| r17702 | r17703 | |
| 771 | 771 | bevalidate_iterate_over_params(drcuml, handles, test, param, 0); |
| 772 | 772 | printf("\n"); |
| 773 | 773 | } |
| 774 | fatalerror("All tests passed!"); | |
| 774 | fatalerror("All tests passed!\n"); | |
| 775 | 775 | } |
| 776 | 776 | |
| 777 | 777 | |
| r17702 | r17703 | |
| 1161 | 1161 | printf("\n"); |
| 1162 | 1162 | printf("Errors:\n"); |
| 1163 | 1163 | printf("%s\n", errorbuf); |
| 1164 | fatalerror("Error during validation"); | |
| 1164 | fatalerror("Error during validation\n"); | |
| 1165 | 1165 | } |
| 1166 | 1166 | return errend != errorbuf; |
| 1167 | 1167 | } |
| r17702 | r17703 | |
|---|---|---|
| 1946 | 1946 | PC += cpustate->op74[OP2].oplen - 2; |
| 1947 | 1947 | break; |
| 1948 | 1948 | default: |
| 1949 | fatalerror("uPD7810 internal error: check cycle counts for main"); | |
| 1949 | fatalerror("uPD7810 internal error: check cycle counts for main\n"); | |
| 1950 | 1950 | } |
| 1951 | 1951 | } |
| 1952 | 1952 | PSW &= ~SK; |
| r17702 | r17703 | |
|---|---|---|
| 105 | 105 | cpustate->reg[cpustate->modval & 0x1F] +=4; |
| 106 | 106 | break; |
| 107 | 107 | default: |
| 108 | fatalerror("CPU - BAM1 - 7"); | |
| 108 | fatalerror("CPU - BAM1 - 7\n"); | |
| 109 | 109 | break; |
| 110 | 110 | } |
| 111 | 111 | return 1; |
| r17702 | r17703 | |
| 144 | 144 | cpustate->reg[cpustate->modval & 0x1F]-=4; |
| 145 | 145 | break; |
| 146 | 146 | default: |
| 147 | fatalerror("CPU - BAM1 - 7"); | |
| 147 | fatalerror("CPU - BAM1 - 7\n"); | |
| 148 | 148 | break; |
| 149 | 149 | } |
| 150 | 150 | cpustate->amout = cpustate->program->read_dword_unaligned(cpustate->reg[cpustate->modval & 0x1F]); |
| r17702 | r17703 | |
| 1087 | 1087 | |
| 1088 | 1088 | static UINT32 am1Error1(v60_state *cpustate) |
| 1089 | 1089 | { |
| 1090 | fatalerror("CPU - AM1 - 1 (cpustate->PC=%06x)", cpustate->PC); | |
| 1090 | fatalerror("CPU - AM1 - 1 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1091 | 1091 | return 0; /* never reached, fatalerror won't return */ |
| 1092 | 1092 | } |
| 1093 | 1093 | |
| 1094 | 1094 | static UINT32 bam1Error1(v60_state *cpustate) |
| 1095 | 1095 | { |
| 1096 | fatalerror("CPU - BAM1 - 1 (cpustate->PC=%06x)", cpustate->PC); | |
| 1096 | fatalerror("CPU - BAM1 - 1 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1097 | 1097 | return 0; /* never reached, fatalerror won't return */ |
| 1098 | 1098 | } |
| 1099 | 1099 | |
| 1100 | 1100 | static UINT32 am1Error2(v60_state *cpustate) |
| 1101 | 1101 | { |
| 1102 | fatalerror("CPU - AM1 - 2 (cpustate->PC=%06x)", cpustate->PC); | |
| 1102 | fatalerror("CPU - AM1 - 2 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1103 | 1103 | return 0; /* never reached, fatalerror won't return */ |
| 1104 | 1104 | } |
| 1105 | 1105 | |
| 1106 | 1106 | static UINT32 bam1Error2(v60_state *cpustate) |
| 1107 | 1107 | { |
| 1108 | fatalerror("CPU - BAM1 - 2 (cpustate->PC=%06x)", cpustate->PC); | |
| 1108 | fatalerror("CPU - BAM1 - 2 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1109 | 1109 | return 0; /* never reached, fatalerror won't return */ |
| 1110 | 1110 | } |
| 1111 | 1111 | |
| 1112 | 1112 | #ifdef UNUSED_FUNCTION |
| 1113 | 1113 | static UINT32 am1Error3(v60_state *cpustate) |
| 1114 | 1114 | { |
| 1115 | fatalerror("CPU - AM1 - 3 (cpustate->PC=%06x)", cpustate->PC); | |
| 1115 | fatalerror("CPU - AM1 - 3 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1116 | 1116 | return 0; /* never reached, fatalerror won't return */ |
| 1117 | 1117 | } |
| 1118 | 1118 | |
| 1119 | 1119 | static UINT32 bam1Error3(v60_state *cpustate) |
| 1120 | 1120 | { |
| 1121 | fatalerror("CPU - BAM1 - 3 (cpustate->PC=%06x)", cpustate->PC); | |
| 1121 | fatalerror("CPU - BAM1 - 3 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1122 | 1122 | return 0; /* never reached, fatalerror won't return */ |
| 1123 | 1123 | } |
| 1124 | 1124 | #endif |
| 1125 | 1125 | |
| 1126 | 1126 | static UINT32 am1Error4(v60_state *cpustate) |
| 1127 | 1127 | { |
| 1128 | fatalerror("CPU - AM1 - 4 (cpustate->PC=%06x)", cpustate->PC); | |
| 1128 | fatalerror("CPU - AM1 - 4 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1129 | 1129 | return 0; /* never reached, fatalerror won't return */ |
| 1130 | 1130 | } |
| 1131 | 1131 | |
| 1132 | 1132 | static UINT32 bam1Error4(v60_state *cpustate) |
| 1133 | 1133 | { |
| 1134 | fatalerror("CPU - BAM1 - 4 (cpustate->PC=%06x)", cpustate->PC); | |
| 1134 | fatalerror("CPU - BAM1 - 4 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1135 | 1135 | return 0; /* never reached, fatalerror won't return */ |
| 1136 | 1136 | } |
| 1137 | 1137 | |
| 1138 | 1138 | static UINT32 am1Error5(v60_state *cpustate) |
| 1139 | 1139 | { |
| 1140 | fatalerror("CPU - AM1 - 5 (cpustate->PC=%06x)", cpustate->PC); | |
| 1140 | fatalerror("CPU - AM1 - 5 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1141 | 1141 | return 0; /* never reached, fatalerror won't return */ |
| 1142 | 1142 | } |
| 1143 | 1143 | |
| 1144 | 1144 | static UINT32 bam1Error5(v60_state *cpustate) |
| 1145 | 1145 | { |
| 1146 | fatalerror("CPU - BAM1 - 5 (cpustate->PC=%06x)", cpustate->PC); | |
| 1146 | fatalerror("CPU - BAM1 - 5 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1147 | 1147 | return 0; /* never reached, fatalerror won't return */ |
| 1148 | 1148 | } |
| 1149 | 1149 | |
| 1150 | 1150 | static UINT32 bam1Error6(v60_state *cpustate) |
| 1151 | 1151 | { |
| 1152 | fatalerror("CPU - BAM1 - 6 (cpustate->PC=%06x)", cpustate->PC); | |
| 1152 | fatalerror("CPU - BAM1 - 6 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1153 | 1153 | return 0; /* never reached, fatalerror won't return */ |
| 1154 | 1154 | } |
| 1155 | 1155 |
| r17702 | r17703 | |
|---|---|---|
| 94 | 94 | cpustate->reg[cpustate->modval & 0x1F] +=4; |
| 95 | 95 | break; |
| 96 | 96 | default: |
| 97 | fatalerror("CPU - AM2 - 7 (t0 cpustate->PC=%x)", cpustate->PC); | |
| 97 | fatalerror("CPU - AM2 - 7 (t0 cpustate->PC=%x)\n", cpustate->PC); | |
| 98 | 98 | break; |
| 99 | 99 | } |
| 100 | 100 | |
| r17702 | r17703 | |
| 139 | 139 | cpustate->reg[cpustate->modval & 0x1F]-=4; |
| 140 | 140 | break; |
| 141 | 141 | default: |
| 142 | fatalerror("CPU - BAM2 - 7 (cpustate->PC=%06x)", cpustate->PC); | |
| 142 | fatalerror("CPU - BAM2 - 7 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 143 | 143 | break; |
| 144 | 144 | } |
| 145 | 145 | |
| r17702 | r17703 | |
| 963 | 963 | |
| 964 | 964 | static UINT32 am2Error2(v60_state *cpustate) |
| 965 | 965 | { |
| 966 | fatalerror("CPU - AM2 - 2 (cpustate->PC=%06x)", cpustate->PC); | |
| 966 | fatalerror("CPU - AM2 - 2 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 967 | 967 | return 0; /* never reached, fatalerror won't return */ |
| 968 | 968 | } |
| 969 | 969 | |
| 970 | 970 | #ifdef UNUSED_FUNCTION |
| 971 | 971 | static UINT32 am2Error3(v60_state *cpustate) |
| 972 | 972 | { |
| 973 | fatalerror("CPU - AM2 - 3 (cpustate->PC=%06x)", cpustate->PC); | |
| 973 | fatalerror("CPU - AM2 - 3 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 974 | 974 | return 0; /* never reached, fatalerror won't return */ |
| 975 | 975 | } |
| 976 | 976 | #endif |
| 977 | 977 | |
| 978 | 978 | static UINT32 am2Error4(v60_state *cpustate) |
| 979 | 979 | { |
| 980 | fatalerror("CPU - AM2 - 4 (cpustate->PC=%06x)", cpustate->PC); | |
| 980 | fatalerror("CPU - AM2 - 4 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 981 | 981 | return 0; /* never reached, fatalerror won't return */ |
| 982 | 982 | } |
| 983 | 983 | |
| 984 | 984 | static UINT32 am2Error5(v60_state *cpustate) |
| 985 | 985 | { |
| 986 | fatalerror("CPU - AM2 - 5 (cpustate->PC=%06x)", cpustate->PC); | |
| 986 | fatalerror("CPU - AM2 - 5 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 987 | 987 | return 0; /* never reached, fatalerror won't return */ |
| 988 | 988 | } |
| 989 | 989 | |
| 990 | 990 | static UINT32 bam2Error1(v60_state *cpustate) |
| 991 | 991 | { |
| 992 | fatalerror("CPU - BAM2 - 1 (cpustate->PC=%06x)", cpustate->PC); | |
| 992 | fatalerror("CPU - BAM2 - 1 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 993 | 993 | return 0; /* never reached, fatalerror won't return */ |
| 994 | 994 | } |
| 995 | 995 | |
| 996 | 996 | static UINT32 bam2Error2(v60_state *cpustate) |
| 997 | 997 | { |
| 998 | fatalerror("CPU - BAM2 - 2 (cpustate->PC=%06x)", cpustate->PC); | |
| 998 | fatalerror("CPU - BAM2 - 2 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 999 | 999 | return 0; /* never reached, fatalerror won't return */ |
| 1000 | 1000 | } |
| 1001 | 1001 | |
| 1002 | 1002 | #ifdef UNUSED_FUNCTION |
| 1003 | 1003 | static UINT32 bam2Error3(v60_state *cpustate) |
| 1004 | 1004 | { |
| 1005 | fatalerror("CPU - BAM2 - 3 (cpustate->PC=%06x)", cpustate->PC); | |
| 1005 | fatalerror("CPU - BAM2 - 3 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1006 | 1006 | return 0; /* never reached, fatalerror won't return */ |
| 1007 | 1007 | } |
| 1008 | 1008 | #endif |
| 1009 | 1009 | |
| 1010 | 1010 | static UINT32 bam2Error4(v60_state *cpustate) |
| 1011 | 1011 | { |
| 1012 | fatalerror("CPU - BAM2 - 4 (cpustate->PC=%06x)", cpustate->PC); | |
| 1012 | fatalerror("CPU - BAM2 - 4 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1013 | 1013 | return 0; /* never reached, fatalerror won't return */ |
| 1014 | 1014 | } |
| 1015 | 1015 | |
| 1016 | 1016 | static UINT32 bam2Error5(v60_state *cpustate) |
| 1017 | 1017 | { |
| 1018 | fatalerror("CPU - BAM2 - 5 (cpustate->PC=%06x)", cpustate->PC); | |
| 1018 | fatalerror("CPU - BAM2 - 5 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1019 | 1019 | return 0; /* never reached, fatalerror won't return */ |
| 1020 | 1020 | } |
| 1021 | 1021 | |
| 1022 | 1022 | static UINT32 bam2Error6(v60_state *cpustate) |
| 1023 | 1023 | { |
| 1024 | fatalerror("CPU - BAM2 - 6 (cpustate->PC=%06x)", cpustate->PC); | |
| 1024 | fatalerror("CPU - BAM2 - 6 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 1025 | 1025 | return 0; /* never reached, fatalerror won't return */ |
| 1026 | 1026 | } |
| 1027 | 1027 |
| r17702 | r17703 | |
|---|---|---|
| 718 | 718 | |
| 719 | 719 | static UINT32 am3Immediate(v60_state *cpustate) |
| 720 | 720 | { |
| 721 | fatalerror("CPU - AM3 - IMM (cpustate->PC=%06x)", cpustate->PC); | |
| 721 | fatalerror("CPU - AM3 - IMM (cpustate->PC=%06x)\n", cpustate->PC); | |
| 722 | 722 | return 0; /* never reached, fatalerror won't return */ |
| 723 | 723 | } |
| 724 | 724 | |
| 725 | 725 | static UINT32 am3ImmediateQuick(v60_state *cpustate) |
| 726 | 726 | { |
| 727 | fatalerror("CPU - AM3 - IMMQ (cpustate->PC=%06x)", cpustate->PC); | |
| 727 | fatalerror("CPU - AM3 - IMMQ (cpustate->PC=%06x)\n", cpustate->PC); | |
| 728 | 728 | return 0; /* never reached, fatalerror won't return */ |
| 729 | 729 | } |
| 730 | 730 | |
| r17702 | r17703 | |
| 735 | 735 | |
| 736 | 736 | static UINT32 am3Error1(v60_state *cpustate) |
| 737 | 737 | { |
| 738 | fatalerror("CPU - AM3 - 1 (cpustate->PC=%06x)", cpustate->PC); | |
| 738 | fatalerror("CPU - AM3 - 1 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 739 | 739 | return 0; /* never reached, fatalerror won't return */ |
| 740 | 740 | } |
| 741 | 741 | |
| 742 | 742 | static UINT32 am3Error2(v60_state *cpustate) |
| 743 | 743 | { |
| 744 | fatalerror("CPU - AM3 - 2 (cpustate->PC=%06x)", cpustate->PC); | |
| 744 | fatalerror("CPU - AM3 - 2 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 745 | 745 | return 0; /* never reached, fatalerror won't return */ |
| 746 | 746 | } |
| 747 | 747 | |
| 748 | 748 | #ifdef UNUSED_FUNCTION |
| 749 | 749 | static UINT32 am3Error3(v60_state *cpustate) |
| 750 | 750 | { |
| 751 | fatalerror("CPU - AM3 - 3 (cpustate->PC=%06x)", cpustate->PC); | |
| 751 | fatalerror("CPU - AM3 - 3 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 752 | 752 | return 0; /* never reached, fatalerror won't return */ |
| 753 | 753 | } |
| 754 | 754 | #endif |
| 755 | 755 | |
| 756 | 756 | static UINT32 am3Error4(v60_state *cpustate) |
| 757 | 757 | { |
| 758 | fatalerror("CPU - AM3 - 4 (cpustate->PC=%06x)", cpustate->PC); | |
| 758 | fatalerror("CPU - AM3 - 4 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 759 | 759 | return 0; /* never reached, fatalerror won't return */ |
| 760 | 760 | } |
| 761 | 761 | |
| 762 | 762 | static UINT32 am3Error5(v60_state *cpustate) |
| 763 | 763 | { |
| 764 | fatalerror("CPU - AM3 - 5 (cpustate->PC=%06x)", cpustate->PC); | |
| 764 | fatalerror("CPU - AM3 - 5 (cpustate->PC=%06x)\n", cpustate->PC); | |
| 765 | 765 | return 0; /* never reached, fatalerror won't return */ |
| 766 | 766 | } |
| 767 | 767 |
| r17702 | r17703 | |
|---|---|---|
| 255 | 255 | |
| 256 | 256 | static UINT32 op5FUNHANDLED(v60_state *cpustate) |
| 257 | 257 | { |
| 258 | fatalerror("Unhandled 5F opcode at %08x", cpustate->PC); | |
| 258 | fatalerror("Unhandled 5F opcode at %08x\n", cpustate->PC); | |
| 259 | 259 | return 0; /* never reached, fatalerror won't return */ |
| 260 | 260 | } |
| 261 | 261 | |
| 262 | 262 | static UINT32 op5CUNHANDLED(v60_state *cpustate) |
| 263 | 263 | { |
| 264 | fatalerror("Unhandled 5C opcode at %08x", cpustate->PC); | |
| 264 | fatalerror("Unhandled 5C opcode at %08x\n", cpustate->PC); | |
| 265 | 265 | return 0; /* never reached, fatalerror won't return */ |
| 266 | 266 | } |
| 267 | 267 |
| r17702 | r17703 | |
|---|---|---|
| 456 | 456 | |
| 457 | 457 | if (cpustate->op1 > 3) |
| 458 | 458 | { |
| 459 | fatalerror("Illegal data field on opCHLVL, cpustate->PC=%x", cpustate->PC); | |
| 459 | fatalerror("Illegal data field on opCHLVL, cpustate->PC=%x\n", cpustate->PC); | |
| 460 | 460 | } |
| 461 | 461 | |
| 462 | 462 | oldPSW = v60_update_psw_for_exception(cpustate, 0, cpustate->op1); |
| r17702 | r17703 | |
| 762 | 762 | } |
| 763 | 763 | else |
| 764 | 764 | { |
| 765 | fatalerror("Invalid operand on LDPR cpustate->PC=%x", cpustate->PC); | |
| 765 | fatalerror("Invalid operand on LDPR cpustate->PC=%x\n", cpustate->PC); | |
| 766 | 766 | } |
| 767 | 767 | F12END(cpustate); |
| 768 | 768 | } |
| r17702 | r17703 | |
| 2100 | 2100 | cpustate->modwritevalw = cpustate->reg[cpustate->op1 + 36]; |
| 2101 | 2101 | else |
| 2102 | 2102 | { |
| 2103 | fatalerror("Invalid operand on STPR cpustate->PC=%x", cpustate->PC); | |
| 2103 | fatalerror("Invalid operand on STPR cpustate->PC=%x\n", cpustate->PC); | |
| 2104 | 2104 | } |
| 2105 | 2105 | F12WriteSecondOperand(cpustate, 2); |
| 2106 | 2106 | F12END(cpustate); |
| r17702 | r17703 | |
|---|---|---|
| 79 | 79 | if ((cpustate->TKCW & 0x1F0) & ((v60ReadPSW(cpustate) & 0x1F00) >> 4)) |
| 80 | 80 | { |
| 81 | 81 | // @@@ FPU exception |
| 82 | fatalerror("Hit TRAPFL! cpustate->PC=%x", cpustate->PC); | |
| 82 | fatalerror("Hit TRAPFL! cpustate->PC=%x\n", cpustate->PC); | |
| 83 | 83 | } |
| 84 | 84 | |
| 85 | 85 | return 1; |
| r17702 | r17703 | |
|---|---|---|
| 965 | 965 | |
| 966 | 966 | static UINT32 op58UNHANDLED(v60_state *cpustate) |
| 967 | 967 | { |
| 968 | fatalerror("Unhandled 58 opcode at cpustate->PC: /%06x", cpustate->PC); | |
| 968 | fatalerror("Unhandled 58 opcode at cpustate->PC: /%06x\n", cpustate->PC); | |
| 969 | 969 | return 0; /* never reached, fatalerror won't return */ |
| 970 | 970 | } |
| 971 | 971 | |
| 972 | 972 | static UINT32 op5AUNHANDLED(v60_state *cpustate) |
| 973 | 973 | { |
| 974 | fatalerror("Unhandled 5A opcode at cpustate->PC: /%06x", cpustate->PC); | |
| 974 | fatalerror("Unhandled 5A opcode at cpustate->PC: /%06x\n", cpustate->PC); | |
| 975 | 975 | return 0; /* never reached, fatalerror won't return */ |
| 976 | 976 | } |
| 977 | 977 | |
| 978 | 978 | static UINT32 op5BUNHANDLED(v60_state *cpustate) |
| 979 | 979 | { |
| 980 | fatalerror("Unhandled 5B opcode at cpustate->PC: /%06x", cpustate->PC); | |
| 980 | fatalerror("Unhandled 5B opcode at cpustate->PC: /%06x\n", cpustate->PC); | |
| 981 | 981 | return 0; /* never reached, fatalerror won't return */ |
| 982 | 982 | } |
| 983 | 983 | |
| 984 | 984 | static UINT32 op5DUNHANDLED(v60_state *cpustate) |
| 985 | 985 | { |
| 986 | fatalerror("Unhandled 5D opcode at cpustate->PC: /%06x", cpustate->PC); | |
| 986 | fatalerror("Unhandled 5D opcode at cpustate->PC: /%06x\n", cpustate->PC); | |
| 987 | 987 | return 0; /* never reached, fatalerror won't return */ |
| 988 | 988 | } |
| 989 | 989 | |
| 990 | 990 | static UINT32 op59UNHANDLED(v60_state *cpustate) |
| 991 | 991 | { |
| 992 | fatalerror("Unhandled 59 opcode at cpustate->PC: /%06x", cpustate->PC); | |
| 992 | fatalerror("Unhandled 59 opcode at cpustate->PC: /%06x\n", cpustate->PC); | |
| 993 | 993 | return 0; /* never reached, fatalerror won't return */ |
| 994 | 994 | } |
| 995 | 995 |
| r17702 | r17703 | |
|---|---|---|
| 317 | 317 | |
| 318 | 318 | static UINT32 opUNHANDLED(v60_state *cpustate) |
| 319 | 319 | { |
| 320 | fatalerror("Unhandled OpCode found : %02x at %08x", OpRead16(cpustate, cpustate->PC), cpustate->PC); | |
| 320 | fatalerror("Unhandled OpCode found : %02x at %08x\n", OpRead16(cpustate, cpustate->PC), cpustate->PC); | |
| 321 | 321 | return 0; /* never reached, fatalerror won't return */ |
| 322 | 322 | } |
| 323 | 323 |
| r17702 | r17703 | |
|---|---|---|
| 2192 | 2192 | break; |
| 2193 | 2193 | |
| 2194 | 2194 | default: |
| 2195 | fatalerror("DSP56k - BAD EE value in andi operation") ; | |
| 2195 | fatalerror("DSP56k - BAD EE value in andi operation\n") ; | |
| 2196 | 2196 | } |
| 2197 | 2197 | |
| 2198 | 2198 | /* S L E U N Z V C */ |
| r17702 | r17703 | |
| 4467 | 4467 | case 0x0: rX = &R0; nX = &N0; break; |
| 4468 | 4468 | case 0x1: rX = &R1; nX = &N1; break; |
| 4469 | 4469 | case 0x2: rX = &R2; nX = &N2; break; |
| 4470 | case 0x3: fatalerror("Dsp56k: Error. execute_mm_table specified R3 as its first source!"); break; | |
| 4470 | case 0x3: fatalerror("Dsp56k: Error. execute_mm_table specified R3 as its first source!\n"); break; | |
| 4471 | 4471 | } |
| 4472 | 4472 | |
| 4473 | 4473 | switch(mm) |
| r17702 | r17703 | |
| 4522 | 4522 | } |
| 4523 | 4523 | |
| 4524 | 4524 | /* Should not get here */ |
| 4525 | fatalerror("dsp56k: execute_q_table did something impossible!"); | |
| 4525 | fatalerror("dsp56k: execute_q_table did something impossible!\n"); | |
| 4526 | 4526 | return 0; |
| 4527 | 4527 | } |
| 4528 | 4528 | |
| r17702 | r17703 | |
| 4785 | 4785 | |
| 4786 | 4786 | /* Can't do an R3 for S1 */ |
| 4787 | 4787 | if (R.addr == &R3) |
| 4788 | fatalerror("Dsp56k: Error. Dual x memory data read specified R3 as its first source!"); | |
| 4788 | fatalerror("Dsp56k: Error. Dual x memory data read specified R3 as its first source!\n"); | |
| 4789 | 4789 | |
| 4790 | 4790 | /* The note on A-142 is very interesting. |
| 4791 | 4791 | You can effectively access external memory in the last 64 bytes of X data memory! */ |
| 4792 | 4792 | if (*((UINT16*)D2.addr) >= 0xffc0) |
| 4793 | fatalerror("Dsp56k: Unimplemented access to external X Data Memory >= 0xffc0 in Dual X Memory Data Read."); | |
| 4793 | fatalerror("Dsp56k: Unimplemented access to external X Data Memory >= 0xffc0 in Dual X Memory Data Read.\n"); | |
| 4794 | 4794 | |
| 4795 | 4795 | /* First memmove */ |
| 4796 | 4796 | srcVal1 = cpustate->data->read_word(ADDRESS(*((UINT16*)R.addr))); |
| r17702 | r17703 | |
|---|---|---|
| 4194 | 4194 | |
| 4195 | 4195 | INLINE void hyperstone_do(hyperstone_state *cpustate, struct regs_decode *decode) |
| 4196 | 4196 | { |
| 4197 | fatalerror("Executed hyperstone_do instruction. PC = %08X", PPC); | |
| 4197 | fatalerror("Executed hyperstone_do instruction. PC = %08X\n", PPC); | |
| 4198 | 4198 | } |
| 4199 | 4199 | |
| 4200 | 4200 | INLINE void hyperstone_ldwr(hyperstone_state *cpustate, struct regs_decode *decode) |
| r17702 | r17703 | |
|---|---|---|
| 2965 | 2965 | UINT16 address, selector; |
| 2966 | 2966 | if( modrm >= 0xc0 ) |
| 2967 | 2967 | { |
| 2968 | fatalerror("i386: groupFF_16 /%d NYI", (modrm >> 3) & 0x7); | |
| 2968 | fatalerror("i386: groupFF_16 /%d NYI\n", (modrm >> 3) & 0x7); | |
| 2969 | 2969 | } |
| 2970 | 2970 | else |
| 2971 | 2971 | { |
| r17702 | r17703 | |
| 3012 | 3012 | |
| 3013 | 3013 | if( modrm >= 0xc0 ) |
| 3014 | 3014 | { |
| 3015 | fatalerror("i386: groupFF_16 /%d NYI", (modrm >> 3) & 0x7); | |
| 3015 | fatalerror("i386: groupFF_16 /%d NYI\n", (modrm >> 3) & 0x7); | |
| 3016 | 3016 | } |
| 3017 | 3017 | else |
| 3018 | 3018 | { |
| r17702 | r17703 | |
| 3052 | 3052 | I386OP(invalid)(cpustate); |
| 3053 | 3053 | break; |
| 3054 | 3054 | default: |
| 3055 | fatalerror("i386: groupFF_16 /%d unimplemented", (modrm >> 3) & 0x7); | |
| 3055 | fatalerror("i386: groupFF_16 /%d unimplemented\n", (modrm >> 3) & 0x7); | |
| 3056 | 3056 | break; |
| 3057 | 3057 | } |
| 3058 | 3058 | } |
| r17702 | r17703 | |
| 3246 | 3246 | break; |
| 3247 | 3247 | |
| 3248 | 3248 | default: |
| 3249 | fatalerror("i386: group0F00_16 /%d unimplemented", (modrm >> 3) & 0x7); | |
| 3249 | fatalerror("i386: group0F00_16 /%d unimplemented\n", (modrm >> 3) & 0x7); | |
| 3250 | 3250 | break; |
| 3251 | 3251 | } |
| 3252 | 3252 | } |
| r17702 | r17703 | |
| 3350 | 3350 | break; |
| 3351 | 3351 | } |
| 3352 | 3352 | default: |
| 3353 | fatalerror("i386: unimplemented opcode 0x0f 01 /%d at %08X", (modrm >> 3) & 0x7, cpustate->eip - 2); | |
| 3353 | fatalerror("i386: unimplemented opcode 0x0f 01 /%d at %08X\n", (modrm >> 3) & 0x7, cpustate->eip - 2); | |
| 3354 | 3354 | break; |
| 3355 | 3355 | } |
| 3356 | 3356 | } |
| r17702 | r17703 | |
| 3470 | 3470 | } |
| 3471 | 3471 | break; |
| 3472 | 3472 | default: |
| 3473 | fatalerror("i386: group0FBA_16 /%d unknown", (modrm >> 3) & 0x7); | |
| 3473 | fatalerror("i386: group0FBA_16 /%d unknown\n", (modrm >> 3) & 0x7); | |
| 3474 | 3474 | break; |
| 3475 | 3475 | } |
| 3476 | 3476 | } |
| r17702 | r17703 | |
| 3676 | 3676 | UINT16 selector; |
| 3677 | 3677 | |
| 3678 | 3678 | if( modrm >= 0xc0 ) { |
| 3679 | fatalerror("i386: load_far_pointer16 NYI"); | |
| 3679 | fatalerror("i386: load_far_pointer16 NYI\n"); | |
| 3680 | 3680 | } else { |
| 3681 | 3681 | UINT32 ea = GetEA(cpustate,modrm,0); |
| 3682 | 3682 | STORE_REG16(modrm, READ16(cpustate,ea + 0)); |
| r17702 | r17703 | |
|---|---|---|
| 4249 | 4249 | void x87_invalid(i386_state *cpustate, UINT8 modrm) |
| 4250 | 4250 | { |
| 4251 | 4251 | // TODO |
| 4252 | fatalerror("x87 invalid instruction (PC:%.4x)", cpustate->pc); | |
| 4252 | fatalerror("x87 invalid instruction (PC:%.4x)\n", cpustate->pc); | |
| 4253 | 4253 | } |
| 4254 | 4254 | |
| 4255 | 4255 |
| r17702 | r17703 | |
|---|---|---|
| 75 | 75 | { |
| 76 | 76 | UINT8 modm = FETCH(cpustate); |
| 77 | 77 | if( modm >= 0xc0 ) { |
| 78 | fatalerror("pentium: cmpxchg8b_m64 - invalid modm"); | |
| 78 | fatalerror("pentium: cmpxchg8b_m64 - invalid modm\n"); | |
| 79 | 79 | } else { |
| 80 | 80 | UINT32 ea = GetEA(cpustate, modm, 0); |
| 81 | 81 | UINT64 value = READ64(cpustate,ea); |
| r17702 | r17703 | |
| 132 | 132 | GetNonTranslatedEA(cpustate, modm, NULL); |
| 133 | 133 | break; |
| 134 | 134 | default: |
| 135 | fatalerror("pentium: bad/unsupported 0f ae opcode"); | |
| 135 | fatalerror("pentium: bad/unsupported 0f ae opcode\n"); | |
| 136 | 136 | } |
| 137 | 137 | } else { |
| 138 | fatalerror("pentium: bad/unsupported 0f ae opcode"); | |
| 138 | fatalerror("pentium: bad/unsupported 0f ae opcode\n"); | |
| 139 | 139 | } |
| 140 | 140 | } |
| 141 | 141 |
| r17702 | r17703 | |
|---|---|---|
| 289 | 289 | UINT8 segment; |
| 290 | 290 | |
| 291 | 291 | if( mod_rm >= 0xc0 ) |
| 292 | fatalerror("i386: Called modrm_to_EA with modrm value %02X | |
| 292 | fatalerror("i386: Called modrm_to_EA with modrm value %02X | |
| 293 | 293 | |
| 294 | 294 | if( cpustate->address_size ) { |
| 295 | 295 | switch( rm ) |
| r17702 | r17703 | |
| 2719 | 2719 | static void report_unimplemented_opcode(i386_state *cpustate) |
| 2720 | 2720 | { |
| 2721 | 2721 | #ifndef DEBUG_MISSING_OPCODE |
| 2722 | fatalerror("i386: Unimplemented opcode %02X at %08X", cpustate->opcode, cpustate->pc - 1 ); | |
| 2722 | fatalerror("i386: Unimplemented opcode %02X at %08X\n", cpustate->opcode, cpustate->pc - 1 ); | |
| 2723 | 2723 | #else |
| 2724 | 2724 | astring errmsg; |
| 2725 | 2725 | errmsg.cat("i386: Unimplemented opcode "); |
| r17702 | r17703 | |
|---|---|---|
| 694 | 694 | case 3: CYCLES(cpustate,CYCLES_MOV_REG_CR3); break; |
| 695 | 695 | case 4: CYCLES(cpustate,1); break; // TODO |
| 696 | 696 | default: |
| 697 | fatalerror("i386: mov_cr_r32 CR%d | |
| 697 | fatalerror("i386: mov_cr_r32 CR%d | |
| 698 | 698 | break; |
| 699 | 699 | } |
| 700 | 700 | } |
| r17702 | r17703 | |
| 718 | 718 | CYCLES(cpustate,CYCLES_MOV_DR6_7_REG); |
| 719 | 719 | break; |
| 720 | 720 | default: |
| 721 | fatalerror("i386: mov_dr_r32 DR%d | |
| 721 | fatalerror("i386: mov_dr_r32 DR%d | |
| 722 | 722 | break; |
| 723 | 723 | } |
| 724 | 724 | } |
| r17702 | r17703 | |
| 1201 | 1201 | break; |
| 1202 | 1202 | |
| 1203 | 1203 | default: |
| 1204 | fatalerror("i386: Invalid REP/opcode %02X combination",opcode); | |
| 1204 | fatalerror("i386: Invalid REP/opcode %02X combination\n",opcode); | |
| 1205 | 1205 | break; |
| 1206 | 1206 | } |
| 1207 | 1207 | |
| r17702 | r17703 | |
| 2204 | 2204 | } |
| 2205 | 2205 | break; |
| 2206 | 2206 | default: |
| 2207 | fatalerror("i386: groupFE_8 /%d unimplemented", (modrm >> 3) & 0x7); | |
| 2207 | fatalerror("i386: groupFE_8 /%d unimplemented\n", (modrm >> 3) & 0x7); | |
| 2208 | 2208 | break; |
| 2209 | 2209 | } |
| 2210 | 2210 | } |
| r17702 | r17703 | |
|---|---|---|
| 305 | 305 | break; |
| 306 | 306 | } |
| 307 | 307 | default: |
| 308 | fatalerror("i486: unimplemented opcode 0x0f 01 /%d at %08X", (modrm >> 3) & 0x7, cpustate->eip - 2); | |
| 308 | fatalerror("i486: unimplemented opcode 0x0f 01 /%d at %08X\n", (modrm >> 3) & 0x7, cpustate->eip - 2); | |
| 309 | 309 | break; |
| 310 | 310 | } |
| 311 | 311 | } |
| r17702 | r17703 | |
| 414 | 414 | break; |
| 415 | 415 | } |
| 416 | 416 | default: |
| 417 | fatalerror("i486: unimplemented opcode 0x0f 01 /%d at %08X", (modrm >> 3) & 0x7, cpustate->eip - 2); | |
| 417 | fatalerror("i486: unimplemented opcode 0x0f 01 /%d at %08X\n", (modrm >> 3) & 0x7, cpustate->eip - 2); | |
| 418 | 418 | break; |
| 419 | 419 | } |
| 420 | 420 | } |
| r17702 | r17703 | |
|---|---|---|
| 2768 | 2768 | |
| 2769 | 2769 | if( modrm >= 0xc0 ) |
| 2770 | 2770 | { |
| 2771 | fatalerror("i386: groupFF_32 /%d: NYI", (modrm >> 3) & 0x7); | |
| 2771 | fatalerror("i386: groupFF_32 /%d: NYI\n", (modrm >> 3) & 0x7); | |
| 2772 | 2772 | } |
| 2773 | 2773 | else |
| 2774 | 2774 | { |
| r17702 | r17703 | |
| 2815 | 2815 | |
| 2816 | 2816 | if( modrm >= 0xc0 ) |
| 2817 | 2817 | { |
| 2818 | fatalerror("i386: groupFF_32 /%d: NYI", (modrm >> 3) & 0x7); | |
| 2818 | fatalerror("i386: groupFF_32 /%d: NYI\n", (modrm >> 3) & 0x7); | |
| 2819 | 2819 | } |
| 2820 | 2820 | else |
| 2821 | 2821 | { |
| r17702 | r17703 | |
| 2852 | 2852 | } |
| 2853 | 2853 | break; |
| 2854 | 2854 | default: |
| 2855 | fatalerror("i386: groupFF_32 /%d unimplemented at %08X", (modrm >> 3) & 0x7, cpustate->pc-2); | |
| 2855 | fatalerror("i386: groupFF_32 /%d unimplemented at %08X\n", (modrm >> 3) & 0x7, cpustate->pc-2); | |
| 2856 | 2856 | break; |
| 2857 | 2857 | } |
| 2858 | 2858 | } |
| r17702 | r17703 | |
| 3044 | 3044 | break; |
| 3045 | 3045 | |
| 3046 | 3046 | default: |
| 3047 | fatalerror("i386: group0F00_32 /%d unimplemented", (modrm >> 3) & 0x7); | |
| 3047 | fatalerror("i386: group0F00_32 /%d unimplemented\n", (modrm >> 3) & 0x7); | |
| 3048 | 3048 | break; |
| 3049 | 3049 | } |
| 3050 | 3050 | } |
| r17702 | r17703 | |
| 3148 | 3148 | break; |
| 3149 | 3149 | } |
| 3150 | 3150 | default: |
| 3151 | fatalerror("i386: unimplemented opcode 0x0f 01 /%d at %08X", (modrm >> 3) & 0x7, cpustate->eip - 2); | |
| 3151 | fatalerror("i386: unimplemented opcode 0x0f 01 /%d at %08X\n", (modrm >> 3) & 0x7, cpustate->eip - 2); | |
| 3152 | 3152 | break; |
| 3153 | 3153 | } |
| 3154 | 3154 | } |
| r17702 | r17703 | |
| 3268 | 3268 | } |
| 3269 | 3269 | break; |
| 3270 | 3270 | default: |
| 3271 | fatalerror("i386: group0FBA_32 /%d unknown", (modrm >> 3) & 0x7); | |
| 3271 | fatalerror("i386: group0FBA_32 /%d unknown\n", (modrm >> 3) & 0x7); | |
| 3272 | 3272 | break; |
| 3273 | 3273 | } |
| 3274 | 3274 | } |
| r17702 | r17703 | |
| 3474 | 3474 | UINT16 selector; |
| 3475 | 3475 | |
| 3476 | 3476 | if( modrm >= 0xc0 ) { |
| 3477 | fatalerror("i386: load_far_pointer32 NYI"); | |
| 3477 | fatalerror("i386: load_far_pointer32 NYI\n"); | |
| 3478 | 3478 | } else { |
| 3479 | 3479 | UINT32 ea = GetEA(cpustate,modrm,0); |
| 3480 | 3480 | STORE_REG32(modrm, READ32(cpustate,ea + 0)); |
| r17702 | r17703 | |
|---|---|---|
| 3538 | 3538 | |
| 3539 | 3539 | static void HC11OP(invalid)(hc11_state *cpustate) |
| 3540 | 3540 | { |
| 3541 | fatalerror("HC11: Invalid opcode 0x%02X at %04X", READ8(cpustate, cpustate->pc-1), cpustate->pc-1); | |
| 3541 | fatalerror("HC11: Invalid opcode 0x%02X at %04X\n", READ8(cpustate, cpustate->pc-1), cpustate->pc-1); | |
| 3542 | 3542 | } |
| r17702 | r17703 | |
|---|---|---|
| 145 | 145 | |
| 146 | 146 | void dsp32c_device::unimplemented(UINT32 op) |
| 147 | 147 | { |
| 148 | fatalerror("Unimplemented op @ %06X: %08X (dis=%02X, tbl=%03X)", PC - 4, op, op >> 25, op >> 21); | |
| 148 | fatalerror("Unimplemented op @ %06X: %08X (dis=%02X, tbl=%03X)\n", PC - 4, op, op >> 25, op >> 21); | |
| 149 | 149 | } |
| 150 | 150 | |
| 151 | 151 | |
| r17702 | r17703 | |
| 449 | 449 | |
| 450 | 450 | double dsp32c_device::dau_read_pi_special(int i) |
| 451 | 451 | { |
| 452 | fatalerror("Unimplemented dau_read_pi_special(%d)", i); | |
| 452 | fatalerror("Unimplemented dau_read_pi_special(%d)\n", i); | |
| 453 | 453 | return 0; |
| 454 | 454 | } |
| 455 | 455 | |
| 456 | 456 | |
| 457 | 457 | void dsp32c_device::dau_write_pi_special(int i, double val) |
| 458 | 458 | { |
| 459 | fatalerror("Unimplemented dau_write_pi_special(%d)", i); | |
| 459 | fatalerror("Unimplemented dau_write_pi_special(%d)\n", i); | |
| 460 | 460 | } |
| 461 | 461 | |
| 462 | 462 | |
| r17702 | r17703 | |
| 696 | 696 | case 46: // !ireq2 |
| 697 | 697 | case 47: // ireq2 |
| 698 | 698 | default: |
| 699 | fatalerror("Unimplemented condition: %X", cond); | |
| 699 | fatalerror("Unimplemented condition: %X\n", cond); | |
| 700 | 700 | } |
| 701 | 701 | } |
| 702 | 702 | #endif |
| r17702 | r17703 | |
|---|---|---|
| 470 | 470 | |
| 471 | 471 | // everything else is unexpected |
| 472 | 472 | default: |
| 473 | fatalerror("Unexpected parameter type"); | |
| 473 | fatalerror("Unexpected parameter type\n"); | |
| 474 | 474 | break; |
| 475 | 475 | } |
| 476 | 476 | } |
| r17702 | r17703 | |
| 709 | 709 | // generate a little bit of glue code to set up the environment |
| 710 | 710 | drccodeptr *cachetop = m_cache.begin_codegen(500); |
| 711 | 711 | if (cachetop == NULL) |
| 712 | fatalerror("Out of cache space after a reset!"); | |
| 712 | fatalerror("Out of cache space after a reset!\n"); | |
| 713 | 713 | |
| 714 | 714 | x86code *dst = (x86code *)*cachetop; |
| 715 | 715 | |
| r17702 | r17703 | |
| 2595 | 2595 | ((UINT32 *)src)[-1] = labelcodeptr - src; |
| 2596 | 2596 | } |
| 2597 | 2597 | else |
| 2598 | fatalerror("fixup_label called with invalid jmp source!"); | |
| 2598 | fatalerror("fixup_label called with invalid jmp source!\n"); | |
| 2599 | 2599 | } |
| 2600 | 2600 | |
| 2601 | 2601 |
| r17702 | r17703 | |
|---|---|---|
| 548 | 548 | case MAKE_OPCODE_SHORT(OP_MAPVAR, 4, 0): // MAPVAR mapvar,value |
| 549 | 549 | |
| 550 | 550 | // these opcodes should be processed at compile-time only |
| 551 | fatalerror("Unexpected opcode"); | |
| 551 | fatalerror("Unexpected opcode\n"); | |
| 552 | 552 | break; |
| 553 | 553 | |
| 554 | 554 | case MAKE_OPCODE_SHORT(OP_DEBUG, 4, 0): // DEBUG pc |
| r17702 | r17703 | |
| 2102 | 2102 | break; |
| 2103 | 2103 | |
| 2104 | 2104 | default: |
| 2105 | fatalerror("Unexpected opcode!"); | |
| 2105 | fatalerror("Unexpected opcode!\n"); | |
| 2106 | 2106 | break; |
| 2107 | 2107 | } |
| 2108 | 2108 | |
| r17702 | r17703 | |
| 2193 | 2193 | break; |
| 2194 | 2194 | |
| 2195 | 2195 | default: |
| 2196 | fatalerror("Unexpected param->type"); | |
| 2196 | fatalerror("Unexpected param->type\n"); | |
| 2197 | 2197 | break; |
| 2198 | 2198 | } |
| 2199 | 2199 |
| r17702 | r17703 | |
|---|---|---|
| 486 | 486 | } |
| 487 | 487 | else |
| 488 | 488 | { |
| 489 | fatalerror("RSP: cfunc_get_cop0_reg: %d", reg); | |
| 489 | fatalerror("RSP: cfunc_get_cop0_reg: %d\n", reg); | |
| 490 | 490 | } |
| 491 | 491 | } |
| 492 | 492 | |
| r17702 | r17703 | |
| 3457 | 3457 | } |
| 3458 | 3458 | catch (drcuml_block::abort_compilation &) |
| 3459 | 3459 | { |
| 3460 | fatalerror("Unable to generate static RSP code"); | |
| 3460 | fatalerror("Unable to generate static RSP code\n"); | |
| 3461 | 3461 | } |
| 3462 | 3462 | } |
| 3463 | 3463 | |
| r17702 | r17703 | |
| 3579 | 3579 | { |
| 3580 | 3580 | rsp_state *rsp = (rsp_state *)param; |
| 3581 | 3581 | UINT32 opcode = rsp->impstate->arg0; |
| 3582 | fatalerror("PC=%08X: Unimplemented op %08X (%02X,%02X)", rsp->pc, opcode, opcode >> 26, opcode & 0x3f); | |
| 3582 | fatalerror("PC=%08X: Unimplemented op %08X (%02X,%02X)\n", rsp->pc, opcode, opcode >> 26, opcode & 0x3f); | |
| 3583 | 3583 | } |
| 3584 | 3584 | |
| 3585 | 3585 | |
| r17702 | r17703 | |
| 3590 | 3590 | #ifdef UNUSED_CODE |
| 3591 | 3591 | static void cfunc_fatalerror(void *param) |
| 3592 | 3592 | { |
| 3593 | fatalerror("fatalerror"); | |
| 3593 | fatalerror("fatalerror\n"); | |
| 3594 | 3594 | } |
| 3595 | 3595 | #endif |
| 3596 | 3596 |
| r17702 | r17703 | |
|---|---|---|
| 496 | 496 | UINT32 op; |
| 497 | 497 | |
| 498 | 498 | /* debugging */ |
| 499 | //if (jaguar->PC < 0xf03000 || jaguar->PC > 0xf04000) { fatalerror("GPU: jaguar->PC = %06X (ppc = %06X)", jaguar->PC, jaguar->ppc); } | |
| 499 | //if (jaguar->PC < 0xf03000 || jaguar->PC > 0xf04000) { fatalerror("GPU: jaguar->PC = %06X (ppc = %06X)\n", jaguar->PC, jaguar->ppc); } | |
| 500 | 500 | jaguar->ppc = jaguar->PC; |
| 501 | 501 | debugger_instruction_hook(device, jaguar->PC); |
| 502 | 502 | |
| r17702 | r17703 | |
| 535 | 535 | UINT32 op; |
| 536 | 536 | |
| 537 | 537 | /* debugging */ |
| 538 | //if (jaguar->PC < 0xf1b000 || jaguar->PC > 0xf1d000) { fatalerror(stderr, "DSP: jaguar->PC = %06X", jaguar->PC); } | |
| 538 | //if (jaguar->PC < 0xf1b000 || jaguar->PC > 0xf1d000) { fatalerror(stderr, "DSP: jaguar->PC = %06X\n", jaguar->PC); } | |
| 539 | 539 | jaguar->ppc = jaguar->PC; |
| 540 | 540 | debugger_instruction_hook(device, jaguar->PC); |
| 541 | 541 |
| r17702 | r17703 | |
|---|---|---|
| 6 | 6 | #ifndef PPC_DRC |
| 7 | 7 | static void ppc_unimplemented(UINT32 op) |
| 8 | 8 | { |
| 9 | fatalerror("ppc: Unimplemented opcode %08X at %08X", op, ppc.pc); | |
| 9 | fatalerror("ppc: Unimplemented opcode %08X at %08X\n", op, ppc.pc); | |
| 10 | 10 | } |
| 11 | 11 | |
| 12 | 12 | static void ppc_addx(UINT32 op) |
| r17702 | r17703 | |
| 1610 | 1610 | |
| 1611 | 1611 | static void ppc_invalid(UINT32 op) |
| 1612 | 1612 | { |
| 1613 | fatalerror("ppc: Invalid opcode %08X PC : %X", op, ppc.pc); | |
| 1613 | fatalerror("ppc: Invalid opcode %08X PC : %X\n", op, ppc.pc); | |
| 1614 | 1614 | } |
| 1615 | 1615 | #endif |
| 1616 | 1616 | |
| r17702 | r17703 | |
| 1951 | 1951 | { |
| 1952 | 1952 | case 268: REG(RT) = (UINT32)(ppc_read_timebase()); break; |
| 1953 | 1953 | case 269: REG(RT) = (UINT32)(ppc_read_timebase() >> 32); break; |
| 1954 | default: fatalerror("ppc: Invalid timebase register %d at %08X", x, ppc.pc); break; | |
| 1954 | default: fatalerror("ppc: Invalid timebase register %d at %08X\n", x, ppc.pc); break; | |
| 1955 | 1955 | } |
| 1956 | 1956 | } |
| 1957 | 1957 |
| r17702 | r17703 | |
|---|---|---|
| 69 | 69 | case DCR_DMACR3: ppc.dma[3].cr = value; ppc403_dma_exec(3); break; |
| 70 | 70 | |
| 71 | 71 | default: |
| 72 | fatalerror("ppc: set_dcr: Unimplemented DCR %X", dcr); | |
| 72 | fatalerror("ppc: set_dcr: Unimplemented DCR %X\n", dcr); | |
| 73 | 73 | break; |
| 74 | 74 | } |
| 75 | 75 | } |
| r17702 | r17703 | |
| 110 | 110 | case DCR_DMACR3: return ppc.dma[3].cr; |
| 111 | 111 | |
| 112 | 112 | default: |
| 113 | fatalerror("ppc: get_dcr: Unimplemented DCR %X", dcr); | |
| 113 | fatalerror("ppc: get_dcr: Unimplemented DCR %X\n", dcr); | |
| 114 | 114 | break; |
| 115 | 115 | } |
| 116 | 116 | } |
| r17702 | r17703 | |
| 232 | 232 | } |
| 233 | 233 | break; |
| 234 | 234 | case 3: |
| 235 | fatalerror("PPC: Watchdog Timer caused reset"); | |
| 235 | fatalerror("PPC: Watchdog Timer caused reset\n"); | |
| 236 | 236 | break; |
| 237 | 237 | } |
| 238 | 238 | } |
| r17702 | r17703 | |
| 395 | 395 | } |
| 396 | 396 | |
| 397 | 397 | default: |
| 398 | fatalerror("ppc: Unhandled exception %d", exception); | |
| 398 | fatalerror("ppc: Unhandled exception %d\n", exception); | |
| 399 | 399 | break; |
| 400 | 400 | } |
| 401 | 401 | } |
| r17702 | r17703 | |
| 452 | 452 | } |
| 453 | 453 | else |
| 454 | 454 | { |
| 455 | fatalerror("PPC: Unknown IRQ line %d", irqline); | |
| 455 | fatalerror("PPC: Unknown IRQ line %d\n", irqline); | |
| 456 | 456 | } |
| 457 | 457 | } |
| 458 | 458 | |
| r17702 | r17703 | |
| 565 | 565 | case 0x7: return ppc.spu.sprc; |
| 566 | 566 | case 0x8: return ppc.spu.sptc; |
| 567 | 567 | case 0x9: return ppc.spu.sprb; |
| 568 | default: fatalerror("ppc: spu_r: %02X", a & 0xf); | |
| 568 | default: fatalerror("ppc: spu_r: %02X\n", a & 0xf); | |
| 569 | 569 | } |
| 570 | 570 | } |
| 571 | 571 | |
| r17702 | r17703 | |
| 671 | 671 | break; |
| 672 | 672 | |
| 673 | 673 | default: |
| 674 | fatalerror("ppc: spu_w: %02X, %02X", a & 0xf, d); | |
| 674 | fatalerror("ppc: spu_w: %02X, %02X\n", a & 0xf, d); | |
| 675 | 675 | break; |
| 676 | 676 | } |
| 677 | 677 | //mame_printf_debug("spu_w: %02X, %02X at %08X\n", a & 0xf, d, ppc.pc); |
| r17702 | r17703 | |
| 821 | 821 | #endif |
| 822 | 822 | } |
| 823 | 823 | else { |
| 824 | fatalerror("ppc: dma_exec: buffered DMA to unknown peripheral ! (channel %d)", ch); | |
| 824 | fatalerror("ppc: dma_exec: buffered DMA to unknown peripheral ! (channel %d)\n", ch); | |
| 825 | 825 | } |
| 826 | 826 | |
| 827 | 827 | } |
| 828 | 828 | break; |
| 829 | 829 | |
| 830 | 830 | case 1: /* fly-by DMA */ |
| 831 | fatalerror("ppc: dma_exec: fly-by DMA not implemented"); | |
| 831 | fatalerror("ppc: dma_exec: fly-by DMA not implemented\n"); | |
| 832 | 832 | break; |
| 833 | 833 | |
| 834 | 834 | case 2: /* software initiated mem-to-mem DMA */ |
| r17702 | r17703 | |
| 879 | 879 | } |
| 880 | 880 | break; |
| 881 | 881 | default: |
| 882 | fatalerror("dma: dma_exec: SW mem-to-mem DMA, width = %d", width); | |
| 882 | fatalerror("dma: dma_exec: SW mem-to-mem DMA, width = %d\n", width); | |
| 883 | 883 | } |
| 884 | 884 | break; |
| 885 | 885 | |
| 886 | 886 | case 3: /* hardware initiated mem-to-mem DMA */ |
| 887 | fatalerror("ppc: dma_exec: HW mem-to-mem DMA not implemented"); | |
| 887 | fatalerror("ppc: dma_exec: HW mem-to-mem DMA not implemented\n"); | |
| 888 | 888 | break; |
| 889 | 889 | } |
| 890 | 890 | |
| r17702 | r17703 | |
| 892 | 892 | |
| 893 | 893 | /* DEBUG: check for not yet supported features */ |
| 894 | 894 | if( (ppc.dma[ch].cr & DMA_TCE) == 0 ) |
| 895 | fatalerror("ppc: dma_exec: DMA_TCE == 0"); | |
| 895 | fatalerror("ppc: dma_exec: DMA_TCE == 0\n"); | |
| 896 | 896 | |
| 897 | 897 | if( ppc.dma[ch].cr & DMA_CH ) |
| 898 | fatalerror("ppc: dma_exec: DMA chaining not implemented"); | |
| 898 | fatalerror("ppc: dma_exec: DMA chaining not implemented\n"); | |
| 899 | 899 | |
| 900 | 900 | /* generate interrupts */ |
| 901 | 901 | if( ppc.dma[ch].cr & DMA_CIE ) |
| r17702 | r17703 | |
| 931 | 931 | |
| 932 | 932 | static UINT16 ppc403_read16_unaligned(address_space *space, UINT32 a) |
| 933 | 933 | { |
| 934 | fatalerror("ppc: Unaligned read16 %08X at %08X", a, ppc.pc); | |
| 934 | fatalerror("ppc: Unaligned read16 %08X at %08X\n", a, ppc.pc); | |
| 935 | 935 | return 0; |
| 936 | 936 | } |
| 937 | 937 | |
| 938 | 938 | static UINT32 ppc403_read32_unaligned(address_space *space, UINT32 a) |
| 939 | 939 | { |
| 940 | fatalerror("ppc: Unaligned read32 %08X at %08X", a, ppc.pc); | |
| 940 | fatalerror("ppc: Unaligned read32 %08X at %08X\n", a, ppc.pc); | |
| 941 | 941 | return 0; |
| 942 | 942 | } |
| 943 | 943 | |
| 944 | 944 | static void ppc403_write16_unaligned(address_space *space, UINT32 a, UINT16 d) |
| 945 | 945 | { |
| 946 | fatalerror("ppc: Unaligned write16 %08X, %04X at %08X", a, d, ppc.pc); | |
| 946 | fatalerror("ppc: Unaligned write16 %08X, %04X at %08X\n", a, d, ppc.pc); | |
| 947 | 947 | } |
| 948 | 948 | |
| 949 | 949 | static void ppc403_write32_unaligned(address_space *space, UINT32 a, UINT32 d) |
| 950 | 950 | { |
| 951 | fatalerror("ppc: Unaligned write32 %08X, %08X at %08X", a, d, ppc.pc); | |
| 951 | fatalerror("ppc: Unaligned write32 %08X, %08X at %08X\n", a, d, ppc.pc); | |
| 952 | 952 | } |
| 953 | 953 |
| r17702 | r17703 | |
|---|---|---|
| 157 | 157 | |
| 158 | 158 | |
| 159 | 159 | default: |
| 160 | fatalerror("ppc: Unhandled exception %d", exception); | |
| 160 | fatalerror("ppc: Unhandled exception %d\n", exception); | |
| 161 | 161 | break; |
| 162 | 162 | } |
| 163 | 163 | } |
| r17702 | r17703 | |
|---|---|---|
| 912 | 912 | } |
| 913 | 913 | catch (drcuml_block::abort_compilation &) |
| 914 | 914 | { |
| 915 | fatalerror("Error generating PPC static handlers"); | |
| 915 | fatalerror("Error generating PPC static handlers\n"); | |
| 916 | 916 | } |
| 917 | 917 | } |
| 918 | 918 | |
| r17702 | r17703 | |
| 1096 | 1096 | { |
| 1097 | 1097 | powerpc_state *ppc = (powerpc_state *)param; |
| 1098 | 1098 | UINT32 opcode = ppc->impstate->arg0; |
| 1099 | fatalerror("PC=%08X: Unimplemented op %08X", ppc->pc, opcode); | |
| 1099 | fatalerror("PC=%08X: Unimplemented op %08X\n", ppc->pc, opcode); | |
| 1100 | 1100 | } |
| 1101 | 1101 | |
| 1102 | 1102 |
| r17702 | r17703 | |
|---|---|---|
| 160 | 160 | break; |
| 161 | 161 | |
| 162 | 162 | default: |
| 163 | fatalerror("ppc: Unhandled exception %d", exception); | |
| 163 | fatalerror("ppc: Unhandled exception %d\n", exception); | |
| 164 | 164 | break; |
| 165 | 165 | } |
| 166 | 166 | } |
| r17702 | r17703 | |
|---|---|---|
| 176 | 176 | { |
| 177 | 177 | /* direct store translation */ |
| 178 | 178 | if ((flags & PPC_TRANSLATE_NOEXCEPTION) == 0) |
| 179 | fatalerror("ppc: direct store translation not yet implemented"); | |
| 179 | fatalerror("ppc: direct store translation not yet implemented\n"); | |
| 180 | 180 | return 0; |
| 181 | 181 | } |
| 182 | 182 | else |
| r17702 | r17703 | |
|---|---|---|
| 507 | 507 | { |
| 508 | 508 | /* we don't support the MMU of the 403GCX */ |
| 509 | 509 | if (ppc->flavor == PPC_MODEL_403GCX && (ppc->msr & MSROEA_DR)) |
| 510 | fatalerror("MMU enabled but not supported!"); | |
| 510 | fatalerror("MMU enabled but not supported!\n"); | |
| 511 | 511 | |
| 512 | 512 | /* only check if PE is enabled */ |
| 513 | 513 | if (transtype == TRANSLATE_WRITE && (ppc->msr & MSR4XX_PE)) |
| r17702 | r17703 | |
| 2023 | 2023 | |
| 2024 | 2024 | /* check for unsupported features */ |
| 2025 | 2025 | if (!(dmaregs[DCR4XX_DMACR0] & PPC4XX_DMACR_TCE)) |
| 2026 | fatalerror("ppc4xx_dma_exec: DMA_TCE == 0"); | |
| 2026 | fatalerror("ppc4xx_dma_exec: DMA_TCE == 0\n"); | |
| 2027 | 2027 | |
| 2028 | 2028 | /* transfer mode */ |
| 2029 | 2029 | switch ((dmaregs[DCR4XX_DMACR0] & PPC4XX_DMACR_TM_MASK) >> 21) |
| r17702 | r17703 | |
| 2058 | 2058 | |
| 2059 | 2059 | /* fly-by mode DMA */ |
| 2060 | 2060 | case 1: |
| 2061 | fatalerror("ppc4xx_dma_exec: fly-by DMA not implemented"); | |
| 2061 | fatalerror("ppc4xx_dma_exec: fly-by DMA not implemented\n"); | |
| 2062 | 2062 | break; |
| 2063 | 2063 | |
| 2064 | 2064 | /* software initiated memory-to-memory mode DMA */ |
| r17702 | r17703 | |
| 2114 | 2114 | |
| 2115 | 2115 | /* hardware initiated memory-to-memory mode DMA */ |
| 2116 | 2116 | case 3: |
| 2117 | fatalerror("ppc4xx_dma_exec: HW mem-to-mem DMA not implemented"); | |
| 2117 | fatalerror("ppc4xx_dma_exec: HW mem-to-mem DMA not implemented\n"); | |
| 2118 | 2118 | break; |
| 2119 | 2119 | } |
| 2120 | 2120 | } |
| r17702 | r17703 | |
| 2225 | 2225 | /* fail if we are going to overflow */ |
| 2226 | 2226 | new_rxin = (ppc->spu.rxin + 1) % ARRAY_LENGTH(ppc->spu.rxbuffer); |
| 2227 | 2227 | if (new_rxin == ppc->spu.rxout) |
| 2228 | fatalerror("ppc4xx_spu_rx_data: buffer overrun!"); | |
| 2228 | fatalerror("ppc4xx_spu_rx_data: buffer overrun!\n"); | |
| 2229 | 2229 | |
| 2230 | 2230 | /* store the data and accept the new in index */ |
| 2231 | 2231 | ppc->spu.rxbuffer[ppc->spu.rxin] = data; |
| r17702 | r17703 | |
|---|---|---|
| 671 | 671 | } |
| 672 | 672 | } |
| 673 | 673 | |
| 674 | fatalerror("ppc: set_spr: unknown spr %d (%03X) | |
| 674 | fatalerror("ppc: set_spr: unknown spr %d (%03X) | |
| 675 | 675 | } |
| 676 | 676 | |
| 677 | 677 | INLINE UINT32 ppc_get_spr(int spr) |
| r17702 | r17703 | |
| 739 | 739 | switch (spr) |
| 740 | 740 | { |
| 741 | 741 | case SPR603E_TBL_R: |
| 742 | fatalerror("ppc: get_spr: TBL_R | |
| 742 | fatalerror("ppc: get_spr: TBL_R\n"); | |
| 743 | 743 | break; |
| 744 | 744 | |
| 745 | 745 | case SPR603E_TBU_R: |
| 746 | fatalerror("ppc: get_spr: TBU_R | |
| 746 | fatalerror("ppc: get_spr: TBU_R\n"); | |
| 747 | 747 | break; |
| 748 | 748 | |
| 749 | 749 | case SPR603E_TBL_W: return (UINT32)(ppc_read_timebase()); |
| r17702 | r17703 | |
| 782 | 782 | } |
| 783 | 783 | } |
| 784 | 784 | |
| 785 | fatalerror("ppc: get_spr: unknown spr %d (%03X) | |
| 785 | fatalerror("ppc: get_spr: unknown spr %d (%03X) | |
| 786 | 786 | return 0; |
| 787 | 787 | } |
| 788 | 788 | |
| r17702 | r17703 | |
| 798 | 798 | INLINE void ppc_set_msr(UINT32 value) |
| 799 | 799 | { |
| 800 | 800 | if( value & (MSR_ILE | MSR_LE) ) |
| 801 | fatalerror("ppc: set_msr: little_endian mode not supported | |
| 801 | fatalerror("ppc: set_msr: little_endian mode not supported | |
| 802 | 802 | |
| 803 | 803 | MSR = value; |
| 804 | 804 | |
| r17702 | r17703 | |
| 1152 | 1152 | |
| 1153 | 1153 | if (pll_config == -1) |
| 1154 | 1154 | { |
| 1155 | fatalerror("PPC: Invalid bus/multiplier combination (bus frequency = %d, multiplier = %1.1f)", config->bus_frequency, multiplier); | |
| 1155 | fatalerror("PPC: Invalid bus/multiplier combination (bus frequency = %d, multiplier = %1.1f)\n", config->bus_frequency, multiplier); | |
| 1156 | 1156 | } |
| 1157 | 1157 | |
| 1158 | 1158 | ppc.hid1 = pll_config << 28; |
| r17702 | r17703 | |
|---|---|---|
| 272 | 272 | |
| 273 | 273 | /* handle the results */ |
| 274 | 274 | if (!(result & RECOMPILE_SUCCESSFUL)) |
| 275 | fatalerror("Unimplemented op %08X", *opptr); | |
| 275 | fatalerror("Unimplemented op %08X\n", *opptr); | |
| 276 | 276 | |
| 277 | 277 | pcdelta = (INT8)(result >> 24); |
| 278 | 278 | cycles = (INT8)(result >> 16); |
| r17702 | r17703 | |
|---|---|---|
| 199 | 199 | case 'w': |
| 200 | 200 | bit --; |
| 201 | 201 | break; |
| 202 | default: fatalerror("Invalid instruction encoding '%s %s'", | |
| 202 | default: fatalerror("Invalid instruction encoding '%s %s'\n", | |
| 203 | 203 | ops[0],ops[1]); |
| 204 | 204 | } |
| 205 | 205 | } |
| 206 | 206 | if (bit != -1 ) |
| 207 | 207 | { |
| 208 | fatalerror("not enough bits in encoding '%s %s' %d", | |
| 208 | fatalerror("not enough bits in encoding '%s %s' %d\n", | |
| 209 | 209 | ops[0],ops[1],bit); |
| 210 | 210 | } |
| 211 | 211 | while (isspace((UINT8)*p)) p++; |
| r17702 | r17703 | |
| 289 | 289 | case 'w': w <<=1; w |= ((code & (1<<bit)) ? 1 : 0); bit--; break; |
| 290 | 290 | case ' ': break; |
| 291 | 291 | case '1': case '0': bit--; break; |
| 292 | case '\0': fatalerror("premature end of parse string, opcode %x, bit = %d",code,bit); | |
| 292 | case '\0': fatalerror("premature end of parse string, opcode %x, bit = %d\n",code,bit); | |
| 293 | 293 | } |
| 294 | 294 | cp++; |
| 295 | 295 | } |
| r17702 | r17703 | |
| 321 | 321 | case 'S': sprintf(num,",%d",s); break; |
| 322 | 322 | case 'W': sprintf(num,"%04Xh",w); break; |
| 323 | 323 | default: |
| 324 | fatalerror("illegal escape character in format '%s'",Op[op].fmt); | |
| 324 | fatalerror("illegal escape character in format '%s'\n",Op[op].fmt); | |
| 325 | 325 | } |
| 326 | 326 | q = num; while (*q) *buffer++ = *q++; |
| 327 | 327 | *buffer = '\0'; |
| r17702 | r17703 | |
|---|---|---|
| 276 | 276 | { |
| 277 | 277 | sh2_state *sh2 = (sh2_state *)param; |
| 278 | 278 | UINT16 opcode = sh2->arg0; |
| 279 | fatalerror("PC=%08X: Unimplemented op %04X", sh2->pc, opcode); | |
| 279 | fatalerror("PC=%08X: Unimplemented op %04X\n", sh2->pc, opcode); | |
| 280 | 280 | } |
| 281 | 281 | |
| 282 | 282 | /*------------------------------------------------- |
| r17702 | r17703 | |
| 863 | 863 | } |
| 864 | 864 | catch (drcuml_block::abort_compilation &) |
| 865 | 865 | { |
| 866 | fatalerror("Unable to generate SH2 static code"); | |
| 866 | fatalerror("Unable to generate SH2 static code\n"); | |
| 867 | 867 | } |
| 868 | 868 | |
| 869 | 869 | sh2->cache_dirty = FALSE; |
| r17702 | r17703 | |
|---|---|---|
| 360 | 360 | { |
| 361 | 361 | //printf("dma stalled\n"); |
| 362 | 362 | sh2->dma_timer_active[dma]=2;// mark as stalled |
| 363 | fatalerror("SH2 dma_callback_fifo_data_available == 0 in unsupported mode"); | |
| 363 | fatalerror("SH2 dma_callback_fifo_data_available == 0 in unsupported mode\n"); | |
| 364 | 364 | } |
| 365 | 365 | } |
| 366 | 366 |
| r17702 | r17703 | |
|---|---|---|
| 269 | 269 | |
| 270 | 270 | static void op_invalid(tms32051_state *cpustate) |
| 271 | 271 | { |
| 272 | fatalerror("32051: invalid op at %08X", cpustate->pc-1); | |
| 272 | fatalerror("32051: invalid op at %08X\n", cpustate->pc-1); | |
| 273 | 273 | } |
| 274 | 274 | |
| 275 | 275 | static void op_group_be(tms32051_state *cpustate); |
| r17702 | r17703 | |
| 279 | 279 | |
| 280 | 280 | static void op_abs(tms32051_state *cpustate) |
| 281 | 281 | { |
| 282 | fatalerror("32051: unimplemented op abs at %08X", cpustate->pc-1); | |
| 282 | fatalerror("32051: unimplemented op abs at %08X\n", cpustate->pc-1); | |
| 283 | 283 | } |
| 284 | 284 | |
| 285 | 285 | static void op_adcb(tms32051_state *cpustate) |
| 286 | 286 | { |
| 287 | fatalerror("32051: unimplemented op adcb at %08X", cpustate->pc-1); | |
| 287 | fatalerror("32051: unimplemented op adcb at %08X\n", cpustate->pc-1); | |
| 288 | 288 | } |
| 289 | 289 | |
| 290 | 290 | static void op_add_mem(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 339 | 339 | |
| 340 | 340 | static void op_add_s16_mem(tms32051_state *cpustate) |
| 341 | 341 | { |
| 342 | fatalerror("32051: unimplemented op add s16 mem at %08X", cpustate->pc-1); | |
| 342 | fatalerror("32051: unimplemented op add s16 mem at %08X\n", cpustate->pc-1); | |
| 343 | 343 | } |
| 344 | 344 | |
| 345 | 345 | static void op_addb(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 351 | 351 | |
| 352 | 352 | static void op_addc(tms32051_state *cpustate) |
| 353 | 353 | { |
| 354 | fatalerror("32051: unimplemented op addc at %08X", cpustate->pc-1); | |
| 354 | fatalerror("32051: unimplemented op addc at %08X\n", cpustate->pc-1); | |
| 355 | 355 | } |
| 356 | 356 | |
| 357 | 357 | static void op_adds(tms32051_state *cpustate) |
| 358 | 358 | { |
| 359 | fatalerror("32051: unimplemented op adds at %08X", cpustate->pc-1); | |
| 359 | fatalerror("32051: unimplemented op adds at %08X\n", cpustate->pc-1); | |
| 360 | 360 | } |
| 361 | 361 | |
| 362 | 362 | static void op_addt(tms32051_state *cpustate) |
| 363 | 363 | { |
| 364 | fatalerror("32051: unimplemented op addt at %08X", cpustate->pc-1); | |
| 364 | fatalerror("32051: unimplemented op addt at %08X\n", cpustate->pc-1); | |
| 365 | 365 | } |
| 366 | 366 | |
| 367 | 367 | static void op_and_mem(tms32051_state *cpustate) |
| 368 | 368 | { |
| 369 | fatalerror("32051: unimplemented op and mem at %08X", cpustate->pc-1); | |
| 369 | fatalerror("32051: unimplemented op and mem at %08X\n", cpustate->pc-1); | |
| 370 | 370 | } |
| 371 | 371 | |
| 372 | 372 | static void op_and_limm(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 381 | 381 | |
| 382 | 382 | static void op_and_s16_limm(tms32051_state *cpustate) |
| 383 | 383 | { |
| 384 | fatalerror("32051: unimplemented op and s16 limm at %08X", cpustate->pc-1); | |
| 384 | fatalerror("32051: unimplemented op and s16 limm at %08X\n", cpustate->pc-1); | |
| 385 | 385 | } |
| 386 | 386 | |
| 387 | 387 | static void op_andb(tms32051_state *cpustate) |
| 388 | 388 | { |
| 389 | fatalerror("32051: unimplemented op andb at %08X", cpustate->pc-1); | |
| 389 | fatalerror("32051: unimplemented op andb at %08X\n", cpustate->pc-1); | |
| 390 | 390 | } |
| 391 | 391 | |
| 392 | 392 | static void op_bsar(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 520 | 520 | |
| 521 | 521 | static void op_lact(tms32051_state *cpustate) |
| 522 | 522 | { |
| 523 | fatalerror("32051: unimplemented op lact at %08X", cpustate->pc-1); | |
| 523 | fatalerror("32051: unimplemented op lact at %08X\n", cpustate->pc-1); | |
| 524 | 524 | } |
| 525 | 525 | |
| 526 | 526 | static void op_lamm(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 550 | 550 | |
| 551 | 551 | static void op_norm(tms32051_state *cpustate) |
| 552 | 552 | { |
| 553 | fatalerror("32051: unimplemented op norm at %08X", cpustate->pc-1); | |
| 553 | fatalerror("32051: unimplemented op norm at %08X\n", cpustate->pc-1); | |
| 554 | 554 | } |
| 555 | 555 | |
| 556 | 556 | static void op_or_mem(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 575 | 575 | |
| 576 | 576 | static void op_or_s16_limm(tms32051_state *cpustate) |
| 577 | 577 | { |
| 578 | fatalerror("32051: unimplemented op or s16 limm at %08X", cpustate->pc-1); | |
| 578 | fatalerror("32051: unimplemented op or s16 limm at %08X\n", cpustate->pc-1); | |
| 579 | 579 | } |
| 580 | 580 | |
| 581 | 581 | static void op_orb(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 587 | 587 | |
| 588 | 588 | static void op_rol(tms32051_state *cpustate) |
| 589 | 589 | { |
| 590 | fatalerror("32051: unimplemented op rol at %08X", cpustate->pc-1); | |
| 590 | fatalerror("32051: unimplemented op rol at %08X\n", cpustate->pc-1); | |
| 591 | 591 | } |
| 592 | 592 | |
| 593 | 593 | static void op_rolb(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 605 | 605 | |
| 606 | 606 | static void op_ror(tms32051_state *cpustate) |
| 607 | 607 | { |
| 608 | fatalerror("32051: unimplemented op ror at %08X", cpustate->pc-1); | |
| 608 | fatalerror("32051: unimplemented op ror at %08X\n", cpustate->pc-1); | |
| 609 | 609 | } |
| 610 | 610 | |
| 611 | 611 | static void op_rorb(tms32051_state *cpustate) |
| 612 | 612 | { |
| 613 | fatalerror("32051: unimplemented op rorb at %08X", cpustate->pc-1); | |
| 613 | fatalerror("32051: unimplemented op rorb at %08X\n", cpustate->pc-1); | |
| 614 | 614 | } |
| 615 | 615 | |
| 616 | 616 | static void op_sacb(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 649 | 649 | |
| 650 | 650 | static void op_sath(tms32051_state *cpustate) |
| 651 | 651 | { |
| 652 | fatalerror("32051: unimplemented op sath at %08X", cpustate->pc-1); | |
| 652 | fatalerror("32051: unimplemented op sath at %08X\n", cpustate->pc-1); | |
| 653 | 653 | } |
| 654 | 654 | |
| 655 | 655 | static void op_satl(tms32051_state *cpustate) |
| 656 | 656 | { |
| 657 | fatalerror("32051: unimplemented op satl at %08X", cpustate->pc-1); | |
| 657 | fatalerror("32051: unimplemented op satl at %08X\n", cpustate->pc-1); | |
| 658 | 658 | } |
| 659 | 659 | |
| 660 | 660 | static void op_sbb(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 666 | 666 | |
| 667 | 667 | static void op_sbbb(tms32051_state *cpustate) |
| 668 | 668 | { |
| 669 | fatalerror("32051: unimplemented op sbbb at %08X", cpustate->pc-1); | |
| 669 | fatalerror("32051: unimplemented op sbbb at %08X\n", cpustate->pc-1); | |
| 670 | 670 | } |
| 671 | 671 | |
| 672 | 672 | static void op_sfl(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 707 | 707 | |
| 708 | 708 | static void op_sfrb(tms32051_state *cpustate) |
| 709 | 709 | { |
| 710 | fatalerror("32051: unimplemented op sfrb at %08X", cpustate->pc-1); | |
| 710 | fatalerror("32051: unimplemented op sfrb at %08X\n", cpustate->pc-1); | |
| 711 | 711 | } |
| 712 | 712 | |
| 713 | 713 | static void op_sub_mem(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 733 | 733 | |
| 734 | 734 | static void op_sub_s16_mem(tms32051_state *cpustate) |
| 735 | 735 | { |
| 736 | fatalerror("32051: unimplemented op sub s16 mem at %08X", cpustate->pc-1); | |
| 736 | fatalerror("32051: unimplemented op sub s16 mem at %08X\n", cpustate->pc-1); | |
| 737 | 737 | } |
| 738 | 738 | |
| 739 | 739 | static void op_sub_simm(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 767 | 767 | |
| 768 | 768 | static void op_subb(tms32051_state *cpustate) |
| 769 | 769 | { |
| 770 | fatalerror("32051: unimplemented op subb at %08X", cpustate->pc-1); | |
| 770 | fatalerror("32051: unimplemented op subb at %08X\n", cpustate->pc-1); | |
| 771 | 771 | } |
| 772 | 772 | |
| 773 | 773 | static void op_subc(tms32051_state *cpustate) |
| 774 | 774 | { |
| 775 | fatalerror("32051: unimplemented op subc at %08X", cpustate->pc-1); | |
| 775 | fatalerror("32051: unimplemented op subc at %08X\n", cpustate->pc-1); | |
| 776 | 776 | } |
| 777 | 777 | |
| 778 | 778 | static void op_subs(tms32051_state *cpustate) |
| 779 | 779 | { |
| 780 | fatalerror("32051: unimplemented op subs at %08X", cpustate->pc-1); | |
| 780 | fatalerror("32051: unimplemented op subs at %08X\n", cpustate->pc-1); | |
| 781 | 781 | } |
| 782 | 782 | |
| 783 | 783 | static void op_subt(tms32051_state *cpustate) |
| 784 | 784 | { |
| 785 | fatalerror("32051: unimplemented op subt at %08X", cpustate->pc-1); | |
| 785 | fatalerror("32051: unimplemented op subt at %08X\n", cpustate->pc-1); | |
| 786 | 786 | } |
| 787 | 787 | |
| 788 | 788 | static void op_xor_mem(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 807 | 807 | |
| 808 | 808 | static void op_xor_s16_limm(tms32051_state *cpustate) |
| 809 | 809 | { |
| 810 | fatalerror("32051: unimplemented op xor s16 limm at %08X", cpustate->pc-1); | |
| 810 | fatalerror("32051: unimplemented op xor s16 limm at %08X\n", cpustate->pc-1); | |
| 811 | 811 | } |
| 812 | 812 | |
| 813 | 813 | static void op_xorb(tms32051_state *cpustate) |
| 814 | 814 | { |
| 815 | fatalerror("32051: unimplemented op xorb at %08X", cpustate->pc-1); | |
| 815 | fatalerror("32051: unimplemented op xorb at %08X\n", cpustate->pc-1); | |
| 816 | 816 | } |
| 817 | 817 | |
| 818 | 818 | static void op_zalr(tms32051_state *cpustate) |
| 819 | 819 | { |
| 820 | fatalerror("32051: unimplemented op zalr at %08X", cpustate->pc-1); | |
| 820 | fatalerror("32051: unimplemented op zalr at %08X\n", cpustate->pc-1); | |
| 821 | 821 | } |
| 822 | 822 | |
| 823 | 823 | static void op_zap(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 911 | 911 | |
| 912 | 912 | static void op_ldp_mem(tms32051_state *cpustate) |
| 913 | 913 | { |
| 914 | fatalerror("32051: unimplemented op ldp mem at %08X", cpustate->pc-1); | |
| 914 | fatalerror("32051: unimplemented op ldp mem at %08X\n", cpustate->pc-1); | |
| 915 | 915 | } |
| 916 | 916 | |
| 917 | 917 | static void op_ldp_imm(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 995 | 995 | |
| 996 | 996 | static void op_banzd(tms32051_state *cpustate) |
| 997 | 997 | { |
| 998 | fatalerror("32051: unimplemented op banzd at %08X", cpustate->pc-1); | |
| 998 | fatalerror("32051: unimplemented op banzd at %08X\n", cpustate->pc-1); | |
| 999 | 999 | } |
| 1000 | 1000 | |
| 1001 | 1001 | static void op_bcnd(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1084 | 1084 | |
| 1085 | 1085 | static void op_cc(tms32051_state *cpustate) |
| 1086 | 1086 | { |
| 1087 | fatalerror("32051: unimplemented op cc at %08X", cpustate->pc-1); | |
| 1087 | fatalerror("32051: unimplemented op cc at %08X\n", cpustate->pc-1); | |
| 1088 | 1088 | } |
| 1089 | 1089 | |
| 1090 | 1090 | static void op_ccd(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1104 | 1104 | |
| 1105 | 1105 | static void op_intr(tms32051_state *cpustate) |
| 1106 | 1106 | { |
| 1107 | fatalerror("32051: unimplemented op intr at %08X", cpustate->pc-1); | |
| 1107 | fatalerror("32051: unimplemented op intr at %08X\n", cpustate->pc-1); | |
| 1108 | 1108 | } |
| 1109 | 1109 | |
| 1110 | 1110 | static void op_nmi(tms32051_state *cpustate) |
| 1111 | 1111 | { |
| 1112 | fatalerror("32051: unimplemented op nmi at %08X", cpustate->pc-1); | |
| 1112 | fatalerror("32051: unimplemented op nmi at %08X\n", cpustate->pc-1); | |
| 1113 | 1113 | } |
| 1114 | 1114 | |
| 1115 | 1115 | static void op_retc(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1155 | 1155 | |
| 1156 | 1156 | static void op_reti(tms32051_state *cpustate) |
| 1157 | 1157 | { |
| 1158 | fatalerror("32051: unimplemented op reti at %08X", cpustate->pc-1); | |
| 1158 | fatalerror("32051: unimplemented op reti at %08X\n", cpustate->pc-1); | |
| 1159 | 1159 | } |
| 1160 | 1160 | |
| 1161 | 1161 | static void op_trap(tms32051_state *cpustate) |
| 1162 | 1162 | { |
| 1163 | fatalerror("32051: unimplemented op trap at %08X", cpustate->pc-1); | |
| 1163 | fatalerror("32051: unimplemented op trap at %08X\n", cpustate->pc-1); | |
| 1164 | 1164 | } |
| 1165 | 1165 | |
| 1166 | 1166 | static void op_xc(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1213 | 1213 | |
| 1214 | 1214 | static void op_bldd_sbmar(tms32051_state *cpustate) |
| 1215 | 1215 | { |
| 1216 | fatalerror("32051: unimplemented op bldd sbmar at %08X", cpustate->pc-1); | |
| 1216 | fatalerror("32051: unimplemented op bldd sbmar at %08X\n", cpustate->pc-1); | |
| 1217 | 1217 | } |
| 1218 | 1218 | |
| 1219 | 1219 | static void op_bldd_dbmar(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1250 | 1250 | |
| 1251 | 1251 | static void op_blpd_bmar(tms32051_state *cpustate) |
| 1252 | 1252 | { |
| 1253 | fatalerror("32051: unimplemented op bpld bmar at %08X", cpustate->pc-1); | |
| 1253 | fatalerror("32051: unimplemented op bpld bmar at %08X\n", cpustate->pc-1); | |
| 1254 | 1254 | } |
| 1255 | 1255 | |
| 1256 | 1256 | static void op_blpd_imm(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1273 | 1273 | |
| 1274 | 1274 | static void op_dmov(tms32051_state *cpustate) |
| 1275 | 1275 | { |
| 1276 | fatalerror("32051: unimplemented op dmov at %08X", cpustate->pc-1); | |
| 1276 | fatalerror("32051: unimplemented op dmov at %08X\n", cpustate->pc-1); | |
| 1277 | 1277 | } |
| 1278 | 1278 | |
| 1279 | 1279 | static void op_in(tms32051_state *cpustate) |
| 1280 | 1280 | { |
| 1281 | fatalerror("32051: unimplemented op in at %08X", cpustate->pc-1); | |
| 1281 | fatalerror("32051: unimplemented op in at %08X\n", cpustate->pc-1); | |
| 1282 | 1282 | } |
| 1283 | 1283 | |
| 1284 | 1284 | static void op_lmmr(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1299 | 1299 | |
| 1300 | 1300 | static void op_out(tms32051_state *cpustate) |
| 1301 | 1301 | { |
| 1302 | fatalerror("32051: unimplemented op out at %08X", cpustate->pc-1); | |
| 1302 | fatalerror("32051: unimplemented op out at %08X\n", cpustate->pc-1); | |
| 1303 | 1303 | } |
| 1304 | 1304 | |
| 1305 | 1305 | static void op_smmr(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1373 | 1373 | |
| 1374 | 1374 | static void op_cpl_dbmr(tms32051_state *cpustate) |
| 1375 | 1375 | { |
| 1376 | fatalerror("32051: unimplemented op cpl dbmr at %08X", cpustate->pc-1); | |
| 1376 | fatalerror("32051: unimplemented op cpl dbmr at %08X\n", cpustate->pc-1); | |
| 1377 | 1377 | } |
| 1378 | 1378 | |
| 1379 | 1379 | static void op_cpl_imm(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1418 | 1418 | |
| 1419 | 1419 | static void op_xpl_dbmr(tms32051_state *cpustate) |
| 1420 | 1420 | { |
| 1421 | fatalerror("32051: unimplemented op xpl dbmr at %08X", cpustate->pc-1); | |
| 1421 | fatalerror("32051: unimplemented op xpl dbmr at %08X\n", cpustate->pc-1); | |
| 1422 | 1422 | } |
| 1423 | 1423 | |
| 1424 | 1424 | static void op_xpl_imm(tms32051_state *cpustate) |
| 1425 | 1425 | { |
| 1426 | fatalerror("32051: unimplemented op xpl imm at %08X", cpustate->pc-1); | |
| 1426 | fatalerror("32051: unimplemented op xpl imm at %08X\n", cpustate->pc-1); | |
| 1427 | 1427 | } |
| 1428 | 1428 | |
| 1429 | 1429 | static void op_apac(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1436 | 1436 | |
| 1437 | 1437 | static void op_lph(tms32051_state *cpustate) |
| 1438 | 1438 | { |
| 1439 | fatalerror("32051: unimplemented op lph at %08X", cpustate->pc-1); | |
| 1439 | fatalerror("32051: unimplemented op lph at %08X\n", cpustate->pc-1); | |
| 1440 | 1440 | } |
| 1441 | 1441 | |
| 1442 | 1442 | static void op_lt(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1474 | 1474 | |
| 1475 | 1475 | static void op_ltd(tms32051_state *cpustate) |
| 1476 | 1476 | { |
| 1477 | fatalerror("32051: unimplemented op ltd at %08X", cpustate->pc-1); | |
| 1477 | fatalerror("32051: unimplemented op ltd at %08X\n", cpustate->pc-1); | |
| 1478 | 1478 | } |
| 1479 | 1479 | |
| 1480 | 1480 | static void op_ltp(tms32051_state *cpustate) |
| 1481 | 1481 | { |
| 1482 | fatalerror("32051: unimplemented op ltp at %08X", cpustate->pc-1); | |
| 1482 | fatalerror("32051: unimplemented op ltp at %08X\n", cpustate->pc-1); | |
| 1483 | 1483 | } |
| 1484 | 1484 | |
| 1485 | 1485 | static void op_lts(tms32051_state *cpustate) |
| 1486 | 1486 | { |
| 1487 | fatalerror("32051: unimplemented op lts at %08X", cpustate->pc-1); | |
| 1487 | fatalerror("32051: unimplemented op lts at %08X\n", cpustate->pc-1); | |
| 1488 | 1488 | } |
| 1489 | 1489 | |
| 1490 | 1490 | static void op_mac(tms32051_state *cpustate) |
| 1491 | 1491 | { |
| 1492 | fatalerror("32051: unimplemented op mac at %08X", cpustate->pc-1); | |
| 1492 | fatalerror("32051: unimplemented op mac at %08X\n", cpustate->pc-1); | |
| 1493 | 1493 | } |
| 1494 | 1494 | |
| 1495 | 1495 | static void op_macd(tms32051_state *cpustate) |
| 1496 | 1496 | { |
| 1497 | fatalerror("32051: unimplemented op macd at %08X", cpustate->pc-1); | |
| 1497 | fatalerror("32051: unimplemented op macd at %08X\n", cpustate->pc-1); | |
| 1498 | 1498 | } |
| 1499 | 1499 | |
| 1500 | 1500 | static void op_madd(tms32051_state *cpustate) |
| 1501 | 1501 | { |
| 1502 | fatalerror("32051: unimplemented op madd at %08X", cpustate->pc-1); | |
| 1502 | fatalerror("32051: unimplemented op madd at %08X\n", cpustate->pc-1); | |
| 1503 | 1503 | } |
| 1504 | 1504 | |
| 1505 | 1505 | static void op_mads(tms32051_state *cpustate) |
| 1506 | 1506 | { |
| 1507 | fatalerror("32051: unimplemented op mads at %08X", cpustate->pc-1); | |
| 1507 | fatalerror("32051: unimplemented op mads at %08X\n", cpustate->pc-1); | |
| 1508 | 1508 | } |
| 1509 | 1509 | |
| 1510 | 1510 | static void op_mpy_mem(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1519 | 1519 | |
| 1520 | 1520 | static void op_mpy_simm(tms32051_state *cpustate) |
| 1521 | 1521 | { |
| 1522 | fatalerror("32051: unimplemented op mpy simm at %08X", cpustate->pc-1); | |
| 1522 | fatalerror("32051: unimplemented op mpy simm at %08X\n", cpustate->pc-1); | |
| 1523 | 1523 | } |
| 1524 | 1524 | |
| 1525 | 1525 | static void op_mpy_limm(tms32051_state *cpustate) |
| 1526 | 1526 | { |
| 1527 | fatalerror("32051: unimplemented op mpy limm at %08X", cpustate->pc-1); | |
| 1527 | fatalerror("32051: unimplemented op mpy limm at %08X\n", cpustate->pc-1); | |
| 1528 | 1528 | } |
| 1529 | 1529 | |
| 1530 | 1530 | static void op_mpya(tms32051_state *cpustate) |
| 1531 | 1531 | { |
| 1532 | fatalerror("32051: unimplemented op mpya at %08X", cpustate->pc-1); | |
| 1532 | fatalerror("32051: unimplemented op mpya at %08X\n", cpustate->pc-1); | |
| 1533 | 1533 | } |
| 1534 | 1534 | |
| 1535 | 1535 | static void op_mpys(tms32051_state *cpustate) |
| 1536 | 1536 | { |
| 1537 | fatalerror("32051: unimplemented op mpys at %08X", cpustate->pc-1); | |
| 1537 | fatalerror("32051: unimplemented op mpys at %08X\n", cpustate->pc-1); | |
| 1538 | 1538 | } |
| 1539 | 1539 | |
| 1540 | 1540 | static void op_mpyu(tms32051_state *cpustate) |
| 1541 | 1541 | { |
| 1542 | fatalerror("32051: unimplemented op mpyu at %08X", cpustate->pc-1); | |
| 1542 | fatalerror("32051: unimplemented op mpyu at %08X\n", cpustate->pc-1); | |
| 1543 | 1543 | } |
| 1544 | 1544 | |
| 1545 | 1545 | static void op_pac(tms32051_state *cpustate) |
| 1546 | 1546 | { |
| 1547 | fatalerror("32051: unimplemented op pac at %08X", cpustate->pc-1); | |
| 1547 | fatalerror("32051: unimplemented op pac at %08X\n", cpustate->pc-1); | |
| 1548 | 1548 | } |
| 1549 | 1549 | |
| 1550 | 1550 | static void op_spac(tms32051_state *cpustate) |
| 1551 | 1551 | { |
| 1552 | fatalerror("32051: unimplemented op spac at %08X", cpustate->pc-1); | |
| 1552 | fatalerror("32051: unimplemented op spac at %08X\n", cpustate->pc-1); | |
| 1553 | 1553 | } |
| 1554 | 1554 | |
| 1555 | 1555 | static void op_sph(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1563 | 1563 | |
| 1564 | 1564 | static void op_spl(tms32051_state *cpustate) |
| 1565 | 1565 | { |
| 1566 | fatalerror("32051: unimplemented op spl at %08X", cpustate->pc-1); | |
| 1566 | fatalerror("32051: unimplemented op spl at %08X\n", cpustate->pc-1); | |
| 1567 | 1567 | } |
| 1568 | 1568 | |
| 1569 | 1569 | static void op_spm(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1575 | 1575 | |
| 1576 | 1576 | static void op_sqra(tms32051_state *cpustate) |
| 1577 | 1577 | { |
| 1578 | fatalerror("32051: unimplemented op sqra at %08X", cpustate->pc-1); | |
| 1578 | fatalerror("32051: unimplemented op sqra at %08X\n", cpustate->pc-1); | |
| 1579 | 1579 | } |
| 1580 | 1580 | |
| 1581 | 1581 | static void op_sqrs(tms32051_state *cpustate) |
| 1582 | 1582 | { |
| 1583 | fatalerror("32051: unimplemented op sqrs at %08X", cpustate->pc-1); | |
| 1583 | fatalerror("32051: unimplemented op sqrs at %08X\n", cpustate->pc-1); | |
| 1584 | 1584 | } |
| 1585 | 1585 | |
| 1586 | 1586 | static void op_zpr(tms32051_state *cpustate) |
| 1587 | 1587 | { |
| 1588 | fatalerror("32051: unimplemented op zpr at %08X", cpustate->pc-1); | |
| 1588 | fatalerror("32051: unimplemented op zpr at %08X\n", cpustate->pc-1); | |
| 1589 | 1589 | } |
| 1590 | 1590 | |
| 1591 | 1591 | static void op_bit(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1624 | 1624 | |
| 1625 | 1625 | static void op_clrc_hold(tms32051_state *cpustate) |
| 1626 | 1626 | { |
| 1627 | fatalerror("32051: unimplemented op clrc hold at %08X", cpustate->pc-1); | |
| 1627 | fatalerror("32051: unimplemented op clrc hold at %08X\n", cpustate->pc-1); | |
| 1628 | 1628 | } |
| 1629 | 1629 | |
| 1630 | 1630 | static void op_clrc_tc(tms32051_state *cpustate) |
| 1631 | 1631 | { |
| 1632 | fatalerror("32051: unimplemented op clrc tc at %08X", cpustate->pc-1); | |
| 1632 | fatalerror("32051: unimplemented op clrc tc at %08X\n", cpustate->pc-1); | |
| 1633 | 1633 | } |
| 1634 | 1634 | |
| 1635 | 1635 | static void op_clrc_carry(tms32051_state *cpustate) |
| 1636 | 1636 | { |
| 1637 | fatalerror("32051: unimplemented op clrc carry at %08X", cpustate->pc-1); | |
| 1637 | fatalerror("32051: unimplemented op clrc carry at %08X\n", cpustate->pc-1); | |
| 1638 | 1638 | } |
| 1639 | 1639 | |
| 1640 | 1640 | static void op_clrc_cnf(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1655 | 1655 | |
| 1656 | 1656 | static void op_clrc_xf(tms32051_state *cpustate) |
| 1657 | 1657 | { |
| 1658 | fatalerror("32051: unimplemented op clrc xf at %08X", cpustate->pc-1); | |
| 1658 | fatalerror("32051: unimplemented op clrc xf at %08X\n", cpustate->pc-1); | |
| 1659 | 1659 | } |
| 1660 | 1660 | |
| 1661 | 1661 | static void op_idle(tms32051_state *cpustate) |
| 1662 | 1662 | { |
| 1663 | fatalerror("32051: unimplemented op idle at %08X", cpustate->pc-1); | |
| 1663 | fatalerror("32051: unimplemented op idle at %08X\n", cpustate->pc-1); | |
| 1664 | 1664 | } |
| 1665 | 1665 | |
| 1666 | 1666 | static void op_idle2(tms32051_state *cpustate) |
| 1667 | 1667 | { |
| 1668 | fatalerror("32051: unimplemented op idle2 at %08X", cpustate->pc-1); | |
| 1668 | fatalerror("32051: unimplemented op idle2 at %08X\n", cpustate->pc-1); | |
| 1669 | 1669 | } |
| 1670 | 1670 | |
| 1671 | 1671 | static void op_lst_st0(tms32051_state *cpustate) |
| 1672 | 1672 | { |
| 1673 | fatalerror("32051: unimplemented op lst st0 at %08X", cpustate->pc-1); | |
| 1673 | fatalerror("32051: unimplemented op lst st0 at %08X\n", cpustate->pc-1); | |
| 1674 | 1674 | } |
| 1675 | 1675 | |
| 1676 | 1676 | static void op_lst_st1(tms32051_state *cpustate) |
| 1677 | 1677 | { |
| 1678 | fatalerror("32051: unimplemented op lst st1 at %08X", cpustate->pc-1); | |
| 1678 | fatalerror("32051: unimplemented op lst st1 at %08X\n", cpustate->pc-1); | |
| 1679 | 1679 | } |
| 1680 | 1680 | |
| 1681 | 1681 | static void op_pop(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1687 | 1687 | |
| 1688 | 1688 | static void op_popd(tms32051_state *cpustate) |
| 1689 | 1689 | { |
| 1690 | fatalerror("32051: unimplemented op popd at %08X", cpustate->pc-1); | |
| 1690 | fatalerror("32051: unimplemented op popd at %08X\n", cpustate->pc-1); | |
| 1691 | 1691 | } |
| 1692 | 1692 | |
| 1693 | 1693 | static void op_pshd(tms32051_state *cpustate) |
| 1694 | 1694 | { |
| 1695 | fatalerror("32051: unimplemented op pshd at %08X", cpustate->pc-1); | |
| 1695 | fatalerror("32051: unimplemented op pshd at %08X\n", cpustate->pc-1); | |
| 1696 | 1696 | } |
| 1697 | 1697 | |
| 1698 | 1698 | static void op_push(tms32051_state *cpustate) |
| 1699 | 1699 | { |
| 1700 | fatalerror("32051: unimplemented op push at %08X", cpustate->pc-1); | |
| 1700 | fatalerror("32051: unimplemented op push at %08X\n", cpustate->pc-1); | |
| 1701 | 1701 | } |
| 1702 | 1702 | |
| 1703 | 1703 | static void op_rpt_mem(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1741 | 1741 | |
| 1742 | 1742 | static void op_rptz(tms32051_state *cpustate) |
| 1743 | 1743 | { |
| 1744 | fatalerror("32051: unimplemented op rptz at %08X", cpustate->pc-1); | |
| 1744 | fatalerror("32051: unimplemented op rptz at %08X\n", cpustate->pc-1); | |
| 1745 | 1745 | } |
| 1746 | 1746 | |
| 1747 | 1747 | static void op_setc_ov(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1760 | 1760 | |
| 1761 | 1761 | static void op_setc_hold(tms32051_state *cpustate) |
| 1762 | 1762 | { |
| 1763 | fatalerror("32051: unimplemented op setc hold at %08X", cpustate->pc-1); | |
| 1763 | fatalerror("32051: unimplemented op setc hold at %08X\n", cpustate->pc-1); | |
| 1764 | 1764 | } |
| 1765 | 1765 | |
| 1766 | 1766 | static void op_setc_tc(tms32051_state *cpustate) |
| 1767 | 1767 | { |
| 1768 | fatalerror("32051: unimplemented op setc tc at %08X", cpustate->pc-1); | |
| 1768 | fatalerror("32051: unimplemented op setc tc at %08X\n", cpustate->pc-1); | |
| 1769 | 1769 | } |
| 1770 | 1770 | |
| 1771 | 1771 | static void op_setc_carry(tms32051_state *cpustate) |
| 1772 | 1772 | { |
| 1773 | fatalerror("32051: unimplemented op setc carry at %08X", cpustate->pc-1); | |
| 1773 | fatalerror("32051: unimplemented op setc carry at %08X\n", cpustate->pc-1); | |
| 1774 | 1774 | } |
| 1775 | 1775 | |
| 1776 | 1776 | static void op_setc_xf(tms32051_state *cpustate) |
| 1777 | 1777 | { |
| 1778 | fatalerror("32051: unimplemented op setc xf at %08X", cpustate->pc-1); | |
| 1778 | fatalerror("32051: unimplemented op setc xf at %08X\n", cpustate->pc-1); | |
| 1779 | 1779 | } |
| 1780 | 1780 | |
| 1781 | 1781 | static void op_setc_cnf(tms32051_state *cpustate) |
| r17702 | r17703 | |
| 1796 | 1796 | |
| 1797 | 1797 | static void op_sst_st0(tms32051_state *cpustate) |
| 1798 | 1798 | { |
| 1799 | fatalerror("32051: unimplemented op sst st0 at %08X", cpustate->pc-1); | |
| 1799 | fatalerror("32051: unimplemented op sst st0 at %08X\n", cpustate->pc-1); | |
| 1800 | 1800 | } |
| 1801 | 1801 | |
| 1802 | 1802 | static void op_sst_st1(tms32051_state *cpustate) |
| 1803 | 1803 | { |
| 1804 | fatalerror("32051: unimplemented op sst st1 at %08X", cpustate->pc-1); | |
| 1804 | fatalerror("32051: unimplemented op sst st1 at %08X\n", cpustate->pc-1); | |
| 1805 | 1805 | } |
| r17702 | r17703 | |
|---|---|---|
| 219 | 219 | // or error out if none provided |
| 220 | 220 | else |
| 221 | 221 | { |
| 222 | fatalerror("COSMAC_INTERFACE for cpu '%s' not defined!", tag()); | |
| 222 | fatalerror("COSMAC_INTERFACE for cpu '%s' not defined!\n", tag()); | |
| 223 | 223 | } |
| 224 | 224 | } |
| 225 | 225 |
| r17702 | r17703 | |
|---|---|---|
| 397 | 397 | /* allocate enough space for the cache and the core */ |
| 398 | 398 | cache = auto_alloc(device->machine(), drc_cache(CACHE_SIZE + sizeof(*mips3))); |
| 399 | 399 | if (cache == NULL) |
| 400 | fatalerror("Unable to allocate cache of size %d", (UINT32)(CACHE_SIZE + sizeof(*mips3))); | |
| 400 | fatalerror("Unable to allocate cache of size %d\n", (UINT32)(CACHE_SIZE + sizeof(*mips3))); | |
| 401 | 401 | |
| 402 | 402 | /* allocate the core memory */ |
| 403 | 403 | *(mips3_state **)device->token() = mips3 = (mips3_state *)cache->alloc_near(sizeof(*mips3)); |
| r17702 | r17703 | |
| 744 | 744 | } |
| 745 | 745 | catch (drcuml_block::abort_compilation &) |
| 746 | 746 | { |
| 747 | fatalerror("Unrecoverable error generating static code"); | |
| 747 | fatalerror("Unrecoverable error generating static code\n"); | |
| 748 | 748 | } |
| 749 | 749 | } |
| 750 | 750 | |
| r17702 | r17703 | |
| 967 | 967 | { |
| 968 | 968 | mips3_state *mips3 = (mips3_state *)param; |
| 969 | 969 | UINT32 opcode = mips3->impstate->arg0; |
| 970 | fatalerror("PC=%08X: Unimplemented op %08X (%02X,%02X)", mips3->pc, opcode, opcode >> 26, opcode & 0x3f); | |
| 970 | fatalerror("PC=%08X: Unimplemented op %08X (%02X,%02X)\n", mips3->pc, opcode, opcode >> 26, opcode & 0x3f); | |
| 971 | 971 | } |
| 972 | 972 | |
| 973 | 973 |
| r17702 | r17703 | |
|---|---|---|
| 857 | 857 | return 0x2700; |
| 858 | 858 | |
| 859 | 859 | default: |
| 860 | fatalerror("Unknown MIPS flavor specified"); | |
| 860 | fatalerror("Unknown MIPS flavor specified\n"); | |
| 861 | 861 | } |
| 862 | 862 | return 0x2000; |
| 863 | 863 | } |
| r17702 | r17703 | |
|---|---|---|
| 688 | 688 | /* update interrupts and cycle counting */ |
| 689 | 689 | UINT32 diff = mips3.core.cpr[0][idx] ^ val; |
| 690 | 690 | // if (val & 0xe0) |
| 691 | // fatalerror("System set 64-bit addressing mode, SR=%08X", val); | |
| 691 | // fatalerror("System set 64-bit addressing mode, SR=%08X\n", val); | |
| 692 | 692 | mips3.core.cpr[0][idx] = val; |
| 693 | 693 | if (diff & 0x8000) |
| 694 | 694 | mips3com_update_cycle_counting(&mips3.core); |
| r17702 | r17703 | |
|---|---|---|
| 561 | 561 | { |
| 562 | 562 | // fatal if we were a leftover |
| 563 | 563 | if (fatal_on_leftovers && curlabel->m_codeptr == NULL) |
| 564 | fatalerror("Label %08X never defined!", curlabel->m_label.label()); | |
| 564 | fatalerror("Label %08X never defined!\n", curlabel->m_label.label()); | |
| 565 | 565 | |
| 566 | 566 | // free the label |
| 567 | 567 | m_cache.dealloc(curlabel, sizeof(*curlabel)); |
| r17702 | r17703 | |
|---|---|---|
| 62 | 62 | // find the device |
| 63 | 63 | device_t *target = cpudevice->siblingdevice(daisy->devname); |
| 64 | 64 | if (target == NULL) |
| 65 | fatalerror("Unable to locate device '%s'", daisy->devname); | |
| 65 | fatalerror("Unable to locate device '%s'\n", daisy->devname); | |
| 66 | 66 | |
| 67 | 67 | // make sure it has an interface |
| 68 | 68 | device_z80daisy_interface *intf; |
| 69 | 69 | if (!target->interface(intf)) |
| 70 | fatalerror("Device '%s' does not implement the z80daisy interface!", daisy->devname); | |
| 70 | fatalerror("Device '%s' does not implement the z80daisy interface!\n", daisy->devname); | |
| 71 | 71 | |
| 72 | 72 | // append to the end |
| 73 | 73 | *tailptr = auto_alloc(cpudevice->machine(), daisy_entry(target)); |
| r17702 | r17703 | |
|---|---|---|
| 109 | 109 | i960->IP = iac[3]; |
| 110 | 110 | break; |
| 111 | 111 | default: |
| 112 | fatalerror("I960: %x: IAC %08x %08x %08x %08x", i960->PIP, iac[0], iac[1], iac[2], iac[3]); | |
| 112 | fatalerror("I960: %x: IAC %08x %08x %08x %08x\n", i960->PIP, iac[0], iac[1], iac[2], iac[3]); | |
| 113 | 113 | break; |
| 114 | 114 | } |
| 115 | 115 | } |
| r17702 | r17703 | |
| 157 | 157 | return ret; |
| 158 | 158 | |
| 159 | 159 | default: |
| 160 | fatalerror("I960: %x: unhandled MEMB mode %x", i960->PIP, mode); | |
| 160 | fatalerror("I960: %x: unhandled MEMB mode %x\n", i960->PIP, mode); | |
| 161 | 161 | return 0; |
| 162 | 162 | } |
| 163 | 163 | } |
| r17702 | r17703 | |
| 192 | 192 | if(!(opcode & 0x00002000)) |
| 193 | 193 | i960->r[(opcode>>19) & 0x1f] = val; |
| 194 | 194 | else { |
| 195 | fatalerror("I960: %x: set_ri on literal?", i960->PIP); | |
| 195 | fatalerror("I960: %x: set_ri on literal?\n", i960->PIP); | |
| 196 | 196 | } |
| 197 | 197 | } |
| 198 | 198 | |
| r17702 | r17703 | |
| 204 | 204 | i960->r[((opcode>>19) & 0x1f)+1] = val2; |
| 205 | 205 | } |
| 206 | 206 | else { |
| 207 | fatalerror("I960: %x: set_ri2 on literal?", i960->PIP); | |
| 207 | fatalerror("I960: %x: set_ri2 on literal?\n", i960->PIP); | |
| 208 | 208 | } |
| 209 | 209 | } |
| 210 | 210 | |
| r17702 | r17703 | |
| 214 | 214 | i960->r[(opcode>>19) & 0x1f] = val; |
| 215 | 215 | i960->r[((opcode>>19) & 0x1f)+1] = val >> 32; |
| 216 | 216 | } else |
| 217 | fatalerror("I960: %x: set_ri64 on literal?", i960->PIP); | |
| 217 | fatalerror("I960: %x: set_ri64 on literal?\n", i960->PIP); | |
| 218 | 218 | } |
| 219 | 219 | |
| 220 | 220 | INLINE double get_1_rif(i960_state_t *i960, UINT32 opcode) |
| r17702 | r17703 | |
| 252 | 252 | else if(!(opcode & 0x00e00000)) |
| 253 | 253 | i960->fp[(opcode>>19) & 3] = val; |
| 254 | 254 | else |
| 255 | fatalerror("I960: %x: set_rif on literal?", i960->PIP); | |
| 255 | fatalerror("I960: %x: set_rif on literal?\n", i960->PIP); | |
| 256 | 256 | } |
| 257 | 257 | |
| 258 | 258 | INLINE double get_1_rifl(i960_state_t *i960, UINT32 opcode) |
| r17702 | r17703 | |
| 296 | 296 | } else if(!(opcode & 0x00e00000)) |
| 297 | 297 | i960->fp[(opcode>>19) & 3] = val; |
| 298 | 298 | else |
| 299 | fatalerror("I960: %x: set_rifl on literal?", i960->PIP); | |
| 299 | fatalerror("I960: %x: set_rifl on literal?\n", i960->PIP); | |
| 300 | 300 | } |
| 301 | 301 | |
| 302 | 302 | INLINE UINT32 get_1_ci(i960_state_t *i960, UINT32 opcode) |
| r17702 | r17703 | |
| 608 | 608 | break; |
| 609 | 609 | |
| 610 | 610 | default: |
| 611 | fatalerror("I960: %x: Unsupported return mode %d", i960->PIP, i960->r[I960_PFP] & 7); | |
| 611 | fatalerror("I960: %x: Unsupported return mode %d\n", i960->PIP, i960->r[I960_PFP] & 7); | |
| 612 | 612 | } |
| 613 | 613 | } |
| 614 | 614 | |
| r17702 | r17703 | |
| 950 | 950 | break; |
| 951 | 951 | |
| 952 | 952 | default: |
| 953 | fatalerror("I960: %x: Unhandled 58.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 953 | fatalerror("I960: %x: Unhandled 58.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 954 | 954 | } |
| 955 | 955 | break; |
| 956 | 956 | |
| r17702 | r17703 | |
| 1036 | 1036 | break; |
| 1037 | 1037 | |
| 1038 | 1038 | default: |
| 1039 | fatalerror("I960: %x: Unhandled 59.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1039 | fatalerror("I960: %x: Unhandled 59.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1040 | 1040 | } |
| 1041 | 1041 | break; |
| 1042 | 1042 | |
| r17702 | r17703 | |
| 1117 | 1117 | break; |
| 1118 | 1118 | |
| 1119 | 1119 | default: |
| 1120 | fatalerror("I960: %x: Unhandled 5a.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1120 | fatalerror("I960: %x: Unhandled 5a.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1121 | 1121 | } |
| 1122 | 1122 | break; |
| 1123 | 1123 | |
| r17702 | r17703 | |
| 1160 | 1160 | break; |
| 1161 | 1161 | |
| 1162 | 1162 | default: |
| 1163 | fatalerror("I960: %x: Unhandled 5b.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1163 | fatalerror("I960: %x: Unhandled 5b.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1164 | 1164 | } |
| 1165 | 1165 | break; |
| 1166 | 1166 | |
| r17702 | r17703 | |
| 1173 | 1173 | break; |
| 1174 | 1174 | |
| 1175 | 1175 | default: |
| 1176 | fatalerror("I960: %x: Unhandled 5c.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1176 | fatalerror("I960: %x: Unhandled 5c.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1177 | 1177 | } |
| 1178 | 1178 | break; |
| 1179 | 1179 | |
| r17702 | r17703 | |
| 1190 | 1190 | break; |
| 1191 | 1191 | |
| 1192 | 1192 | default: |
| 1193 | fatalerror("I960: %x: Unhandled 5d.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1193 | fatalerror("I960: %x: Unhandled 5d.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1194 | 1194 | } |
| 1195 | 1195 | break; |
| 1196 | 1196 | |
| r17702 | r17703 | |
| 1207 | 1207 | break; |
| 1208 | 1208 | |
| 1209 | 1209 | default: |
| 1210 | fatalerror("I960: %x: Unhandled 5e.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1210 | fatalerror("I960: %x: Unhandled 5e.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1211 | 1211 | } |
| 1212 | 1212 | break; |
| 1213 | 1213 | |
| r17702 | r17703 | |
| 1224 | 1224 | break; |
| 1225 | 1225 | |
| 1226 | 1226 | default: |
| 1227 | fatalerror("I960: %x: Unhandled 5f.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1227 | fatalerror("I960: %x: Unhandled 5f.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1228 | 1228 | } |
| 1229 | 1229 | break; |
| 1230 | 1230 | |
| r17702 | r17703 | |
| 1258 | 1258 | break; |
| 1259 | 1259 | |
| 1260 | 1260 | default: |
| 1261 | fatalerror("I960: %x: Unhandled 60.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1261 | fatalerror("I960: %x: Unhandled 60.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1262 | 1262 | } |
| 1263 | 1263 | break; |
| 1264 | 1264 | |
| r17702 | r17703 | |
| 1321 | 1321 | break; |
| 1322 | 1322 | |
| 1323 | 1323 | default: |
| 1324 | fatalerror("I960: %x: Unhandled 64.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1324 | fatalerror("I960: %x: Unhandled 64.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1325 | 1325 | } |
| 1326 | 1326 | break; |
| 1327 | 1327 | |
| r17702 | r17703 | |
| 1336 | 1336 | break; |
| 1337 | 1337 | |
| 1338 | 1338 | default: |
| 1339 | fatalerror("I960: %x: Unhandled 65.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1339 | fatalerror("I960: %x: Unhandled 65.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1340 | 1340 | } |
| 1341 | 1341 | break; |
| 1342 | 1342 | |
| r17702 | r17703 | |
| 1360 | 1360 | break; |
| 1361 | 1361 | |
| 1362 | 1362 | default: |
| 1363 | fatalerror("I960: %x: Unhandled 66.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1363 | fatalerror("I960: %x: Unhandled 66.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1364 | 1364 | } |
| 1365 | 1365 | break; |
| 1366 | 1366 | |
| r17702 | r17703 | |
| 1407 | 1407 | break; |
| 1408 | 1408 | |
| 1409 | 1409 | default: |
| 1410 | fatalerror("I960: %x: Unhandled 67.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1410 | fatalerror("I960: %x: Unhandled 67.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1411 | 1411 | } |
| 1412 | 1412 | break; |
| 1413 | 1413 | |
| r17702 | r17703 | |
| 1480 | 1480 | break; |
| 1481 | 1481 | |
| 1482 | 1482 | default: |
| 1483 | fatalerror("I960: %x: Unhandled 68.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1483 | fatalerror("I960: %x: Unhandled 68.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1484 | 1484 | } |
| 1485 | 1485 | break; |
| 1486 | 1486 | |
| r17702 | r17703 | |
| 1551 | 1551 | break; |
| 1552 | 1552 | |
| 1553 | 1553 | default: |
| 1554 | fatalerror("I960: %x: Unhandled 69.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1554 | fatalerror("I960: %x: Unhandled 69.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1555 | 1555 | } |
| 1556 | 1556 | break; |
| 1557 | 1557 | |
| r17702 | r17703 | |
| 1592 | 1592 | break; |
| 1593 | 1593 | |
| 1594 | 1594 | default: |
| 1595 | fatalerror("I960: %x: Unhandled 6c.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1595 | fatalerror("I960: %x: Unhandled 6c.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1596 | 1596 | } |
| 1597 | 1597 | break; |
| 1598 | 1598 | |
| r17702 | r17703 | |
| 1605 | 1605 | break; |
| 1606 | 1606 | |
| 1607 | 1607 | default: |
| 1608 | fatalerror("I960: %x: Unhandled 6d.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1608 | fatalerror("I960: %x: Unhandled 6d.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1609 | 1609 | } |
| 1610 | 1610 | break; |
| 1611 | 1611 | |
| r17702 | r17703 | |
| 1646 | 1646 | set_rifl(i960, opcode, -fabs(t1f)); |
| 1647 | 1647 | break; |
| 1648 | 1648 | default: |
| 1649 | fatalerror("I960: %x: Unhandled 6e.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1649 | fatalerror("I960: %x: Unhandled 6e.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1650 | 1650 | } |
| 1651 | 1651 | break; |
| 1652 | 1652 | |
| r17702 | r17703 | |
| 1677 | 1677 | break; |
| 1678 | 1678 | |
| 1679 | 1679 | default: |
| 1680 | fatalerror("I960: %x: Unhandled 70.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1680 | fatalerror("I960: %x: Unhandled 70.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1681 | 1681 | } |
| 1682 | 1682 | break; |
| 1683 | 1683 | |
| r17702 | r17703 | |
| 1717 | 1717 | break; |
| 1718 | 1718 | |
| 1719 | 1719 | default: |
| 1720 | fatalerror("I960: %x: Unhandled 74.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1720 | fatalerror("I960: %x: Unhandled 74.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1721 | 1721 | } |
| 1722 | 1722 | break; |
| 1723 | 1723 | |
| r17702 | r17703 | |
| 1752 | 1752 | break; |
| 1753 | 1753 | |
| 1754 | 1754 | default: |
| 1755 | fatalerror("I960: %x: Unhandled 78.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1755 | fatalerror("I960: %x: Unhandled 78.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1756 | 1756 | } |
| 1757 | 1757 | break; |
| 1758 | 1758 | |
| r17702 | r17703 | |
| 1787 | 1787 | break; |
| 1788 | 1788 | |
| 1789 | 1789 | default: |
| 1790 | fatalerror("I960: %x: Unhandled 79.%x", i960->PIP, (opcode >> 7) & 0xf); | |
| 1790 | fatalerror("I960: %x: Unhandled 79.%x\n", i960->PIP, (opcode >> 7) & 0xf); | |
| 1791 | 1791 | } |
| 1792 | 1792 | break; |
| 1793 | 1793 | |
| r17702 | r17703 | |
| 1948 | 1948 | break; |
| 1949 | 1949 | |
| 1950 | 1950 | default: |
| 1951 | fatalerror("I960: %x: Unhandled %02x", i960->PIP, opcode >> 24); | |
| 1951 | fatalerror("I960: %x: Unhandled %02x\n", i960->PIP, opcode >> 24); | |
| 1952 | 1952 | } |
| 1953 | 1953 | |
| 1954 | 1954 | } |
| r17702 | r17703 | |
| 2058 | 2058 | case CPUINFO_INT_INPUT_STATE + I960_IRQ3: set_irq_line(i960, I960_IRQ3, info->i); break; |
| 2059 | 2059 | |
| 2060 | 2060 | default: |
| 2061 | fatalerror("i960_set_info %x", state); | |
| 2061 | fatalerror("i960_set_info %x\n", state); | |
| 2062 | 2062 | } |
| 2063 | 2063 | } |
| 2064 | 2064 | |
| r17702 | r17703 | |
| 2211 | 2211 | case CPUINFO_STR_REGISTER + I960_G15: sprintf(info->s, "fp :%08x", i960->r[31]); break; |
| 2212 | 2212 | |
| 2213 | 2213 | // default: |
| 2214 | // fatalerror("i960_get_info %x ", state); | |
| 2214 | // fatalerror("i960_get_info %x \n", state); | |
| 2215 | 2215 | } |
| 2216 | 2216 | } |
| 2217 | 2217 |
| r17702 | r17703 | |
|---|---|---|
| 1067 | 1067 | static UINT32 opBSU(v810_state *cpustate,UINT32 op) |
| 1068 | 1068 | { |
| 1069 | 1069 | if(!(op & 8)) |
| 1070 | fatalerror("V810: unknown BSU opcode %04x",op); | |
| 1070 | fatalerror("V810: unknown BSU opcode %04x\n",op); | |
| 1071 | 1071 | |
| 1072 | 1072 | { |
| 1073 | 1073 | UINT32 srcbit,dstbit,src,dst,size; |
| r17702 | r17703 | |
|---|---|---|
| 362 | 362 | case 'x': |
| 363 | 363 | bit --; |
| 364 | 364 | break; |
| 365 | default: fatalerror("Invalid instruction encoding '%s %s'", | |
| 365 | default: fatalerror("Invalid instruction encoding '%s %s'\n", | |
| 366 | 366 | ops[0],ops[1]); |
| 367 | 367 | } |
| 368 | 368 | } |
| 369 | 369 | if (bit != -1 ) |
| 370 | 370 | { |
| 371 | fatalerror("not enough bits in encoding '%s %s' %d", | |
| 371 | fatalerror("not enough bits in encoding '%s %s' %d\n", | |
| 372 | 372 | ops[0],ops[1],bit); |
| 373 | 373 | } |
| 374 | 374 | while (isspace((UINT8)*p)) p++; |
| r17702 | r17703 | |
| 455 | 455 | case 'x': bit--; break; |
| 456 | 456 | case ' ': break; |
| 457 | 457 | case '1': case '0': bit--; break; |
| 458 | case '\0': fatalerror("premature end of parse string, opcode %x, bit = %d",code,bit); | |
| 458 | case '\0': fatalerror("premature end of parse string, opcode %x, bit = %d\n",code,bit); | |
| 459 | 459 | } |
| 460 | 460 | cp++; |
| 461 | 461 | } |
| r17702 | r17703 | |
| 490 | 490 | case 'W': sprintf(num,"%04Xh",w); break; |
| 491 | 491 | case 'X': break; |
| 492 | 492 | default: |
| 493 | fatalerror("illegal escape character in format '%s'",Op[op].fmt); | |
| 493 | fatalerror("illegal escape character in format '%s'\n",Op[op].fmt); | |
| 494 | 494 | } |
| 495 | 495 | q = num; while (*q) *buffer++ = *q++; |
| 496 | 496 | *buffer = '\0'; |
| r17702 | r17703 | |
|---|---|---|
| 124 | 124 | case 'k': |
| 125 | 125 | bit --; |
| 126 | 126 | break; |
| 127 | default: fatalerror("Invalid instruction encoding '%s %s'", | |
| 127 | default: fatalerror("Invalid instruction encoding '%s %s'\n", | |
| 128 | 128 | ops[0],ops[1]); |
| 129 | 129 | } |
| 130 | 130 | } |
| 131 | 131 | if (bit != -1 ) |
| 132 | 132 | { |
| 133 | fatalerror("not enough bits in encoding '%s %s' %d", | |
| 133 | fatalerror("not enough bits in encoding '%s %s' %d\n", | |
| 134 | 134 | ops[0],ops[1],bit); |
| 135 | 135 | } |
| 136 | 136 | while (isspace((UINT8)*p)) p++; |
| r17702 | r17703 | |
| 213 | 213 | case 'k': k <<=1; k |= ((code & (1<<bit)) ? 1 : 0); bit--; break; |
| 214 | 214 | case ' ': break; |
| 215 | 215 | case '1': case '0': bit--; break; |
| 216 | case '\0': fatalerror("premature end of parse string, opcode %x, bit = %d",code,bit); | |
| 216 | case '\0': fatalerror("premature end of parse string, opcode %x, bit = %d\n",code,bit); | |
| 217 | 217 | } |
| 218 | 218 | cp++; |
| 219 | 219 | } |
| r17702 | r17703 | |
| 239 | 239 | case 'F': sprintf(num,"%s",regfile[f]); break; |
| 240 | 240 | case 'K': sprintf(num,"%02Xh",k); break; |
| 241 | 241 | default: |
| 242 | fatalerror("illegal escape character in format '%s'",Op[op].fmt); | |
| 242 | fatalerror("illegal escape character in format '%s'\n",Op[op].fmt); | |
| 243 | 243 | } |
| 244 | 244 | q = num; while (*q) *buffer++ = *q++; |
| 245 | 245 | *buffer = '\0'; |
| r17702 | r17703 | |
|---|---|---|
| 170 | 170 | |
| 171 | 171 | // Data Abort |
| 172 | 172 | if (cpustate->pendingAbtD) { |
| 173 | if (MODE26) fatalerror( "pendingAbtD (todo)"); | |
| 173 | if (MODE26) fatalerror( "pendingAbtD (todo)\n"); | |
| 174 | 174 | SwitchMode(cpustate, eARM7_MODE_ABT); /* Set ABT mode so PC is saved to correct R14 bank */ |
| 175 | 175 | SET_REGISTER(cpustate, 14, pc - 8 + 8); /* save PC to R14 */ |
| 176 | 176 | SET_REGISTER(cpustate, SPSR, cpsr); /* Save current CPSR */ |
| r17702 | r17703 | |
| 184 | 184 | |
| 185 | 185 | // FIQ |
| 186 | 186 | if (cpustate->pendingFiq && (cpsr & F_MASK) == 0) { |
| 187 | if (MODE26) fatalerror( "pendingFiq (todo)"); | |
| 187 | if (MODE26) fatalerror( "pendingFiq (todo)\n"); | |
| 188 | 188 | SwitchMode(cpustate, eARM7_MODE_FIQ); /* Set FIQ mode so PC is saved to correct R14 bank */ |
| 189 | 189 | SET_REGISTER(cpustate, 14, pc - 4 + 4); /* save PC to R14 */ |
| 190 | 190 | SET_REGISTER(cpustate, SPSR, cpsr); /* Save current CPSR */ |
| r17702 | r17703 | |
| 219 | 219 | |
| 220 | 220 | // Prefetch Abort |
| 221 | 221 | if (cpustate->pendingAbtP) { |
| 222 | if (MODE26) fatalerror( "pendingAbtP (todo)"); | |
| 222 | if (MODE26) fatalerror( "pendingAbtP (todo)\n"); | |
| 223 | 223 | SwitchMode(cpustate, eARM7_MODE_ABT); /* Set ABT mode so PC is saved to correct R14 bank */ |
| 224 | 224 | SET_REGISTER(cpustate, 14, pc - 4 + 4); /* save PC to R14 */ |
| 225 | 225 | SET_REGISTER(cpustate, SPSR, cpsr); /* Save current CPSR */ |
| r17702 | r17703 | |
| 233 | 233 | |
| 234 | 234 | // Undefined instruction |
| 235 | 235 | if (cpustate->pendingUnd) { |
| 236 | if (MODE26) fatalerror( "pendingUnd (todo)"); | |
| 236 | if (MODE26) fatalerror( "pendingUnd (todo)\n"); | |
| 237 | 237 | SwitchMode(cpustate, eARM7_MODE_UND); /* Set UND mode so PC is saved to correct R14 bank */ |
| 238 | 238 | // compensate for prefetch (should this also be done for normal IRQ?) |
| 239 | 239 | if (T_IS_SET(GET_CPSR)) |
| r17702 | r17703 | |
|---|---|---|
| 288 | 288 | } |
| 289 | 289 | else |
| 290 | 290 | { |
| 291 | fatalerror("ARM7: Not Yet Implemented: Coarse Table, Section Domain fault on virtual address, vaddr = %08x, domain = %08x, PC = %08x", vaddr, domain, R15); | |
| 291 | fatalerror("ARM7: Not Yet Implemented: Coarse Table, Section Domain fault on virtual address, vaddr = %08x, domain = %08x, PC = %08x\n", vaddr, domain, R15); | |
| 292 | 292 | } |
| 293 | 293 | break; |
| 294 | 294 | case COPRO_TLB_SECTION_TABLE: |
| r17702 | r17703 | |
| 323 | 323 | break; |
| 324 | 324 | case COPRO_TLB_FINE_TABLE: |
| 325 | 325 | // Entry is the physical address of a fine second-level table |
| 326 | fatalerror("ARM7: Not Yet Implemented: fine second-level TLB lookup, PC = %08x, vaddr = %08x", R15, vaddr); | |
| 326 | fatalerror("ARM7: Not Yet Implemented: fine second-level TLB lookup, PC = %08x, vaddr = %08x\n", R15, vaddr); | |
| 327 | 327 | break; |
| 328 | 328 | default: |
| 329 | 329 | // Entry is the physical address of a three-legged termite-eaten table |
| r17702 | r17703 | |
| 577 | 577 | UINT32 temp1, temp2; |
| 578 | 578 | temp1 = GET_CPSR & 0xF00000C3; |
| 579 | 579 | temp2 = (R15 & 0xF0000000) | ((R15 & 0x0C000000) >> (26 - 6)) | (R15 & 0x00000003); |
| 580 | if (temp1 != temp2) fatalerror( "%08X: 32-bit and 26-bit modes are out of sync (%08X %08X)", pc, temp1, temp2); | |
| 580 | if (temp1 != temp2) fatalerror( "%08X: 32-bit and 26-bit modes are out of sync (%08X %08X)\n", pc, temp1, temp2); | |
| 581 | 581 | } |
| 582 | 582 | #endif |
| 583 | 583 | |
| r17702 | r17703 | |
| 1250 | 1250 | { |
| 1251 | 1251 | if (!arm7_tlb_translate( cpustate, &R15, 0)) |
| 1252 | 1252 | { |
| 1253 | fatalerror("ARM7_MMU_ENABLE_HACK translate failed"); | |
| 1253 | fatalerror("ARM7_MMU_ENABLE_HACK translate failed\n"); | |
| 1254 | 1254 | } |
| 1255 | 1255 | } |
| 1256 | 1256 | #endif |
| r17702 | r17703 | |
|---|---|---|
| 350 | 350 | |
| 351 | 351 | // everything else is unexpected |
| 352 | 352 | default: |
| 353 | fatalerror("Unexpected parameter type"); | |
| 353 | fatalerror("Unexpected parameter type\n"); | |
| 354 | 354 | break; |
| 355 | 355 | } |
| 356 | 356 | } |
| r17702 | r17703 | |
| 625 | 625 | // generate a little bit of glue code to set up the environment |
| 626 | 626 | drccodeptr *cachetop = m_cache.begin_codegen(500); |
| 627 | 627 | if (cachetop == NULL) |
| 628 | fatalerror("Out of cache space after a reset!"); | |
| 628 | fatalerror("Out of cache space after a reset!\n"); | |
| 629 | 629 | |
| 630 | 630 | x86code *dst = (x86code *)*cachetop; |
| 631 | 631 | |
| r17702 | r17703 | |
| 2834 | 2834 | ((UINT32 *)src)[-1] = labelcodeptr - src; |
| 2835 | 2835 | } |
| 2836 | 2836 | else |
| 2837 | fatalerror("fixup_label called with invalid jmp source!"); | |
| 2837 | fatalerror("fixup_label called with invalid jmp source!\n"); | |
| 2838 | 2838 | } |
| 2839 | 2839 | |
| 2840 | 2840 |
| r17702 | r17703 | |
|---|---|---|
| 495 | 495 | case SIZE_WORD: convert_to_mov_immediate((INT16)m_param[1].immediate()); break; |
| 496 | 496 | case SIZE_DWORD: convert_to_mov_immediate((INT32)m_param[1].immediate()); break; |
| 497 | 497 | case SIZE_QWORD: convert_to_mov_immediate((INT64)m_param[1].immediate()); break; |
| 498 | case SIZE_DQWORD: fatalerror("Invalid SEXT target size"); | |
| 498 | case SIZE_DQWORD: fatalerror("Invalid SEXT target size\n"); | |
| 499 | 499 | } |
| 500 | 500 | break; |
| 501 | 501 |
| Previous | 199869 Revisions | Next |