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