1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 4 #include "cpu/m68000/m68000.h" 5 #include "bus/centronics/ctronics.h" 6 #include "machine/i8251.h" 7 #include "machine/i8255.h" 8 #include "bus/ieee488/ieee488.h" 9 #include "imagedev/floppy.h" 10 #include "machine/pit8253.h" 11 #include "machine/pic8259.h" 12 #include "machine/ram.h" 13 #include "machine/upd765.h" 14 15 #define M68000_TAG "u68" 16 #define I8255A_0_TAG "u22" 17 #define I8255A_1_TAG "u39" 18 #define I8253_0_TAG "u74" 19 #define I8253_1_TAG "u75" 20 #define I8259_TAG "u73" 21 #define I8251_0_TAG "u58" 22 #define I8251_1_TAG "u67" 23 #define UPD765_TAG "u21" 24 #define TMS9914_TAG "u6" 25 #define CENTRONICS_TAG "centronics" 26 #define RS232_A_TAG "rs232a" 27 #define RS232_B_TAG "rs232b" 28 29 class sage2_state : public driver_device 30 { 31 public: sage2_state(const machine_config & mconfig,device_type type,const char * tag)32 sage2_state(const machine_config &mconfig, device_type type, const char *tag) 33 : driver_device(mconfig, type, tag) 34 , m_maincpu(*this, M68000_TAG) 35 , m_pic(*this, I8259_TAG) 36 , m_usart0(*this, I8251_0_TAG) 37 , m_usart1(*this, I8251_1_TAG) 38 , m_fdc(*this, UPD765_TAG) 39 , m_ram(*this, RAM_TAG) 40 , m_rom(*this, M68000_TAG) 41 , m_floppy0(*this, UPD765_TAG ":0") 42 , m_floppy1(*this, UPD765_TAG ":1") 43 , m_floppy(nullptr) 44 , m_centronics(*this, CENTRONICS_TAG) 45 , m_ieee488(*this, IEEE488_TAG) 46 , m_fdc_int(0) 47 , m_fdie(0) 48 , m_led(*this, "led0") 49 { } 50 51 void sage2(machine_config &config); 52 53 void init_sage2(); 54 55 private: 56 void update_fdc_int(); 57 58 uint16_t rom_r(offs_t offset); 59 DECLARE_WRITE_LINE_MEMBER( br1_w ); 60 DECLARE_WRITE_LINE_MEMBER( br2_w ); 61 void ppi0_pc_w(uint8_t data); 62 uint8_t ppi1_pb_r(); 63 void ppi1_pc_w(uint8_t data); 64 65 DECLARE_WRITE_LINE_MEMBER( fdc_irq ); 66 67 DECLARE_WRITE_LINE_MEMBER(write_centronics_ack); 68 DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); 69 DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); 70 DECLARE_WRITE_LINE_MEMBER(write_centronics_select); 71 DECLARE_WRITE_LINE_MEMBER(write_centronics_fault); 72 73 void sage2_mem(address_map &map); 74 75 virtual void machine_start() override; 76 virtual void machine_reset() override; 77 78 required_device<cpu_device> m_maincpu; 79 required_device<pic8259_device> m_pic; 80 required_device<i8251_device> m_usart0; 81 required_device<i8251_device> m_usart1; 82 required_device<upd765a_device> m_fdc; 83 required_device<ram_device> m_ram; 84 required_memory_region m_rom; 85 required_device<floppy_connector> m_floppy0; 86 required_device<floppy_connector> m_floppy1; 87 floppy_image_device *m_floppy; 88 required_device<centronics_device> m_centronics; 89 required_device<ieee488_device> m_ieee488; 90 91 // floppy state 92 int m_fdc_int; 93 int m_fdie; 94 95 int m_centronics_busy; 96 int m_centronics_perror; 97 int m_centronics_select; 98 int m_centronics_fault; 99 output_finder<> m_led; 100 }; 101