mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
kaneko16.cpp : Updates / Cleanups (#4744)
Reduce duplicates, Runtime tag lookups, Simplifty handlers, Fix namings, Reduce unnecessary ACCESSING_BITs, Reduce some unnecessary lines, Use shorter / correct type values kaneko16.cpp : Move most of things under protected: / private:
This commit is contained in:
parent
8178098fe0
commit
034f09a3b3
@ -132,15 +132,20 @@ MACHINE_RESET_MEMBER(kaneko16_state,mgcrystl)
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
WRITE16_MEMBER(kaneko16_state::kaneko16_coin_lockout_w)
|
||||
void kaneko16_state::coin_lockout_w(u8 data)
|
||||
{
|
||||
if (ACCESSING_BITS_8_15)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x0100);
|
||||
machine().bookkeeping().coin_counter_w(1, data & 0x0200);
|
||||
machine().bookkeeping().coin_lockout_w(0, (~data) & 0x0400 );
|
||||
machine().bookkeeping().coin_lockout_w(1, (~data) & 0x0800 );
|
||||
}
|
||||
machine().bookkeeping().coin_counter_w(0, BIT( data, 0));
|
||||
machine().bookkeeping().coin_counter_w(1, BIT( data, 1));
|
||||
machine().bookkeeping().coin_lockout_w(0, BIT(~data, 2));
|
||||
machine().bookkeeping().coin_lockout_w(1, BIT(~data, 3));
|
||||
}
|
||||
|
||||
void kaneko16_state::bloodwar_coin_lockout_w(u8 data)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
|
||||
machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
|
||||
machine().bookkeeping().coin_lockout_w(0, BIT(data, 7));
|
||||
machine().bookkeeping().coin_lockout_w(1, BIT(data, 7));
|
||||
}
|
||||
|
||||
|
||||
@ -155,8 +160,8 @@ WRITE16_MEMBER(kaneko16_state::kaneko16_coin_lockout_w)
|
||||
***************************************************************************/
|
||||
|
||||
/* Two identically mapped YM2149 chips */
|
||||
template<int Chip>
|
||||
READ16_MEMBER(kaneko16_state::kaneko16_ay_YM2149_r)
|
||||
template<unsigned Chip>
|
||||
READ16_MEMBER(kaneko16_state::ym2149_r)
|
||||
{
|
||||
/* Each 2149 register is mapped to a different address */
|
||||
m_ym2149[Chip]->address_w(offset);
|
||||
@ -164,8 +169,8 @@ READ16_MEMBER(kaneko16_state::kaneko16_ay_YM2149_r)
|
||||
}
|
||||
|
||||
|
||||
template<int Chip>
|
||||
WRITE16_MEMBER(kaneko16_state::kaneko16_ay_YM2149_w)
|
||||
template<unsigned Chip>
|
||||
WRITE16_MEMBER(kaneko16_state::ym2149_w)
|
||||
{
|
||||
/* Each 2149 register is mapped to a different address */
|
||||
m_ym2149[Chip]->address_w(offset);
|
||||
@ -174,15 +179,15 @@ WRITE16_MEMBER(kaneko16_state::kaneko16_ay_YM2149_w)
|
||||
else m_ym2149[Chip]->data_w((data >> 8) & 0xff);
|
||||
}
|
||||
|
||||
template<int Mask>
|
||||
WRITE8_MEMBER(kaneko16_state::oki_bank0_w)
|
||||
template<unsigned Mask>
|
||||
void kaneko16_state::oki_bank0_w(u8 data)
|
||||
{
|
||||
m_okibank[0]->set_entry(data & Mask);
|
||||
// logerror("%s:Selecting OKI1 bank %02X\n",machine().describe_context(),data&0xff);
|
||||
}
|
||||
|
||||
template<int Mask>
|
||||
WRITE8_MEMBER(kaneko16_state::oki_bank1_w)
|
||||
template<unsigned Mask>
|
||||
void kaneko16_state::oki_bank1_w(u8 data)
|
||||
{
|
||||
m_okibank[1]->set_entry(data & Mask);
|
||||
// logerror("%s:Selecting OKI2 bank %02X\n",machine().describe_context(),data&0xff);
|
||||
@ -196,28 +201,17 @@ WRITE8_MEMBER(kaneko16_state::oki_bank1_w)
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
WRITE16_MEMBER(kaneko16_state::kaneko16_eeprom_w)
|
||||
void kaneko16_state::eeprom_w(u8 data)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
ioport("EEPROMOUT")->write(data, 0xff);
|
||||
}
|
||||
|
||||
if (ACCESSING_BITS_8_15)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x0100);
|
||||
machine().bookkeeping().coin_counter_w(1, data & 0x0200);
|
||||
machine().bookkeeping().coin_lockout_w(0, data & 0x8000);
|
||||
machine().bookkeeping().coin_lockout_w(1, data & 0x8000);
|
||||
}
|
||||
m_eepromout_port->write(data, 0xff);
|
||||
}
|
||||
|
||||
READ8_MEMBER(kaneko16_state::eeprom_r)
|
||||
u8 kaneko16_state::eeprom_r()
|
||||
{
|
||||
return m_eeprom->do_read();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(kaneko16_state::eeprom_w)
|
||||
void kaneko16_state::eeprom_cs_w(u8 data)
|
||||
{
|
||||
m_eeprom->cs_write(data);
|
||||
}
|
||||
@ -234,21 +228,6 @@ WRITE8_MEMBER(kaneko16_state::eeprom_w)
|
||||
The Berlin Wall
|
||||
***************************************************************************/
|
||||
|
||||
READ16_MEMBER(kaneko16_berlwall_state::berlwall_oki_r)
|
||||
{
|
||||
uint16_t ret;
|
||||
|
||||
if (mem_mask == 0xff00) // reads / writes to the upper byte only appear to act as a mirror to the lower byte, 16-bit reads/writes only access the lower byte.
|
||||
{
|
||||
mem_mask >>= 8;
|
||||
}
|
||||
|
||||
ret = m_oki[0]->read();
|
||||
ret = ret | ret << 8;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(kaneko16_berlwall_state::berlwall_oki_w)
|
||||
{
|
||||
if (mem_mask == 0xff00) // reads / writes to the upper byte only appear to act as a mirror to the lower byte, 16-bit reads/writes only access the lower byte.
|
||||
@ -260,14 +239,14 @@ WRITE16_MEMBER(kaneko16_berlwall_state::berlwall_oki_w)
|
||||
m_oki[0]->write(data);
|
||||
}
|
||||
|
||||
READ16_MEMBER(kaneko16_berlwall_state::berlwall_spriteram_r)
|
||||
u16 kaneko16_berlwall_state::berlwall_spriteram_r(offs_t offset)
|
||||
{
|
||||
offset = bitswap<16>(offset, 15, 14, 13, 12, 2, 11, 10, 9, 8, 7, 6, 5, 4, 3, 1, 0);
|
||||
offset ^= 0x800;
|
||||
return m_spriteram[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(kaneko16_berlwall_state::berlwall_spriteram_w)
|
||||
void kaneko16_berlwall_state::berlwall_spriteram_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
offset = bitswap<16>(offset, 15, 14, 13, 12, 2, 11, 10, 9, 8, 7, 6, 5, 4, 3, 1, 0);
|
||||
offset ^= 0x800;
|
||||
@ -297,19 +276,19 @@ void kaneko16_berlwall_state::berlwall_map(address_map &map)
|
||||
map(0x30e000, 0x30ffff).rw(FUNC(kaneko16_berlwall_state::berlwall_spriteram_r), FUNC(kaneko16_berlwall_state::berlwall_spriteram_w)).share("spriteram"); // Sprites (scrambled RAM)
|
||||
map(0x400000, 0x400fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
|
||||
map(0x480000, 0x480001).ram().share("bg15_scroll"); // High Color Background
|
||||
map(0x500000, 0x500001).rw(FUNC(kaneko16_berlwall_state::kaneko16_bg15_bright_r), FUNC(kaneko16_berlwall_state::kaneko16_bg15_bright_w)).share("bg15_bright"); // ""
|
||||
map(0x580000, 0x580001).rw(FUNC(kaneko16_berlwall_state::kaneko16_bg15_select_r), FUNC(kaneko16_berlwall_state::kaneko16_bg15_select_w)).share("bg15_select"); // ""
|
||||
map(0x500001, 0x500001).rw(FUNC(kaneko16_berlwall_state::bg15_bright_r), FUNC(kaneko16_berlwall_state::bg15_bright_w)); // ""
|
||||
map(0x580001, 0x580001).rw(FUNC(kaneko16_berlwall_state::bg15_select_r), FUNC(kaneko16_berlwall_state::bg15_select_w)); // ""
|
||||
map(0x600000, 0x60003f).rw(FUNC(kaneko16_berlwall_state::berlwall_spriteregs_r), FUNC(kaneko16_berlwall_state::berlwall_spriteregs_w)); // Sprite Regs (scrambled RAM)
|
||||
map(0x680000, 0x680001).portr("P1");
|
||||
map(0x680002, 0x680003).portr("P2");
|
||||
map(0x680004, 0x680005).portr("SYSTEM");
|
||||
// map(0x680006, 0x680007) AM_READ_PORT("UNK")
|
||||
map(0x700000, 0x700001).w(FUNC(kaneko16_berlwall_state::kaneko16_coin_lockout_w)); // Coin Lockout
|
||||
map(0x780000, 0x780001).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
|
||||
map(0x800000, 0x80001f).rw(FUNC(kaneko16_berlwall_state::kaneko16_ay_YM2149_r<0>), FUNC(kaneko16_berlwall_state::kaneko16_ay_YM2149_w<0>)); // Sound
|
||||
map(0x800200, 0x80021f).rw(FUNC(kaneko16_berlwall_state::kaneko16_ay_YM2149_r<1>), FUNC(kaneko16_berlwall_state::kaneko16_ay_YM2149_w<1>));
|
||||
// map(0x680006, 0x680007).portr("UNK");
|
||||
map(0x700000, 0x700000).w(FUNC(kaneko16_berlwall_state::coin_lockout_w)); // Coin Lockout
|
||||
map(0x780000, 0x780001).r(m_watchdog, FUNC(watchdog_timer_device::reset16_r));
|
||||
map(0x800000, 0x80001f).rw(FUNC(kaneko16_berlwall_state::ym2149_r<0>), FUNC(kaneko16_berlwall_state::ym2149_w<0>)); // Sound
|
||||
map(0x800200, 0x80021f).rw(FUNC(kaneko16_berlwall_state::ym2149_r<1>), FUNC(kaneko16_berlwall_state::ym2149_w<1>));
|
||||
map(0x8003fe, 0x8003ff).noprw(); // for OKI when accessed as .l
|
||||
map(0x800400, 0x800401).rw(FUNC(kaneko16_berlwall_state::berlwall_oki_r), FUNC(kaneko16_berlwall_state::berlwall_oki_w));
|
||||
map(0x800400, 0x800401).r(m_oki[0], FUNC(okim6295_device::read)).w(FUNC(kaneko16_berlwall_state::berlwall_oki_w));
|
||||
map(0xc00000, 0xc03fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
|
||||
map(0xd00000, 0xd0001f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
|
||||
}
|
||||
@ -327,11 +306,11 @@ void kaneko16_state::bakubrkr_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x07ffff).rom(); // ROM
|
||||
map(0x100000, 0x10ffff).ram(); // Work RAM
|
||||
map(0x400000, 0x40001f).r(FUNC(kaneko16_state::kaneko16_ay_YM2149_r<0>)); // Sound
|
||||
map(0x400000, 0x40001d).w(FUNC(kaneko16_state::kaneko16_ay_YM2149_w<0>));
|
||||
map(0x400000, 0x40001f).r(FUNC(kaneko16_state::ym2149_r<0>)); // Sound
|
||||
map(0x400000, 0x40001d).w(FUNC(kaneko16_state::ym2149_w<0>));
|
||||
map(0x40001f, 0x40001f).w(FUNC(kaneko16_state::oki_bank0_w<7>)); // OKI bank Switch
|
||||
map(0x400200, 0x40021f).rw(FUNC(kaneko16_state::kaneko16_ay_YM2149_r<1>), FUNC(kaneko16_state::kaneko16_ay_YM2149_w<1>)); // Sound
|
||||
map(0x400401, 0x400401).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); //
|
||||
map(0x400200, 0x40021f).rw(FUNC(kaneko16_state::ym2149_r<1>), FUNC(kaneko16_state::ym2149_w<1>)); // Sound
|
||||
map(0x400401, 0x400401).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write)); //
|
||||
map(0x500000, 0x503fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
|
||||
map(0x580000, 0x583fff).m(m_view2[1], FUNC(kaneko_view2_tilemap_device::vram_map));
|
||||
map(0x600000, 0x601fff).ram().share("spriteram"); // Sprites
|
||||
@ -340,7 +319,8 @@ void kaneko16_state::bakubrkr_map(address_map &map)
|
||||
map(0x900000, 0x90001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
|
||||
map(0xa80000, 0xa80001).r("watchdog", FUNC(watchdog_timer_device::reset16_r));
|
||||
map(0xb00000, 0xb0001f).rw(m_view2[1], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
|
||||
map(0xd00000, 0xd00001).w(FUNC(kaneko16_state::kaneko16_eeprom_w)); // EEPROM
|
||||
map(0xd00000, 0xd00000).w(FUNC(kaneko16_state::bloodwar_coin_lockout_w)); // Coin Lockout
|
||||
map(0xd00001, 0xd00001).w(FUNC(kaneko16_state::eeprom_w)); // EEPROM
|
||||
map(0xe00000, 0xe00001).portr("P1");
|
||||
map(0xe00002, 0xe00003).portr("P2");
|
||||
map(0xe00004, 0xe00005).portr("SYSTEM");
|
||||
@ -366,7 +346,7 @@ void kaneko16_state::blazeon_map(address_map &map)
|
||||
map(0xc00002, 0xc00003).portr("DSW1_P2");
|
||||
map(0xc00004, 0xc00005).portr("UNK");
|
||||
map(0xc00006, 0xc00007).portr("SYSTEM");
|
||||
map(0xd00000, 0xd00001).w(FUNC(kaneko16_state::kaneko16_coin_lockout_w)); // Coin Lockout
|
||||
map(0xd00000, 0xd00000).w(FUNC(kaneko16_state::coin_lockout_w)); // Coin Lockout
|
||||
map(0xe00000, 0xe00001).nopr(); // Read = IRQ Ack ?
|
||||
map(0xe00000, 0xe00000).w(m_soundlatch, FUNC(generic_latch_8_device::write));
|
||||
map(0xe40000, 0xe40001).nopr(); // IRQ Ack ?
|
||||
@ -379,26 +359,15 @@ void kaneko16_state::blazeon_map(address_map &map)
|
||||
Blood Warrior
|
||||
***************************************************************************/
|
||||
|
||||
WRITE16_MEMBER(kaneko16_gtmr_state::bloodwar_coin_lockout_w)
|
||||
{
|
||||
if (ACCESSING_BITS_8_15)
|
||||
{
|
||||
machine().bookkeeping().coin_counter_w(0, data & 0x0100);
|
||||
machine().bookkeeping().coin_counter_w(1, data & 0x0200);
|
||||
machine().bookkeeping().coin_lockout_w(0, data & 0x8000);
|
||||
machine().bookkeeping().coin_lockout_w(1, data & 0x8000);
|
||||
}
|
||||
}
|
||||
|
||||
void kaneko16_gtmr_state::bloodwar_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x0fffff).rom(); // ROM
|
||||
map(0x100000, 0x10ffff).ram(); // Work RAM
|
||||
map(0x200000, 0x20ffff).ram().share("mcuram");
|
||||
map(0x2a0000, 0x2a0001).w("toybox", FUNC(kaneko_toybox_device::mcu_com0_w)); // To MCU ?
|
||||
map(0x2b0000, 0x2b0001).w("toybox", FUNC(kaneko_toybox_device::mcu_com1_w));
|
||||
map(0x2c0000, 0x2c0001).w("toybox", FUNC(kaneko_toybox_device::mcu_com2_w));
|
||||
map(0x2d0000, 0x2d0001).w("toybox", FUNC(kaneko_toybox_device::mcu_com3_w));
|
||||
map(0x2a0000, 0x2a0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com0_w)); // To MCU ?
|
||||
map(0x2b0000, 0x2b0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com1_w));
|
||||
map(0x2c0000, 0x2c0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com2_w));
|
||||
map(0x2d0000, 0x2d0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com3_w));
|
||||
map(0x300000, 0x30ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
|
||||
map(0x400000, 0x401fff).ram().share("spriteram"); // Sprites
|
||||
map(0x500000, 0x503fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
|
||||
@ -406,17 +375,17 @@ void kaneko16_gtmr_state::bloodwar_map(address_map &map)
|
||||
map(0x600000, 0x60001f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
|
||||
map(0x680000, 0x68001f).rw(m_view2[1], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
|
||||
map(0x700000, 0x70001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
|
||||
map(0x800001, 0x800001).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x880001, 0x880001).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x900000, 0x900039).rw("kan_hit", FUNC(kaneko_hit_device::kaneko_hit_r), FUNC(kaneko_hit_device::kaneko_hit_w));
|
||||
map(0xa00000, 0xa00001).rw("watchdog", FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w));
|
||||
map(0x800001, 0x800001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x880001, 0x880001).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x900000, 0x900039).rw(m_kaneko_hit, FUNC(kaneko_hit_device::kaneko_hit_r), FUNC(kaneko_hit_device::kaneko_hit_w));
|
||||
map(0xa00000, 0xa00001).rw(m_watchdog, FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w));
|
||||
map(0xb00000, 0xb00001).portr("P1");
|
||||
map(0xb00002, 0xb00003).portr("P2");
|
||||
map(0xb00004, 0xb00005).portr("SYSTEM");
|
||||
map(0xb00006, 0xb00007).portr("EXTRA");
|
||||
map(0xb80000, 0xb80001).w(FUNC(kaneko16_gtmr_state::bloodwar_coin_lockout_w)); // Coin Lockout
|
||||
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::kaneko16_display_enable));
|
||||
map(0xd00000, 0xd00001).r("toybox", FUNC(kaneko_toybox_device::mcu_status_r));
|
||||
map(0xb80000, 0xb80000).w(FUNC(kaneko16_gtmr_state::bloodwar_coin_lockout_w)); // Coin Lockout
|
||||
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::display_enable_w));
|
||||
map(0xd00000, 0xd00001).r(m_toybox, FUNC(kaneko_toybox_device::mcu_status_r));
|
||||
map(0xe00001, 0xe00001).w(FUNC(kaneko16_gtmr_state::oki_bank0_w<0xf>));
|
||||
map(0xe80001, 0xe80001).w(FUNC(kaneko16_gtmr_state::oki_bank1_w<0x3>));
|
||||
}
|
||||
@ -431,10 +400,10 @@ void kaneko16_gtmr_state::bonkadv_map(address_map &map)
|
||||
map(0x000000, 0x0fffff).rom(); // ROM
|
||||
map(0x100000, 0x10ffff).ram(); // Work RAM
|
||||
map(0x200000, 0x20ffff).ram().share("mcuram"); // Shared With MCU
|
||||
map(0x2a0000, 0x2a0001).w("toybox", FUNC(kaneko_toybox_device::mcu_com0_w)); // To MCU ?
|
||||
map(0x2b0000, 0x2b0001).w("toybox", FUNC(kaneko_toybox_device::mcu_com1_w));
|
||||
map(0x2c0000, 0x2c0001).w("toybox", FUNC(kaneko_toybox_device::mcu_com2_w));
|
||||
map(0x2d0000, 0x2d0001).w("toybox", FUNC(kaneko_toybox_device::mcu_com3_w));
|
||||
map(0x2a0000, 0x2a0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com0_w)); // To MCU ?
|
||||
map(0x2b0000, 0x2b0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com1_w));
|
||||
map(0x2c0000, 0x2c0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com2_w));
|
||||
map(0x2d0000, 0x2d0001).w(m_toybox, FUNC(kaneko_toybox_device::mcu_com3_w));
|
||||
map(0x300000, 0x30ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
|
||||
map(0x400000, 0x401fff).ram().share("spriteram"); // Sprites
|
||||
map(0x500000, 0x503fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
|
||||
@ -442,17 +411,17 @@ void kaneko16_gtmr_state::bonkadv_map(address_map &map)
|
||||
map(0x600000, 0x60001f).rw(m_view2[0], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
|
||||
map(0x680000, 0x68001f).rw(m_view2[1], FUNC(kaneko_view2_tilemap_device::regs_r), FUNC(kaneko_view2_tilemap_device::regs_w));
|
||||
map(0x700000, 0x70001f).rw(m_kaneko_spr, FUNC(kaneko16_sprite_device::regs_r), FUNC(kaneko16_sprite_device::regs_w));
|
||||
map(0x800001, 0x800001).rw("oki1", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x880001, 0x880001).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x900000, 0x900015).rw("kan_hit", FUNC(kaneko_hit_device::kaneko_hit_r), FUNC(kaneko_hit_device::kaneko_hit_w));
|
||||
map(0xa00000, 0xa00001).rw("watchdog", FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w)); // Watchdog
|
||||
map(0x800001, 0x800001).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x880001, 0x880001).rw(m_oki[1], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x900000, 0x900015).rw(m_kaneko_hit, FUNC(kaneko_hit_device::kaneko_hit_r), FUNC(kaneko_hit_device::kaneko_hit_w));
|
||||
map(0xa00000, 0xa00001).rw(m_watchdog, FUNC(watchdog_timer_device::reset16_r), FUNC(watchdog_timer_device::reset16_w)); // Watchdog
|
||||
map(0xb00000, 0xb00001).portr("P1");
|
||||
map(0xb00002, 0xb00003).portr("P2");
|
||||
map(0xb00004, 0xb00005).portr("SYSTEM");
|
||||
map(0xb00006, 0xb00007).portr("UNK");
|
||||
map(0xb80000, 0xb80001).w(FUNC(kaneko16_gtmr_state::bloodwar_coin_lockout_w)); // Coin Lockout
|
||||
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::kaneko16_display_enable));
|
||||
map(0xd00000, 0xd00001).r("toybox", FUNC(kaneko_toybox_device::mcu_status_r));
|
||||
map(0xb80000, 0xb80000).w(FUNC(kaneko16_gtmr_state::bloodwar_coin_lockout_w)); // Coin Lockout
|
||||
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::display_enable_w));
|
||||
map(0xd00000, 0xd00001).r(m_toybox, FUNC(kaneko_toybox_device::mcu_status_r));
|
||||
map(0xe00001, 0xe00001).w(FUNC(kaneko16_gtmr_state::oki_bank0_w<0xf>));
|
||||
map(0xe80001, 0xe80001).w(FUNC(kaneko16_gtmr_state::oki_bank1_w<0xf>));
|
||||
}
|
||||
@ -463,15 +432,15 @@ void kaneko16_gtmr_state::bonkadv_map(address_map &map)
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
READ16_MEMBER(kaneko16_gtmr_state::gtmr_wheel_r)
|
||||
u16 kaneko16_gtmr_state::gtmr_wheel_r()
|
||||
{
|
||||
// check 'Controls' dip switch
|
||||
switch (ioport("DSW1")->read() & 0x1000)
|
||||
switch (m_dsw_port->read() & 0x1000)
|
||||
{
|
||||
case 0x0000: // 'Both Sides' = 270deg Wheel
|
||||
return (ioport("WHEEL0")->read());
|
||||
return (m_wheel_port[0]->read());
|
||||
case 0x1000: // '1P Side' = 360' Wheel
|
||||
return (ioport("WHEEL1")->read());
|
||||
return (m_wheel_port[1]->read());
|
||||
default:
|
||||
return (0);
|
||||
}
|
||||
@ -512,8 +481,8 @@ void kaneko16_gtmr_state::gtmr_map(address_map &map)
|
||||
map(0xb00002, 0xb00003).portr("P2");
|
||||
map(0xb00004, 0xb00005).portr("SYSTEM");
|
||||
map(0xb00006, 0xb00007).portr("UNK");
|
||||
map(0xb80000, 0xb80001).w(FUNC(kaneko16_gtmr_state::kaneko16_coin_lockout_w)); // Coin Lockout
|
||||
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::kaneko16_display_enable)); // might do more than that
|
||||
map(0xb80000, 0xb80000).w(FUNC(kaneko16_gtmr_state::coin_lockout_w)); // Coin Lockout
|
||||
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::display_enable_w)); // might do more than that
|
||||
|
||||
map(0xd00000, 0xd00001).r(m_toybox, FUNC(kaneko_toybox_device::mcu_status_r));
|
||||
|
||||
@ -526,7 +495,7 @@ void kaneko16_gtmr_state::gtmr_map(address_map &map)
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
READ16_MEMBER(kaneko16_gtmr_state::gtmr2_wheel_r)
|
||||
u16 kaneko16_gtmr_state::gtmr2_wheel_r()
|
||||
{
|
||||
switch (m_dsw_port->read() & 0x1800)
|
||||
{
|
||||
@ -542,7 +511,7 @@ READ16_MEMBER(kaneko16_gtmr_state::gtmr2_wheel_r)
|
||||
}
|
||||
}
|
||||
|
||||
READ16_MEMBER(kaneko16_gtmr_state::gtmr2_IN1_r)
|
||||
u16 kaneko16_gtmr_state::gtmr2_IN1_r()
|
||||
{
|
||||
return (m_p2_port->read() & (m_fake_port->read() | ~0x7100));
|
||||
}
|
||||
@ -581,8 +550,8 @@ void kaneko16_gtmr_state::gtmr2_map(address_map &map)
|
||||
map(0xb00002, 0xb00003).r(FUNC(kaneko16_gtmr_state::gtmr2_IN1_r));
|
||||
map(0xb00004, 0xb00005).portr("SYSTEM");
|
||||
map(0xb00006, 0xb00007).portr("EXTRA");
|
||||
map(0xb80000, 0xb80001).w(FUNC(kaneko16_gtmr_state::kaneko16_coin_lockout_w)); // Coin Lockout
|
||||
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::kaneko16_display_enable)); // might do more than that
|
||||
map(0xb80000, 0xb80000).w(FUNC(kaneko16_gtmr_state::coin_lockout_w)); // Coin Lockout
|
||||
map(0xc00000, 0xc00001).w(FUNC(kaneko16_gtmr_state::display_enable_w)); // might do more than that
|
||||
|
||||
map(0xd00000, 0xd00001).r(m_toybox, FUNC(kaneko_toybox_device::mcu_status_r));
|
||||
|
||||
@ -598,8 +567,8 @@ void kaneko16_state::mgcrystl_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x07ffff).rom(); // ROM
|
||||
map(0x300000, 0x30ffff).ram(); // Work RAM
|
||||
map(0x400000, 0x40001f).rw(FUNC(kaneko16_state::kaneko16_ay_YM2149_r<0>), FUNC(kaneko16_state::kaneko16_ay_YM2149_w<0>)); // Sound
|
||||
map(0x400200, 0x40021f).rw(FUNC(kaneko16_state::kaneko16_ay_YM2149_r<1>), FUNC(kaneko16_state::kaneko16_ay_YM2149_w<1>));
|
||||
map(0x400000, 0x40001f).rw(FUNC(kaneko16_state::ym2149_r<0>), FUNC(kaneko16_state::ym2149_w<0>)); // Sound
|
||||
map(0x400200, 0x40021f).rw(FUNC(kaneko16_state::ym2149_r<1>), FUNC(kaneko16_state::ym2149_w<1>));
|
||||
map(0x400401, 0x400401).rw(m_oki[0], FUNC(okim6295_device::read), FUNC(okim6295_device::write));
|
||||
map(0x500000, 0x500fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); // Palette
|
||||
map(0x600000, 0x603fff).m(m_view2[0], FUNC(kaneko_view2_tilemap_device::vram_map));
|
||||
@ -612,7 +581,8 @@ void kaneko16_state::mgcrystl_map(address_map &map)
|
||||
map(0xc00000, 0xc00001).portr("DSW_P1");
|
||||
map(0xc00002, 0xc00003).portr("P2");
|
||||
map(0xc00004, 0xc00005).portr("SYSTEM");
|
||||
map(0xd00000, 0xd00001).w(FUNC(kaneko16_state::kaneko16_eeprom_w)); // EEPROM
|
||||
map(0xd00000, 0xd00000).w(FUNC(kaneko16_state::bloodwar_coin_lockout_w)); // Coin Lockout
|
||||
map(0xd00001, 0xd00001).w(FUNC(kaneko16_state::eeprom_w)); // EEPROM
|
||||
}
|
||||
|
||||
|
||||
@ -621,13 +591,10 @@ void kaneko16_state::mgcrystl_map(address_map &map)
|
||||
Shogun Warriors
|
||||
***************************************************************************/
|
||||
|
||||
WRITE16_MEMBER(kaneko16_shogwarr_state::shogwarr_oki_bank_w)
|
||||
void kaneko16_shogwarr_state::shogwarr_oki_bank_w(u8 data)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
m_okibank[0]->set_entry((data >> 4) & 0xf);
|
||||
m_okibank[1]->set_entry((data & 0xf));
|
||||
}
|
||||
m_okibank[0]->set_entry((data >> 4) & 0xf);
|
||||
m_okibank[1]->set_entry((data & 0xf));
|
||||
}
|
||||
|
||||
void kaneko16_shogwarr_state::shogwarr_map(address_map &map)
|
||||
@ -654,7 +621,7 @@ void kaneko16_shogwarr_state::shogwarr_map(address_map &map)
|
||||
map(0xb80004, 0xb80005).portr("SYSTEM");
|
||||
map(0xb80006, 0xb80007).portr("UNK");
|
||||
map(0xd00000, 0xd00001).noprw(); // ? (bit 0)
|
||||
map(0xe00000, 0xe00001).w(FUNC(kaneko16_shogwarr_state::shogwarr_oki_bank_w)); // Samples Bankswitching
|
||||
map(0xe00001, 0xe00001).w(FUNC(kaneko16_shogwarr_state::shogwarr_oki_bank_w)); // Samples Bankswitching
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
@ -674,6 +641,7 @@ void kaneko16_state::blazeon_soundmem(address_map &map)
|
||||
map(0x0000, 0x7fff).rom(); // ROM
|
||||
map(0x8000, 0xbfff).rom(); // ROM (supposed to be banked?)
|
||||
map(0xc000, 0xdfff).ram(); // RAM
|
||||
//map(0xe000, 0xe001).noprw(); // Unknown read / writes in boot
|
||||
}
|
||||
|
||||
void kaneko16_state::blazeon_soundport(address_map &map)
|
||||
@ -1738,7 +1706,7 @@ GFXDECODE_END
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(kaneko16_state::kaneko16_interrupt)
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(kaneko16_state::interrupt)
|
||||
{
|
||||
int scanline = param;
|
||||
|
||||
@ -1773,7 +1741,7 @@ void kaneko16_berlwall_state::berlwall(machine_config &config)
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, 12000000); /* MC68000P12 */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_berlwall_state::berlwall_map);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::kaneko16_interrupt), "screen", 0, 1);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_berlwall_state::interrupt), "screen", 0, 1);
|
||||
|
||||
WATCHDOG_TIMER(config, m_watchdog);
|
||||
|
||||
@ -1784,7 +1752,7 @@ void kaneko16_berlwall_state::berlwall(machine_config &config)
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
|
||||
m_screen->set_size(256, 256);
|
||||
m_screen->set_visarea(0, 256-1, 16, 240-1);
|
||||
m_screen->set_screen_update(FUNC(kaneko16_berlwall_state::screen_update_berlwall));
|
||||
m_screen->set_screen_update(FUNC(kaneko16_berlwall_state::screen_update));
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_1x4bit);
|
||||
PALETTE(config, m_palette).set_format(palette_device::xGRB_555, 2048);
|
||||
@ -1800,23 +1768,19 @@ void kaneko16_berlwall_state::berlwall(machine_config &config)
|
||||
m_kaneko_spr->set_offsets(0, -1*64);
|
||||
m_kaneko_spr->set_gfxdecode_tag("gfxdecode");
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(kaneko16_berlwall_state,berlwall)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
YM2149(config, m_ym2149[0], 1000000);
|
||||
m_ym2149[0]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
|
||||
m_ym2149[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
m_ym2149[0]->port_a_read_callback().set_ioport("DSW1");
|
||||
m_ym2149[0]->port_b_read_callback().set_ioport("DSW2");
|
||||
|
||||
YM2149(config, m_ym2149[1], 1000000);
|
||||
m_ym2149[1]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
|
||||
m_ym2149[1]->add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
|
||||
OKIM6295(config, m_oki[0], 12000000/6, okim6295_device::PIN7_LOW);
|
||||
m_oki[0]->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
|
||||
m_oki[0]->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
|
||||
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
}
|
||||
|
||||
|
||||
@ -1835,7 +1799,7 @@ void kaneko16_state::bakubrkr(machine_config &config)
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, XTAL(12'000'000)); /* verified on pcb */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_state::bakubrkr_map);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::kaneko16_interrupt), "screen", 0, 1);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::interrupt), "screen", 0, 1);
|
||||
|
||||
MCFG_MACHINE_RESET_OVERRIDE(kaneko16_state,gtmr)
|
||||
EEPROM_93C46_16BIT(config, m_eeprom);
|
||||
@ -1849,7 +1813,7 @@ void kaneko16_state::bakubrkr(machine_config &config)
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
|
||||
m_screen->set_size(256, 256);
|
||||
m_screen->set_visarea(0, 256-1, 16, 240-1);
|
||||
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update_kaneko16));
|
||||
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_2x4bit);
|
||||
@ -1869,8 +1833,6 @@ void kaneko16_state::bakubrkr(machine_config &config)
|
||||
m_kaneko_spr->set_priorities(8,8,8,8); // above all
|
||||
m_kaneko_spr->set_gfxdecode_tag("gfxdecode");
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(kaneko16_state,kaneko16)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
@ -1880,7 +1842,7 @@ void kaneko16_state::bakubrkr(machine_config &config)
|
||||
YM2149(config, m_ym2149[1], XTAL(12'000'000)/6); /* verified on pcb */
|
||||
m_ym2149[1]->add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
m_ym2149[1]->port_a_read_callback().set(FUNC(kaneko16_state::eeprom_r)); /* inputs A: 0,EEPROM bit read */
|
||||
m_ym2149[1]->port_b_write_callback().set(FUNC(kaneko16_state::eeprom_w)); /* outputs B: 0,EEPROM reset */
|
||||
m_ym2149[1]->port_b_write_callback().set(FUNC(kaneko16_state::eeprom_cs_w)); /* outputs B: 0,EEPROM reset */
|
||||
|
||||
OKIM6295(config, m_oki[0], XTAL(12'000'000)/6, okim6295_device::PIN7_HIGH); /* verified on pcb */
|
||||
m_oki[0]->set_addrmap(0, &kaneko16_state::bakubrkr_oki1_map);
|
||||
@ -1907,7 +1869,7 @@ void kaneko16_state::blazeon(machine_config &config)
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, 12000000); /* TMP68HC000-12 */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_state::blazeon_map);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::kaneko16_interrupt), "screen", 0, 1);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::interrupt), "screen", 0, 1);
|
||||
|
||||
Z80(config, m_audiocpu, 4000000); /* D780C-2 (6 MHz) */
|
||||
m_audiocpu->set_addrmap(AS_PROGRAM, &kaneko16_state::blazeon_soundmem);
|
||||
@ -1920,7 +1882,7 @@ void kaneko16_state::blazeon(machine_config &config)
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
|
||||
m_screen->set_size(320, 240);
|
||||
m_screen->set_visarea(0, 320-1, 0, 240-1 -8);
|
||||
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update_kaneko16));
|
||||
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_1x4bit);
|
||||
@ -1938,8 +1900,6 @@ void kaneko16_state::blazeon(machine_config &config)
|
||||
|
||||
// there is actually a 2nd sprite chip! looks like our device emulation handles both at once
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(kaneko16_state,kaneko16)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
@ -1962,7 +1922,7 @@ void kaneko16_state::wingforc(machine_config &config)
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, XTAL(16'000'000)); /* TMP68HC000N-16 */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_state::blazeon_map);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::kaneko16_interrupt), "screen", 0, 1);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::interrupt), "screen", 0, 1);
|
||||
|
||||
Z80(config, m_audiocpu, XTAL(16'000'000)/4); /* D780C-2 (6 MHz) */
|
||||
m_audiocpu->set_addrmap(AS_PROGRAM, &kaneko16_state::blazeon_soundmem);
|
||||
@ -1975,7 +1935,7 @@ void kaneko16_state::wingforc(machine_config &config)
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
|
||||
m_screen->set_size(320, 240);
|
||||
m_screen->set_visarea(0, 320-1, 0, 240-1 -16);
|
||||
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update_kaneko16));
|
||||
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_1x4bit);
|
||||
@ -1993,8 +1953,6 @@ void kaneko16_state::wingforc(machine_config &config)
|
||||
|
||||
// there is actually a 2nd sprite chip! looks like our device emulation handles both at once
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(kaneko16_state,kaneko16)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
@ -2040,7 +1998,7 @@ void kaneko16_gtmr_state::gtmr(machine_config &config)
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, XTAL(16'000'000)); /* verified on pcb */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_gtmr_state::gtmr_map);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::kaneko16_interrupt), "screen", 0, 1);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_gtmr_state::interrupt), "screen", 0, 1);
|
||||
|
||||
MCFG_MACHINE_RESET_OVERRIDE(kaneko16_gtmr_state,gtmr)
|
||||
|
||||
@ -2055,7 +2013,7 @@ void kaneko16_gtmr_state::gtmr(machine_config &config)
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
|
||||
m_screen->set_size(320, 240);
|
||||
m_screen->set_visarea(0, 320-1, 0, 240-1);
|
||||
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update_kaneko16));
|
||||
m_screen->set_screen_update(FUNC(kaneko16_gtmr_state::screen_update));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x8bit_2x4bit);
|
||||
@ -2079,8 +2037,6 @@ void kaneko16_gtmr_state::gtmr(machine_config &config)
|
||||
KANEKO_HIT(config, m_kaneko_hit);
|
||||
m_kaneko_hit->set_type(1);
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(kaneko16_gtmr_state,kaneko16)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
@ -2153,7 +2109,7 @@ void kaneko16_state::mgcrystl(machine_config &config)
|
||||
/* basic machine hardware */
|
||||
M68000(config, m_maincpu, XTAL(12'000'000)); /* verified on pcb, TMP68HC000N-12 @U31 and X2 is 12MHz */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &kaneko16_state::mgcrystl_map);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::kaneko16_interrupt), "screen", 0, 1);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(kaneko16_state::interrupt), "screen", 0, 1);
|
||||
|
||||
MCFG_MACHINE_RESET_OVERRIDE(kaneko16_state,mgcrystl)
|
||||
|
||||
@ -2168,7 +2124,7 @@ void kaneko16_state::mgcrystl(machine_config &config)
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
|
||||
m_screen->set_size(256, 256);
|
||||
m_screen->set_visarea(0, 256-1, 0+16, 256-16-1);
|
||||
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update_kaneko16));
|
||||
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_1x4bit_2x4bit);
|
||||
@ -2188,8 +2144,6 @@ void kaneko16_state::mgcrystl(machine_config &config)
|
||||
m_kaneko_spr->set_priorities(2 /* below all */ ,3 /* above tile[0], below the other */ ,5 /* above all */ ,7 /* above all */);
|
||||
m_kaneko_spr->set_gfxdecode_tag("gfxdecode");
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(kaneko16_state,kaneko16)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
@ -2199,7 +2153,7 @@ void kaneko16_state::mgcrystl(machine_config &config)
|
||||
YM2149(config, m_ym2149[1], XTAL(12'000'000)/6); /* verified on pcb */
|
||||
m_ym2149[1]->add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
m_ym2149[1]->port_a_read_callback().set(FUNC(kaneko16_state::eeprom_r)); /* inputs A: 0,EEPROM bit read */
|
||||
m_ym2149[1]->port_b_write_callback().set(FUNC(kaneko16_state::eeprom_w)); /* outputs B: 0,EEPROM reset */
|
||||
m_ym2149[1]->port_b_write_callback().set(FUNC(kaneko16_state::eeprom_cs_w)); /* outputs B: 0,EEPROM reset */
|
||||
|
||||
OKIM6295(config, m_oki[0], XTAL(12'000'000)/6, okim6295_device::PIN7_HIGH); /* verified on pcb */
|
||||
m_oki[0]->add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
@ -2242,7 +2196,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(kaneko16_shogwarr_state::shogwarr_interrupt)
|
||||
}
|
||||
|
||||
/*
|
||||
static const uint16_t shogwarr_default_eeprom[64] = {
|
||||
static const u16 shogwarr_default_eeprom[64] = {
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x4B41, 0x4E45, 0x4B4F, 0x2F41, 0x544F, 0x5020, 0x3139, 0x3932,
|
||||
0x4655, 0x4A49, 0xFFFF, 0x4D41, 0x2042, 0x5553, 0x5445, 0x5220,
|
||||
@ -2255,7 +2209,7 @@ static const uint16_t shogwarr_default_eeprom[64] = {
|
||||
*/
|
||||
// the above eeprom looks corrupt, some of the text is wrong, the game never writes this text tho.. maybe it should be as below
|
||||
// leaving both here incase they relate to which tables get 'locked out' by the MCU somehow
|
||||
static const uint16_t shogwarr_default_eeprom[64] = {
|
||||
static const u16 shogwarr_default_eeprom[64] = {
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x4B41, 0x4E45, 0x4B4F, 0x2F41, 0x544F, 0x5020, 0x3139, 0x3932,
|
||||
0x4655, 0x4A49, 0x5941, 0x4D41, 0x2042, 0x5553, 0x5445, 0x5220,
|
||||
@ -2285,7 +2239,7 @@ void kaneko16_shogwarr_state::shogwarr(machine_config &config)
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
m_screen->set_size(320, 240);
|
||||
m_screen->set_visarea(40, 296-1, 16, 240-1);
|
||||
m_screen->set_screen_update(FUNC(kaneko16_state::screen_update_kaneko16));
|
||||
m_screen->set_screen_update(FUNC(kaneko16_shogwarr_state::screen_update));
|
||||
m_screen->set_palette(m_palette);
|
||||
m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
|
||||
|
||||
@ -2297,8 +2251,6 @@ void kaneko16_shogwarr_state::shogwarr(machine_config &config)
|
||||
m_view2[0]->set_offset(0x33, -0x8, 320, 240);
|
||||
m_view2[0]->set_gfxdecode_tag("gfxdecode");
|
||||
|
||||
MCFG_VIDEO_START_OVERRIDE(kaneko16_shogwarr_state, kaneko16)
|
||||
|
||||
KANEKO_VU002_SPRITE(config, m_kaneko_spr);
|
||||
m_kaneko_spr->set_priorities(1 /* below all */ ,3 /* above tile[0], below the others */ ,5 /* above all */ ,7 /* above all */);
|
||||
m_kaneko_spr->set_offsets(0xa00, -0x40);
|
||||
@ -2323,7 +2275,7 @@ void kaneko16_shogwarr_state::shogwarr(machine_config &config)
|
||||
}
|
||||
|
||||
|
||||
static const uint16_t brapboys_default_eeprom[64] = {
|
||||
static const u16 brapboys_default_eeprom[64] = {
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0000, 0x0005, 0x0006, 0x2030, 0x0003, 0x6818, 0x0101, 0x0101,
|
||||
0x0101, 0x0001, 0x0004, 0x0008, 0x4B41, 0x4E45, 0x4B4F, 0x2020,
|
||||
@ -2362,7 +2314,7 @@ void kaneko16_shogwarr_state::brapboys(machine_config &config)
|
||||
have the even and odd pixels swapped. So we use this function to untangle
|
||||
them and have one single gfxlayout for both tiles and sprites.
|
||||
*/
|
||||
void kaneko16_state::kaneko16_unscramble_tiles(const char *region)
|
||||
void kaneko16_state::unscramble_tiles(const char *region)
|
||||
{
|
||||
memory_region *tile_region = memregion(region);
|
||||
if (tile_region == nullptr)
|
||||
@ -2370,7 +2322,7 @@ void kaneko16_state::kaneko16_unscramble_tiles(const char *region)
|
||||
return;
|
||||
}
|
||||
|
||||
uint8_t *ram = tile_region->base();
|
||||
u8 *ram = tile_region->base();
|
||||
int size = tile_region->bytes();
|
||||
|
||||
for (int i = 0; i < size; i ++)
|
||||
@ -2379,10 +2331,10 @@ void kaneko16_state::kaneko16_unscramble_tiles(const char *region)
|
||||
}
|
||||
}
|
||||
|
||||
void kaneko16_state::kaneko16_common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize)
|
||||
void kaneko16_state::common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize)
|
||||
{
|
||||
assert((m_okibank[bankno].found()) && (m_okiregion[bankno].found()));
|
||||
uint8_t *sample = m_okiregion[bankno]->base();
|
||||
u8 *sample = m_okiregion[bankno]->base();
|
||||
size_t length = m_okiregion[bankno]->bytes();
|
||||
|
||||
if (fixedsize > 0)
|
||||
@ -2401,10 +2353,10 @@ void kaneko16_state::kaneko16_common_oki_bank_install(int bankno, size_t fixedsi
|
||||
}
|
||||
}
|
||||
|
||||
void kaneko16_gtmr_state::kaneko16_common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize)
|
||||
void kaneko16_gtmr_state::common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize)
|
||||
{
|
||||
assert((m_okibank[bankno].found()) && (m_okiregion[bankno].found()));
|
||||
uint8_t *sample = m_okiregion[bankno]->base();
|
||||
u8 *sample = m_okiregion[bankno]->base();
|
||||
size_t length = m_okiregion[bankno]->bytes();
|
||||
|
||||
/* bank 0 maps to itself, so we just leave it alone */
|
||||
@ -2426,13 +2378,13 @@ void kaneko16_gtmr_state::kaneko16_common_oki_bank_install(int bankno, size_t fi
|
||||
|
||||
void kaneko16_state::init_kaneko16()
|
||||
{
|
||||
kaneko16_unscramble_tiles("gfx2");
|
||||
kaneko16_unscramble_tiles("gfx3");
|
||||
unscramble_tiles("gfx2");
|
||||
unscramble_tiles("gfx3");
|
||||
}
|
||||
|
||||
void kaneko16_state::init_bakubrkr()
|
||||
{
|
||||
kaneko16_common_oki_bank_install(0, 0x20000, 0x20000);
|
||||
common_oki_bank_install(0, 0x20000, 0x20000);
|
||||
init_kaneko16();
|
||||
}
|
||||
|
||||
@ -2482,7 +2434,7 @@ explanation ingame.
|
||||
*/
|
||||
// TODO: this is certainly a protection issue, the level number variable can go up to 0x2f, which is way bigger than 0xd.
|
||||
// Sprite DMA decryption? @see berlwall_spriteram_r
|
||||
void kaneko16_berlwall_state::patch_protection(uint32_t bra_offset,uint16_t bra_value,uint16_t checksum)
|
||||
void kaneko16_berlwall_state::patch_protection(u32 bra_offset,u16 bra_value,u16 checksum)
|
||||
{
|
||||
m_mainregion[bra_offset/2] = bra_value;
|
||||
m_mainregion[0x3fffe/2] = checksum;
|
||||
@ -2490,7 +2442,7 @@ void kaneko16_berlwall_state::patch_protection(uint32_t bra_offset,uint16_t bra_
|
||||
|
||||
void kaneko16_berlwall_state::init_berlwall_common()
|
||||
{
|
||||
kaneko16_unscramble_tiles("gfx2");
|
||||
unscramble_tiles("gfx2");
|
||||
}
|
||||
|
||||
void kaneko16_berlwall_state::init_berlwall()
|
||||
@ -2513,8 +2465,8 @@ void kaneko16_berlwall_state::init_berlwallk()
|
||||
|
||||
void kaneko16_gtmr_state::init_gtmr()
|
||||
{
|
||||
kaneko16_common_oki_bank_install(0, 0x30000, 0x10000);
|
||||
kaneko16_common_oki_bank_install(1, 0x00000, 0x40000);
|
||||
common_oki_bank_install(0, 0x30000, 0x10000);
|
||||
common_oki_bank_install(1, 0x00000, 0x40000);
|
||||
init_kaneko16();
|
||||
}
|
||||
|
||||
@ -4381,8 +4333,8 @@ ROM_END
|
||||
void kaneko16_shogwarr_state::init_shogwarr()
|
||||
{
|
||||
// default sample banks
|
||||
kaneko16_common_oki_bank_install(0, 0x30000, 0x10000);
|
||||
kaneko16_common_oki_bank_install(1, 0x00000, 0x40000);
|
||||
common_oki_bank_install(0, 0x30000, 0x10000);
|
||||
common_oki_bank_install(1, 0x00000, 0x40000);
|
||||
init_kaneko16();
|
||||
}
|
||||
|
||||
@ -4390,8 +4342,8 @@ void kaneko16_shogwarr_state::init_shogwarr()
|
||||
void kaneko16_shogwarr_state::init_brapboys()
|
||||
{
|
||||
// default sample banks
|
||||
kaneko16_common_oki_bank_install(0, 0x30000, 0x10000);
|
||||
kaneko16_common_oki_bank_install(1, 0x20000, 0x20000);
|
||||
common_oki_bank_install(0, 0x30000, 0x10000);
|
||||
common_oki_bank_install(1, 0x20000, 0x20000);
|
||||
init_kaneko16();
|
||||
}
|
||||
|
||||
|
@ -34,9 +34,7 @@ public:
|
||||
kaneko16_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_ym2149(*this, "ym2149_%u", 1),
|
||||
m_ymsnd(*this, "ymsnd"),
|
||||
m_oki(*this, "oki%u", 1),
|
||||
m_view2(*this, "view2_%u", 0),
|
||||
m_kaneko_hit(*this, "kan_hit"),
|
||||
@ -59,14 +57,24 @@ public:
|
||||
m_p2_port(*this, "P2"),
|
||||
m_fake_port(*this, "FAKE"),
|
||||
m_dsw_port(*this, "DSW1"),
|
||||
m_wheel_port(*this, "WHEEL%u", 0U)
|
||||
m_eepromout_port(*this, "EEPROMOUT"),
|
||||
m_wheel_port(*this, "WHEEL%u", 0U),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_ymsnd(*this, "ymsnd")
|
||||
{
|
||||
}
|
||||
|
||||
void init_kaneko16();
|
||||
void init_bakubrkr();
|
||||
|
||||
void bakubrkr(machine_config &config);
|
||||
void wingforc(machine_config &config);
|
||||
void blazeon(machine_config &config);
|
||||
void mgcrystl(machine_config &config);
|
||||
|
||||
protected:
|
||||
required_device<m68000_device> m_maincpu;
|
||||
optional_device<z80_device> m_audiocpu;
|
||||
optional_device_array<ym2149_device, 2> m_ym2149;
|
||||
optional_device<ym2151_device> m_ymsnd;
|
||||
optional_device_array<okim6295_device, 2> m_oki;
|
||||
optional_device_array<kaneko_view2_tilemap_device, 2> m_view2;
|
||||
optional_device<kaneko_hit_device> m_kaneko_hit;
|
||||
@ -81,10 +89,10 @@ public:
|
||||
optional_device<generic_latch_8_device> m_soundlatch;
|
||||
optional_device<watchdog_timer_device> m_watchdog;
|
||||
|
||||
required_region_ptr<uint16_t> m_mainregion;
|
||||
optional_shared_ptr<uint16_t> m_spriteram;
|
||||
optional_shared_ptr<uint16_t> m_mainram;
|
||||
optional_shared_ptr<uint16_t> m_mcuram;
|
||||
required_region_ptr<u16> m_mainregion;
|
||||
optional_shared_ptr<u16> m_spriteram;
|
||||
optional_shared_ptr<u16> m_mainram;
|
||||
optional_shared_ptr<u16> m_mcuram;
|
||||
|
||||
optional_memory_region_array<2> m_okiregion;
|
||||
optional_memory_bank_array<2> m_okibank;
|
||||
@ -92,48 +100,50 @@ public:
|
||||
optional_ioport m_p2_port;
|
||||
optional_ioport m_fake_port;
|
||||
optional_ioport m_dsw_port;
|
||||
optional_ioport m_eepromout_port;
|
||||
optional_ioport_array<3> m_wheel_port;
|
||||
|
||||
uint16_t m_disp_enable;
|
||||
u16 m_disp_enable;
|
||||
|
||||
int m_VIEW2_2_pri;
|
||||
|
||||
void kaneko16_common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize);
|
||||
DECLARE_WRITE16_MEMBER(kaneko16_coin_lockout_w);
|
||||
DECLARE_WRITE16_MEMBER(kaneko16_eeprom_w);
|
||||
virtual void common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize);
|
||||
void coin_lockout_w(u8 data);
|
||||
void bloodwar_coin_lockout_w(u8 data);
|
||||
|
||||
DECLARE_WRITE16_MEMBER(kaneko16_display_enable);
|
||||
|
||||
template<int Chip> DECLARE_READ16_MEMBER(kaneko16_ay_YM2149_r);
|
||||
template<int Chip> DECLARE_WRITE16_MEMBER(kaneko16_ay_YM2149_w);
|
||||
template<int Mask> DECLARE_WRITE8_MEMBER(oki_bank0_w);
|
||||
template<int Mask> DECLARE_WRITE8_MEMBER(oki_bank1_w);
|
||||
|
||||
DECLARE_READ8_MEMBER(eeprom_r);
|
||||
DECLARE_WRITE8_MEMBER(eeprom_w);
|
||||
|
||||
void init_kaneko16();
|
||||
void init_bakubrkr();
|
||||
void display_enable_w(offs_t offset, u16 data, u16 mem_mask); // (u16 data, u16 mem_mask);
|
||||
|
||||
template<unsigned Chip> DECLARE_READ16_MEMBER(ym2149_r);
|
||||
template<unsigned Chip> DECLARE_WRITE16_MEMBER(ym2149_w);
|
||||
template<unsigned Mask> void oki_bank0_w(u8 data);
|
||||
template<unsigned Mask> void oki_bank1_w(u8 data);
|
||||
|
||||
DECLARE_MACHINE_RESET(gtmr);
|
||||
DECLARE_VIDEO_START(kaneko16);
|
||||
DECLARE_MACHINE_RESET(mgcrystl);
|
||||
uint32_t screen_update_kaneko16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
virtual void video_start() override;
|
||||
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
template<class _BitmapClass>
|
||||
uint32_t screen_update_common(screen_device &screen, _BitmapClass &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update_common(screen_device &screen, _BitmapClass &bitmap, const rectangle &cliprect);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(kaneko16_interrupt);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(interrupt);
|
||||
|
||||
template<class _BitmapClass>
|
||||
void kaneko16_fill_bitmap(_BitmapClass &bitmap, const rectangle &cliprect);
|
||||
void fill_bitmap(_BitmapClass &bitmap, const rectangle &cliprect);
|
||||
|
||||
void unscramble_tiles(const char *region);
|
||||
|
||||
void gtmr_oki1_map(address_map &map);
|
||||
void gtmr_oki2_map(address_map &map);
|
||||
|
||||
private:
|
||||
optional_device<z80_device> m_audiocpu;
|
||||
optional_device<ym2151_device> m_ymsnd;
|
||||
|
||||
u8 eeprom_r();
|
||||
void eeprom_w(u8 data);
|
||||
void eeprom_cs_w(u8 data);
|
||||
|
||||
void kaneko16_unscramble_tiles(const char *region);
|
||||
void bakubrkr(machine_config &config);
|
||||
void wingforc(machine_config &config);
|
||||
void blazeon(machine_config &config);
|
||||
void mgcrystl(machine_config &config);
|
||||
void bakubrkr_map(address_map &map);
|
||||
void bakubrkr_oki1_map(address_map &map);
|
||||
void blazeon_map(address_map &map);
|
||||
@ -141,8 +151,6 @@ public:
|
||||
void blazeon_soundport(address_map &map);
|
||||
void mgcrystl_map(address_map &map);
|
||||
void wingforc_soundport(address_map &map);
|
||||
void gtmr_oki1_map(address_map &map);
|
||||
void gtmr_oki2_map(address_map &map);
|
||||
};
|
||||
|
||||
class kaneko16_gtmr_state : public kaneko16_state
|
||||
@ -153,68 +161,71 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
DECLARE_WRITE16_MEMBER(bloodwar_coin_lockout_w);
|
||||
DECLARE_READ16_MEMBER(gtmr_wheel_r);
|
||||
DECLARE_READ16_MEMBER(gtmr2_wheel_r);
|
||||
DECLARE_READ16_MEMBER(gtmr2_IN1_r);
|
||||
void init_gtmr();
|
||||
void kaneko16_common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize);
|
||||
|
||||
void bonkadv(machine_config &config);
|
||||
void gtmr(machine_config &config);
|
||||
void gtmr2(machine_config &config);
|
||||
void gtmre(machine_config &config);
|
||||
void bloodwar(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize) override;
|
||||
|
||||
private:
|
||||
u16 gtmr_wheel_r();
|
||||
u16 gtmr2_wheel_r();
|
||||
u16 gtmr2_IN1_r();
|
||||
|
||||
void bloodwar_map(address_map &map);
|
||||
void bonkadv_map(address_map &map);
|
||||
void gtmr2_map(address_map &map);
|
||||
void gtmr_map(address_map &map);
|
||||
};
|
||||
|
||||
|
||||
|
||||
class kaneko16_berlwall_state : public kaneko16_state
|
||||
{
|
||||
public:
|
||||
kaneko16_berlwall_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
kaneko16_state(mconfig, type, tag),
|
||||
m_bg15_select(*this, "bg15_select"),
|
||||
m_bg15_scroll(*this, "bg15_scroll"),
|
||||
m_bg15_bright(*this, "bg15_bright"),
|
||||
m_bgpalette(*this, "bgpalette")
|
||||
{
|
||||
}
|
||||
|
||||
optional_shared_ptr<uint16_t> m_bg15_select;
|
||||
optional_shared_ptr<uint16_t> m_bg15_scroll;
|
||||
optional_shared_ptr<uint16_t> m_bg15_bright;
|
||||
required_device<palette_device> m_bgpalette;
|
||||
|
||||
bitmap_ind16 m_bg15_bitmap[32];
|
||||
|
||||
DECLARE_READ16_MEMBER(kaneko16_bg15_select_r);
|
||||
DECLARE_WRITE16_MEMBER(kaneko16_bg15_select_w);
|
||||
DECLARE_READ16_MEMBER(kaneko16_bg15_bright_r);
|
||||
DECLARE_WRITE16_MEMBER(kaneko16_bg15_bright_w);
|
||||
|
||||
DECLARE_READ16_MEMBER(berlwall_oki_r);
|
||||
DECLARE_WRITE16_MEMBER(berlwall_oki_w);
|
||||
|
||||
DECLARE_READ16_MEMBER(berlwall_spriteram_r);
|
||||
DECLARE_WRITE16_MEMBER(berlwall_spriteram_w);
|
||||
DECLARE_READ16_MEMBER(berlwall_spriteregs_r);
|
||||
DECLARE_WRITE16_MEMBER(berlwall_spriteregs_w);
|
||||
|
||||
void init_berlwall();
|
||||
void init_berlwallk();
|
||||
void init_berlwallt();
|
||||
void init_berlwall_common();
|
||||
DECLARE_VIDEO_START(berlwall);
|
||||
uint32_t screen_update_berlwall(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
void kaneko16_render_15bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void patch_protection(uint32_t bra_offset,uint16_t bra_value,uint16_t checksum);
|
||||
void berlwall(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
optional_shared_ptr<u16> m_bg15_scroll;
|
||||
required_device<palette_device> m_bgpalette;
|
||||
|
||||
bitmap_ind16 m_bg15_bitmap[32];
|
||||
|
||||
u8 bg15_select_r();
|
||||
void bg15_select_w(u8 data);
|
||||
u8 bg15_bright_r();
|
||||
void bg15_bright_w(u8 data);
|
||||
|
||||
DECLARE_WRITE16_MEMBER(berlwall_oki_w);
|
||||
|
||||
u16 berlwall_spriteram_r(offs_t offset);
|
||||
void berlwall_spriteram_w(offs_t offset, u16 data, u16 mem_mask);
|
||||
DECLARE_READ16_MEMBER(berlwall_spriteregs_r);
|
||||
DECLARE_WRITE16_MEMBER(berlwall_spriteregs_w);
|
||||
|
||||
u8 m_bg15_select;
|
||||
u8 m_bg15_bright;
|
||||
|
||||
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
void render_15bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void patch_protection(u32 bra_offset,u16 bra_value,u16 checksum);
|
||||
void berlwall_map(address_map &map);
|
||||
};
|
||||
|
||||
@ -226,21 +237,21 @@ public:
|
||||
m_calc3_prot(*this, "calc3_prot")
|
||||
{
|
||||
}
|
||||
|
||||
DECLARE_WRITE16_MEMBER(shogwarr_oki_bank_w);
|
||||
|
||||
void init_shogwarr();
|
||||
void init_brapboys();
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(shogwarr_interrupt);
|
||||
|
||||
void shogwarr(machine_config &config);
|
||||
void brapboys(machine_config &config);
|
||||
|
||||
private:
|
||||
optional_device<kaneko_calc3_device> m_calc3_prot;
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(shogwarr_interrupt);
|
||||
|
||||
void shogwarr_oki_bank_w(u8 data);
|
||||
|
||||
void brapboys_oki2_map(address_map &map);
|
||||
void shogwarr_map(address_map &map);
|
||||
private:
|
||||
|
||||
optional_device<kaneko_calc3_device> m_calc3_prot;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -13,24 +13,23 @@
|
||||
#include "screen.h"
|
||||
|
||||
|
||||
WRITE16_MEMBER(kaneko16_state::kaneko16_display_enable)
|
||||
void kaneko16_state::display_enable_w(offs_t offset, u16 data, u16 mem_mask)
|
||||
{
|
||||
COMBINE_DATA(&m_disp_enable);
|
||||
}
|
||||
|
||||
VIDEO_START_MEMBER(kaneko16_state,kaneko16)
|
||||
void kaneko16_state::video_start()
|
||||
{
|
||||
m_disp_enable = 1; // default enabled for games not using it
|
||||
save_item(NAME(m_disp_enable));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Fill the bitmap with a single colour. This is wrong, but will work most of
|
||||
the times. To do it right, each pixel should be drawn with pen 0
|
||||
of the bottomost tile that covers it (which is pretty tricky to do) */
|
||||
template<class _BitmapClass>
|
||||
void kaneko16_state::kaneko16_fill_bitmap(_BitmapClass &bitmap, const rectangle &cliprect)
|
||||
void kaneko16_state::fill_bitmap(_BitmapClass &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int pen = 0;
|
||||
|
||||
@ -56,10 +55,8 @@ void kaneko16_state::kaneko16_fill_bitmap(_BitmapClass &bitmap, const rectangle
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
template<class _BitmapClass>
|
||||
uint32_t kaneko16_state::screen_update_common(screen_device &screen, _BitmapClass &bitmap, const rectangle &cliprect)
|
||||
u32 kaneko16_state::screen_update_common(screen_device &screen, _BitmapClass &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
screen.priority().fill(0, cliprect);
|
||||
|
||||
@ -78,12 +75,9 @@ uint32_t kaneko16_state::screen_update_common(screen_device &screen, _BitmapClas
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
uint32_t kaneko16_state::screen_update_kaneko16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
u32 kaneko16_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
kaneko16_fill_bitmap(bitmap,cliprect);
|
||||
fill_bitmap(bitmap,cliprect);
|
||||
|
||||
// if the display is disabled, do nothing?
|
||||
if (!m_disp_enable) return 0;
|
||||
@ -94,15 +88,12 @@ uint32_t kaneko16_state::screen_update_kaneko16(screen_device &screen, bitmap_in
|
||||
}
|
||||
|
||||
|
||||
/* berlwall and have an additional hi-color layers */
|
||||
|
||||
|
||||
|
||||
|
||||
/* berlwall have an additional hi-color layers */
|
||||
|
||||
VIDEO_START_MEMBER(kaneko16_berlwall_state,berlwall)
|
||||
void kaneko16_berlwall_state::video_start()
|
||||
{
|
||||
uint8_t *RAM = memregion("gfx3")->base();
|
||||
m_bg15_bright = 0xff;
|
||||
u8 *RAM = memregion("gfx3")->base();
|
||||
|
||||
/* Render the hi-color static backgrounds held in the ROMs */
|
||||
|
||||
@ -116,9 +107,9 @@ VIDEO_START_MEMBER(kaneko16_berlwall_state,berlwall)
|
||||
|
||||
for (int screen = 0; screen < 32; screen++)
|
||||
{
|
||||
for (int x = 0 ; x < 256 ; x++)
|
||||
for (int x = 0; x < 256; x++)
|
||||
{
|
||||
for (int y = 0 ; y < 256 ; y++)
|
||||
for (int y = 0; y < 256; y++)
|
||||
{
|
||||
int addr = screen * (256 * 256) + x + y * 256;
|
||||
int data = RAM[addr * 2 + 0] * 256 + RAM[addr * 2 + 1];
|
||||
@ -146,47 +137,47 @@ VIDEO_START_MEMBER(kaneko16_berlwall_state,berlwall)
|
||||
}
|
||||
}
|
||||
|
||||
VIDEO_START_CALL_MEMBER(kaneko16);
|
||||
kaneko16_state::video_start();
|
||||
save_item(NAME(m_bg15_select));
|
||||
save_item(NAME(m_bg15_bright));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Select the high color background image (out of 32 in the ROMs) */
|
||||
READ16_MEMBER(kaneko16_berlwall_state::kaneko16_bg15_select_r)
|
||||
u8 kaneko16_berlwall_state::bg15_select_r()
|
||||
{
|
||||
return m_bg15_select[0];
|
||||
return m_bg15_select;
|
||||
}
|
||||
WRITE16_MEMBER(kaneko16_berlwall_state::kaneko16_bg15_select_w)
|
||||
void kaneko16_berlwall_state::bg15_select_w(u8 data)
|
||||
{
|
||||
COMBINE_DATA(&m_bg15_select[0]);
|
||||
m_bg15_select = data;
|
||||
}
|
||||
|
||||
/* Brightness (00-ff) */
|
||||
READ16_MEMBER(kaneko16_berlwall_state::kaneko16_bg15_bright_r)
|
||||
u8 kaneko16_berlwall_state::bg15_bright_r()
|
||||
{
|
||||
return m_bg15_bright[0];
|
||||
return m_bg15_bright;
|
||||
}
|
||||
WRITE16_MEMBER(kaneko16_berlwall_state::kaneko16_bg15_bright_w)
|
||||
void kaneko16_berlwall_state::bg15_bright_w(u8 data)
|
||||
{
|
||||
COMBINE_DATA(&m_bg15_bright[0]);
|
||||
double brt1 = data & 0xff;
|
||||
brt1 = brt1 / 255.0;
|
||||
if (m_bg15_bright != data)
|
||||
{
|
||||
m_bg15_bright = data;
|
||||
double brt1 = m_bg15_bright & 0xff;
|
||||
brt1 = brt1 / 255.0;
|
||||
|
||||
for (int i = 0; i < 0x8000; i++)
|
||||
m_bgpalette->set_pen_contrast(i, brt1);
|
||||
for (int i = 0; i < 0x8000; i++)
|
||||
m_bgpalette->set_pen_contrast(i, brt1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void kaneko16_berlwall_state::kaneko16_render_15bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
void kaneko16_berlwall_state::render_15bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
if (!m_bg15_bitmap[0].valid())
|
||||
return;
|
||||
|
||||
int select = m_bg15_select[ 0 ];
|
||||
int select = m_bg15_select;
|
||||
int scroll = m_bg15_scroll[ 0 ];
|
||||
|
||||
int screen = select & 0x1f;
|
||||
@ -207,8 +198,8 @@ void kaneko16_berlwall_state::kaneko16_render_15bpp_bitmap(bitmap_rgb32 &bitmap,
|
||||
}
|
||||
|
||||
const pen_t *pal = m_bgpalette->pens();
|
||||
uint16_t* srcbitmap;
|
||||
uint32_t* dstbitmap;
|
||||
u16* srcbitmap;
|
||||
u32* dstbitmap;
|
||||
|
||||
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
|
||||
{
|
||||
@ -219,7 +210,7 @@ void kaneko16_berlwall_state::kaneko16_render_15bpp_bitmap(bitmap_rgb32 &bitmap,
|
||||
|
||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||
{
|
||||
uint16_t pix;
|
||||
u16 pix;
|
||||
|
||||
if (!flip) pix = srcbitmap[ (x - scrollx) & 0xff ];
|
||||
else pix = srcbitmap[ 255 - ((x - scrollx) & 0xff) ];
|
||||
@ -229,10 +220,10 @@ void kaneko16_berlwall_state::kaneko16_render_15bpp_bitmap(bitmap_rgb32 &bitmap,
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t kaneko16_berlwall_state::screen_update_berlwall(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
u32 kaneko16_berlwall_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
// berlwall uses a 15bpp bitmap as a bg, not a solid fill
|
||||
kaneko16_render_15bpp_bitmap(bitmap,cliprect);
|
||||
render_15bpp_bitmap(bitmap,cliprect);
|
||||
|
||||
// if the display is disabled, do nothing?
|
||||
if (!m_disp_enable) return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user