diff options
-rw-r--r-- | src/mame/drivers/hexion.c | 30 | ||||
-rw-r--r-- | src/mame/includes/hexion.h | 24 | ||||
-rw-r--r-- | src/mame/video/hexion.c | 18 |
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); |