diff options
Diffstat (limited to 'src/mame/cinematronics/leland.h')
| -rw-r--r-- | src/mame/cinematronics/leland.h | 127 |
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]{}; }; |
