tatsumi.cpp: added vertical text scrolling to Round Up 5 [Angelo Salese]

This commit is contained in:
angelosa 2018-05-28 00:25:32 +02:00
parent 1a0ca46e48
commit 16428d169f
3 changed files with 70 additions and 22 deletions

View File

@ -34,6 +34,7 @@
checkable in attract mode; checkable in attract mode;
- Split these games into individual drivers, write new devices for video routines. - Split these games into individual drivers, write new devices for video routines.
- Dip switches - Dip switches
- Deviceify HD6445 (superset of 6845)
- Various other things.. - Various other things..
@ -220,6 +221,14 @@ WRITE16_MEMBER(cyclwarr_state::cyclwarr_videoram_w)
} }
} }
WRITE16_MEMBER(cyclwarr_state::output_w)
{
machine().bookkeeping().coin_counter_w(0, data & 1);
machine().bookkeeping().coin_counter_w(1, data & 2);
if(data & 0xfffc)
logerror("output_w = %04x & %04x\n",data,mem_mask);
}
/***************************************************************************/ /***************************************************************************/
void apache3_state::apache3_v30_map(address_map &map) void apache3_state::apache3_v30_map(address_map &map)
@ -228,7 +237,7 @@ void apache3_state::apache3_v30_map(address_map &map)
map(0x04000, 0x07fff).ram().share("nvram"); map(0x04000, 0x07fff).ram().share("nvram");
map(0x08000, 0x08fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x08000, 0x08fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x0c000, 0x0dfff).ram().w(this, FUNC(apache3_state::text_w)).share("videoram"); map(0x0c000, 0x0dfff).ram().w(this, FUNC(apache3_state::text_w)).share("videoram");
map(0x0e800, 0x0e803).nopw(); // CRT map(0x0e800, 0x0e803).w(this, FUNC(tatsumi_state::hd6445_crt_w)).umask16(0x00ff);
map(0x0f000, 0x0f001).portr("DSW"); map(0x0f000, 0x0f001).portr("DSW");
map(0x0f000, 0x0f001).nopw(); // todo map(0x0f000, 0x0f001).nopw(); // todo
map(0x0f800, 0x0f801).rw(this, FUNC(apache3_state::apache3_bank_r), FUNC(apache3_state::apache3_bank_w)); map(0x0f800, 0x0f801).rw(this, FUNC(apache3_state::apache3_bank_r), FUNC(apache3_state::apache3_bank_w));
@ -242,7 +251,7 @@ void apache3_state::apache3_68000_map(address_map &map)
map(0x00000, 0x7ffff).rom(); map(0x00000, 0x7ffff).rom();
map(0x80000, 0x83fff).ram().share("68k_ram"); map(0x80000, 0x83fff).ram().share("68k_ram");
map(0x90000, 0x93fff).ram().share("spriteram"); map(0x90000, 0x93fff).ram().share("spriteram");
map(0x9a000, 0x9a1ff).w(this, FUNC(apache3_state::tatsumi_sprite_control_w)).share("sprite_ctlram"); map(0x9a000, 0x9a1ff).rw(this, FUNC(apache3_state::tatsumi_sprite_control_r), FUNC(apache3_state::tatsumi_sprite_control_w)).share("sprite_ctlram");
map(0xa0000, 0xa0001).w(this, FUNC(apache3_state::apache3_rotate_w)); // /BNKCS map(0xa0000, 0xa0001).w(this, FUNC(apache3_state::apache3_rotate_w)); // /BNKCS
map(0xb0000, 0xb0001).w(this, FUNC(apache3_state::apache3_z80_ctrl_w)); map(0xb0000, 0xb0001).w(this, FUNC(apache3_state::apache3_z80_ctrl_w));
map(0xc0000, 0xc0001).w(this, FUNC(apache3_state::apache3_road_z_w)); // /LINCS map(0xc0000, 0xc0001).w(this, FUNC(apache3_state::apache3_road_z_w)); // /LINCS
@ -273,7 +282,7 @@ void roundup5_state::roundup5_v30_map(address_map &map)
{ {
map(0x00000, 0x07fff).ram(); map(0x00000, 0x07fff).ram();
map(0x08000, 0x0bfff).ram().w(this, FUNC(roundup5_state::text_w)).share("videoram"); map(0x08000, 0x0bfff).ram().w(this, FUNC(roundup5_state::text_w)).share("videoram");
map(0x0c000, 0x0c003).w(this, FUNC(roundup5_state::roundup5_crt_w)); map(0x0c000, 0x0c003).w(this, FUNC(tatsumi_state::hd6445_crt_w)).umask16(0x00ff);
map(0x0d000, 0x0d001).portr("DSW"); map(0x0d000, 0x0d001).portr("DSW");
map(0x0d400, 0x0d40f).writeonly().share("ru5_unknown0"); map(0x0d400, 0x0d40f).writeonly().share("ru5_unknown0");
map(0x0d800, 0x0d801).writeonly().share("ru5_unknown1"); // VRAM2 X scroll (todo) map(0x0d800, 0x0d801).writeonly().share("ru5_unknown1"); // VRAM2 X scroll (todo)
@ -291,7 +300,7 @@ void roundup5_state::roundup5_68000_map(address_map &map)
map(0x00000, 0x7ffff).rom(); map(0x00000, 0x7ffff).rom();
map(0x80000, 0x83fff).ram().share("68k_ram"); map(0x80000, 0x83fff).ram().share("68k_ram");
map(0x90000, 0x93fff).ram().share("spriteram"); map(0x90000, 0x93fff).ram().share("spriteram");
map(0x9a000, 0x9a1ff).w(this, FUNC(roundup5_state::tatsumi_sprite_control_w)).share("sprite_ctlram"); map(0x9a000, 0x9a1ff).rw(this, FUNC(roundup5_state::tatsumi_sprite_control_r), FUNC(roundup5_state::tatsumi_sprite_control_w)).share("sprite_ctlram");
map(0xa0000, 0xa0fff).ram().share("roundup_r_ram"); // Road control data map(0xa0000, 0xa0fff).ram().share("roundup_r_ram"); // Road control data
map(0xb0000, 0xb0fff).ram().share("roundup_p_ram"); // Road pixel data map(0xb0000, 0xb0fff).ram().share("roundup_p_ram"); // Road pixel data
map(0xc0000, 0xc0fff).ram().share("roundup_l_ram"); // Road colour data map(0xc0000, 0xc0fff).ram().share("roundup_l_ram"); // Road colour data
@ -322,12 +331,14 @@ void cyclwarr_state::cyclwarr_68000a_map(address_map &map)
map(0x0a2000, 0x0a2007).w(this, FUNC(cyclwarr_state::bigfight_a20000_w)); map(0x0a2000, 0x0a2007).w(this, FUNC(cyclwarr_state::bigfight_a20000_w));
map(0x0a4000, 0x0a4001).w(this, FUNC(cyclwarr_state::bigfight_a40000_w)); map(0x0a4000, 0x0a4001).w(this, FUNC(cyclwarr_state::bigfight_a40000_w));
map(0x0a6000, 0x0a6001).w(this, FUNC(cyclwarr_state::bigfight_a60000_w)); map(0x0a6000, 0x0a6001).w(this, FUNC(cyclwarr_state::bigfight_a60000_w));
map(0x0ac000, 0x0ac003).w(this, FUNC(tatsumi_state::hd6445_crt_w)).umask16(0x00ff);
map(0x0b8000, 0x0b8001).w(this, FUNC(cyclwarr_state::cyclwarr_sound_w)).umask16(0xff00); map(0x0b8000, 0x0b8001).w(this, FUNC(cyclwarr_state::cyclwarr_sound_w)).umask16(0xff00);
map(0x0b9000, 0x0b900f).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16); map(0x0b9000, 0x0b900f).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0ba000, 0x0ba00f).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16); map(0x0ba000, 0x0ba00f).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0bc000, 0x0bc001).w(this, FUNC(cyclwarr_state::output_w));
map(0x0c0000, 0x0c3fff).rw(this, FUNC(cyclwarr_state::cyclwarr_sprite_r), FUNC(cyclwarr_state::cyclwarr_sprite_w)).share("spriteram"); map(0x0c0000, 0x0c3fff).rw(this, FUNC(cyclwarr_state::cyclwarr_sprite_r), FUNC(cyclwarr_state::cyclwarr_sprite_w)).share("spriteram");
map(0x0ca000, 0x0ca1ff).w(this, FUNC(cyclwarr_state::tatsumi_sprite_control_w)).share("sprite_ctlram"); map(0x0ca000, 0x0ca1ff).rw(this, FUNC(cyclwarr_state::tatsumi_sprite_control_r), FUNC(cyclwarr_state::tatsumi_sprite_control_w)).share("sprite_ctlram");
map(0x0d0000, 0x0d3fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x0d0000, 0x0d3fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x140000, 0x1bffff).bankr("bank2"); /* CPU B ROM */ map(0x140000, 0x1bffff).bankr("bank2"); /* CPU B ROM */
map(0x2c0000, 0x33ffff).bankr("bank1"); /* CPU A ROM */ map(0x2c0000, 0x33ffff).bankr("bank1"); /* CPU A ROM */
@ -347,7 +358,7 @@ void cyclwarr_state::cyclwarr_68000b_map(address_map &map)
map(0x0b9000, 0x0b900f).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16); map(0x0b9000, 0x0b900f).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0ba000, 0x0ba00f).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16); map(0x0ba000, 0x0ba00f).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0c0000, 0x0c3fff).rw(this, FUNC(cyclwarr_state::cyclwarr_sprite_r), FUNC(cyclwarr_state::cyclwarr_sprite_w)); map(0x0c0000, 0x0c3fff).rw(this, FUNC(cyclwarr_state::cyclwarr_sprite_r), FUNC(cyclwarr_state::cyclwarr_sprite_w));
map(0x0ca000, 0x0ca1ff).w(this, FUNC(cyclwarr_state::tatsumi_sprite_control_w)); map(0x0ca000, 0x0ca1ff).rw(this, FUNC(cyclwarr_state::tatsumi_sprite_control_r), FUNC(cyclwarr_state::tatsumi_sprite_control_w)).share("sprite_ctlram");
map(0x0d0000, 0x0d3fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x0d0000, 0x0d3fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x140000, 0x1bffff).bankr("bank2"); /* CPU B ROM */ map(0x140000, 0x1bffff).bankr("bank2"); /* CPU B ROM */
map(0x2c0000, 0x33ffff).bankr("bank1"); /* CPU A ROM */ map(0x2c0000, 0x33ffff).bankr("bank1"); /* CPU A ROM */
@ -365,6 +376,7 @@ void cyclwarr_state::cyclwarr_z80_map(address_map &map)
/******************************************************************************/ /******************************************************************************/
// TODO: merge with above
void cyclwarr_state::bigfight_68000a_map(address_map &map) void cyclwarr_state::bigfight_68000a_map(address_map &map)
{ {
map(0x000000, 0x00ffff).ram().share("cw_cpua_ram"); map(0x000000, 0x00ffff).ram().share("cw_cpua_ram");
@ -378,12 +390,14 @@ void cyclwarr_state::bigfight_68000a_map(address_map &map)
map(0x0a2000, 0x0a2007).w(this, FUNC(cyclwarr_state::bigfight_a20000_w)); map(0x0a2000, 0x0a2007).w(this, FUNC(cyclwarr_state::bigfight_a20000_w));
map(0x0a4000, 0x0a4001).w(this, FUNC(cyclwarr_state::bigfight_a40000_w)); map(0x0a4000, 0x0a4001).w(this, FUNC(cyclwarr_state::bigfight_a40000_w));
map(0x0a6000, 0x0a6001).w(this, FUNC(cyclwarr_state::bigfight_a60000_w)); map(0x0a6000, 0x0a6001).w(this, FUNC(cyclwarr_state::bigfight_a60000_w));
map(0x0ac000, 0x0ac003).w(this, FUNC(tatsumi_state::hd6445_crt_w)).umask16(0x00ff);
map(0x0b8000, 0x0b8001).w(this, FUNC(cyclwarr_state::cyclwarr_sound_w)).umask16(0xff00); map(0x0b8000, 0x0b8001).w(this, FUNC(cyclwarr_state::cyclwarr_sound_w)).umask16(0xff00);
map(0x0b9000, 0x0b900f).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16); map(0x0b9000, 0x0b900f).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0ba000, 0x0ba00f).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16); map(0x0ba000, 0x0ba00f).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0bc000, 0x0bc001).w(this, FUNC(cyclwarr_state::output_w));
map(0x0c0000, 0x0c3fff).rw(this, FUNC(cyclwarr_state::cyclwarr_sprite_r), FUNC(cyclwarr_state::cyclwarr_sprite_w)).share("spriteram"); map(0x0c0000, 0x0c3fff).rw(this, FUNC(cyclwarr_state::cyclwarr_sprite_r), FUNC(cyclwarr_state::cyclwarr_sprite_w)).share("spriteram");
map(0x0ca000, 0x0ca1ff).w(this, FUNC(cyclwarr_state::tatsumi_sprite_control_w)).share("sprite_ctlram"); map(0x0ca000, 0x0ca1ff).rw(this, FUNC(cyclwarr_state::tatsumi_sprite_control_r), FUNC(cyclwarr_state::tatsumi_sprite_control_w)).share("sprite_ctlram");
map(0x0d0000, 0x0d3fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x0d0000, 0x0d3fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x100000, 0x17ffff).bankr("bank2"); /* CPU A ROM */ map(0x100000, 0x17ffff).bankr("bank2"); /* CPU A ROM */
map(0x200000, 0x27ffff).bankr("bank1"); /* CPU B ROM */ map(0x200000, 0x27ffff).bankr("bank1"); /* CPU B ROM */
@ -401,7 +415,7 @@ void cyclwarr_state::bigfight_68000b_map(address_map &map)
map(0x0b9000, 0x0b900f).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16); map(0x0b9000, 0x0b900f).rw("io1", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0ba000, 0x0ba00f).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16); map(0x0ba000, 0x0ba00f).rw("io2", FUNC(cxd1095_device::read), FUNC(cxd1095_device::write)).umask16(0x00ff).cswidth(16);
map(0x0c0000, 0x0c3fff).rw(this, FUNC(cyclwarr_state::cyclwarr_sprite_r), FUNC(cyclwarr_state::cyclwarr_sprite_w)); map(0x0c0000, 0x0c3fff).rw(this, FUNC(cyclwarr_state::cyclwarr_sprite_r), FUNC(cyclwarr_state::cyclwarr_sprite_w));
map(0x0ca000, 0x0ca1ff).w(this, FUNC(cyclwarr_state::tatsumi_sprite_control_w)); map(0x0ca000, 0x0ca1ff).rw(this, FUNC(cyclwarr_state::tatsumi_sprite_control_r), FUNC(cyclwarr_state::tatsumi_sprite_control_w)).share("sprite_ctlram");
map(0x0d0000, 0x0d3fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x0d0000, 0x0d3fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
map(0x100000, 0x17ffff).bankr("bank2"); /* CPU A ROM */ map(0x100000, 0x17ffff).bankr("bank2"); /* CPU A ROM */
map(0x200000, 0x27ffff).bankr("bank1"); /* CPU B ROM */ map(0x200000, 0x27ffff).bankr("bank1"); /* CPU B ROM */

View File

@ -52,17 +52,25 @@ public:
DECLARE_WRITE16_MEMBER(text_w); DECLARE_WRITE16_MEMBER(text_w);
DECLARE_READ16_MEMBER(tatsumi_v30_68000_r); DECLARE_READ16_MEMBER(tatsumi_v30_68000_r);
DECLARE_WRITE16_MEMBER(tatsumi_v30_68000_w); DECLARE_WRITE16_MEMBER(tatsumi_v30_68000_w);
DECLARE_READ16_MEMBER(tatsumi_sprite_control_r);
DECLARE_WRITE16_MEMBER(tatsumi_sprite_control_w); DECLARE_WRITE16_MEMBER(tatsumi_sprite_control_w);
TILE_GET_INFO_MEMBER(get_text_tile_info); TILE_GET_INFO_MEMBER(get_text_tile_info);
INTERRUPT_GEN_MEMBER(v30_interrupt); INTERRUPT_GEN_MEMBER(v30_interrupt);
DECLARE_READ8_MEMBER(tatsumi_hack_ym2151_r); DECLARE_READ8_MEMBER(tatsumi_hack_ym2151_r);
DECLARE_READ8_MEMBER(tatsumi_hack_oki_r); DECLARE_READ8_MEMBER(tatsumi_hack_oki_r);
DECLARE_WRITE8_MEMBER(hd6445_crt_w);
void tatsumi_reset(); void tatsumi_reset();
template<class _BitmapClass> void draw_sprites(_BitmapClass &bitmap, const rectangle &cliprect, int write_priority_only, int rambank); template<class _BitmapClass> void draw_sprites(_BitmapClass &bitmap, const rectangle &cliprect, int write_priority_only, int rambank);
template<class _BitmapClass> inline void roundupt_drawgfxzoomrotate( _BitmapClass &dest_bmp, const rectangle &clip, template<class _BitmapClass> inline void roundupt_drawgfxzoomrotate( _BitmapClass &dest_bmp, const rectangle &clip,
gfx_element *gfx, uint32_t code,uint32_t color,int flipx,int flipy,uint32_t ssx,uint32_t ssy, gfx_element *gfx, uint32_t code,uint32_t color,int flipx,int flipy,uint32_t ssx,uint32_t ssy,
int scalex, int scaley, int rotate, int write_priority_only ); int scalex, int scaley, int rotate, int write_priority_only );
void update_cluts(int fake_palette_offset, int object_base, int length); void update_cluts(int fake_palette_offset, int object_base, int length);
protected:
uint8_t m_hd6445_reg[64];
private:
uint8_t m_hd6445_address;
}; };
class apache3_state : public tatsumi_state class apache3_state : public tatsumi_state
@ -142,7 +150,6 @@ public:
DECLARE_WRITE16_MEMBER(roundup5_e0000_w); DECLARE_WRITE16_MEMBER(roundup5_e0000_w);
DECLARE_READ16_MEMBER(roundup5_vram_r); DECLARE_READ16_MEMBER(roundup5_vram_r);
DECLARE_WRITE16_MEMBER(roundup5_vram_w); DECLARE_WRITE16_MEMBER(roundup5_vram_w);
DECLARE_WRITE16_MEMBER(roundup5_crt_w);
void init_roundup5(); void init_roundup5();
DECLARE_VIDEO_START(roundup5); DECLARE_VIDEO_START(roundup5);
@ -166,8 +173,6 @@ private:
required_shared_ptr<uint16_t> m_roundup_l_ram; required_shared_ptr<uint16_t> m_roundup_l_ram;
std::unique_ptr<uint16_t[]> m_roundup5_vram; std::unique_ptr<uint16_t[]> m_roundup5_vram;
uint8_t m_roundupt_crt_selected_reg;
uint8_t m_roundupt_crt_reg[64];
}; };
class cyclwarr_state : public tatsumi_state class cyclwarr_state : public tatsumi_state
@ -190,6 +195,7 @@ public:
DECLARE_WRITE16_MEMBER(bigfight_a60000_w); DECLARE_WRITE16_MEMBER(bigfight_a60000_w);
DECLARE_WRITE8_MEMBER(cyclwarr_control_w); DECLARE_WRITE8_MEMBER(cyclwarr_control_w);
DECLARE_WRITE8_MEMBER(cyclwarr_sound_w); DECLARE_WRITE8_MEMBER(cyclwarr_sound_w);
DECLARE_WRITE16_MEMBER(output_w);
template<int Bank> DECLARE_READ16_MEMBER(cyclwarr_videoram_r); template<int Bank> DECLARE_READ16_MEMBER(cyclwarr_videoram_r);
template<int Bank> DECLARE_WRITE16_MEMBER(cyclwarr_videoram_w); template<int Bank> DECLARE_WRITE16_MEMBER(cyclwarr_videoram_w);

View File

@ -7,6 +7,11 @@
/******************************************************************************/ /******************************************************************************/
READ16_MEMBER(tatsumi_state::tatsumi_sprite_control_r)
{
return m_sprite_control_ram[offset];
}
WRITE16_MEMBER(tatsumi_state::tatsumi_sprite_control_w) WRITE16_MEMBER(tatsumi_state::tatsumi_sprite_control_w)
{ {
COMBINE_DATA(&m_sprite_control_ram[offset]); COMBINE_DATA(&m_sprite_control_ram[offset]);
@ -56,14 +61,33 @@ WRITE16_MEMBER(tatsumi_state::text_w)
m_tx_layer->mark_tile_dirty(offset); m_tx_layer->mark_tile_dirty(offset);
} }
WRITE16_MEMBER(roundup5_state::roundup5_crt_w) // TODO: move into device
WRITE8_MEMBER(tatsumi_state::hd6445_crt_w)
{ {
if (offset==0 && ACCESSING_BITS_0_7) if (offset==0)
m_roundupt_crt_selected_reg=data&0x3f; m_hd6445_address = data & 0x3f;
if (offset==1 && ACCESSING_BITS_0_7) { if (offset==1)
m_roundupt_crt_reg[m_roundupt_crt_selected_reg]=data; {
// if (m_roundupt_crt_selected_reg!=0xa && m_roundupt_crt_selected_reg!=0xb && m_roundupt_crt_selected_reg!=29) m_hd6445_reg[m_hd6445_address] = data;
// logerror("%s: Crt write %02x %02x\n",m_maincpu->pc(),m_roundupt_crt_selected_reg,data);
static const char *regnames[40] =
{
"Horizontal Total Characters", "Horizontal Displayed Characters", "Horizontal Sync Position", "Sync Width",
"Vertical Total Rows", "Vertical Total Adjust", "Vertical Displayed Rows", "Vertical Sync Position",
"Interlace Mode and Skew", "Max Raster Address", "Cursor 1 Start", "Cursor 1 End",
"Screen 1 Start Address (H)", "Screen 1 Start Address (L)", "Cursor 1 Address (H)", "Cursor 1 Address (L)",
"Light Pen (H) (RO)", "Light Pen (L) (RO)", "Screen 2 Start Position", "Screen 2 Start Address (H)",
"Screen 2 Start Address (L)", "Screen 3 Start Position", "Screen 3 Start Address (H)", "Screen 3 Start Address (L)",
"Screen 4 Start Position", "Screen 4 Start Address (H)", "Screen 4 Start Address (L)", "Vertical Sync Position Adjust",
"Light Pen Raster (RO)", "Smooth Scrolling", "Control 1", "Control 2",
"Control 3", "Memory Width Offset", "Cursor 2 Start", "Cursor 2 End",
"Cursor 2 Address (H)", "Cursor 2 Address (L)", "Cursor 1 Width", "Cursor 2 Width"
};
if(m_hd6445_address < 40)
logerror("HD6445: register %s [%02x R%d] set %02x\n",regnames[m_hd6445_address],m_hd6445_address,m_hd6445_address,data);
else
logerror("HD6445: illegal register access [%02x R%d] set %02x\n",m_hd6445_address,m_hd6445_address,data);
} }
} }
@ -1019,11 +1043,15 @@ uint32_t roundup5_state::screen_update_roundup5(screen_device &screen, bitmap_rg
{ {
// uint16_t bg_x_scroll=m_roundup5_unknown1[0]; // uint16_t bg_x_scroll=m_roundup5_unknown1[0];
// uint16_t bg_y_scroll=m_roundup5_unknown2[0]; // uint16_t bg_y_scroll=m_roundup5_unknown2[0];
int tx_start_addr;
tx_start_addr = (m_hd6445_reg[0xc] << 8) | (m_hd6445_reg[0xd]);
tx_start_addr &= 0x3fff;
update_cluts(1024, 512, 4096); update_cluts(1024, 512, 4096);
m_tx_layer->set_scrollx(0,24); m_tx_layer->set_scrollx(0,24);
m_tx_layer->set_scrolly(0,0); //(((m_roundupt_crt_reg[0xe]<<8)|m_roundupt_crt_reg[0xf])>>5) + 96); m_tx_layer->set_scrolly(0,(tx_start_addr >> 4) | m_hd6445_reg[0x1d]);
bitmap.fill(m_palette->pen(384), cliprect); // todo bitmap.fill(m_palette->pen(384), cliprect); // todo
screen.priority().fill(0, cliprect); screen.priority().fill(0, cliprect);