mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
gekisha, tenkai: Use bankdev (nw)
This commit is contained in:
parent
817103a9fd
commit
6cf16fde31
@ -1212,7 +1212,7 @@ WRITE8_MEMBER(dynax_state::tenkai_palette_w)
|
||||
|
||||
void dynax_state::tenkai_update_rombank()
|
||||
{
|
||||
m_romptr = memregion("maincpu")->base() + 0x10000 + 0x8000 * m_rombank;
|
||||
m_bankdev->set_bank(m_rombank);
|
||||
// logerror("rombank = %02x\n", m_rombank);
|
||||
}
|
||||
|
||||
@ -1264,37 +1264,6 @@ READ8_MEMBER(dynax_state::tenkai_p8_r)
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
READ8_MEMBER(dynax_state::tenkai_8000_r)
|
||||
{
|
||||
if (m_rombank < 0x10)
|
||||
return m_romptr[offset];
|
||||
else if ((m_rombank == 0x10) && (offset < 0x10))
|
||||
{
|
||||
return m_rtc->read(space, offset);
|
||||
}
|
||||
else if (m_rombank == 0x12)
|
||||
return tenkai_palette_r(space, offset);
|
||||
|
||||
logerror("%04x: unmapped offset %04X read with rombank=%02X\n", space.device().safe_pc(), offset, m_rombank);
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::tenkai_8000_w)
|
||||
{
|
||||
if ((m_rombank == 0x10) && (offset < 0x10))
|
||||
{
|
||||
m_rtc->write(space, offset, data);
|
||||
return;
|
||||
}
|
||||
else if (m_rombank == 0x12)
|
||||
{
|
||||
tenkai_palette_w(space, offset, data);
|
||||
return;
|
||||
}
|
||||
|
||||
logerror("%04x: unmapped offset %04X=%02X written with rombank=%02X\n", space.device().safe_pc(), offset, data, m_rombank);
|
||||
}
|
||||
|
||||
void dynax_state::tenkai_show_6c()
|
||||
{
|
||||
// popmessage("%02x %02x", m_tenkai_6c, m_tenkai_70);
|
||||
@ -1332,7 +1301,7 @@ static ADDRESS_MAP_START( tenkai_map, AS_PROGRAM, 8, dynax_state )
|
||||
AM_RANGE( 0x0000, 0x5fff ) AM_ROM
|
||||
AM_RANGE( 0x6000, 0x6fff ) AM_RAM
|
||||
AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
|
||||
AM_RANGE( 0x8000, 0xffff ) AM_READWRITE(tenkai_8000_r, tenkai_8000_w)
|
||||
AM_RANGE( 0x8000, 0xffff ) AM_DEVICE("bankdev", address_map_bank_device, amap8)
|
||||
AM_RANGE( 0x10000, 0x10000 ) AM_DEVREAD("aysnd", ay8910_device, data_r) // AY8910
|
||||
AM_RANGE( 0x10008, 0x10008 ) AM_DEVWRITE("aysnd", ay8910_device, data_w) //
|
||||
AM_RANGE( 0x10010, 0x10010 ) AM_DEVWRITE("aysnd", ay8910_device, address_w) //
|
||||
@ -1351,6 +1320,12 @@ static ADDRESS_MAP_START( tenkai_map, AS_PROGRAM, 8, dynax_state )
|
||||
AM_RANGE( 0x100e1, 0x100e7 ) AM_WRITE(tenkai_blitter_rev2_w) // Blitter (inverted scroll values)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( tenkai_banked_map, AS_PROGRAM, 8, dynax_state )
|
||||
AM_RANGE( 0x00000, 0x3ffff ) AM_ROM AM_REGION("maincpu", 0x10000)
|
||||
AM_RANGE( 0x80000, 0x8000f ) AM_DEVREADWRITE("rtc", msm6242_device, read, write)
|
||||
AM_RANGE( 0x90000, 0x97fff ) AM_READWRITE(tenkai_palette_r, tenkai_palette_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/***************************************************************************
|
||||
Mahjong Gekisha
|
||||
***************************************************************************/
|
||||
@ -1391,88 +1366,38 @@ WRITE8_MEMBER(dynax_state::gekisha_hopper_w)
|
||||
// popmessage("%02x %02x", gekisha_val[0], gekisha_val[1]);
|
||||
}
|
||||
|
||||
void dynax_state::gekisha_set_rombank( uint8_t data )
|
||||
{
|
||||
m_rombank = data;
|
||||
m_romptr = memregion("maincpu")->base() + 0x8000 + m_rombank * 0x8000;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::gekisha_p4_w)
|
||||
{
|
||||
m_gekisha_rom_enable = !BIT(data, 3);
|
||||
gekisha_set_rombank(BIT(data, 2));
|
||||
}
|
||||
|
||||
READ8_MEMBER(dynax_state::gekisha_8000_r)
|
||||
{
|
||||
if (m_gekisha_rom_enable)
|
||||
return m_romptr[offset];
|
||||
|
||||
switch (offset + 0x8000)
|
||||
{
|
||||
case 0x8061: return ioport("COINS")->read();
|
||||
case 0x8062: return gekisha_keyboard_1_r(space, 0);
|
||||
case 0x8063: return gekisha_keyboard_0_r(space, 0);
|
||||
case 0x8064: return ioport("DSW1")->read();
|
||||
case 0x8065: return ioport("DSW3")->read();
|
||||
case 0x8066: return ioport("DSW4")->read();
|
||||
case 0x8067: return ioport("DSW2")->read();
|
||||
}
|
||||
|
||||
logerror("%04x: unmapped offset %04X read with rombank=%02X\n",space.device().safe_pc(), offset, m_rombank);
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(dynax_state::gekisha_8000_w)
|
||||
{
|
||||
if (!m_gekisha_rom_enable)
|
||||
{
|
||||
switch (offset + 0x8000)
|
||||
{
|
||||
// same offsets as mjfriday
|
||||
|
||||
case 0x8001: dynax_blit_palette01_w(space, offset - 0x01, data); return;
|
||||
|
||||
// case 0x8002: // ? 1
|
||||
|
||||
case 0x8003: dynax_blit_backpen_w(space, offset - 0x03, data); return;
|
||||
|
||||
case 0x8010: case 0x8011: case 0x8012: case 0x8013:
|
||||
case 0x8014: case 0x8015: case 0x8016: case 0x8017:
|
||||
m_mainlatch->write_bit(offset & 7, BIT(data, 0)); return;
|
||||
|
||||
case 0x8020:
|
||||
case 0x8021: gekisha_hopper_w(space, offset - 0x20, data); return;
|
||||
|
||||
case 0x8041:
|
||||
case 0x8042:
|
||||
case 0x8043:
|
||||
case 0x8044:
|
||||
case 0x8045:
|
||||
case 0x8046:
|
||||
case 0x8047: dynax_blitter_rev2_w(space, offset - 0x41, data); return;
|
||||
|
||||
case 0x8050: // CRT controller
|
||||
case 0x8051: return;
|
||||
|
||||
case 0x8070: m_ym2413->register_port_w(space, 0, data); return;
|
||||
case 0x8071: m_ym2413->data_port_w(space, 0, data); return;
|
||||
|
||||
case 0x8060: m_keyb = data; return;
|
||||
|
||||
// case 0x8080: // ? 0,1,6 (bit 0 = screen disable?)
|
||||
// popmessage("80 = %02x", data);
|
||||
// break;
|
||||
}
|
||||
}
|
||||
logerror("%04x: unmapped offset %04X=%02X written with rombank=%02X\n", space.device().safe_pc(), offset, data, m_rombank);
|
||||
m_bankdev->set_bank((data >> 2) & 3);
|
||||
}
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( gekisha_map, AS_PROGRAM, 8, dynax_state )
|
||||
AM_RANGE( 0x0000, 0x6fff ) AM_ROM
|
||||
AM_RANGE( 0x7000, 0x7fff ) AM_RAM AM_SHARE("nvram")
|
||||
AM_RANGE( 0x8000, 0xffff ) AM_READWRITE(gekisha_8000_r, gekisha_8000_w)
|
||||
AM_RANGE( 0x8000, 0xffff ) AM_DEVICE("bankdev", address_map_bank_device, amap8)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( gekisha_banked_map, AS_PROGRAM, 8, dynax_state )
|
||||
AM_RANGE( 0x00000, 0x0ffff ) AM_ROM AM_REGION("maincpu", 0x8000)
|
||||
AM_RANGE( 0x10001, 0x10001 ) AM_WRITE(dynax_blit_palette01_w) // Layers Palettes (Low Bits)
|
||||
// AM_RANGE( 0x10002, 0x10002 ) // ? 1
|
||||
AM_RANGE( 0x10003, 0x10003 ) AM_WRITE(dynax_blit_backpen_w) // Background Color
|
||||
AM_RANGE( 0x10010, 0x10017 ) AM_DEVWRITE("mainlatch", ls259_device, write_d0)
|
||||
AM_RANGE( 0x10020, 0x10021 ) AM_WRITE(gekisha_hopper_w)
|
||||
AM_RANGE( 0x10041, 0x10047 ) AM_WRITE(dynax_blitter_rev2_w) // Blitter
|
||||
// AM_RANGE( 0x10050, 0x10050 ) AM_WRITENOP // CRT Controller
|
||||
// AM_RANGE( 0x10051, 0x10051 ) AM_WRITENOP // CRT Controller
|
||||
AM_RANGE( 0x10060, 0x10060 ) AM_WRITE(hanamai_keyboard_w) // keyboard row select
|
||||
AM_RANGE( 0x10061, 0x10061 ) AM_READ_PORT("COINS") // Coins
|
||||
AM_RANGE( 0x10062, 0x10062 ) AM_READ(gekisha_keyboard_1_r) // P2
|
||||
AM_RANGE( 0x10063, 0x10063 ) AM_READ(gekisha_keyboard_0_r) // P1
|
||||
AM_RANGE( 0x10064, 0x10064 ) AM_READ_PORT("DSW1") // DSW
|
||||
AM_RANGE( 0x10065, 0x10065 ) AM_READ_PORT("DSW3") // DSW
|
||||
AM_RANGE( 0x10066, 0x10066 ) AM_READ_PORT("DSW4") // DSW
|
||||
AM_RANGE( 0x10067, 0x10067 ) AM_READ_PORT("DSW2") // DSW
|
||||
AM_RANGE( 0x10070, 0x10071 ) AM_DEVWRITE("ym2413", ym2413_device, write) //
|
||||
// AM_RANGE( 0x10080, 0x10080 ) // ? 0,1,6 (bit 0 = screen disable?)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -4244,7 +4169,6 @@ MACHINE_START_MEMBER(dynax_state,dynax)
|
||||
save_item(NAME(m_tenkai_70));
|
||||
save_item(NAME(m_gekisha_val));
|
||||
save_item(NAME(m_palette_ram));
|
||||
save_item(NAME(m_gekisha_rom_enable));
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(dynax_state,dynax)
|
||||
@ -4280,7 +4204,6 @@ MACHINE_RESET_MEMBER(dynax_state,dynax)
|
||||
m_tenkai_70 = 0;
|
||||
m_gekisha_val[0] = 0;
|
||||
m_gekisha_val[1] = 0;
|
||||
m_gekisha_rom_enable = 0;
|
||||
|
||||
memset(m_palette_ram, 0, ARRAY_LENGTH(m_palette_ram));
|
||||
}
|
||||
@ -4939,13 +4862,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(dynax_state::tenkai_interrupt)
|
||||
m_maincpu->set_input_line(INPUT_LINE_IRQ1, HOLD_LINE);
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(dynax_state,tenkai)
|
||||
{
|
||||
MACHINE_START_CALL_MEMBER(dynax);
|
||||
|
||||
machine().save().register_postload(save_prepost_delegate(FUNC(dynax_state::tenkai_update_rombank), this));
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(dynax_state::tenkai_rtc_irq)
|
||||
{
|
||||
m_maincpu->set_input_line(INPUT_LINE_IRQ2, HOLD_LINE);
|
||||
@ -4967,7 +4883,13 @@ static MACHINE_CONFIG_START( tenkai )
|
||||
MCFG_TLCS90_PORT_P8_WRITE_CB(WRITE8(dynax_state, tenkai_p8_w))
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", dynax_state, tenkai_interrupt, "screen", 0, 1)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(dynax_state,tenkai)
|
||||
MCFG_DEVICE_ADD("bankdev", ADDRESS_MAP_BANK, 0)
|
||||
MCFG_DEVICE_PROGRAM_MAP(tenkai_banked_map)
|
||||
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
|
||||
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(20)
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x8000)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(dynax_state,dynax)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(dynax_state,dynax)
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
@ -5024,25 +4946,6 @@ MACHINE_CONFIG_END
|
||||
Mahjong Gekisha
|
||||
***************************************************************************/
|
||||
|
||||
void dynax_state::gekisha_bank_postload()
|
||||
{
|
||||
gekisha_set_rombank(m_rombank);
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(dynax_state,gekisha)
|
||||
{
|
||||
MACHINE_START_CALL_MEMBER(dynax);
|
||||
|
||||
machine().save().register_postload(save_prepost_delegate(FUNC(dynax_state::gekisha_bank_postload), this));
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(dynax_state,gekisha)
|
||||
{
|
||||
MACHINE_RESET_CALL_MEMBER(dynax);
|
||||
|
||||
gekisha_set_rombank(0);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( gekisha )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -5051,8 +4954,14 @@ static MACHINE_CONFIG_START( gekisha )
|
||||
MCFG_TLCS90_PORT_P4_WRITE_CB(WRITE8(dynax_state, gekisha_p4_w))
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", dynax_state, irq0_line_hold)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(dynax_state,gekisha)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(dynax_state,gekisha)
|
||||
MCFG_DEVICE_ADD("bankdev", ADDRESS_MAP_BANK, 0)
|
||||
MCFG_DEVICE_PROGRAM_MAP(gekisha_banked_map)
|
||||
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
|
||||
MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(17)
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x8000)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(dynax_state,dynax)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(dynax_state,dynax)
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
***************************************************************************/
|
||||
|
||||
#include "machine/74259.h"
|
||||
#include "machine/bankdev.h"
|
||||
#include "machine/msm6242.h"
|
||||
#include "sound/ym2413.h"
|
||||
#include "sound/msm5205.h"
|
||||
@ -27,6 +28,7 @@ public:
|
||||
, m_palette(*this, "palette")
|
||||
, m_rtc(*this, "rtc")
|
||||
, m_mainlatch(*this, "mainlatch")
|
||||
, m_bankdev(*this, "bankdev")
|
||||
, m_gfx_region1(*this, "gfx1")
|
||||
, m_gfx_region2(*this, "gfx2")
|
||||
, m_gfx_region3(*this, "gfx3")
|
||||
@ -49,6 +51,7 @@ public:
|
||||
required_device<palette_device> m_palette;
|
||||
optional_device<msm6242_device> m_rtc;
|
||||
optional_device<ls259_device> m_mainlatch;
|
||||
optional_device<address_map_bank_device> m_bankdev;
|
||||
optional_region_ptr<uint8_t> m_gfx_region1;
|
||||
optional_region_ptr<uint8_t> m_gfx_region2;
|
||||
optional_region_ptr<uint8_t> m_gfx_region3;
|
||||
@ -137,8 +140,6 @@ public:
|
||||
int m_tenkai_6c;
|
||||
int m_tenkai_70;
|
||||
uint8_t m_gekisha_val[2];
|
||||
uint8_t m_gekisha_rom_enable;
|
||||
uint8_t *m_romptr;
|
||||
uint8_t *m_hnoridur_ptr;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(dynax_vblank_ack_w);
|
||||
@ -196,8 +197,6 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(tenkai_p7_w);
|
||||
DECLARE_WRITE8_MEMBER(tenkai_p8_w);
|
||||
DECLARE_READ8_MEMBER(tenkai_p8_r);
|
||||
DECLARE_READ8_MEMBER(tenkai_8000_r);
|
||||
DECLARE_WRITE8_MEMBER(tenkai_8000_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(tenkai_6c_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(tenkai_70_w);
|
||||
DECLARE_WRITE8_MEMBER(tenkai_blit_romregion_w);
|
||||
@ -206,8 +205,6 @@ public:
|
||||
DECLARE_READ8_MEMBER(gekisha_keyboard_1_r);
|
||||
DECLARE_WRITE8_MEMBER(gekisha_hopper_w);
|
||||
DECLARE_WRITE8_MEMBER(gekisha_p4_w);
|
||||
DECLARE_READ8_MEMBER(gekisha_8000_r);
|
||||
DECLARE_WRITE8_MEMBER(gekisha_8000_w);
|
||||
DECLARE_WRITE8_MEMBER(dynax_extra_scrollx_w);
|
||||
DECLARE_WRITE8_MEMBER(dynax_extra_scrolly_w);
|
||||
DECLARE_WRITE8_MEMBER(dynax_blit_pen_w);
|
||||
@ -276,7 +273,6 @@ public:
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(tenkai_interrupt);
|
||||
|
||||
void tenkai_update_rombank();
|
||||
void gekisha_bank_postload();
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(sprtmtch_sound_callback);
|
||||
DECLARE_WRITE_LINE_MEMBER(jantouki_sound_callback);
|
||||
@ -286,9 +282,6 @@ public:
|
||||
DECLARE_MACHINE_RESET(adpcm);
|
||||
DECLARE_WRITE8_MEMBER(adpcm_reset_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(adpcm_reset_kludge_w);
|
||||
DECLARE_MACHINE_START(gekisha);
|
||||
DECLARE_MACHINE_RESET(gekisha);
|
||||
DECLARE_MACHINE_START(tenkai);
|
||||
DECLARE_WRITE8_MEMBER(tenkai_dswsel_w);
|
||||
DECLARE_READ8_MEMBER(tenkai_dsw_r);
|
||||
DECLARE_WRITE_LINE_MEMBER(tenkai_rtc_irq);
|
||||
|
Loading…
Reference in New Issue
Block a user