diff options
author | Jose Tejada <jotego@gmail.com> | 2019-09-04 15:47:37 +0200 |
---|---|---|
committer | Jose Tejada <jotego@gmail.com> | 2019-09-04 15:47:37 +0200 |
commit | da027a54976d7b8ef7782576998094f889441009 (patch) | |
tree | aa069afeeabd416ae91b476c271e995160a6618f | |
parent | 80171a45ce42e98e7d6f45b592d9cda01d98b3d9 (diff) |
Fixed main CPU frequency for Commando.
Removed watchdog from GnG
-rw-r--r-- | src/mame/drivers/commando.cpp | 17 | ||||
-rw-r--r-- | src/mame/drivers/gng.cpp | 10 |
2 files changed, 24 insertions, 3 deletions
diff --git a/src/mame/drivers/commando.cpp b/src/mame/drivers/commando.cpp index 0c93904e620..8d9f58404ec 100644 --- a/src/mame/drivers/commando.cpp +++ b/src/mame/drivers/commando.cpp @@ -44,6 +44,16 @@ Note : there is an ingame typo bug that doesn't display the bonus life values ***************************************************************************/ +// Notes by Jose Tejada (jotego): +// The main CPU frequency is 3 MHz, after a two-stage FF clock divider. +// The CPU clock is gated by bus arbitrion logic. The CPU clock is halted until +// video hardware has an opening in memory access, then the CPU is allowed to +// access common memory. This slows down the CPU but doesn't alter its basic 3MHz frequency. +// +// There is also a DMA circuit that copies object data from the CPU RAM to a buffer +// this also slows down the CPU as it is halted during that time. + + #include "emu.h" #include "includes/commando.h" @@ -66,6 +76,7 @@ void commando_state::commando_map(address_map &map) map(0xc004, 0xc004).portr("DSW2"); map(0xc800, 0xc800).w("soundlatch", FUNC(generic_latch_8_device::write)); map(0xc804, 0xc804).w(FUNC(commando_state::commando_c804_w)); + // 0xc806 triggers the DMA (not emulated) map(0xc808, 0xc809).w(FUNC(commando_state::commando_scrollx_w)); map(0xc80a, 0xc80b).w(FUNC(commando_state::commando_scrolly_w)); map(0xd000, 0xd3ff).ram().w(FUNC(commando_state::commando_videoram2_w)).share("videoram2"); @@ -225,7 +236,9 @@ GFXDECODE_END #define XTAL 12000000 #define PHI_B XTAL/2/2 -#define PHI_MAIN 4000000 // ??? too complicated to trace from schematics +#define PHI_MAIN XTAL/2/2 // As seen in the schematics: +// the signal goes into a bus arbitrion logic that doesn't affect its frequency +// although the CPU gets slowed down when accessing char/background memories /* Interrupt Generator */ @@ -255,7 +268,7 @@ void commando_state::machine_reset() void commando_state::commando(machine_config &config) { /* basic machine hardware */ - Z80(config, m_maincpu, PHI_MAIN); // ??? + Z80(config, m_maincpu, PHI_MAIN); // 3 MHz m_maincpu->set_addrmap(AS_PROGRAM, &commando_state::commando_map); m_maincpu->set_addrmap(AS_OPCODES, &commando_state::decrypted_opcodes_map); diff --git a/src/mame/drivers/gng.cpp b/src/mame/drivers/gng.cpp index 7c013a48f85..01065ca6695 100644 --- a/src/mame/drivers/gng.cpp +++ b/src/mame/drivers/gng.cpp @@ -20,6 +20,14 @@ Notes: - Increased "gfx3" to address 0x400 sprites, to avoid Ghosts'n Goblins from drawing a bad sprite. (18/08/2005 Pierpaolo Prazzoli) + Notes by Jose Tejada (jotego) + +There is no watchdog in GnG, as previously stated in the MAME driver. +Instead, there is a DMA circuit that copies object data from the CPU RAM to a buffer +this also slows down the CPU as it is halted during that time. +The DMA is triggered when a certain memory location is addressed. That location was +thought to be a watchdog before. + ***************************************************************************/ #include "emu.h" @@ -71,7 +79,7 @@ void gng_state::gng_map(address_map &map) map(0x3a00, 0x3a00).w("soundlatch", FUNC(generic_latch_8_device::write)); map(0x3b08, 0x3b09).w(FUNC(gng_state::gng_bgscrollx_w)); map(0x3b0a, 0x3b0b).w(FUNC(gng_state::gng_bgscrolly_w)); - map(0x3c00, 0x3c00).noprw(); /* watchdog? */ + // 0x3c00 is the DMA trigger. Not emulated. map(0x3d00, 0x3d07).w("mainlatch", FUNC(ls259_device::write_d0)); map(0x3e00, 0x3e00).w(FUNC(gng_state::gng_bankswitch_w)); map(0x4000, 0x5fff).bankr("bank1"); |