1 // license:BSD-3-Clause
2 // copyright-holders:R. Belmont
3 /*****************************************************************************
4  *
5  * includes/macpci.h
6  *
7  * PCI-based Power Macintosh driver declarations
8  *
9  ****************************************************************************/
10 
11 #ifndef MAME_INCLUDES_MACPCI_H
12 #define MAME_INCLUDES_MACPCI_H
13 
14 #include "machine/8530scc.h"
15 #include "machine/6522via.h"
16 #include "machine/ram.h"
17 #include "machine/cuda.h"
18 #include "machine/ncr539x.h"
19 #include "sound/awacs.h"
20 
21 #define C7M     (7833600)
22 #define C15M    (C7M*2)
23 
24 #define MAC_SCREEN_NAME "screen"
25 #define MAC_539X_1_TAG "539x_1"
26 #define MAC_539X_2_TAG "539x_2"
27 
28 /* Mac driver data */
29 
30 class macpci_state : public driver_device
31 {
32 public:
macpci_state(const machine_config & mconfig,device_type type,const char * tag)33 	macpci_state(const machine_config &mconfig, device_type type, const char *tag) :
34 		driver_device(mconfig, type, tag),
35 		m_maincpu(*this, "maincpu"),
36 		m_via1(*this, "via6522_0"),
37 		m_awacs(*this, "awacs"),
38 		m_cuda(*this, CUDA_TAG),
39 		m_ram(*this, RAM_TAG),
40 		m_scc(*this, "scc"),
41 		m_539x_1(*this, MAC_539X_1_TAG),
42 		m_539x_2(*this, MAC_539X_2_TAG)
43 	{ }
44 
45 	void pippin(machine_config &config);
46 
47 private:
48 	required_device<cpu_device> m_maincpu;
49 	required_device<via6522_device> m_via1;
50 	optional_device<awacs_device> m_awacs;
51 	required_device<cuda_device> m_cuda;
52 	required_device<ram_device> m_ram;
53 	optional_device<scc8530_legacy_device> m_scc;
54 	optional_device<ncr539x_device> m_539x_1;
55 	optional_device<ncr539x_device> m_539x_2;
56 
57 	virtual void machine_start() override;
58 	virtual void machine_reset() override;
59 
60 	/* tells which model is being emulated (set by macxxx_init) */
61 	enum model_t
62 	{
63 		PCIMODEL_MAC_PM5200,
64 		PCIMODEL_MAC_PM6200,
65 		PCIMODEL_MAC_PM5300,
66 		PCIMODEL_MAC_PM7200,
67 		PCIMODEL_MAC_PM7500,
68 		PCIMODEL_MAC_PM8500,
69 		PCIMODEL_MAC_PM9500,
70 		PCIMODEL_MAC_PM7215,
71 		PCIMODEL_MAC_PM5260,
72 		PCIMODEL_MAC_PM5400,
73 		PCIMODEL_MAC_PM7600,
74 		PCIMODEL_MAC_PM8200,
75 		PCIMODEL_MAC_PM6300,
76 		PCIMODEL_MAC_PM6400,
77 		PCIMODEL_MAC_PM4400,
78 		PCIMODEL_MAC_PM5500,
79 		PCIMODEL_MAC_PM7220,
80 		PCIMODEL_MAC_PM7300,
81 		PCIMODEL_MAC_PM6500,
82 		PCIMODEL_MAC_PM8600,
83 		PCIMODEL_MAC_PM9600,
84 
85 		PCIMODEL_MAC_20TH,
86 
87 		PCIMODEL_MAC_G3_GOSSAMER,
88 		PCIMODEL_MAC_G3_ALLINONE,
89 
90 		PCIMODEL_MAC_PB5x0PPC,
91 		PCIMODEL_MAC_PB1400,
92 		PCIMODEL_MAC_PB2300,
93 		PCIMODEL_MAC_PB2400,
94 		PCIMODEL_MAC_PB3400,
95 		PCIMODEL_MAC_PB5300,
96 
97 		PCIMODEL_MAC_PBG3KANGA,
98 		PCIMODEL_MAC_PBG3WALLST1,
99 		PCIMODEL_MAC_PBG3WALLST2,
100 
101 		PCIMODEL_MAC_PIPPIN    // Apple/Bandai Pippin
102 
103 	};
104 
105 	model_t m_model;
106 
107 	// 60.15 Hz timer for RBV/V8/Sonora/Eagle/VASP/etc.
108 	emu_timer *m_6015_timer;
109 
110 	// RBV and friends (V8, etc)
111 	uint8_t m_rbv_regs[256], m_rbv_ier, m_rbv_ifr, m_rbv_type, m_rbv_montype, m_rbv_vbltime;
112 	uint32_t m_rbv_colors[3], m_rbv_count, m_rbv_clutoffs, m_rbv_immed10wr;
113 	uint32_t m_rbv_palette[256];
114 	uint8_t m_sonora_vctl[8];
115 	emu_timer *m_vbl_timer, *m_cursor_timer;
116 	uint16_t m_cursor_line;
117 	uint16_t m_dafb_int_status;
118 	int m_dafb_scsi1_drq, m_dafb_scsi2_drq;
119 	uint8_t m_dafb_mode;
120 	uint32_t m_dafb_base, m_dafb_stride;
121 
122 	// this is shared among all video setups with vram
123 	uint32_t *m_vram;
124 
125 	uint16_t mac_via_r(offs_t offset);
126 	void mac_via_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
127 	uint16_t mac_scc_r(offs_t offset);
128 	void mac_scc_w(offs_t offset, uint16_t data);
129 	void mac_scc_2_w(offs_t offset, uint16_t data);
130 
131 	uint32_t mac_read_id();
132 
133 	uint8_t mac_5396_r(offs_t offset);
134 	void mac_5396_w(offs_t offset, uint8_t data);
135 
136 	DECLARE_WRITE_LINE_MEMBER(irq_539x_1_w);
137 	DECLARE_WRITE_LINE_MEMBER(drq_539x_1_w);
138 
139 	DECLARE_WRITE_LINE_MEMBER(cuda_reset_w);
140 	DECLARE_WRITE_LINE_MEMBER(cuda_adb_linechange_w);
141 
142 	// hack functions
143 	uint64_t unk1_r();
144 	uint64_t unk2_r(offs_t offset, uint64_t mem_mask = ~0);
145 
146 	void init_pippin();
147 	void pippin_mem(address_map &map);
148 	void cdmcu_mem(address_map &map);
149 	// wait states for accessing the VIA
150 	int m_via_cycles;
151 
152 	// hack
153 	uint16_t m_unk1_test;
154 
155 	emu_timer *m_scanline_timer;
156 	uint32_t screen_update_pippin(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
157 	TIMER_CALLBACK_MEMBER(mac_6015_tick);
158 	uint8_t mac_via_in_a();
159 	uint8_t mac_via_in_b();
160 	void mac_via_out_a(uint8_t data);
161 	void mac_via_out_b(uint8_t data);
162 	DECLARE_READ_LINE_MEMBER(mac_adb_via_in_cb2);
163 	DECLARE_WRITE_LINE_MEMBER(mac_adb_via_out_cb2);
164 	DECLARE_WRITE_LINE_MEMBER(mac_via_irq);
165 	void mac_driver_init(model_t model);
166 };
167 
168 #endif // MAME_INCLUDES_MACPCI_H
169