1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #ifndef MAME_INCLUDES_KYOCERA_H 4 #define MAME_INCLUDES_KYOCERA_H 5 6 #pragma once 7 8 #include "cpu/i8085/i8085.h" 9 #include "imagedev/cassette.h" 10 #include "machine/buffer.h" 11 #include "machine/i8155.h" 12 #include "machine/i8251.h" 13 #include "machine/im6402.h" 14 #include "machine/ram.h" 15 #include "machine/rp5c01.h" 16 #include "machine/timer.h" 17 #include "machine/upd1990a.h" 18 #include "sound/spkrdev.h" 19 #include "video/hd44102.h" 20 #include "video/hd61830.h" 21 22 #include "bus/generic/slot.h" 23 #include "bus/generic/carts.h" 24 #include "bus/centronics/ctronics.h" 25 #include "bus/rs232/rs232.h" 26 27 #include "emupal.h" 28 #include "rendlay.h" 29 30 31 #define SCREEN_TAG "screen" 32 #define I8085_TAG "m19" 33 #define I8155_TAG "m25" 34 #define UPD1990A_TAG "m18" 35 #define IM6402_TAG "m22" 36 #define MC14412_TAG "m31" 37 #define CENTRONICS_TAG "centronics" 38 #define RS232_TAG "rs232" 39 40 //#define I8085_TAG "m19" 41 //#define I8155_TAG "m12" 42 //#define MC14412_TAG "m8" 43 #define RP5C01A_TAG "m301" 44 #define TCM5089_TAG "m11" 45 #define I8251_TAG "m20" 46 #define HD61830_TAG "m18" 47 48 class kc85_state : public driver_device 49 { 50 public: kc85_state(const machine_config & mconfig,device_type type,const char * tag)51 kc85_state(const machine_config &mconfig, device_type type, const char *tag) : 52 driver_device(mconfig, type, tag), 53 m_maincpu(*this, I8085_TAG), 54 m_rtc(*this, UPD1990A_TAG), 55 m_uart(*this, IM6402_TAG), 56 m_lcdc(*this, "m%u", 0U), 57 m_centronics(*this, CENTRONICS_TAG), 58 m_speaker(*this, "speaker"), 59 m_cassette(*this, "cassette"), 60 m_opt_cart(*this, "opt_cartslot"), 61 m_ram(*this, RAM_TAG), 62 m_rs232(*this, RS232_TAG), 63 m_rom(*this, I8085_TAG), 64 m_y(*this, "Y%u", 0U), 65 m_battery(*this, "BATTERY") 66 { } 67 68 void kc85(machine_config &config); 69 void kc85_video(machine_config &config); 70 71 protected: 72 DECLARE_WRITE_LINE_MEMBER(kc85_sod_w); 73 DECLARE_READ_LINE_MEMBER(kc85_sid_r); 74 75 void i8155_pa_w(uint8_t data); 76 void i8155_pb_w(uint8_t data); 77 uint8_t i8155_pc_r(); 78 79 DECLARE_WRITE_LINE_MEMBER( i8155_to_w ); 80 DECLARE_WRITE_LINE_MEMBER( write_centronics_busy ); 81 DECLARE_WRITE_LINE_MEMBER( write_centronics_select ); 82 83 required_device<i8085a_cpu_device> m_maincpu; 84 required_device<upd1990a_device> m_rtc; 85 optional_device<im6402_device> m_uart; 86 required_device_array<hd44102_device, 10> m_lcdc; 87 required_device<centronics_device> m_centronics; 88 required_device<speaker_sound_device> m_speaker; 89 required_device<cassette_image_device> m_cassette; 90 required_device<generic_slot_device> m_opt_cart; 91 required_device<ram_device> m_ram; 92 required_device<rs232_port_device> m_rs232; 93 required_memory_region m_rom; 94 required_ioport_array<9> m_y; 95 required_ioport m_battery; 96 97 virtual void machine_start() override; 98 memory_region *m_opt_region; 99 100 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 101 102 uint8_t uart_r(); 103 uint8_t uart_status_r(); 104 void uart_ctrl_w(uint8_t data); 105 void modem_w(uint8_t data); 106 void ctrl_w(uint8_t data); 107 uint8_t keyboard_r(); 108 uint8_t lcd_r(offs_t offset); 109 void lcd_w(offs_t offset, uint8_t data); 110 111 /* memory state */ 112 uint8_t m_bank; /* memory bank selection */ 113 114 /* keyboard state */ 115 uint16_t m_keylatch; /* keyboard latch */ 116 117 /* sound state */ 118 int m_buzzer; /* buzzer select */ 119 int m_bell; /* bell output */ 120 121 int m_centronics_busy; 122 int m_centronics_select; 123 124 void kc85_palette(palette_device &palette) const; 125 void kc85_io(address_map &map); 126 void kc85_mem(address_map &map); 127 void trsm100_io(address_map &map); 128 }; 129 130 class trsm100_state : public kc85_state 131 { 132 public: trsm100_state(const machine_config & mconfig,device_type type,const char * tag)133 trsm100_state(const machine_config &mconfig, device_type type, const char *tag) : 134 kc85_state(mconfig, type, tag) 135 { } 136 137 void trsm100(machine_config &config); 138 void tandy102(machine_config &config); 139 140 private: 141 virtual void machine_start() override; 142 }; 143 144 class pc8201_state : public kc85_state 145 { 146 public: pc8201_state(const machine_config & mconfig,device_type type,const char * tag)147 pc8201_state(const machine_config &mconfig, device_type type, const char *tag) : 148 kc85_state(mconfig, type, tag), 149 m_cas_cart(*this, "cas_cartslot") 150 { } 151 152 void pc8300(machine_config &config); 153 void pc8201(machine_config &config); 154 155 private: 156 virtual void machine_start() override; 157 required_device<generic_slot_device> m_cas_cart; 158 159 uint8_t bank_r(); 160 void bank_w(uint8_t data); 161 void scp_w(uint8_t data); 162 uint8_t uart_status_r(); 163 void romah_w(uint8_t data); 164 void romal_w(uint8_t data); 165 void romam_w(uint8_t data); 166 uint8_t romrd_r(); 167 168 void bankswitch(uint8_t data); 169 170 // ROM cassette 171 int m_rom_sel; 172 uint32_t m_rom_addr; 173 174 /* peripheral state */ 175 int m_iosel; /* serial interface select */ 176 void pc8201_io(address_map &map); 177 void pc8201_mem(address_map &map); 178 }; 179 180 class tandy200_state : public driver_device 181 { 182 public: tandy200_state(const machine_config & mconfig,device_type type,const char * tag)183 tandy200_state(const machine_config &mconfig, device_type type, const char *tag) : 184 driver_device(mconfig, type, tag), 185 m_maincpu(*this, I8085_TAG), 186 m_rtc(*this, RP5C01A_TAG), 187 m_lcdc(*this, HD61830_TAG), 188 m_centronics(*this, CENTRONICS_TAG), 189 m_cent_data_out(*this, "cent_data_out"), 190 m_speaker(*this, "speaker"), 191 m_cassette(*this, "cassette"), 192 m_opt_cart(*this, "opt_cartslot"), 193 m_ram(*this, RAM_TAG), 194 m_rs232(*this, RS232_TAG), 195 m_rom(*this, I8085_TAG), 196 m_y(*this, "Y%u", 0U) 197 { } 198 199 void tandy200(machine_config &config); 200 201 private: 202 required_device<i8085a_cpu_device> m_maincpu; 203 required_device<rp5c01_device> m_rtc; 204 required_device<hd61830_device> m_lcdc; 205 required_device<centronics_device> m_centronics; 206 required_device<output_latch_device> m_cent_data_out; 207 required_device<speaker_sound_device> m_speaker; 208 required_device<cassette_image_device> m_cassette; 209 required_device<generic_slot_device> m_opt_cart; 210 required_device<ram_device> m_ram; 211 required_device<rs232_port_device> m_rs232; 212 required_memory_region m_rom; 213 required_ioport_array<9> m_y; 214 215 virtual void machine_start() override; 216 memory_region *m_opt_region; 217 218 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 219 220 uint8_t bank_r(); 221 void bank_w(uint8_t data); 222 uint8_t stbk_r(); 223 void stbk_w(uint8_t data); 224 void i8155_pa_w(uint8_t data); 225 void i8155_pb_w(uint8_t data); 226 uint8_t i8155_pc_r(); 227 DECLARE_WRITE_LINE_MEMBER( i8155_to_w ); 228 DECLARE_WRITE_LINE_MEMBER(kc85_sod_w); 229 DECLARE_READ_LINE_MEMBER(kc85_sid_r); 230 DECLARE_WRITE_LINE_MEMBER( write_centronics_busy ); 231 DECLARE_WRITE_LINE_MEMBER( write_centronics_select ); 232 233 void tandy200_palette(palette_device &palette) const; 234 235 TIMER_DEVICE_CALLBACK_MEMBER(tandy200_tp_tick); 236 237 void bankswitch(uint8_t data); 238 239 /* memory state */ 240 uint8_t m_bank; /* memory bank selection */ 241 242 /* keyboard state */ 243 uint16_t m_keylatch; /* keyboard latch */ 244 int m_tp; /* timing pulse */ 245 246 /* sound state */ 247 int m_buzzer; /* buzzer select */ 248 int m_bell; /* bell output */ 249 250 int m_centronics_busy; 251 int m_centronics_select; 252 void tandy200_video(machine_config &config); 253 void tandy200_io(address_map &map); 254 void tandy200_lcdc(address_map &map); 255 void tandy200_mem(address_map &map); 256 }; 257 258 #endif // MAME_INCLUDES_KYOCERA_H 259