summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2015-10-10 19:27:26 +0200
committer hap <happppp@users.noreply.github.com>2015-10-10 19:27:26 +0200
commita2acf18c5af62ac32d34640df3bf644b791f8ea9 (patch)
tree9aa4e0fc99f9681214465f7c95db5fd7f7a51ecb
parent117c7ed9ce673d8ae7870b94a65e3090514e0763 (diff)
parentc020c87f77485c2bc11eb7c6d335f5f3d32b456c (diff)
Merge pull request #377 from kazblox/master
Verify the clocks in 1942p; fix spcwarp boot procedure.
-rw-r--r--src/mame/drivers/1942.c19
-rw-r--r--src/mame/drivers/galaxold.c56
2 files changed, 65 insertions, 10 deletions
diff --git a/src/mame/drivers/1942.c b/src/mame/drivers/1942.c
index 94168883301..b5856656097 100644
--- a/src/mame/drivers/1942.c
+++ b/src/mame/drivers/1942.c
@@ -61,9 +61,14 @@ correctly.
***************************************************************************/
-#define MAIN_CPU_CLOCK (XTAL_12MHz/3) /* 12MHz is the only OSC on the PCB */
-#define SOUND_CPU_CLOCK (XTAL_12MHz/4) /* 12MHz is the only OSC on the PCB */
-#define AUDIO_CLOCK (XTAL_12MHz/8) /* 12MHz is the only OSC on the PCB */
+/* 12mhz OSC */
+#define MAIN_CPU_CLOCK (XTAL_12MHz/3)
+#define SOUND_CPU_CLOCK (XTAL_12MHz/4)
+#define AUDIO_CLOCK (XTAL_12MHz/8)
+/* 20mhz OSC - both Z80s are 4 MHz */
+#define MAIN_CPU_CLOCK_1942P (XTAL_20MHz/5)
+#define SOUND_CPU_CLOCK_1942P (XTAL_20MHz/5)
+#define AUDIO_CLOCK_1942P (XTAL_20MHz/16)
#include "emu.h"
#include "cpu/z80/z80.h"
@@ -620,11 +625,11 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_START( 1942p, _1942_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", Z80, MAIN_CPU_CLOCK) /* 4 MHz ??? */
+ MCFG_CPU_ADD("maincpu", Z80, MAIN_CPU_CLOCK_1942P) /* 4 MHz - verified on PCB */
MCFG_CPU_PROGRAM_MAP(c1942p_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", _1942_state, irq0_line_hold) // note, powerups won't move down the screen with the original '1942' logic.
- MCFG_CPU_ADD("audiocpu", Z80, SOUND_CPU_CLOCK) /* 3 MHz ??? */
+ MCFG_CPU_ADD("audiocpu", Z80, SOUND_CPU_CLOCK_1942P) /* 4 MHz - verified on PCB */
MCFG_CPU_PROGRAM_MAP(c1942p_sound_map)
MCFG_CPU_IO_MAP(c1942p_sound_io)
MCFG_CPU_PERIODIC_INT_DRIVER(_1942_state, irq0_line_hold, 4*60)
@@ -650,9 +655,9 @@ static MACHINE_CONFIG_START( 1942p, _1942_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("ay1", AY8910, AUDIO_CLOCK) /* 1.5 MHz */
+ MCFG_SOUND_ADD("ay1", AY8910, AUDIO_CLOCK_1942P) /* 1.25 MHz - verified on PCB */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
- MCFG_SOUND_ADD("ay2", AY8910, AUDIO_CLOCK) /* 1.5 MHz */
+ MCFG_SOUND_ADD("ay2", AY8910, AUDIO_CLOCK_1942P) /* 1.25 MHz - verified on PCB */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/galaxold.c b/src/mame/drivers/galaxold.c
index 1e3914aa070..dd53f3564ee 100644
--- a/src/mame/drivers/galaxold.c
+++ b/src/mame/drivers/galaxold.c
@@ -361,7 +361,6 @@ Stephh's notes (based on the games Z80 code and some tests) for other games :
to 0x00, so routine at 0x042a ALWAYS thinks that you've pressed COIN2,
and as a consequence, it ALWAYS adds 1 credit (even when you are playing) !
-
***************************************************************************/
#include "emu.h"
@@ -902,6 +901,36 @@ static ADDRESS_MAP_START( hunchbkg, AS_PROGRAM, 8, galaxold_state )
AM_RANGE(0x6000, 0x6fff) AM_ROM
ADDRESS_MAP_END
+/* majorly shifted, hunchbkg style */
+static ADDRESS_MAP_START( spcwarp, AS_PROGRAM, 8, galaxold_state )
+ AM_RANGE(0x0000, 0x0fff) AM_ROM
+ AM_RANGE(0x1480, 0x14bf) AM_MIRROR(0x6000) AM_RAM_WRITE(galaxold_attributesram_w) AM_SHARE("attributesram")
+ AM_RANGE(0x14c0, 0x14ff) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("spriteram")
+ AM_RANGE(0x1500, 0x1500) AM_MIRROR(0x6000) AM_READ_PORT("IN0")
+ AM_RANGE(0x1500, 0x1501) AM_MIRROR(0x6000) AM_WRITE(galaxold_leds_w)
+ AM_RANGE(0x1502, 0x1502) AM_MIRROR(0x6000) AM_WRITE(galaxold_coin_lockout_w)
+ AM_RANGE(0x1503, 0x1503) AM_MIRROR(0x6000) AM_WRITE(galaxold_coin_counter_w)
+ AM_RANGE(0x1504, 0x1507) AM_MIRROR(0x6000) AM_DEVWRITE("cust", galaxian_sound_device, lfo_freq_w)
+ AM_RANGE(0x1580, 0x1580) AM_MIRROR(0x6000) AM_READ_PORT("IN1")
+ AM_RANGE(0x1580, 0x1587) AM_MIRROR(0x6000) AM_DEVWRITE("cust", galaxian_sound_device, sound_w)
+ AM_RANGE(0x1583, 0x1583) AM_MIRROR(0x6000) AM_DEVWRITE("cust", galaxian_sound_device, noise_enable_w)
+ AM_RANGE(0x1585, 0x1585) AM_MIRROR(0x6000) AM_DEVWRITE("cust", galaxian_sound_device, fire_enable_w)
+ AM_RANGE(0x1586, 0x1587) AM_MIRROR(0x6000) AM_DEVWRITE("cust", galaxian_sound_device, vol_w)
+ // everything else in the $16xx range is moved to $17xx
+ AM_RANGE(0x1680, 0x1680) AM_MIRROR(0x6000) AM_READ(watchdog_reset_r) AM_DEVWRITE("cust", galaxian_sound_device, pitch_w)
+ AM_RANGE(0x1700, 0x1700) AM_MIRROR(0x6000) AM_READ_PORT("DSW0")
+ AM_RANGE(0x1701, 0x1701) AM_MIRROR(0x6000) AM_WRITE(galaxold_nmi_enable_w)
+ AM_RANGE(0x1704, 0x1704) AM_MIRROR(0x6000) AM_WRITE(galaxold_stars_enable_w)
+ AM_RANGE(0x1706, 0x1706) AM_MIRROR(0x6000) AM_WRITE(galaxold_flip_screen_x_w)
+ AM_RANGE(0x1707, 0x1707) AM_MIRROR(0x6000) AM_WRITE(galaxold_flip_screen_y_w)
+ // the rest
+ AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x6000) AM_WRITE(galaxold_videoram_w) AM_SHARE("videoram")
+ AM_RANGE(0x1c00, 0x1fff) AM_MIRROR(0x6000) AM_RAM
+ AM_RANGE(0x2000, 0x2fff) AM_ROM
+ AM_RANGE(0x4000, 0x4fff) AM_ROM
+ AM_RANGE(0x6000, 0x6fff) AM_ROM
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( hunchbkg_io, AS_IO, 8, galaxold_state )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READNOP // not used
ADDRESS_MAP_END
@@ -2734,6 +2763,24 @@ static MACHINE_CONFIG_DERIVED( hunchbkg, galaxold_base )
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( spcwarp, galaxold_base )
+ /* hunchbkg but with different banking */
+ /* basic machine hardware */
+ MCFG_CPU_REPLACE("maincpu", S2650, PIXEL_CLOCK / 4)
+
+ MCFG_CPU_PROGRAM_MAP(spcwarp)
+ MCFG_CPU_IO_MAP(hunchbkg_io)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(galaxold_state,hunchbkg_irq_callback)
+
+ MCFG_DEVICE_MODIFY("7474_9m_1")
+ MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("maincpu", s2650_device, write_sense))
+
+ MCFG_MACHINE_RESET_OVERRIDE(galaxold_state,hunchbkg)
+
+ MCFG_FRAGMENT_ADD(galaxian_audio)
+MACHINE_CONFIG_END
+
+
static MACHINE_CONFIG_DERIVED( tazzmang, galaxian )
/* basic machine hardware */
@@ -3443,12 +3490,15 @@ ROM_START( hunchbkg )
ROM_END
ROM_START( spcwarp )
+ // unknown Century Electronics space shooter which involves shooting down enemy ships to use them yourself for increasing rate of fire
+ // came out of an undumped ROMS collection - we have no idea if this is Space Warp but it's a unique dump compared to everything else.
ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "swarpt7f.bin", 0x0000, 0x1000, CRC(04d744e3) SHA1(db8218510052a05670cb0b722b73d3f10464788c) )
ROM_LOAD( "swarpt7h.bin", 0x2000, 0x1000, CRC(34a36536) SHA1(bc438515618683b2a7c29637871ee00ed95ad7f8) )
+ /* missing rom at $4000? todo: check valid calls */
ROM_LOAD( "swarpt7m.bin", 0x6000, 0x1000, BAD_DUMP CRC(a2dff6c8) SHA1(d1c72848450dc5ff386dc94a26e4bf704ccc7121) ) /* ROMCMP reports "BADADDR xxxxxx-xxxxx". Observed data sequence repeated every 32 bytes */
- ROM_REGION( 0x1000, "gfx1", 0 ) // gfx are very similar to 'cosmos' so I think it's a converion of that to Galaxian HW, maybe under hthe title Space Warp.
+ ROM_REGION( 0x1000, "gfx1", 0 ) // gfx are very similar to 'cosmos'
ROM_LOAD( "swarpb1h.bin", 0x0000, 0x0800, CRC(6ee3b5f7) SHA1(8150f2ecd59d3a165c0541b550664c56d049edd5) )
ROM_LOAD( "swarpb1k.bin", 0x0800, 0x0800, CRC(da4cee6b) SHA1(28b91381658f598fa62049489beee443232825c6) )
@@ -3740,7 +3790,7 @@ GAME( 1981, froggerv, frogger, videotron, froggerv, driver_device, 0,
/* S2650 games */
// YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY, FULLNAME, FLAGS, LAYOUT
GAME( 1983, hunchbkg, hunchbak, hunchbkg, hunchbkg, driver_device, 0, ROT90, "Century Electronics", "Hunchback (Galaxian hardware)", MACHINE_SUPPORTS_SAVE )
-GAME( 1983, spcwarp, 0, hunchbkg, hunchbkg, driver_device, 0, ROT90, "Century Electronics", "Space Warp?", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // bad dump
+GAME( 1983, spcwarp, 0, spcwarp, hunchbkg, driver_device, 0, ROT90, "Century Electronics", "Space Warp?", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_WRONG_COLORS ) // bad dump
GAME( 1984, drivfrcg, drivfrcp, drivfrcg, drivfrcg, driver_device, 0, ROT90, "Shinkai Inc. (Magic Electronics USA license)", "Driving Force (Galaxian conversion)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, drivfrct, drivfrcp, drivfrcg, drivfrcg, driver_device, 0, ROT90, "bootleg (EMT Germany)", "Top Racer (bootleg of Driving Force)", MACHINE_SUPPORTS_SAVE ) // Video Klein PCB
GAME( 1985, drivfrcb, drivfrcp, drivfrcg, drivfrcg, driver_device, 0, ROT90, "bootleg (Elsys Software)", "Driving Force (Galaxian conversion bootleg)", MACHINE_SUPPORTS_SAVE )