diff options
Diffstat (limited to 'src/mess/drivers/odyssey2.c')
-rw-r--r-- | src/mess/drivers/odyssey2.c | 67 |
1 files changed, 43 insertions, 24 deletions
diff --git a/src/mess/drivers/odyssey2.c b/src/mess/drivers/odyssey2.c index 6adecd9e16d..b7fcf708f2a 100644 --- a/src/mess/drivers/odyssey2.c +++ b/src/mess/drivers/odyssey2.c @@ -7,6 +7,13 @@ Minor update to "the voice" rom names, and add comment about the older revision of "the voice" - LN, 10/03/08 + TODO: + - Reimplement the cartridge slot, and thus also the voice, as a slot device + - In case any more machines turn up using the i8245, reimplemnt it as a + real device. + - In case any more machines (TVs?) turn up using the EF9340 and/or EF9341, + reimplement as a real device. + ***************************************************************************/ #include "emu.h" @@ -15,31 +22,35 @@ #include "imagedev/cartslot.h" #include "sound/sp0256.h" + static ADDRESS_MAP_START( odyssey2_mem , AS_PROGRAM, 8, odyssey2_state ) - AM_RANGE( 0x0000, 0x03FF) AM_ROM - AM_RANGE( 0x0400, 0x0BFF) AM_RAMBANK("bank1") - AM_RANGE( 0x0C00, 0x0FFF) AM_RAMBANK("bank2") + AM_RANGE(0x0000, 0x03FF) AM_ROM + AM_RANGE(0x0400, 0x0BFF) AM_RAMBANK("bank1") + AM_RANGE(0x0C00, 0x0FFF) AM_RAMBANK("bank2") ADDRESS_MAP_END + static ADDRESS_MAP_START( odyssey2_io , AS_IO, 8, odyssey2_state ) - AM_RANGE( 0x00, 0xff) AM_READWRITE(odyssey2_bus_r, odyssey2_bus_w) - AM_RANGE( MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(odyssey2_getp1, odyssey2_putp1 ) - AM_RANGE( MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(odyssey2_getp2, odyssey2_putp2 ) - AM_RANGE( MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READWRITE(odyssey2_getbus, odyssey2_putbus ) - AM_RANGE( MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(odyssey2_t0_r ) - AM_RANGE( MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(odyssey2_t1_r ) + AM_RANGE(0x00, 0xff) AM_READWRITE(io_read, io_write) + AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(p1_read, p1_write) + AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(p2_read, p2_write) + AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READWRITE(bus_read, bus_write) + AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(t0_read) + AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(t1_read) ADDRESS_MAP_END + static ADDRESS_MAP_START( g7400_io , AS_IO, 8, odyssey2_state ) - AM_RANGE( 0x00, 0xff) AM_READWRITE(g7400_bus_r, g7400_bus_w) - AM_RANGE( MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(odyssey2_getp1, odyssey2_putp1 ) - AM_RANGE( MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(odyssey2_getp2, odyssey2_putp2 ) - AM_RANGE( MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READWRITE(odyssey2_getbus, odyssey2_putbus ) - AM_RANGE( MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(odyssey2_t0_r ) - AM_RANGE( MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(odyssey2_t1_r ) - //AM_RANGE( MCS_MCS48_PORT_PROG, MCS48_PORT_PROG ) //write to 8243 with low four bits from P2 + AM_RANGE(0x00, 0xff) AM_READWRITE(g7400_io_read, g7400_io_write) + AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(p1_read, p1_write) + AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(p2_read, p2_write) + AM_RANGE(MCS48_PORT_BUS, MCS48_PORT_BUS) AM_READWRITE(bus_read, bus_write) + AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(t0_read) + AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(t1_read) + //AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) //write to 8243 with low four bits from P2 ADDRESS_MAP_END + static INPUT_PORTS_START( odyssey2 ) PORT_START("KEY0") /* IN0 */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') @@ -118,6 +129,7 @@ static INPUT_PORTS_START( odyssey2 ) PORT_BIT( 0xe0, 0xe0, IPT_UNUSED ) INPUT_PORTS_END + static const gfx_layout odyssey2_graphicslayout = { 8,1, @@ -156,23 +168,27 @@ static const gfx_layout odyssey2_spritelayout = 1*8 }; + static GFXDECODE_START( odyssey2 ) GFXDECODE_ENTRY( "gfx1", 0x0000, odyssey2_graphicslayout, 0, 2 ) GFXDECODE_ENTRY( "gfx1", 0x0000, odyssey2_spritelayout, 0, 2 ) GFXDECODE_END + static const sp0256_interface the_voice_sp0256 = { - DEVCB_LINE(odyssey2_the_voice_lrq_callback), + DEVCB_DRIVER_LINE_MEMBER(odyssey2_state,the_voice_lrq_callback), DEVCB_NULL }; + static MACHINE_CONFIG_FRAGMENT( odyssey2_cartslot ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("bin,rom") MCFG_CARTSLOT_NOT_MANDATORY MACHINE_CONFIG_END + static MACHINE_CONFIG_START( odyssey2, odyssey2_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", I8048, ( ( XTAL_7_15909MHz * 3 ) / 4 ) ) @@ -180,7 +196,6 @@ static MACHINE_CONFIG_START( odyssey2, odyssey2_state ) MCFG_CPU_IO_MAP(odyssey2_io) MCFG_QUANTUM_TIME(attotime::from_hz(60)) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS( XTAL_7_15909MHz/2, I824X_LINE_CLOCKS, I824X_START_ACTIVE_SCAN, I824X_END_ACTIVE_SCAN, 262, I824X_START_Y, I824X_START_Y + I824X_SCREEN_HEIGHT ) @@ -189,7 +204,6 @@ static MACHINE_CONFIG_START( odyssey2, odyssey2_state ) MCFG_GFXDECODE( odyssey2 ) MCFG_PALETTE_LENGTH(24) - /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("custom", ODYSSEY2, XTAL_7_15909MHz/2) @@ -203,6 +217,7 @@ static MACHINE_CONFIG_START( odyssey2, odyssey2_state ) MCFG_FRAGMENT_ADD(odyssey2_cartslot) MACHINE_CONFIG_END + static MACHINE_CONFIG_START( videopac, odyssey2_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", I8048, ( XTAL_17_73447MHz / 3 ) ) @@ -210,7 +225,6 @@ static MACHINE_CONFIG_START( videopac, odyssey2_state ) MCFG_CPU_IO_MAP(odyssey2_io) MCFG_QUANTUM_TIME(attotime::from_hz(60)) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_RAW_PARAMS( XTAL_17_73447MHz/5, I824X_LINE_CLOCKS, I824X_START_ACTIVE_SCAN, I824X_END_ACTIVE_SCAN, 312, I824X_START_Y, I824X_START_Y + I824X_SCREEN_HEIGHT ) @@ -219,7 +233,6 @@ static MACHINE_CONFIG_START( videopac, odyssey2_state ) MCFG_GFXDECODE( odyssey2 ) MCFG_PALETTE_LENGTH(24) - /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("custom", ODYSSEY2, XTAL_17_73447MHz/5) @@ -232,6 +245,7 @@ static MACHINE_CONFIG_START( videopac, odyssey2_state ) MCFG_FRAGMENT_ADD(odyssey2_cartslot) MACHINE_CONFIG_END + static MACHINE_CONFIG_START( g7400, odyssey2_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", I8048, XTAL_5_911MHz ) @@ -239,16 +253,16 @@ static MACHINE_CONFIG_START( g7400, odyssey2_state ) MCFG_CPU_IO_MAP(g7400_io) MCFG_QUANTUM_TIME(attotime::from_hz(60)) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS( 3547000*2, 448, 96, 416, 312, 39, 289 ) /* EF9340 doubles the input clock into dot clocks internally */ + MCFG_SCREEN_RAW_PARAMS( 3547000*2, 2*I824X_LINE_CLOCKS, 2*I824X_START_ACTIVE_SCAN, 2*I824X_END_ACTIVE_SCAN, 312, I824X_START_Y, I824X_START_Y + I824X_SCREEN_HEIGHT ) MCFG_SCREEN_UPDATE_DRIVER(odyssey2_state, screen_update_odyssey2) + MCFG_VIDEO_START_OVERRIDE(odyssey2_state,g7400) + MCFG_GFXDECODE( odyssey2 ) MCFG_PALETTE_LENGTH(24) - /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("custom", ODYSSEY2, 3547000) @@ -257,6 +271,7 @@ static MACHINE_CONFIG_START( g7400, odyssey2_state ) MCFG_FRAGMENT_ADD(odyssey2_cartslot) MACHINE_CONFIG_END + ROM_START (odyssey2) ROM_REGION(0x10000,"maincpu",0) /* safer for the memory handler/bankswitching??? */ ROM_LOAD ("o2bios.rom", 0x0000, 0x0400, CRC(8016a315) SHA1(b2e1955d957a475de2411770452eff4ea19f4cee)) @@ -283,6 +298,7 @@ ROM_START (odyssey2) ROM_LOAD( "spr128-004.bin", 0x8000, 0x4000, CRC(e79dfb75) SHA1(37f33d79ffd1739d7c2f226b010a1eac28d74ca0) ) ROM_END + ROM_START (videopac) ROM_REGION(0x10000,"maincpu",0) /* safer for the memory handler/bankswitching??? */ ROM_SYSTEM_BIOS( 0, "g7000", "g7000" ) @@ -303,6 +319,7 @@ ROM_START (videopac) ROM_LOAD( "spr128-004.bin", 0x8000, 0x4000, CRC(e79dfb75) SHA1(37f33d79ffd1739d7c2f226b010a1eac28d74ca0) ) ROM_END + ROM_START (g7400) ROM_REGION(0x10000,"maincpu",0) /* safer for the memory handler/bankswitching??? */ ROM_LOAD ("g7400.bin", 0x0000, 0x0400, CRC(e20a9f41) SHA1(5130243429b40b01a14e1304d0394b8459a6fbae)) @@ -312,6 +329,7 @@ ROM_START (g7400) ROM_CART_LOAD("cart", 0x0000, 0x4000, ROM_MIRROR) ROM_END + ROM_START (jopac) ROM_REGION(0x10000,"maincpu",0) /* safer for the memory handler/bankswitching??? */ ROM_LOAD ("jopac.bin", 0x0000, 0x0400, CRC(11647ca5) SHA1(54b8d2c1317628de51a85fc1c424423a986775e4)) @@ -321,6 +339,7 @@ ROM_START (jopac) ROM_CART_LOAD("cart", 0x0000, 0x4000, ROM_MIRROR) ROM_END + /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ COMP( 1978, odyssey2, 0, 0, odyssey2, odyssey2, odyssey2_state, odyssey2, "Magnavox", "Odyssey 2", 0 ) COMP( 1979, videopac, odyssey2, 0, videopac, odyssey2, odyssey2_state, odyssey2, "Philips", "Videopac G7000/C52", 0 ) |