diff --git a/src/mame/arcade.lst b/src/mame/arcade.lst index e795432cd81..4dd6a441636 100644 --- a/src/mame/arcade.lst +++ b/src/mame/arcade.lst @@ -10475,6 +10475,7 @@ evosocc // 2001 Evoga. Evolution Soccer topbladv // 2002 Sonokong. Top Blade V officeye donghaer +trivrus // 2009 AGT. Trivia R Us ddz // (c) 200? diff --git a/src/mame/drivers/crystal.cpp b/src/mame/drivers/crystal.cpp index 100435c2912..28283cd93f6 100644 --- a/src/mame/drivers/crystal.cpp +++ b/src/mame/drivers/crystal.cpp @@ -148,7 +148,7 @@ public: required_shared_ptr m_vidregs; required_shared_ptr m_textureram; required_shared_ptr m_frameram; - required_shared_ptr m_reset_patch; + optional_shared_ptr m_reset_patch; // not needed for trivrus // UINT32 * m_nvram; // currently this uses generic nvram handling /* devices */ @@ -197,6 +197,10 @@ public: DECLARE_DRIVER_INIT(evosocc); DECLARE_DRIVER_INIT(donghaer); + DECLARE_READ32_MEMBER(trivrus_input_r); + DECLARE_WRITE32_MEMBER(trivrus_input_w); + UINT8 m_trivrus_input; + virtual void machine_start(); virtual void machine_reset(); UINT32 screen_update_crystal(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -525,8 +529,76 @@ static ADDRESS_MAP_START( crystal_mem, AS_PROGRAM, 32, crystal_state ) ADDRESS_MAP_END +// Trivia R Us +// To do: touch panel, RTC + +READ32_MEMBER(crystal_state::trivrus_input_r) +{ + switch (m_trivrus_input) + { + case 1: return ioport("IN1")->read(); + case 2: return ioport("IN2")->read(); + case 3: return ioport("IN3")->read(); + case 4: return ioport("IN4")->read(); + case 5: return ioport("IN5")->read(); + case 6: return ioport("DSW")->read(); + } + logerror("%s: unknown input %02x read\n", machine().describe_context(), m_trivrus_input); + return 0xffffffff; +} + +WRITE32_MEMBER(crystal_state::trivrus_input_w) +{ + if (ACCESSING_BITS_0_7) + m_trivrus_input = data & 0xff; +} + +static ADDRESS_MAP_START( trivrus_mem, AS_PROGRAM, 32, crystal_state ) + AM_RANGE(0x00000000, 0x0007ffff) AM_ROM AM_WRITENOP + +// 0x01280000 & 0x0000ffff (written at boot) + AM_RANGE(0x01500000, 0x01500003) AM_READWRITE(trivrus_input_r, trivrus_input_w) +// 0x01500010 & 0x000000ff = sec +// 0x01500010 & 0x00ff0000 = min +// 0x01500014 & 0x000000ff = hour +// 0x01500014 & 0x00ff0000 = day +// 0x01500018 & 0x000000ff = month +// 0x0150001c & 0x000000ff = year - 2000 + AM_RANGE(0x01600000, 0x01607fff) AM_RAM AM_SHARE("nvram") + + AM_RANGE(0x01801400, 0x01801403) AM_READWRITE(Timer0_r, Timer0_w) + AM_RANGE(0x01801408, 0x0180140b) AM_READWRITE(Timer1_r, Timer1_w) + AM_RANGE(0x01801410, 0x01801413) AM_READWRITE(Timer2_r, Timer2_w) + AM_RANGE(0x01801418, 0x0180141b) AM_READWRITE(Timer3_r, Timer3_w) + AM_RANGE(0x01802004, 0x01802007) AM_READWRITE(PIO_r, PIO_w) + + AM_RANGE(0x01800800, 0x01800803) AM_READWRITE(DMA0_r, DMA0_w) + AM_RANGE(0x01800810, 0x01800813) AM_READWRITE(DMA1_r, DMA1_w) + + AM_RANGE(0x01800c04, 0x01800c07) AM_WRITE(IntAck_w) + AM_RANGE(0x01800000, 0x0180ffff) AM_RAM AM_SHARE("sysregs") + AM_RANGE(0x02000000, 0x027fffff) AM_RAM AM_SHARE("workram") + + AM_RANGE(0x030000a4, 0x030000a7) AM_READWRITE(FlipCount_r, FlipCount_w) + + AM_RANGE(0x03000000, 0x0300ffff) AM_RAM AM_SHARE("vidregs") + AM_RANGE(0x03800000, 0x03ffffff) AM_RAM AM_SHARE("textureram") + AM_RANGE(0x04000000, 0x047fffff) AM_RAM AM_SHARE("frameram") + AM_RANGE(0x04800000, 0x04800fff) AM_DEVREADWRITE("vrender", vrender0_device, vr0_snd_read, vr0_snd_write) + + AM_RANGE(0x05000000, 0x05000003) AM_READWRITE(FlashCmd_r, FlashCmd_w) + AM_RANGE(0x05000000, 0x05ffffff) AM_ROMBANK("bank1") + +// AM_RANGE(0x44414F4C, 0x44414F7F) AM_RAM AM_SHARE("reset_patch") + +ADDRESS_MAP_END + + void crystal_state::PatchReset( ) { + if (!m_reset_patch) + return; + //The test menu reset routine seems buggy //it reads the reset vector from 0x02000000 but it should be //read from 0x00000000. At 0x2000000 there is the bios signature @@ -603,6 +675,7 @@ void crystal_state::machine_start() save_item(NAME(m_PIO)); save_item(NAME(m_DMActrl)); save_item(NAME(m_OldPort4)); + save_item(NAME(m_trivrus_input)); machine().save().register_postload(save_prepost_delegate(FUNC(crystal_state::crystal_banksw_postload), this)); } @@ -893,6 +966,84 @@ static INPUT_PORTS_START(officeye) INPUT_PORTS_END +static INPUT_PORTS_START(trivrus) + PORT_START("IN1") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Up") PORT_CODE(KEYCODE_UP) + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Left/True") PORT_CODE(KEYCODE_LEFT) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Down") PORT_CODE(KEYCODE_DOWN) + PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN2") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Enter/Exit") + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Next") + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Right/False") PORT_CODE(KEYCODE_RIGHT) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN3") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Sound") + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN4") + PORT_BIT( 0x000000ff, IP_ACTIVE_LOW, IPT_OTHER )PORT_CODE(KEYCODE_9) + PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN5") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_SERVICE1 ) // Free Game + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Setup + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW") + PORT_DIPNAME( 0x01, 0x01, "Interlace?" ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Serial?" ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) // hangs at boot + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Touch Screen" ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_BIT( 0xffffff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + + static MACHINE_CONFIG_START( crystal, crystal_state ) MCFG_CPU_ADD("maincpu", SE3208, 43000000) @@ -937,13 +1088,23 @@ static MACHINE_CONFIG_DERIVED( topbladv, crystal ) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( trivrus, crystal ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(trivrus_mem) + + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_SIZE(640, 480) + MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) +MACHINE_CONFIG_END + + ROM_START( crysbios ) ROM_REGION( 0x20000, "maincpu", 0 ) // bios ROM_LOAD("mx27l1000.u14", 0x000000, 0x020000, CRC(beff39a9) SHA1(b6f6dda58d9c82273f9422c1bd623411e58982cb) ) ROM_REGION32_LE( 0x3000000, "user1", ROMREGION_ERASEFF ) // Flash - ROM_REGION( 0x10000, "user2", ROMREGION_ERASEFF ) //Unmapped flash + ROM_REGION( 0x1000000, "user2", ROMREGION_ERASEFF ) // Unmapped flash ROM_END ROM_START( crysking ) @@ -955,7 +1116,7 @@ ROM_START( crysking ) ROM_LOAD("bcsv0004f02.u2", 0x1000000, 0x1000000, CRC(0e799845) SHA1(419674ce043cb1efb18303f4cb7fdbbae642ee39) ) ROM_LOAD("bcsv0004f03.u3", 0x2000000, 0x1000000, CRC(659e2d17) SHA1(342c98f3f695ef4dea8b533612451c4d2fb58809) ) - ROM_REGION( 0x10000, "user2", ROMREGION_ERASEFF ) //Unmapped flash + ROM_REGION( 0x1000000, "user2", ROMREGION_ERASEFF ) // Unmapped flash ROM_END ROM_START( evosocc ) @@ -967,7 +1128,7 @@ ROM_START( evosocc ) ROM_LOAD("bcsv0001u02", 0x1000000, 0x1000000, CRC(47ef1794) SHA1(f573706c17d1342b9b7aed9b40b8b648f0bf58db) ) ROM_LOAD("bcsv0001u03", 0x2000000, 0x1000000, CRC(f396a2ec) SHA1(f305eb10856fb5d4c229a6b09d6a2fb21b24ce66) ) - ROM_REGION( 0x10000, "user2", ROMREGION_ERASEFF ) //Unmapped flash + ROM_REGION( 0x1000000, "user2", ROMREGION_ERASEFF ) // Unmapped flash ROM_END ROM_START( topbladv ) @@ -981,10 +1142,9 @@ ROM_START( topbladv ) ROM_REGION32_LE( 0x3000000, "user1", 0 ) // Flash ROM_LOAD("flash.u1", 0x0000000, 0x1000000, CRC(bd23f640) SHA1(1d22aa2c828642bb7c1dfea4e13f777f95acc701) ) - ROM_REGION( 0x10000, "user2", ROMREGION_ERASEFF ) //Unmapped flash + ROM_REGION( 0x1000000, "user2", ROMREGION_ERASEFF ) // Unmapped flash ROM_END - ROM_START( officeye ) ROM_REGION( 0x20000, "maincpu", 0 ) // bios (not the standard one) ROM_LOAD("bios.u14", 0x000000, 0x020000, CRC(ffc57e90) SHA1(6b6a17fd4798dea9c7b880f3063be8494e7db302) ) @@ -997,10 +1157,9 @@ ROM_START( officeye ) ROM_LOAD("flash.u1", 0x0000000, 0x1000000, CRC(d3f3eec4) SHA1(ea728415bd4906964b7d37f4379a8a3bd42a1c2d) ) ROM_LOAD("flash.u2", 0x1000000, 0x1000000, CRC(e4f85d0a) SHA1(2ddfa6b3a30e69754aa9d96434ff3d37784bfa57) ) - ROM_REGION( 0x10000, "user2", ROMREGION_ERASEFF ) //Unmapped flash + ROM_REGION( 0x1000000, "user2", ROMREGION_ERASEFF ) // Unmapped flash ROM_END - ROM_START( donghaer ) ROM_REGION( 0x20000, "maincpu", 0 ) // bios ROM_LOAD("mx27l1000.u14", 0x000000, 0x020000, CRC(beff39a9) SHA1(b6f6dda58d9c82273f9422c1bd623411e58982cb)) @@ -1012,9 +1171,20 @@ ROM_START( donghaer ) ROM_LOAD( "u1", 0x0000000, 0x1000000, CRC(61217ad7) SHA1(2593f1356aa850f4f9aa5d00bec822aa59c59224) ) ROM_LOAD( "u2", 0x1000000, 0x1000000, CRC(6d82f1a5) SHA1(036bd45f0daac1ffeaa5ad9774fc1b56e3c75ff9) ) - ROM_REGION( 0x10000, "user2", ROMREGION_ERASEFF ) //Unmapped flash + ROM_REGION( 0x1000000, "user2", ROMREGION_ERASEFF ) // Unmapped flash ROM_END +ROM_START( trivrus ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "u4", 0x00000, 0x80000, CRC(2d2e9a11) SHA1(73e7b19a032eae21312ca80f8c42cc16725496a7) ) + + ROM_REGION32_LE( 0x3000000, "user1", ROMREGION_ERASEFF ) // Flash + ROM_LOAD( "u3", 0x000000, 0x1000010, CRC(ba901707) SHA1(e281ba07024cd19ef1ab72d2197014f7b1f4d30f) ) + + ROM_REGION( 0x1000000, "user2", ROMREGION_ERASEFF ) // Unmapped flash +ROM_END + + DRIVER_INIT_MEMBER(crystal_state,crysking) { UINT16 *Rom = (UINT16*) memregion("user1")->base(); @@ -1133,9 +1303,10 @@ DRIVER_INIT_MEMBER(crystal_state, donghaer) } -GAME( 2001, crysbios, 0, crystal, crystal, driver_device, 0, ROT0, "BrezzaSoft", "Crystal System BIOS", MACHINE_IS_BIOS_ROOT ) -GAME( 2001, crysking, crysbios, crystal, crystal, crystal_state, crysking, ROT0, "BrezzaSoft", "The Crystal of Kings", 0 ) -GAME( 2001, evosocc, crysbios, crystal, crystal, crystal_state, evosocc, ROT0, "Evoga", "Evolution Soccer", 0 ) -GAME( 2003, topbladv, crysbios, topbladv, crystal, crystal_state, topbladv, ROT0, "SonoKong / Expotato", "Top Blade V", 0 ) -GAME( 2001, officeye, 0, crystal, officeye,crystal_state, officeye, ROT0, "Danbi", "Office Yeo In Cheon Ha (version 1.2)", MACHINE_NOT_WORKING ) // still has some instability issues -GAME( 2001, donghaer, 0, crystal, crystal, crystal_state, donghaer, ROT0, "Danbi", "Donggul Donggul Haerong", MACHINE_NOT_WORKING ) +GAME( 2001, crysbios, 0, crystal, crystal, driver_device, 0, ROT0, "BrezzaSoft", "Crystal System BIOS", MACHINE_IS_BIOS_ROOT ) +GAME( 2001, crysking, crysbios, crystal, crystal, crystal_state, crysking, ROT0, "BrezzaSoft", "The Crystal of Kings", 0 ) +GAME( 2001, evosocc, crysbios, crystal, crystal, crystal_state, evosocc, ROT0, "Evoga", "Evolution Soccer", 0 ) +GAME( 2003, topbladv, crysbios, topbladv, crystal, crystal_state, topbladv, ROT0, "SonoKong / Expotato", "Top Blade V", 0 ) +GAME( 2001, officeye, 0, crystal, officeye,crystal_state, officeye, ROT0, "Danbi", "Office Yeo In Cheon Ha (version 1.2)", MACHINE_NOT_WORKING ) // still has some instability issues +GAME( 2001, donghaer, 0, crystal, crystal, crystal_state, donghaer, ROT0, "Danbi", "Donggul Donggul Haerong", MACHINE_NOT_WORKING ) +GAME( 2009, trivrus, 0, trivrus, trivrus, driver_device, 0, ROT0, "AGT", "Trivia R Us (v1.07)", 0 )