// license:BSD-3-Clause // copyright-holders:R. Belmont /***************************************************************************** * * includes/macpci.h * * PCI-based Power Macintosh driver declarations * ****************************************************************************/ #ifndef MAME_INCLUDES_MACPCI_H #define MAME_INCLUDES_MACPCI_H #include "machine/8530scc.h" #include "machine/6522via.h" #include "machine/ram.h" #include "machine/cuda.h" #include "machine/ncr539x.h" #include "sound/awacs.h" #define C7M (7833600) #define C15M (C7M*2) #define MAC_SCREEN_NAME "screen" #define MAC_539X_1_TAG "539x_1" #define MAC_539X_2_TAG "539x_2" /* Mac driver data */ class macpci_state : public driver_device { public: macpci_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_via1(*this, "via6522_0"), m_awacs(*this, "awacs"), m_cuda(*this, CUDA_TAG), m_ram(*this, RAM_TAG), m_scc(*this, "scc"), m_539x_1(*this, MAC_539X_1_TAG), m_539x_2(*this, MAC_539X_2_TAG) { } void pippin(machine_config &config); private: required_device m_maincpu; required_device m_via1; optional_device m_awacs; required_device m_cuda; required_device m_ram; optional_device m_scc; optional_device m_539x_1; optional_device m_539x_2; virtual void machine_start() override; virtual void machine_reset() override; /* tells which model is being emulated (set by macxxx_init) */ enum model_t { PCIMODEL_MAC_PM5200, PCIMODEL_MAC_PM6200, PCIMODEL_MAC_PM5300, PCIMODEL_MAC_PM7200, PCIMODEL_MAC_PM7500, PCIMODEL_MAC_PM8500, PCIMODEL_MAC_PM9500, PCIMODEL_MAC_PM7215, PCIMODEL_MAC_PM5260, PCIMODEL_MAC_PM5400, PCIMODEL_MAC_PM7600, PCIMODEL_MAC_PM8200, PCIMODEL_MAC_PM6300, PCIMODEL_MAC_PM6400, PCIMODEL_MAC_PM4400, PCIMODEL_MAC_PM5500, PCIMODEL_MAC_PM7220, PCIMODEL_MAC_PM7300, PCIMODEL_MAC_PM6500, PCIMODEL_MAC_PM8600, PCIMODEL_MAC_PM9600, PCIMODEL_MAC_20TH, PCIMODEL_MAC_G3_GOSSAMER, PCIMODEL_MAC_G3_ALLINONE, PCIMODEL_MAC_PB5x0PPC, PCIMODEL_MAC_PB1400, PCIMODEL_MAC_PB2300, PCIMODEL_MAC_PB2400, PCIMODEL_MAC_PB3400, PCIMODEL_MAC_PB5300, PCIMODEL_MAC_PBG3KANGA, PCIMODEL_MAC_PBG3WALLST1, PCIMODEL_MAC_PBG3WALLST2, PCIMODEL_MAC_PIPPIN // Apple/Bandai Pippin }; model_t m_model; // 60.15 Hz timer for RBV/V8/Sonora/Eagle/VASP/etc. emu_timer *m_6015_timer; // RBV and friends (V8, etc) uint8_t m_rbv_regs[256], m_rbv_ier, m_rbv_ifr, m_rbv_type, m_rbv_montype, m_rbv_vbltime; uint32_t m_rbv_colors[3], m_rbv_count, m_rbv_clutoffs, m_rbv_immed10wr; uint32_t m_rbv_palette[256]; uint8_t m_sonora_vctl[8]; emu_timer *m_vbl_timer, *m_cursor_timer; uint16_t m_cursor_line; uint16_t m_dafb_int_status; int m_dafb_scsi1_drq, m_dafb_scsi2_drq; uint8_t m_dafb_mode; uint32_t m_dafb_base, m_dafb_stride; // this is shared among all video setups with vram uint32_t *m_vram; DECLARE_READ16_MEMBER ( mac_via_r ); DECLARE_WRITE16_MEMBER ( mac_via_w ); DECLARE_READ16_MEMBER ( mac_scc_r ); DECLARE_WRITE16_MEMBER ( mac_scc_w ); DECLARE_WRITE16_MEMBER ( mac_scc_2_w ); DECLARE_READ32_MEMBER(mac_read_id); DECLARE_READ8_MEMBER(mac_5396_r); DECLARE_WRITE8_MEMBER(mac_5396_w); DECLARE_WRITE_LINE_MEMBER(irq_539x_1_w); DECLARE_WRITE_LINE_MEMBER(drq_539x_1_w); DECLARE_WRITE_LINE_MEMBER(cuda_reset_w); DECLARE_WRITE_LINE_MEMBER(cuda_adb_linechange_w); // hack functions DECLARE_READ64_MEMBER ( unk1_r ); DECLARE_READ64_MEMBER ( unk2_r ); void init_pippin(); void pippin_mem(address_map &map); // wait states for accessing the VIA int m_via_cycles; // hack uint16_t m_unk1_test; emu_timer *m_scanline_timer; uint32_t screen_update_pippin(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(mac_6015_tick); DECLARE_READ8_MEMBER(mac_via_in_a); DECLARE_READ8_MEMBER(mac_via_in_b); DECLARE_WRITE8_MEMBER(mac_via_out_a); DECLARE_WRITE8_MEMBER(mac_via_out_b); DECLARE_READ_LINE_MEMBER(mac_adb_via_in_cb2); DECLARE_WRITE_LINE_MEMBER(mac_adb_via_out_cb2); DECLARE_WRITE_LINE_MEMBER(mac_via_irq); void mac_driver_init(model_t model); }; #endif // MAME_INCLUDES_MACPCI_H