1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder, smf 3 /********************************************************************** 4 5 SpeedDOS / Burst Nibbler 1541/1571 Parallel Cable emulation 6 7 **********************************************************************/ 8 9 #ifndef MAME_BUS_C64_BN1541_H 10 #define MAME_BUS_C64_BN1541_H 11 12 #pragma once 13 14 15 #include "user.h" 16 17 18 19 //************************************************************************** 20 // TYPE DEFINITIONS 21 //************************************************************************** 22 23 // ======================> device_c64_floppy_parallel_interface 24 25 class device_c64_floppy_parallel_interface 26 { 27 public: 28 // construction/destruction 29 device_c64_floppy_parallel_interface(const machine_config &mconfig, device_t &device); 30 virtual ~device_c64_floppy_parallel_interface(); 31 32 virtual void parallel_data_w(uint8_t data) = 0; 33 virtual void parallel_strobe_w(int state) = 0; 34 35 device_c64_floppy_parallel_interface *m_other; 36 37 protected: 38 uint8_t m_parallel_data; 39 }; 40 41 42 // ======================> c64_bn1541_device 43 44 class c64_bn1541_device : public device_t, 45 public device_pet_user_port_interface, 46 public device_c64_floppy_parallel_interface 47 { 48 public: 49 // construction/destruction 50 c64_bn1541_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 51 52 protected: 53 // device-level overrides 54 virtual void device_start() override; 55 56 // device_c64_floppy_parallel_interface overrides 57 virtual void parallel_data_w(uint8_t data) override; 58 virtual void parallel_strobe_w(int state) override; 59 60 // device_pet_user_port_interface overrides 61 virtual DECLARE_WRITE_LINE_MEMBER(input_8) override; WRITE_LINE_MEMBER(input_c)62 virtual WRITE_LINE_MEMBER(input_c) override { if (state) m_parallel_output |= 1; else m_parallel_output &= ~1; update_output(); } WRITE_LINE_MEMBER(input_d)63 virtual WRITE_LINE_MEMBER(input_d) override { if (state) m_parallel_output |= 2; else m_parallel_output &= ~2; update_output(); } WRITE_LINE_MEMBER(input_e)64 virtual WRITE_LINE_MEMBER(input_e) override { if (state) m_parallel_output |= 4; else m_parallel_output &= ~4; update_output(); } WRITE_LINE_MEMBER(input_f)65 virtual WRITE_LINE_MEMBER(input_f) override { if (state) m_parallel_output |= 8; else m_parallel_output &= ~8; update_output(); } WRITE_LINE_MEMBER(input_h)66 virtual WRITE_LINE_MEMBER(input_h) override { if (state) m_parallel_output |= 16; else m_parallel_output &= ~16; update_output(); } WRITE_LINE_MEMBER(input_j)67 virtual WRITE_LINE_MEMBER(input_j) override { if (state) m_parallel_output |= 32; else m_parallel_output &= ~32; update_output(); } WRITE_LINE_MEMBER(input_k)68 virtual WRITE_LINE_MEMBER(input_k) override { if (state) m_parallel_output |= 64; else m_parallel_output &= ~64; update_output(); } WRITE_LINE_MEMBER(input_l)69 virtual WRITE_LINE_MEMBER(input_l) override { if (state) m_parallel_output |= 128; else m_parallel_output &= ~128; update_output(); } 70 71 private: 72 void update_output(); 73 uint8_t m_parallel_output; 74 }; 75 76 77 // device type definition 78 DECLARE_DEVICE_TYPE(C64_BN1541, c64_bn1541_device) 79 80 81 #endif // MAME_BUS_C64_BN1541_H 82