New working machines

--------------------
Dora the Explorer (JAKKS Pacific TV Game) [Sean Riddle, David Haywood]

-unsp: Fixed S flag calculation. [Vas Crabb, Ryan Holtz]
This commit is contained in:
mooglyguy 2019-01-20 14:50:20 +01:00 committed by MooglyGuy
parent 05e1dc2353
commit f0b4faef4e
3 changed files with 22 additions and 18 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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)