summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/a2bus/pc_xporter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/a2bus/pc_xporter.cpp')
-rw-r--r--src/devices/bus/a2bus/pc_xporter.cpp120
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")