mirror of
https://github.com/holub/mame
synced 2025-07-04 09:28:51 +03:00
acommand: Use tilemap device
This commit is contained in:
parent
905434eec0
commit
fca6c44a52
@ -60,6 +60,7 @@ JALCF1 BIN 1,048,576 02-07-99 1:11a JALCF1.BIN
|
|||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "cpu/m68000/m68000.h"
|
#include "cpu/m68000/m68000.h"
|
||||||
#include "sound/okim6295.h"
|
#include "sound/okim6295.h"
|
||||||
|
#include "video/ms1_tmap.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
@ -71,29 +72,21 @@ class acommand_state : public driver_device
|
|||||||
public:
|
public:
|
||||||
acommand_state(const machine_config &mconfig, device_type type, const char *tag)
|
acommand_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_ac_bgvram(*this, "ac_bgvram"),
|
|
||||||
m_ac_txvram(*this, "ac_txvram"),
|
|
||||||
m_spriteram(*this, "spriteram"),
|
m_spriteram(*this, "spriteram"),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_oki1(*this, "oki1"),
|
m_oki1(*this, "oki1"),
|
||||||
m_oki2(*this, "oki2"),
|
m_oki2(*this, "oki2"),
|
||||||
m_gfxdecode(*this, "gfxdecode"),
|
m_gfxdecode(*this, "gfxdecode"),
|
||||||
m_palette(*this, "palette") { }
|
m_palette(*this, "palette"),
|
||||||
|
m_bgtmap(*this, "bgtmap"),
|
||||||
|
m_txtmap(*this, "txtmap") { }
|
||||||
|
|
||||||
required_shared_ptr<uint16_t> m_ac_bgvram;
|
|
||||||
required_shared_ptr<uint16_t> m_ac_txvram;
|
|
||||||
required_shared_ptr<uint16_t> m_spriteram;
|
required_shared_ptr<uint16_t> m_spriteram;
|
||||||
tilemap_t *m_tx_tilemap;
|
|
||||||
tilemap_t *m_bg_tilemap;
|
|
||||||
std::unique_ptr<uint16_t[]> m_ac_vregs;
|
std::unique_ptr<uint16_t[]> m_ac_vregs;
|
||||||
uint16_t m_7seg0;
|
uint16_t m_7seg0;
|
||||||
uint16_t m_7seg1;
|
uint16_t m_7seg1;
|
||||||
uint16_t m_ufo_lane[5];
|
uint16_t m_ufo_lane[5];
|
||||||
uint8_t m_boss_door;
|
uint8_t m_boss_door;
|
||||||
DECLARE_WRITE16_MEMBER(ac_bgvram_w);
|
|
||||||
DECLARE_WRITE16_MEMBER(ac_txvram_w);
|
|
||||||
DECLARE_WRITE16_MEMBER(ac_bgscroll_w);
|
|
||||||
DECLARE_WRITE16_MEMBER(ac_txscroll_w);
|
|
||||||
DECLARE_WRITE8_MEMBER(oki_bank_w);
|
DECLARE_WRITE8_MEMBER(oki_bank_w);
|
||||||
DECLARE_WRITE16_MEMBER(output_7seg0_w);
|
DECLARE_WRITE16_MEMBER(output_7seg0_w);
|
||||||
DECLARE_WRITE16_MEMBER(output_7seg1_w);
|
DECLARE_WRITE16_MEMBER(output_7seg1_w);
|
||||||
@ -107,8 +100,6 @@ public:
|
|||||||
|
|
||||||
DECLARE_WRITE16_MEMBER(ac_unk2_w);
|
DECLARE_WRITE16_MEMBER(ac_unk2_w);
|
||||||
TILEMAP_MAPPER_MEMBER(bg_scan);
|
TILEMAP_MAPPER_MEMBER(bg_scan);
|
||||||
TILE_GET_INFO_MEMBER(ac_get_bg_tile_info);
|
|
||||||
TILE_GET_INFO_MEMBER(ac_get_tx_tile_info);
|
|
||||||
virtual void video_start() override;
|
virtual void video_start() override;
|
||||||
uint32_t screen_update_acommand(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
uint32_t screen_update_acommand(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(acommand_scanline);
|
TIMER_DEVICE_CALLBACK_MEMBER(acommand_scanline);
|
||||||
@ -118,34 +109,12 @@ public:
|
|||||||
required_device<okim6295_device> m_oki2;
|
required_device<okim6295_device> m_oki2;
|
||||||
required_device<gfxdecode_device> m_gfxdecode;
|
required_device<gfxdecode_device> m_gfxdecode;
|
||||||
required_device<palette_device> m_palette;
|
required_device<palette_device> m_palette;
|
||||||
|
required_device<megasys1_tilemap_device> m_bgtmap;
|
||||||
|
required_device<megasys1_tilemap_device> m_txtmap;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TILEMAP_MAPPER_MEMBER(acommand_state::bg_scan)
|
|
||||||
{
|
|
||||||
/* logical (col,row) -> memory offset */
|
|
||||||
return (row & 0x0f) + ((col & 0xff) << 4) + ((row & 0x70) << 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
TILE_GET_INFO_MEMBER(acommand_state::ac_get_bg_tile_info)
|
|
||||||
{
|
|
||||||
int code = m_ac_bgvram[tile_index];
|
|
||||||
SET_TILE_INFO_MEMBER(1,
|
|
||||||
code & 0xfff,
|
|
||||||
(code & 0xf000) >> 12,
|
|
||||||
0);
|
|
||||||
}
|
|
||||||
|
|
||||||
TILE_GET_INFO_MEMBER(acommand_state::ac_get_tx_tile_info)
|
|
||||||
{
|
|
||||||
int code = m_ac_txvram[tile_index];
|
|
||||||
SET_TILE_INFO_MEMBER(0,
|
|
||||||
code & 0xfff,
|
|
||||||
(code & 0xf000) >> 12,
|
|
||||||
0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void acommand_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority, int pri_mask)
|
void acommand_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority, int pri_mask)
|
||||||
{
|
{
|
||||||
uint16_t *spriteram16 = m_spriteram;
|
uint16_t *spriteram16 = m_spriteram;
|
||||||
@ -188,7 +157,7 @@ void acommand_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
|
|||||||
xx = w;
|
xx = w;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
m_gfxdecode->gfx(2)->transpen(bitmap,cliprect,
|
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
|
||||||
code,
|
code,
|
||||||
color,
|
color,
|
||||||
flipx, flipy,
|
flipx, flipy,
|
||||||
@ -210,13 +179,7 @@ void acommand_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
|
|||||||
|
|
||||||
void acommand_state::video_start()
|
void acommand_state::video_start()
|
||||||
{
|
{
|
||||||
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(acommand_state::ac_get_tx_tile_info),this),TILEMAP_SCAN_COLS,8,8,512,32);
|
|
||||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(acommand_state::ac_get_bg_tile_info),this),tilemap_mapper_delegate(FUNC(acommand_state::bg_scan),this),16,16,256,16);
|
|
||||||
|
|
||||||
m_ac_vregs = std::make_unique<uint16_t[]>(0x80/2);
|
m_ac_vregs = std::make_unique<uint16_t[]>(0x80/2);
|
||||||
|
|
||||||
m_bg_tilemap->set_transparent_pen(15);
|
|
||||||
m_tx_tilemap->set_transparent_pen(15);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -225,46 +188,14 @@ uint32_t acommand_state::screen_update_acommand(screen_device &screen, bitmap_in
|
|||||||
// reference has black pen background, as weird it might sound
|
// reference has black pen background, as weird it might sound
|
||||||
bitmap.fill(m_palette->black_pen(), cliprect);
|
bitmap.fill(m_palette->black_pen(), cliprect);
|
||||||
|
|
||||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
|
m_bgtmap->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
draw_sprites(bitmap,cliprect,0,0);
|
draw_sprites(bitmap,cliprect,0,0);
|
||||||
m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);
|
m_txtmap->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE16_MEMBER(acommand_state::ac_bgvram_w)
|
|
||||||
{
|
|
||||||
COMBINE_DATA(&m_ac_bgvram[offset]);
|
|
||||||
m_bg_tilemap->mark_tile_dirty(offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE16_MEMBER(acommand_state::ac_txvram_w)
|
|
||||||
{
|
|
||||||
COMBINE_DATA(&m_ac_txvram[offset]);
|
|
||||||
m_tx_tilemap->mark_tile_dirty(offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE16_MEMBER(acommand_state::ac_bgscroll_w)
|
|
||||||
{
|
|
||||||
switch(offset)
|
|
||||||
{
|
|
||||||
case 0: m_bg_tilemap->set_scrollx(0,data); break;
|
|
||||||
case 1: m_bg_tilemap->set_scrolly(0,data); break;
|
|
||||||
case 2: /*BG_TILEMAP priority?*/ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE16_MEMBER(acommand_state::ac_txscroll_w)
|
|
||||||
{
|
|
||||||
switch(offset)
|
|
||||||
{
|
|
||||||
case 0: m_tx_tilemap->set_scrollx(0,data); break;
|
|
||||||
case 1: m_tx_tilemap->set_scrolly(0,data); break;
|
|
||||||
case 2: /*TX_TILEMAP priority?*/ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
|
|
||||||
/*This is always zero ATM*/
|
/*This is always zero ATM*/
|
||||||
@ -388,11 +319,11 @@ WRITE16_MEMBER(acommand_state::output_lamps_w)
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( acommand_map, AS_PROGRAM, 16, acommand_state )
|
static ADDRESS_MAP_START( acommand_map, AS_PROGRAM, 16, acommand_state )
|
||||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||||
AM_RANGE(0x082000, 0x082005) AM_WRITE(ac_bgscroll_w)
|
AM_RANGE(0x082000, 0x082005) AM_DEVWRITE("bgtmap", megasys1_tilemap_device, scroll_w)
|
||||||
AM_RANGE(0x082100, 0x082105) AM_WRITE(ac_txscroll_w)
|
AM_RANGE(0x082100, 0x082105) AM_DEVWRITE("txtmap", megasys1_tilemap_device, scroll_w)
|
||||||
AM_RANGE(0x082208, 0x082209) AM_WRITE(ac_unk2_w)
|
AM_RANGE(0x082208, 0x082209) AM_WRITE(ac_unk2_w)
|
||||||
AM_RANGE(0x0a0000, 0x0a3fff) AM_RAM_WRITE(ac_bgvram_w) AM_SHARE("ac_bgvram")
|
AM_RANGE(0x0a0000, 0x0a3fff) AM_RAM_DEVWRITE("bgtmap", megasys1_tilemap_device, write) AM_SHARE("bgtmap")
|
||||||
AM_RANGE(0x0b0000, 0x0b3fff) AM_RAM_WRITE(ac_txvram_w) AM_SHARE("ac_txvram")
|
AM_RANGE(0x0b0000, 0x0b3fff) AM_RAM_DEVWRITE("txtmap", megasys1_tilemap_device, write) AM_SHARE("txtmap")
|
||||||
AM_RANGE(0x0b8000, 0x0bffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
AM_RANGE(0x0b8000, 0x0bffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||||
AM_RANGE(0x0f0000, 0x0f7fff) AM_RAM
|
AM_RANGE(0x0f0000, 0x0f7fff) AM_RAM
|
||||||
AM_RANGE(0x0f8000, 0x0f8fff) AM_RAM AM_SHARE("spriteram")
|
AM_RANGE(0x0f8000, 0x0f8fff) AM_RAM AM_SHARE("spriteram")
|
||||||
@ -499,17 +430,6 @@ static INPUT_PORTS_START( acommand )
|
|||||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
static const gfx_layout charlayout =
|
|
||||||
{
|
|
||||||
8,8,
|
|
||||||
RGN_FRAC(1,1),
|
|
||||||
4,
|
|
||||||
{ 0, 1, 2, 3 },
|
|
||||||
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4 },
|
|
||||||
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
|
|
||||||
32*8
|
|
||||||
};
|
|
||||||
|
|
||||||
static const gfx_layout tilelayout =
|
static const gfx_layout tilelayout =
|
||||||
{
|
{
|
||||||
16,16,
|
16,16,
|
||||||
@ -524,8 +444,6 @@ static const gfx_layout tilelayout =
|
|||||||
};
|
};
|
||||||
|
|
||||||
static GFXDECODE_START( acommand )
|
static GFXDECODE_START( acommand )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x2700, 16 ) /*???*/
|
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, tilelayout, 0x0f00, 256 )
|
|
||||||
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0x1800, 256 )
|
GFXDECODE_ENTRY( "gfx3", 0, tilelayout, 0x1800, 256 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
@ -560,6 +478,9 @@ static MACHINE_CONFIG_START( acommand, acommand_state )
|
|||||||
MCFG_PALETTE_ADD("palette", 0x4000)
|
MCFG_PALETTE_ADD("palette", 0x4000)
|
||||||
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
|
MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx)
|
||||||
|
|
||||||
|
MCFG_MEGASYS1_TILEMAP_ADD("bgtmap", "palette", 0x0f00)
|
||||||
|
MCFG_MEGASYS1_TILEMAP_ADD("txtmap", "palette", 0x2700)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||||
|
|
||||||
@ -583,10 +504,10 @@ ROM_START( acommand )
|
|||||||
ROM_LOAD16_BYTE( "jalcf3.bin", 0x000000, 0x020000, CRC(f031abf7) SHA1(e381742fd6a6df4ddae42ddb3a074a55dc550b3c) )
|
ROM_LOAD16_BYTE( "jalcf3.bin", 0x000000, 0x020000, CRC(f031abf7) SHA1(e381742fd6a6df4ddae42ddb3a074a55dc550b3c) )
|
||||||
ROM_LOAD16_BYTE( "jalcf4.bin", 0x000001, 0x020000, CRC(dd0c0540) SHA1(3e788fcb30ae725bd0ec9b57424e3946db1e946f) )
|
ROM_LOAD16_BYTE( "jalcf4.bin", 0x000001, 0x020000, CRC(dd0c0540) SHA1(3e788fcb30ae725bd0ec9b57424e3946db1e946f) )
|
||||||
|
|
||||||
ROM_REGION( 0x20000, "gfx1", 0 ) /* BG0 */
|
ROM_REGION( 0x20000, "txtmap", 0 ) /* BG0 */
|
||||||
ROM_LOAD( "jalcf6.bin", 0x000000, 0x020000, CRC(442173d6) SHA1(56c02bc2761967040127977ecabe844fc45e2218) )
|
ROM_LOAD( "jalcf6.bin", 0x000000, 0x020000, CRC(442173d6) SHA1(56c02bc2761967040127977ecabe844fc45e2218) )
|
||||||
|
|
||||||
ROM_REGION( 0x080000, "gfx2", 0 ) /* BG1 */
|
ROM_REGION( 0x080000, "bgtmap", 0 ) /* BG1 */
|
||||||
ROM_LOAD( "jalcf5.bin", 0x000000, 0x080000, CRC(ff0be97f) SHA1(5ccab778318dec30849d7b7f25091d4aab8bde32) )
|
ROM_LOAD( "jalcf5.bin", 0x000000, 0x080000, CRC(ff0be97f) SHA1(5ccab778318dec30849d7b7f25091d4aab8bde32) )
|
||||||
|
|
||||||
ROM_REGION( 0x400000, "gfx3", 0 ) /* SPR */
|
ROM_REGION( 0x400000, "gfx3", 0 ) /* SPR */
|
||||||
|
Loading…
Reference in New Issue
Block a user