summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-04-29 19:41:00 -0400
committer AJR <ajrhacker@users.noreply.github.com>2019-04-29 19:46:51 -0400
commit8f7757297aa5115c3d1d97bad8af55e231caef79 (patch)
treee557f2093894a6ca8b983da67db96aef6eb2b87c
parent6305e7346c3b8dd1c943f3d69b761983e327d0ee (diff)
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.
-rw-r--r--src/devices/cpu/m68000/m68kcpu.cpp12
-rw-r--r--src/mame/drivers/cdi.cpp2
-rw-r--r--src/mame/drivers/cgc7900.cpp2
-rw-r--r--src/mame/drivers/codata.cpp1
-rw-r--r--src/mame/drivers/dim68k.cpp2
-rw-r--r--src/mame/drivers/fs3216.cpp3
-rw-r--r--src/mame/drivers/ft68m.cpp1
-rw-r--r--src/mame/drivers/ht68k.cpp2
-rw-r--r--src/mame/drivers/iris3130.cpp2
-rw-r--r--src/mame/drivers/m20.cpp1
-rw-r--r--src/mame/drivers/mac128.cpp1
-rw-r--r--src/mame/drivers/magicard.cpp1
-rw-r--r--src/mame/drivers/megadriv.cpp1
-rw-r--r--src/mame/drivers/megadriv_rad.cpp1
-rw-r--r--src/mame/drivers/miniframe.cpp3
-rw-r--r--src/mame/drivers/model2.cpp1
-rw-r--r--src/mame/drivers/model3.cpp1
-rw-r--r--src/mame/drivers/ms9540.cpp1
-rw-r--r--src/mame/drivers/msbc1.cpp2
-rw-r--r--src/mame/drivers/neogeo.cpp2
-rw-r--r--src/mame/drivers/ob68k1a.cpp2
-rw-r--r--src/mame/drivers/palm.cpp2
-rw-r--r--src/mame/drivers/pm68k.cpp1
-rw-r--r--src/mame/drivers/pt68k4.cpp2
-rw-r--r--src/mame/drivers/r9751.cpp3
-rw-r--r--src/mame/drivers/sage2.cpp1
-rw-r--r--src/mame/drivers/segas16b.cpp1
-rw-r--r--src/mame/drivers/sun1.cpp2
-rw-r--r--src/mame/drivers/sun2.cpp2
-rw-r--r--src/mame/drivers/sun3.cpp1
-rw-r--r--src/mame/drivers/sun3x.cpp2
-rw-r--r--src/mame/drivers/tek440x.cpp2
-rw-r--r--src/mame/drivers/ti89.cpp1
-rw-r--r--src/mame/drivers/unixpc.cpp3
-rw-r--r--src/mame/drivers/x68k.cpp3
-rw-r--r--src/mame/machine/lisa.cpp3
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)