summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/cinematronics/leland.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/cinematronics/leland.h')
-rw-r--r--src/mame/cinematronics/leland.h127
1 files changed, 66 insertions, 61 deletions
diff --git a/src/mame/cinematronics/leland.h b/src/mame/cinematronics/leland.h
index 5a65a19f453..d1134c47511 100644
--- a/src/mame/cinematronics/leland.h
+++ b/src/mame/cinematronics/leland.h
@@ -13,13 +13,11 @@
#include "machine/eepromser.h"
#include "sound/dac.h"
#include "sound/ay8910.h"
+
#include "emupal.h"
#include "screen.h"
#include "tilemap.h"
-#define LELAND_BATTERY_RAM_SIZE 0x4000
-#define ATAXX_EXTRA_TRAM_SIZE 0x800
-
class leland_80186_sound_device;
@@ -31,15 +29,17 @@ public:
, m_master(*this, "master")
, m_slave(*this, "slave")
, m_mainram(*this, "mainram")
- , m_master_bankslot(*this, "masterbank_%u", 0U)
+ , m_master_bankslot(*this, "masterbank")
, m_master_base(*this, "master")
, m_slave_bankslot(*this, "slavebank")
, m_slave_base(*this, "slave")
, m_eeprom(*this, "eeprom")
- , m_battery_ram(*this, "battery", 0x4000, ENDIANNESS_LITTLE)
+ , m_battery_ram(*this, "battery")
, m_palette(*this, "palette")
, m_screen(*this, "screen")
, m_gfxdecode(*this, "gfxdecode")
+ , m_palette_view(*this, "palette_view")
+ , m_battery_ram_view(*this, "battery_ram_view")
, m_io_in(*this, "IN%u", 0U)
, m_io_an(*this, "AN%u", 0U)
, m_dac(*this, "dac%u", 0U)
@@ -67,63 +67,38 @@ public:
void mayhem_bankswitch();
void dangerz_bankswitch();
void basebal2_bankswitch();
- void redline_bankswitch();
- void offroad_bankswitch();
+ void redline_bankswitch();
void viper_bankswitch();
-
- u8 raster_r();
- void slave_video_addr_w(offs_t offset, u8 data);
- void slave_large_banksw_w(u8 data);
- void master_video_addr_w(offs_t offset, u8 data);
-
- TIMER_CALLBACK_MEMBER(ataxx_interrupt_callback);
+ void offroad_bankswitch();
protected:
required_device<cpu_device> m_master;
required_device<cpu_device> m_slave;
required_shared_ptr<u8> m_mainram;
- required_memory_bank_array<2> m_master_bankslot;
+ required_memory_bank m_master_bankslot;
required_region_ptr<u8> m_master_base;
required_memory_bank m_slave_bankslot;
required_region_ptr<u8> m_slave_base;
required_device<eeprom_serial_93cxx_device> m_eeprom;
- memory_share_creator<u8> m_battery_ram;
+ required_shared_ptr<u8> m_battery_ram;
required_device<palette_device> m_palette;
required_device<screen_device> m_screen;
required_device<gfxdecode_device> m_gfxdecode;
+ memory_view m_palette_view;
+ memory_view m_battery_ram_view;
optional_ioport_array<4> m_io_in;
optional_ioport_array<6> m_io_an;
emu_timer *m_master_int_timer = nullptr;
- u8 m_battery_ram_enable = 0U;
-
- void rotate_memory(const char *cpuname);
- int dial_compute_value(int new_val, int indx);
u8 m_dial_last_input[4]{};
u8 m_dial_last_result[4]{};
u8 m_analog_result = 0U;
- int m_dangerz_x = 0;
- int m_dangerz_y = 0;
-
- void init_master_ports(u8 mvram_base, u8 io_base);
- void (leland_state::*m_update_master_bank)();
-
- int vram_port_r(offs_t offset, int num);
- void vram_port_w(offs_t offset, u8 data, int num);
-
- u8 m_wcol_enable = 0U;
-
- u8 master_analog_key_r(offs_t offset);
- void master_analog_key_w(offs_t offset, u8 data);
- u8 dangerz_input_y_r();
- u8 dangerz_input_x_r();
- u8 dangerz_input_upper_r();
- void scroll_w(offs_t offset, u8 data);
- void leland_master_alt_bankswitch_w(u8 data);
+ s32 m_dangerz_x = 0;
+ s32 m_dangerz_y = 0;
tilemap_t *m_tilemap = nullptr;
u16 m_xscroll = 0U;
@@ -133,17 +108,43 @@ protected:
struct vram_state_data
{
+ u8 m_buffer = 0U; // MSB of address
u16 m_addr = 0U;
u8 m_latch[2]{};
};
struct vram_state_data m_vram_state[2];
- void slave_map_program(address_map &map) ATTR_COLD;
- void asylum_slave_map_program(address_map &map) ATTR_COLD;
+ void rotate_memory(const char *cpuname);
+
+ int dial_compute_value(int new_val, int indx);
+ void init_master_ports(u8 mvram_base, u8 io_base);
+ void (leland_state::*m_update_master_bank)();
+
+ void update_battery_ram_view(bool enable);
+
+ void init_vram();
+
+ int vram_port_r(offs_t offset, int num);
+ void vram_port_w(offs_t offset, u8 data, int num);
+
+ u8 master_analog_key_r(offs_t offset);
+ void master_analog_key_w(offs_t offset, u8 data);
+ u8 dangerz_input_y_r();
+ u8 dangerz_input_x_r();
+ u8 dangerz_input_upper_r();
+ void scroll_w(offs_t offset, u8 data);
+ void leland_master_alt_bankswitch_w(u8 data);
TIMER_CALLBACK_MEMBER(leland_delayed_mvram_w);
+ u8 raster_r();
+ void slave_video_addr_w(offs_t offset, u8 data);
+ void slave_large_banksw_w(u8 data);
+ void master_video_addr_w(offs_t offset, u8 data);
+
+ void master_common_map_program(address_map &map) ATTR_COLD;
+
private:
optional_device_array<dac_byte_interface, 2> m_dac;
optional_device<ay8910_device> m_ay8910;
@@ -168,14 +169,10 @@ private:
u8 cerberus_dial_1_r();
u8 cerberus_dial_2_r();
- void alleymas_joystick_kludge(u8 data);
- void leland_battery_ram_w(offs_t offset, u8 data);
+ void alleymas_joystick_kludge_w(u8 data);
u8 leland_master_input_r(offs_t offset);
void leland_master_output_w(offs_t offset, u8 data);
- void gated_paletteram_w(offs_t offset, u8 data);
- u8 gated_paletteram_r(offs_t offset);
void slave_small_banksw_w(u8 data);
- void ataxx_slave_banksw_w(u8 data);
void leland_mvram_port_w(offs_t offset, u8 data);
u8 leland_mvram_port_r(offs_t offset);
void leland_svram_port_w(offs_t offset, u8 data);
@@ -201,8 +198,8 @@ private:
void leland_init_eeprom(u8 default_val, const u16 *data, u8 serial_offset, u8 serial_type);
void ataxx_init_eeprom(const u16 *data);
- int keycard_r();
- void keycard_w(int data);
+ u8 keycard_r();
+ void keycard_w(u8 data);
void master_map_io(address_map &map) ATTR_COLD;
void master_map_program(address_map &map) ATTR_COLD;
void slave_map_io(address_map &map) ATTR_COLD;
@@ -244,6 +241,7 @@ private:
u8 offroad_wheel_3_r();
void redline_master_alt_bankswitch_w(u8 data);
+ void master_redline_map_program(address_map &map) ATTR_COLD;
void master_redline_map_io(address_map &map) ATTR_COLD;
void slave_large_map_program(address_map &map) ATTR_COLD;
@@ -258,11 +256,12 @@ public:
: leland_state(mconfig, type, tag)
, m_sound(*this, "custom")
, m_xrom_base(*this, "xrom")
+ , m_qram(*this, "qram", 0x10000, ENDIANNESS_LITTLE)
+ , m_tram(*this, "tram")
{
}
void init_ataxx();
- void init_ataxxj();
void init_wsf();
void init_indyheat();
void init_brutforc();
@@ -272,16 +271,24 @@ public:
void wsf(machine_config &config);
void asylum(machine_config &config);
+protected:
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD;
+ virtual void video_start() override ATTR_COLD;
+
private:
u8 ataxx_trackball_r(offs_t offset);
u8 indyheat_analog_r(offs_t offset);
void indyheat_analog_w(offs_t offset, u8 data);
- void ataxx_battery_ram_w(offs_t offset, u8 data);
+ u8 qram_r(offs_t offset);
+ void qram_w(offs_t offset, u8 data);
+
u8 ataxx_master_input_r(offs_t offset);
void ataxx_master_output_w(offs_t offset, u8 data);
- void paletteram_and_misc_w(offs_t offset, u8 data);
- u8 paletteram_and_misc_r(offs_t offset);
+ void xrom_w(offs_t offset, u8 data);
+ u8 xrom_r(offs_t offset);
+ void ataxx_slave_banksw_w(u8 data);
void ataxx_mvram_port_w(offs_t offset, u8 data);
void ataxx_svram_port_w(offs_t offset, u8 data);
u8 ataxx_mvram_port_r(offs_t offset);
@@ -292,27 +299,25 @@ private:
TILEMAP_MAPPER_MEMBER(ataxx_scan);
TILE_GET_INFO_MEMBER(ataxx_get_tile_info);
+ TIMER_CALLBACK_MEMBER(ataxx_interrupt_callback);
void ataxx_bankswitch();
- virtual void machine_start() override ATTR_COLD;
- virtual void machine_reset() override ATTR_COLD;
- virtual void video_start() override ATTR_COLD;
-
void ataxx_video(machine_config &config);
- void master_map_program_2(address_map &map) ATTR_COLD;
+ void asylum_slave_map_program(address_map &map) ATTR_COLD;
void master_map_io_2(address_map &map) ATTR_COLD;
+ void master_map_program_2(address_map &map) ATTR_COLD;
void slave_map_io_2(address_map &map) ATTR_COLD;
+ void slave_map_program(address_map &map) ATTR_COLD;
required_device<leland_80186_sound_device> m_sound;
- required_region_ptr<u8> m_xrom_base;
+ required_region_ptr<u16> m_xrom_base;
+ memory_share_creator<u8> m_qram;
+ required_shared_ptr<u8> m_tram;
- std::unique_ptr<u8[]> m_ataxx_qram{};
u8 m_master_bank = 0U;
- u32 m_xrom1_addr = 0U;
- u32 m_xrom2_addr = 0U;
- std::unique_ptr<u8[]> m_extra_tram{};
+ u32 m_xrom_addr[2]{};
};