1 // license:BSD-3-Clause 2 // copyright-holders:R. Belmont 3 /********************************************************************* 4 5 a2mockingboard.h 6 7 Sweet Micro Systems Mockingboard and compatibles 8 9 *********************************************************************/ 10 11 #ifndef MAME_BUS_A2BUS_A2MOCKINGBOARD_H 12 #define MAME_BUS_A2BUS_A2MOCKINGBOARD_H 13 14 #include "a2bus.h" 15 #include "machine/6522via.h" 16 #include "sound/ay8910.h" 17 #include "sound/tms5220.h" 18 #include "sound/votrax.h" 19 20 //************************************************************************** 21 // TYPE DEFINITIONS 22 //************************************************************************** 23 24 class a2bus_ayboard_device: 25 public device_t, 26 public device_a2bus_card_interface 27 { 28 public: 29 DECLARE_WRITE_LINE_MEMBER( via1_irq_w ); 30 DECLARE_WRITE_LINE_MEMBER( via2_irq_w ); 31 void via1_out_a(uint8_t data); 32 virtual void via1_out_b(uint8_t data); 33 void via2_out_a(uint8_t data); 34 virtual void via2_out_b(uint8_t data); 35 36 protected: 37 // construction/destruction 38 a2bus_ayboard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 39 40 virtual void device_start() override; 41 virtual void device_reset() override; 42 virtual void device_add_mconfig(machine_config &config) override; 43 44 // overrides of standard a2bus slot functions read_c0nx(uint8_t offset)45 virtual uint8_t read_c0nx(uint8_t offset) override { return 0xff; } write_c0nx(uint8_t offset,uint8_t data)46 virtual void write_c0nx(uint8_t offset, uint8_t data) override { } 47 virtual uint8_t read_cnxx(uint8_t offset) override; 48 virtual void write_cnxx(uint8_t offset, uint8_t data) override; 49 50 void add_common_devices(machine_config &config); 51 52 required_device<via6522_device> m_via1; 53 required_device<via6522_device> m_via2; 54 required_device<ay8913_device> m_ay1; 55 required_device<ay8913_device> m_ay2; 56 57 uint8_t m_porta1; 58 uint8_t m_porta2; 59 }; 60 61 class a2bus_mockingboard_device : public a2bus_ayboard_device 62 { 63 public: 64 a2bus_mockingboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 65 66 virtual void via1_out_b(uint8_t data) override; 67 protected: 68 virtual void device_add_mconfig(machine_config &config) override; 69 virtual void device_reset() override; 70 71 required_device<votrax_sc01_device> m_sc01; 72 73 private: 74 DECLARE_WRITE_LINE_MEMBER(write_via1_cb2); 75 76 uint8_t m_portb1; 77 int m_last_cb2_state; 78 }; 79 80 class a2bus_phasor_device : public a2bus_ayboard_device 81 { 82 public: 83 a2bus_phasor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 84 85 void via1_out_b(uint8_t data) override; 86 void via2_out_b(uint8_t data) override; 87 88 protected: 89 virtual void device_add_mconfig(machine_config &config) override; 90 91 virtual uint8_t read_c0nx(uint8_t offset) override; 92 virtual void write_c0nx(uint8_t offset, uint8_t data) override; 93 virtual uint8_t read_cnxx(uint8_t offset) override; 94 virtual void write_cnxx(uint8_t offset, uint8_t data) override; 95 96 required_device<ay8913_device> m_ay3; 97 required_device<ay8913_device> m_ay4; 98 99 private: 100 void set_clocks(); 101 102 bool m_native; 103 }; 104 105 class a2bus_echoplus_device : public a2bus_ayboard_device 106 { 107 public: 108 a2bus_echoplus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 109 110 protected: 111 virtual void device_add_mconfig(machine_config &config) override; 112 113 virtual uint8_t read_c0nx(uint8_t offset) override; 114 virtual void write_c0nx(uint8_t offset, uint8_t data) override; 115 116 required_device<tms5220_device> m_tms; 117 }; 118 119 // device type definition 120 DECLARE_DEVICE_TYPE(A2BUS_MOCKINGBOARD, a2bus_mockingboard_device) 121 DECLARE_DEVICE_TYPE(A2BUS_PHASOR, a2bus_phasor_device) 122 DECLARE_DEVICE_TYPE(A2BUS_ECHOPLUS, a2bus_echoplus_device) 123 124 #endif // MAME_BUS_A2BUS_A2MOCKINGBOARD_H 125