1 // license:BSD-3-Clause 2 // copyright-holders:Miodrag Milanovic 3 /***************************************************************************** 4 * 5 * includes/special.h 6 * 7 ****************************************************************************/ 8 9 #ifndef MAME_INCLUDES_SPECIAL_H 10 #define MAME_INCLUDES_SPECIAL_H 11 12 #pragma once 13 14 #include "cpu/z80/z80.h" 15 #include "cpu/i8085/i8085.h" 16 #include "audio/special.h" 17 #include "sound/dac.h" 18 #include "machine/i8255.h" 19 #include "machine/pit8253.h" 20 #include "imagedev/cassette.h" 21 #include "imagedev/floppy.h" 22 #include "formats/smx_dsk.h" 23 #include "formats/rk_cas.h" 24 #include "machine/wd_fdc.h" 25 #include "machine/timer.h" 26 #include "machine/ram.h" 27 #include "emupal.h" 28 29 30 class special_state : public driver_device 31 { 32 public: special_state(const machine_config & mconfig,device_type type,const char * tag)33 special_state(const machine_config &mconfig, device_type type, const char *tag) 34 : driver_device(mconfig, type, tag) 35 , m_maincpu(*this, "maincpu") 36 , m_ppi(*this, "ppi") 37 , m_fdc(*this, "fdc") 38 , m_dac(*this, "dac") 39 , m_pit(*this, "pit") 40 , m_cassette(*this, "cassette") 41 , m_fdd(*this, "fd%u", 0U) 42 , m_ram(*this, RAM_TAG) 43 , m_vram(*this, "videoram") 44 , m_rom(*this, "maincpu") 45 , m_mram(*this, "mainram") 46 , m_bank1(*this, "bank1") 47 , m_bank2(*this, "bank2") 48 , m_bank3(*this, "bank3") 49 , m_bank4(*this, "bank4") 50 , m_bank5(*this, "bank5") 51 , m_bank6(*this, "bank6") 52 , m_io_keyboard(*this, "LINE%u", 0U) 53 , m_palette(*this, "palette") 54 , m_pit_timer(*this, "pit_timer") 55 { } 56 57 void special(machine_config &config); 58 void erik(machine_config &config); 59 void specimx(machine_config &config); 60 void specialp(machine_config &config); 61 void specialm(machine_config &config); 62 63 void init_erik(); 64 void init_special(); 65 66 private: 67 // specimx 68 void specimx_select_bank(offs_t offset, uint8_t data); 69 void video_memory_w(offs_t offset, uint8_t data); 70 void specimx_video_color_w(uint8_t data); 71 uint8_t specimx_video_color_r(); 72 uint8_t specimx_disk_ctrl_r(); 73 void specimx_disk_ctrl_w(offs_t offset, uint8_t data); 74 uint8_t specimx_portb_r(); 75 void specimx_portc_w(uint8_t data); 76 void specimx_set_bank(offs_t i, uint8_t data); 77 // erik 78 uint8_t erik_rr_reg_r(); 79 void erik_rr_reg_w(uint8_t data); 80 uint8_t erik_rc_reg_r(); 81 void erik_rc_reg_w(uint8_t data); 82 uint8_t erik_disk_reg_r(); 83 void erik_disk_reg_w(uint8_t data); 84 void erik_set_bank(); 85 // special 86 u8 kbd_r(); 87 uint8_t porta_r(); 88 uint8_t portb_r(); 89 uint8_t portc_r(); 90 void porta_w(uint8_t data); 91 void portb_w(uint8_t data); 92 void portc_w(uint8_t data); 93 TIMER_DEVICE_CALLBACK_MEMBER(pit_timer); 94 95 void erik_palette(palette_device &palette) const; 96 void specimx_palette(palette_device &palette) const; 97 uint32_t screen_update_special(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 98 uint32_t screen_update_erik(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 99 uint32_t screen_update_specialp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 100 uint32_t screen_update_specimx(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 101 DECLARE_WRITE_LINE_MEMBER(fdc_drq); 102 DECLARE_FLOPPY_FORMATS( specimx_floppy_formats ); 103 void machine_start() override; 104 void machine_reset() override; 105 106 void erik_io(address_map &map); 107 void erik_mem(address_map &map); 108 void specialist_mem(address_map &map); 109 void specialp_mem(address_map &map); 110 void specimx_mem(address_map &map); 111 112 std::unique_ptr<uint8_t[]> m_specimx_colorram; 113 uint8_t m_erik_color_1; 114 uint8_t m_erik_color_2; 115 uint8_t m_erik_background; 116 uint8_t m_specimx_color; 117 u8 m_porta; 118 u8 m_portb; 119 u8 m_portc; 120 uint8_t m_RR_register; 121 uint8_t m_RC_register; 122 u8 m_drive; 123 required_device<cpu_device> m_maincpu; 124 optional_device<i8255_device> m_ppi; 125 optional_device<fd1793_device> m_fdc; 126 optional_device<dac_bit_interface> m_dac; 127 optional_device<pit8253_device> m_pit; 128 optional_device<cassette_image_device> m_cassette; 129 optional_device_array<floppy_connector, 2> m_fdd; 130 optional_device<ram_device> m_ram; 131 optional_shared_ptr<uint8_t> m_vram; 132 required_region_ptr<u8> m_rom; 133 optional_shared_ptr<u8> m_mram; 134 required_memory_bank m_bank1; 135 optional_memory_bank m_bank2; 136 optional_memory_bank m_bank3; 137 optional_memory_bank m_bank4; 138 optional_memory_bank m_bank5; 139 optional_memory_bank m_bank6; 140 required_ioport_array<13> m_io_keyboard; 141 required_device<palette_device> m_palette; 142 optional_device<timer_device> m_pit_timer; // specimx only 143 }; 144 145 #endif // MAME_INCLUDES_SPECIAL_H 146