mirror of
https://github.com/holub/mame
synced 2025-07-05 01:48:29 +03:00
Added NVRAM to Gekisou. Fixed inputs and promoted to working.
This commit is contained in:
parent
6183e18a21
commit
6e397b034c
@ -98,21 +98,9 @@ Notes:
|
|||||||
- similarly, splndrbt hardware only appears to be capable of displaying 24 sprites.
|
- similarly, splndrbt hardware only appears to be capable of displaying 24 sprites.
|
||||||
This time, they are consecutive in RAM.
|
This time, they are consecutive in RAM.
|
||||||
|
|
||||||
|
- gekisou doesn't have dip switches, but battery backed RAM. To enter the Settings
|
||||||
TODO:
|
menu, press F1. The settings menu is VERY spartan, with no indication of what the
|
||||||
----
|
settings do.
|
||||||
|
|
||||||
- on startup, the CPU continuously writes 5555 to 100000 in a tight loop and expects
|
|
||||||
it to change to exit the loop. The value should obviously be modified by the
|
|
||||||
sprite hardware but it's difficult to guess what should happen. A kludge read
|
|
||||||
handler is used as a work around.
|
|
||||||
|
|
||||||
- the second interrupt source for main CPU is unknown.
|
|
||||||
|
|
||||||
- gekisou inputs. Looks like there should be an EEPROM. Note ROM patches in
|
|
||||||
DRIVER_INIT to make it boot past what I think is the EEPROM read.
|
|
||||||
Settings are changed by pressing the service button and then using joystick
|
|
||||||
to change options.
|
|
||||||
|
|
||||||
Settings: 1 2 3 4 5 6 7 8
|
Settings: 1 2 3 4 5 6 7 8
|
||||||
COIN 1 1 Coin / 1 Play ON ON
|
COIN 1 1 Coin / 1 Play ON ON
|
||||||
@ -128,12 +116,31 @@ TODO:
|
|||||||
CABINET Cocktail ON
|
CABINET Cocktail ON
|
||||||
Upright OFF
|
Upright OFF
|
||||||
|
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
----
|
||||||
|
|
||||||
|
- on startup, the CPU continuously writes 5555 to 100000 in a tight loop and expects
|
||||||
|
it to change to exit the loop. The value should obviously be modified by the
|
||||||
|
sprite hardware but it's difficult to guess what should happen. A kludge read
|
||||||
|
handler is used as a work around.
|
||||||
|
|
||||||
|
- the second interrupt source for main CPU is unknown.
|
||||||
|
|
||||||
|
- gekisou has some unknown device mapped to 580000/5a0000. The bit read from bit 7
|
||||||
|
of 180000 must match the last write, otherwise the game will report a BOARD ERROR
|
||||||
|
during boot.
|
||||||
|
|
||||||
- gekisou: there's a white line crossing the explosion sprite. This doesn't look
|
- gekisou: there's a white line crossing the explosion sprite. This doesn't look
|
||||||
like a bad ROM since the line is crossing several, not concecutive, explosion
|
like a bad ROM since the line is crossing several, not concecutive, explosion
|
||||||
sprites, and no other sprites.
|
sprites, and no other sprites.
|
||||||
|
|
||||||
- gekisou: wrong sprite when hitting helicopter with missile?
|
- gekisou: wrong sprite when hitting helicopter with missile?
|
||||||
|
|
||||||
|
- gekisou: there is a small glitch during the text intro at the beginning of player
|
||||||
|
2 game in cocktail mode: a white line spills out from the text box as characters
|
||||||
|
in the last line are written. This might well be a bug in the original.
|
||||||
|
|
||||||
- splndrbt, hvoltage: the interpretation of the scaling PROMs might be wrong.
|
- splndrbt, hvoltage: the interpretation of the scaling PROMs might be wrong.
|
||||||
The sprite x scaling is not used at all because I couldn't figure it out.
|
The sprite x scaling is not used at all because I couldn't figure it out.
|
||||||
Sprite y scaling is slightly wrong and leaves gaps in tall objects.
|
Sprite y scaling is slightly wrong and leaves gaps in tall objects.
|
||||||
@ -151,6 +158,10 @@ TODO:
|
|||||||
|
|
||||||
- implement low-pass filters on the DAC output
|
- implement low-pass filters on the DAC output
|
||||||
|
|
||||||
|
- the purpose of the sound PROM is unclear. From the schematics, it seems it
|
||||||
|
should influence the MSM5232 clock. However, even removing it from the board
|
||||||
|
doesn't seem to affect the sound.
|
||||||
|
|
||||||
* Special Thanks to:
|
* Special Thanks to:
|
||||||
|
|
||||||
Jarek Burczynski for a superb MSM5232 emulation
|
Jarek Burczynski for a superb MSM5232 emulation
|
||||||
@ -444,9 +455,12 @@ static WRITE8_HANDLER(equites_c0f8_w)
|
|||||||
|
|
||||||
case 4: // c0fc: increment PROM address (written by NMI handler)
|
case 4: // c0fc: increment PROM address (written by NMI handler)
|
||||||
equites_sound_prom_address = (equites_sound_prom_address + 1) & 0x1f;
|
equites_sound_prom_address = (equites_sound_prom_address + 1) & 0x1f;
|
||||||
// FIXME: at this point, the 5-bit value
|
// at this point, the 5-bit value
|
||||||
// memory_region(REGION_SOUND1)[equites_sound_prom_address] & 0x1f
|
// memory_region(REGION_SOUND1)[equites_sound_prom_address] & 0x1f
|
||||||
// should be used for something...
|
// goes to an op-amp and to the base of a transistor. The transistor is part
|
||||||
|
// of a resonator that is used to generate the M5232 clock. The PROM doesn't
|
||||||
|
// actually seem to be important, since even removing it the M5232 clock
|
||||||
|
// continues to come out normally.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5: // c0fd: n.c.
|
case 5: // c0fd: n.c.
|
||||||
@ -633,6 +647,25 @@ static READ16_HANDLER(hvoltage_debug_r)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// Gekisou special handling
|
||||||
|
static int unknown_bit;
|
||||||
|
|
||||||
|
static CUSTOM_INPUT( gekisou_unknown_status )
|
||||||
|
{
|
||||||
|
return unknown_bit;
|
||||||
|
}
|
||||||
|
|
||||||
|
static WRITE16_HANDLER( gekisou_unknown_0_w )
|
||||||
|
{
|
||||||
|
unknown_bit = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static WRITE16_HANDLER( gekisou_unknown_1_w )
|
||||||
|
{
|
||||||
|
unknown_bit = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
// Main CPU Memory Map
|
// Main CPU Memory Map
|
||||||
|
|
||||||
@ -670,7 +703,7 @@ static WRITE16_HANDLER( mcu_halt_clear_w )
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( equites_map, ADDRESS_SPACE_PROGRAM, 16 )
|
static ADDRESS_MAP_START( equites_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||||
AM_RANGE(0x000000, 0x00ffff) AM_ROM // ROM area is written several times (dev system?)
|
AM_RANGE(0x000000, 0x00ffff) AM_ROM // ROM area is written several times (dev system?)
|
||||||
AM_RANGE(0x040000, 0x040fff) AM_RAM AM_BASE(&equites_workram)
|
AM_RANGE(0x040000, 0x040fff) AM_RAM AM_BASE(&equites_workram) AM_BASE(&generic_nvram16) AM_SIZE(&generic_nvram_size) // nvram is for gekisou only
|
||||||
AM_RANGE(0x080000, 0x080fff) AM_READWRITE(equites_fg_videoram_r, equites_fg_videoram_w) // 8-bit
|
AM_RANGE(0x080000, 0x080fff) AM_READWRITE(equites_fg_videoram_r, equites_fg_videoram_w) // 8-bit
|
||||||
AM_RANGE(0x0c0000, 0x0c01ff) AM_RAM AM_WRITE(equites_bg_videoram_w) AM_BASE(&equites_bg_videoram)
|
AM_RANGE(0x0c0000, 0x0c01ff) AM_RAM AM_WRITE(equites_bg_videoram_w) AM_BASE(&equites_bg_videoram)
|
||||||
AM_RANGE(0x0c0200, 0x0c0fff) AM_RAM
|
AM_RANGE(0x0c0200, 0x0c0fff) AM_RAM
|
||||||
@ -686,6 +719,8 @@ static ADDRESS_MAP_START( equites_map, ADDRESS_SPACE_PROGRAM, 16 )
|
|||||||
AM_RANGE(0x1ac000, 0x1ac001) AM_WRITENOP // 8404 control port4
|
AM_RANGE(0x1ac000, 0x1ac001) AM_WRITENOP // 8404 control port4
|
||||||
AM_RANGE(0x1c0000, 0x1c0001) AM_READWRITE(input_port_0_word_r, equites_scrollreg_w) // scroll register[XXYY]
|
AM_RANGE(0x1c0000, 0x1c0001) AM_READWRITE(input_port_0_word_r, equites_scrollreg_w) // scroll register[XXYY]
|
||||||
AM_RANGE(0x380000, 0x380001) AM_WRITE(equites_bgcolor_w) // bg color register[CC--]
|
AM_RANGE(0x380000, 0x380001) AM_WRITE(equites_bgcolor_w) // bg color register[CC--]
|
||||||
|
// 580000 unknown (protection?) (gekisou only, installed by DRIVER_INIT)
|
||||||
|
// 5a0000 unknown (protection?) (gekisou only, installed by DRIVER_INIT)
|
||||||
AM_RANGE(0x780000, 0x780001) AM_WRITE(watchdog_reset16_w)
|
AM_RANGE(0x780000, 0x780001) AM_WRITE(watchdog_reset16_w)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -809,24 +844,12 @@ static INPUT_PORTS_START( gekisou )
|
|||||||
#if EASY_TEST_MODE
|
#if EASY_TEST_MODE
|
||||||
PORT_SERVICE( 0x0300, IP_ACTIVE_HIGH )
|
PORT_SERVICE( 0x0300, IP_ACTIVE_HIGH )
|
||||||
#endif
|
#endif
|
||||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR ( Unknown ) )
|
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Settings") PORT_CODE(KEYCODE_F1)
|
||||||
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
|
PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
PORT_DIPSETTING( 0x0400, DEF_STR( On ) )
|
PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR ( Unknown ) )
|
PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
|
PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||||
PORT_DIPSETTING( 0x0800, DEF_STR( On ) )
|
PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(gekisou_unknown_status, 0)
|
||||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR ( Unknown ) )
|
|
||||||
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
|
|
||||||
PORT_DIPSETTING( 0x1000, DEF_STR( On ) )
|
|
||||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR ( Unknown ) )
|
|
||||||
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
|
|
||||||
PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
|
|
||||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR ( Unknown ) )
|
|
||||||
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
|
|
||||||
PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
|
|
||||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR ( Unknown ) )
|
|
||||||
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
|
|
||||||
PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
|
|
||||||
|
|
||||||
/* this is actually a variable resistor */
|
/* this is actually a variable resistor */
|
||||||
PORT_START_TAG(FRQ_ADJUSTER_TAG)
|
PORT_START_TAG(FRQ_ADJUSTER_TAG)
|
||||||
@ -1192,6 +1215,16 @@ static MACHINE_DRIVER_START( equites )
|
|||||||
MDRV_MACHINE_RESET(equites)
|
MDRV_MACHINE_RESET(equites)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
|
static MACHINE_DRIVER_START( gekisou )
|
||||||
|
MDRV_IMPORT_FROM(equites)
|
||||||
|
|
||||||
|
// gekisou has battery-backed RAM to store settings
|
||||||
|
MDRV_NVRAM_HANDLER(generic_0fill)
|
||||||
|
|
||||||
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( splndrbt )
|
static MACHINE_DRIVER_START( splndrbt )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -1785,21 +1818,12 @@ static DRIVER_INIT( kouyakyu )
|
|||||||
|
|
||||||
static DRIVER_INIT( gekisou )
|
static DRIVER_INIT( gekisou )
|
||||||
{
|
{
|
||||||
UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1);
|
|
||||||
|
|
||||||
unpack_region(REGION_GFX2);
|
unpack_region(REGION_GFX2);
|
||||||
unpack_region(REGION_GFX3);
|
unpack_region(REGION_GFX3);
|
||||||
|
|
||||||
// FIXME - patch input check
|
// install special handlers for unknown device (protection?)
|
||||||
rom[0x8b0>>1] = 0x4e71;
|
memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x580000, 0x580001, 0, 0, gekisou_unknown_0_w);
|
||||||
rom[0x8d4>>1] = 0x4e71;
|
memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x5a0000, 0x5a0001, 0, 0, gekisou_unknown_1_w);
|
||||||
rom[0xb3a>>1] = 0x4e71;
|
|
||||||
rom[0xb3c>>1] = 0x4e71;
|
|
||||||
// patch ROM checksum test too
|
|
||||||
rom[0x4b4>>1] = 0x4e71;
|
|
||||||
rom[0x4b6>>1] = 0x4e71;
|
|
||||||
rom[0x4bc>>1] = 0x4e71;
|
|
||||||
rom[0x4be>>1] = 0x4e71;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static DRIVER_INIT( splndrbt )
|
static DRIVER_INIT( splndrbt )
|
||||||
@ -1823,7 +1847,7 @@ static DRIVER_INIT( hvoltage )
|
|||||||
// Equites Hardware
|
// Equites Hardware
|
||||||
GAME( 1984, equites, 0, equites, equites, equites, ROT90, "Alpha Denshi Co.", "Equites", GAME_IMPERFECT_SOUND )
|
GAME( 1984, equites, 0, equites, equites, equites, ROT90, "Alpha Denshi Co.", "Equites", GAME_IMPERFECT_SOUND )
|
||||||
GAME( 1984, equitess, equites, equites, equites, equites, ROT90, "Alpha Denshi Co. (Sega license)", "Equites (Sega)", GAME_IMPERFECT_SOUND )
|
GAME( 1984, equitess, equites, equites, equites, equites, ROT90, "Alpha Denshi Co. (Sega license)", "Equites (Sega)", GAME_IMPERFECT_SOUND )
|
||||||
GAME( 1985, gekisou, 0, equites, gekisou, gekisou, ROT90, "Eastern Corp.", "Gekisou (Japan)", GAME_NO_COCKTAIL | GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
|
GAME( 1985, gekisou, 0, gekisou, gekisou, gekisou, ROT90, "Eastern Corp.", "Gekisou (Japan)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
|
||||||
GAME( 1984, bullfgtr, 0, equites, bullfgtr, bullfgtr, ROT90, "Alpha Denshi Co.", "Bull Fighter", GAME_IMPERFECT_SOUND )
|
GAME( 1984, bullfgtr, 0, equites, bullfgtr, bullfgtr, ROT90, "Alpha Denshi Co.", "Bull Fighter", GAME_IMPERFECT_SOUND )
|
||||||
GAME( 1984, bullfgts, bullfgtr, equites, bullfgtr, bullfgtr, ROT90, "Alpha Denshi Co. (Sega license)", "Bull Fighter (Sega)", GAME_IMPERFECT_SOUND )
|
GAME( 1984, bullfgts, bullfgtr, equites, bullfgtr, bullfgtr, ROT90, "Alpha Denshi Co. (Sega license)", "Bull Fighter (Sega)", GAME_IMPERFECT_SOUND )
|
||||||
GAME( 1985, kouyakyu, 0, equites, kouyakyu, kouyakyu, ROT0, "Alpha Denshi Co.", "The Koukouyakyuh", GAME_IMPERFECT_SOUND )
|
GAME( 1985, kouyakyu, 0, equites, kouyakyu, kouyakyu, ROT0, "Alpha Denshi Co.", "The Koukouyakyuh", GAME_IMPERFECT_SOUND )
|
||||||
|
Loading…
Reference in New Issue
Block a user