From 8f7757297aa5115c3d1d97bad8af55e231caef79 Mon Sep 17 00:00:00 2001 From: AJR Date: Mon, 29 Apr 2019 19:41:00 -0400 Subject: m68000: Read the initial SP and PC from memory after rather than during machine reset time. This removes the need for many drivers to reset the CPU an extra time to load the correct vector. --- src/devices/cpu/m68000/m68kcpu.cpp | 12 ++++++------ src/mame/drivers/cdi.cpp | 2 -- src/mame/drivers/cgc7900.cpp | 2 -- src/mame/drivers/codata.cpp | 1 - src/mame/drivers/dim68k.cpp | 2 -- src/mame/drivers/fs3216.cpp | 3 --- src/mame/drivers/ft68m.cpp | 1 - src/mame/drivers/ht68k.cpp | 2 -- src/mame/drivers/iris3130.cpp | 2 -- src/mame/drivers/m20.cpp | 1 - src/mame/drivers/mac128.cpp | 1 - src/mame/drivers/magicard.cpp | 1 - src/mame/drivers/megadriv.cpp | 1 - src/mame/drivers/megadriv_rad.cpp | 1 - src/mame/drivers/miniframe.cpp | 3 --- src/mame/drivers/model2.cpp | 1 - src/mame/drivers/model3.cpp | 1 - src/mame/drivers/ms9540.cpp | 1 - src/mame/drivers/msbc1.cpp | 2 -- src/mame/drivers/neogeo.cpp | 2 -- src/mame/drivers/ob68k1a.cpp | 2 -- src/mame/drivers/palm.cpp | 2 -- src/mame/drivers/pm68k.cpp | 1 - src/mame/drivers/pt68k4.cpp | 2 -- src/mame/drivers/r9751.cpp | 3 --- src/mame/drivers/sage2.cpp | 1 - src/mame/drivers/segas16b.cpp | 1 - src/mame/drivers/sun1.cpp | 2 -- src/mame/drivers/sun2.cpp | 2 -- src/mame/drivers/sun3.cpp | 1 - src/mame/drivers/sun3x.cpp | 2 -- src/mame/drivers/tek440x.cpp | 2 -- src/mame/drivers/ti89.cpp | 1 - src/mame/drivers/unixpc.cpp | 3 --- src/mame/drivers/x68k.cpp | 3 --- src/mame/machine/lisa.cpp | 3 --- 36 files changed, 6 insertions(+), 67 deletions(-) diff --git a/src/devices/cpu/m68000/m68kcpu.cpp b/src/devices/cpu/m68000/m68kcpu.cpp index be6748c76b0..d974757c87a 100644 --- a/src/devices/cpu/m68000/m68kcpu.cpp +++ b/src/devices/cpu/m68000/m68kcpu.cpp @@ -837,8 +837,13 @@ void m68000_base_device::execute_run() { m_initial_cycles = m_icount; - /* eat up any reset cycles */ if (m_reset_cycles) { + /* Read the initial stack pointer and program counter */ + REG_SP() = m68ki_read_imm_32(); + m_pc = m68ki_read_imm_32(); + m68ki_jump(m_pc); + + /* eat up any reset cycles */ int rc = m_reset_cycles; m_reset_cycles = 0; m_icount -= rc; @@ -1117,12 +1122,7 @@ void m68000_base_device::device_reset() /* Set to arbitrary number since our first fetch is from 0 */ m_pref_addr = 0x1000; - /* Read the initial stack pointer and program counter */ m68ki_jump(0); - REG_SP() = m68ki_read_imm_32(); - m_pc = m68ki_read_imm_32(); - m68ki_jump(m_pc); - m_run_mode = RUN_MODE_NORMAL; m_reset_cycles = m_cyc_exception[EXCEPTION_RESET]; diff --git a/src/mame/drivers/cdi.cpp b/src/mame/drivers/cdi.cpp index 8aa10dca7c3..d82baad071e 100644 --- a/src/mame/drivers/cdi.cpp +++ b/src/mame/drivers/cdi.cpp @@ -276,8 +276,6 @@ MACHINE_RESET_MEMBER( cdi_state, cdimono1 ) memcpy(dst, src, 0x8); memset(m_servo_io_regs, 0, 0x20); memset(m_slave_io_regs, 0, 0x20); - - m_maincpu->reset(); } MACHINE_RESET_MEMBER( cdi_state, cdimono2 ) diff --git a/src/mame/drivers/cgc7900.cpp b/src/mame/drivers/cgc7900.cpp index 3e9c69f9e75..42d216ff821 100644 --- a/src/mame/drivers/cgc7900.cpp +++ b/src/mame/drivers/cgc7900.cpp @@ -444,8 +444,6 @@ void cgc7900_state::machine_reset() memcpy((uint8_t *)m_chrom_ram.target(), user1, 8); // not really what happens but... - m_maincpu->reset(); - kbd_mods = 0x300; // forces cold boot -- initializes SRAM contents kbd_data = 0; kbd_ready = false; diff --git a/src/mame/drivers/codata.cpp b/src/mame/drivers/codata.cpp index b4b1d915ff1..8aad36ec7b1 100644 --- a/src/mame/drivers/codata.cpp +++ b/src/mame/drivers/codata.cpp @@ -59,7 +59,6 @@ void codata_state::machine_reset() { uint8_t* RAM = memregion("user1")->base(); memcpy(m_p_base, RAM, 16); - m_maincpu->reset(); } void codata_state::codata(machine_config &config) diff --git a/src/mame/drivers/dim68k.cpp b/src/mame/drivers/dim68k.cpp index f7466edf9fe..dc02ca984c6 100644 --- a/src/mame/drivers/dim68k.cpp +++ b/src/mame/drivers/dim68k.cpp @@ -228,8 +228,6 @@ void dim68k_state::machine_reset() u8* ROM = memregion("bootrom")->base(); memcpy((u8*)m_ram.target(), ROM, 0x2000); - - m_maincpu->reset(); } // Text-only; graphics isn't emulated yet. Need to find out if hardware cursor is used. diff --git a/src/mame/drivers/fs3216.cpp b/src/mame/drivers/fs3216.cpp index c4b50cceb4c..7f8df004b84 100644 --- a/src/mame/drivers/fs3216.cpp +++ b/src/mame/drivers/fs3216.cpp @@ -134,9 +134,6 @@ void fs3216_state::machine_reset() { m_from_reset = true; - // FIXME: fix the 68000 so that it doesn't read vectors during device_reset - m_maincpu->reset(); - floppy_control_w(0); floppy_select_w(0, 0); } diff --git a/src/mame/drivers/ft68m.cpp b/src/mame/drivers/ft68m.cpp index 3997b708ba9..559c57da6ed 100644 --- a/src/mame/drivers/ft68m.cpp +++ b/src/mame/drivers/ft68m.cpp @@ -80,7 +80,6 @@ void ft68m_state::machine_reset() { uint8_t* ROM = memregion("roms")->base(); memcpy(m_p_base, ROM, 8); - m_maincpu->reset(); } void ft68m_state::ft68m(machine_config &config) diff --git a/src/mame/drivers/ht68k.cpp b/src/mame/drivers/ht68k.cpp index 0a7be7127a9..116c217215a 100644 --- a/src/mame/drivers/ht68k.cpp +++ b/src/mame/drivers/ht68k.cpp @@ -94,8 +94,6 @@ void ht68k_state::machine_reset() memcpy((uint8_t*)m_p_ram.target(),user1,0x8000); - m_maincpu->reset(); - m_fdc->reset(); m_fdc->set_floppy(nullptr); } diff --git a/src/mame/drivers/iris3130.cpp b/src/mame/drivers/iris3130.cpp index 7b3b2ff858f..1fa805fae13 100644 --- a/src/mame/drivers/iris3130.cpp +++ b/src/mame/drivers/iris3130.cpp @@ -495,8 +495,6 @@ void sgi_ip2_state::init_sgi_ip2() uint32_t *src = (uint32_t*)(memregion("maincpu")->base()); uint32_t *dst = m_mainram; memcpy(dst, src, 8); - - m_maincpu->reset(); } /*************************************************************************** diff --git a/src/mame/drivers/m20.cpp b/src/mame/drivers/m20.cpp index 28d5b810d6f..43de30f04ce 100644 --- a/src/mame/drivers/m20.cpp +++ b/src/mame/drivers/m20.cpp @@ -768,7 +768,6 @@ void m20_state::machine_reset() m_fd1797->reset(); memcpy(RAM, ROM, 8); // we need only the reset vector - m_maincpu->reset(); // reset the CPU to ensure it picks up the new vector m_kbdi8251->write_cts(0); if (m_apb) m_apb->halt(); diff --git a/src/mame/drivers/mac128.cpp b/src/mame/drivers/mac128.cpp index 339d1baba75..5b553a1eb40 100644 --- a/src/mame/drivers/mac128.cpp +++ b/src/mame/drivers/mac128.cpp @@ -302,7 +302,6 @@ void mac128_state::machine_reset() m_via_cycles = -10; m_last_taken_interrupt = -1; m_overlay = 1; - m_maincpu->reset(); m_screen_buffer = 1; #ifndef MAC_USE_EMULATED_KBD m_keyboard_reply = 0; diff --git a/src/mame/drivers/magicard.cpp b/src/mame/drivers/magicard.cpp index 8b366eb09ee..0c0be210824 100644 --- a/src/mame/drivers/magicard.cpp +++ b/src/mame/drivers/magicard.cpp @@ -808,7 +808,6 @@ void magicard_state::machine_reset() memcpy (dst + 0x40000 * 1, src, 0x80000); memcpy (dst + 0x40000 * 2, src, 0x80000); memcpy (dst + 0x40000 * 3, src, 0x7fc00); - m_maincpu->reset(); } diff --git a/src/mame/drivers/megadriv.cpp b/src/mame/drivers/megadriv.cpp index 6f8bd49912b..08571aafb46 100644 --- a/src/mame/drivers/megadriv.cpp +++ b/src/mame/drivers/megadriv.cpp @@ -345,7 +345,6 @@ MACHINE_START_MEMBER(md_cons_state, ms_megacd) MACHINE_RESET_MEMBER(md_cons_state, ms_megadriv) { - m_maincpu->reset(); MACHINE_RESET_CALL_MEMBER( megadriv ); // if the system has a 32x, pause the extra CPUs until they are actually turned on diff --git a/src/mame/drivers/megadriv_rad.cpp b/src/mame/drivers/megadriv_rad.cpp index c41967b0923..9ff44620906 100644 --- a/src/mame/drivers/megadriv_rad.cpp +++ b/src/mame/drivers/megadriv_rad.cpp @@ -130,7 +130,6 @@ MACHINE_RESET_MEMBER(megadriv_radica_state, megadriv_radica) { m_bank = 0; MACHINE_RESET_CALL_MEMBER(megadriv); - m_maincpu->reset(); } void megadriv_radica_state::megadriv_radica_3button_ntsc(machine_config &config) diff --git a/src/mame/drivers/miniframe.cpp b/src/mame/drivers/miniframe.cpp index 552017c6b64..a3b4432dbee 100644 --- a/src/mame/drivers/miniframe.cpp +++ b/src/mame/drivers/miniframe.cpp @@ -170,9 +170,6 @@ void miniframe_state::machine_reset() // force ROM into lower mem on reset m_ramrombank->set_bank(0); - // reset cpu so that it can pickup the new values - m_maincpu->reset(); - // invalidate all pages by clearing all entries memset(m_mapram, 0, MMU_MAX_PAGES * sizeof(uint16_t)); } diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index cfac766acb3..0e176f8961a 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -290,7 +290,6 @@ void model2_state::reset_model2_scsp() // copy the 68k vector table into RAM memcpy(m_soundram, memregion("audiocpu")->base(), 16); - m_audiocpu->reset(); } void model2_tgp_state::machine_reset() diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp index 29ccafb90cc..48437a84497 100644 --- a/src/mame/drivers/model3.cpp +++ b/src/mame/drivers/model3.cpp @@ -1367,7 +1367,6 @@ void model3_state::model3_init(int step) // copy the 68k vector table into RAM memcpy(m_soundram, memregion("audiocpu")->base(), 16); - m_audiocpu->reset(); m_scan_timer->adjust(m_screen->time_until_pos(m_screen->vpos() + 1), m_screen->vpos() + 1); diff --git a/src/mame/drivers/ms9540.cpp b/src/mame/drivers/ms9540.cpp index fc17a01d395..8515038fbcb 100644 --- a/src/mame/drivers/ms9540.cpp +++ b/src/mame/drivers/ms9540.cpp @@ -70,7 +70,6 @@ void ms9540_state::machine_reset() { uint8_t* ROM = memregion("9540")->base(); memcpy(m_p_base, ROM, 8); - m_maincpu->reset(); } void ms9540_state::kbd_put(u8 data) diff --git a/src/mame/drivers/msbc1.cpp b/src/mame/drivers/msbc1.cpp index 5ceecb1e4c2..446e3db0d14 100644 --- a/src/mame/drivers/msbc1.cpp +++ b/src/mame/drivers/msbc1.cpp @@ -90,8 +90,6 @@ void msbc1_state::machine_reset() uint8_t *rom = memregion(MC68000R12_TAG)->base(); memcpy(ram, rom, 8); - - m_maincpu->reset(); } void msbc1_state::msbc1(machine_config &config) diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp index 638e1cce022..7c1f67585d6 100644 --- a/src/mame/drivers/neogeo.cpp +++ b/src/mame/drivers/neogeo.cpp @@ -1650,8 +1650,6 @@ void neogeo_base_state::machine_reset() m_audionmi->in_w<1>(0); m_soundlatch->acknowledge_w(); - m_maincpu->reset(); - start_interrupt_timers(); // trigger the IRQ3 that was set by MACHINE_START diff --git a/src/mame/drivers/ob68k1a.cpp b/src/mame/drivers/ob68k1a.cpp index e7efa1696fe..b811463076f 100644 --- a/src/mame/drivers/ob68k1a.cpp +++ b/src/mame/drivers/ob68k1a.cpp @@ -168,8 +168,6 @@ void ob68k1a_state::machine_reset() uint8_t *rom = memregion(MC68000L10_TAG)->base(); memcpy(ram, rom, 8); - - m_maincpu->reset(); } diff --git a/src/mame/drivers/palm.cpp b/src/mame/drivers/palm.cpp index bb88f10700f..1e4ceb3f871 100644 --- a/src/mame/drivers/palm.cpp +++ b/src/mame/drivers/palm.cpp @@ -151,8 +151,6 @@ void palm_state::machine_reset() uint8_t* bios = memregion("bios")->base(); memset(m_ram->pointer(), 0, m_ram->size()); memcpy(m_ram->pointer(), bios, 0x20000); - - m_maincpu->reset(); } /* THIS IS PRETTY MUCH TOTALLY WRONG AND DOESN'T REFLECT THE MC68328'S INTERNAL FUNCTIONALITY AT ALL! */ diff --git a/src/mame/drivers/pm68k.cpp b/src/mame/drivers/pm68k.cpp index 74cadc49838..2b3470e992f 100644 --- a/src/mame/drivers/pm68k.cpp +++ b/src/mame/drivers/pm68k.cpp @@ -55,7 +55,6 @@ void pm68k_state::machine_reset() { uint8_t* ROM = memregion("roms")->base(); memcpy(m_p_base, ROM, 8); - m_maincpu->reset(); } void pm68k_state::pm68k(machine_config &config) diff --git a/src/mame/drivers/pt68k4.cpp b/src/mame/drivers/pt68k4.cpp index b28086c04f3..f8dd84ebcd2 100644 --- a/src/mame/drivers/pt68k4.cpp +++ b/src/mame/drivers/pt68k4.cpp @@ -338,8 +338,6 @@ void pt68k4_state::machine_reset() uint8_t* user1 = memregion("roms")->base(); memcpy((uint8_t*)m_p_base.target(), user1, 8); - m_maincpu->reset(); - m_kclk = true; m_kbit = 0; m_scancode = 0; diff --git a/src/mame/drivers/r9751.cpp b/src/mame/drivers/r9751.cpp index 72b20893e84..c7b6d851c9a 100644 --- a/src/mame/drivers/r9751.cpp +++ b/src/mame/drivers/r9751.cpp @@ -600,9 +600,6 @@ void r9751_state::machine_reset() uint32_t *ram = m_main_ram; memcpy(ram, rom, 8); - - m_maincpu->reset(); - m_pdc->reset(); } /****************************************************************************** diff --git a/src/mame/drivers/sage2.cpp b/src/mame/drivers/sage2.cpp index 5190d825669..d9da6d92f71 100644 --- a/src/mame/drivers/sage2.cpp +++ b/src/mame/drivers/sage2.cpp @@ -388,7 +388,6 @@ void sage2_state::machine_reset() program.unmap_readwrite(0x000000, 0x07ffff); program.install_rom(0x000000, 0x001fff, 0x07e000, m_rom->base()); program.install_read_handler(0xfe0000, 0xfe3fff, read16_delegate(FUNC(sage2_state::rom_r), this)); - m_maincpu->reset(); } READ16_MEMBER(sage2_state::rom_r) diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index 93dfe82841f..d38aee0d3a0 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -9859,7 +9859,6 @@ void isgsm_state::machine_reset() m_sprites->set_bank(i, i); membank(ISGSM_MAIN_BANK)->set_base(memregion("bios")->base()); - m_maincpu->reset(); } diff --git a/src/mame/drivers/sun1.cpp b/src/mame/drivers/sun1.cpp index 4df00473f42..a59a2fa89b9 100644 --- a/src/mame/drivers/sun1.cpp +++ b/src/mame/drivers/sun1.cpp @@ -109,8 +109,6 @@ void sun1_state::machine_reset() uint8_t* user1 = memregion("user1")->base(); memcpy((uint8_t*)m_p_ram.target(),user1,0x4000); - - m_maincpu->reset(); } diff --git a/src/mame/drivers/sun2.cpp b/src/mame/drivers/sun2.cpp index acdc6a49214..bf34333b27d 100644 --- a/src/mame/drivers/sun2.cpp +++ b/src/mame/drivers/sun2.cpp @@ -607,8 +607,6 @@ void sun2_state::machine_reset() m_buserror = 0; memset(m_segmap, 0, sizeof(m_segmap)); memset(m_pagemap, 0, sizeof(m_pagemap)); - - m_maincpu->reset(); } void sun2_state::sun2vme(machine_config &config) diff --git a/src/mame/drivers/sun3.cpp b/src/mame/drivers/sun3.cpp index cda7adcc082..bbae1f255f0 100644 --- a/src/mame/drivers/sun3.cpp +++ b/src/mame/drivers/sun3.cpp @@ -998,7 +998,6 @@ void sun3_state::machine_start() void sun3_state::machine_reset() { - m_maincpu->reset(); m_enable = 0; m_buserr = 0; m_diag = 1; diff --git a/src/mame/drivers/sun3x.cpp b/src/mame/drivers/sun3x.cpp index f0faf273527..7f6f891652a 100644 --- a/src/mame/drivers/sun3x.cpp +++ b/src/mame/drivers/sun3x.cpp @@ -569,8 +569,6 @@ void sun3x_state::machine_reset() memcpy((uint8_t*)m_p_ram.target(),user1,0x10000); - m_maincpu->reset(); - memset(m_iommu, 0, sizeof(m_iommu)); m_enable = 0; diff --git a/src/mame/drivers/tek440x.cpp b/src/mame/drivers/tek440x.cpp index 3d43d6f98c3..0425b681b8d 100644 --- a/src/mame/drivers/tek440x.cpp +++ b/src/mame/drivers/tek440x.cpp @@ -105,8 +105,6 @@ void tek440x_state::machine_reset() uint8_t *RAM = (uint8_t *)m_mainram.target(); memcpy(RAM, ROM, 256); - - m_maincpu->reset(); } diff --git a/src/mame/drivers/ti89.cpp b/src/mame/drivers/ti89.cpp index 61594868fd5..0aa2c0ecf30 100644 --- a/src/mame/drivers/ti89.cpp +++ b/src/mame/drivers/ti89.cpp @@ -475,7 +475,6 @@ void ti68k_state::machine_start() void ti68k_state::machine_reset() { m_ram_enabled = false; - m_maincpu->reset(); m_kb_mask = 0xff; m_on_key = 0; diff --git a/src/mame/drivers/unixpc.cpp b/src/mame/drivers/unixpc.cpp index a85c694d87a..78f552b3caa 100644 --- a/src/mame/drivers/unixpc.cpp +++ b/src/mame/drivers/unixpc.cpp @@ -161,9 +161,6 @@ void unixpc_state::machine_reset() { // force ROM into lower mem on reset m_ramrombank->set_bank(0); - - // reset cpu so that it can pickup the new values - m_maincpu->reset(); } WRITE_LINE_MEMBER(unixpc_state::error_enable_w) diff --git a/src/mame/drivers/x68k.cpp b/src/mame/drivers/x68k.cpp index e77750dcb06..53c42f62ab8 100644 --- a/src/mame/drivers/x68k.cpp +++ b/src/mame/drivers/x68k.cpp @@ -1453,9 +1453,6 @@ void x68k_state::machine_reset() std::fill(std::begin(m_ctrl_drv_out), std::end(m_ctrl_drv_out), 1); std::fill(std::begin(m_access_drv_out), std::end(m_access_drv_out), 1); m_fdc.select_drive = 0; - - // reset CPU - m_maincpu->reset(); } void x68k_state::machine_start() diff --git a/src/mame/machine/lisa.cpp b/src/mame/machine/lisa.cpp index c547c07293f..305eacc1dc9 100644 --- a/src/mame/machine/lisa.cpp +++ b/src/mame/machine/lisa.cpp @@ -998,9 +998,6 @@ void lisa_state::machine_reset() sony_set_enable_lines(m_fdc, 1); /* on lisa2, drive unit 1 is always selected (?) */ } } - - /* reset 68k to pick up proper vectors from MMU */ - m_maincpu->reset(); } INTERRUPT_GEN_MEMBER(lisa_state::lisa_interrupt) -- cgit v1.2.3