diff options
Diffstat (limited to 'src/devices/bus/a2bus/pc_xporter.cpp')
-rw-r--r-- | src/devices/bus/a2bus/pc_xporter.cpp | 120 |
1 files changed, 115 insertions, 5 deletions
diff --git a/src/devices/bus/a2bus/pc_xporter.cpp b/src/devices/bus/a2bus/pc_xporter.cpp index 1cfa36797d6..06a87cc1820 100644 --- a/src/devices/bus/a2bus/pc_xporter.cpp +++ b/src/devices/bus/a2bus/pc_xporter.cpp @@ -79,17 +79,118 @@ #include "emu.h" #include "pc_xporter.h" + +#include "bus/isa/isa.h" +#include "bus/isa/isa_cards.h" +#include "bus/pc_kbd/keyboards.h" +#include "bus/pc_kbd/pc_kbdc.h" +#include "cpu/nec/nec.h" +#include "machine/am9517a.h" +#include "machine/i8255.h" +#include "machine/ins8250.h" +#include "machine/pic8259.h" +#include "machine/pit8253.h" +#include "sound/spkrdev.h" + #include "speaker.h" -/*************************************************************************** - PARAMETERS -***************************************************************************/ + +namespace { //************************************************************************** -// GLOBAL VARIABLES +// TYPE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(A2BUS_PCXPORTER, a2bus_pcxporter_device, "a2pcxport", "Applied Engineering PC Transporter") +class a2bus_pcxporter_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_pcxporter_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + [[maybe_unused]] uint16_t pc_bios_r(offs_t offset); // TODO: hook up to something? + +protected: + a2bus_pcxporter_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + virtual void write_cnxx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_c800(uint16_t offset) override; + virtual void write_c800(uint16_t offset, uint8_t data) override; + +private: + required_device<v30_device> m_v30; + required_device<pic8259_device> m_pic8259; + required_device<am9517a_device> m_dma8237; + required_device<pit8253_device> m_pit8253; + required_device<speaker_sound_device> m_speaker; + required_device<isa8_device> m_isabus; + optional_device<pc_kbdc_device> m_pc_kbdc; + + uint8_t m_u73_q2; + uint8_t m_out1; + int m_dma_channel; + uint8_t m_dma_offset[4]; + uint8_t m_pc_spkrdata; + uint8_t m_pit_out2; + bool m_cur_eop; + + uint8_t m_nmi_enabled; + + uint8_t m_ram[768*1024]; + uint8_t m_c800_ram[0x400]; + uint8_t m_regs[0x400]; + uint32_t m_offset; + address_space *m_pcmem_space, *m_pcio_space; + bool m_reset_during_halt; + + uint8_t m_6845_reg; + + // interface to the keyboard + DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ); + DECLARE_WRITE_LINE_MEMBER( keyboard_data_w ); + + DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out1_changed ); + DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out2_changed ); + + DECLARE_WRITE_LINE_MEMBER( pc_dma_hrq_changed ); + DECLARE_WRITE_LINE_MEMBER( pc_dma8237_out_eop ); + uint8_t pc_dma_read_byte(offs_t offset); + void pc_dma_write_byte(offs_t offset, uint8_t data); + uint8_t pc_dma8237_1_dack_r(); + uint8_t pc_dma8237_2_dack_r(); + uint8_t pc_dma8237_3_dack_r(); + void pc_dma8237_1_dack_w(uint8_t data); + void pc_dma8237_2_dack_w(uint8_t data); + void pc_dma8237_3_dack_w(uint8_t data); + void pc_dma8237_0_dack_w(uint8_t data); + DECLARE_WRITE_LINE_MEMBER( pc_dack0_w ); + DECLARE_WRITE_LINE_MEMBER( pc_dack1_w ); + DECLARE_WRITE_LINE_MEMBER( pc_dack2_w ); + DECLARE_WRITE_LINE_MEMBER( pc_dack3_w ); + + uint8_t kbd_6502_r(offs_t offset); + void kbd_6502_w(offs_t offset, uint8_t data); + + [[maybe_unused]] DECLARE_WRITE_LINE_MEMBER( pc_speaker_set_spkrdata ); // TODO: hook up to something? + + void pc_page_w(offs_t offset, uint8_t data); + void nmi_enable_w(uint8_t data); + [[maybe_unused]] DECLARE_WRITE_LINE_MEMBER(iochck_w); // TODO: hook up to something? + + void pc_select_dma_channel(int channel, bool state); + + void pc_io(address_map &map); + void pc_map(address_map &map); +}; void a2bus_pcxporter_device::pc_map(address_map &map) { @@ -641,3 +742,12 @@ WRITE_LINE_MEMBER( a2bus_pcxporter_device::iochck_w ) if (m_nmi_enabled && !state) m_v30->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); } + +} // anonymous namespace + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_PCXPORTER, device_a2bus_card_interface, a2bus_pcxporter_device, "a2pcxport", "Applied Engineering PC Transporter") |