1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #ifndef MAME_INCLUDES_BULLET_H 4 #define MAME_INCLUDES_BULLET_H 5 6 #pragma once 7 8 #include "cpu/z80/z80.h" 9 #include "bus/centronics/ctronics.h" 10 #include "bus/scsi/scsi.h" 11 #include "imagedev/floppy.h" 12 #include "machine/ram.h" 13 #include "machine/timer.h" 14 #include "machine/wd_fdc.h" 15 #include "machine/z80ctc.h" 16 #include "machine/z80dma.h" 17 #include "machine/z80pio.h" 18 #include "machine/z80sio.h" 19 20 #define Z80_TAG "u20" 21 #define Z80CTC_TAG "u1" 22 #define Z80DMA_TAG "u50" 23 #define Z80DART_TAG "u45" 24 #define Z80PIO_TAG "z80pio" 25 #define MB8877_TAG "u55" 26 #define CENTRONICS_TAG "centronics" 27 #define SCSIBUS_TAG "scsi" 28 #define RS232_A_TAG "rs232a" 29 #define RS232_B_TAG "rs232b" 30 31 class bullet_state : public driver_device 32 { 33 public: bullet_state(const machine_config & mconfig,device_type type,const char * tag)34 bullet_state(const machine_config &mconfig, device_type type, const char *tag) 35 : driver_device(mconfig, type, tag), 36 m_maincpu(*this, Z80_TAG), 37 m_ctc(*this, Z80CTC_TAG), 38 m_dart(*this, Z80DART_TAG), 39 m_dmac(*this, Z80DMA_TAG), 40 m_fdc(*this, MB8877_TAG), 41 m_ram(*this, RAM_TAG), 42 m_floppy0(*this, MB8877_TAG":0"), 43 m_floppy1(*this, MB8877_TAG":1"), 44 m_floppy2(*this, MB8877_TAG":2"), 45 m_floppy3(*this, MB8877_TAG":3"), 46 m_floppy4(*this, MB8877_TAG":4"), 47 m_floppy5(*this, MB8877_TAG":5"), 48 m_floppy6(*this, MB8877_TAG":6"), 49 m_floppy7(*this, MB8877_TAG":7"), 50 m_floppy(nullptr), 51 m_centronics(*this, CENTRONICS_TAG), 52 m_rom(*this, Z80_TAG), 53 m_sw1(*this, "SW1"), 54 m_fdrdy(0), 55 m_exdsk_sw(false), 56 m_hdcon_sw(false) 57 { 58 } 59 60 uint8_t mreq_r(offs_t offset); 61 void mreq_w(offs_t offset, uint8_t data); 62 uint8_t info_r(); 63 uint8_t brom_r(); 64 void brom_w(uint8_t data); 65 uint8_t win_r(); 66 void wstrobe_w(uint8_t data); 67 void exdsk_w(uint8_t data); 68 void exdma_w(uint8_t data); 69 void hdcon_w(uint8_t data); 70 void segst_w(uint8_t data); 71 uint8_t dma_mreq_r(offs_t offset); 72 void dma_mreq_w(offs_t offset, uint8_t data); 73 uint8_t pio_pb_r(); 74 DECLARE_WRITE_LINE_MEMBER( dartardy_w ); 75 DECLARE_WRITE_LINE_MEMBER( dartbrdy_w ); 76 DECLARE_WRITE_LINE_MEMBER( write_centronics_busy ); 77 DECLARE_WRITE_LINE_MEMBER( write_centronics_perror ); 78 DECLARE_WRITE_LINE_MEMBER( write_centronics_select ); 79 DECLARE_WRITE_LINE_MEMBER( write_centronics_fault ); 80 DECLARE_WRITE_LINE_MEMBER( fdc_drq_w ); 81 82 TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick); 83 DECLARE_WRITE_LINE_MEMBER(dart_rxtxca_w); 84 uint8_t io_read_byte(offs_t offset); 85 void io_write_byte(offs_t offset, uint8_t data); 86 87 void bullet(machine_config &config); 88 void bullet_io(address_map &map); 89 void bullet_mem(address_map &map); 90 protected: 91 virtual void machine_start() override; 92 virtual void machine_reset() override; 93 94 void update_dma_rdy(); 95 96 required_device<z80_device> m_maincpu; 97 required_device<z80ctc_device> m_ctc; 98 required_device<z80dart_device> m_dart; 99 required_device<z80dma_device> m_dmac; 100 required_device<mb8877_device> m_fdc; 101 required_device<ram_device> m_ram; 102 required_device<floppy_connector> m_floppy0; 103 required_device<floppy_connector> m_floppy1; 104 required_device<floppy_connector> m_floppy2; 105 required_device<floppy_connector> m_floppy3; 106 required_device<floppy_connector> m_floppy4; 107 required_device<floppy_connector> m_floppy5; 108 required_device<floppy_connector> m_floppy6; 109 required_device<floppy_connector> m_floppy7; 110 floppy_image_device *m_floppy; 111 required_device<centronics_device> m_centronics; 112 required_memory_region m_rom; 113 required_ioport m_sw1; 114 115 // memory state 116 int m_segst; 117 int m_brom; 118 119 // DMA state 120 uint8_t m_exdma; 121 int m_buf; 122 bool m_fdrdy; 123 int m_dartardy; 124 int m_dartbrdy; 125 int m_winrdy; 126 int m_exrdy1; 127 int m_exrdy2; 128 bool m_exdsk_sw; 129 bool m_hdcon_sw; 130 131 int m_centronics_busy; 132 int m_centronics_perror; 133 int m_centronics_select; 134 int m_centronics_fault; 135 }; 136 137 class bulletf_state : public bullet_state 138 { 139 public: bulletf_state(const machine_config & mconfig,device_type type,const char * tag)140 bulletf_state(const machine_config &mconfig, device_type type, const char *tag) : 141 bullet_state(mconfig, type, tag), 142 m_floppy8(*this, MB8877_TAG":8"), 143 m_floppy9(*this, MB8877_TAG":9"), 144 m_scsibus(*this, SCSIBUS_TAG), 145 m_scsi_data_in(*this, "scsi_data_in"), 146 m_scsi_data_out(*this, "scsi_data_out"), 147 m_scsi_ctrl_in(*this, "scsi_ctrl_in") 148 { 149 } 150 151 uint8_t mreq_r(offs_t offset); 152 void mreq_w(offs_t offset, uint8_t data); 153 void xdma0_w(uint8_t data); 154 void xfdc_w(uint8_t data); 155 void mbank_w(uint8_t data); 156 uint8_t hwsts_r(); 157 uint8_t scsi_r(); 158 void scsi_w(uint8_t data); 159 160 uint8_t dma_mreq_r(offs_t offset); 161 void dma_mreq_w(offs_t offset, uint8_t data); 162 void pio_pa_w(uint8_t data); 163 DECLARE_WRITE_LINE_MEMBER( cstrb_w ); 164 DECLARE_WRITE_LINE_MEMBER( req_w ); 165 166 void bulletf(machine_config &config); 167 void bulletf_io(address_map &map); 168 void bulletf_mem(address_map &map); 169 protected: 170 virtual void machine_start() override; 171 virtual void machine_reset() override; 172 173 void update_dma_rdy(); 174 175 required_device<floppy_connector> m_floppy8; 176 required_device<floppy_connector> m_floppy9; 177 required_device<scsi_port_device> m_scsibus; 178 required_device<input_buffer_device> m_scsi_data_in; 179 required_device<output_latch_device> m_scsi_data_out; 180 required_device<input_buffer_device> m_scsi_ctrl_in; 181 182 int m_rome; 183 uint8_t m_xdma0; 184 uint8_t m_mbank; 185 int m_wack; 186 int m_wrdy; 187 }; 188 189 #endif // MAME_INCLUDES_BULLET_H 190