1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #ifndef MAME_INCLUDES_XOR100_H 4 #define MAME_INCLUDES_XOR100_H 5 6 #pragma once 7 8 #include "bus/s100/s100.h" 9 #include "cpu/z80/z80.h" 10 #include "imagedev/floppy.h" 11 #include "machine/ram.h" 12 #include "machine/com8116.h" 13 #include "bus/centronics/ctronics.h" 14 #include "machine/i8255.h" 15 #include "machine/i8251.h" 16 #include "machine/wd_fdc.h" 17 #include "machine/z80ctc.h" 18 19 #define SCREEN_TAG "screen" 20 #define Z80_TAG "5b" 21 #define I8251_A_TAG "12b" 22 #define I8251_B_TAG "14b" 23 #define I8255A_TAG "8a" 24 #define COM5016_TAG "15c" 25 #define Z80CTC_TAG "11b" 26 #define WD1795_TAG "wd1795" 27 #define CENTRONICS_TAG "centronics" 28 #define RS232_A_TAG "rs232a" 29 #define RS232_B_TAG "rs232b" 30 #define S100_TAG "s100" 31 32 class xor100_state : public driver_device 33 { 34 public: xor100_state(const machine_config & mconfig,device_type type,const char * tag)35 xor100_state(const machine_config &mconfig, device_type type, const char *tag) 36 : driver_device(mconfig, type, tag) 37 , m_maincpu(*this, Z80_TAG) 38 , m_uart_a(*this, I8251_A_TAG) 39 , m_uart_b(*this, I8251_B_TAG) 40 , m_fdc(*this, WD1795_TAG) 41 , m_ctc(*this, Z80CTC_TAG) 42 , m_ram(*this, RAM_TAG) 43 , m_centronics(*this, CENTRONICS_TAG) 44 , m_s100(*this, S100_TAG) 45 , m_floppy0(*this, WD1795_TAG":0") 46 , m_floppy1(*this, WD1795_TAG":1") 47 , m_floppy2(*this, WD1795_TAG":2") 48 , m_floppy3(*this, WD1795_TAG":3") 49 , m_rom(*this, Z80_TAG) 50 { } 51 52 void xor100(machine_config &config); 53 54 private: 55 void mmu_w(uint8_t data); 56 void prom_toggle_w(uint8_t data); 57 uint8_t prom_disable_r(); 58 uint8_t fdc_wait_r(); 59 void fdc_dcont_w(uint8_t data); 60 void fdc_dsel_w(uint8_t data); 61 void fdc_intrq_w(bool state); 62 void fdc_drq_w(bool state); 63 64 uint8_t i8255_pc_r(); 65 DECLARE_WRITE_LINE_MEMBER(ctc_z0_w); 66 DECLARE_WRITE_LINE_MEMBER(ctc_z1_w); 67 DECLARE_WRITE_LINE_MEMBER(ctc_z2_w); 68 DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); 69 DECLARE_WRITE_LINE_MEMBER(write_centronics_select); 70 71 void xor100_io(address_map &map); 72 void xor100_mem(address_map &map); 73 74 virtual void machine_start() override; 75 virtual void machine_reset() override; 76 77 void bankswitch(); 78 void post_load(); 79 80 required_device<cpu_device> m_maincpu; 81 required_device<i8251_device> m_uart_a; 82 required_device<i8251_device> m_uart_b; 83 required_device<fd1795_device> m_fdc; 84 required_device<z80ctc_device> m_ctc; 85 required_device<ram_device> m_ram; 86 required_device<centronics_device> m_centronics; 87 required_device<s100_bus_device> m_s100; 88 required_device<floppy_connector> m_floppy0; 89 required_device<floppy_connector> m_floppy1; 90 required_device<floppy_connector> m_floppy2; 91 required_device<floppy_connector> m_floppy3; 92 required_memory_region m_rom; 93 94 // memory state 95 int m_mode; 96 int m_bank; 97 98 // floppy state 99 bool m_fdc_irq; 100 bool m_fdc_drq; 101 int m_fdc_dden; 102 103 int m_centronics_busy; 104 int m_centronics_select; 105 }; 106 107 #endif // MAME_INCLUDES_XOR100_H 108