Add skeleton device for Video System C7-01 GGA

(nw) This has uncovered what might be a core bug: AM_SELECT does not work properly with masked handlers.
This commit is contained in:
AJR 2017-03-18 11:54:38 -04:00
parent 6ffb21f39b
commit cd7babc775
15 changed files with 243 additions and 75 deletions

View File

@ -4107,6 +4107,8 @@ files {
createMAMEProjects(_target, _subtarget, "vsystem")
files {
MAME_DIR .. "src/mame/video/vsystem_gga.cpp",
MAME_DIR .. "src/mame/video/vsystem_gga.h",
MAME_DIR .. "src/mame/video/vsystem_spr.cpp",
MAME_DIR .. "src/mame/video/vsystem_spr.h",
MAME_DIR .. "src/mame/video/vsystem_spr2.cpp",

View File

@ -67,6 +67,7 @@ Verification still needed for the other PCBs.
#include "cpu/z80/z80.h"
#include "sound/2610intf.h"
#include "sound/3812intf.h"
#include "video/vsystem_gga.h"
#include "screen.h"
#include "speaker.h"
@ -144,6 +145,7 @@ static ADDRESS_MAP_START( pspikes_map, AS_PROGRAM, 16, aerofgt_state )
AM_RANGE(0xfff002, 0xfff003) AM_READ_PORT("IN1") AM_WRITE8(pspikes_gfxbank_w, 0x00ff)
AM_RANGE(0xfff004, 0xfff005) AM_READ_PORT("DSW") AM_WRITE(aerofgt_bg1scrolly_w)
AM_RANGE(0xfff006, 0xfff007) AM_READWRITE8(pending_command_r, sound_command_w, 0x00ff)
AM_RANGE(0xfff400, 0xfff403) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( pspikesb_map, AS_PROGRAM, 16, aerofgt_state )
@ -161,6 +163,7 @@ static ADDRESS_MAP_START( pspikesb_map, AS_PROGRAM, 16, aerofgt_state )
AM_RANGE(0xfff004, 0xfff005) AM_READ_PORT("DSW") AM_WRITE(aerofgt_bg1scrolly_w)
AM_RANGE(0xfff006, 0xfff007) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
AM_RANGE(0xfff008, 0xfff009) AM_WRITE(pspikesb_oki_banking_w)
AM_RANGE(0xfff400, 0xfff403) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( spikes91_map, AS_PROGRAM, 16, aerofgt_state )
@ -196,6 +199,7 @@ static ADDRESS_MAP_START( pspikesc_map, AS_PROGRAM, 16, aerofgt_state )
AM_RANGE(0xfff004, 0xfff005) AM_READ_PORT("DSW")
AM_RANGE(0xfff004, 0xfff005) AM_WRITE(aerofgt_bg1scrolly_w)
AM_RANGE(0xfff006, 0xfff007) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
AM_RANGE(0xfff400, 0xfff403) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( karatblz_map, AS_PROGRAM, 16, aerofgt_state )
@ -217,6 +221,7 @@ static ADDRESS_MAP_START( karatblz_map, AS_PROGRAM, 16, aerofgt_state )
AM_RANGE(0x0ff00a, 0x0ff00b) AM_READ8(pending_command_r, 0x00ff) AM_WRITE(aerofgt_bg1scrolly_w)
AM_RANGE(0x0ff00c, 0x0ff00d) AM_WRITE(aerofgt_bg2scrollx_w)
AM_RANGE(0x0ff00e, 0x0ff00f) AM_WRITE(aerofgt_bg2scrolly_w)
AM_RANGE(0x0ff400, 0x0ff403) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( spinlbrk_map, AS_PROGRAM, 16, aerofgt_state )
@ -233,6 +238,7 @@ static ADDRESS_MAP_START( spinlbrk_map, AS_PROGRAM, 16, aerofgt_state )
AM_RANGE(0xfff006, 0xfff007) AM_WRITE8(sound_command_w, 0x00ff)
// AM_RANGE(0xfff008, 0xfff009) - read when analog inputs are enabled
// AM_RANGE(0xfff00a, 0xfff00b) /
AM_RANGE(0xfff400, 0xfff403) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( turbofrc_map, AS_PROGRAM, 16, aerofgt_state )
@ -255,6 +261,7 @@ static ADDRESS_MAP_START( turbofrc_map, AS_PROGRAM, 16, aerofgt_state )
AM_RANGE(0x0ff008, 0x0ff00b) AM_WRITE(turbofrc_gfxbank_w)
AM_RANGE(0x0ff00c, 0x0ff00d) AM_WRITENOP /* related to bg2 (written together with the scroll registers) */
AM_RANGE(0x0ff00e, 0x0ff00f) AM_WRITE8(sound_command_w, 0xff00)
AM_RANGE(0x0ff400, 0x0ff403) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( aerofgtb_map, AS_PROGRAM, 16, aerofgt_state )
@ -274,6 +281,7 @@ static ADDRESS_MAP_START( aerofgtb_map, AS_PROGRAM, 16, aerofgt_state )
AM_RANGE(0x0fe008, 0x0fe009) AM_READ_PORT("DSW2")
AM_RANGE(0x0fe008, 0x0fe00b) AM_WRITE(turbofrc_gfxbank_w)
AM_RANGE(0x0fe00e, 0x0fe00f) AM_WRITE8(sound_command_w, 0xff00)
AM_RANGE(0x0fe400, 0x0fe403) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
AM_RANGE(0x0ff000, 0x0fffff) AM_RAM AM_SHARE("rasterram") /* used only for the scroll registers */
ADDRESS_MAP_END
@ -322,8 +330,7 @@ static ADDRESS_MAP_START( aerfboot_map, AS_PROGRAM, 16, aerofgt_state )
AM_RANGE(0x0fe00e, 0x0fe00f) AM_WRITE8(aerfboot_soundlatch_w, 0xff00)
AM_RANGE(0x0fe010, 0x0fe011) AM_WRITENOP
AM_RANGE(0x0fe012, 0x0fe013) AM_WRITENOP
AM_RANGE(0x0fe400, 0x0fe401) AM_WRITENOP
AM_RANGE(0x0fe402, 0x0fe403) AM_WRITENOP
AM_RANGE(0x0fe400, 0x0fe403) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
AM_RANGE(0x0ff000, 0x0fffff) AM_RAM AM_SHARE("rasterram") /* used only for the scroll registers */
AM_RANGE(0x100000, 0x107fff) AM_WRITENOP
AM_RANGE(0x108000, 0x10bfff) AM_RAM AM_SHARE("spriteram3")
@ -353,8 +360,7 @@ static ADDRESS_MAP_START( aerfboo2_map, AS_PROGRAM, 16, aerofgt_state )
AM_RANGE(0x0fe01e, 0x0fe01f) AM_WRITE(aerfboo2_okim6295_banking_w)
// AM_RANGE(0x0fe010, 0x0fe011) AM_WRITENOP
// AM_RANGE(0x0fe012, 0x0fe013) AM_WRITE(aerfboot_soundlatch_w)
AM_RANGE(0x0fe400, 0x0fe401) AM_WRITENOP // data for a crtc?
AM_RANGE(0x0fe402, 0x0fe403) AM_WRITENOP // address for a crtc?
AM_RANGE(0x0fe400, 0x0fe403) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
AM_RANGE(0x0ff000, 0x0fffff) AM_RAM AM_SHARE("rasterram") /* used only for the scroll registers */
ADDRESS_MAP_END
@ -372,6 +378,7 @@ static ADDRESS_MAP_START( wbbc97_map, AS_PROGRAM, 16, aerofgt_state )
AM_RANGE(0xfff004, 0xfff005) AM_READ_PORT("DSW") AM_WRITE(aerofgt_bg1scrolly_w)
AM_RANGE(0xfff006, 0xfff007) AM_READNOP AM_WRITE8(sound_command_w, 0x00ff)
AM_RANGE(0xfff00e, 0xfff00f) AM_WRITE(wbbc97_bitmap_enable_w)
AM_RANGE(0xfff400, 0xfff403) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, aerofgt_state )
@ -1357,6 +1364,8 @@ static MACHINE_CONFIG_START( pspikes, aerofgt_state )
MCFG_VSYSTEM_SPR2_SET_GFXREGION(1)
MCFG_VSYSTEM_SPR2_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,pspikes)
/* sound hardware */
@ -1397,6 +1406,8 @@ static MACHINE_CONFIG_START( spikes91, aerofgt_state )
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,pspikes)
/* sound hardware */
@ -1431,6 +1442,8 @@ static MACHINE_CONFIG_START( pspikesb, aerofgt_state )
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,pspikes)
/* sound hardware */
@ -1463,6 +1476,8 @@ static MACHINE_CONFIG_START( pspikesc, aerofgt_state )
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_VSYSTEM_SPR2_SET_GFXREGION(1)
@ -1505,6 +1520,8 @@ static MACHINE_CONFIG_START( karatblz, aerofgt_state )
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_VSYSTEM_SPR2_SET_GFXREGION(2)
@ -1567,6 +1584,8 @@ static MACHINE_CONFIG_START( karatblzbl, aerofgt_state )
MCFG_VSYSTEM_SPR2_SET_GFXREGION(3)
MCFG_VSYSTEM_SPR2_GFXDECODE("gfxdecode")
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,karatblz)
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
@ -1612,6 +1631,8 @@ static MACHINE_CONFIG_START( spinlbrk, aerofgt_state )
MCFG_PALETTE_ADD_INIT_BLACK("palette", 1024) // doesn't fully initialize palette at start-up ...
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_PRITYPE(1)
MCFG_VSYSTEM_SPR2_SET_GFXREGION(2)
@ -1666,6 +1687,8 @@ static MACHINE_CONFIG_START( turbofrc, aerofgt_state )
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_VSYSTEM_SPR2_SET_GFXREGION(2)
@ -1720,6 +1743,8 @@ static MACHINE_CONFIG_START( aerofgtb, aerofgt_state )
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_VSYSTEM_SPR2_SET_GFXREGION(2)
@ -1821,6 +1846,8 @@ static MACHINE_CONFIG_START( aerfboot, aerofgt_state )
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,turbofrc)
/* sound hardware */
@ -1857,6 +1884,8 @@ static MACHINE_CONFIG_START( aerfboo2, aerofgt_state )
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,turbofrc)
/* sound hardware */
@ -1891,6 +1920,8 @@ static MACHINE_CONFIG_START( wbbc97, aerofgt_state )
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_VSYSTEM_SPR2_SET_GFXREGION(1)

View File

@ -33,6 +33,8 @@
#include "sound/2610intf.h"
#include "sound/okim6295.h"
#include "video/vsystem_gga.h"
#include "screen.h"
#include "speaker.h"
@ -85,6 +87,7 @@ static ADDRESS_MAP_START( f1gp_cpu1_map, AS_PROGRAM, 16, f1gp_state )
AM_RANGE(0xfff002, 0xfff005) AM_WRITE(f1gp_fgscroll_w)
AM_RANGE(0xfff006, 0xfff007) AM_READ_PORT("DSW2")
AM_RANGE(0xfff008, 0xfff009) AM_READWRITE8(command_pending_r, sound_command_w, 0x00ff)
AM_RANGE(0xfff020, 0xfff023) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
AM_RANGE(0xfff040, 0xfff05f) AM_DEVWRITE("k053936", k053936_device, ctrl_w)
AM_RANGE(0xfff050, 0xfff051) AM_READ_PORT("DSW3")
ADDRESS_MAP_END
@ -181,7 +184,7 @@ static ADDRESS_MAP_START( f1gpb_cpu1_map, AS_PROGRAM, 16, f1gp_state )
AM_RANGE(0xfff00e, 0xfff00f) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff)
AM_RANGE(0xfff00c, 0xfff00d) AM_WRITE(f1gpb_misc_w)
AM_RANGE(0xfff010, 0xfff011) AM_WRITENOP
AM_RANGE(0xfff020, 0xfff023) AM_RAM //?
AM_RANGE(0xfff020, 0xfff023) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
AM_RANGE(0xfff050, 0xfff051) AM_READ_PORT("DSW3")
AM_RANGE(0xfff800, 0xfff809) AM_RAM AM_SHARE("rozregs")
ADDRESS_MAP_END
@ -421,6 +424,8 @@ static MACHINE_CONFIG_START( f1gp, f1gp_state )
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( f1gp_state, f1gp_old_tile_callback )
MCFG_VSYSTEM_SPR2_SET_GFXREGION(1)
@ -482,6 +487,8 @@ static MACHINE_CONFIG_START( f1gpb, f1gp_state )
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VIDEO_START_OVERRIDE(f1gp_state,f1gpb)
/* sound hardware */
@ -505,6 +512,7 @@ static MACHINE_CONFIG_DERIVED( f1gp2, f1gp )
MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_DRIVER(f1gp_state, screen_update_f1gp2)
MCFG_DEVICE_REMOVE("gga")
MCFG_DEVICE_REMOVE("vsystem_spr_old")
MCFG_DEVICE_ADD("vsystem_spr", VSYSTEM_SPR, 0)
MCFG_VSYSTEM_SPR_SET_TILE_INDIRECT( f1gp_state, f1gp2_tile_callback )

View File

@ -86,6 +86,7 @@ with the following code:
#include "sound/ay8910.h"
#include "sound/msm5205.h"
#include "sound/ym2413.h"
#include "video/vsystem_gga.h"
#include "speaker.h"
@ -307,8 +308,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( nekkyoku_sub_io_map, AS_IO, 8, fromance_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x10, 0x10) AM_WRITE(fromance_crtc_data_w)
AM_RANGE(0x11, 0x11) AM_WRITE(fromance_crtc_register_w)
AM_RANGE(0x10, 0x11) AM_DEVWRITE("gga", vsystem_gga_device, write)
AM_RANGE(0x12, 0x12) AM_READNOP // unknown
AM_RANGE(0xe0, 0xe0) AM_WRITE(fromance_rombank_w)
AM_RANGE(0xe1, 0xe1) AM_READ(fromance_busycheck_sub_r) AM_WRITE(fromance_gfxreg_w)
@ -321,8 +321,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( idolmj_sub_io_map, AS_IO, 8, fromance_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x10, 0x10) AM_WRITE(fromance_crtc_data_w)
AM_RANGE(0x11, 0x11) AM_WRITE(fromance_crtc_register_w)
AM_RANGE(0x10, 0x11) AM_DEVWRITE("gga", vsystem_gga_device, write)
AM_RANGE(0x12, 0x12) AM_READNOP // unknown
AM_RANGE(0x20, 0x20) AM_WRITE(fromance_rombank_w)
AM_RANGE(0x21, 0x21) AM_READ(fromance_busycheck_sub_r) AM_WRITE(fromance_gfxreg_w)
@ -335,8 +334,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( fromance_sub_io_map, AS_IO, 8, fromance_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x10, 0x10) AM_WRITE(fromance_crtc_data_w)
AM_RANGE(0x11, 0x11) AM_WRITE(fromance_crtc_register_w)
AM_RANGE(0x10, 0x11) AM_DEVWRITE("gga", vsystem_gga_device, write)
AM_RANGE(0x12, 0x12) AM_READNOP // unknown
AM_RANGE(0x20, 0x20) AM_WRITE(fromance_rombank_w)
AM_RANGE(0x21, 0x21) AM_READ(fromance_busycheck_sub_r) AM_WRITE(fromance_gfxreg_w)
@ -904,8 +902,6 @@ MACHINE_START_MEMBER(fromance_state,fromance)
MACHINE_RESET_MEMBER(fromance_state,fromance)
{
int i;
m_directionflag = 0;
m_commanddata = 0;
m_portselect = 0;
@ -925,10 +921,6 @@ MACHINE_RESET_MEMBER(fromance_state,fromance)
m_scrolly[1] = 0;
m_gfxreg = 0;
m_flipscreen = 0;
m_crtc_register = 0;
for (i = 0; i < 0x10; i++)
m_crtc_data[i] = 0;
}
static MACHINE_CONFIG_START( nekkyoku, fromance_state )
@ -956,6 +948,9 @@ static MACHINE_CONFIG_START( nekkyoku, fromance_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", fromance)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VSYSTEM_GGA_REGISTER_WRITE_CB(WRITE8(fromance_state, fromance_gga_data_w))
MCFG_VIDEO_START_OVERRIDE(fromance_state,nekkyoku)
/* sound hardware */
@ -996,6 +991,9 @@ static MACHINE_CONFIG_START( idolmj, fromance_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", fromance)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VSYSTEM_GGA_REGISTER_WRITE_CB(WRITE8(fromance_state, fromance_gga_data_w))
MCFG_VIDEO_START_OVERRIDE(fromance_state,fromance)
/* sound hardware */
@ -1036,6 +1034,9 @@ static MACHINE_CONFIG_START( fromance, fromance_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", fromance)
MCFG_PALETTE_ADD("palette", 2048)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VSYSTEM_GGA_REGISTER_WRITE_CB(WRITE8(fromance_state, fromance_gga_data_w))
MCFG_VIDEO_START_OVERRIDE(fromance_state,fromance)
/* sound hardware */

View File

@ -40,6 +40,7 @@ Memo:
#include "machine/nvram.h"
#include "sound/ay8910.h"
#include "sound/msm5205.h"
#include "video/vsystem_gga.h"
#include "speaker.h"
@ -227,8 +228,7 @@ static ADDRESS_MAP_START( ojankohs_io_map, AS_IO, 8, ojankohs_state )
AM_RANGE(0x05, 0x05) AM_WRITE(ojankohs_msm5205_w)
AM_RANGE(0x06, 0x06) AM_DEVREAD("aysnd", ay8910_device, data_r)
AM_RANGE(0x06, 0x07) AM_DEVWRITE("aysnd", ay8910_device, data_address_w)
AM_RANGE(0x10, 0x10) AM_WRITENOP // unknown
AM_RANGE(0x11, 0x11) AM_WRITENOP // unknown
AM_RANGE(0x10, 0x11) AM_DEVWRITE("gga", vsystem_gga_device, write)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ojankoy_io_map, AS_IO, 8, ojankohs_state )
@ -253,8 +253,7 @@ static ADDRESS_MAP_START( ccasino_io_map, AS_IO, 8, ojankohs_state )
AM_RANGE(0x06, 0x06) AM_DEVREAD("aysnd", ay8910_device, data_r)
AM_RANGE(0x06, 0x07) AM_DEVWRITE("aysnd", ay8910_device, data_address_w)
AM_RANGE(0x08, 0x0f) AM_WRITE(ccasino_palette_w) AM_SHARE("paletteram") // 16bit address access
AM_RANGE(0x10, 0x10) AM_WRITENOP
AM_RANGE(0x11, 0x11) AM_WRITENOP
AM_RANGE(0x10, 0x11) AM_DEVWRITE("gga", vsystem_gga_device, write)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ojankoc_io_map, AS_IO, 8, ojankohs_state )
@ -834,6 +833,8 @@ static MACHINE_CONFIG_START( ojankohs, ojankohs_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ojankohs)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VIDEO_START_OVERRIDE(ojankohs_state,ojankohs)
/* sound hardware */
@ -913,6 +914,8 @@ static MACHINE_CONFIG_START( ccasino, ojankohs_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ojankohs)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VIDEO_START_OVERRIDE(ojankohs_state,ojankoy)
/* sound hardware */

View File

@ -296,8 +296,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( main_portmap, AS_IO, 8, pipedrm_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x10, 0x10) AM_WRITE(fromance_crtc_data_w)
AM_RANGE(0x11, 0x11) AM_WRITE(fromance_crtc_register_w)
AM_RANGE(0x10, 0x11) AM_DEVWRITE("gga", vsystem_gga_device, write)
AM_RANGE(0x20, 0x20) AM_READ_PORT("P1") AM_WRITE(sound_command_w)
AM_RANGE(0x21, 0x21) AM_READ_PORT("P2") AM_WRITE(pipedrm_bankswitch_w)
AM_RANGE(0x22, 0x25) AM_WRITE(fromance_scroll_w)
@ -596,8 +595,6 @@ MACHINE_START_MEMBER(pipedrm_state,pipedrm)
MACHINE_RESET_MEMBER(pipedrm_state,pipedrm)
{
int i;
m_pending_command = 0;
m_sound_command = 0;
@ -612,10 +609,6 @@ MACHINE_RESET_MEMBER(pipedrm_state,pipedrm)
m_scrolly[1] = 0;
m_gfxreg = 0;
m_flipscreen = 0;
m_crtc_register = 0;
for (i = 0; i < 0x10; i++)
m_crtc_data[i] = 0;
}
static MACHINE_CONFIG_START( pipedrm, pipedrm_state )
@ -646,6 +639,9 @@ static MACHINE_CONFIG_START( pipedrm, pipedrm_state )
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VSYSTEM_GGA_REGISTER_WRITE_CB(WRITE8(fromance_state, fromance_gga_data_w))
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_GFXREGION(2)
MCFG_VSYSTEM_SPR2_SET_OFFSETS(-13, -6)
@ -693,6 +689,9 @@ static MACHINE_CONFIG_START( hatris, pipedrm_state )
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VSYSTEM_GGA_REGISTER_WRITE_CB(WRITE8(fromance_state, fromance_gga_data_w))
MCFG_VIDEO_START_OVERRIDE(pipedrm_state,hatris)
/* sound hardware */

View File

@ -133,7 +133,6 @@ void rpunch_state::machine_start()
save_item(NAME(m_upd_rom_bank));
save_item(NAME(m_sprite_xoffs));
save_item(NAME(m_videoflags));
save_item(NAME(m_crtc_register));
save_item(NAME(m_bins));
save_item(NAME(m_gins));
}
@ -248,7 +247,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, rpunch_state )
AM_RANGE(0x080000, 0x083fff) AM_RAM_WRITE(rpunch_videoram_w) AM_SHARE("videoram")
AM_RANGE(0x0a0000, 0x0a07ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x0c0000, 0x0c0007) AM_WRITE(rpunch_scrollreg_w)
AM_RANGE(0x0c0008, 0x0c0009) AM_WRITE(rpunch_crtc_data_w)
AM_RANGE(0x0c0008, 0x0c0009) AM_SELECT(0x20) AM_WRITE(rpunch_gga_w)
AM_RANGE(0x0c000c, 0x0c000d) AM_WRITE(rpunch_videoreg_w)
AM_RANGE(0x0c000e, 0x0c000f) AM_WRITE(sound_command_w)
AM_RANGE(0x0c0010, 0x0c0013) AM_WRITE(rpunch_ins_w)
@ -256,7 +255,6 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, rpunch_state )
AM_RANGE(0x0c001a, 0x0c001b) AM_READ_PORT("P2")
AM_RANGE(0x0c001c, 0x0c001d) AM_READ_PORT("DSW")
AM_RANGE(0x0c001e, 0x0c001f) AM_READ(sound_busy_r)
AM_RANGE(0x0c0028, 0x0c0029) AM_WRITE(rpunch_crtc_register_w)
AM_RANGE(0x0fc000, 0x0fffff) AM_RAM
ADDRESS_MAP_END
@ -516,6 +514,9 @@ static MACHINE_CONFIG_START( rpunch, rpunch_state )
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VSYSTEM_GGA_REGISTER_WRITE_CB(WRITE8(rpunch_state, rpunch_gga_data_w))
MCFG_VIDEO_START_OVERRIDE(rpunch_state,rpunch)
/* sound hardware */
@ -558,6 +559,9 @@ static MACHINE_CONFIG_START( svolleybl, rpunch_state )
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_VSYSTEM_GGA_REGISTER_WRITE_CB(WRITE8(rpunch_state, rpunch_gga_data_w))
MCFG_VIDEO_START_OVERRIDE(rpunch_state,rpunch)
/* sound hardware */

View File

@ -16,6 +16,7 @@
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "sound/2608intf.h"
#include "video/vsystem_gga.h"
#include "screen.h"
#include "speaker.h"
@ -58,7 +59,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, tail2nos_state )
AM_RANGE(0xfff002, 0xfff003) AM_READ_PORT("IN1")
AM_RANGE(0xfff004, 0xfff005) AM_READ_PORT("DSW")
AM_RANGE(0xfff008, 0xfff009) AM_READWRITE8(sound_semaphore_r,sound_command_w,0x00ff)
// AM_RANGE(0xfff020, 0xfff023) V-System CRTC
AM_RANGE(0xfff020, 0xfff023) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
// AM_RANGE(0xfff030, 0xfff031) link comms
ADDRESS_MAP_END
@ -263,6 +264,8 @@ static MACHINE_CONFIG_START( tail2nos, tail2nos_state )
MCFG_K051316_WRAP(1)
MCFG_K051316_CB(tail2nos_state, zoom_callback)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
/* sound hardware */
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -318,6 +318,7 @@ TODO:
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "sound/2610intf.h"
#include "video/vsystem_gga.h"
#include "screen.h"
#include "speaker.h"
@ -371,9 +372,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, welltris_state )
AM_RANGE(0xfff008, 0xfff009) AM_WRITE(sound_command_w)
AM_RANGE(0xfff00a, 0xfff00b) AM_READ_PORT("EXTRA") /* P3+P4 Coin + Start Buttons */
AM_RANGE(0xfff00c, 0xfff00d) AM_READ_PORT("DSW1")
AM_RANGE(0xfff00c, 0xfff00d) AM_WRITENOP /* ?? */
AM_RANGE(0xfff00e, 0xfff00f) AM_READ_PORT("DSW2")
AM_RANGE(0xfff00e, 0xfff00f) AM_WRITENOP /* ?? */
AM_RANGE(0xfff00c, 0xfff00f) AM_DEVWRITE8("gga", vsystem_gga_device, write, 0x00ff)
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, welltris_state )
@ -714,6 +714,8 @@ static MACHINE_CONFIG_START( welltris, welltris_state )
MCFG_PALETTE_ADD("palette", 2048)
MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB)
MCFG_DEVICE_ADD("gga", VSYSTEM_GGA, 0)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_GFXREGION(1)
MCFG_VSYSTEM_SPR2_SET_PRITYPE(-1)

View File

@ -8,7 +8,9 @@
and Bryan McPhail, Nicola Salmoria, Aaron Giles
***************************************************************************/
#include "sound/msm5205.h"
#include "video/vsystem_gga.h"
#include "video/vsystem_spr2.h"
#include "screen.h"
@ -19,6 +21,7 @@ public:
: driver_device(mconfig, type, tag),
m_videoram(*this, "videoram"),
m_spriteram(*this, "spriteram"),
m_gga(*this, "gga"),
m_spr_old(*this, "vsystem_spr_old"),
m_subcpu(*this, "sub"),
m_maincpu(*this, "maincpu"),
@ -31,6 +34,7 @@ public:
optional_shared_ptr<uint8_t> m_videoram;
optional_shared_ptr<uint8_t> m_spriteram;
required_device<vsystem_gga_device> m_gga;
optional_device<vsystem_spr2_device> m_spr_old; // only used by pipe dream, split this state up and clean things...
/* video-related */
@ -48,8 +52,6 @@ public:
uint32_t m_scrolly_ofs;
uint32_t m_scrollx_ofs;
uint8_t m_crtc_register;
uint8_t m_crtc_data[0x10];
emu_timer *m_crtc_timer;
/* misc */
@ -80,8 +82,7 @@ public:
DECLARE_READ8_MEMBER(fromance_videoram_r);
DECLARE_WRITE8_MEMBER(fromance_videoram_w);
DECLARE_WRITE8_MEMBER(fromance_scroll_w);
DECLARE_WRITE8_MEMBER(fromance_crtc_data_w);
DECLARE_WRITE8_MEMBER(fromance_crtc_register_w);
DECLARE_WRITE8_MEMBER(fromance_gga_data_w);
DECLARE_WRITE8_MEMBER(fromance_adpcm_reset_w);
TILE_GET_INFO_MEMBER(get_fromance_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fromance_fg_tile_info);

View File

@ -1,6 +1,7 @@
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
#include "sound/upd7759.h"
#include "video/vsystem_gga.h"
#include "screen.h"
class rpunch_state : public driver_device
@ -14,6 +15,7 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_gga(*this, "gga"),
m_videoram(*this, "videoram"),
m_bitmapram(*this, "bitmapram"),
m_spriteram(*this, "spriteram") { }
@ -24,6 +26,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<vsystem_gga_device> m_gga;
required_shared_ptr<uint16_t> m_videoram;
required_shared_ptr<uint16_t> m_bitmapram;
@ -36,7 +39,6 @@ public:
int m_sprite_palette;
int m_sprite_xoffs;
uint16_t m_videoflags;
uint8_t m_crtc_register;
uint8_t m_bins;
uint8_t m_gins;
tilemap_t *m_background[2];
@ -48,8 +50,8 @@ public:
DECLARE_WRITE16_MEMBER(rpunch_videoram_w);
DECLARE_WRITE16_MEMBER(rpunch_videoreg_w);
DECLARE_WRITE16_MEMBER(rpunch_scrollreg_w);
DECLARE_WRITE16_MEMBER(rpunch_crtc_data_w);
DECLARE_WRITE16_MEMBER(rpunch_crtc_register_w);
DECLARE_WRITE16_MEMBER(rpunch_gga_w);
DECLARE_WRITE8_MEMBER(rpunch_gga_data_w);
DECLARE_WRITE16_MEMBER(rpunch_ins_w);
DECLARE_CUSTOM_INPUT_MEMBER(hi_bits_r);
DECLARE_WRITE8_MEMBER(upd_control_w);

View File

@ -82,8 +82,6 @@ void fromance_state::init_common( )
save_item(NAME(m_flipscreen_old));
save_item(NAME(m_scrollx_ofs));
save_item(NAME(m_scrolly_ofs));
save_item(NAME(m_crtc_register));
save_item(NAME(m_crtc_data));
save_pointer(NAME(m_local_paletteram.get()), 0x800 * 2);
}
@ -263,7 +261,7 @@ TIMER_CALLBACK_MEMBER(fromance_state::crtc_interrupt_gen)
// TODO: guesswork, looks fully programmable
void fromance_state::crtc_refresh()
{
if(m_crtc_data[0] == 0) // sanity check
if (m_gga->reg(0) == 0) // sanity check
return;
rectangle visarea;
@ -271,7 +269,7 @@ void fromance_state::crtc_refresh()
visarea.min_x = 0;
visarea.min_y = 0;
visarea.max_x = ((m_crtc_data[0]+1)*4) - 1;
visarea.max_x = ((m_gga->reg(0)+1)*4) - 1;
visarea.max_y = 240 - 1;
refresh = HZ_TO_ATTOSECONDS(60);
@ -279,11 +277,9 @@ void fromance_state::crtc_refresh()
m_screen->configure(512, 256, visarea, refresh);
}
WRITE8_MEMBER(fromance_state::fromance_crtc_data_w)
WRITE8_MEMBER(fromance_state::fromance_gga_data_w)
{
m_crtc_data[m_crtc_register] = data;
switch (m_crtc_register)
switch (offset)
{
case 0x00:
crtc_refresh();
@ -295,18 +291,12 @@ WRITE8_MEMBER(fromance_state::fromance_crtc_data_w)
break;
default:
logerror("CRTC register %02X = %02X\n", m_crtc_register, data & 0xff);
logerror("CRTC register %02X = %02X\n", offset, data);
break;
}
}
WRITE8_MEMBER(fromance_state::fromance_crtc_register_w)
{
m_crtc_register = data & 0x0f;
}
/*************************************
*
* Main screen refresh

View File

@ -152,30 +152,26 @@ WRITE16_MEMBER(rpunch_state::rpunch_scrollreg_w)
}
WRITE16_MEMBER(rpunch_state::rpunch_crtc_data_w)
WRITE16_MEMBER(rpunch_state::rpunch_gga_w)
{
if (ACCESSING_BITS_0_7)
{
data &= 0xff;
switch (m_crtc_register)
{
/* only register we know about.... */
case 0x0b:
m_crtc_timer->adjust(m_screen->time_until_vblank_start(), (data == 0xc0) ? 2 : 1);
break;
default:
logerror("CRTC register %02X = %02X\n", m_crtc_register, data & 0xff);
break;
}
}
m_gga->write(space, offset >> 4, data & 0xff);
}
WRITE16_MEMBER(rpunch_state::rpunch_crtc_register_w)
WRITE8_MEMBER(rpunch_state::rpunch_gga_data_w)
{
if (ACCESSING_BITS_0_7)
m_crtc_register = data & 0xff;
switch (offset)
{
/* only register we know about.... */
case 0x0b:
m_crtc_timer->adjust(m_screen->time_until_vblank_start(), (data == 0xc0) ? 2 : 1);
break;
default:
logerror("CRTC register %02X = %02X\n", offset, data);
break;
}
}

View File

@ -0,0 +1,69 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/******************************************************************************
Video System C7-01 GGA
Skeleton device.
******************************************************************************/
#include "emu.h"
#include "vsystem_gga.h"
//**************************************************************************
// VIDEO SYSTEM GGA DEVICE
//**************************************************************************
// device type definition
const device_type VSYSTEM_GGA = device_creator<vsystem_gga_device>;
//-------------------------------------------------
// vsystem_gga_device - constructor
//-------------------------------------------------
vsystem_gga_device::vsystem_gga_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, VSYSTEM_GGA, "Video System C7-01 GGA", tag, owner, clock, "vsystem_gga", __FILE__),
device_video_interface(mconfig, *this, false),
m_write_cb(*this)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void vsystem_gga_device::device_start()
{
m_write_cb.resolve();
m_address_latch = 0;
for (u8 &reg : m_regs)
reg = 0;
save_item(NAME(m_address_latch));
save_item(NAME(m_regs));
}
//-------------------------------------------------
// write - register write handler
//-------------------------------------------------
WRITE8_MEMBER(vsystem_gga_device::write)
{
if (offset & 1)
{
// address write
m_address_latch = data & 0x0f;
}
else
{
// data write
m_regs[m_address_latch] = data;
if (m_write_cb.isnull())
logerror("Setting register $%02x = %02x\n", m_address_latch, data);
else
m_write_cb(m_address_latch, data, 0xff);
}
}

View File

@ -0,0 +1,57 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/******************************************************************************
Video System C7-01 GGA
******************************************************************************/
#pragma once
#ifndef MAME_VIDEO_VSYSTEM_GGA_H
#define MAME_VIDEO_VSYSTEM_GGA_H
//**************************************************************************
// CONFIGURATION MACROS
//**************************************************************************
#define MCFG_VSYSTEM_GGA_REGISTER_WRITE_CB(_devcb) \
devcb = &vsystem_gga_device::static_set_write_cb(*device, DEVCB_##_devcb);
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> vsystem_gga_device
class vsystem_gga_device : public device_t, public device_video_interface
{
public:
// construction/destruction
vsystem_gga_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
// static configuration
template<class Obj> static devcb_base &static_set_write_cb(device_t &device, Obj &&object) { return downcast<vsystem_gga_device &>(device).m_write_cb.set_callback(std::forward<Obj>(object)); }
// memory handlers
DECLARE_WRITE8_MEMBER(write);
// temporary accessor
u8 reg(u8 offset) const { return m_regs[offset]; }
protected:
// device-level overrides
virtual void device_start() override;
private:
// internal state
u8 m_address_latch;
u8 m_regs[16];
devcb_write8 m_write_cb;
};
// device type definition
extern const device_type VSYSTEM_GGA;
#endif