// license:BSD-3-Clause // copyright-holders:Miodrag Milanovic /***************************************************************************** * * includes/special.h * ****************************************************************************/ #ifndef MAME_INCLUDES_SPECIAL_H #define MAME_INCLUDES_SPECIAL_H #pragma once #include "cpu/z80/z80.h" #include "cpu/i8085/i8085.h" #include "audio/special.h" #include "sound/dac.h" #include "sound/wave.h" #include "machine/i8255.h" #include "machine/pit8253.h" #include "imagedev/cassette.h" #include "formats/smx_dsk.h" #include "formats/rk_cas.h" #include "machine/wd_fdc.h" #include "machine/ram.h" class special_state : public driver_device { public: enum { TIMER_RESET, TIMER_PIT8253_GATES }; special_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_ppi(*this, "ppi8255"), m_fdc(*this, "fd1793"), m_dac(*this, "dac"), m_pit(*this, "pit8253"), m_cassette(*this, "cassette"), m_ram(*this, RAM_TAG), m_p_videoram(*this, "videoram"), m_region_maincpu(*this, "maincpu"), m_bank1(*this, "bank1"), m_bank2(*this, "bank2"), m_bank3(*this, "bank3"), m_bank4(*this, "bank4"), m_bank5(*this, "bank5"), m_bank6(*this, "bank6"), m_io_line0(*this, "LINE0"), m_io_line1(*this, "LINE1"), m_io_line2(*this, "LINE2"), m_io_line3(*this, "LINE3"), m_io_line4(*this, "LINE4"), m_io_line5(*this, "LINE5"), m_io_line6(*this, "LINE6"), m_io_line7(*this, "LINE7"), m_io_line8(*this, "LINE8"), m_io_line9(*this, "LINE9"), m_io_line10(*this, "LINE10"), m_io_line11(*this, "LINE11"), m_io_line12(*this, "LINE12"), m_palette(*this, "palette") { } DECLARE_WRITE8_MEMBER(specimx_select_bank); DECLARE_WRITE8_MEMBER(video_memory_w); DECLARE_WRITE8_MEMBER(specimx_video_color_w); DECLARE_READ8_MEMBER(specimx_video_color_r); DECLARE_READ8_MEMBER(specimx_disk_ctrl_r); DECLARE_WRITE8_MEMBER(specimx_disk_ctrl_w); DECLARE_READ8_MEMBER(erik_rr_reg_r); DECLARE_WRITE8_MEMBER(erik_rr_reg_w); DECLARE_READ8_MEMBER(erik_rc_reg_r); DECLARE_WRITE8_MEMBER(erik_rc_reg_w); DECLARE_READ8_MEMBER(erik_disk_reg_r); DECLARE_WRITE8_MEMBER(erik_disk_reg_w); DECLARE_READ8_MEMBER(specialist_8255_porta_r); DECLARE_READ8_MEMBER(specialist_8255_portb_r); DECLARE_READ8_MEMBER(specimx_8255_portb_r); DECLARE_READ8_MEMBER(specialist_8255_portc_r); DECLARE_WRITE8_MEMBER(specialist_8255_porta_w); DECLARE_WRITE8_MEMBER(specialist_8255_portb_w); DECLARE_WRITE8_MEMBER(specialist_8255_portc_w); void init_erik(); void init_special(); DECLARE_MACHINE_RESET(special); DECLARE_VIDEO_START(special); DECLARE_MACHINE_RESET(erik); DECLARE_VIDEO_START(erik); DECLARE_PALETTE_INIT(erik); DECLARE_VIDEO_START(specialp); DECLARE_MACHINE_START(specimx); DECLARE_MACHINE_RESET(specimx); DECLARE_VIDEO_START(specimx); DECLARE_PALETTE_INIT(specimx); uint32_t screen_update_special(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_erik(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_specialp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_specimx(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(fdc_drq); DECLARE_FLOPPY_FORMATS( specimx_floppy_formats ); void special(machine_config &config); void erik(machine_config &config); void specimx(machine_config &config); void specialp(machine_config &config); void specialm(machine_config &config); void erik_io_map(address_map &map); void erik_mem(address_map &map); void specialist_mem(address_map &map); void specialp_mem(address_map &map); void specimx_mem(address_map &map); private: void specimx_set_bank(offs_t i, uint8_t data); void erik_set_bank(); std::unique_ptr m_specimx_colorram; uint8_t m_erik_color_1; uint8_t m_erik_color_2; uint8_t m_erik_background; uint8_t m_specimx_color; int m_specialist_8255_porta; int m_specialist_8255_portb; int m_specialist_8255_portc; uint8_t m_RR_register; uint8_t m_RC_register; required_device m_maincpu; optional_device m_ppi; optional_device m_fdc; optional_device m_dac; optional_device m_pit; optional_device m_cassette; optional_device m_ram; optional_shared_ptr m_p_videoram; int m_drive; required_memory_region m_region_maincpu; required_memory_bank m_bank1; optional_memory_bank m_bank2; optional_memory_bank m_bank3; optional_memory_bank m_bank4; optional_memory_bank m_bank5; optional_memory_bank m_bank6; required_ioport m_io_line0; required_ioport m_io_line1; required_ioport m_io_line2; required_ioport m_io_line3; required_ioport m_io_line4; required_ioport m_io_line5; required_ioport m_io_line6; required_ioport m_io_line7; required_ioport m_io_line8; required_ioport m_io_line9; required_ioport m_io_line10; required_ioport m_io_line11; required_ioport m_io_line12; required_device m_palette; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; }; #endif // MAME_INCLUDES_SPECIAL_H