Fixed ROM GFX banking in Great Guns

This commit is contained in:
Angelo Salese 2013-10-31 14:35:12 +00:00
parent aa6def709e
commit 522da35d80
3 changed files with 114 additions and 59 deletions

View File

@ -18,6 +18,43 @@ Device for Mazer Blazer/Great Guns custom Video Controller Unit
// device type definition // device type definition
const device_type MB_VCU = &device_creator<mb_vcu_device>; const device_type MB_VCU = &device_creator<mb_vcu_device>;
static ADDRESS_MAP_START( mb_vcu_vram, AS_0, 16, mb_vcu_device )
// AM_RANGE() internal ROM space (shared with 0x4000 - 0x5fff)
// AM_RANGE() RAM space (shared with 0x6000 - 0x67ff)
// AM_RANGE() fb area
ADDRESS_MAP_END
//-------------------------------------------------
// memory_space_config - return a description of
// any address spaces owned by this device
//-------------------------------------------------
const address_space_config *mb_vcu_device::memory_space_config(address_spacenum spacenum) const
{
return (spacenum == AS_0) ? &m_space_config : NULL;
}
//**************************************************************************
// INLINE HELPERS
//**************************************************************************
//-------------------------------------------------
// read_byte - read a byte at the given address
//-------------------------------------------------
inline UINT16 mb_vcu_device::read_byte(offs_t address)
{
return space().read_byte(address);
}
//-------------------------------------------------
// write_word - write a word at the given address
//-------------------------------------------------
inline void mb_vcu_device::write_byte(offs_t address, UINT8 data)
{
space().write_byte(address, data);
}
//************************************************************************** //**************************************************************************
// LIVE DEVICE // LIVE DEVICE
@ -29,7 +66,9 @@ const device_type MB_VCU = &device_creator<mb_vcu_device>;
mb_vcu_device::mb_vcu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) mb_vcu_device::mb_vcu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, MB_VCU, "Mazer Blazer custom VCU", tag, owner, clock, "mb_vcu", __FILE__), : device_t(mconfig, MB_VCU, "Mazer Blazer custom VCU", tag, owner, clock, "mb_vcu", __FILE__),
device_video_interface(mconfig, *this) device_memory_interface(mconfig, *this),
device_video_interface(mconfig, *this),
m_space_config("videoram", ENDIANNESS_LITTLE, 8, 16, 0, NULL, *ADDRESS_MAP_NAME(mb_vcu_vram))
{ {
} }
@ -51,7 +90,7 @@ void mb_vcu_device::device_config_complete()
// or initialize to defaults if none provided // or initialize to defaults if none provided
else else
{ {
m_cpu_tag = NULL; //m_screen_tag = NULL;
} }
} }
@ -71,15 +110,7 @@ void mb_vcu_device::device_validity_check(validity_checker &valid) const
void mb_vcu_device::device_start() void mb_vcu_device::device_start()
{ {
if(m_cpu_tag) // TODO: m_screen_tag
{
m_cpu = machine().device(m_cpu_tag);
}
else
{
m_cpu = NULL;
}
} }
@ -96,12 +127,44 @@ void mb_vcu_device::device_reset()
// READ/WRITE HANDLERS // READ/WRITE HANDLERS
//************************************************************************** //**************************************************************************
READ8_MEMBER( mb_vcu_device::read ) READ8_MEMBER( mb_vcu_device::read_ram )
{ {
return 0; return 0;
} }
WRITE8_MEMBER( mb_vcu_device::write ) WRITE8_MEMBER( mb_vcu_device::write_ram )
{
}
WRITE8_MEMBER( mb_vcu_device::write_vregs )
{
}
READ8_MEMBER( mb_vcu_device::load_params )
{
return 0;
}
READ8_MEMBER( mb_vcu_device::load_gfx )
{
return 0;
}
READ8_MEMBER( mb_vcu_device::load_clr )
{
return 0;
}
WRITE8_MEMBER( mb_vcu_device::background_color_w )
{
}
READ8_MEMBER( mb_vcu_device::status_r )
{
return 0;
}
WRITE8_MEMBER( mb_vcu_device::vbank_w )
{ {
} }

View File

@ -29,12 +29,13 @@ Template for skeleton device
struct mb_vcu_interface struct mb_vcu_interface
{ {
const char *m_cpu_tag; const char *m_screen_tag;
}; };
// ======================> mb_vcu_device // ======================> mb_vcu_device
class mb_vcu_device : public device_t, class mb_vcu_device : public device_t,
public device_memory_interface,
public device_video_interface, public device_video_interface,
public mb_vcu_interface public mb_vcu_interface
{ {
@ -43,8 +44,15 @@ public:
mb_vcu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); mb_vcu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// I/O operations // I/O operations
DECLARE_WRITE8_MEMBER( write ); DECLARE_WRITE8_MEMBER( write_vregs );
DECLARE_READ8_MEMBER( read ); DECLARE_READ8_MEMBER( read_ram );
DECLARE_WRITE8_MEMBER( write_ram );
DECLARE_READ8_MEMBER( load_params );
DECLARE_READ8_MEMBER( load_gfx );
DECLARE_READ8_MEMBER( load_clr );
DECLARE_WRITE8_MEMBER( background_color_w );
DECLARE_READ8_MEMBER( status_r );
DECLARE_WRITE8_MEMBER( vbank_w );
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -54,9 +62,12 @@ protected:
virtual void device_validity_check(validity_checker &valid) const; virtual void device_validity_check(validity_checker &valid) const;
virtual void device_start(); virtual void device_start();
virtual void device_reset(); virtual void device_reset();
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
private: private:
inline UINT16 read_byte(offs_t address);
inline void write_byte(offs_t address, UINT8 data);
device_t *m_cpu; const address_space_config m_space_config;
}; };

View File

@ -195,7 +195,6 @@ public:
DECLARE_WRITE8_MEMBER(cfb_backgnd_color_w); DECLARE_WRITE8_MEMBER(cfb_backgnd_color_w);
DECLARE_WRITE8_MEMBER(cfb_vbank_w); DECLARE_WRITE8_MEMBER(cfb_vbank_w);
DECLARE_WRITE8_MEMBER(cfb_rom_bank_sel_w); DECLARE_WRITE8_MEMBER(cfb_rom_bank_sel_w);
DECLARE_WRITE8_MEMBER(cfb_rom_bank_sel_w_gg);
DECLARE_READ8_MEMBER(cfb_port_02_r); DECLARE_READ8_MEMBER(cfb_port_02_r);
DECLARE_WRITE8_MEMBER(vcu_video_reg_w); DECLARE_WRITE8_MEMBER(vcu_video_reg_w);
DECLARE_READ8_MEMBER(vcu_set_cmd_param_r); DECLARE_READ8_MEMBER(vcu_set_cmd_param_r);
@ -453,13 +452,6 @@ WRITE8_MEMBER(mazerbla_state::cfb_rom_bank_sel_w)/* mazer blazer */
membank("bank1")->set_base(memregion("sub2")->base() + (m_gfx_rom_bank * 0x2000) + 0x10000); membank("bank1")->set_base(memregion("sub2")->base() + (m_gfx_rom_bank * 0x2000) + 0x10000);
} }
WRITE8_MEMBER(mazerbla_state::cfb_rom_bank_sel_w_gg)/* great guns */
{
m_gfx_rom_bank = data >> 1;
membank("bank1")->set_base(memregion("sub2")->base() + (m_gfx_rom_bank * 0x2000) + 0x10000);
}
/* VCU status? */ /* VCU status? */
READ8_MEMBER(mazerbla_state::cfb_port_02_r) READ8_MEMBER(mazerbla_state::cfb_port_02_r)
@ -1145,17 +1137,6 @@ static ADDRESS_MAP_START( greatgun_io_map, AS_IO, 8, mazerbla_state )
AM_RANGE(0x6e, 0x6f) AM_WRITE(zpu_led_w) AM_RANGE(0x6e, 0x6f) AM_WRITE(zpu_led_w)
ADDRESS_MAP_END ADDRESS_MAP_END
/* Great Guns has a little different banking layout */
static ADDRESS_MAP_START( greatgun_cpu3_io_map, AS_IO, 8, mazerbla_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x00) AM_WRITENOP
AM_RANGE(0x01, 0x01) AM_WRITE(cfb_backgnd_color_w)
AM_RANGE(0x02, 0x02) AM_READWRITE(cfb_port_02_r, cfb_led_w) /* Read = VCU status ? */
AM_RANGE(0x03, 0x03) AM_WRITE(cfb_zpu_int_req_set_w)
AM_RANGE(0x04, 0x04) AM_WRITE(cfb_rom_bank_sel_w_gg)
AM_RANGE(0x05, 0x05) AM_WRITE(cfb_vbank_w) //visible/writable videopage select?
ADDRESS_MAP_END
static ADDRESS_MAP_START( greatgun_sound_map, AS_PROGRAM, 8, mazerbla_state ) static ADDRESS_MAP_START( greatgun_sound_map, AS_PROGRAM, 8, mazerbla_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x27ff) AM_RAM AM_RANGE(0x2000, 0x27ff) AM_RAM
@ -1645,7 +1626,7 @@ static MACHINE_CONFIG_START( greatgun, mazerbla_state )
MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK) /* 4 MHz, no NMI, IM1 INT */ MCFG_CPU_ADD("sub2", Z80, MASTER_CLOCK) /* 4 MHz, no NMI, IM1 INT */
MCFG_CPU_PROGRAM_MAP(mazerbla_cpu3_map) MCFG_CPU_PROGRAM_MAP(mazerbla_cpu3_map)
MCFG_CPU_IO_MAP(greatgun_cpu3_io_map) MCFG_CPU_IO_MAP(mazerbla_cpu3_io_map)
/* (vblank related ??) int generated by a custom video processor /* (vblank related ??) int generated by a custom video processor
and cleared on ANY port access. and cleared on ANY port access.
but handled differently for now but handled differently for now
@ -1761,30 +1742,30 @@ ROM_START( greatgun )
ROM_REGION( 0x10000, "sub", 0 ) /* 64k for sound CPU (PSB board) */ ROM_REGION( 0x10000, "sub", 0 ) /* 64k for sound CPU (PSB board) */
ROM_LOAD( "psba4",0x0000, 0x2000, CRC(172a793e) SHA1(3618a778af1f4a6267bf7e0786529be731ac9b76) ) ROM_LOAD( "psba4",0x0000, 0x2000, CRC(172a793e) SHA1(3618a778af1f4a6267bf7e0786529be731ac9b76) )
ROM_REGION( 0x38000, "sub2", 0 ) /* 64k for video CPU (CFB board) */ ROM_REGION( 0x60000, "sub2", 0 ) /* 64k for video CPU (CFB board) */
ROM_LOAD( "cfb0",0x0000, 0x2000, CRC(ee372b1f) SHA1(b630fd659d59eb8c2540f18d91ae0d72e859fc4f) ) ROM_LOAD( "cfb0",0x00000, 0x2000, CRC(ee372b1f) SHA1(b630fd659d59eb8c2540f18d91ae0d72e859fc4f) )
ROM_LOAD( "cfb1",0x2000, 0x2000, CRC(b76d9527) SHA1(8f16b850bd67d553aaaf7e176754e36aba581445) ) ROM_LOAD( "cfb1",0x02000, 0x2000, CRC(b76d9527) SHA1(8f16b850bd67d553aaaf7e176754e36aba581445) )
ROM_LOAD( "psb00",0x10000,0x2000, CRC(b4956100) SHA1(98baf5c27c76dc5c4eafc44f42705239504637fe) )/*banked at 0x4000*/ ROM_LOAD( "psb00",0x10000,0x2000, CRC(b4956100) SHA1(98baf5c27c76dc5c4eafc44f42705239504637fe) )/*banked at 0x4000*/
ROM_LOAD( "psb01",0x12000,0x2000, CRC(acdce2ee) SHA1(96b8961afbd0006b10cfdc825aefe27ec18121ff) ) ROM_LOAD( "psb01",0x14000,0x2000, CRC(acdce2ee) SHA1(96b8961afbd0006b10cfdc825aefe27ec18121ff) )
ROM_LOAD( "psb02",0x14000,0x2000, CRC(cb840fc6) SHA1(c30c72d355e1957f3715e9fab701f65b9d7d632a) ) ROM_LOAD( "psb02",0x18000,0x2000, CRC(cb840fc6) SHA1(c30c72d355e1957f3715e9fab701f65b9d7d632a) )
ROM_LOAD( "psb03",0x16000,0x2000, CRC(86ea6f99) SHA1(ce5d42557d0a62eebe3d0cee28587d60707573e4) ) ROM_LOAD( "psb03",0x1c000,0x2000, CRC(86ea6f99) SHA1(ce5d42557d0a62eebe3d0cee28587d60707573e4) )
ROM_LOAD( "psb04",0x18000,0x2000, CRC(65379893) SHA1(84bb755e23d5ce13b1c82e59f24f3890c50697cc) ) ROM_LOAD( "psb04",0x20000,0x2000, CRC(65379893) SHA1(84bb755e23d5ce13b1c82e59f24f3890c50697cc) )
ROM_LOAD( "psb05",0x1a000,0x2000, CRC(f82245cb) SHA1(fa1cab94a03ce7b8e45ea6eec572b21f268f7547) ) ROM_LOAD( "psb05",0x24000,0x2000, CRC(f82245cb) SHA1(fa1cab94a03ce7b8e45ea6eec572b21f268f7547) )
ROM_LOAD( "psb06",0x1c000,0x2000, CRC(6b86794f) SHA1(72cf67ecf5a9198ecb44dd846de968e6cdd6458d) ) ROM_LOAD( "psb06",0x28000,0x2000, CRC(6b86794f) SHA1(72cf67ecf5a9198ecb44dd846de968e6cdd6458d) )
ROM_LOAD( "psb07",0x1e000,0x2000, CRC(60a7abf3) SHA1(44b932d8af29ec706c29d6b71a8bac6318d92315) ) ROM_LOAD( "psb07",0x2c000,0x2000, CRC(60a7abf3) SHA1(44b932d8af29ec706c29d6b71a8bac6318d92315) )
ROM_LOAD( "psb08",0x20000,0x2000, CRC(854be14e) SHA1(ae9b1fe2443c87bb4334bc776f7bc7e5fa874f38) ) ROM_LOAD( "psb08",0x30000,0x2000, CRC(854be14e) SHA1(ae9b1fe2443c87bb4334bc776f7bc7e5fa874f38) )
ROM_LOAD( "psb09",0x22000,0x2000, CRC(b2e8afa3) SHA1(30a3d83bf1ec7885549b47f9569e9ae0d05b948d) ) ROM_LOAD( "psb09",0x34000,0x2000, CRC(b2e8afa3) SHA1(30a3d83bf1ec7885549b47f9569e9ae0d05b948d) )
ROM_LOAD( "psb10",0x24000,0x2000, CRC(fbfb0aab) SHA1(2eb666a5eff31019b4ffdfc82e242ff47cd59527) ) ROM_LOAD( "psb10",0x38000,0x2000, CRC(fbfb0aab) SHA1(2eb666a5eff31019b4ffdfc82e242ff47cd59527) )
ROM_LOAD( "psb11",0x26000,0x2000, CRC(ddcd3cec) SHA1(7d0c3b4160b11ebe9b097664190d8ae605413baa) ) ROM_LOAD( "psb11",0x3c000,0x2000, CRC(ddcd3cec) SHA1(7d0c3b4160b11ebe9b097664190d8ae605413baa) )
ROM_LOAD( "psb12",0x28000,0x2000, CRC(c6617377) SHA1(29a6fc52e06c41f06ee333aad707c3a1952dff4d) ) ROM_LOAD( "psb12",0x40000,0x2000, CRC(c6617377) SHA1(29a6fc52e06c41f06ee333aad707c3a1952dff4d) )
ROM_LOAD( "psb13",0x2a000,0x2000, CRC(aeab8555) SHA1(c398cac5210022e3c9e25a9f2ef1017b27c21e62) ) ROM_LOAD( "psb13",0x44000,0x2000, CRC(aeab8555) SHA1(c398cac5210022e3c9e25a9f2ef1017b27c21e62) )
ROM_LOAD( "psb14",0x2c000,0x2000, CRC(ef35e314) SHA1(2e20517ff89b153fd888cf4eb0404a802e16b1b7) ) ROM_LOAD( "psb14",0x48000,0x2000, CRC(ef35e314) SHA1(2e20517ff89b153fd888cf4eb0404a802e16b1b7) )
ROM_LOAD( "psb15",0x2e000,0x2000, CRC(1fafe83d) SHA1(d1d406275f50d87547aabe1295795099f341433d) ) ROM_LOAD( "psb15",0x4c000,0x2000, CRC(1fafe83d) SHA1(d1d406275f50d87547aabe1295795099f341433d) )
ROM_LOAD( "psb16",0x30000,0x2000, CRC(ec49864f) SHA1(7a3b295972b52682406f75c4fe12c29632452491) ) ROM_LOAD( "psb16",0x50000,0x2000, CRC(ec49864f) SHA1(7a3b295972b52682406f75c4fe12c29632452491) )
ROM_LOAD( "psb17",0x32000,0x2000, CRC(d9778e85) SHA1(2998f0a08cdba8a75e687a54cb9a03edeb4b22cd) ) ROM_LOAD( "psb17",0x54000,0x2000, CRC(d9778e85) SHA1(2998f0a08cdba8a75e687a54cb9a03edeb4b22cd) )
ROM_LOAD( "psb18",0x34000,0x2000, CRC(ef61b6c0) SHA1(7e8a82beefb9fd8e219fc4d7d25a3a43ab8aadf7) ) ROM_LOAD( "psb18",0x58000,0x2000, CRC(ef61b6c0) SHA1(7e8a82beefb9fd8e219fc4d7d25a3a43ab8aadf7) )
ROM_LOAD( "psb19",0x36000,0x2000, CRC(68752e0d) SHA1(58a4921e4f774af5e1ef7af67f06e9b43643ffab) ) ROM_LOAD( "psb19",0x5c000,0x2000, CRC(68752e0d) SHA1(58a4921e4f774af5e1ef7af67f06e9b43643ffab) )
ROM_END ROM_END
DRIVER_INIT_MEMBER(mazerbla_state,mazerbla) DRIVER_INIT_MEMBER(mazerbla_state,mazerbla)