From 944fcc074d846356bab9ad13677dc9d8bf43ad29 Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 3 Jan 2016 16:47:42 -0500 Subject: [PATCH] liberatr: fully disentangle from atarigen, fix typo --- src/mame/drivers/liberatr.cpp | 54 +++++++++++++++++++++++++++++++++-- src/mame/includes/liberatr.h | 22 +++++++++++--- src/mame/machine/atarigen.cpp | 50 -------------------------------- src/mame/machine/atarigen.h | 12 -------- 4 files changed, 70 insertions(+), 68 deletions(-) diff --git a/src/mame/drivers/liberatr.cpp b/src/mame/drivers/liberatr.cpp index f0f77750814..3c8362974f8 100644 --- a/src/mame/drivers/liberatr.cpp +++ b/src/mame/drivers/liberatr.cpp @@ -15,7 +15,7 @@ Liberator Memory Map (for the main set, the other one is rearranged) (from the schematics/manual) - HEX R/W D7 D6 D5 D4 D3 D2 D2 D0 function + HEX R/W D7 D6 D5 D4 D3 D2 D1 D0 function ---------+-----+------------------------+------------------------ 0000 D D D D D D D D XCOORD 0001 D D D D D D D D YCOORD @@ -144,7 +144,8 @@ void liberatr_state::machine_start() { - atarigen_state::machine_start(); + save_item(NAME(m_earom_data)); + save_item(NAME(m_earom_control)); save_item(NAME(m_trackball_offset)); save_item(NAME(m_ctrld)); @@ -152,6 +153,13 @@ void liberatr_state::machine_start() } +void liberatr_state::machine_reset() +{ + // reset the control latch on the EAROM + m_earom->set_control(0, 1, 1, 0, 0); +} + + /************************************* * @@ -208,6 +216,48 @@ READ8_MEMBER( liberatr_state::port0_r ) +/************************************* + * + * Early raster EAROM interface + * + *************************************/ + +READ8_MEMBER( liberatr_state::earom_r ) +{ + // return data latched from previous clock + return m_earom->data(); +} + + +WRITE8_MEMBER( liberatr_state::earom_w ) +{ + // remember the value written + m_earom_data = data; + + // output latch only enabled if control bit 2 is set + if (m_earom_control & 4) + m_earom->set_data(m_earom_data); + + // always latch the address + m_earom->set_address(offset); +} + + +WRITE8_MEMBER( liberatr_state::earom_control_w ) +{ + // remember the control state + m_earom_control = data; + + // ensure ouput data is put on data lines prior to updating controls + if (m_earom_control & 4) + m_earom->set_data(m_earom_data); + + // set the control lines; /CS2 is always held low + m_earom->set_control(data & 8, 1, ~data & 4, data & 2, data & 1); +} + + + /************************************* * * Main CPU memory handlers diff --git a/src/mame/includes/liberatr.h b/src/mame/includes/liberatr.h index edaf2add687..a5b9dc2066c 100644 --- a/src/mame/includes/liberatr.h +++ b/src/mame/includes/liberatr.h @@ -7,14 +7,18 @@ *************************************************************************/ #include "cpu/m6502/m6502.h" -#include "machine/atarigen.h" +#include "machine/er2055.h" #include "sound/pokey.h" -class liberatr_state : public atarigen_state +class liberatr_state : public driver_device { public: liberatr_state(const machine_config &mconfig, device_type type, const char *tag) - : atarigen_state(mconfig, type, tag), + : driver_device(mconfig, type, tag), + m_earom(*this, "earom"), + m_earom_data(0), + m_earom_control(0), + m_screen(*this, "screen"), m_base_ram(*this, "base_ram"), m_planet_frame(*this, "planet_frame"), m_planet_select(*this, "planet_select"), @@ -35,11 +39,20 @@ public: UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + // early raster EAROM interface + DECLARE_READ8_MEMBER( earom_r ); + DECLARE_WRITE8_MEMBER( earom_w ); + DECLARE_WRITE8_MEMBER( earom_control_w ); + protected: virtual void machine_start() override; + virtual void machine_reset() override; virtual void video_start() override; - virtual void update_interrupts() override { } + // vector and early raster EAROM interface + required_device m_earom; + UINT8 m_earom_data; + UINT8 m_earom_control; struct planet; @@ -48,6 +61,7 @@ protected: void draw_planet(bitmap_rgb32 &bitmap, pen_t *pens); void draw_bitmap(bitmap_rgb32 &bitmap, pen_t *pens); + required_device m_screen; required_shared_ptr m_base_ram; required_shared_ptr m_planet_frame; required_shared_ptr m_planet_select; diff --git a/src/mame/machine/atarigen.cpp b/src/mame/machine/atarigen.cpp index 05127cb1edd..287342585f6 100644 --- a/src/mame/machine/atarigen.cpp +++ b/src/mame/machine/atarigen.cpp @@ -951,9 +951,6 @@ machine_config_constructor atari_eeprom_2816_device::device_mconfig_additions() atarigen_state::atarigen_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_earom(*this, "earom"), - m_earom_data(0), - m_earom_control(0), m_scanline_int_state(0), m_sound_int_state(0), m_video_int_state(0), @@ -1004,9 +1001,6 @@ void atarigen_state::machine_start() save_item(NAME(m_slapstic_last_address)); save_item(NAME(m_scanlines_per_callback)); - - save_item(NAME(m_earom_data)); - save_item(NAME(m_earom_control)); } @@ -1015,10 +1009,6 @@ void atarigen_state::machine_reset() // reset the interrupt states m_video_int_state = m_sound_int_state = m_scanline_int_state = 0; - // reset the control latch on the EAROM, if present - if (m_earom != nullptr) - m_earom->set_control(0, 1, 1, 0, 0); - // reset the slapstic if (m_slapstic_num != 0) { @@ -1465,43 +1455,3 @@ void atarigen_state::blend_gfx(int gfx0, int gfx1, int mask0, int mask1) // free the second graphics element m_gfxdecode->set_gfx(gfx1, nullptr); } - - - -//************************************************************************** -// VECTOR AND EARLY RASTER EAROM INTERFACE -//************************************************************************** - -READ8_MEMBER( atarigen_state::earom_r ) -{ - // return data latched from previous clock - return m_earom->data(); -} - - -WRITE8_MEMBER( atarigen_state::earom_w ) -{ - // remember the value written - m_earom_data = data; - - // output latch only enabled if control bit 2 is set - if (m_earom_control & 4) - m_earom->set_data(m_earom_data); - - // always latch the address - m_earom->set_address(offset); -} - - -WRITE8_MEMBER( atarigen_state::earom_control_w ) -{ - // remember the control state - m_earom_control = data; - - // ensure ouput data is put on data lines prior to updating controls - if (m_earom_control & 4) - m_earom->set_data(m_earom_data); - - // set the control lines; /CS2 is always held low - m_earom->set_control(data & 8, 1, ~data & 4, data & 2, data & 1); -} diff --git a/src/mame/machine/atarigen.h b/src/mame/machine/atarigen.h index 5010057ca00..caa2bb10cd5 100644 --- a/src/mame/machine/atarigen.h +++ b/src/mame/machine/atarigen.h @@ -11,8 +11,6 @@ #ifndef __MACHINE_ATARIGEN__ #define __MACHINE_ATARIGEN__ -#include "machine/nvram.h" -#include "machine/er2055.h" #include "machine/eeprompar.h" #include "video/atarimo.h" #include "cpu/m6502/m6502.h" @@ -383,11 +381,6 @@ public: // misc helpers void blend_gfx(int gfx0, int gfx1, int mask0, int mask1); - // vector and early raster EAROM interface - DECLARE_READ8_MEMBER( earom_r ); - DECLARE_WRITE8_MEMBER( earom_w ); - DECLARE_WRITE8_MEMBER( earom_control_w ); - // timer IDs enum { @@ -397,11 +390,6 @@ public: TID_ATARIGEN_LAST }; - // vector and early raster EAROM interface - optional_device m_earom; - UINT8 m_earom_data; - UINT8 m_earom_control; - UINT8 m_scanline_int_state; UINT8 m_sound_int_state; UINT8 m_video_int_state;