1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
// license:BSD-3-Clause
// copyright-holders:R. Belmont
/*********************************************************************
pc_xporter.h
Implementation of the Applied Engineering PC Transporter card
*********************************************************************/
#pragma once
#include "emu.h"
#include "a2bus.h"
#include "cpu/nec/nec.h"
#include "bus/pc_kbd/keyboards.h"
#include "machine/ins8250.h"
#include "machine/i8255.h"
#include "machine/am9517a.h"
#include "bus/isa/isa.h"
#include "bus/isa/isa_cards.h"
#include "bus/pc_kbd/pc_kbdc.h"
#include "machine/pic8259.h"
#include "machine/pit8253.h"
#include "sound/speaker.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_pcxporter_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_pcxporter_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
a2bus_pcxporter_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const override;
DECLARE_READ16_MEMBER(pc_bios_r);
required_device<v30_device> m_v30;
required_device<pic8259_device> m_pic8259;
required_device<am9517a_device> m_dma8237;
required_device<pit8253_device> m_pit8253;
optional_device<i8255_device> m_ppi8255;
required_device<speaker_sound_device> m_speaker;
required_device<isa8_device> m_isabus;
optional_device<pc_kbdc_device> m_pc_kbdc;
// overrides of standard a2bus slot functions
virtual UINT8 read_c0nx(address_space &space, UINT8 offset) override;
virtual void write_c0nx(address_space &space, UINT8 offset, UINT8 data) override;
virtual UINT8 read_cnxx(address_space &space, UINT8 offset) override;
virtual void write_cnxx(address_space &space, UINT8 offset, UINT8 data) override;
virtual UINT8 read_c800(address_space &space, UINT16 offset) override;
virtual void write_c800(address_space &space, UINT16 offset, UINT8 data) override;
UINT8 m_u73_q2;
UINT8 m_out1;
int m_dma_channel;
UINT8 m_dma_offset[4];
UINT8 m_pc_spkrdata;
UINT8 m_pit_out2;
bool m_cur_eop;
UINT8 m_nmi_enabled;
int m_ppi_portc_switch_high;
int m_ppi_speaker;
int m_ppi_keyboard_clear;
UINT8 m_ppi_keyb_clock;
UINT8 m_ppi_portb;
UINT8 m_ppi_clock_signal;
UINT8 m_ppi_data_signal;
UINT8 m_ppi_shift_register;
UINT8 m_ppi_shift_enable;
// interface to the keyboard
DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w );
DECLARE_WRITE_LINE_MEMBER( keyboard_data_w );
DECLARE_READ8_MEMBER ( pc_ppi_porta_r );
DECLARE_READ8_MEMBER ( pc_ppi_portc_r );
DECLARE_WRITE8_MEMBER( pc_ppi_portb_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 );
DECLARE_READ8_MEMBER( pc_dma_read_byte );
DECLARE_WRITE8_MEMBER( pc_dma_write_byte );
DECLARE_READ8_MEMBER( pc_dma8237_1_dack_r );
DECLARE_READ8_MEMBER( pc_dma8237_2_dack_r );
DECLARE_READ8_MEMBER( pc_dma8237_3_dack_r );
DECLARE_WRITE8_MEMBER( pc_dma8237_1_dack_w );
DECLARE_WRITE8_MEMBER( pc_dma8237_2_dack_w );
DECLARE_WRITE8_MEMBER( pc_dma8237_3_dack_w );
DECLARE_WRITE8_MEMBER( pc_dma8237_0_dack_w );
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 );
DECLARE_WRITE_LINE_MEMBER( pc_speaker_set_spkrdata );
DECLARE_WRITE8_MEMBER(pc_page_w);
DECLARE_WRITE8_MEMBER(nmi_enable_w);
protected:
virtual void device_start() override;
virtual void device_reset() override;
private:
UINT8 m_ram[768*1024];
UINT8 m_c800_ram[0x400];
UINT8 m_regs[0x400];
UINT32 m_offset;
address_space *m_pcmem_space, *m_pcio_space;
bool m_reset_during_halt;
UINT8 m_6845_reg;
void pc_select_dma_channel(int channel, bool state);
};
// device type definition
extern const device_type A2BUS_PCXPORTER;
|