mirror of
https://github.com/holub/mame
synced 2025-05-09 07:41:50 +03:00
twincobr.cpp, wardner.cpp : Updates
Simplify handlers, Fix minor namings, Remove register_postload, Fix some code styles, Use shorter type values Mark tilemap dirty when ROM/RAM bank is changed
This commit is contained in:
parent
dd888d052d
commit
5423b11991
@ -413,7 +413,7 @@ void twincobr_state::main_program_map(address_map &map)
|
||||
map(0x078008, 0x078009).portr("VBLANK"); /* V-Blank & FShark Coin/Start */
|
||||
map(0x07800b, 0x07800b).w(m_coinlatch, FUNC(ls259_device::write_nibble_d0)); /* Flying Shark DSP Comms & coin stuff */
|
||||
map(0x07800d, 0x07800d).w(m_mainlatch, FUNC(ls259_device::write_nibble_d0)); /* Twin Cobra DSP Comms & system control */
|
||||
map(0x07a000, 0x07afff).rw(FUNC(twincobr_state::twincobr_sharedram_r), FUNC(twincobr_state::twincobr_sharedram_w)); /* 16-bit on 68000 side, 8-bit on Z80 side */
|
||||
map(0x07a000, 0x07afff).rw(FUNC(twincobr_state::twincobr_sharedram_r), FUNC(twincobr_state::twincobr_sharedram_w)).umask16(0x00ff); /* 16-bit on 68000 side, 8-bit on Z80 side */
|
||||
map(0x07e000, 0x07e001).rw(FUNC(twincobr_state::twincobr_txram_r), FUNC(twincobr_state::twincobr_txram_w)); /* data for text video RAM */
|
||||
map(0x07e002, 0x07e003).rw(FUNC(twincobr_state::twincobr_bgram_r), FUNC(twincobr_state::twincobr_bgram_w)); /* data for bg video RAM */
|
||||
map(0x07e004, 0x07e005).rw(FUNC(twincobr_state::twincobr_fgram_r), FUNC(twincobr_state::twincobr_fgram_w)); /* data for fg video RAM */
|
||||
@ -626,8 +626,8 @@ static const gfx_layout charlayout =
|
||||
RGN_FRAC(1,3), /* 2048 characters */
|
||||
3, /* 3 bits per pixel */
|
||||
{ RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) },
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
||||
{ STEP8(0,1) },
|
||||
{ STEP8(0,8) },
|
||||
8*8 /* every char takes 8 consecutive bytes */
|
||||
};
|
||||
|
||||
@ -637,8 +637,8 @@ static const gfx_layout tilelayout =
|
||||
RGN_FRAC(1,4), /* 4096/8192 tiles */
|
||||
4, /* 4 bits per pixel */
|
||||
{ RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
||||
{ STEP8(0,1) },
|
||||
{ STEP8(0,8) },
|
||||
8*8 /* every tile takes 8 consecutive bytes */
|
||||
};
|
||||
|
||||
@ -667,8 +667,6 @@ void twincobr_state::twincobr(machine_config &config)
|
||||
|
||||
config.m_minimum_quantum = attotime::from_hz(6000);
|
||||
|
||||
MCFG_MACHINE_RESET_OVERRIDE(twincobr_state,twincobr)
|
||||
|
||||
LS259(config, m_mainlatch);
|
||||
m_mainlatch->q_out_cb<2>().set(FUNC(twincobr_state::int_enable_w));
|
||||
m_mainlatch->q_out_cb<3>().set(FUNC(twincobr_state::flipscreen_w));
|
||||
@ -698,7 +696,7 @@ void twincobr_state::twincobr(machine_config &config)
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
|
||||
m_screen->set_raw(28_MHz_XTAL/4, 446, 0, 320, 286, 0, 240);
|
||||
m_screen->set_screen_update(FUNC(twincobr_state::screen_update_toaplan0));
|
||||
m_screen->set_screen_update(FUNC(twincobr_state::screen_update));
|
||||
m_screen->screen_vblank().set(m_spriteram16, FUNC(buffered_spriteram16_device::vblank_copy_rising));
|
||||
m_screen->screen_vblank().append(FUNC(twincobr_state::twincobr_vblank_irq));
|
||||
m_screen->set_palette(m_palette);
|
||||
@ -1296,7 +1294,7 @@ ROM_END
|
||||
|
||||
void twincobr_state::init_twincobr()
|
||||
{
|
||||
twincobr_driver_savestate();
|
||||
driver_savestate();
|
||||
}
|
||||
|
||||
|
||||
|
@ -181,14 +181,14 @@ void wardner_state::main_program_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x6fff).rom();
|
||||
map(0x7000, 0x7fff).ram();
|
||||
map(0x8000, 0x8fff).w(FUNC(wardner_state::wardner_sprite_w)); // AM_SHARE("spriteram8")
|
||||
map(0xa000, 0xafff).w(m_palette, FUNC(palette_device::write8)); // AM_SHARE("palette")
|
||||
map(0x8000, 0x8fff).w(FUNC(wardner_state::wardner_sprite_w)); // .share("spriteram8")
|
||||
map(0xa000, 0xafff).w(m_palette, FUNC(palette_device::write8)); // .share("palette")
|
||||
map(0xc000, 0xc7ff).writeonly().share("sharedram");
|
||||
map(0x8000, 0xffff).r(m_membank, FUNC(address_map_bank_device::read8));
|
||||
}
|
||||
|
||||
// Overlapped RAM/Banked ROM
|
||||
// Can't use AM_RANGE(0x00000, 0x3ffff) for ROM because the shared pointers get messed up somehow
|
||||
// Can't use map(0x00000, 0x3ffff) for ROM because the shared pointers get messed up somehow
|
||||
void wardner_state::main_bank_map(address_map &map)
|
||||
{
|
||||
map(0x00000, 0x00fff).r(FUNC(wardner_state::wardner_sprite_r)).share("spriteram8");
|
||||
@ -338,24 +338,24 @@ INPUT_PORTS_END
|
||||
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
8,8, /* 8*8 characters */
|
||||
2048, /* 2048 characters */
|
||||
3, /* 3 bits per pixel */
|
||||
{ 0*2048*8*8, 1*2048*8*8, 2*2048*8*8 }, /* the bitplanes are separated */
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
||||
8*8 /* every char takes 8 consecutive bytes */
|
||||
8,8, /* 8*8 characters */
|
||||
RGN_FRAC(1,3), /* 2048 characters */
|
||||
3, /* 3 bits per pixel */
|
||||
{ RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) }, /* the bitplanes are separated */
|
||||
{ STEP8(0,1) },
|
||||
{ STEP8(0,8) },
|
||||
8*8 /* every char takes 8 consecutive bytes */
|
||||
};
|
||||
|
||||
static const gfx_layout tilelayout =
|
||||
{
|
||||
8,8, /* 8*8 tiles */
|
||||
4096, /* 4096 tiles */
|
||||
4, /* 4 bits per pixel */
|
||||
{ 0*4096*8*8, 1*4096*8*8, 2*4096*8*8, 3*4096*8*8 }, /* the bitplanes are separated */
|
||||
{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
|
||||
8*8 /* every tile takes 8 consecutive bytes */
|
||||
8,8, /* 8*8 tiles */
|
||||
RGN_FRAC(1,4), /* 4096 tiles */
|
||||
4, /* 4 bits per pixel */
|
||||
{ RGN_FRAC(0,4), RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) }, /* the bitplanes are separated */
|
||||
{ STEP8(0,1) },
|
||||
{ STEP8(0,8) },
|
||||
8*8 /* every tile takes 8 consecutive bytes */
|
||||
};
|
||||
|
||||
|
||||
@ -369,12 +369,12 @@ GFXDECODE_END
|
||||
void wardner_state::driver_start()
|
||||
{
|
||||
/* Save-State stuff in src/machine/twincobr.cpp */
|
||||
twincobr_driver_savestate();
|
||||
driver_savestate();
|
||||
}
|
||||
|
||||
void wardner_state::machine_reset()
|
||||
{
|
||||
MACHINE_RESET_CALL_MEMBER(twincobr);
|
||||
twincobr_state::machine_reset();
|
||||
|
||||
m_membank->set_bank(0);
|
||||
}
|
||||
@ -429,7 +429,7 @@ void wardner_state::wardner(machine_config &config)
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
|
||||
m_screen->set_raw(14_MHz_XTAL/2, 446, 0, 320, 286, 0, 240);
|
||||
m_screen->set_screen_update(FUNC(wardner_state::screen_update_toaplan0));
|
||||
m_screen->set_screen_update(FUNC(wardner_state::screen_update));
|
||||
m_screen->screen_vblank().set(m_spriteram8, FUNC(buffered_spriteram8_device::vblank_copy_rising));
|
||||
m_screen->screen_vblank().append(FUNC(wardner_state::wardner_vblank_irq));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
@ -43,50 +43,52 @@ public:
|
||||
void init_twincobr();
|
||||
|
||||
protected:
|
||||
virtual void device_post_load() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
optional_shared_ptr<uint8_t> m_sharedram;
|
||||
optional_shared_ptr<u8> m_sharedram;
|
||||
optional_device<buffered_spriteram8_device> m_spriteram8;
|
||||
optional_device<buffered_spriteram16_device> m_spriteram16;
|
||||
|
||||
int32_t m_fg_rom_bank;
|
||||
int32_t m_bg_ram_bank;
|
||||
u32 m_fg_rom_bank;
|
||||
u32 m_bg_ram_bank;
|
||||
int m_intenable;
|
||||
int m_dsp_on;
|
||||
int m_dsp_bio;
|
||||
int m_fsharkbt_8741;
|
||||
int m_dsp_execute;
|
||||
uint32_t m_dsp_addr_w;
|
||||
uint32_t m_main_ram_seg;
|
||||
std::unique_ptr<uint16_t[]> m_bgvideoram16;
|
||||
std::unique_ptr<uint16_t[]> m_fgvideoram16;
|
||||
std::unique_ptr<uint16_t[]> m_txvideoram16;
|
||||
u32 m_dsp_addr_w;
|
||||
u32 m_main_ram_seg;
|
||||
std::unique_ptr<u16[]> m_bgvideoram16;
|
||||
std::unique_ptr<u16[]> m_fgvideoram16;
|
||||
std::unique_ptr<u16[]> m_txvideoram16;
|
||||
size_t m_bgvideoram_size;
|
||||
size_t m_fgvideoram_size;
|
||||
size_t m_txvideoram_size;
|
||||
int32_t m_txscrollx;
|
||||
int32_t m_txscrolly;
|
||||
int32_t m_fgscrollx;
|
||||
int32_t m_fgscrolly;
|
||||
int32_t m_bgscrollx;
|
||||
int32_t m_bgscrolly;
|
||||
int32_t m_txoffs;
|
||||
int32_t m_fgoffs;
|
||||
int32_t m_bgoffs;
|
||||
int32_t m_display_on;
|
||||
s32 m_txscrollx;
|
||||
s32 m_txscrolly;
|
||||
s32 m_fgscrollx;
|
||||
s32 m_fgscrolly;
|
||||
s32 m_bgscrollx;
|
||||
s32 m_bgscrolly;
|
||||
s32 m_txoffs;
|
||||
s32 m_fgoffs;
|
||||
s32 m_bgoffs;
|
||||
s32 m_display_on;
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_fg_tilemap;
|
||||
tilemap_t *m_tx_tilemap;
|
||||
|
||||
DECLARE_WRITE16_MEMBER(twincobr_dsp_addrsel_w);
|
||||
DECLARE_READ16_MEMBER(twincobr_dsp_r);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_dsp_w);
|
||||
DECLARE_WRITE16_MEMBER(wardner_dsp_addrsel_w);
|
||||
DECLARE_READ16_MEMBER(wardner_dsp_r);
|
||||
DECLARE_WRITE16_MEMBER(wardner_dsp_w);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_dsp_bio_w);
|
||||
DECLARE_READ16_MEMBER(fsharkbt_dsp_r);
|
||||
DECLARE_WRITE16_MEMBER(fsharkbt_dsp_w);
|
||||
void twincobr_dsp_addrsel_w(u16 data);
|
||||
u16 twincobr_dsp_r();
|
||||
void twincobr_dsp_w(u16 data);
|
||||
void wardner_dsp_addrsel_w(u16 data);
|
||||
u16 wardner_dsp_r();
|
||||
void wardner_dsp_w(u16 data);
|
||||
void twincobr_dsp_bio_w(u16 data);
|
||||
u16 fsharkbt_dsp_r();
|
||||
void fsharkbt_dsp_w(u16 data);
|
||||
DECLARE_READ_LINE_MEMBER(twincobr_bio_r);
|
||||
DECLARE_WRITE_LINE_MEMBER(int_enable_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(dsp_int_w);
|
||||
@ -94,47 +96,45 @@ protected:
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_lockout_1_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(coin_lockout_2_w);
|
||||
DECLARE_READ16_MEMBER(twincobr_sharedram_r);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_sharedram_w);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_txoffs_w);
|
||||
DECLARE_READ16_MEMBER(twincobr_txram_r);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_txram_w);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_bgoffs_w);
|
||||
DECLARE_READ16_MEMBER(twincobr_bgram_r);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_bgram_w);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_fgoffs_w);
|
||||
DECLARE_READ16_MEMBER(twincobr_fgram_r);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_fgram_w);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_txscroll_w);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_bgscroll_w);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_fgscroll_w);
|
||||
DECLARE_WRITE16_MEMBER(twincobr_exscroll_w);
|
||||
DECLARE_WRITE8_MEMBER(wardner_txlayer_w);
|
||||
DECLARE_WRITE8_MEMBER(wardner_bglayer_w);
|
||||
DECLARE_WRITE8_MEMBER(wardner_fglayer_w);
|
||||
DECLARE_WRITE8_MEMBER(wardner_txscroll_w);
|
||||
DECLARE_WRITE8_MEMBER(wardner_bgscroll_w);
|
||||
DECLARE_WRITE8_MEMBER(wardner_fgscroll_w);
|
||||
DECLARE_WRITE8_MEMBER(wardner_exscroll_w);
|
||||
DECLARE_READ8_MEMBER(wardner_videoram_r);
|
||||
DECLARE_WRITE8_MEMBER(wardner_videoram_w);
|
||||
DECLARE_READ8_MEMBER(wardner_sprite_r);
|
||||
DECLARE_WRITE8_MEMBER(wardner_sprite_w);
|
||||
u8 twincobr_sharedram_r(offs_t offset);
|
||||
void twincobr_sharedram_w(offs_t offset, u8 data);
|
||||
void twincobr_txoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 twincobr_txram_r();
|
||||
void twincobr_txram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
void twincobr_bgoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 twincobr_bgram_r();
|
||||
void twincobr_bgram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
void twincobr_fgoffs_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
u16 twincobr_fgram_r();
|
||||
void twincobr_fgram_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
void twincobr_txscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
void twincobr_bgscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
void twincobr_fgscroll_w(offs_t offset, u16 data, u16 mem_mask = ~0);
|
||||
void twincobr_exscroll_w(offs_t offset, u16 data);
|
||||
void wardner_txlayer_w(offs_t offset, u8 data);
|
||||
void wardner_bglayer_w(offs_t offset, u8 data);
|
||||
void wardner_fglayer_w(offs_t offset, u8 data);
|
||||
void wardner_txscroll_w(offs_t offset, u8 data);
|
||||
void wardner_bgscroll_w(offs_t offset, u8 data);
|
||||
void wardner_fgscroll_w(offs_t offset, u8 data);
|
||||
void wardner_exscroll_w(offs_t offset, u8 data);
|
||||
u8 wardner_videoram_r(offs_t offset);
|
||||
void wardner_videoram_w(offs_t offset, u8 data);
|
||||
u8 wardner_sprite_r(offs_t offset);
|
||||
void wardner_sprite_w(offs_t offset, u8 data);
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_fg_tile_info);
|
||||
TILE_GET_INFO_MEMBER(get_tx_tile_info);
|
||||
DECLARE_MACHINE_RESET(twincobr);
|
||||
uint32_t screen_update_toaplan0(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_WRITE_LINE_MEMBER(twincobr_vblank_irq);
|
||||
DECLARE_WRITE_LINE_MEMBER(wardner_vblank_irq);
|
||||
void twincobr_restore_dsp();
|
||||
void twincobr_create_tilemaps();
|
||||
DECLARE_WRITE_LINE_MEMBER(display_on_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(bg_ram_bank_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(fg_rom_bank_w);
|
||||
void twincobr_log_vram();
|
||||
void twincobr_driver_savestate();
|
||||
void log_vram();
|
||||
void driver_savestate();
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<tms32010_device> m_dsp;
|
||||
required_device<toaplan_scu_device> m_spritegen;
|
||||
|
@ -34,7 +34,7 @@ WRITE_LINE_MEMBER(twincobr_state::wardner_vblank_irq)
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_dsp_addrsel_w)
|
||||
void twincobr_state::twincobr_dsp_addrsel_w(u16 data)
|
||||
{
|
||||
/* This sets the main CPU RAM address the DSP should */
|
||||
/* read/write, via the DSP IO port 0 */
|
||||
@ -50,11 +50,11 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_addrsel_w)
|
||||
LOG(("DSP PC:%04x IO write %04x (%08x) at port 0\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
|
||||
}
|
||||
|
||||
READ16_MEMBER(twincobr_state::twincobr_dsp_r)
|
||||
u16 twincobr_state::twincobr_dsp_r()
|
||||
{
|
||||
/* DSP can read data from main CPU RAM via DSP IO port 1 */
|
||||
|
||||
uint16_t input_data = 0;
|
||||
u16 input_data = 0;
|
||||
switch (m_main_ram_seg)
|
||||
{
|
||||
case 0x30000:
|
||||
@ -68,7 +68,7 @@ READ16_MEMBER(twincobr_state::twincobr_dsp_r)
|
||||
return input_data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_dsp_w)
|
||||
void twincobr_state::twincobr_dsp_w(u16 data)
|
||||
{
|
||||
/* Data written to main CPU RAM via DSP IO port 1 */
|
||||
m_dsp_execute = 0;
|
||||
@ -84,7 +84,7 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_w)
|
||||
LOG(("DSP PC:%04x IO write %04x at %08x (port 1)\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::wardner_dsp_addrsel_w)
|
||||
void twincobr_state::wardner_dsp_addrsel_w(u16 data)
|
||||
{
|
||||
/* This sets the main CPU RAM address the DSP should */
|
||||
/* read/write, via the DSP IO port 0 */
|
||||
@ -99,11 +99,11 @@ WRITE16_MEMBER(twincobr_state::wardner_dsp_addrsel_w)
|
||||
LOG(("DSP PC:%04x IO write %04x (%08x) at port 0\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
|
||||
}
|
||||
|
||||
READ16_MEMBER(twincobr_state::wardner_dsp_r)
|
||||
u16 twincobr_state::wardner_dsp_r()
|
||||
{
|
||||
/* DSP can read data from main CPU RAM via DSP IO port 1 */
|
||||
|
||||
uint16_t input_data = 0;
|
||||
u16 input_data = 0;
|
||||
switch (m_main_ram_seg)
|
||||
{
|
||||
case 0x7000:
|
||||
@ -118,7 +118,7 @@ READ16_MEMBER(twincobr_state::wardner_dsp_r)
|
||||
return input_data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::wardner_dsp_w)
|
||||
void twincobr_state::wardner_dsp_w(u16 data)
|
||||
{
|
||||
/* Data written to main CPU RAM via DSP IO port 1 */
|
||||
m_dsp_execute = 0;
|
||||
@ -135,7 +135,7 @@ WRITE16_MEMBER(twincobr_state::wardner_dsp_w)
|
||||
LOG(("DSP PC:%04x IO write %04x at %08x (port 1)\n",m_dsp->pcbase(),data,m_main_ram_seg + m_dsp_addr_w));
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_dsp_bio_w)
|
||||
void twincobr_state::twincobr_dsp_bio_w(u16 data)
|
||||
{
|
||||
/* data 0xffff means inhibit BIO line to DSP and enable */
|
||||
/* communication to main processor */
|
||||
@ -159,7 +159,7 @@ WRITE16_MEMBER(twincobr_state::twincobr_dsp_bio_w)
|
||||
}
|
||||
}
|
||||
|
||||
READ16_MEMBER(twincobr_state::fsharkbt_dsp_r)
|
||||
u16 twincobr_state::fsharkbt_dsp_r()
|
||||
{
|
||||
/* IO Port 2 used by Flying Shark bootleg */
|
||||
/* DSP reads data from an extra MCU (8741) at IO port 2 */
|
||||
@ -170,7 +170,7 @@ READ16_MEMBER(twincobr_state::fsharkbt_dsp_r)
|
||||
return (m_fsharkbt_8741 & 1);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::fsharkbt_dsp_w)
|
||||
void twincobr_state::fsharkbt_dsp_w(u16 data)
|
||||
{
|
||||
/* Flying Shark bootleg DSP writes data to an extra MCU (8741) at IO port 2 */
|
||||
#if 0
|
||||
@ -209,7 +209,7 @@ WRITE_LINE_MEMBER(twincobr_state::dsp_int_w)
|
||||
}
|
||||
}
|
||||
|
||||
void twincobr_state::twincobr_restore_dsp()
|
||||
void twincobr_state::device_post_load()
|
||||
{
|
||||
dsp_int_w(m_dsp_on);
|
||||
}
|
||||
@ -236,21 +236,18 @@ WRITE_LINE_MEMBER(twincobr_state::coin_lockout_2_w)
|
||||
}
|
||||
|
||||
|
||||
READ16_MEMBER(twincobr_state::twincobr_sharedram_r)
|
||||
u8 twincobr_state::twincobr_sharedram_r(offs_t offset)
|
||||
{
|
||||
return m_sharedram[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_sharedram_w)
|
||||
void twincobr_state::twincobr_sharedram_w(offs_t offset, u8 data)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_sharedram[offset] = data & 0xff;
|
||||
}
|
||||
m_sharedram[offset] = data;
|
||||
}
|
||||
|
||||
|
||||
MACHINE_RESET_MEMBER(twincobr_state,twincobr)
|
||||
void twincobr_state::machine_reset()
|
||||
{
|
||||
m_dsp_addr_w = 0;
|
||||
m_main_ram_seg = 0;
|
||||
@ -259,7 +256,7 @@ MACHINE_RESET_MEMBER(twincobr_state,twincobr)
|
||||
m_fsharkbt_8741 = -1;
|
||||
}
|
||||
|
||||
void twincobr_state::twincobr_driver_savestate()
|
||||
void twincobr_state::driver_savestate()
|
||||
{
|
||||
save_item(NAME(m_intenable));
|
||||
save_item(NAME(m_dsp_on));
|
||||
@ -268,6 +265,4 @@ void twincobr_state::twincobr_driver_savestate()
|
||||
save_item(NAME(m_dsp_bio));
|
||||
save_item(NAME(m_dsp_execute));
|
||||
save_item(NAME(m_fsharkbt_8741));
|
||||
|
||||
machine().save().register_postload(save_prepost_delegate(FUNC(twincobr_state::twincobr_restore_dsp), this));
|
||||
}
|
||||
|
@ -24,11 +24,9 @@
|
||||
|
||||
TILE_GET_INFO_MEMBER(twincobr_state::get_bg_tile_info)
|
||||
{
|
||||
int code, tile_number, color;
|
||||
|
||||
code = m_bgvideoram16[tile_index+m_bg_ram_bank];
|
||||
tile_number = code & 0x0fff;
|
||||
color = (code & 0xf000) >> 12;
|
||||
const u16 code = m_bgvideoram16[tile_index+m_bg_ram_bank];
|
||||
const u32 tile_number = code & 0x0fff;
|
||||
const u32 color = (code & 0xf000) >> 12;
|
||||
SET_TILE_INFO_MEMBER(2,
|
||||
tile_number,
|
||||
color,
|
||||
@ -37,11 +35,9 @@ TILE_GET_INFO_MEMBER(twincobr_state::get_bg_tile_info)
|
||||
|
||||
TILE_GET_INFO_MEMBER(twincobr_state::get_fg_tile_info)
|
||||
{
|
||||
int code, tile_number, color;
|
||||
|
||||
code = m_fgvideoram16[tile_index];
|
||||
tile_number = (code & 0x0fff) | m_fg_rom_bank;
|
||||
color = (code & 0xf000) >> 12;
|
||||
const u16 code = m_fgvideoram16[tile_index];
|
||||
const u32 tile_number = (code & 0x0fff) | m_fg_rom_bank;
|
||||
const u32 color = (code & 0xf000) >> 12;
|
||||
SET_TILE_INFO_MEMBER(1,
|
||||
tile_number,
|
||||
color,
|
||||
@ -50,11 +46,9 @@ TILE_GET_INFO_MEMBER(twincobr_state::get_fg_tile_info)
|
||||
|
||||
TILE_GET_INFO_MEMBER(twincobr_state::get_tx_tile_info)
|
||||
{
|
||||
int code, tile_number, color;
|
||||
|
||||
code = m_txvideoram16[tile_index];
|
||||
tile_number = code & 0x07ff;
|
||||
color = (code & 0xf800) >> 11;
|
||||
const u16 code = m_txvideoram16[tile_index];
|
||||
const u32 tile_number = code & 0x07ff;
|
||||
const u32 color = (code & 0xf800) >> 11;
|
||||
SET_TILE_INFO_MEMBER(0,
|
||||
tile_number,
|
||||
color,
|
||||
@ -93,9 +87,9 @@ void twincobr_state::video_start()
|
||||
|
||||
twincobr_create_tilemaps();
|
||||
|
||||
m_txvideoram16 = make_unique_clear<uint16_t[]>(m_txvideoram_size);
|
||||
m_fgvideoram16 = make_unique_clear<uint16_t[]>(m_fgvideoram_size);
|
||||
m_bgvideoram16 = make_unique_clear<uint16_t[]>(m_bgvideoram_size);
|
||||
m_txvideoram16 = make_unique_clear<u16[]>(m_txvideoram_size);
|
||||
m_fgvideoram16 = make_unique_clear<u16[]>(m_fgvideoram_size);
|
||||
m_bgvideoram16 = make_unique_clear<u16[]>(m_bgvideoram_size);
|
||||
|
||||
m_display_on = 0;
|
||||
|
||||
@ -135,140 +129,148 @@ WRITE_LINE_MEMBER(twincobr_state::flipscreen_w)
|
||||
WRITE_LINE_MEMBER(twincobr_state::bg_ram_bank_w)
|
||||
{
|
||||
m_bg_ram_bank = state ? 0x1000 : 0x0000;
|
||||
m_bg_tilemap->mark_all_dirty();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(twincobr_state::fg_rom_bank_w)
|
||||
{
|
||||
m_fg_rom_bank = state ? 0x1000 : 0x0000;
|
||||
m_fg_tilemap->mark_all_dirty();
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_txoffs_w)
|
||||
void twincobr_state::twincobr_txoffs_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_txoffs);
|
||||
m_txoffs %= m_txvideoram_size;
|
||||
}
|
||||
READ16_MEMBER(twincobr_state::twincobr_txram_r)
|
||||
u16 twincobr_state::twincobr_txram_r()
|
||||
{
|
||||
return m_txvideoram16[m_txoffs];
|
||||
}
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_txram_w)
|
||||
void twincobr_state::twincobr_txram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_txvideoram16[m_txoffs]);
|
||||
m_tx_tilemap->mark_tile_dirty(m_txoffs);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_bgoffs_w)
|
||||
void twincobr_state::twincobr_bgoffs_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_bgoffs);
|
||||
m_bgoffs %= (m_bgvideoram_size >> 1);
|
||||
}
|
||||
READ16_MEMBER(twincobr_state::twincobr_bgram_r)
|
||||
u16 twincobr_state::twincobr_bgram_r()
|
||||
{
|
||||
return m_bgvideoram16[m_bgoffs+m_bg_ram_bank];
|
||||
}
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_bgram_w)
|
||||
void twincobr_state::twincobr_bgram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_bgvideoram16[m_bgoffs+m_bg_ram_bank]);
|
||||
m_bg_tilemap->mark_tile_dirty((m_bgoffs+m_bg_ram_bank));
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_fgoffs_w)
|
||||
void twincobr_state::twincobr_fgoffs_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_fgoffs);
|
||||
m_fgoffs %= m_fgvideoram_size;
|
||||
}
|
||||
READ16_MEMBER(twincobr_state::twincobr_fgram_r)
|
||||
u16 twincobr_state::twincobr_fgram_r()
|
||||
{
|
||||
return m_fgvideoram16[m_fgoffs];
|
||||
}
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_fgram_w)
|
||||
void twincobr_state::twincobr_fgram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_fgvideoram16[m_fgoffs]);
|
||||
m_fg_tilemap->mark_tile_dirty(m_fgoffs);
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_txscroll_w)
|
||||
void twincobr_state::twincobr_txscroll_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
if (offset == 0) {
|
||||
if (offset == 0)
|
||||
{
|
||||
COMBINE_DATA(&m_txscrollx);
|
||||
m_tx_tilemap->set_scrollx(0, m_txscrollx);
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
COMBINE_DATA(&m_txscrolly);
|
||||
m_tx_tilemap->set_scrolly(0, m_txscrolly);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_bgscroll_w)
|
||||
void twincobr_state::twincobr_bgscroll_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
if (offset == 0) {
|
||||
if (offset == 0)
|
||||
{
|
||||
COMBINE_DATA(&m_bgscrollx);
|
||||
m_bg_tilemap->set_scrollx(0, m_bgscrollx);
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
COMBINE_DATA(&m_bgscrolly);
|
||||
m_bg_tilemap->set_scrolly(0, m_bgscrolly);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_fgscroll_w)
|
||||
void twincobr_state::twincobr_fgscroll_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
if (offset == 0) {
|
||||
if (offset == 0)
|
||||
{
|
||||
COMBINE_DATA(&m_fgscrollx);
|
||||
m_fg_tilemap->set_scrollx(0, m_fgscrollx);
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
COMBINE_DATA(&m_fgscrolly);
|
||||
m_fg_tilemap->set_scrolly(0, m_fgscrolly);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(twincobr_state::twincobr_exscroll_w)/* Extra unused video layer */
|
||||
void twincobr_state::twincobr_exscroll_w(offs_t offset, u16 data)/* Extra unused video layer */
|
||||
{
|
||||
if (offset == 0) logerror("PC - write %04x to unknown video scroll Y register\n",data);
|
||||
else logerror("PC - write %04x to unknown video scroll X register\n",data);
|
||||
}
|
||||
|
||||
/******************** Wardner interface to this hardware ********************/
|
||||
WRITE8_MEMBER(twincobr_state::wardner_txlayer_w)
|
||||
void twincobr_state::wardner_txlayer_w(offs_t offset, u8 data)
|
||||
{
|
||||
int shift = 8 * (offset & 1);
|
||||
twincobr_txoffs_w(space, offset / 2, data << shift, 0xff << shift);
|
||||
twincobr_txoffs_w(offset / 2, data << shift, 0xff << shift);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(twincobr_state::wardner_bglayer_w)
|
||||
void twincobr_state::wardner_bglayer_w(offs_t offset, u8 data)
|
||||
{
|
||||
int shift = 8 * (offset & 1);
|
||||
twincobr_bgoffs_w(space, offset / 2, data << shift, 0xff << shift);
|
||||
twincobr_bgoffs_w(offset / 2, data << shift, 0xff << shift);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(twincobr_state::wardner_fglayer_w)
|
||||
void twincobr_state::wardner_fglayer_w(offs_t offset, u8 data)
|
||||
{
|
||||
int shift = 8 * (offset & 1);
|
||||
twincobr_fgoffs_w(space, offset / 2, data << shift, 0xff << shift);
|
||||
twincobr_fgoffs_w(offset / 2, data << shift, 0xff << shift);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(twincobr_state::wardner_txscroll_w)
|
||||
void twincobr_state::wardner_txscroll_w(offs_t offset, u8 data)
|
||||
{
|
||||
int shift = 8 * (offset & 1);
|
||||
twincobr_txscroll_w(space, offset / 2, data << shift, 0xff << shift);
|
||||
twincobr_txscroll_w(offset / 2, data << shift, 0xff << shift);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(twincobr_state::wardner_bgscroll_w)
|
||||
void twincobr_state::wardner_bgscroll_w(offs_t offset, u8 data)
|
||||
{
|
||||
int shift = 8 * (offset & 1);
|
||||
twincobr_bgscroll_w(space, offset / 2, data << shift, 0xff << shift);
|
||||
twincobr_bgscroll_w(offset / 2, data << shift, 0xff << shift);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(twincobr_state::wardner_fgscroll_w)
|
||||
void twincobr_state::wardner_fgscroll_w(offs_t offset, u8 data)
|
||||
{
|
||||
int shift = 8 * (offset & 1);
|
||||
twincobr_fgscroll_w(space, offset / 2, data << shift, 0xff << shift);
|
||||
twincobr_fgscroll_w(offset / 2, data << shift, 0xff << shift);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(twincobr_state::wardner_exscroll_w)/* Extra unused video layer */
|
||||
void twincobr_state::wardner_exscroll_w(offs_t offset, u8 data)/* Extra unused video layer */
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
@ -279,37 +281,39 @@ WRITE8_MEMBER(twincobr_state::wardner_exscroll_w)/* Extra unused video layer */
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(twincobr_state::wardner_videoram_r)
|
||||
u8 twincobr_state::wardner_videoram_r(offs_t offset)
|
||||
{
|
||||
int shift = 8 * (offset & 1);
|
||||
switch (offset/2) {
|
||||
case 0: return twincobr_txram_r(space,0,0xffff) >> shift;
|
||||
case 1: return twincobr_bgram_r(space,0,0xffff) >> shift;
|
||||
case 2: return twincobr_fgram_r(space,0,0xffff) >> shift;
|
||||
switch (offset / 2)
|
||||
{
|
||||
case 0: return twincobr_txram_r() >> shift;
|
||||
case 1: return twincobr_bgram_r() >> shift;
|
||||
case 2: return twincobr_fgram_r() >> shift;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(twincobr_state::wardner_videoram_w)
|
||||
void twincobr_state::wardner_videoram_w(offs_t offset, u8 data)
|
||||
{
|
||||
int shift = 8 * (offset & 1);
|
||||
switch (offset/2) {
|
||||
case 0: twincobr_txram_w(space,0,data << shift, 0xff << shift); break;
|
||||
case 1: twincobr_bgram_w(space,0,data << shift, 0xff << shift); break;
|
||||
case 2: twincobr_fgram_w(space,0,data << shift, 0xff << shift); break;
|
||||
switch (offset / 2)
|
||||
{
|
||||
case 0: twincobr_txram_w(0,data << shift, 0xff << shift); break;
|
||||
case 1: twincobr_bgram_w(0,data << shift, 0xff << shift); break;
|
||||
case 2: twincobr_fgram_w(0,data << shift, 0xff << shift); break;
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(twincobr_state::wardner_sprite_r)
|
||||
u8 twincobr_state::wardner_sprite_r(offs_t offset)
|
||||
{
|
||||
uint16_t *spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->live());
|
||||
u16 *spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->live());
|
||||
int shift = (offset & 1) * 8;
|
||||
return spriteram16[offset/2] >> shift;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(twincobr_state::wardner_sprite_w)
|
||||
void twincobr_state::wardner_sprite_w(offs_t offset, u8 data)
|
||||
{
|
||||
uint16_t *spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->live());
|
||||
u16 *spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->live());
|
||||
if (offset & 1)
|
||||
spriteram16[offset/2] = (spriteram16[offset/2] & 0x00ff) | (data << 8);
|
||||
else
|
||||
@ -320,7 +324,7 @@ WRITE8_MEMBER(twincobr_state::wardner_sprite_w)
|
||||
|
||||
|
||||
|
||||
void twincobr_state::twincobr_log_vram()
|
||||
void twincobr_state::log_vram()
|
||||
{
|
||||
#ifdef MAME_DEBUG
|
||||
|
||||
@ -360,12 +364,12 @@ void twincobr_state::twincobr_log_vram()
|
||||
}
|
||||
|
||||
|
||||
uint32_t twincobr_state::screen_update_toaplan0(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 twincobr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
twincobr_log_vram();
|
||||
log_vram();
|
||||
|
||||
uint16_t *buffered_spriteram16;
|
||||
uint32_t bytes;
|
||||
u16 *buffered_spriteram16;
|
||||
u32 bytes;
|
||||
if (m_spriteram16 != nullptr)
|
||||
{
|
||||
buffered_spriteram16 = m_spriteram16->buffer();
|
||||
@ -373,7 +377,7 @@ uint32_t twincobr_state::screen_update_toaplan0(screen_device &screen, bitmap_in
|
||||
}
|
||||
else
|
||||
{
|
||||
buffered_spriteram16 = reinterpret_cast<uint16_t *>(m_spriteram8->buffer());
|
||||
buffered_spriteram16 = reinterpret_cast<u16 *>(m_spriteram8->buffer());
|
||||
bytes = m_spriteram8->bytes();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user