diff --git a/src/devices/cpu/unsp/unsp.cpp b/src/devices/cpu/unsp/unsp.cpp index 9ac01d757df..7d1359896af 100644 --- a/src/devices/cpu/unsp/unsp.cpp +++ b/src/devices/cpu/unsp/unsp.cpp @@ -256,13 +256,13 @@ void unsp_device::state_import(const device_state_entry &entry) void unsp_device::update_nzsc(uint32_t value, uint16_t r0, uint16_t r1) { m_core->m_r[REG_SR] &= ~(UNSP_N | UNSP_Z | UNSP_S | UNSP_C); - if((int16_t)r0 < (int16_t)r1) + if (int16_t(r0) < int16_t(~r1)) m_core->m_r[REG_SR] |= UNSP_S; - if(value & 0x8000) + if (BIT(value, 15)) m_core->m_r[REG_SR] |= UNSP_N; if((uint16_t)value == 0) m_core->m_r[REG_SR] |= UNSP_Z; - if(value != (uint16_t)value) + if (BIT(value, 16)) m_core->m_r[REG_SR] |= UNSP_C; } @@ -877,33 +877,37 @@ inline void unsp_device::execute_one(const uint16_t op) switch (op0) { case 0x00: // Add + { lres = r0 + r1; if (opa != 7) update_nzsc(lres, r0, r1); break; + } case 0x01: // Add w/ carry - lres = r0 + r1; - if(m_core->m_r[REG_SR] & UNSP_C) - lres++; + { + uint32_t c = (m_core->m_r[REG_SR] & UNSP_C) ? 1 : 0; + lres = r0 + r1 + c; if (opa != 7) update_nzsc(lres, r0, r1); break; + } case 0x02: // Subtract - lres = r0 + (uint16_t)(~r1) + 1; + lres = r0 + (uint16_t)(~r1) + uint32_t(1); if (opa != 7) - update_nzsc(lres, r0, r1); + update_nzsc(lres, r0, ~r1); break; case 0x03: // Subtract w/ carry - lres = r0 + (uint16_t)(~r1); - if(m_core->m_r[REG_SR] & UNSP_C) - lres++; + { + uint32_t c = (m_core->m_r[REG_SR] & UNSP_C) ? 1 : 0; + lres = r0 + (uint16_t)(~r1) + c; if (opa != 7) - update_nzsc(lres, r0, r1); + update_nzsc(lres, r0, ~r1); break; + } case 0x04: // Compare - lres = r0 + (uint16_t)(~r1) + 1; + lres = r0 + (uint16_t)(~r1) + uint32_t(1); if (opa != 7) - update_nzsc(lres, r0, r1); + update_nzsc(lres, r0, ~r1); return; case 0x06: // Negate lres = -r1; diff --git a/src/devices/cpu/unsp/unspdrc.cpp b/src/devices/cpu/unsp/unspdrc.cpp index eb010bd3a37..5ffd0bfe956 100644 --- a/src/devices/cpu/unsp/unspdrc.cpp +++ b/src/devices/cpu/unsp/unspdrc.cpp @@ -634,6 +634,7 @@ void unsp_device::generate_add_lpc(drcuml_block &block, int32_t offset) void unsp_device::generate_update_nzsc(drcuml_block &block) { + UML_XOR(block, I1, I1, 0x0000ffff); UML_SEXT(block, I1, I1, SIZE_WORD); UML_SEXT(block, I2, I2, SIZE_WORD); UML_CMP(block, I2, I1); @@ -644,9 +645,8 @@ void unsp_device::generate_update_nzsc(drcuml_block &block) UML_SETc(block, uml::COND_NZ, I1); UML_ROLINS(block, mem(&m_core->m_r[REG_SR]), I1, UNSP_N_SHIFT, UNSP_N); - UML_AND(block, I2, I3, 0x0000ffff); - UML_CMP(block, I3, I2); - UML_SETc(block, uml::COND_NE, I1); + UML_TEST(block, I3, 0x10000); + UML_SETc(block, uml::COND_NZ, I1); UML_ROLINS(block, mem(&m_core->m_r[REG_SR]), I1, UNSP_C_SHIFT, UNSP_C); UML_CMP(block, I2, 0); diff --git a/src/mame/drivers/vii.cpp b/src/mame/drivers/vii.cpp index ba586013476..ff2abd49970 100644 --- a/src/mame/drivers/vii.cpp +++ b/src/mame/drivers/vii.cpp @@ -1236,7 +1236,7 @@ CONS( 2008, jak_wall, 0, 0, walle, walle, spg2xx_game_state, empty_init, "JAKKS CONS( 2005, jak_wwe, 0, 0, jakks_gkr, jak_gkr,jakks_gkr_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "WWE (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // WW (no game-keys released) CONS( 2005, jak_fan4, 0, 0, jakks_gkr, jak_gkr,jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Digital Eclipse", "Fantastic Four (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // F4 (no game-keys released) CONS( 2005, jak_just, 0, 0, jakks_gkr, jak_gkr,jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Taniko", "Justice League (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // DC (no game-keys released) -CONS( 2005, jak_dora, 0, 0, jakks_gkr_nk, jak_gkr,jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Handheld Games", "Dora the Explorer - Race To Play Park (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses NK keys (same as Nicktoons & Spongebob) (3+ released) +CONS( 2005, jak_dora, 0, 0, jakks_gkr_nk, jak_gkr,jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Handheld Games", "Dora the Explorer - Race To Play Park (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses NK keys (same as Nicktoons & Spongebob) (3+ released) CONS( 2005, jak_sdoo, 0, 0, jakks_gkr, jak_gkr,jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Jolliford Management","Scooby-Doo! and the Mystery of the Castle (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // SD (no game-keys released) CONS( 2005, jak_disf, 0, 0, jakks_gkr_dy, jak_gkr,jakks_gkr_state, empty_init, "JAKKS Pacific Inc / HotGen Ltd", "Disney Friends (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // uses DY keys (3 released)