summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mame/drivers/hexion.c30
-rw-r--r--src/mame/includes/hexion.h24
-rw-r--r--src/mame/video/hexion.c18
3 files changed, 39 insertions, 33 deletions
diff --git a/src/mame/drivers/hexion.c b/src/mame/drivers/hexion.c
index f9098c0a1c9..08c9d911fb2 100644
--- a/src/mame/drivers/hexion.c
+++ b/src/mame/drivers/hexion.c
@@ -101,12 +101,12 @@ WRITE8_MEMBER(hexion_state::coincntr_w)
if ((data & 0xdc) != 0x10) popmessage("coincntr %02x",data);
}
-WRITE_LINE_MEMBER(hexion_state::hexion_irq_ack_w)
+WRITE_LINE_MEMBER(hexion_state::irq_ack_w)
{
m_maincpu->set_input_line(0, CLEAR_LINE);
}
-WRITE_LINE_MEMBER(hexion_state::hexion_nmi_ack_w)
+WRITE_LINE_MEMBER(hexion_state::nmi_ack_w)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
}
@@ -115,8 +115,8 @@ static ADDRESS_MAP_START( hexion_map, AS_PROGRAM, 8, hexion_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank1")
AM_RANGE(0xa000, 0xbfff) AM_RAM
- AM_RANGE(0xc000, 0xdffe) AM_READWRITE(hexion_bankedram_r, hexion_bankedram_w)
- AM_RANGE(0xdfff, 0xdfff) AM_WRITE(hexion_bankctrl_w)
+ AM_RANGE(0xc000, 0xdffe) AM_READWRITE(bankedram_r, bankedram_w)
+ AM_RANGE(0xdfff, 0xdfff) AM_WRITE(bankctrl_w)
AM_RANGE(0xe000, 0xe000) AM_NOP
AM_RANGE(0xe800, 0xe87f) AM_DEVREADWRITE("k051649", k051649_device, k051649_waveform_r, k051649_waveform_w)
AM_RANGE(0xe880, 0xe889) AM_DEVWRITE("k051649", k051649_device, k051649_frequency_w)
@@ -131,9 +131,9 @@ static ADDRESS_MAP_START( hexion_map, AS_PROGRAM, 8, hexion_state )
AM_RANGE(0xf403, 0xf403) AM_READ_PORT("P2")
AM_RANGE(0xf440, 0xf440) AM_READ_PORT("DSW3")
AM_RANGE(0xf441, 0xf441) AM_READ_PORT("SYSTEM")
- AM_RANGE(0xf480, 0xf480) AM_WRITE(hexion_bankswitch_w)
+ AM_RANGE(0xf480, 0xf480) AM_WRITE(bankswitch_w)
AM_RANGE(0xf4c0, 0xf4c0) AM_WRITE(coincntr_w)
- AM_RANGE(0xf500, 0xf500) AM_WRITE(hexion_gfxrom_select_w)
+ AM_RANGE(0xf500, 0xf500) AM_WRITE(gfxrom_select_w)
AM_RANGE(0xf540, 0xf540) AM_READ(watchdog_reset_r)
ADDRESS_MAP_END
@@ -141,8 +141,8 @@ static ADDRESS_MAP_START( hexionb_map, AS_PROGRAM, 8, hexion_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank1")
AM_RANGE(0xa000, 0xbfff) AM_RAM
- AM_RANGE(0xc000, 0xdffe) AM_READWRITE(hexion_bankedram_r, hexion_bankedram_w)
- AM_RANGE(0xdfff, 0xdfff) AM_WRITE(hexion_bankctrl_w)
+ AM_RANGE(0xc000, 0xdffe) AM_READWRITE(bankedram_r, bankedram_w)
+ AM_RANGE(0xdfff, 0xdfff) AM_WRITE(bankctrl_w)
AM_RANGE(0xe000, 0xe000) AM_NOP
AM_RANGE(0xe800, 0xe87f) AM_NOP // all the code to use the k051649 is still present
AM_RANGE(0xe880, 0xe889) AM_NOP // but the bootleg has an additional M6295 @ 0xf5c0 instead
@@ -157,9 +157,9 @@ static ADDRESS_MAP_START( hexionb_map, AS_PROGRAM, 8, hexion_state )
AM_RANGE(0xf403, 0xf403) AM_READ_PORT("P2")
AM_RANGE(0xf440, 0xf440) AM_READ_PORT("DSW3")
AM_RANGE(0xf441, 0xf441) AM_READ_PORT("SYSTEM")
- AM_RANGE(0xf480, 0xf480) AM_WRITE(hexion_bankswitch_w)
+ AM_RANGE(0xf480, 0xf480) AM_WRITE(bankswitch_w)
AM_RANGE(0xf4c0, 0xf4c0) AM_WRITE(coincntr_w)
- AM_RANGE(0xf500, 0xf500) AM_WRITE(hexion_gfxrom_select_w)
+ AM_RANGE(0xf500, 0xf500) AM_WRITE(gfxrom_select_w)
AM_RANGE(0xf540, 0xf540) AM_READ(watchdog_reset_r)
AM_RANGE(0xf5c0, 0xf5c0) AM_DEVWRITE("oki2", okim6295_device, write)
ADDRESS_MAP_END
@@ -224,7 +224,7 @@ static GFXDECODE_START( hexion )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
GFXDECODE_END
-TIMER_DEVICE_CALLBACK_MEMBER(hexion_state::hexion_scanline)
+TIMER_DEVICE_CALLBACK_MEMBER(hexion_state::scanline)
{
int scanline = param;
@@ -240,11 +240,11 @@ static MACHINE_CONFIG_START( hexion, hexion_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_24MHz/4) /* Z80B 6 MHz @ 17F, xtal verified, divider not verified */
MCFG_CPU_PROGRAM_MAP(hexion_map)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", hexion_state, hexion_scanline, "screen", 0, 1)
+ MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", hexion_state, scanline, "screen", 0, 1)
MCFG_DEVICE_ADD("k053252", K053252, XTAL_24MHz/2) /* K053252, X0-010(?) @8D, xtal verified, divider not verified */
- MCFG_K053252_INT1_ACK_CB(WRITELINE(hexion_state, hexion_irq_ack_w))
- MCFG_K053252_INT2_ACK_CB(WRITELINE(hexion_state, hexion_nmi_ack_w))
+ MCFG_K053252_INT1_ACK_CB(WRITELINE(hexion_state, irq_ack_w))
+ MCFG_K053252_INT2_ACK_CB(WRITELINE(hexion_state, nmi_ack_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -252,7 +252,7 @@ static MACHINE_CONFIG_START( hexion, hexion_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 36*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 32*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(hexion_state, screen_update_hexion)
+ MCFG_SCREEN_UPDATE_DRIVER(hexion_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", hexion)
diff --git a/src/mame/includes/hexion.h b/src/mame/includes/hexion.h
index 17ac18e42f2..7e1dec0ed85 100644
--- a/src/mame/includes/hexion.h
+++ b/src/mame/includes/hexion.h
@@ -15,6 +15,7 @@ public:
required_device<cpu_device> m_maincpu;
required_device<k053252_device> m_k053252;
required_device<gfxdecode_device> m_gfxdecode;
+
UINT8 *m_vram[2];
UINT8 *m_unkram;
int m_bankctrl;
@@ -22,18 +23,23 @@ public:
int m_pmcbank;
int m_gfxrom_select;
tilemap_t *m_bg_tilemap[2];
+
DECLARE_WRITE8_MEMBER(coincntr_w);
- DECLARE_WRITE8_MEMBER(hexion_bankswitch_w);
- DECLARE_READ8_MEMBER(hexion_bankedram_r);
- DECLARE_WRITE8_MEMBER(hexion_bankedram_w);
- DECLARE_WRITE8_MEMBER(hexion_bankctrl_w);
- DECLARE_WRITE8_MEMBER(hexion_gfxrom_select_w);
- DECLARE_WRITE_LINE_MEMBER(hexion_irq_ack_w);
- DECLARE_WRITE_LINE_MEMBER(hexion_nmi_ack_w);
+ DECLARE_WRITE8_MEMBER(bankswitch_w);
+ DECLARE_READ8_MEMBER(bankedram_r);
+ DECLARE_WRITE8_MEMBER(bankedram_w);
+ DECLARE_WRITE8_MEMBER(bankctrl_w);
+ DECLARE_WRITE8_MEMBER(gfxrom_select_w);
+ DECLARE_WRITE_LINE_MEMBER(irq_ack_w);
+ DECLARE_WRITE_LINE_MEMBER(nmi_ack_w);
+
TILE_GET_INFO_MEMBER(get_tile_info0);
TILE_GET_INFO_MEMBER(get_tile_info1);
+
+ TIMER_DEVICE_CALLBACK_MEMBER(scanline);
+
virtual void video_start();
- UINT32 screen_update_hexion(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- TIMER_DEVICE_CALLBACK_MEMBER(hexion_scanline);
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
inline void get_tile_info(tile_data &tileinfo,int tile_index,UINT8 *ram);
};
diff --git a/src/mame/video/hexion.c b/src/mame/video/hexion.c
index de60226cc97..30e867a1428 100644
--- a/src/mame/video/hexion.c
+++ b/src/mame/video/hexion.c
@@ -51,6 +51,8 @@ void hexion_state::video_start()
m_vram[0] = memregion("maincpu")->base() + 0x30000;
m_vram[1] = m_vram[0] + 0x2000;
m_unkram = m_vram[1] + 0x2000;
+
+ membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x2000);
}
@@ -61,12 +63,10 @@ void hexion_state::video_start()
***************************************************************************/
-WRITE8_MEMBER(hexion_state::hexion_bankswitch_w)
+WRITE8_MEMBER(hexion_state::bankswitch_w)
{
- UINT8 *rom = memregion("maincpu")->base() + 0x10000;
-
/* bits 0-3 select ROM bank */
- membank("bank1")->set_base(rom + 0x2000 * (data & 0x0f));
+ membank("bank1")->set_entry(data & 0x0f);
/* does bit 6 trigger the 052591? */
if (data & 0x40)
@@ -85,7 +85,7 @@ if (data & 0x30)
//logerror("%04x: bankswitch_w %02x\n",space.device().safe_pc(),data);
}
-READ8_MEMBER(hexion_state::hexion_bankedram_r)
+READ8_MEMBER(hexion_state::bankedram_r)
{
if (m_gfxrom_select && offset < 0x1000)
{
@@ -106,7 +106,7 @@ READ8_MEMBER(hexion_state::hexion_bankedram_r)
}
}
-WRITE8_MEMBER(hexion_state::hexion_bankedram_w)
+WRITE8_MEMBER(hexion_state::bankedram_w)
{
if (m_bankctrl == 3 && offset == 0 && (data & 0xfe) == 0)
{
@@ -138,13 +138,13 @@ WRITE8_MEMBER(hexion_state::hexion_bankedram_w)
logerror("%04x: bankedram_w offset %04x, data %02x, bankctrl = %02x\n",space.device().safe_pc(),offset,data,m_bankctrl);
}
-WRITE8_MEMBER(hexion_state::hexion_bankctrl_w)
+WRITE8_MEMBER(hexion_state::bankctrl_w)
{
//logerror("%04x: bankctrl_w %02x\n",space.device().safe_pc(),data);
m_bankctrl = data;
}
-WRITE8_MEMBER(hexion_state::hexion_gfxrom_select_w)
+WRITE8_MEMBER(hexion_state::gfxrom_select_w)
{
//logerror("%04x: gfxrom_select_w %02x\n",space.device().safe_pc(),data);
m_gfxrom_select = data;
@@ -158,7 +158,7 @@ WRITE8_MEMBER(hexion_state::hexion_gfxrom_select_w)
***************************************************************************/
-UINT32 hexion_state::screen_update_hexion(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 hexion_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap[1]->draw(screen, bitmap, cliprect, 0,0);
m_bg_tilemap[0]->draw(screen, bitmap, cliprect, 0,0);