From 003d66f1ea71c9c3767792a77c9de7d46f1ce293 Mon Sep 17 00:00:00 2001 From: angelosa Date: Wed, 2 Dec 2015 20:50:30 +0100 Subject: [PATCH] Slow and dirty, but it works. --- src/mame/drivers/rungun.cpp | 15 +++++++++++---- src/mame/includes/rungun.h | 6 +++--- src/mame/video/rungun.cpp | 31 +++++++++++++++++++++---------- 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/mame/drivers/rungun.cpp b/src/mame/drivers/rungun.cpp index aa4493f0f37..e95a9558815 100644 --- a/src/mame/drivers/rungun.cpp +++ b/src/mame/drivers/rungun.cpp @@ -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)); diff --git a/src/mame/includes/rungun.h b/src/mame/includes/rungun.h index 26395e8832c..adab204d000 100644 --- a/src/mame/includes/rungun.h +++ b/src/mame/includes/rungun.h @@ -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 m_sysreg; - required_shared_ptr m_936_videoram; required_device m_gfxdecode; required_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); diff --git a/src/mame/video/rungun.cpp b/src/mame/video/rungun.cpp index 6ca8f6eebfb..f34c89fc49c 100644 --- a/src/mame/video/rungun.cpp +++ b/src/mame/video/rungun.cpp @@ -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) {