From a8c425d5ad973e5ea013194a8dc9d0351f0a4905 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Fri, 5 Apr 2013 20:49:14 +0000 Subject: [PATCH] start to modernize (nw) --- src/emu/machine/amigafdc.c | 11 +++++--- src/mame/audio/amiga.c | 3 ++- src/mame/drivers/alg.c | 20 +++++++------- src/mame/drivers/arcadia.c | 7 ++--- src/mame/drivers/cd32.c | 5 ++-- src/mame/drivers/mquake.c | 7 ++--- src/mame/drivers/upscope.c | 7 ++--- src/mame/includes/amiga.h | 27 ++++++++++++++----- src/mame/machine/amiga.c | 21 +++++++++------ src/mame/machine/cd32.c | 7 +++-- src/mame/video/amiga.c | 6 ++--- src/mess/drivers/amiga.c | 47 +++++++++++++++++--------------- src/mess/machine/amigacd.c | 14 ++++++---- src/mess/machine/amigacrt.c | 54 ++++++++++++++++++++----------------- 14 files changed, 140 insertions(+), 96 deletions(-) diff --git a/src/emu/machine/amigafdc.c b/src/emu/machine/amigafdc.c index e9baf06678c..6fa02409312 100644 --- a/src/emu/machine/amigafdc.c +++ b/src/emu/machine/amigafdc.c @@ -90,9 +90,10 @@ void amiga_fdc::device_reset() void amiga_fdc::dma_done() { + amiga_state *state = machine().driver_data(); dma_state = DMA_IDLE; - address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM); - amiga_custom_w(space, REG_INTREQ, 0x8000 | INTENA_DSKBLK, 0xffff); + address_space &space = *state->m_maincpu_program_space; + state->amiga_custom_w(space, REG_INTREQ, 0x8000 | INTENA_DSKBLK, 0xffff); } void amiga_fdc::dma_write(UINT16 value) @@ -167,6 +168,8 @@ void amiga_fdc::live_abort() void amiga_fdc::live_run(attotime limit) { + amiga_state *state = machine().driver_data(); + if(cur_live.state == IDLE || cur_live.next_state != -1) return; @@ -228,8 +231,8 @@ void amiga_fdc::live_run(attotime limit) cur_live.bit_counter = 0; } dskbyt |= 0x1000; - address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM); - amiga_custom_w(space, REG_INTREQ, 0x8000 | INTENA_DSKSYN, 0xffff); + address_space &space = *state->m_maincpu_program_space; + state->amiga_custom_w(space, REG_INTREQ, 0x8000 | INTENA_DSKSYN, 0xffff); } else dskbyt &= ~0x1000; diff --git a/src/mame/audio/amiga.c b/src/mame/audio/amiga.c index bd86a110e7a..c8868757d8d 100644 --- a/src/mame/audio/amiga.c +++ b/src/mame/audio/amiga.c @@ -76,7 +76,8 @@ INLINE amiga_audio *get_safe_token( device_t *device ) static TIMER_CALLBACK( signal_irq ) { - amiga_custom_w(machine.device("maincpu")->memory().space(AS_PROGRAM), REG_INTREQ, 0x8000 | (0x80 << param), 0xffff); + amiga_state *state = machine.driver_data(); + state->amiga_custom_w(*state->m_maincpu_program_space, REG_INTREQ, 0x8000 | (0x80 << param), 0xffff); } diff --git a/src/mame/drivers/alg.c b/src/mame/drivers/alg.c index 5a02fcc637f..c0ba0291180 100644 --- a/src/mame/drivers/alg.c +++ b/src/mame/drivers/alg.c @@ -116,6 +116,8 @@ VIDEO_START_MEMBER(alg_state,alg) MACHINE_START_MEMBER(alg_state,alg) { + MACHINE_START_CALL_MEMBER(amiga); + m_serial_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(alg_state::response_timer),this)); m_serial_timer_active = FALSE; } @@ -289,9 +291,9 @@ WRITE8_MEMBER(alg_state::alg_cia_1_porta_w) static ADDRESS_MAP_START( main_map_r1, AS_PROGRAM, 16, alg_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w) - AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE(amiga_autoconfig_r, amiga_autoconfig_w) AM_RANGE(0xfc0000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* System ROM */ AM_RANGE(0xf00000, 0xf1ffff) AM_ROM AM_REGION("user2", 0) /* Custom ROM */ @@ -302,9 +304,9 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( main_map_r2, AS_PROGRAM, 16, alg_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w) - AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE(amiga_autoconfig_r, amiga_autoconfig_w) AM_RANGE(0xfc0000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* System ROM */ AM_RANGE(0xf00000, 0xf3ffff) AM_ROM AM_REGION("user2", 0) /* Custom ROM */ @@ -315,9 +317,9 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( main_map_picmatic, AS_PROGRAM, 16, alg_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w) - AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE(amiga_autoconfig_r, amiga_autoconfig_w) AM_RANGE(0xfc0000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* System ROM */ AM_RANGE(0xf00000, 0xf1ffff) AM_ROM AM_REGION("user2", 0) /* Custom ROM */ diff --git a/src/mame/drivers/arcadia.c b/src/mame/drivers/arcadia.c index 46bc16f30bd..3f737093bc2 100644 --- a/src/mame/drivers/arcadia.c +++ b/src/mame/drivers/arcadia.c @@ -209,9 +209,9 @@ static void arcadia_reset_coins(running_machine &machine) static ADDRESS_MAP_START( amiga_map, AS_PROGRAM, 16, arcadia_amiga_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w) - AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE(amiga_autoconfig_r, amiga_autoconfig_w) AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* Kickstart BIOS */ AM_RANGE(0x800000, 0x97ffff) AM_ROMBANK("bank2") AM_REGION("user3", 0) @@ -315,6 +315,7 @@ static MACHINE_CONFIG_START( arcadia, arcadia_amiga_state ) MCFG_CPU_ADD("maincpu", M68000, AMIGA_68000_NTSC_CLOCK) MCFG_CPU_PROGRAM_MAP(amiga_map) + MCFG_MACHINE_START_OVERRIDE(amiga_state, amiga ) MCFG_MACHINE_RESET_OVERRIDE(arcadia_amiga_state,amiga) MCFG_NVRAM_ADD_0FILL("nvram") diff --git a/src/mame/drivers/cd32.c b/src/mame/drivers/cd32.c index 9d3cb2d5dec..d44eb509580 100644 --- a/src/mame/drivers/cd32.c +++ b/src/mame/drivers/cd32.c @@ -128,8 +128,8 @@ static ADDRESS_MAP_START( cd32_map, AS_PROGRAM, 32, cd32_state ) AM_RANGE(0x800010, 0x800013) AM_READ_PORT("DIPSW2") AM_RANGE(0xb80000, 0xb8003f) AM_DEVREADWRITE_LEGACY("akiko", amiga_akiko32_r, amiga_akiko32_w) AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE(aga_overlay_w) - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16_LEGACY(amiga_cia_r, amiga_cia_w, 0xffffffff) - AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16_LEGACY(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs") + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16(amiga_cia_r, amiga_cia_w, 0xffffffff) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs") AM_RANGE(0xe00000, 0xe7ffff) AM_ROM AM_REGION("user1", 0x80000) /* CD32 Extended ROM */ AM_RANGE(0xa00000, 0xf7ffff) AM_NOP AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0x0) /* Kickstart */ @@ -782,6 +782,7 @@ static MACHINE_CONFIG_START( cd32base, cd32_state ) MCFG_CPU_PROGRAM_MAP(cd32_map) MCFG_DEVICE_ADD("akiko", AKIKO, 0) + MCFG_MACHINE_START_OVERRIDE(amiga_state, amiga ) MCFG_MACHINE_RESET_OVERRIDE(amiga_state,amiga) MCFG_I2CMEM_ADD("i2cmem",i2cmem_interface) diff --git a/src/mame/drivers/mquake.c b/src/mame/drivers/mquake.c index fe148ba8e8d..9653dd99be4 100644 --- a/src/mame/drivers/mquake.c +++ b/src/mame/drivers/mquake.c @@ -149,9 +149,9 @@ WRITE16_MEMBER(mquake_state::coin_chip_w) static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, mquake_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w) - AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE(amiga_autoconfig_r, amiga_autoconfig_w) AM_RANGE(0xfc0000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* System ROM */ AM_RANGE(0x200000, 0x203fff) AM_RAM AM_SHARE("nvram") @@ -358,6 +358,7 @@ static MACHINE_CONFIG_START( mquake, mquake_state ) MCFG_CPU_ADD("maincpu", M68000, AMIGA_68000_NTSC_CLOCK) MCFG_CPU_PROGRAM_MAP(main_map) + MCFG_MACHINE_START_OVERRIDE(amiga_state, amiga ) MCFG_MACHINE_RESET_OVERRIDE(mquake_state,mquake) MCFG_NVRAM_ADD_0FILL("nvram") diff --git a/src/mame/drivers/upscope.c b/src/mame/drivers/upscope.c index fa737008499..075ee623542 100644 --- a/src/mame/drivers/upscope.c +++ b/src/mame/drivers/upscope.c @@ -246,9 +246,9 @@ WRITE8_MEMBER(upscope_state::upscope_cia_1_porta_w) static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, upscope_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w) - AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE(amiga_autoconfig_r, amiga_autoconfig_w) AM_RANGE(0xfc0000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* System ROM */ AM_RANGE(0xf00000, 0xf7ffff) AM_ROM AM_REGION("user2", 0) @@ -313,6 +313,7 @@ static MACHINE_CONFIG_START( upscope, upscope_state ) MCFG_CPU_ADD("maincpu", M68000, AMIGA_68000_NTSC_CLOCK) MCFG_CPU_PROGRAM_MAP(main_map) + MCFG_MACHINE_START_OVERRIDE(amiga_state, amiga ) MCFG_MACHINE_RESET_OVERRIDE(upscope_state,amiga) MCFG_NVRAM_ADD_0FILL("nvram") diff --git a/src/mame/includes/amiga.h b/src/mame/includes/amiga.h index ce87511529d..0737f23e95f 100644 --- a/src/mame/includes/amiga.h +++ b/src/mame/includes/amiga.h @@ -410,7 +410,7 @@ public: optional_ioport m_p2joy_port; optional_memory_bank m_bank1; - + address_space* m_maincpu_program_space; const amiga_machine_interface *m_intf; autoconfig_device *m_autoconfig_list; @@ -462,6 +462,7 @@ public: DECLARE_DRIVER_INIT(amiga); DECLARE_DRIVER_INIT(cdtv); DECLARE_DRIVER_INIT(a3000); + DECLARE_MACHINE_START(amiga); DECLARE_MACHINE_RESET(amiga); DECLARE_VIDEO_START(amiga); DECLARE_PALETTE_INIT(amiga); @@ -474,6 +475,23 @@ public: TIMER_CALLBACK_MEMBER(finish_serial_write); DECLARE_WRITE_LINE_MEMBER(amiga_cia_0_irq); DECLARE_WRITE_LINE_MEMBER(amiga_cia_1_irq); + + + + DECLARE_READ16_MEMBER( amiga_custom_r ); + DECLARE_WRITE16_MEMBER( amiga_custom_w ); + + DECLARE_READ16_MEMBER( amiga_autoconfig_r ); + DECLARE_WRITE16_MEMBER( amiga_autoconfig_w ); + + DECLARE_READ16_MEMBER( amiga_cia_r ); + DECLARE_WRITE16_MEMBER( amiga_cia_w ); + // action replay + DECLARE_READ16_MEMBER( amiga_ar23_cia_r ); + DECLARE_READ16_MEMBER( amiga_ar23_mode_r ); + DECLARE_WRITE16_MEMBER( amiga_ar23_mode_w ); + void amiga_ar23_init( running_machine &machine, int ar3 ); + }; @@ -487,18 +505,13 @@ void amiga_machine_config(running_machine &machine, const amiga_machine_interfac -DECLARE_READ16_HANDLER( amiga_cia_r ); -DECLARE_WRITE16_HANDLER( amiga_cia_w ); -DECLARE_READ16_HANDLER( amiga_custom_r ); -DECLARE_WRITE16_HANDLER( amiga_custom_w ); + void amiga_serial_in_w(running_machine &machine, UINT16 data); attotime amiga_get_serial_char_period(running_machine &machine); void amiga_add_autoconfig(running_machine &machine, const amiga_autoconfig_device *device); -DECLARE_READ16_HANDLER( amiga_autoconfig_r ); -DECLARE_WRITE16_HANDLER( amiga_autoconfig_w ); const amiga_machine_interface *amiga_get_interface(running_machine &machine); diff --git a/src/mame/machine/amiga.c b/src/mame/machine/amiga.c index e0df50522c4..0294206085a 100644 --- a/src/mame/machine/amiga.c +++ b/src/mame/machine/amiga.c @@ -277,13 +277,18 @@ static void amiga_m68k_reset(device_t *device) } else { - amiga_cia_w(space, 0x1001/2, 1, 0xffff); + state->amiga_cia_w(space, 0x1001/2, 1, 0xffff); } } +MACHINE_START_MEMBER(amiga_state,amiga) +{ + m_maincpu_program_space = &machine().device("maincpu")->memory().space(AS_PROGRAM); +} MACHINE_RESET_MEMBER(amiga_state,amiga) { + /* set m68k reset function */ m68k_set_reset_callback(m_maincpu, amiga_m68k_reset); @@ -1015,7 +1020,7 @@ static void blitter_setup(address_space &space) * *************************************/ -READ16_HANDLER( amiga_cia_r ) +READ16_MEMBER( amiga_state::amiga_cia_r ) { amiga_state *state = space.machine().driver_data(); UINT8 data; @@ -1053,7 +1058,7 @@ READ16_HANDLER( amiga_cia_r ) * *************************************/ -WRITE16_HANDLER( amiga_cia_w ) +WRITE16_HANDLER( amiga_state::amiga_cia_w ) { amiga_state *state = space.machine().driver_data(); device_t *cia; @@ -1149,7 +1154,7 @@ static void custom_reset(running_machine &machine) * *************************************/ -READ16_HANDLER( amiga_custom_r ) +READ16_MEMBER( amiga_state::amiga_custom_r ) { amiga_state *state = space.machine().driver_data(); UINT16 temp; @@ -1269,7 +1274,7 @@ TIMER_CALLBACK_MEMBER(amiga_state::finish_serial_write) } -WRITE16_HANDLER( amiga_custom_w ) +WRITE16_MEMBER( amiga_state::amiga_custom_w ) { amiga_state *state = space.machine().driver_data(); UINT16 temp; @@ -1540,7 +1545,7 @@ void amiga_serial_in_w(running_machine &machine, UINT16 data) } /* signal an interrupt */ - amiga_custom_w(space, REG_INTREQ, 0x8000 | INTENA_RBF, 0xffff); + state->amiga_custom_w(space, REG_INTREQ, 0x8000 | INTENA_RBF, 0xffff); } @@ -1614,7 +1619,7 @@ static void autoconfig_reset(running_machine &machine) * *************************************/ -READ16_HANDLER( amiga_autoconfig_r ) +READ16_MEMBER( amiga_state::amiga_autoconfig_r ) { amiga_state *state = space.machine().driver_data(); autoconfig_device *cur_autoconfig = state->m_cur_autoconfig; @@ -1753,7 +1758,7 @@ READ16_HANDLER( amiga_autoconfig_r ) * *************************************/ -WRITE16_HANDLER( amiga_autoconfig_w ) +WRITE16_MEMBER( amiga_state::amiga_autoconfig_w ) { amiga_state *state = space.machine().driver_data(); autoconfig_device *cur_autoconfig = state->m_cur_autoconfig; diff --git a/src/mame/machine/cd32.c b/src/mame/machine/cd32.c index cc6b96a0de6..36d4672619c 100644 --- a/src/mame/machine/cd32.c +++ b/src/mame/machine/cd32.c @@ -99,8 +99,10 @@ static DEVICE_STOP( akiko ) static DEVICE_RESET( akiko ) { + amiga_state *amiga = device->machine().driver_data(); running_machine &machine = device->machine(); akiko_state *state = get_safe_token(device); + state->m_space = amiga->m_maincpu_program_space; cdrom_image_device *cddevice = machine.device("cdrom"); if (cddevice!=NULL) @@ -174,7 +176,6 @@ static DEVICE_START( akiko ) akiko_state *state = get_safe_token(device); state->set_machine(machine); - state->m_space = &machine.device("maincpu")->memory().space(AS_PROGRAM); state->m_c2p_input_index = 0; state->m_c2p_output_index = 0; @@ -394,12 +395,14 @@ static UINT8 akiko_cdda_getstatus(akiko_state *state, UINT32 *lba) static void akiko_set_cd_status(akiko_state *state, UINT32 status) { + amiga_state *amiga = state->machine().driver_data(); + state->m_cdrom_status[0] |= status; if ( state->m_cdrom_status[0] & state->m_cdrom_status[1] ) { if (LOG_AKIKO_CD) logerror( "Akiko CD IRQ\n" ); - amiga_custom_w(*state->m_space, REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff); + amiga->amiga_custom_w(*state->m_space, REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff); } } diff --git a/src/mame/video/amiga.c b/src/mame/video/amiga.c index 8801a58c247..6e0da7f271b 100644 --- a/src/mame/video/amiga.c +++ b/src/mame/video/amiga.c @@ -206,10 +206,10 @@ int amiga_copper_execute_next(running_machine &machine, int xpos) { if (LOG_COPPER) logerror("%02X.%02X: Write to %s = %04x\n", state->m_last_scanline, xpos / 2, amiga_custom_names[state->m_copper_pending_offset & 0xff], state->m_copper_pending_data); - amiga_custom_w(machine.device("maincpu")->memory().space(AS_PROGRAM), state->m_copper_pending_offset, state->m_copper_pending_data, 0xffff); + state->amiga_custom_w(*state->m_maincpu_program_space, state->m_copper_pending_offset, state->m_copper_pending_data, 0xffff); state->m_copper_pending_offset = 0; } - + /* if we're waiting, check for a breakthrough */ if (state->m_copper_waiting) { @@ -262,7 +262,7 @@ int amiga_copper_execute_next(running_machine &machine, int xpos) { if (LOG_COPPER) logerror("%02X.%02X: Write to %s = %04x\n", state->m_last_scanline, xpos / 2, amiga_custom_names[word0 & 0xff], word1); - amiga_custom_w(machine.device("maincpu")->memory().space(AS_PROGRAM), word0, word1, 0xffff); + state->amiga_custom_w(*state->m_maincpu_program_space, word0, word1, 0xffff); } else // additional 2 cycles needed for non-Agnus registers { diff --git a/src/mess/drivers/amiga.c b/src/mess/drivers/amiga.c index 2fae6128de1..03e8a518e02 100644 --- a/src/mess/drivers/amiga.c +++ b/src/mess/drivers/amiga.c @@ -164,11 +164,11 @@ static const centronics_interface amiga_centronics_config = static ADDRESS_MAP_START(amiga_mem, AS_PROGRAM, 16, amiga_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x07ffff) AM_MIRROR(0x80000) AM_RAMBANK("bank1") AM_SHARE("chip_ram") - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w) AM_RANGE(0xc00000, 0xc7ffff) AM_RAM /* slow-mem */ - AM_RANGE(0xc80000, 0xcfffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) /* see Note 1 above */ - AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") /* Custom Chips */ - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w) + AM_RANGE(0xc80000, 0xcfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) /* see Note 1 above */ + AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") /* Custom Chips */ + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE(amiga_autoconfig_r, amiga_autoconfig_w) AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* System ROM - mirror */ ADDRESS_MAP_END @@ -176,9 +176,9 @@ static ADDRESS_MAP_START( a1200_map, AS_PROGRAM, 32, a1200_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x000000, 0x1fffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") AM_RANGE(0xbfa000, 0xbfa003) AM_WRITE(aga_overlay_w) - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16_LEGACY(amiga_cia_r, amiga_cia_w, 0xffffffff) - AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16_LEGACY(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs") - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE16_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w, 0xffffffff) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16(amiga_cia_r, amiga_cia_w, 0xffffffff) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs") + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE16(amiga_autoconfig_r, amiga_autoconfig_w, 0xffffffff) AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* Kickstart */ ADDRESS_MAP_END @@ -186,9 +186,9 @@ static ADDRESS_MAP_START( amiga_mem32, AS_PROGRAM, 32, a1200_state ) ADDRESS_MAP_UNMAP_HIGH // ADDRESS_MAP_GLOBAL_MASK(0xffffff) // not sure AM_RANGE(0x000000, 0x1fffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16_LEGACY(amiga_cia_r, amiga_cia_w, 0xffffffff) - AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16_LEGACY(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs") - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE16_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w, 0xffffffff) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE16(amiga_cia_r, amiga_cia_w, 0xffffffff) + AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE16(amiga_custom_r, amiga_custom_w, 0xffffffff) AM_SHARE("custom_regs") + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE16(amiga_autoconfig_r, amiga_autoconfig_w, 0xffffffff) AM_RANGE(0xf80000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* Kickstart */ ADDRESS_MAP_END @@ -238,11 +238,11 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(cdtv_mem, AS_PROGRAM, 16, amiga_state ) AM_RANGE(0x000000, 0x0fffff) AM_RAMBANK("bank1") AM_SHARE("chip_ram") - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w) AM_RANGE(0xdc0000, 0xdc003f) AM_READWRITE_LEGACY(amiga_clock_r, amiga_clock_w) AM_RANGE(0xdc8000, 0xdc87ff) AM_RAM AM_SHARE("nvram") - AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") /* Custom Chips */ - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w) + AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") /* Custom Chips */ + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE(amiga_autoconfig_r, amiga_autoconfig_w) AM_RANGE(0xf00000, 0xffffff) AM_ROM AM_REGION("user1", 0) /* CDTV & System ROM */ ADDRESS_MAP_END @@ -266,10 +266,10 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(a1000_mem, AS_PROGRAM, 16, amiga_state ) AM_RANGE(0x000000, 0x03ffff) AM_MIRROR(0xc0000) AM_RAMBANK("bank1") AM_SHARE("chip_ram") - AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE_LEGACY(amiga_cia_r, amiga_cia_w) - AM_RANGE(0xc00000, 0xc3ffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) /* See Note 1 above */ - AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE_LEGACY(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") /* Custom Chips */ - AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE_LEGACY(amiga_autoconfig_r, amiga_autoconfig_w) + AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w) + AM_RANGE(0xc00000, 0xc3ffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) /* See Note 1 above */ + AM_RANGE(0xdf0000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_SHARE("custom_regs") /* Custom Chips */ + AM_RANGE(0xe80000, 0xe8ffff) AM_READWRITE(amiga_autoconfig_r, amiga_autoconfig_w) AM_RANGE(0xf80000, 0xfbffff) AM_ROM AM_REGION("user1", 0) /* Bootstrap ROM */ AM_RANGE(0xfc0000, 0xffffff) AM_RAMBANK("bank2") /* Writable Control Store RAM */ ADDRESS_MAP_END @@ -494,6 +494,7 @@ WRITE8_MEMBER(a1200_state::ami1200_cia_0_portb_w) MACHINE_START_MEMBER(cdtv_state,cdtv) { + MACHINE_START_CALL_MEMBER(amiga); MACHINE_START_CALL_LEGACY( amigacd ); } @@ -641,6 +642,7 @@ static MACHINE_CONFIG_START( ntsc, amiga_state ) // MCFG_SCREEN_REFRESH_RATE(59.997) // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_MACHINE_START_OVERRIDE(amiga_state, amiga ) MCFG_MACHINE_RESET_OVERRIDE(amiga_state, amiga ) MCFG_DEFAULT_LAYOUT(layout_amiga) @@ -835,6 +837,7 @@ static MACHINE_CONFIG_START( a1200n, a1200_state ) MCFG_CPU_PROGRAM_MAP(keyboard_mem) MCFG_DEVICE_DISABLE() + MCFG_MACHINE_START_OVERRIDE(amiga_state, amiga ) MCFG_MACHINE_RESET_OVERRIDE(amiga_state, amiga ) /* TODO: params */ @@ -941,6 +944,7 @@ static MACHINE_CONFIG_START( a3000n, amiga_state ) MCFG_SCREEN_REFRESH_RATE(59.997) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_MACHINE_START_OVERRIDE(amiga_state, amiga ) MCFG_MACHINE_RESET_OVERRIDE(amiga_state, amiga ) MCFG_DEFAULT_LAYOUT(layout_amiga) @@ -1044,7 +1048,7 @@ static WRITE8_DEVICE_HANDLER( amiga_cia_0_portA_w ) } /* overlay disabled, map RAM on 0x000000 */ - space.machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_bank(0x000000, state->m_chip_ram.bytes() - 1, 0, mirror_mask, "bank1"); + state->m_maincpu_program_space->install_write_bank(0x000000, state->m_chip_ram.bytes() - 1, 0, mirror_mask, "bank1"); /* if there is a cart region, check for cart overlay */ if (space.machine().root_device().memregion("user2")->base() != NULL) @@ -1052,7 +1056,7 @@ static WRITE8_DEVICE_HANDLER( amiga_cia_0_portA_w ) } else /* overlay enabled, map Amiga system ROM on 0x000000 */ - space.machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x000000, state->m_chip_ram.bytes() - 1); + state->m_maincpu_program_space->unmap_write(0x000000, state->m_chip_ram.bytes() - 1); set_led_status( space.machine(), 0, ( data & 2 ) ? 0 : 1 ); /* bit 2 = Power Led on Amiga */ output_set_value("power_led", ( data & 2 ) ? 0 : 1); @@ -1088,15 +1092,16 @@ static UINT16 amiga_read_joy1dat(running_machine &machine) static void amiga_reset(running_machine &machine) { + amiga_state *state = machine.driver_data(); if (machine.root_device().ioport("hardware")->read() & 0x08) { /* Install RTC */ - machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_readwrite_handler(0xdc0000, 0xdc003f, FUNC(amiga_clock_r), FUNC(amiga_clock_w)); + state->m_maincpu_program_space->install_legacy_readwrite_handler(0xdc0000, 0xdc003f, FUNC(amiga_clock_r), FUNC(amiga_clock_w)); } else { /* No RTC support */ - machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_readwrite(0xdc0000, 0xdc003f); + state->m_maincpu_program_space->unmap_readwrite(0xdc0000, 0xdc003f); } } diff --git a/src/mess/machine/amigacd.c b/src/mess/machine/amigacd.c index 7eea41761db..989426b8523 100644 --- a/src/mess/machine/amigacd.c +++ b/src/mess/machine/amigacd.c @@ -73,6 +73,8 @@ static dmac_data_t dmac_data; static void check_interrupts( running_machine &machine ) { + amiga_state *state = machine.driver_data(); + /* if interrupts are disabled, bail */ if ( (dmac_data.cntr & CNTR_INTEN) == 0 ) return; @@ -82,7 +84,7 @@ static void check_interrupts( running_machine &machine ) return; /* otherwise, generate the IRQ */ - amiga_custom_w(machine.device("maincpu")->memory().space(AS_PROGRAM), REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff); + state->amiga_custom_w(*state->m_maincpu_program_space, REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff); } static TIMER_CALLBACK(dmac_dma_proc) @@ -389,14 +391,16 @@ static WRITE16_HANDLER( amiga_dmac_w ) static void dmac_install(running_machine &machine, offs_t base) { - address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM); + amiga_state *state = machine.driver_data(); + address_space &space = *state->m_maincpu_program_space; space.install_legacy_read_handler(base, base + 0xFFFF, FUNC(amiga_dmac_r)); space.install_legacy_write_handler(base, base + 0xFFFF, FUNC(amiga_dmac_w)); } static void dmac_uninstall(running_machine &machine, offs_t base) { - address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM); + amiga_state *state = machine.driver_data(); + address_space &space = *state->m_maincpu_program_space; space.unmap_readwrite(base, base + 0xFFFF); } @@ -457,7 +461,7 @@ static TIMER_CALLBACK(tp6525_delayed_irq) if ( (CUSTOM_REG(REG_INTREQ) & INTENA_PORTS) == 0 ) { - amiga_custom_w(machine.device("maincpu")->memory().space(AS_PROGRAM), REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff); + state->amiga_custom_w(*state->m_maincpu_program_space, REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff); } else { @@ -474,7 +478,7 @@ static void amigacd_tpi6525_irq_trampoline(device_t *device, int level) { if ( (CUSTOM_REG(REG_INTREQ) & INTENA_PORTS) == 0 ) { - amiga_custom_w(device->machine().device("maincpu")->memory().space(AS_PROGRAM), REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff); + state->amiga_custom_w(*state->m_maincpu_program_space, REG_INTREQ, 0x8000 | INTENA_PORTS, 0xffff); } else { diff --git a/src/mess/machine/amigacrt.c b/src/mess/machine/amigacrt.c index 171bb1562cf..8d0a011771a 100644 --- a/src/mess/machine/amigacrt.c +++ b/src/mess/machine/amigacrt.c @@ -94,7 +94,7 @@ static void amiga_ar1_nmi( running_machine &machine ) { amiga_state *state = machine.driver_data(); /* get the cart's built-in ram */ - UINT16 *ar_ram = (UINT16 *)machine.device("maincpu")->memory().space(AS_PROGRAM).get_write_ptr(0x9fc000); + UINT16 *ar_ram = (UINT16 *)(state->m_maincpu_program_space->get_write_ptr(0x9fc000)); if ( ar_ram != NULL ) { @@ -133,7 +133,9 @@ static WRITE16_HANDLER( amiga_ar1_chipmem_w ) static void amiga_ar1_check_overlay( running_machine &machine ) { - machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x000000, 0x00007f, FUNC(amiga_ar1_chipmem_w)); + amiga_state *state = machine.driver_data(); + + state->m_maincpu_program_space->install_legacy_write_handler(0x000000, 0x00007f, FUNC(amiga_ar1_chipmem_w)); } static void amiga_ar1_init( running_machine &machine ) @@ -153,11 +155,11 @@ static void amiga_ar1_init( running_machine &machine ) memset(ar_ram, 0, 0x4000); /* Install ROM */ - machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xf00000, 0xf7ffff, "bank2"); - machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xf00000, 0xf7ffff); + state->m_maincpu_program_space->install_read_bank(0xf00000, 0xf7ffff, "bank2"); + state->m_maincpu_program_space->unmap_write(0xf00000, 0xf7ffff); /* Install RAM */ - machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x9fc000, 0x9fffff, "bank3"); + state->m_maincpu_program_space->install_readwrite_bank(0x9fc000, 0x9fffff, "bank3"); /* Configure Banks */ state->membank("bank2")->set_base(machine.root_device().memregion("user2")->base()); @@ -190,7 +192,7 @@ static void amiga_ar1_init( running_machine &machine ) static void amiga_ar23_freeze( running_machine &machine ); -static READ16_HANDLER( amiga_ar23_cia_r ) +READ16_MEMBER( amiga_state::amiga_ar23_cia_r ) { int pc = space.device().safe_pc(); @@ -202,15 +204,15 @@ static READ16_HANDLER( amiga_ar23_cia_r ) return amiga_cia_r( space, offset, mem_mask ); } -static WRITE16_HANDLER( amiga_ar23_mode_w ) +WRITE16_MEMBER( amiga_state::amiga_ar23_mode_w ) { if ( data & 2 ) { - space.install_legacy_read_handler(0xbfd000, 0xbfefff, FUNC(amiga_ar23_cia_r)); + space.install_read_handler(0xbfd000, 0xbfefff, read16_delegate(FUNC(amiga_state::amiga_ar23_cia_r), this)); } else { - space.install_legacy_read_handler(0xbfd000, 0xbfefff, FUNC(amiga_cia_r)); + space.install_read_handler(0xbfd000, 0xbfefff, read16_delegate(FUNC(amiga_state::amiga_cia_r), this)); } amigacrt.ar23_mode = (data&0x3); @@ -219,7 +221,7 @@ static WRITE16_HANDLER( amiga_ar23_mode_w ) } -static READ16_HANDLER( amiga_ar23_mode_r ) +READ16_MEMBER( amiga_state::amiga_ar23_mode_r ) { amiga_state *state = space.machine().driver_data(); UINT16 *mem = (UINT16 *)(*state->memregion( "user2" )); @@ -229,7 +231,7 @@ static READ16_HANDLER( amiga_ar23_mode_r ) if ( offset < 2 ) return (mem[offset] | (amigacrt.ar23_mode&3)); - if ( offset == 0x03 ) /* disable cart oberlay on chip mem */ + if ( offset == 0x03 ) /* disable cart overlay on chip mem */ { UINT32 mirror_mask = state->m_chip_ram.bytes(); @@ -269,7 +271,7 @@ static void amiga_ar23_freeze( running_machine &machine ) if ( ((pc >> 16) & 0xfe ) != 0x40 ) { /* get the cart's built-in ram */ - UINT16 *ar_ram = (UINT16 *)machine.device("maincpu")->memory().space(AS_PROGRAM).get_write_ptr(0x440000); + UINT16 *ar_ram = (UINT16 *)state->m_maincpu_program_space->get_write_ptr(0x440000); if ( ar_ram != NULL ) { @@ -283,7 +285,7 @@ static void amiga_ar23_freeze( running_machine &machine ) state->membank("bank1")->set_entry(2); /* writes go to chipram */ - machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x000000, state->m_chip_ram.bytes() - 1, FUNC(amiga_ar23_chipmem_w)); + state->m_maincpu_program_space->install_legacy_write_handler(0x000000, state->m_chip_ram.bytes() - 1, FUNC(amiga_ar23_chipmem_w)); /* trigger NMI irq */ machine.device("maincpu")->execute().set_input_line(7, PULSE_LINE); @@ -340,11 +342,12 @@ static READ16_HANDLER( amiga_ar23_custom_r ) static void amiga_ar23_check_overlay( running_machine &machine ) { + amiga_state *state = machine.driver_data(); amigacrt.ar23_mode = 3; - machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x000000, 0x00000f, FUNC(amiga_ar23_chipmem_w)); + state->m_maincpu_program_space->install_legacy_write_handler(0x000000, 0x00000f, FUNC(amiga_ar23_chipmem_w)); } -static void amiga_ar23_init( running_machine &machine, int ar3 ) +void amiga_state::amiga_ar23_init( running_machine &machine, int ar3 ) { amiga_state *state = machine.driver_data(); UINT32 mirror = 0x20000, size = 0x1ffff; @@ -367,20 +370,20 @@ static void amiga_ar23_init( running_machine &machine, int ar3 ) } /* Install ROM */ - machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x400000, 0x400000+size, 0, mirror, "bank2"); - machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x400000, 0x400000+size, 0, mirror); + state->m_maincpu_program_space->install_read_bank(0x400000, 0x400000+size, 0, mirror, "bank2"); + state->m_maincpu_program_space->unmap_write(0x400000, 0x400000+size, 0, mirror); /* Install RAM */ - machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x440000, 0x44ffff, "bank3"); - machine.device("maincpu")->memory().space(AS_PROGRAM).install_write_bank(0x440000, 0x44ffff, "bank3"); + state->m_maincpu_program_space->install_read_bank(0x440000, 0x44ffff, "bank3"); + state->m_maincpu_program_space->install_write_bank(0x440000, 0x44ffff, "bank3"); /* Install Custom chip monitor */ -// machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0xdff000, 0xdff1ff, FUNC(amiga_ar23_custom_r)); -// machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xdff000, 0xdff1ff, FUNC(amiga_ar23_custom_w)); +// state->m_maincpu_program_space->install_legacy_read_handler(0xdff000, 0xdff1ff, FUNC(amiga_ar23_custom_r)); +// state->m_maincpu_program_space->install_legacy_write_handler(0xdff000, 0xdff1ff, FUNC(amiga_ar23_custom_w)); /* Install status/mode handlers */ - machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_read_handler(0x400000, 0x400007, 0, mirror, FUNC(amiga_ar23_mode_r)); - machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x400000, 0x400003, 0, mirror, FUNC(amiga_ar23_mode_w)); + state->m_maincpu_program_space->install_read_handler( 0x400000, 0x400007, 0, mirror, read16_delegate( FUNC(amiga_state::amiga_ar23_mode_r), this)); + state->m_maincpu_program_space->install_write_handler(0x400000, 0x400003, 0, mirror, write16_delegate(FUNC(amiga_state::amiga_ar23_mode_w), this)); /* Configure Banks */ state->membank("bank2")->set_base(machine.root_device().memregion("user2")->base()); @@ -403,6 +406,7 @@ void amiga_cart_init( running_machine &machine ) { /* see what is there */ UINT16 *mem = (UINT16 *)(*machine.root_device().memregion( "user2" )); + amiga_state *state = machine.driver_data(); amigacrt.cart_type = -1; @@ -416,12 +420,12 @@ void amiga_cart_init( running_machine &machine ) else if ( mem[0x0C] == 0x4D6B ) { amigacrt.cart_type = ACTION_REPLAY_MKII; - amiga_ar23_init(machine, 0); + state->amiga_ar23_init(machine, 0); } else if ( mem[0x0C] == 0x4D4B ) { amigacrt.cart_type = ACTION_REPLAY_MKIII; - amiga_ar23_init(machine, 1); + state->amiga_ar23_init(machine, 1); } } }