summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/meyc8088.c
diff options
context:
space:
mode:
author Michaël Banaan Ananas <happppp@users.noreply.github.com>2012-04-30 19:54:40 +0000
committer Michaël Banaan Ananas <happppp@users.noreply.github.com>2012-04-30 19:54:40 +0000
commit0b53b623172ffcf18157317a028119b4976f46b2 (patch)
tree7c03fd6e50b7d15a72231e62c5f370655a9189a7 /src/mame/drivers/meyc8088.c
parent8c8b37b75af76ef7f413d1df896a632deaf1909c (diff)
game promoted to working
------------- Golden Arrow (Standard G8-03) [hap, dox, DHS]
Diffstat (limited to 'src/mame/drivers/meyc8088.c')
-rw-r--r--src/mame/drivers/meyc8088.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/mame/drivers/meyc8088.c b/src/mame/drivers/meyc8088.c
index 68d86017ef3..02117dc6364 100644
--- a/src/mame/drivers/meyc8088.c
+++ b/src/mame/drivers/meyc8088.c
@@ -10,9 +10,15 @@
also thanks to Darrell Hal Smith, Kevin Mullins
+ To initialize battery RAM, go into Meter Read mode (F1 -> 9),
+ and then press the Meter Reset button.
+
+ If a game is not turned off properly, eg. exiting MAME
+ in mid-game, it may run faulty on the next boot.
+ Enable the Night Switch to prevent this.
+
+
TODO:
- - fix vblank failure
- * dox note: to boot it in debugger, set bp ff5ec, and then ip=f5fe
- coincounters/hopper
****************************************************************/
@@ -30,11 +36,13 @@ public:
meyc8088_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) ,
m_maincpu(*this,"maincpu"),
- m_vram(*this, "vram")
+ m_vram(*this, "vram"),
+ m_heartbeat(*this, "heartbeat")
{ }
required_device<cpu_device> m_maincpu;
required_shared_ptr<UINT8> m_vram;
+ required_device<timer_device> m_heartbeat;
UINT8 m_status;
UINT8 m_common;
@@ -148,9 +156,17 @@ static SCREEN_VBLANK( meyc8088 )
***************************************************************************/
+TIMER_DEVICE_CALLBACK( heartbeat_callback )
+{
+ meyc8088_state *state = timer.machine().driver_data<meyc8088_state>();
+ state->m_status |= 0x20;
+}
+
WRITE8_MEMBER(meyc8088_state::drive_w)
{
+ // drivers go into high-impedance state ~100ms after write (LS374 /OC)
m_status &= ~0x20;
+ m_heartbeat->adjust(attotime::from_msec(100));
// d0-d3: DC counter drivers
// d4-d7: AC motor drivers
@@ -221,7 +237,7 @@ static READ8_DEVICE_HANDLER(meyc8088_status_r)
// d3: N/C
// d4: battery ok
// d5: /drive on
- return (state->m_status & 7) | 0x18;
+ return (state->m_status & 0x27) | 0x18;
}
@@ -351,7 +367,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( meyc8088, meyc8088_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", I8088, XTAL_15MHz / 3)
+ MCFG_CPU_ADD("maincpu", I8088, (XTAL_15MHz / 3) * 0.95) // NOTE: underclocked to prevent errors on diagnostics, MAME i8088 cycle timing is probably inaccurate
MCFG_CPU_PROGRAM_MAP(meyc8088_map)
MCFG_I8155_ADD("i8155_1", XTAL_15MHz / (3*1), i8155_intf[0])
@@ -359,6 +375,8 @@ static MACHINE_CONFIG_START( meyc8088, meyc8088_state )
MCFG_NVRAM_ADD_0FILL("nvram")
+ MCFG_TIMER_ADD("heartbeat", heartbeat_callback)
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL_15MHz/3, 320, 0, 256, 261, 0, 224)
@@ -387,4 +405,4 @@ ROM_START( gldarrow )
ROM_END
-GAME( 1984, gldarrow, 0, meyc8088, gldarrow, 0, ROT0, "Meyco Games, Inc.", "Golden Arrow (Standard G8-03)", GAME_NOT_WORKING )
+GAME( 1984, gldarrow, 0, meyc8088, gldarrow, 0, ROT0, "Meyco Games, Inc.", "Golden Arrow (Standard G8-03)", 0 )