1 // license:BSD-3-Clause 2 // copyright-holders:Lee Ward, Dirk Best, Curt Coder 3 /************************************************************************* 4 5 Memotech MTX 500, MTX 512 and RS 128 6 7 *************************************************************************/ 8 9 #ifndef MAME_INCLUDES_MTX_H 10 #define MAME_INCLUDES_MTX_H 11 12 #include "imagedev/snapquik.h" 13 #include "imagedev/cassette.h" 14 #include "bus/centronics/ctronics.h" 15 #include "bus/generic/slot.h" 16 #include "bus/generic/carts.h" 17 #include "bus/mtx/exp.h" 18 #include "cpu/z80/z80.h" 19 #include "machine/z80daisy.h" 20 #include "machine/z80sio.h" 21 #include "machine/z80ctc.h" 22 #include "sound/sn76496.h" 23 #include "machine/ram.h" 24 #include "machine/timer.h" 25 26 27 class mtx_state : public driver_device 28 { 29 public: mtx_state(const machine_config & mconfig,device_type type,const char * tag)30 mtx_state(const machine_config &mconfig, device_type type, const char *tag) 31 : driver_device(mconfig, type, tag) 32 , m_cassold(0) 33 , m_maincpu(*this, "z80") 34 , m_sn(*this, "sn76489a") 35 , m_z80ctc(*this, "z80ctc") 36 , m_z80dart(*this, "z80dart") 37 , m_cassette(*this, "cassette") 38 , m_centronics(*this, "centronics") 39 , m_ram(*this, RAM_TAG) 40 , m_exp(*this, "exp") 41 , m_extrom(*this, "extrom") 42 , m_rompak(*this, "rompak") 43 { } 44 45 void rs128(machine_config &config); 46 void mtx500(machine_config &config); 47 void mtx512(machine_config &config); 48 49 protected: 50 virtual void machine_start() override; 51 virtual void machine_reset() override; 52 53 private: 54 bool m_cassold; 55 required_device<z80_device> m_maincpu; 56 required_device<sn76489a_device> m_sn; 57 required_device<z80ctc_device> m_z80ctc; 58 optional_device<z80dart_device> m_z80dart; 59 required_device<cassette_image_device> m_cassette; 60 required_device<centronics_device> m_centronics; 61 required_device<ram_device> m_ram; 62 required_device<mtx_exp_slot_device> m_exp; 63 required_device<generic_slot_device> m_extrom; 64 required_device<generic_slot_device> m_rompak; 65 66 /* keyboard state */ 67 uint8_t m_key_sense; 68 69 /* video state */ 70 uint8_t *m_video_ram; 71 uint8_t *m_attr_ram; 72 73 /* sound state */ 74 uint8_t m_sound_latch; 75 76 /* timers */ 77 device_t *m_cassette_timer; 78 79 int m_centronics_busy; 80 int m_centronics_fault; 81 int m_centronics_perror; 82 int m_centronics_select; 83 84 void mtx_subpage_w(uint8_t data); 85 void mtx_bankswitch_w(uint8_t data); 86 void mtx_sound_latch_w(uint8_t data); 87 void mtx_sense_w(uint8_t data); 88 uint8_t mtx_key_lo_r(); 89 uint8_t mtx_key_hi_r(); 90 void hrx_address_w(offs_t offset, uint8_t data); 91 uint8_t hrx_data_r(); 92 void hrx_data_w(uint8_t data); 93 uint8_t hrx_attr_r(); 94 void hrx_attr_w(uint8_t data); 95 TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick); 96 TIMER_DEVICE_CALLBACK_MEMBER(cassette_tick); 97 DECLARE_WRITE_LINE_MEMBER(ctc_trg1_w); 98 DECLARE_WRITE_LINE_MEMBER(ctc_trg2_w); 99 uint8_t mtx_strobe_r(); 100 uint8_t mtx_sound_strobe_r(); 101 void mtx_cst_w(uint8_t data); 102 void mtx_cst_motor_w(uint8_t data); 103 uint8_t mtx_prt_r(); 104 DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); 105 DECLARE_WRITE_LINE_MEMBER(write_centronics_fault); 106 DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); 107 DECLARE_WRITE_LINE_MEMBER(write_centronics_select); 108 void bankswitch(uint8_t data); 109 DECLARE_DEVICE_IMAGE_LOAD_MEMBER(extrom_load); 110 DECLARE_DEVICE_IMAGE_LOAD_MEMBER(rompak_load); 111 DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); 112 DECLARE_SNAPSHOT_LOAD_MEMBER(snapshot_cb); 113 114 void mtx_io(address_map &map); 115 void mtx_mem(address_map &map); 116 void rs128_io(address_map &map); 117 }; 118 119 #endif // MAME_INCLUDES_MTX_H 120