mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
Experimental Run & Gun base address setup. Added Palette and Text Layers, correctly drawn to each screen.
(TBD: how to declare a new m_paletteram base?)
This commit is contained in:
parent
28c29a1598
commit
832107ea54
@ -121,6 +121,7 @@ WRITE16_MEMBER(rungun_state::rng_sysregs_w)
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
membank("spriteram_bank")->set_entry((data & 0x80) >> 7);
|
||||
m_video_mux_bank = ((data & 0x80) >> 7) ^ 1;
|
||||
ioport("EEPROMOUT")->write(data, 0xff);
|
||||
}
|
||||
if (ACCESSING_BITS_8_15)
|
||||
@ -186,9 +187,24 @@ READ8_MEMBER(rungun_state::rng_53936_rom_r)
|
||||
return m_roz_rom[rom_addr];
|
||||
}
|
||||
|
||||
READ16_MEMBER(rungun_state::palette_read)
|
||||
{
|
||||
return m_video_mux_bank == 0 ? m_palette->read(space,offset,mem_mask) : m_palette2->read(space,offset,mem_mask);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(rungun_state::palette_write)
|
||||
{
|
||||
if(m_video_mux_bank == 0)
|
||||
m_palette->write(space,offset,data,mem_mask);
|
||||
else
|
||||
m_palette2->write(space,offset,data,mem_mask);
|
||||
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( rungun_map, AS_PROGRAM, 16, rungun_state )
|
||||
AM_RANGE(0x000000, 0x2fffff) AM_ROM // main program + data
|
||||
AM_RANGE(0x300000, 0x3007ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0x300000, 0x3007ff) AM_READWRITE(palette_read,palette_write) AM_SHARE("palette")
|
||||
AM_RANGE(0x300800, 0x300fff) AM_RAM AM_SHARE("palette2") // TODO: paletteram declaration
|
||||
AM_RANGE(0x380000, 0x39ffff) AM_RAM // work RAM
|
||||
AM_RANGE(0x400000, 0x43ffff) AM_READ8(rng_53936_rom_r,0x00ff) // '936 ROM readback window
|
||||
AM_RANGE(0x480000, 0x48001f) AM_READWRITE(rng_sysregs_r, rng_sysregs_w) AM_SHARE("sysreg")
|
||||
@ -361,7 +377,7 @@ void rungun_state::machine_start()
|
||||
save_item(NAME(m_sound_ctrl));
|
||||
save_item(NAME(m_sound_status));
|
||||
save_item(NAME(m_sound_nmi_clk));
|
||||
save_item(NAME(m_ttl_vram));
|
||||
//save_item(NAME(m_ttl_vram));
|
||||
}
|
||||
|
||||
void rungun_state::machine_reset()
|
||||
@ -369,7 +385,7 @@ void rungun_state::machine_reset()
|
||||
m_k054539_1->init_flags(k054539_device::REVERSE_STEREO);
|
||||
|
||||
memset(m_sysreg, 0, 0x20);
|
||||
memset(m_ttl_vram, 0, 0x1000 * sizeof(UINT16));
|
||||
//memset(m_ttl_vram, 0, 0x1000 * sizeof(UINT16));
|
||||
|
||||
m_sound_ctrl = 0;
|
||||
m_sound_status = 0;
|
||||
@ -451,6 +467,11 @@ static MACHINE_CONFIG_DERIVED( rng_dual, rng )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(rungun_state, screen_update_rng_dual_left)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
|
||||
MCFG_PALETTE_ADD("palette2", 1024)
|
||||
MCFG_PALETTE_FORMAT(xBBBBBGGGGGRRRRR)
|
||||
MCFG_PALETTE_ENABLE_SHADOWS()
|
||||
MCFG_PALETTE_ENABLE_HILIGHTS()
|
||||
|
||||
MCFG_SCREEN_ADD("demultiplex2", RASTER)
|
||||
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -458,7 +479,7 @@ static MACHINE_CONFIG_DERIVED( rng_dual, rng )
|
||||
MCFG_SCREEN_SIZE(64*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(88, 88+384-1, 24, 24+224-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(rungun_state, screen_update_rng_dual_right)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_PALETTE("palette2")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
// Older non-US 53936/A13 roms were all returning bad from the mask ROM check. Using the US ROM on non-US reports good therefore I guess that data matches for that
|
||||
|
@ -27,6 +27,7 @@ public:
|
||||
m_936_videoram(*this, "936_videoram"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_palette2(*this, "palette2"),
|
||||
m_screen(*this, "screen")
|
||||
{ }
|
||||
|
||||
@ -45,12 +46,14 @@ public:
|
||||
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
optional_device<palette_device> m_palette2;
|
||||
required_device<screen_device> m_screen;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_ttl_tilemap;
|
||||
tilemap_t *m_936_tilemap;
|
||||
UINT16 m_ttl_vram[0x1000];
|
||||
UINT16 *m_ttl_vram;
|
||||
UINT8 m_current_frame_number;
|
||||
int m_ttl_gfx_index;
|
||||
int m_sprite_colorbase;
|
||||
|
||||
@ -65,6 +68,7 @@ public:
|
||||
bool m_video_priority_mode;
|
||||
UINT16 *m_banked_ram;
|
||||
bool m_single_screen_mode;
|
||||
UINT8 m_video_mux_bank;
|
||||
|
||||
DECLARE_READ16_MEMBER(rng_sysregs_r);
|
||||
DECLARE_WRITE16_MEMBER(rng_sysregs_w);
|
||||
@ -81,6 +85,10 @@ public:
|
||||
TILE_GET_INFO_MEMBER(ttl_get_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_rng_936_tile_info);
|
||||
DECLARE_WRITE_LINE_MEMBER(k054539_nmi_gen);
|
||||
DECLARE_READ16_MEMBER(palette_read);
|
||||
DECLARE_WRITE16_MEMBER(palette_write);
|
||||
|
||||
|
||||
K055673_CB_MEMBER(sprite_callback);
|
||||
|
||||
virtual void machine_start();
|
||||
|
@ -18,8 +18,10 @@
|
||||
/* TTL text plane stuff */
|
||||
TILE_GET_INFO_MEMBER(rungun_state::ttl_get_tile_info)
|
||||
{
|
||||
UINT8 *lvram = (UINT8 *)m_ttl_vram;
|
||||
UINT8 *lvram = (UINT8 *)m_ttl_vram + (m_current_frame_number * 0x2000);
|
||||
int attr, code;
|
||||
|
||||
//tile_index += 1 * 0x1000;
|
||||
|
||||
attr = (lvram[BYTE_XOR_LE(tile_index<<2)] & 0xf0) >> 4;
|
||||
code = ((lvram[BYTE_XOR_LE(tile_index<<2)] & 0x0f) << 8) | (lvram[BYTE_XOR_LE((tile_index<<2)+2)]);
|
||||
@ -34,12 +36,12 @@ K055673_CB_MEMBER(rungun_state::sprite_callback)
|
||||
|
||||
READ16_MEMBER(rungun_state::rng_ttl_ram_r)
|
||||
{
|
||||
return m_ttl_vram[offset];
|
||||
return m_ttl_vram[offset+(m_video_mux_bank*0x1000)];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(rungun_state::rng_ttl_ram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_ttl_vram[offset]);
|
||||
COMBINE_DATA(&m_ttl_vram[offset+(m_video_mux_bank*0x1000)]);
|
||||
}
|
||||
|
||||
/* 53936 (PSAC2) rotation/zoom plane */
|
||||
@ -76,6 +78,7 @@ void rungun_state::video_start()
|
||||
|
||||
int gfx_index;
|
||||
|
||||
m_ttl_vram = auto_alloc_array(machine(), UINT16, 0x1000*2);
|
||||
m_936_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(rungun_state::get_rng_936_tile_info),this), TILEMAP_SCAN_ROWS, 16, 16, 128, 128);
|
||||
m_936_tilemap->set_transparent_pen(0);
|
||||
|
||||
@ -105,6 +108,8 @@ UINT32 rungun_state::screen_update_rng(screen_device &screen, bitmap_ind16 &bitm
|
||||
{
|
||||
bitmap.fill(m_palette->black_pen(), cliprect);
|
||||
screen.priority().fill(0, cliprect);
|
||||
m_current_frame_number = machine().first_screen()->frame_number() & 1;
|
||||
m_ttl_tilemap->mark_all_dirty();
|
||||
|
||||
if(m_video_priority_mode == false)
|
||||
{
|
||||
@ -117,7 +122,6 @@ UINT32 rungun_state::screen_update_rng(screen_device &screen, bitmap_ind16 &bitm
|
||||
m_k053936->zoom_draw(screen, bitmap, cliprect, m_936_tilemap, 0, 0, 1);
|
||||
}
|
||||
|
||||
m_ttl_tilemap->mark_all_dirty();
|
||||
m_ttl_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
|
||||
// copy frame output to temp buffers so we can demultiplex it for the dual screen output
|
||||
|
Loading…
Reference in New Issue
Block a user