1 // license:GPL-2.0+ 2 // copyright-holders:Dirk Best 3 /*************************************************************************** 4 5 Commodore A2232 6 7 Zorro-II Serial Card 8 9 Provides the Amiga with 7 additional RS232 ports. 10 11 ***************************************************************************/ 12 13 #ifndef MAME_BUS_AMIGA_ZORRO_A2232_H 14 #define MAME_BUS_AMIGA_ZORRO_A2232_H 15 16 #pragma once 17 18 #include "zorro.h" 19 #include "machine/autoconfig.h" 20 #include "cpu/m6502/m65ce02.h" 21 #include "machine/input_merger.h" 22 #include "machine/mos6551.h" 23 #include "machine/mos6526.h" 24 #include "bus/rs232/rs232.h" 25 26 27 namespace bus { namespace amiga { namespace zorro { 28 29 //************************************************************************** 30 // TYPE DEFINITIONS 31 //************************************************************************** 32 33 // ======================> a2232_device 34 35 class a2232_device : public device_t, public device_zorro2_card_interface, public amiga_autoconfig 36 { 37 public: 38 // construction/destruction 39 a2232_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 40 41 // zorro slot 42 uint16_t shared_ram_r(offs_t offset, uint16_t mem_mask = ~0); 43 void shared_ram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 44 uint16_t irq_ack_r(); 45 void irq_ack_w(uint16_t data); 46 uint16_t reset_low_r(); 47 void reset_low_w(uint16_t data); 48 uint16_t irq_r(); 49 void irq_w(uint16_t data); 50 uint16_t reset_high_r(offs_t offset, uint16_t mem_mask = ~0); 51 void reset_high_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 52 53 void iocpu_map(address_map &map); 54 55 protected: 56 virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; 57 virtual void device_start() override ATTR_COLD; 58 virtual void device_reset_after_children() override; 59 60 // device_zorro2_card_interface overrides 61 virtual DECLARE_WRITE_LINE_MEMBER( cfgin_w ) override; 62 63 // amiga_autoconfig overrides 64 virtual void autoconfig_base_address(offs_t address) override; 65 66 private: 67 // cpu 68 void int2_w(uint8_t data); 69 void irq_ack8_w(uint8_t data); 70 71 // acia 72 template<int N> uint8_t acia_r(offs_t offset); 73 template<int N> void acia_w(offs_t offset, uint8_t data); 74 75 // cia 76 uint8_t cia_port_a_r(); 77 uint8_t cia_port_b_r(); 78 void cia_port_b_w(uint8_t data); 79 uint8_t cia_r(offs_t offset); 80 void cia_w(offs_t offset, uint8_t data); 81 82 // rs232 83 DECLARE_WRITE_LINE_MEMBER( rs232_1_rxd_w ); 84 DECLARE_WRITE_LINE_MEMBER( rs232_1_dcd_w ); 85 DECLARE_WRITE_LINE_MEMBER( rs232_1_cts_w ); 86 DECLARE_WRITE_LINE_MEMBER( rs232_2_dcd_w ); 87 DECLARE_WRITE_LINE_MEMBER( rs232_2_cts_w ); 88 DECLARE_WRITE_LINE_MEMBER( rs232_3_dcd_w ); 89 DECLARE_WRITE_LINE_MEMBER( rs232_3_cts_w ); 90 DECLARE_WRITE_LINE_MEMBER( rs232_4_dcd_w ); 91 DECLARE_WRITE_LINE_MEMBER( rs232_4_cts_w ); 92 DECLARE_WRITE_LINE_MEMBER( rs232_5_dcd_w ); 93 DECLARE_WRITE_LINE_MEMBER( rs232_5_cts_w ); 94 DECLARE_WRITE_LINE_MEMBER( rs232_6_dcd_w ); 95 DECLARE_WRITE_LINE_MEMBER( rs232_6_cts_w ); 96 DECLARE_WRITE_LINE_MEMBER( rs232_7_dcd_w ); 97 DECLARE_WRITE_LINE_MEMBER( rs232_7_cts_w ); 98 99 required_device<m65ce02_device> m_iocpu; 100 required_device<input_merger_device> m_ioirq; 101 required_device_array<mos6551_device, 7> m_acia; 102 required_device<mos8520_device> m_cia; 103 required_shared_ptr<uint8_t> m_shared_ram; 104 105 uint8_t m_cia_port_a; 106 uint8_t m_cia_port_b; 107 }; 108 109 } } } // namespace bus::amiga::zorro 110 111 // device type definition 112 DECLARE_DEVICE_TYPE_NS(ZORRO_A2232, bus::amiga::zorro, a2232_device) 113 114 #endif // MAME_BUS_AMIGA_ZORRO_A2232_H 115