diff --git a/src/mess/drivers/coleco.c b/src/mess/drivers/coleco.c index f6f69ea7eff..b3f62adeca9 100644 --- a/src/mess/drivers/coleco.c +++ b/src/mess/drivers/coleco.c @@ -2,7 +2,7 @@ coleco.c - Driver file to handle emulation of the Colecovision. + Driver file to handle emulation of the ColecoVision. Marat Fayzullin (ColEm source) Marcel de Kogel (AdamEm source) @@ -63,6 +63,7 @@ #include "includes/coleco.h" + /* Read/Write Handlers */ READ8_MEMBER( coleco_state::paddle_1_r ) @@ -85,11 +86,12 @@ WRITE8_MEMBER( coleco_state::paddle_on_w ) m_joy_mode = 1; } + /* Memory Maps */ static ADDRESS_MAP_START( coleco_map, AS_PROGRAM, 8, coleco_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM - AM_RANGE(0x6000, 0x63ff) AM_RAM AM_MIRROR(0x1c00) + AM_RANGE(0x6000, 0x63ff) AM_RAM AM_MIRROR(0x1c00) AM_SHARE("ram") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -106,7 +108,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( czz50_map, AS_PROGRAM, 8, coleco_state ) AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x6000, 0x63ff) AM_RAM AM_MIRROR(0x1c00) + AM_RANGE(0x6000, 0x63ff) AM_RAM AM_MIRROR(0x1c00) AM_SHARE("ram") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -121,6 +123,7 @@ static ADDRESS_MAP_START( czz50_io_map, AS_IO, 8, coleco_state ) AM_RANGE(0xe2, 0xe2) AM_MIRROR(0x1d) AM_READ(paddle_2_r) ADDRESS_MAP_END + /* Input Ports */ static INPUT_PORTS_START( czz50 ) @@ -163,6 +166,7 @@ static INPUT_PORTS_START( czz50 ) PORT_BIT( 0xb0, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END + /* Interrupts */ WRITE_LINE_MEMBER(coleco_state::coleco_vdp_interrupt) @@ -229,6 +233,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(coleco_state::paddle_update_callback) } } + /* Machine Initialization */ static TMS9928A_INTERFACE(coleco_tms9928a_interface) @@ -250,6 +255,8 @@ static const sn76496_config psg_intf = void coleco_state::machine_start() { + memset(m_ram, 0xff, m_ram.bytes()); // initialize RAM + // init paddles for (int port = 0; port < 2; port++) { @@ -273,10 +280,6 @@ void coleco_state::machine_start() void coleco_state::machine_reset() { m_last_nmi_state = 0; - - m_maincpu->set_input_line_vector(INPUT_LINE_IRQ0, 0xff); - - memset(&memregion(Z80_TAG)->base()[0x6000], 0xff, 0x400); // initialize RAM } //static int coleco_cart_verify(const UINT8 *cartdata, size_t size) @@ -294,7 +297,7 @@ void coleco_state::machine_reset() DEVICE_IMAGE_LOAD_MEMBER( coleco_state,czz50_cart ) { - UINT8 *ptr = memregion(Z80_TAG)->base() + 0x8000; + UINT8 *ptr = memregion("maincpu")->base() + 0x8000; UINT32 size; if (image.software_entry() == NULL) @@ -311,11 +314,12 @@ DEVICE_IMAGE_LOAD_MEMBER( coleco_state,czz50_cart ) } } + /* Machine Drivers */ static MACHINE_CONFIG_START( coleco, coleco_state ) // basic machine hardware - MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_7_15909MHz/2) // 3.579545 MHz + MCFG_CPU_ADD("maincpu", Z80, XTAL_7_15909MHz/2) // 3.579545 MHz MCFG_CPU_PROGRAM_MAP(coleco_map) MCFG_CPU_IO_MAP(coleco_io_map) @@ -344,7 +348,7 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_START( czz50, coleco_state ) // basic machine hardware - MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_7_15909MHz/2) // ??? + MCFG_CPU_ADD("maincpu", Z80, XTAL_7_15909MHz/2) // ??? MCFG_CPU_PROGRAM_MAP(czz50_map) MCFG_CPU_IO_MAP(czz50_io_map) @@ -381,29 +385,30 @@ static MACHINE_CONFIG_DERIVED( dina, czz50 ) MCFG_SCREEN_UPDATE_DEVICE( "tms9928a", tms9928a_device, screen_update ) MACHINE_CONFIG_END + /* ROMs */ ROM_START (coleco) - ROM_REGION( 0x10000, Z80_TAG, 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "coleco.rom", 0x0000, 0x2000, CRC(3aa93ef3) SHA1(45bedc4cbdeac66c7df59e9e599195c778d86a92) ) ROM_CART_LOAD("cart", 0x8000, 0x8000, ROM_NOMIRROR | ROM_OPTIONAL) ROM_END ROM_START (colecoa) // differences to 0x3aa93ef3 modified characters, added a pad 2 related fix - ROM_REGION( 0x10000, Z80_TAG, 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "colecoa.rom", 0x0000, 0x2000, CRC(39bb16fc) SHA1(99ba9be24ada3e86e5c17aeecb7a2d68c5edfe59) ) ROM_CART_LOAD("cart", 0x8000, 0x8000, ROM_NOMIRROR | ROM_OPTIONAL) ROM_END ROM_START (colecob) - ROM_REGION( 0x10000, Z80_TAG, 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "svi603.rom", 0x0000, 0x2000, CRC(19e91b82) SHA1(8a30abe5ffef810b0f99b86db38b1b3c9d259b78) ) ROM_CART_LOAD("cart", 0x8000, 0x8000, ROM_NOMIRROR | ROM_OPTIONAL) ROM_END ROM_START( czz50 ) - ROM_REGION( 0x10000, Z80_TAG, 0 ) + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "czz50.rom", 0x0000, 0x2000, CRC(4999abc6) SHA1(96aecec3712c94517103d894405bc98a7dafa440) ) ROM_CONTINUE( 0x8000, 0x2000 ) ROM_END @@ -414,10 +419,10 @@ ROM_END /* System Drivers */ -// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS -CONS( 1982, coleco, 0, 0, coleco, coleco, driver_device, 0, "Coleco", "ColecoVision", 0 ) -CONS( 1982, colecoa, coleco, 0, coleco, coleco, driver_device, 0, "Coleco", "ColecoVision (Thick Characters)", 0 ) -CONS( 1983, colecob, coleco, 0, coleco, coleco, driver_device, 0, "Spectravideo", "SVI-603 Coleco Game Adapter", 0 ) -CONS( 1986, czz50, 0, coleco, czz50, czz50, driver_device, 0, "Bit Corporation", "Chuang Zao Zhe 50", 0 ) -CONS( 1988, dina, czz50, 0, dina, czz50, driver_device, 0, "Telegames", "Dina", 0 ) -CONS( 1988, prsarcde, czz50, 0, czz50, czz50, driver_device, 0, "Telegames", "Personal Arcade", 0 ) +// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS +CONS( 1982, coleco, 0, 0, coleco, coleco, driver_device, 0, "Coleco", "ColecoVision", 0 ) +CONS( 1982, colecoa, coleco, 0, coleco, coleco, driver_device, 0, "Coleco", "ColecoVision (Thick Characters)", 0 ) +CONS( 1983, colecob, coleco, 0, coleco, coleco, driver_device, 0, "Spectravideo", "SVI-603 Coleco Game Adapter", 0 ) +CONS( 1986, czz50, 0, coleco, czz50, czz50, driver_device, 0, "Bit Corporation", "Chuang Zao Zhe 50", 0 ) +CONS( 1988, dina, czz50, 0, dina, czz50, driver_device, 0, "Telegames", "Dina", 0 ) +CONS( 1988, prsarcde, czz50, 0, czz50, czz50, driver_device, 0, "Telegames", "Personal Arcade", 0 ) diff --git a/src/mess/includes/coleco.h b/src/mess/includes/coleco.h index cc1bccb7b9c..c2c2500b4bf 100644 --- a/src/mess/includes/coleco.h +++ b/src/mess/includes/coleco.h @@ -11,17 +11,17 @@ #include "machine/coleco.h" #include "imagedev/cartslot.h" -#define Z80_TAG "z80" - class coleco_state : public driver_device { public: coleco_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_maincpu(*this, Z80_TAG) + m_maincpu(*this, "maincpu"), + m_ram(*this, "ram") { } required_device m_maincpu; + required_shared_ptr m_ram; virtual void machine_start(); virtual void machine_reset();