trunk/src/emu/cpu/e132xs/e132xs.c
| r32019 | r32020 | |
| 35 | 35 | |
| 36 | 36 | Pierpaolo Prazzoli |
| 37 | 37 | - Fixed LDxx.N/P/S opcodes not to increment the destination register when |
| 38 | | it's the same as the source or "next source" one. |
| 38 | it's the same as the source or"next source" one. |
| 39 | 39 | |
| 40 | 40 | Pierpaolo Prazzoli |
| 41 | 41 | - Removed nested delays |
| r32019 | r32020 | |
| 59 | 59 | - Added nested delays |
| 60 | 60 | |
| 61 | 61 | Tomasz Slanina |
| 62 | | - Added "undefined" C flag to shift left instructions |
| 62 | - Added"undefined" C flag to shift left instructions |
| 63 | 63 | |
| 64 | 64 | Pierpaolo Prazzoli |
| 65 | 65 | - Added interrupts-block for delay instructions |
| r32019 | r32020 | |
| 177 | 177 | - Implemented a crude hack to set FL in the SR to 6, since according to the docs |
| 178 | 178 | that's supposed to happen each time a trap occurs, apparently including when |
| 179 | 179 | the processor starts up. The 3rd opcode executed in vamphalf checks to see if |
| 180 | | the FL flag in SR 6, so it's apparently the "correct" behaviour despite the |
| 180 | the FL flag in SR 6, so it's apparently the"correct" behaviour despite the |
| 181 | 181 | docs not saying anything on it. If FL is not 6, the branch falls through and |
| 182 | 182 | encounters a CHK PC, L2, which at that point will always throw a range trap. |
| 183 | 183 | The range trap vector contains 00000000 (CHK PC, PC), which according to the |
| 184 | 184 | docs will always throw a range trap (which would effectively lock the system). |
| 185 | 185 | This revealed a bug: CHK PC, PC apparently does not throw a range trap, which |
| 186 | | needs to be fixed. Now that the "correct" behaviour is hacked in with the FL |
| 186 | needs to be fixed. Now that the"correct" behaviour is hacked in with the FL |
| 187 | 187 | flags, it reveals yet another bug in that the branch is interpreted as being |
| 188 | 188 | +0x8700. This means that the PC then wraps around to 000082B0, give or take |
| 189 | 189 | a few bytes. While it does indeed branch to valid code, I highly doubt that |
| r32019 | r32020 | |
| 211 | 211 | |
| 212 | 212 | *********************************************************************/ |
| 213 | 213 | |
| 214 | | #include "emu.h" |
| 215 | | #include "debugger.h" |
| 216 | | #include "e132xs.h" |
| 214 | #include"emu.h" |
| 215 | #include"debugger.h" |
| 216 | #include"e132xs.h" |
| 217 | 217 | |
| 218 | 218 | #ifdef MAME_DEBUG |
| 219 | 219 | #define DEBUG_PRINTF(x) do { osd_printf_debug x; } while (0) |
| r32019 | r32020 | |
| 308 | 308 | //------------------------------------------------- |
| 309 | 309 | |
| 310 | 310 | e116t_device::e116t_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 311 | | : hyperstone_device(mconfig, "E1-16T", tag, owner, clock, E116T, 16, 16, ADDRESS_MAP_NAME(e116_4k_iram_map), "e116t", __FILE__) |
| 311 | : hyperstone_device(mconfig,"E1-16T", tag, owner, clock, E116T, 16, 16, ADDRESS_MAP_NAME(e116_4k_iram_map),"e116t", __FILE__) |
| 312 | 312 | { |
| 313 | 313 | } |
| 314 | 314 | |
| r32019 | r32020 | |
| 318 | 318 | //------------------------------------------------- |
| 319 | 319 | |
| 320 | 320 | e116xt_device::e116xt_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 321 | | : hyperstone_device(mconfig, "E1-16XT", tag, owner, clock, E116XT, 16, 16, ADDRESS_MAP_NAME(e116_8k_iram_map), "e116xt", __FILE__) |
| 321 | : hyperstone_device(mconfig,"E1-16XT", tag, owner, clock, E116XT, 16, 16, ADDRESS_MAP_NAME(e116_8k_iram_map),"e116xt", __FILE__) |
| 322 | 322 | { |
| 323 | 323 | } |
| 324 | 324 | |
| r32019 | r32020 | |
| 328 | 328 | //------------------------------------------------- |
| 329 | 329 | |
| 330 | 330 | e116xs_device::e116xs_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 331 | | : hyperstone_device(mconfig, "E1-16XS", tag, owner, clock, E116XS, 16, 16, ADDRESS_MAP_NAME(e116_16k_iram_map), "e116xs", __FILE__) |
| 331 | : hyperstone_device(mconfig,"E1-16XS", tag, owner, clock, E116XS, 16, 16, ADDRESS_MAP_NAME(e116_16k_iram_map),"e116xs", __FILE__) |
| 332 | 332 | { |
| 333 | 333 | } |
| 334 | 334 | |
| r32019 | r32020 | |
| 338 | 338 | //------------------------------------------------- |
| 339 | 339 | |
| 340 | 340 | e116xsr_device::e116xsr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 341 | | : hyperstone_device(mconfig, "E1-16XSR", tag, owner, clock, E116XT, 16, 16, ADDRESS_MAP_NAME(e116_16k_iram_map), "e116xsr", __FILE__) |
| 341 | : hyperstone_device(mconfig,"E1-16XSR", tag, owner, clock, E116XT, 16, 16, ADDRESS_MAP_NAME(e116_16k_iram_map),"e116xsr", __FILE__) |
| 342 | 342 | { |
| 343 | 343 | } |
| 344 | 344 | |
| r32019 | r32020 | |
| 348 | 348 | //------------------------------------------------- |
| 349 | 349 | |
| 350 | 350 | e132n_device::e132n_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 351 | | : hyperstone_device(mconfig, "E1-32N", tag, owner, clock, E132N, 32, 32, ADDRESS_MAP_NAME(e132_4k_iram_map), "e132n", __FILE__) |
| 351 | : hyperstone_device(mconfig,"E1-32N", tag, owner, clock, E132N, 32, 32, ADDRESS_MAP_NAME(e132_4k_iram_map),"e132n", __FILE__) |
| 352 | 352 | { |
| 353 | 353 | } |
| 354 | 354 | |
| r32019 | r32020 | |
| 358 | 358 | //------------------------------------------------- |
| 359 | 359 | |
| 360 | 360 | e132t_device::e132t_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 361 | | : hyperstone_device(mconfig, "E1-32T", tag, owner, clock, E132T, 32, 32, ADDRESS_MAP_NAME(e132_4k_iram_map), "e132t", __FILE__) |
| 361 | : hyperstone_device(mconfig,"E1-32T", tag, owner, clock, E132T, 32, 32, ADDRESS_MAP_NAME(e132_4k_iram_map),"e132t", __FILE__) |
| 362 | 362 | { |
| 363 | 363 | } |
| 364 | 364 | |
| r32019 | r32020 | |
| 368 | 368 | //------------------------------------------------- |
| 369 | 369 | |
| 370 | 370 | e132xn_device::e132xn_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 371 | | : hyperstone_device(mconfig, "E1-32XN", tag, owner, clock, E132XN, 32, 32, ADDRESS_MAP_NAME(e132_8k_iram_map), "e132xn", __FILE__) |
| 371 | : hyperstone_device(mconfig,"E1-32XN", tag, owner, clock, E132XN, 32, 32, ADDRESS_MAP_NAME(e132_8k_iram_map),"e132xn", __FILE__) |
| 372 | 372 | { |
| 373 | 373 | } |
| 374 | 374 | |
| r32019 | r32020 | |
| 378 | 378 | //------------------------------------------------- |
| 379 | 379 | |
| 380 | 380 | e132xt_device::e132xt_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 381 | | : hyperstone_device(mconfig, "E1-32XT", tag, owner, clock, E132XT, 32, 32, ADDRESS_MAP_NAME(e132_8k_iram_map), "e132xt", __FILE__) |
| 381 | : hyperstone_device(mconfig,"E1-32XT", tag, owner, clock, E132XT, 32, 32, ADDRESS_MAP_NAME(e132_8k_iram_map),"e132xt", __FILE__) |
| 382 | 382 | { |
| 383 | 383 | } |
| 384 | 384 | |
| r32019 | r32020 | |
| 388 | 388 | //------------------------------------------------- |
| 389 | 389 | |
| 390 | 390 | e132xs_device::e132xs_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 391 | | : hyperstone_device(mconfig, "E1-32XS", tag, owner, clock, E132XS, 32, 32, ADDRESS_MAP_NAME(e132_16k_iram_map), "e132xs", __FILE__) |
| 391 | : hyperstone_device(mconfig,"E1-32XS", tag, owner, clock, E132XS, 32, 32, ADDRESS_MAP_NAME(e132_16k_iram_map),"e132xs", __FILE__) |
| 392 | 392 | { |
| 393 | 393 | } |
| 394 | 394 | |
| r32019 | r32020 | |
| 398 | 398 | //------------------------------------------------- |
| 399 | 399 | |
| 400 | 400 | e132xsr_device::e132xsr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 401 | | : hyperstone_device(mconfig, "E1-32XSR", tag, owner, clock, E132XSR, 32, 32, ADDRESS_MAP_NAME(e132_16k_iram_map), "e132xsr", __FILE__) |
| 401 | : hyperstone_device(mconfig,"E1-32XSR", tag, owner, clock, E132XSR, 32, 32, ADDRESS_MAP_NAME(e132_16k_iram_map),"e132xsr", __FILE__) |
| 402 | 402 | { |
| 403 | 403 | } |
| 404 | 404 | |
| r32019 | r32020 | |
| 408 | 408 | //------------------------------------------------- |
| 409 | 409 | |
| 410 | 410 | gms30c2116_device::gms30c2116_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 411 | | : hyperstone_device(mconfig, "GMS30C2116", tag, owner, clock, GMS30C2116, 16, 16, ADDRESS_MAP_NAME(e116_4k_iram_map), "gms30c2116", __FILE__) |
| 411 | : hyperstone_device(mconfig,"GMS30C2116", tag, owner, clock, GMS30C2116, 16, 16, ADDRESS_MAP_NAME(e116_4k_iram_map),"gms30c2116", __FILE__) |
| 412 | 412 | { |
| 413 | 413 | } |
| 414 | 414 | |
| r32019 | r32020 | |
| 418 | 418 | //------------------------------------------------- |
| 419 | 419 | |
| 420 | 420 | gms30c2132_device::gms30c2132_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 421 | | : hyperstone_device(mconfig, "GMS30C2132", tag, owner, clock, GMS30C2132, 32, 32, ADDRESS_MAP_NAME(e132_4k_iram_map), "gms30c2132", __FILE__) |
| 421 | : hyperstone_device(mconfig,"GMS30C2132", tag, owner, clock, GMS30C2132, 32, 32, ADDRESS_MAP_NAME(e132_4k_iram_map),"gms30c2132", __FILE__) |
| 422 | 422 | { |
| 423 | 423 | } |
| 424 | 424 | |
| r32019 | r32020 | |
| 428 | 428 | //------------------------------------------------- |
| 429 | 429 | |
| 430 | 430 | gms30c2216_device::gms30c2216_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 431 | | : hyperstone_device(mconfig, "GMS30C2216", tag, owner, clock, GMS30C2216, 16, 16, ADDRESS_MAP_NAME(e116_8k_iram_map), "gms30c2216", __FILE__) |
| 431 | : hyperstone_device(mconfig,"GMS30C2216", tag, owner, clock, GMS30C2216, 16, 16, ADDRESS_MAP_NAME(e116_8k_iram_map),"gms30c2216", __FILE__) |
| 432 | 432 | { |
| 433 | 433 | } |
| 434 | 434 | |
| r32019 | r32020 | |
| 438 | 438 | //------------------------------------------------- |
| 439 | 439 | |
| 440 | 440 | gms30c2232_device::gms30c2232_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 441 | | : hyperstone_device(mconfig, "GMS30C2232", tag, owner, clock, GMS30C2232, 32, 32, ADDRESS_MAP_NAME(e132_8k_iram_map), "gms30c2232", __FILE__) |
| 441 | : hyperstone_device(mconfig,"GMS30C2232", tag, owner, clock, GMS30C2232, 32, 32, ADDRESS_MAP_NAME(e132_8k_iram_map),"gms30c2232", __FILE__) |
| 442 | 442 | { |
| 443 | 443 | } |
| 444 | 444 | |
| r32019 | r32020 | |
| 459 | 459 | return addr; |
| 460 | 460 | } |
| 461 | 461 | |
| 462 | | /* Return the entry point for a determinated emulated code (the one for "extend" opcode is reserved) */ |
| 462 | /* Return the entry point for a determinated emulated code (the one for"extend" opcode is reserved) */ |
| 463 | 463 | UINT32 hyperstone_device::get_emu_code_addr(UINT8 num) /* num is OP */ |
| 464 | 464 | { |
| 465 | 465 | UINT32 addr; |
| r32019 | r32020 | |
| 1561 | 1561 | |
| 1562 | 1562 | // register our state for the debugger |
| 1563 | 1563 | astring tempstr; |
| 1564 | | state_add(STATE_GENPC, "GENPC", m_global_regs[0]).noshow(); |
| 1565 | | state_add(STATE_GENFLAGS, "GENFLAGS", m_global_regs[1]).callimport().callexport().formatstr("%40s").noshow(); |
| 1566 | | state_add(E132XS_PC, "PC :%08X", m_global_regs[0]).mask(0xffffffff); |
| 1567 | | state_add(E132XS_SR, "SR :%08X", m_global_regs[1]).mask(0xffffffff); |
| 1568 | | state_add(E132XS_FER, "FER :%08X", m_global_regs[2]).mask(0xffffffff); |
| 1569 | | state_add(E132XS_G3, "G3 :%08X", m_global_regs[3]).mask(0xffffffff); |
| 1570 | | state_add(E132XS_G4, "G4 :%08X", m_global_regs[4]).mask(0xffffffff); |
| 1571 | | state_add(E132XS_G5, "G5 :%08X", m_global_regs[5]).mask(0xffffffff); |
| 1572 | | state_add(E132XS_G6, "G6 :%08X", m_global_regs[6]).mask(0xffffffff); |
| 1573 | | state_add(E132XS_G7, "G7 :%08X", m_global_regs[7]).mask(0xffffffff); |
| 1574 | | state_add(E132XS_G8, "G8 :%08X", m_global_regs[8]).mask(0xffffffff); |
| 1575 | | state_add(E132XS_G9, "G9 :%08X", m_global_regs[9]).mask(0xffffffff); |
| 1576 | | state_add(E132XS_G10, "G10 :%08X", m_global_regs[10]).mask(0xffffffff); |
| 1577 | | state_add(E132XS_G11, "G11 :%08X", m_global_regs[11]).mask(0xffffffff); |
| 1578 | | state_add(E132XS_G12, "G12 :%08X", m_global_regs[12]).mask(0xffffffff); |
| 1579 | | state_add(E132XS_G13, "G13 :%08X", m_global_regs[13]).mask(0xffffffff); |
| 1580 | | state_add(E132XS_G14, "G14 :%08X", m_global_regs[14]).mask(0xffffffff); |
| 1581 | | state_add(E132XS_G15, "G15 :%08X", m_global_regs[15]).mask(0xffffffff); |
| 1582 | | state_add(E132XS_G16, "G16 :%08X", m_global_regs[16]).mask(0xffffffff); |
| 1583 | | state_add(E132XS_G17, "G17 :%08X", m_global_regs[17]).mask(0xffffffff); |
| 1584 | | state_add(E132XS_SP, "SP :%08X", m_global_regs[18]).mask(0xffffffff); |
| 1585 | | state_add(E132XS_UB, "UB :%08X", m_global_regs[19]).mask(0xffffffff); |
| 1586 | | state_add(E132XS_BCR, "BCR :%08X", m_global_regs[20]).mask(0xffffffff); |
| 1587 | | state_add(E132XS_TPR, "TPR :%08X", m_global_regs[21]).mask(0xffffffff); |
| 1588 | | state_add(E132XS_TCR, "TCR :%08X", m_global_regs[22]).mask(0xffffffff); |
| 1589 | | state_add(E132XS_TR, "TR :%08X", m_global_regs[23]).mask(0xffffffff); |
| 1590 | | state_add(E132XS_WCR, "WCR :%08X", m_global_regs[24]).mask(0xffffffff); |
| 1591 | | state_add(E132XS_ISR, "ISR :%08X", m_global_regs[25]).mask(0xffffffff); |
| 1592 | | state_add(E132XS_FCR, "FCR :%08X", m_global_regs[26]).mask(0xffffffff); |
| 1593 | | state_add(E132XS_MCR, "MCR :%08X", m_global_regs[27]).mask(0xffffffff); |
| 1594 | | state_add(E132XS_G28, "G28 :%08X", m_global_regs[28]).mask(0xffffffff); |
| 1595 | | state_add(E132XS_G29, "G29 :%08X", m_global_regs[29]).mask(0xffffffff); |
| 1596 | | state_add(E132XS_G30, "G30 :%08X", m_global_regs[30]).mask(0xffffffff); |
| 1597 | | state_add(E132XS_G31, "G31 :%08X", m_global_regs[31]).mask(0xffffffff); |
| 1598 | | state_add(E132XS_CL0, "CL0 :%08X", m_local_regs[(0 + GET_FP) % 64]).mask(0xffffffff); |
| 1599 | | state_add(E132XS_CL1, "CL1 :%08X", m_local_regs[(1 + GET_FP) % 64]).mask(0xffffffff); |
| 1600 | | state_add(E132XS_CL2, "CL2 :%08X", m_local_regs[(2 + GET_FP) % 64]).mask(0xffffffff); |
| 1601 | | state_add(E132XS_CL3, "CL3 :%08X", m_local_regs[(3 + GET_FP) % 64]).mask(0xffffffff); |
| 1602 | | state_add(E132XS_CL4, "CL4 :%08X", m_local_regs[(4 + GET_FP) % 64]).mask(0xffffffff); |
| 1603 | | state_add(E132XS_CL5, "CL5 :%08X", m_local_regs[(5 + GET_FP) % 64]).mask(0xffffffff); |
| 1604 | | state_add(E132XS_CL6, "CL6 :%08X", m_local_regs[(6 + GET_FP) % 64]).mask(0xffffffff); |
| 1605 | | state_add(E132XS_CL7, "CL7 :%08X", m_local_regs[(7 + GET_FP) % 64]).mask(0xffffffff); |
| 1606 | | state_add(E132XS_CL8, "CL8 :%08X", m_local_regs[(8 + GET_FP) % 64]).mask(0xffffffff); |
| 1607 | | state_add(E132XS_CL9, "CL9 :%08X", m_local_regs[(9 + GET_FP) % 64]).mask(0xffffffff); |
| 1608 | | state_add(E132XS_CL10, "CL10:%08X", m_local_regs[(10 + GET_FP) % 64]).mask(0xffffffff); |
| 1609 | | state_add(E132XS_CL11, "CL11:%08X", m_local_regs[(11 + GET_FP) % 64]).mask(0xffffffff); |
| 1610 | | state_add(E132XS_CL12, "CL12:%08X", m_local_regs[(12 + GET_FP) % 64]).mask(0xffffffff); |
| 1611 | | state_add(E132XS_CL13, "CL13:%08X", m_local_regs[(13 + GET_FP) % 64]).mask(0xffffffff); |
| 1612 | | state_add(E132XS_CL14, "CL14:%08X", m_local_regs[(14 + GET_FP) % 64]).mask(0xffffffff); |
| 1613 | | state_add(E132XS_CL15, "CL15:%08X", m_local_regs[(15 + GET_FP) % 64]).mask(0xffffffff); |
| 1614 | | state_add(E132XS_L0, "L0 :%08X", m_local_regs[0]).mask(0xffffffff); |
| 1615 | | state_add(E132XS_L1, "L1 :%08X", m_local_regs[1]).mask(0xffffffff); |
| 1616 | | state_add(E132XS_L2, "L2 :%08X", m_local_regs[2]).mask(0xffffffff); |
| 1617 | | state_add(E132XS_L3, "L3 :%08X", m_local_regs[3]).mask(0xffffffff); |
| 1618 | | state_add(E132XS_L4, "L4 :%08X", m_local_regs[4]).mask(0xffffffff); |
| 1619 | | state_add(E132XS_L5, "L5 :%08X", m_local_regs[5]).mask(0xffffffff); |
| 1620 | | state_add(E132XS_L6, "L6 :%08X", m_local_regs[6]).mask(0xffffffff); |
| 1621 | | state_add(E132XS_L7, "L7 :%08X", m_local_regs[7]).mask(0xffffffff); |
| 1622 | | state_add(E132XS_L8, "L8 :%08X", m_local_regs[8]).mask(0xffffffff); |
| 1623 | | state_add(E132XS_L9, "L9 :%08X", m_local_regs[9]).mask(0xffffffff); |
| 1624 | | state_add(E132XS_L10, "L10 :%08X", m_local_regs[10]).mask(0xffffffff); |
| 1625 | | state_add(E132XS_L11, "L11 :%08X", m_local_regs[11]).mask(0xffffffff); |
| 1626 | | state_add(E132XS_L12, "L12 :%08X", m_local_regs[12]).mask(0xffffffff); |
| 1627 | | state_add(E132XS_L13, "L13 :%08X", m_local_regs[13]).mask(0xffffffff); |
| 1628 | | state_add(E132XS_L14, "L14 :%08X", m_local_regs[14]).mask(0xffffffff); |
| 1629 | | state_add(E132XS_L15, "L15 :%08X", m_local_regs[15]).mask(0xffffffff); |
| 1630 | | state_add(E132XS_L16, "L16 :%08X", m_local_regs[16]).mask(0xffffffff); |
| 1631 | | state_add(E132XS_L17, "L17 :%08X", m_local_regs[17]).mask(0xffffffff); |
| 1632 | | state_add(E132XS_L18, "L18 :%08X", m_local_regs[18]).mask(0xffffffff); |
| 1633 | | state_add(E132XS_L19, "L19 :%08X", m_local_regs[19]).mask(0xffffffff); |
| 1634 | | state_add(E132XS_L20, "L20 :%08X", m_local_regs[20]).mask(0xffffffff); |
| 1635 | | state_add(E132XS_L21, "L21 :%08X", m_local_regs[21]).mask(0xffffffff); |
| 1636 | | state_add(E132XS_L22, "L22 :%08X", m_local_regs[22]).mask(0xffffffff); |
| 1637 | | state_add(E132XS_L23, "L23 :%08X", m_local_regs[23]).mask(0xffffffff); |
| 1638 | | state_add(E132XS_L24, "L24 :%08X", m_local_regs[24]).mask(0xffffffff); |
| 1639 | | state_add(E132XS_L25, "L25 :%08X", m_local_regs[25]).mask(0xffffffff); |
| 1640 | | state_add(E132XS_L26, "L26 :%08X", m_local_regs[26]).mask(0xffffffff); |
| 1641 | | state_add(E132XS_L27, "L27 :%08X", m_local_regs[27]).mask(0xffffffff); |
| 1642 | | state_add(E132XS_L28, "L28 :%08X", m_local_regs[28]).mask(0xffffffff); |
| 1643 | | state_add(E132XS_L29, "L29 :%08X", m_local_regs[29]).mask(0xffffffff); |
| 1644 | | state_add(E132XS_L30, "L30 :%08X", m_local_regs[30]).mask(0xffffffff); |
| 1645 | | state_add(E132XS_L31, "L31 :%08X", m_local_regs[31]).mask(0xffffffff); |
| 1646 | | state_add(E132XS_L32, "L32 :%08X", m_local_regs[32]).mask(0xffffffff); |
| 1647 | | state_add(E132XS_L33, "L33 :%08X", m_local_regs[33]).mask(0xffffffff); |
| 1648 | | state_add(E132XS_L34, "L34 :%08X", m_local_regs[34]).mask(0xffffffff); |
| 1649 | | state_add(E132XS_L35, "L35 :%08X", m_local_regs[35]).mask(0xffffffff); |
| 1650 | | state_add(E132XS_L36, "L36 :%08X", m_local_regs[36]).mask(0xffffffff); |
| 1651 | | state_add(E132XS_L37, "L37 :%08X", m_local_regs[37]).mask(0xffffffff); |
| 1652 | | state_add(E132XS_L38, "L38 :%08X", m_local_regs[38]).mask(0xffffffff); |
| 1653 | | state_add(E132XS_L39, "L39 :%08X", m_local_regs[39]).mask(0xffffffff); |
| 1654 | | state_add(E132XS_L40, "L40 :%08X", m_local_regs[40]).mask(0xffffffff); |
| 1655 | | state_add(E132XS_L41, "L41 :%08X", m_local_regs[41]).mask(0xffffffff); |
| 1656 | | state_add(E132XS_L42, "L42 :%08X", m_local_regs[42]).mask(0xffffffff); |
| 1657 | | state_add(E132XS_L43, "L43 :%08X", m_local_regs[43]).mask(0xffffffff); |
| 1658 | | state_add(E132XS_L44, "L44 :%08X", m_local_regs[44]).mask(0xffffffff); |
| 1659 | | state_add(E132XS_L45, "L45 :%08X", m_local_regs[45]).mask(0xffffffff); |
| 1660 | | state_add(E132XS_L46, "L46 :%08X", m_local_regs[46]).mask(0xffffffff); |
| 1661 | | state_add(E132XS_L47, "L47 :%08X", m_local_regs[47]).mask(0xffffffff); |
| 1662 | | state_add(E132XS_L48, "L48 :%08X", m_local_regs[48]).mask(0xffffffff); |
| 1663 | | state_add(E132XS_L49, "L49 :%08X", m_local_regs[49]).mask(0xffffffff); |
| 1664 | | state_add(E132XS_L50, "L50 :%08X", m_local_regs[50]).mask(0xffffffff); |
| 1665 | | state_add(E132XS_L51, "L51 :%08X", m_local_regs[51]).mask(0xffffffff); |
| 1666 | | state_add(E132XS_L52, "L52 :%08X", m_local_regs[52]).mask(0xffffffff); |
| 1667 | | state_add(E132XS_L53, "L53 :%08X", m_local_regs[53]).mask(0xffffffff); |
| 1668 | | state_add(E132XS_L54, "L54 :%08X", m_local_regs[54]).mask(0xffffffff); |
| 1669 | | state_add(E132XS_L55, "L55 :%08X", m_local_regs[55]).mask(0xffffffff); |
| 1670 | | state_add(E132XS_L56, "L56 :%08X", m_local_regs[56]).mask(0xffffffff); |
| 1671 | | state_add(E132XS_L57, "L57 :%08X", m_local_regs[57]).mask(0xffffffff); |
| 1672 | | state_add(E132XS_L58, "L58 :%08X", m_local_regs[58]).mask(0xffffffff); |
| 1673 | | state_add(E132XS_L59, "L59 :%08X", m_local_regs[59]).mask(0xffffffff); |
| 1674 | | state_add(E132XS_L60, "L60 :%08X", m_local_regs[60]).mask(0xffffffff); |
| 1675 | | state_add(E132XS_L61, "L61 :%08X", m_local_regs[61]).mask(0xffffffff); |
| 1676 | | state_add(E132XS_L62, "L62 :%08X", m_local_regs[62]).mask(0xffffffff); |
| 1677 | | state_add(E132XS_L63, "L63 :%08X", m_local_regs[63]).mask(0xffffffff); |
| 1564 | state_add(STATE_GENPC, "GENPC", m_global_regs[0]).noshow(); |
| 1565 | state_add(STATE_GENFLAGS, "GENFLAGS", m_global_regs[1]).callimport().callexport().formatstr("%40s").noshow(); |
| 1566 | state_add(E132XS_PC, "PC", m_global_regs[0]).mask(0xffffffff); |
| 1567 | state_add(E132XS_SR, "SR", m_global_regs[1]).mask(0xffffffff); |
| 1568 | state_add(E132XS_FER, "FER", m_global_regs[2]).mask(0xffffffff); |
| 1569 | state_add(E132XS_G3, "G3", m_global_regs[3]).mask(0xffffffff); |
| 1570 | state_add(E132XS_G4, "G4", m_global_regs[4]).mask(0xffffffff); |
| 1571 | state_add(E132XS_G5, "G5", m_global_regs[5]).mask(0xffffffff); |
| 1572 | state_add(E132XS_G6, "G6", m_global_regs[6]).mask(0xffffffff); |
| 1573 | state_add(E132XS_G7, "G7", m_global_regs[7]).mask(0xffffffff); |
| 1574 | state_add(E132XS_G8, "G8", m_global_regs[8]).mask(0xffffffff); |
| 1575 | state_add(E132XS_G9, "G9", m_global_regs[9]).mask(0xffffffff); |
| 1576 | state_add(E132XS_G10, "G10", m_global_regs[10]).mask(0xffffffff); |
| 1577 | state_add(E132XS_G11, "G11", m_global_regs[11]).mask(0xffffffff); |
| 1578 | state_add(E132XS_G12, "G12", m_global_regs[12]).mask(0xffffffff); |
| 1579 | state_add(E132XS_G13, "G13", m_global_regs[13]).mask(0xffffffff); |
| 1580 | state_add(E132XS_G14, "G14", m_global_regs[14]).mask(0xffffffff); |
| 1581 | state_add(E132XS_G15, "G15", m_global_regs[15]).mask(0xffffffff); |
| 1582 | state_add(E132XS_G16, "G16", m_global_regs[16]).mask(0xffffffff); |
| 1583 | state_add(E132XS_G17, "G17", m_global_regs[17]).mask(0xffffffff); |
| 1584 | state_add(E132XS_SP, "SP", m_global_regs[18]).mask(0xffffffff); |
| 1585 | state_add(E132XS_UB, "UB", m_global_regs[19]).mask(0xffffffff); |
| 1586 | state_add(E132XS_BCR, "BCR", m_global_regs[20]).mask(0xffffffff); |
| 1587 | state_add(E132XS_TPR, "TPR", m_global_regs[21]).mask(0xffffffff); |
| 1588 | state_add(E132XS_TCR, "TCR", m_global_regs[22]).mask(0xffffffff); |
| 1589 | state_add(E132XS_TR, "TR", m_global_regs[23]).mask(0xffffffff); |
| 1590 | state_add(E132XS_WCR, "WCR", m_global_regs[24]).mask(0xffffffff); |
| 1591 | state_add(E132XS_ISR, "ISR", m_global_regs[25]).mask(0xffffffff); |
| 1592 | state_add(E132XS_FCR, "FCR", m_global_regs[26]).mask(0xffffffff); |
| 1593 | state_add(E132XS_MCR, "MCR", m_global_regs[27]).mask(0xffffffff); |
| 1594 | state_add(E132XS_G28, "G28", m_global_regs[28]).mask(0xffffffff); |
| 1595 | state_add(E132XS_G29, "G29", m_global_regs[29]).mask(0xffffffff); |
| 1596 | state_add(E132XS_G30, "G30", m_global_regs[30]).mask(0xffffffff); |
| 1597 | state_add(E132XS_G31, "G31", m_global_regs[31]).mask(0xffffffff); |
| 1598 | state_add(E132XS_CL0, "CL0", m_local_regs[(0 + GET_FP) % 64]).mask(0xffffffff); |
| 1599 | state_add(E132XS_CL1, "CL1", m_local_regs[(1 + GET_FP) % 64]).mask(0xffffffff); |
| 1600 | state_add(E132XS_CL2, "CL2", m_local_regs[(2 + GET_FP) % 64]).mask(0xffffffff); |
| 1601 | state_add(E132XS_CL3, "CL3", m_local_regs[(3 + GET_FP) % 64]).mask(0xffffffff); |
| 1602 | state_add(E132XS_CL4, "CL4", m_local_regs[(4 + GET_FP) % 64]).mask(0xffffffff); |
| 1603 | state_add(E132XS_CL5, "CL5", m_local_regs[(5 + GET_FP) % 64]).mask(0xffffffff); |
| 1604 | state_add(E132XS_CL6, "CL6", m_local_regs[(6 + GET_FP) % 64]).mask(0xffffffff); |
| 1605 | state_add(E132XS_CL7, "CL7", m_local_regs[(7 + GET_FP) % 64]).mask(0xffffffff); |
| 1606 | state_add(E132XS_CL8, "CL8", m_local_regs[(8 + GET_FP) % 64]).mask(0xffffffff); |
| 1607 | state_add(E132XS_CL9, "CL9", m_local_regs[(9 + GET_FP) % 64]).mask(0xffffffff); |
| 1608 | state_add(E132XS_CL10, "CL10", m_local_regs[(10 + GET_FP) % 64]).mask(0xffffffff); |
| 1609 | state_add(E132XS_CL11, "CL11", m_local_regs[(11 + GET_FP) % 64]).mask(0xffffffff); |
| 1610 | state_add(E132XS_CL12, "CL12", m_local_regs[(12 + GET_FP) % 64]).mask(0xffffffff); |
| 1611 | state_add(E132XS_CL13, "CL13", m_local_regs[(13 + GET_FP) % 64]).mask(0xffffffff); |
| 1612 | state_add(E132XS_CL14, "CL14", m_local_regs[(14 + GET_FP) % 64]).mask(0xffffffff); |
| 1613 | state_add(E132XS_CL15, "CL15", m_local_regs[(15 + GET_FP) % 64]).mask(0xffffffff); |
| 1614 | state_add(E132XS_L0, "L0", m_local_regs[0]).mask(0xffffffff); |
| 1615 | state_add(E132XS_L1, "L1", m_local_regs[1]).mask(0xffffffff); |
| 1616 | state_add(E132XS_L2, "L2", m_local_regs[2]).mask(0xffffffff); |
| 1617 | state_add(E132XS_L3, "L3", m_local_regs[3]).mask(0xffffffff); |
| 1618 | state_add(E132XS_L4, "L4", m_local_regs[4]).mask(0xffffffff); |
| 1619 | state_add(E132XS_L5, "L5", m_local_regs[5]).mask(0xffffffff); |
| 1620 | state_add(E132XS_L6, "L6", m_local_regs[6]).mask(0xffffffff); |
| 1621 | state_add(E132XS_L7, "L7", m_local_regs[7]).mask(0xffffffff); |
| 1622 | state_add(E132XS_L8, "L8", m_local_regs[8]).mask(0xffffffff); |
| 1623 | state_add(E132XS_L9, "L9", m_local_regs[9]).mask(0xffffffff); |
| 1624 | state_add(E132XS_L10, "L10", m_local_regs[10]).mask(0xffffffff); |
| 1625 | state_add(E132XS_L11, "L11", m_local_regs[11]).mask(0xffffffff); |
| 1626 | state_add(E132XS_L12, "L12", m_local_regs[12]).mask(0xffffffff); |
| 1627 | state_add(E132XS_L13, "L13", m_local_regs[13]).mask(0xffffffff); |
| 1628 | state_add(E132XS_L14, "L14", m_local_regs[14]).mask(0xffffffff); |
| 1629 | state_add(E132XS_L15, "L15", m_local_regs[15]).mask(0xffffffff); |
| 1630 | state_add(E132XS_L16, "L16", m_local_regs[16]).mask(0xffffffff); |
| 1631 | state_add(E132XS_L17, "L17", m_local_regs[17]).mask(0xffffffff); |
| 1632 | state_add(E132XS_L18, "L18", m_local_regs[18]).mask(0xffffffff); |
| 1633 | state_add(E132XS_L19, "L19", m_local_regs[19]).mask(0xffffffff); |
| 1634 | state_add(E132XS_L20, "L20", m_local_regs[20]).mask(0xffffffff); |
| 1635 | state_add(E132XS_L21, "L21", m_local_regs[21]).mask(0xffffffff); |
| 1636 | state_add(E132XS_L22, "L22", m_local_regs[22]).mask(0xffffffff); |
| 1637 | state_add(E132XS_L23, "L23", m_local_regs[23]).mask(0xffffffff); |
| 1638 | state_add(E132XS_L24, "L24", m_local_regs[24]).mask(0xffffffff); |
| 1639 | state_add(E132XS_L25, "L25", m_local_regs[25]).mask(0xffffffff); |
| 1640 | state_add(E132XS_L26, "L26", m_local_regs[26]).mask(0xffffffff); |
| 1641 | state_add(E132XS_L27, "L27", m_local_regs[27]).mask(0xffffffff); |
| 1642 | state_add(E132XS_L28, "L28", m_local_regs[28]).mask(0xffffffff); |
| 1643 | state_add(E132XS_L29, "L29", m_local_regs[29]).mask(0xffffffff); |
| 1644 | state_add(E132XS_L30, "L30", m_local_regs[30]).mask(0xffffffff); |
| 1645 | state_add(E132XS_L31, "L31", m_local_regs[31]).mask(0xffffffff); |
| 1646 | state_add(E132XS_L32, "L32", m_local_regs[32]).mask(0xffffffff); |
| 1647 | state_add(E132XS_L33, "L33", m_local_regs[33]).mask(0xffffffff); |
| 1648 | state_add(E132XS_L34, "L34", m_local_regs[34]).mask(0xffffffff); |
| 1649 | state_add(E132XS_L35, "L35", m_local_regs[35]).mask(0xffffffff); |
| 1650 | state_add(E132XS_L36, "L36", m_local_regs[36]).mask(0xffffffff); |
| 1651 | state_add(E132XS_L37, "L37", m_local_regs[37]).mask(0xffffffff); |
| 1652 | state_add(E132XS_L38, "L38", m_local_regs[38]).mask(0xffffffff); |
| 1653 | state_add(E132XS_L39, "L39", m_local_regs[39]).mask(0xffffffff); |
| 1654 | state_add(E132XS_L40, "L40", m_local_regs[40]).mask(0xffffffff); |
| 1655 | state_add(E132XS_L41, "L41", m_local_regs[41]).mask(0xffffffff); |
| 1656 | state_add(E132XS_L42, "L42", m_local_regs[42]).mask(0xffffffff); |
| 1657 | state_add(E132XS_L43, "L43", m_local_regs[43]).mask(0xffffffff); |
| 1658 | state_add(E132XS_L44, "L44", m_local_regs[44]).mask(0xffffffff); |
| 1659 | state_add(E132XS_L45, "L45", m_local_regs[45]).mask(0xffffffff); |
| 1660 | state_add(E132XS_L46, "L46", m_local_regs[46]).mask(0xffffffff); |
| 1661 | state_add(E132XS_L47, "L47", m_local_regs[47]).mask(0xffffffff); |
| 1662 | state_add(E132XS_L48, "L48", m_local_regs[48]).mask(0xffffffff); |
| 1663 | state_add(E132XS_L49, "L49", m_local_regs[49]).mask(0xffffffff); |
| 1664 | state_add(E132XS_L50, "L50", m_local_regs[50]).mask(0xffffffff); |
| 1665 | state_add(E132XS_L51, "L51", m_local_regs[51]).mask(0xffffffff); |
| 1666 | state_add(E132XS_L52, "L52", m_local_regs[52]).mask(0xffffffff); |
| 1667 | state_add(E132XS_L53, "L53", m_local_regs[53]).mask(0xffffffff); |
| 1668 | state_add(E132XS_L54, "L54", m_local_regs[54]).mask(0xffffffff); |
| 1669 | state_add(E132XS_L55, "L55", m_local_regs[55]).mask(0xffffffff); |
| 1670 | state_add(E132XS_L56, "L56", m_local_regs[56]).mask(0xffffffff); |
| 1671 | state_add(E132XS_L57, "L57", m_local_regs[57]).mask(0xffffffff); |
| 1672 | state_add(E132XS_L58, "L58", m_local_regs[58]).mask(0xffffffff); |
| 1673 | state_add(E132XS_L59, "L59", m_local_regs[59]).mask(0xffffffff); |
| 1674 | state_add(E132XS_L60, "L60", m_local_regs[60]).mask(0xffffffff); |
| 1675 | state_add(E132XS_L61, "L61", m_local_regs[61]).mask(0xffffffff); |
| 1676 | state_add(E132XS_L62, "L62", m_local_regs[62]).mask(0xffffffff); |
| 1677 | state_add(E132XS_L63, "L63", m_local_regs[63]).mask(0xffffffff); |
| 1678 | 1678 | |
| 1679 | 1679 | save_item(NAME(m_global_regs)); |
| 1680 | 1680 | save_item(NAME(m_local_regs)); |
| r32019 | r32020 | |
| 4210 | 4210 | { |
| 4211 | 4211 | // signed or unsigned multiplication, single word product |
| 4212 | 4212 | case EMUL: |
| 4213 | | case 0x100: // used in "N" type cpu |
| 4213 | case 0x100: // used in"N" type cpu |
| 4214 | 4214 | { |
| 4215 | 4215 | UINT32 result; |
| 4216 | 4216 | |
| r32019 | r32020 | |
| 4437 | 4437 | SET_SREGF(READ_W(DREG + 4)); |
| 4438 | 4438 | |
| 4439 | 4439 | // post increment the destination register if it's different from the source one |
| 4440 | | // and from the "next source" one |
| 4440 | // and from the"next source" one |
| 4441 | 4441 | if(!(decode->src == decode->dst && S_BIT == LOCAL) && !SAME_SRCF_DST ) |
| 4442 | 4442 | { |
| 4443 | 4443 | SET_DREG(DREG + 8); |
| r32019 | r32020 | |
| 4861 | 4861 | } |
| 4862 | 4862 | |
| 4863 | 4863 | |
| 4864 | | #include "e132xsop.inc" |
| 4864 | #include"e132xsop.inc" |
| 4865 | 4865 | |
| 4866 | 4866 | //************************************************************************** |
| 4867 | 4867 | // CORE EXECUTION LOOP |