diff options
Diffstat (limited to 'src/mame/includes/williams.h')
-rw-r--r-- | src/mame/includes/williams.h | 412 |
1 files changed, 278 insertions, 134 deletions
diff --git a/src/mame/includes/williams.h b/src/mame/includes/williams.h index 1a8d2c7d9f2..51f02fb96c1 100644 --- a/src/mame/includes/williams.h +++ b/src/mame/includes/williams.h @@ -34,12 +34,6 @@ public: m_mainbank(*this, "mainbank"), m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), - m_mux(*this, "mux"), - m_mux0(*this, "mux_0"), - m_mux1(*this, "mux_1"), - m_muxa(*this, "mux_a"), - m_muxb(*this, "mux_b"), - m_bankc000(*this, "bankc000"), m_watchdog(*this, "watchdog"), m_screen(*this, "screen"), m_palette(*this, "palette"), @@ -47,42 +41,28 @@ public: m_pia(*this, "pia_%u", 0U) { } - void playball(machine_config &config); - void defender(machine_config &config); - void sinistar(machine_config &config); void lottofun(machine_config &config); - void williams(machine_config &config); - void williams_muxed(machine_config &config); - void jin(machine_config &config); + void williams_base(machine_config &config); - void init_sinistar(); void init_stargate(); void init_playball(); - void init_defender(); - void init_mayday(); void init_lottofun(); - void init_alienaru(); - void init_defndjeu(); - void init_splat(); - void init_joust(); - void init_alienar(); void init_robotron(); - void init_bubbles(); - u8 williams_49way_port_0_r(); - void williams_snd_cmd_w(u8 data); - void defender_video_control_w(u8 data); - u8 williams_video_counter_r(); - DECLARE_WRITE8_MEMBER(williams_watchdog_reset_w); + u8 port_0_49way_r(); + u8 video_counter_r(); + virtual DECLARE_WRITE8_MEMBER(watchdog_reset_w); - TIMER_DEVICE_CALLBACK_MEMBER(williams_va11_callback); - TIMER_DEVICE_CALLBACK_MEMBER(williams_count240_callback); + virtual TIMER_DEVICE_CALLBACK_MEMBER(va11_callback); + TIMER_DEVICE_CALLBACK_MEMBER(count240_callback); - uint32_t screen_update_williams(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - DECLARE_VIDEO_START(williams); - void williams_palette(palette_device &palette) const; + virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + void palette_init(palette_device &palette) const; protected: + virtual void machine_start() override; + virtual void video_start() override; + enum { //controlbyte (0xCA00) bit definitions @@ -99,7 +79,6 @@ protected: required_shared_ptr<uint8_t> m_nvram; required_shared_ptr<uint8_t> m_videoram; optional_memory_bank m_mainbank; - uint8_t *m_mayday_protection; uint8_t m_blitter_config; uint16_t m_blitter_clip_address; uint8_t m_blitter_window_enable; @@ -110,22 +89,14 @@ protected: uint8_t m_blitter_remap_index; const uint8_t *m_blitter_remap; std::unique_ptr<uint8_t[]> m_blitter_remap_lookup; - void williams_vram_select_w(u8 data); - void williams_cmos_w(offs_t offset, u8 data); - void bubbles_cmos_w(offs_t offset, u8 data); - void defender_bank_select_w(u8 data); - u8 mayday_protection_r(offs_t offset); + virtual void vram_select_w(u8 data); + virtual void cmos_w(offs_t offset, u8 data); void sinistar_vram_select_w(u8 data); - DECLARE_WRITE8_MEMBER(williams_blitter_w); + DECLARE_WRITE8_MEMBER(blitter_w); - DECLARE_MACHINE_START(defender); - DECLARE_MACHINE_RESET(defender); - DECLARE_MACHINE_START(williams); - DECLARE_MACHINE_START(williams_common); + virtual TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w); - TIMER_CALLBACK_MEMBER(williams_deferred_snd_cmd_w); - - void playball_snd_cmd_w(u8 data); + virtual void snd_cmd_w(u8 data); DECLARE_WRITE_LINE_MEMBER(lottofun_coin_lock_w); @@ -136,24 +107,140 @@ protected: required_device<cpu_device> m_maincpu; required_device<cpu_device> m_soundcpu; - optional_device<ls157_device> m_mux; - optional_device<ls157_device> m_mux0; - optional_device<ls157_device> m_mux1; - optional_device<ls157_x2_device> m_muxa; - optional_device<ls157_device> m_muxb; - optional_device<address_map_bank_device> m_bankc000; required_device<watchdog_timer_device> m_watchdog; required_device<screen_device> m_screen; optional_device<palette_device> m_palette; optional_shared_ptr<uint8_t> m_paletteram; optional_device_array<pia6821_device, 4> m_pia; - void defender_bankc000_map(address_map &map); - void defender_map(address_map &map); - void defender_sound_map(address_map &map); - void sinistar_map(address_map &map); - void sound_map(address_map &map); - void williams_map(address_map &map); + virtual void sound_map(address_map &map); + void base_map(address_map &map); +}; + +class defender_state : public williams_state +{ +public: + defender_state(const machine_config &mconfig, device_type type, const char *tag) : + williams_state(mconfig, type, tag), + m_bankc000(*this, "bankc000") + { } + + void defender(machine_config &config); + void jin(machine_config &config); + +protected: + virtual void driver_init() override; + + virtual void main_map(address_map &map); + +private: + virtual void machine_start() override { } + virtual void machine_reset() override; + + void bankc000_map(address_map &map); + virtual void sound_map(address_map &map) override; + + void bank_select_w(u8 data); + void video_control_w(u8 data); + + required_device<address_map_bank_device> m_bankc000; +}; + +class defndjeu_state : public defender_state +{ +public: + defndjeu_state(const machine_config &mconfig, device_type type, const char *tag) : + defender_state(mconfig, type, tag) + { } + +private: + virtual void driver_init() override; +}; + +class mayday_state : public defender_state +{ +public: + mayday_state(const machine_config &mconfig, device_type type, const char *tag) : + defender_state(mconfig, type, tag) + { } + +private: + virtual void driver_init() override; + + virtual void main_map(address_map &map) override; + + uint8_t *m_protection; + u8 protection_r(offs_t offset); +}; + +class sinistar_state : public williams_state +{ +public: + sinistar_state(const machine_config &mconfig, device_type type, const char *tag) : + williams_state(mconfig, type, tag) + { } + + void sinistar(machine_config &config); + +private: + virtual void driver_init() override; + + virtual void vram_select_w(u8 data) override; + + void main_map(address_map &map); +}; + +class bubbles_state : public williams_state +{ +public: + bubbles_state(const machine_config &mconfig, device_type type, const char *tag) : + williams_state(mconfig, type, tag) + { } + + void bubbles(machine_config &config); + +private: + virtual void driver_init() override; + + void main_map(address_map &map); + + virtual void cmos_w(offs_t offset, u8 data) override; +}; + +class playball_state : public williams_state +{ +public: + playball_state(const machine_config &mconfig, device_type type, const char *tag) : + williams_state(mconfig, type, tag) + { } + + void playball(machine_config &config); + +private: + virtual void driver_init() override; + + virtual void snd_cmd_w(u8 data) override; +}; + +class williams_muxed_state : public williams_state +{ +public: + williams_muxed_state(const machine_config &mconfig, device_type type, const char *tag) : + williams_state(mconfig, type, tag), + m_mux0(*this, "mux_0"), + m_mux1(*this, "mux_1") + { } + + void williams_muxed(machine_config &config); + + void init_splat(); + void init_joust(); + void init_alienar(); + void init_alienaru(); + +private: + required_device<ls157_device> m_mux0; + required_device<ls157_device> m_mux1; }; class spdball_state : public williams_state @@ -165,10 +252,10 @@ public: void spdball(machine_config &config); - void driver_init() override; - private: - void spdball_map(address_map &map); + virtual void driver_init() override; + + void main_map(address_map &map); }; class blaster_state : public williams_state @@ -177,45 +264,48 @@ public: blaster_state(const machine_config &mconfig, device_type type, const char *tag) : williams_state(mconfig, type, tag), m_soundcpu_b(*this, "soundcpu_b"), - m_blaster_palette_0(*this, "blaster_pal0"), - m_blaster_scanline_control(*this, "blaster_scan"), - m_blaster_bankb(*this, "blaster_bankb") + m_palette_0(*this, "blaster_pal0"), + m_scanline_control(*this, "blaster_scan"), + m_bankb(*this, "blaster_bankb"), + m_muxa(*this, "mux_a"), + m_muxb(*this, "mux_b") { } void blastkit(machine_config &config); void blaster(machine_config &config); - void init_blaster(); - private: + virtual void machine_start() override; + virtual void video_start() override; + virtual void driver_init() override; + optional_device<cpu_device> m_soundcpu_b; - required_shared_ptr<uint8_t> m_blaster_palette_0; - required_shared_ptr<uint8_t> m_blaster_scanline_control; - optional_memory_bank m_blaster_bankb; + required_shared_ptr<uint8_t> m_palette_0; + required_shared_ptr<uint8_t> m_scanline_control; + optional_memory_bank m_bankb; + required_device<ls157_x2_device> m_muxa; + optional_device<ls157_device> m_muxb; - rgb_t m_blaster_color0; - uint8_t m_blaster_video_control; + rgb_t m_color0; + uint8_t m_video_control; uint8_t m_vram_bank; uint8_t m_rom_bank; - void blaster_vram_select_w(u8 data); - void blaster_bank_select_w(u8 data); - void blaster_remap_select_w(u8 data); - void blaster_video_control_w(u8 data); - TIMER_CALLBACK_MEMBER(blaster_deferred_snd_cmd_w); - void blaster_snd_cmd_w(u8 data); + virtual void vram_select_w(u8 data) override; + void bank_select_w(u8 data); + void remap_select_w(u8 data); + void video_control_w(u8 data); + virtual TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w) override; + virtual void snd_cmd_w(u8 data) override; - DECLARE_MACHINE_START(blaster); - DECLARE_VIDEO_START(blaster); - uint32_t screen_update_blaster(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override; inline void update_blaster_banking(); - void blaster_map(address_map &map); - void sound_map_b(address_map &map); + void main_map(address_map &map); + void sound2_map(address_map &map); }; - class williams2_state : public williams_state { public: @@ -223,61 +313,109 @@ public: williams_state(mconfig, type, tag), m_bank8000(*this, "bank8000"), m_gfxdecode(*this, "gfxdecode"), - m_williams2_tileram(*this, "williams2_tile") + m_tileram(*this, "williams2_tile") { } - void williams2(machine_config &config); - void mysticm(machine_config &config); - void inferno(machine_config &config); - - void init_mysticm(); - void init_tshoot(); - void init_inferno(); + void williams2_base(machine_config &config); protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + required_device<address_map_bank_device> m_bank8000; required_device<gfxdecode_device> m_gfxdecode; - required_shared_ptr<uint8_t> m_williams2_tileram; + required_shared_ptr<uint8_t> m_tileram; tilemap_t *m_bg_tilemap; uint16_t m_tilemap_xscroll; - uint8_t m_williams2_fg_color; - uint8_t m_williams2_tilemap_config; - - TILE_GET_INFO_MEMBER(get_tile_info); - void williams2_bank_select_w(u8 data); - DECLARE_WRITE8_MEMBER(williams2_watchdog_reset_w); - void williams2_7segment_w(u8 data); - void williams2_paletteram_w(offs_t offset, u8 data); - void williams2_fg_select_w(u8 data); - void williams2_bg_select_w(u8 data); - void williams2_tileram_w(offs_t offset, u8 data); - void williams2_xscroll_low_w(u8 data); - void williams2_xscroll_high_w(u8 data); - void williams2_blit_window_enable_w(u8 data); - TIMER_DEVICE_CALLBACK_MEMBER(williams2_va11_callback); - TIMER_DEVICE_CALLBACK_MEMBER(williams2_endscreen_callback); - TIMER_CALLBACK_MEMBER(williams2_deferred_snd_cmd_w); - void williams2_snd_cmd_w(u8 data); - - DECLARE_MACHINE_START(williams2); - DECLARE_MACHINE_RESET(williams2); - DECLARE_VIDEO_START(williams2); - uint32_t screen_update_williams2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - - void williams2_bank8000_map(address_map &map); - void williams2_common_map(address_map &map); - void williams2_d000_ram_map(address_map &map); - void williams2_d000_rom_map(address_map &map); - void williams2_sound_map(address_map &map); + uint8_t m_fg_color; + + virtual TILE_GET_INFO_MEMBER(get_tile_info); + void bank_select_w(u8 data); + virtual DECLARE_WRITE8_MEMBER(watchdog_reset_w) override; + void segments_w(u8 data); + void paletteram_w(offs_t offset, u8 data); + void fg_select_w(u8 data); + virtual void bg_select_w(u8 data); + void tileram_w(offs_t offset, u8 data); + void xscroll_low_w(u8 data); + void xscroll_high_w(u8 data); + void blit_window_enable_w(u8 data); + virtual TIMER_DEVICE_CALLBACK_MEMBER(va11_callback) override; + TIMER_DEVICE_CALLBACK_MEMBER(endscreen_callback); + virtual TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w) override; + virtual void snd_cmd_w(u8 data) override; + + virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override; + + void bank8000_map(address_map &map); + void common_map(address_map &map); + virtual void sound_map(address_map &map) override; + + void video_control_w(u8 data); +}; + +class williams_d000_rom_state : public williams2_state +{ +public: + williams_d000_rom_state(const machine_config &mconfig, device_type type, const char *tag) : + williams2_state(mconfig, type, tag) + { } + +protected: + void d000_map(address_map &map); }; +class williams_d000_ram_state : public williams2_state +{ +public: + williams_d000_ram_state(const machine_config &mconfig, device_type type, const char *tag) : + williams2_state(mconfig, type, tag) + { } + +protected: + void d000_map(address_map &map); +}; -class tshoot_state : public williams2_state +class inferno_state : public williams_d000_ram_state +{ +public: + inferno_state(const machine_config &mconfig, device_type type, const char *tag) : + williams_d000_ram_state(mconfig, type, tag), + m_mux(*this, "mux") + { } + + void inferno(machine_config &config); + +private: + virtual void driver_init() override; + + required_device<ls157_device> m_mux; +}; + +class mysticm_state : public williams_d000_ram_state +{ +public: + mysticm_state(const machine_config &mconfig, device_type type, const char *tag) : + williams_d000_ram_state(mconfig, type, tag) + { } + + void mysticm(machine_config &config); + +private: + virtual void driver_init() override; + + virtual TILE_GET_INFO_MEMBER(get_tile_info) override; + virtual void bg_select_w(u8 data) override; +}; + +class tshoot_state : public williams_d000_rom_state { public: tshoot_state(const machine_config &mconfig, device_type type, const char *tag) : - williams2_state(mconfig, type, tag), + williams_d000_rom_state(mconfig, type, tag), + m_mux(*this, "mux"), m_gun(*this, {"GUNX", "GUNY"}), m_grenade_lamp(*this, "Grenade_lamp"), m_gun_lamp(*this, "Gun_lamp"), @@ -290,11 +428,13 @@ public: template <int P> DECLARE_CUSTOM_INPUT_MEMBER(gun_r); private: + virtual void machine_start() override; + virtual void driver_init() override; + DECLARE_WRITE_LINE_MEMBER(maxvol_w); void lamp_w(u8 data); - DECLARE_MACHINE_START(tshoot); - + required_device<ls157_device> m_mux; required_ioport_array<2> m_gun; output_finder<> m_grenade_lamp; output_finder<> m_gun_lamp; @@ -302,27 +442,31 @@ private: output_finder<> m_feather_blower; }; -class joust2_state : public williams2_state +class joust2_state : public williams_d000_rom_state { public: joust2_state(const machine_config &mconfig, device_type type, const char *tag) : - williams2_state(mconfig, type, tag), + williams_d000_rom_state(mconfig, type, tag), + m_mux(*this, "mux"), m_cvsd_sound(*this, "cvsd") { } void joust2(machine_config &config); - void init_joust2(); - private: + virtual void machine_start() override; + virtual void driver_init() override; + + required_device<ls157_device> m_mux; required_device<williams_cvsd_sound_device> m_cvsd_sound; - uint16_t m_joust2_current_sound_data; + uint16_t m_current_sound_data; + + virtual TILE_GET_INFO_MEMBER(get_tile_info) override; + virtual void bg_select_w(u8 data) override; - DECLARE_MACHINE_START(joust2); - DECLARE_MACHINE_RESET(joust2); - TIMER_CALLBACK_MEMBER(joust2_deferred_snd_cmd_w); - DECLARE_WRITE8_MEMBER(joust2_snd_cmd_w); - DECLARE_WRITE_LINE_MEMBER(joust2_pia_3_cb1_w); + virtual TIMER_CALLBACK_MEMBER(deferred_snd_cmd_w) override; + virtual void snd_cmd_w(u8 data) override; + DECLARE_WRITE_LINE_MEMBER(pia_3_cb1_w); }; /*----------- defined in video/williams.cpp -----------*/ |