1 // license:BSD-3-Clause 2 // copyright-holders:Juergen Buchmueller, Robbbert 3 //***************************************************************************** 4 5 #ifndef MAME_INCLUDES_TRS80_H 6 #define MAME_INCLUDES_TRS80_H 7 8 #pragma once 9 10 #include "bus/centronics/ctronics.h" 11 #include "cpu/z80/z80.h" 12 #include "machine/bankdev.h" 13 #include "imagedev/cassette.h" 14 #include "imagedev/floppy.h" 15 #include "imagedev/snapquik.h" 16 #include "machine/ay31015.h" 17 #include "machine/clock.h" 18 #include "machine/i8255.h" 19 #include "bus/rs232/rs232.h" 20 #include "machine/buffer.h" 21 #include "machine/wd_fdc.h" 22 #include "sound/spkrdev.h" 23 #include "emupal.h" 24 25 #include "formats/trs_cas.h" 26 27 28 class trs80_state : public driver_device 29 { 30 public: trs80_state(const machine_config & mconfig,device_type type,const char * tag)31 trs80_state(const machine_config &mconfig, device_type type, const char *tag) 32 : driver_device(mconfig, type, tag) 33 , m_maincpu(*this, "maincpu") 34 , m_region_maincpu(*this, "maincpu") 35 , m_p_chargen(*this, "chargen") 36 , m_p_videoram(*this, "videoram") 37 , m_p_gfxram(*this, "gfxram") // LNW80 only 38 , m_lnw_bank(*this, "lnw_banked_mem") // LNW80 only 39 , m_centronics(*this, "centronics") 40 , m_cent_data_out(*this, "cent_data_out") 41 , m_cent_status_in(*this, "cent_status_in") 42 , m_uart(*this, "uart") 43 , m_uart_clock(*this, "uart_clock") 44 , m_ppi(*this, "ppi") // Radionic only 45 , m_fdc(*this, "fdc") 46 , m_floppy0(*this, "fdc:0") 47 , m_floppy1(*this, "fdc:1") 48 , m_floppy2(*this, "fdc:2") 49 , m_floppy3(*this, "fdc:3") 50 , m_speaker(*this, "speaker") 51 , m_cassette(*this, "cassette") 52 , m_io_baud(*this, "BAUD") 53 , m_io_config(*this, "CONFIG") 54 , m_io_keyboard(*this, "LINE%u", 0) 55 { } 56 57 void sys80(machine_config &config); 58 void sys80p(machine_config &config); 59 void trs80(machine_config &config); 60 void lnw80(machine_config &config); 61 void radionic(machine_config &config); 62 void model1(machine_config &config); 63 void ht1080z(machine_config &config); 64 65 void init_trs80l2(); 66 void init_trs80(); 67 68 protected: 69 virtual void machine_start() override; 70 virtual void machine_reset() override; 71 72 private: 73 DECLARE_FLOPPY_FORMATS(floppy_formats); 74 void port_ff_w(uint8_t data); 75 void lnw80_fe_w(uint8_t data); 76 void sys80_fe_w(uint8_t data); 77 void sys80_f8_w(uint8_t data); 78 void port_ea_w(uint8_t data); 79 void port_e8_w(uint8_t data); 80 uint8_t lnw80_fe_r(); 81 uint8_t port_ff_r(); 82 uint8_t sys80_f9_r(); 83 uint8_t port_ea_r(); 84 uint8_t port_e8_r(); 85 uint8_t irq_status_r(); 86 uint8_t printer_r(); 87 void printer_w(uint8_t data); 88 void cassunit_w(uint8_t data); 89 void motor_w(uint8_t data); 90 uint8_t keyboard_r(offs_t offset); 91 uint8_t wd179x_r(); 92 93 INTERRUPT_GEN_MEMBER(rtc_interrupt); 94 INTERRUPT_GEN_MEMBER(fdc_interrupt); 95 TIMER_CALLBACK_MEMBER(cassette_data_callback); 96 DECLARE_WRITE_LINE_MEMBER(intrq_w); 97 DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); 98 DECLARE_MACHINE_RESET(lnw80); 99 void lnw80_palette(palette_device &palette) const; 100 uint32_t screen_update_trs80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 101 uint32_t screen_update_ht1080z(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 102 uint32_t screen_update_lnw80(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 103 uint32_t screen_update_radionic(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 104 105 void lnw80_io(address_map &map); 106 void lnw80_mem(address_map &map); 107 void lnw_banked_mem(address_map &map); 108 void m1_io(address_map &map); 109 void m1_mem(address_map &map); 110 void sys80_io(address_map &map); 111 void trs80_io(address_map &map); 112 void trs80_mem(address_map &map); 113 void ht1080z_io(address_map &map); 114 void radionic_mem(address_map &map); 115 116 uint8_t m_mode; 117 uint8_t m_irq; 118 uint8_t m_mask; 119 uint8_t m_tape_unit; 120 bool m_reg_load; 121 u8 m_lnw_mode; 122 bool m_cassette_data; 123 emu_timer *m_cassette_data_timer; 124 double m_old_cassette_val; 125 uint8_t m_size_store; 126 uint16_t m_timeout; 127 floppy_image_device *m_floppy; 128 required_device<cpu_device> m_maincpu; 129 required_memory_region m_region_maincpu; 130 required_region_ptr<u8> m_p_chargen; 131 optional_shared_ptr<u8> m_p_videoram; 132 optional_shared_ptr<u8> m_p_gfxram; 133 optional_device<address_map_bank_device> m_lnw_bank; 134 optional_device<centronics_device> m_centronics; 135 optional_device<output_latch_device> m_cent_data_out; 136 optional_device<input_buffer_device> m_cent_status_in; 137 optional_device<ay31015_device> m_uart; 138 optional_device<clock_device> m_uart_clock; 139 optional_device<i8255_device> m_ppi; 140 optional_device<fd1793_device> m_fdc; 141 optional_device<floppy_connector> m_floppy0; 142 optional_device<floppy_connector> m_floppy1; 143 optional_device<floppy_connector> m_floppy2; 144 optional_device<floppy_connector> m_floppy3; 145 required_device<speaker_sound_device> m_speaker; 146 required_device<cassette_image_device> m_cassette; 147 optional_ioport m_io_baud; 148 optional_ioport m_io_config; 149 required_ioport_array<8> m_io_keyboard; 150 }; 151 152 #endif // MAME_INCLUDES_TRS80_H 153