1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #ifndef MAME_INCLUDES_TEK405X_H 4 #define MAME_INCLUDES_TEK405X_H 5 6 #pragma once 7 8 #include "bus/generic/carts.h" 9 #include "bus/generic/slot.h" 10 #include "bus/ieee488/ieee488.h" 11 12 #include "cpu/m6800/m6800.h" 13 14 #include "machine/6821pia.h" 15 #include "machine/6850acia.h" 16 #include "machine/clock.h" 17 #include "machine/ram.h" 18 #include "machine/timer.h" 19 20 #include "sound/spkrdev.h" 21 22 #include "video/vector.h" 23 24 #include "emupal.h" 25 26 27 #define MC6800_TAG "u61" 28 #define MC6820_Y_TAG "u561" 29 #define MC6820_X_TAG "u565" 30 #define MC6820_TAPE_TAG "u361" 31 #define MC6820_KB_TAG "u461" 32 #define MC6820_GPIB_TAG "u265" 33 #define MC6820_COM_TAG "u5" 34 #define MC6850_TAG "u25" 35 #define RS232_TAG "rs232" 36 #define SCREEN_TAG "screen" 37 38 #define AM2901A_TAG "am2901a" 39 40 class tek4051_state : public driver_device 41 { 42 public: tek4051_state(const machine_config & mconfig,device_type type,const char * tag)43 tek4051_state(const machine_config &mconfig, device_type type, const char *tag) : 44 driver_device(mconfig, type, tag), 45 m_maincpu(*this, MC6800_TAG), 46 m_gpib_pia(*this, MC6820_GPIB_TAG), 47 m_com_pia(*this, MC6820_COM_TAG), 48 m_acia(*this, MC6850_TAG), 49 m_acia_clock(*this, "acia_clock"), 50 m_gpib(*this, IEEE488_TAG), 51 m_speaker(*this, "speaker"), 52 m_ram(*this, RAM_TAG), 53 m_rom(*this, MC6800_TAG), 54 m_bsofl_rom(*this, "020_0147_00"), 55 m_bscom_rom(*this, "021_0188_00"), 56 m_special(*this, "SPECIAL"), 57 m_lamps(*this, "lamp%u", 1U) 58 { } 59 60 void tek4051(machine_config &config); 61 62 private: 63 void bankswitch(uint8_t data); 64 void update_irq(); 65 void update_nmi(); 66 void scan_keyboard(); 67 68 void lbs_w(uint8_t data); 69 70 uint8_t x_pia_pa_r(); 71 void x_pia_pa_w(uint8_t data); 72 void x_pia_pb_w(uint8_t data); 73 DECLARE_WRITE_LINE_MEMBER( adot_w ); 74 DECLARE_WRITE_LINE_MEMBER( bufclk_w ); 75 DECLARE_WRITE_LINE_MEMBER( x_pia_irqa_w ); 76 DECLARE_WRITE_LINE_MEMBER( x_pia_irqb_w ); 77 78 uint8_t sa_r(); 79 void y_pia_pa_w(uint8_t data); 80 void sb_w(uint8_t data); 81 DECLARE_WRITE_LINE_MEMBER( sot_w ); 82 DECLARE_WRITE_LINE_MEMBER( y_pia_irqa_w ); 83 DECLARE_WRITE_LINE_MEMBER( y_pia_irqb_w ); 84 85 uint8_t kb_pia_pa_r(); 86 uint8_t kb_pia_pb_r(); 87 void kb_pia_pb_w(uint8_t data); 88 DECLARE_WRITE_LINE_MEMBER( kb_halt_w ); 89 DECLARE_WRITE_LINE_MEMBER( kb_pia_irqa_w ); 90 DECLARE_WRITE_LINE_MEMBER( kb_pia_irqb_w ); 91 92 uint8_t tape_pia_pa_r(); 93 void tape_pia_pa_w(uint8_t data); 94 void tape_pia_pb_w(uint8_t data); 95 DECLARE_WRITE_LINE_MEMBER( tape_pia_irqa_w ); 96 DECLARE_WRITE_LINE_MEMBER( tape_pia_irqb_w ); 97 98 void dio_w(uint8_t data); 99 uint8_t gpib_pia_pb_r(); 100 void gpib_pia_pb_w(uint8_t data); 101 DECLARE_WRITE_LINE_MEMBER( talk_w ); 102 DECLARE_WRITE_LINE_MEMBER( gpib_pia_irqa_w ); 103 DECLARE_WRITE_LINE_MEMBER( gpib_pia_irqb_w ); 104 105 void com_pia_pa_w(uint8_t data); 106 uint8_t com_pia_pb_r(); 107 void com_pia_pb_w(uint8_t data); 108 DECLARE_WRITE_LINE_MEMBER( com_pia_irqa_w ); 109 DECLARE_WRITE_LINE_MEMBER( com_pia_irqb_w ); 110 DECLARE_WRITE_LINE_MEMBER( acia_irq_w ); 111 DECLARE_WRITE_LINE_MEMBER( write_acia_clock ); 112 113 TIMER_DEVICE_CALLBACK_MEMBER(keyboard_tick); 114 void tek4051_mem(address_map &map); 115 116 virtual void machine_start() override; 117 virtual void video_start() override; 118 119 required_device<cpu_device> m_maincpu; 120 required_device<pia6821_device> m_gpib_pia; 121 required_device<pia6821_device> m_com_pia; 122 required_device<acia6850_device> m_acia; 123 required_device<clock_device> m_acia_clock; 124 required_device<ieee488_device> m_gpib; 125 required_device<speaker_sound_device> m_speaker; 126 required_device<ram_device> m_ram; 127 required_memory_region m_rom; 128 required_memory_region m_bsofl_rom; 129 required_memory_region m_bscom_rom; 130 required_ioport m_special; 131 output_finder<3> m_lamps; 132 133 // interrupts 134 int m_x_pia_irqa; 135 int m_x_pia_irqb; 136 int m_y_pia_irqa; 137 int m_y_pia_irqb; 138 int m_tape_pia_irqa; 139 int m_tape_pia_irqb; 140 int m_kb_pia_irqa; 141 int m_kb_pia_irqb; 142 int m_gpib_pia_irqa; 143 int m_gpib_pia_irqb; 144 int m_com_pia_irqa; 145 int m_com_pia_irqb; 146 int m_acia_irq; 147 148 // keyboard 149 int m_kc; 150 151 // GPIB 152 int m_talk; 153 }; 154 155 class tek4052_state : public driver_device 156 { 157 public: tek4052_state(const machine_config & mconfig,device_type type,const char * tag)158 tek4052_state(const machine_config &mconfig, device_type type, const char *tag) : 159 driver_device(mconfig, type, tag), 160 m_maincpu(*this, AM2901A_TAG), 161 m_ram(*this, RAM_TAG) 162 { } 163 164 void tek4052(machine_config &config); 165 166 private: 167 void tek4052_mem(address_map &map); 168 169 virtual void machine_start() override; 170 virtual void video_start() override; 171 172 required_device<cpu_device> m_maincpu; 173 required_device<ram_device> m_ram; 174 }; 175 176 #endif // MAME_INCLUDES_TEK405X_H 177