1 // license:BSD-3-Clause 2 // copyright-holders:Robbbert 3 //***************************************************************************** 4 5 #ifndef MAME_INCLUDES_TRS80M3_H 6 #define MAME_INCLUDES_TRS80M3_H 7 8 #pragma once 9 10 #include "bus/centronics/ctronics.h" 11 #include "cpu/z80/z80.h" 12 #include "machine/ram.h" 13 #include "machine/bankdev.h" 14 #include "imagedev/cassette.h" 15 #include "imagedev/floppy.h" 16 #include "imagedev/snapquik.h" 17 #include "machine/ay31015.h" 18 #include "machine/com8116.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 trs80m3_state : public driver_device 29 { 30 public: trs80m3_state(const machine_config & mconfig,device_type type,const char * tag)31 trs80m3_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_bankdev(*this, "bankdev") 38 , m_centronics(*this, "centronics") 39 , m_cent_data_out(*this, "cent_data_out") 40 , m_cent_status_in(*this, "cent_status_in") 41 , m_uart(*this, "uart") 42 , m_brg(*this, "brg") 43 , m_fdc(*this, "fdc") 44 , m_floppy0(*this, "fdc:0") 45 , m_floppy1(*this, "fdc:1") 46 , m_speaker(*this, "speaker") 47 , m_cassette(*this, "cassette") 48 , m_io_config(*this, "CONFIG") 49 , m_io_keyboard(*this, "LINE%u", 0) 50 , m_mainram(*this, RAM_TAG) 51 , m_m4_bank(*this, "m4_banked_mem") 52 , m_m4p_bank(*this, "m4p_banked_mem") 53 , m_32kbanks(*this, "bank%u", 0U) 54 , m_16kbank(*this, "16kbank") 55 , m_vidbank(*this, "vidbank") 56 { } 57 58 void model4p(machine_config &config); 59 void model3(machine_config &config); 60 void cp500(machine_config &config); 61 void model4(machine_config &config); 62 63 void init_trs80m3(); 64 void init_trs80m4(); 65 void init_trs80m4p(); 66 67 protected: 68 virtual void machine_start() override; 69 virtual void machine_reset() override; 70 71 private: 72 DECLARE_FLOPPY_FORMATS(floppy_formats); 73 void port_ff_w(uint8_t data); 74 void port_f4_w(uint8_t data); 75 void port_ec_w(uint8_t data); 76 void port_ea_w(uint8_t data); 77 void port_e8_w(uint8_t data); 78 void port_e4_w(uint8_t data); 79 void port_e0_w(uint8_t data); 80 void port_9c_w(uint8_t data); 81 void port_90_w(uint8_t data); 82 void port_88_w(offs_t offset, uint8_t data); 83 void port_84_w(uint8_t data); 84 uint8_t port_ff_r(); 85 uint8_t port_ec_r(); 86 uint8_t port_ea_r(); 87 uint8_t port_e8_r(); 88 uint8_t port_e4_r(); 89 uint8_t port_e0_r(); 90 uint8_t printer_r(); 91 void printer_w(uint8_t data); 92 uint8_t keyboard_r(offs_t offset); 93 uint8_t wd179x_r(); 94 uint8_t cp500_port_f4_r(); 95 96 INTERRUPT_GEN_MEMBER(rtc_interrupt); 97 INTERRUPT_GEN_MEMBER(fdc_interrupt); 98 TIMER_CALLBACK_MEMBER(cassette_data_callback); 99 DECLARE_WRITE_LINE_MEMBER(intrq_w); 100 DECLARE_WRITE_LINE_MEMBER(drq_w); 101 DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); 102 uint32_t screen_update_trs80m3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 103 104 void cp500_io(address_map &map); 105 void m3_io(address_map &map); 106 void m3_mem(address_map &map); 107 void m4_mem(address_map &map); 108 void m4p_mem(address_map &map); 109 void m4_io(address_map &map); 110 void m4p_io(address_map &map); 111 void m4_banked_mem(address_map &map); 112 void m4p_banked_mem(address_map &map); 113 114 uint8_t m_model4; 115 uint8_t m_mode; 116 uint8_t m_irq; 117 uint8_t m_mask; 118 uint8_t m_nmi_mask; 119 uint8_t m_port_ec; 120 bool m_reg_load; 121 uint8_t m_nmi_data; 122 uint8_t m_cassette_data; 123 emu_timer *m_cassette_data_timer; 124 double m_old_cassette_val; 125 uint16_t m_start_address; 126 uint8_t m_crtc_reg; 127 uint8_t m_size_store; 128 bool m_a11_flipflop; 129 uint16_t m_timeout; 130 bool m_wait; 131 bool m_drq_off; 132 bool m_intrq_off; 133 floppy_image_device *m_floppy; 134 required_device<cpu_device> m_maincpu; 135 required_memory_region m_region_maincpu; 136 required_region_ptr<u8> m_p_chargen; 137 optional_shared_ptr<u8> m_p_videoram; 138 optional_device<address_map_bank_device> m_bankdev; 139 optional_device<centronics_device> m_centronics; 140 optional_device<output_latch_device> m_cent_data_out; 141 optional_device<input_buffer_device> m_cent_status_in; 142 optional_device<ay31015_device> m_uart; 143 optional_device<com8116_device> m_brg; 144 optional_device<fd1793_device> m_fdc; 145 optional_device<floppy_connector> m_floppy0; 146 optional_device<floppy_connector> m_floppy1; 147 required_device<speaker_sound_device> m_speaker; 148 required_device<cassette_image_device> m_cassette; 149 optional_ioport m_io_config; 150 required_ioport_array<8> m_io_keyboard; 151 optional_device<ram_device> m_mainram; 152 optional_device<address_map_bank_device> m_m4_bank; 153 optional_device<address_map_bank_device> m_m4p_bank; 154 optional_memory_bank_array<2> m_32kbanks; 155 optional_memory_bank m_16kbank; 156 optional_memory_bank m_vidbank; 157 }; 158 159 #endif // MAME_INCLUDES_TRS80M3_H 160