mirror of
https://github.com/holub/mame
synced 2025-04-26 10:13:37 +03:00
Fixed ROM GFX banking in Great Guns
This commit is contained in:
parent
aa6def709e
commit
522da35d80
@ -18,6 +18,43 @@ Device for Mazer Blazer/Great Guns custom Video Controller Unit
|
||||
// device type definition
|
||||
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
|
||||
@ -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)
|
||||
: 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
|
||||
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()
|
||||
{
|
||||
if(m_cpu_tag)
|
||||
{
|
||||
m_cpu = machine().device(m_cpu_tag);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cpu = NULL;
|
||||
}
|
||||
|
||||
// TODO: m_screen_tag
|
||||
}
|
||||
|
||||
|
||||
@ -96,12 +127,44 @@ void mb_vcu_device::device_reset()
|
||||
// READ/WRITE HANDLERS
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER( mb_vcu_device::read )
|
||||
READ8_MEMBER( mb_vcu_device::read_ram )
|
||||
{
|
||||
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 )
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -29,12 +29,13 @@ Template for skeleton device
|
||||
|
||||
struct mb_vcu_interface
|
||||
{
|
||||
const char *m_cpu_tag;
|
||||
const char *m_screen_tag;
|
||||
};
|
||||
|
||||
// ======================> mb_vcu_device
|
||||
|
||||
class mb_vcu_device : public device_t,
|
||||
public device_memory_interface,
|
||||
public device_video_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);
|
||||
|
||||
// I/O operations
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write_vregs );
|
||||
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);
|
||||
|
||||
@ -54,9 +62,12 @@ protected:
|
||||
virtual void device_validity_check(validity_checker &valid) const;
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
|
||||
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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -195,7 +195,6 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(cfb_backgnd_color_w);
|
||||
DECLARE_WRITE8_MEMBER(cfb_vbank_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_WRITE8_MEMBER(vcu_video_reg_w);
|
||||
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);
|
||||
}
|
||||
|
||||
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? */
|
||||
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)
|
||||
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 )
|
||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||
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_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
|
||||
and cleared on ANY port access.
|
||||
but handled differently for now
|
||||
@ -1761,30 +1742,30 @@ ROM_START( greatgun )
|
||||
ROM_REGION( 0x10000, "sub", 0 ) /* 64k for sound CPU (PSB board) */
|
||||
ROM_LOAD( "psba4",0x0000, 0x2000, CRC(172a793e) SHA1(3618a778af1f4a6267bf7e0786529be731ac9b76) )
|
||||
|
||||
ROM_REGION( 0x38000, "sub2", 0 ) /* 64k for video CPU (CFB board) */
|
||||
ROM_LOAD( "cfb0",0x0000, 0x2000, CRC(ee372b1f) SHA1(b630fd659d59eb8c2540f18d91ae0d72e859fc4f) )
|
||||
ROM_LOAD( "cfb1",0x2000, 0x2000, CRC(b76d9527) SHA1(8f16b850bd67d553aaaf7e176754e36aba581445) )
|
||||
ROM_REGION( 0x60000, "sub2", 0 ) /* 64k for video CPU (CFB board) */
|
||||
ROM_LOAD( "cfb0",0x00000, 0x2000, CRC(ee372b1f) SHA1(b630fd659d59eb8c2540f18d91ae0d72e859fc4f) )
|
||||
ROM_LOAD( "cfb1",0x02000, 0x2000, CRC(b76d9527) SHA1(8f16b850bd67d553aaaf7e176754e36aba581445) )
|
||||
|
||||
ROM_LOAD( "psb00",0x10000,0x2000, CRC(b4956100) SHA1(98baf5c27c76dc5c4eafc44f42705239504637fe) )/*banked at 0x4000*/
|
||||
ROM_LOAD( "psb01",0x12000,0x2000, CRC(acdce2ee) SHA1(96b8961afbd0006b10cfdc825aefe27ec18121ff) )
|
||||
ROM_LOAD( "psb02",0x14000,0x2000, CRC(cb840fc6) SHA1(c30c72d355e1957f3715e9fab701f65b9d7d632a) )
|
||||
ROM_LOAD( "psb03",0x16000,0x2000, CRC(86ea6f99) SHA1(ce5d42557d0a62eebe3d0cee28587d60707573e4) )
|
||||
ROM_LOAD( "psb04",0x18000,0x2000, CRC(65379893) SHA1(84bb755e23d5ce13b1c82e59f24f3890c50697cc) )
|
||||
ROM_LOAD( "psb05",0x1a000,0x2000, CRC(f82245cb) SHA1(fa1cab94a03ce7b8e45ea6eec572b21f268f7547) )
|
||||
ROM_LOAD( "psb06",0x1c000,0x2000, CRC(6b86794f) SHA1(72cf67ecf5a9198ecb44dd846de968e6cdd6458d) )
|
||||
ROM_LOAD( "psb07",0x1e000,0x2000, CRC(60a7abf3) SHA1(44b932d8af29ec706c29d6b71a8bac6318d92315) )
|
||||
ROM_LOAD( "psb08",0x20000,0x2000, CRC(854be14e) SHA1(ae9b1fe2443c87bb4334bc776f7bc7e5fa874f38) )
|
||||
ROM_LOAD( "psb09",0x22000,0x2000, CRC(b2e8afa3) SHA1(30a3d83bf1ec7885549b47f9569e9ae0d05b948d) )
|
||||
ROM_LOAD( "psb10",0x24000,0x2000, CRC(fbfb0aab) SHA1(2eb666a5eff31019b4ffdfc82e242ff47cd59527) )
|
||||
ROM_LOAD( "psb11",0x26000,0x2000, CRC(ddcd3cec) SHA1(7d0c3b4160b11ebe9b097664190d8ae605413baa) )
|
||||
ROM_LOAD( "psb12",0x28000,0x2000, CRC(c6617377) SHA1(29a6fc52e06c41f06ee333aad707c3a1952dff4d) )
|
||||
ROM_LOAD( "psb13",0x2a000,0x2000, CRC(aeab8555) SHA1(c398cac5210022e3c9e25a9f2ef1017b27c21e62) )
|
||||
ROM_LOAD( "psb14",0x2c000,0x2000, CRC(ef35e314) SHA1(2e20517ff89b153fd888cf4eb0404a802e16b1b7) )
|
||||
ROM_LOAD( "psb15",0x2e000,0x2000, CRC(1fafe83d) SHA1(d1d406275f50d87547aabe1295795099f341433d) )
|
||||
ROM_LOAD( "psb16",0x30000,0x2000, CRC(ec49864f) SHA1(7a3b295972b52682406f75c4fe12c29632452491) )
|
||||
ROM_LOAD( "psb17",0x32000,0x2000, CRC(d9778e85) SHA1(2998f0a08cdba8a75e687a54cb9a03edeb4b22cd) )
|
||||
ROM_LOAD( "psb18",0x34000,0x2000, CRC(ef61b6c0) SHA1(7e8a82beefb9fd8e219fc4d7d25a3a43ab8aadf7) )
|
||||
ROM_LOAD( "psb19",0x36000,0x2000, CRC(68752e0d) SHA1(58a4921e4f774af5e1ef7af67f06e9b43643ffab) )
|
||||
ROM_LOAD( "psb01",0x14000,0x2000, CRC(acdce2ee) SHA1(96b8961afbd0006b10cfdc825aefe27ec18121ff) )
|
||||
ROM_LOAD( "psb02",0x18000,0x2000, CRC(cb840fc6) SHA1(c30c72d355e1957f3715e9fab701f65b9d7d632a) )
|
||||
ROM_LOAD( "psb03",0x1c000,0x2000, CRC(86ea6f99) SHA1(ce5d42557d0a62eebe3d0cee28587d60707573e4) )
|
||||
ROM_LOAD( "psb04",0x20000,0x2000, CRC(65379893) SHA1(84bb755e23d5ce13b1c82e59f24f3890c50697cc) )
|
||||
ROM_LOAD( "psb05",0x24000,0x2000, CRC(f82245cb) SHA1(fa1cab94a03ce7b8e45ea6eec572b21f268f7547) )
|
||||
ROM_LOAD( "psb06",0x28000,0x2000, CRC(6b86794f) SHA1(72cf67ecf5a9198ecb44dd846de968e6cdd6458d) )
|
||||
ROM_LOAD( "psb07",0x2c000,0x2000, CRC(60a7abf3) SHA1(44b932d8af29ec706c29d6b71a8bac6318d92315) )
|
||||
ROM_LOAD( "psb08",0x30000,0x2000, CRC(854be14e) SHA1(ae9b1fe2443c87bb4334bc776f7bc7e5fa874f38) )
|
||||
ROM_LOAD( "psb09",0x34000,0x2000, CRC(b2e8afa3) SHA1(30a3d83bf1ec7885549b47f9569e9ae0d05b948d) )
|
||||
ROM_LOAD( "psb10",0x38000,0x2000, CRC(fbfb0aab) SHA1(2eb666a5eff31019b4ffdfc82e242ff47cd59527) )
|
||||
ROM_LOAD( "psb11",0x3c000,0x2000, CRC(ddcd3cec) SHA1(7d0c3b4160b11ebe9b097664190d8ae605413baa) )
|
||||
ROM_LOAD( "psb12",0x40000,0x2000, CRC(c6617377) SHA1(29a6fc52e06c41f06ee333aad707c3a1952dff4d) )
|
||||
ROM_LOAD( "psb13",0x44000,0x2000, CRC(aeab8555) SHA1(c398cac5210022e3c9e25a9f2ef1017b27c21e62) )
|
||||
ROM_LOAD( "psb14",0x48000,0x2000, CRC(ef35e314) SHA1(2e20517ff89b153fd888cf4eb0404a802e16b1b7) )
|
||||
ROM_LOAD( "psb15",0x4c000,0x2000, CRC(1fafe83d) SHA1(d1d406275f50d87547aabe1295795099f341433d) )
|
||||
ROM_LOAD( "psb16",0x50000,0x2000, CRC(ec49864f) SHA1(7a3b295972b52682406f75c4fe12c29632452491) )
|
||||
ROM_LOAD( "psb17",0x54000,0x2000, CRC(d9778e85) SHA1(2998f0a08cdba8a75e687a54cb9a03edeb4b22cd) )
|
||||
ROM_LOAD( "psb18",0x58000,0x2000, CRC(ef61b6c0) SHA1(7e8a82beefb9fd8e219fc4d7d25a3a43ab8aadf7) )
|
||||
ROM_LOAD( "psb19",0x5c000,0x2000, CRC(68752e0d) SHA1(58a4921e4f774af5e1ef7af67f06e9b43643ffab) )
|
||||
ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(mazerbla_state,mazerbla)
|
||||
|
Loading…
Reference in New Issue
Block a user