mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
Slow and dirty, but it works.
This commit is contained in:
parent
832107ea54
commit
003d66f1ea
@ -175,6 +175,13 @@ READ16_MEMBER(rungun_state::sound_status_msb_r)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(rungun_state::rng_interrupt)
|
||||
{
|
||||
// TODO: in EOF
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
//for(int i=0;i<0x2000;i+=2)
|
||||
for(int i=0;i<0x1000;i+=2)
|
||||
m_k055673->k053247_word_w(space,i/2,m_banked_ram[(i + m_current_frame_number*0x2000) /2],0xffff);
|
||||
|
||||
if (m_sysreg[0x0c / 2] & 0x09)
|
||||
device.execute().set_input_line(M68K_IRQ_5, ASSERT_LINE);
|
||||
}
|
||||
@ -218,11 +225,11 @@ static ADDRESS_MAP_START( rungun_map, AS_PROGRAM, 16, rungun_state )
|
||||
AM_RANGE(0x580000, 0x58001f) AM_RAM // sound regs read/write fall-through
|
||||
AM_RANGE(0x5c0000, 0x5c000f) AM_DEVREAD("k055673", k055673_device, k055673_rom_word_r) // 246A ROM readback window
|
||||
AM_RANGE(0x5c0010, 0x5c001f) AM_DEVWRITE("k055673", k055673_device, k055673_reg_word_w)
|
||||
AM_RANGE(0x600000, 0x600fff) AM_DEVREADWRITE("k055673", k055673_device, k053247_word_r, k053247_word_w) // OBJ RAM
|
||||
AM_RANGE(0x601000, 0x601fff) AM_RAMBANK("spriteram_bank") // OBJ RAM, actually used as work RAM banked buffer
|
||||
AM_RANGE(0x600000, 0x601fff) AM_RAMBANK("spriteram_bank") // OBJ RAM
|
||||
// AM_RANGE(0x602000, 0x603fff) AM_DEVWRITE("k055673", k055673_device, k053247_word_w)
|
||||
AM_RANGE(0x640000, 0x640007) AM_DEVWRITE("k055673", k055673_device, k053246_word_w) // '246A registers
|
||||
AM_RANGE(0x680000, 0x68001f) AM_DEVWRITE("k053936", k053936_device, ctrl_w) // '936 registers
|
||||
AM_RANGE(0x6c0000, 0x6cffff) AM_RAM_WRITE(rng_936_videoram_w) AM_SHARE("936_videoram") // PSAC2 ('936) RAM (34v + 35v)
|
||||
AM_RANGE(0x6c0000, 0x6cffff) AM_READWRITE(rng_psac2_videoram_r,rng_psac2_videoram_w) // PSAC2 ('936) RAM (34v + 35v)
|
||||
AM_RANGE(0x700000, 0x7007ff) AM_DEVREADWRITE("k053936", k053936_device, linectrl_r, linectrl_w) // PSAC "Line RAM"
|
||||
AM_RANGE(0x740000, 0x741fff) AM_READWRITE(rng_ttl_ram_r, rng_ttl_ram_w) // text plane RAM
|
||||
AM_RANGE(0x7c0000, 0x7c0001) AM_WRITENOP // watchdog
|
||||
@ -371,7 +378,7 @@ void rungun_state::machine_start()
|
||||
membank("bank2")->configure_entries(0, 8, &ROM[0x10000], 0x4000);
|
||||
|
||||
m_banked_ram = auto_alloc_array_clear(machine(), UINT16, 0x2000);
|
||||
membank("spriteram_bank")->configure_entries(0,2,&m_banked_ram[0],0x1000);
|
||||
membank("spriteram_bank")->configure_entries(0,2,&m_banked_ram[0],0x2000);
|
||||
|
||||
|
||||
save_item(NAME(m_sound_ctrl));
|
||||
|
@ -24,7 +24,6 @@ public:
|
||||
m_k055673(*this, "k055673"),
|
||||
m_k053252(*this, "k053252"),
|
||||
m_sysreg(*this, "sysreg"),
|
||||
m_936_videoram(*this, "936_videoram"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_palette2(*this, "palette2"),
|
||||
@ -42,7 +41,6 @@ public:
|
||||
|
||||
/* memory pointers */
|
||||
required_shared_ptr<UINT16> m_sysreg;
|
||||
required_shared_ptr<UINT16> m_936_videoram;
|
||||
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
@ -52,6 +50,7 @@ public:
|
||||
/* video-related */
|
||||
tilemap_t *m_ttl_tilemap;
|
||||
tilemap_t *m_936_tilemap;
|
||||
UINT16 *m_psac2_vram;
|
||||
UINT16 *m_ttl_vram;
|
||||
UINT8 m_current_frame_number;
|
||||
int m_ttl_gfx_index;
|
||||
@ -80,7 +79,8 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(sound_ctrl_w);
|
||||
DECLARE_READ16_MEMBER(rng_ttl_ram_r);
|
||||
DECLARE_WRITE16_MEMBER(rng_ttl_ram_w);
|
||||
DECLARE_WRITE16_MEMBER(rng_936_videoram_w);
|
||||
DECLARE_READ16_MEMBER(rng_psac2_videoram_r);
|
||||
DECLARE_WRITE16_MEMBER(rng_psac2_videoram_w);
|
||||
DECLARE_READ8_MEMBER(rng_53936_rom_r);
|
||||
TILE_GET_INFO_MEMBER(ttl_get_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_rng_936_tile_info);
|
||||
|
@ -21,8 +21,6 @@ TILE_GET_INFO_MEMBER(rungun_state::ttl_get_tile_info)
|
||||
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)]);
|
||||
|
||||
@ -45,19 +43,25 @@ WRITE16_MEMBER(rungun_state::rng_ttl_ram_w)
|
||||
}
|
||||
|
||||
/* 53936 (PSAC2) rotation/zoom plane */
|
||||
WRITE16_MEMBER(rungun_state::rng_936_videoram_w)
|
||||
READ16_MEMBER(rungun_state::rng_psac2_videoram_r)
|
||||
{
|
||||
COMBINE_DATA(&m_936_videoram[offset]);
|
||||
m_936_tilemap->mark_tile_dirty(offset / 2);
|
||||
return m_psac2_vram[offset+(m_video_mux_bank*0x80000)];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(rungun_state::rng_psac2_videoram_w)
|
||||
{
|
||||
COMBINE_DATA(&m_psac2_vram[offset+(m_video_mux_bank*0x80000)]);
|
||||
//m_936_tilemap->mark_tile_dirty(offset / 2);
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(rungun_state::get_rng_936_tile_info)
|
||||
{
|
||||
int tileno, colour, flipx;
|
||||
|
||||
tileno = m_936_videoram[tile_index * 2 + 1] & 0x3fff;
|
||||
flipx = (m_936_videoram[tile_index * 2 + 1] & 0xc000) >> 14;
|
||||
colour = 0x10 + (m_936_videoram[tile_index * 2] & 0x000f);
|
||||
UINT32 base_addr = (m_current_frame_number * 0x80000);
|
||||
|
||||
tileno = m_psac2_vram[tile_index * 2 + 1 + base_addr] & 0x3fff;
|
||||
flipx = (m_psac2_vram[tile_index * 2 + 1 + base_addr] & 0xc000) >> 14;
|
||||
colour = 0x10 + (m_psac2_vram[tile_index * 2 + base_addr] & 0x000f);
|
||||
|
||||
SET_TILE_INFO_MEMBER(0, tileno, colour, TILE_FLIPYX(flipx));
|
||||
}
|
||||
@ -79,6 +83,7 @@ void rungun_state::video_start()
|
||||
int gfx_index;
|
||||
|
||||
m_ttl_vram = auto_alloc_array(machine(), UINT16, 0x1000*2);
|
||||
m_psac2_vram = auto_alloc_array(machine(), UINT16, 0x80000*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);
|
||||
|
||||
@ -109,7 +114,13 @@ 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();
|
||||
{
|
||||
m_ttl_tilemap->mark_all_dirty();
|
||||
m_936_tilemap->mark_all_dirty();
|
||||
|
||||
}
|
||||
// AM_RANGE(0x600000, 0x600fff) AM_DEVREADWRITE("k055673", k055673_device, k053247_word_r, k053247_word_w) // OBJ RAM
|
||||
|
||||
|
||||
if(m_video_priority_mode == false)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user