diff options
Diffstat (limited to 'src/mame/includes/3do.h')
-rw-r--r-- | src/mame/includes/3do.h | 308 |
1 files changed, 155 insertions, 153 deletions
diff --git a/src/mame/includes/3do.h b/src/mame/includes/3do.h index 73e0901665c..90fbf3ccd05 100644 --- a/src/mame/includes/3do.h +++ b/src/mame/includes/3do.h @@ -11,132 +11,9 @@ #include "machine/nvram.h" #include "machine/timer.h" +#include "screen.h" -struct SLOW2 { - /* 03180000 - 0318003f - configuration group */ - /* 03180040 - 0318007f - diagnostic UART */ - - uint8_t cg_r_count; - uint8_t cg_w_count; - uint32_t cg_input; - uint32_t cg_output; -}; - - -struct MADAM { - uint32_t revision; /* 03300000 */ - uint32_t msysbits; /* 03300004 */ - uint32_t mctl; /* 03300008 */ - uint32_t sltime; /* 0330000c */ - uint32_t abortbits; /* 03300020 */ - uint32_t privbits; /* 03300024 */ - uint32_t statbits; /* 03300028 */ - uint32_t diag; /* 03300040 */ - - uint32_t ccobctl0; /* 03300110 */ - uint32_t ppmpc; /* 03300120 */ - - uint32_t regctl0; /* 03300130 */ - uint32_t regctl1; /* 03300134 */ - uint32_t regctl2; /* 03300138 */ - uint32_t regctl3; /* 0330013c */ - uint32_t xyposh; /* 03300140 */ - uint32_t xyposl; /* 03300144 */ - uint32_t linedxyh; /* 03300148 */ - uint32_t linedxyl; /* 0330014c */ - uint32_t dxyh; /* 03300150 */ - uint32_t dxyl; /* 03300154 */ - uint32_t ddxyh; /* 03300158 */ - uint32_t ddxyl; /* 0330015c */ - - uint32_t pip[16]; /* 03300180-033001bc (W); 03300180-033001fc (R) */ - uint32_t fence[16]; /* 03300200-0330023c (W); 03300200-0330027c (R) */ - uint32_t mmu[64]; /* 03300300-033003fc */ - uint32_t dma[32][4]; /* 03300400-033005fc */ - uint32_t mult[40]; /* 03300600-0330069c */ - uint32_t mult_control; /* 033007f0-033007f4 */ - uint32_t mult_status; /* 033007f8 */ -}; - - -struct CLIO { - screen_device *screen; - - uint32_t revision; /* 03400000 */ - uint32_t csysbits; /* 03400004 */ - uint32_t vint0; /* 03400008 */ - uint32_t vint1; /* 0340000c */ - uint32_t audin; /* 03400020 */ - uint32_t audout; /* 03400024 */ - uint32_t cstatbits; /* 03400028 */ - uint32_t wdog; /* 0340002c */ - uint32_t hcnt; /* 03400030 */ - uint32_t vcnt; /* 03400034 */ - uint32_t seed; /* 03400038 */ - uint32_t random; /* 0340004c */ - uint32_t irq0; /* 03400040 / 03400044 */ - uint32_t irq0_enable; /* 03400048 / 0340004c */ - uint32_t mode; /* 03400050 / 03400054 */ - uint32_t badbits; /* 03400058 */ - uint32_t spare; /* 0340005c */ - uint32_t irq1; /* 03400060 / 03400064 */ - uint32_t irq1_enable; /* 03400068 / 0340006c */ - uint32_t hdelay; /* 03400080 */ - uint32_t adbio; /* 03400084 */ - uint32_t adbctl; /* 03400088 */ - /* Timers */ - uint32_t timer_count[16];/* 034001** & 8 */ - uint32_t timer_backup[16]; /* 034001**+4 & 8 */ - uint64_t timer_ctrl; /* 03400200 */ - uint32_t slack; /* 03400220 */ - /* DMA */ - uint32_t dmareqdis; /* 03400308 */ - /* Expansion bus */ - uint32_t expctl; /* 03400400/03400404 */ - uint32_t type0_4; /* 03400408 */ - uint32_t dipir1; /* 03400410 */ - uint32_t dipir2; /* 03400414 */ - /* Bus signals */ - uint32_t sel; /* 03400500 - 0340053f */ - uint32_t poll; /* 03400540 - 0340057f */ - uint32_t cmdstat; /* 03400580 - 034005bf */ - uint32_t data; /* 034005c0 - 034005ff */ - /* DSPP */ - uint32_t semaphore; /* 034017d0 */ - uint32_t semaack; /* 034017d4 */ - uint32_t dsppdma; /* 034017e0 */ - uint32_t dspprst0; /* 034017e4 */ - uint32_t dspprst1; /* 034017e8 */ - uint32_t dspppc; /* 034017f4 */ - uint32_t dsppnr; /* 034017f8 */ - uint32_t dsppgw; /* 034017fc */ - uint32_t dsppn[0x400]; /* 03401800 - 03401bff DSPP N stack (32bit writes) */ - /* 03402000 - 034027ff DSPP N stack (16bit writes) */ - uint32_t dsppei[0x100]; /* 03403000 - 034030ff DSPP EI stack (32bit writes) */ - /* 03403400 - 034035ff DSPP EI stack (16bit writes) */ - uint32_t dsppeo[0x1f]; /* 03403800 - 0340381f DSPP EO stack (32bit reads) */ - /* 03403c00 - 03403c3f DSPP EO stack (32bit reads) */ - uint32_t dsppclkreload; /* 034039dc / 03403fbc */ - /* UNCLE */ - uint32_t unclerev; /* 0340c000 */ - uint32_t uncle_soft_rev; /* 0340c004 */ - uint32_t uncle_addr; /* 0340c008 */ - uint32_t uncle_rom; /* 0340c00c */ -}; - - -struct SVF { - uint32_t sport[512]; - uint32_t color; -}; - -struct DSPP { - std::unique_ptr<uint16_t[]> N; - std::unique_ptr<uint16_t[]> EI; - std::unique_ptr<uint16_t[]> EO; -}; - class _3do_state : public driver_device { public: @@ -146,13 +23,151 @@ public: m_dram(*this, "dram"), m_vram(*this, "vram"), m_nvram(*this, "nvram"), + m_screen(*this, "screen"), m_bank1(*this, "bank1"), m_bank2(*this, "bank2") { } + void _3do(machine_config &config); + void _3do_pal(machine_config &config); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + +private: + struct SLOW2 { + /* 03180000 - 0318003f - configuration group */ + /* 03180040 - 0318007f - diagnostic UART */ + + uint8_t cg_r_count; + uint8_t cg_w_count; + uint32_t cg_input; + uint32_t cg_output; + }; + + + struct MADAM { + uint32_t revision; /* 03300000 */ + uint32_t msysbits; /* 03300004 */ + uint32_t mctl; /* 03300008 */ + uint32_t sltime; /* 0330000c */ + uint32_t abortbits; /* 03300020 */ + uint32_t privbits; /* 03300024 */ + uint32_t statbits; /* 03300028 */ + uint32_t diag; /* 03300040 */ + + uint32_t ccobctl0; /* 03300110 */ + uint32_t ppmpc; /* 03300120 */ + + uint32_t regctl0; /* 03300130 */ + uint32_t regctl1; /* 03300134 */ + uint32_t regctl2; /* 03300138 */ + uint32_t regctl3; /* 0330013c */ + uint32_t xyposh; /* 03300140 */ + uint32_t xyposl; /* 03300144 */ + uint32_t linedxyh; /* 03300148 */ + uint32_t linedxyl; /* 0330014c */ + uint32_t dxyh; /* 03300150 */ + uint32_t dxyl; /* 03300154 */ + uint32_t ddxyh; /* 03300158 */ + uint32_t ddxyl; /* 0330015c */ + + uint32_t pip[16]; /* 03300180-033001bc (W); 03300180-033001fc (R) */ + uint32_t fence[16]; /* 03300200-0330023c (W); 03300200-0330027c (R) */ + uint32_t mmu[64]; /* 03300300-033003fc */ + uint32_t dma[32][4]; /* 03300400-033005fc */ + uint32_t mult[40]; /* 03300600-0330069c */ + uint32_t mult_control; /* 033007f0-033007f4 */ + uint32_t mult_status; /* 033007f8 */ + }; + + + struct CLIO { + screen_device *screen; + + uint32_t revision; /* 03400000 */ + uint32_t csysbits; /* 03400004 */ + uint32_t vint0; /* 03400008 */ + uint32_t vint1; /* 0340000c */ + uint32_t audin; /* 03400020 */ + uint32_t audout; /* 03400024 */ + uint32_t cstatbits; /* 03400028 */ + uint32_t wdog; /* 0340002c */ + uint32_t hcnt; /* 03400030 */ + uint32_t vcnt; /* 03400034 */ + uint32_t seed; /* 03400038 */ + uint32_t random; /* 0340004c */ + uint32_t irq0; /* 03400040 / 03400044 */ + uint32_t irq0_enable; /* 03400048 / 0340004c */ + uint32_t mode; /* 03400050 / 03400054 */ + uint32_t badbits; /* 03400058 */ + uint32_t spare; /* 0340005c */ + uint32_t irq1; /* 03400060 / 03400064 */ + uint32_t irq1_enable; /* 03400068 / 0340006c */ + uint32_t hdelay; /* 03400080 */ + uint32_t adbio; /* 03400084 */ + uint32_t adbctl; /* 03400088 */ + /* Timers */ + uint32_t timer_count[16];/* 034001** & 8 */ + uint32_t timer_backup[16]; /* 034001**+4 & 8 */ + uint64_t timer_ctrl; /* 03400200 */ + uint32_t slack; /* 03400220 */ + /* DMA */ + uint32_t dmareqdis; /* 03400308 */ + /* Expansion bus */ + uint32_t expctl; /* 03400400/03400404 */ + uint32_t type0_4; /* 03400408 */ + uint32_t dipir1; /* 03400410 */ + uint32_t dipir2; /* 03400414 */ + /* Bus signals */ + uint32_t sel; /* 03400500 - 0340053f */ + uint32_t poll; /* 03400540 - 0340057f */ + uint32_t cmdstat; /* 03400580 - 034005bf */ + uint32_t data; /* 034005c0 - 034005ff */ + /* DSPP */ + uint32_t semaphore; /* 034017d0 */ + uint32_t semaack; /* 034017d4 */ + uint32_t dsppdma; /* 034017e0 */ + uint32_t dspprst0; /* 034017e4 */ + uint32_t dspprst1; /* 034017e8 */ + uint32_t dspppc; /* 034017f4 */ + uint32_t dsppnr; /* 034017f8 */ + uint32_t dsppgw; /* 034017fc */ + uint32_t dsppn[0x400]; /* 03401800 - 03401bff DSPP N stack (32bit writes) */ + /* 03402000 - 034027ff DSPP N stack (16bit writes) */ + uint32_t dsppei[0x100]; /* 03403000 - 034030ff DSPP EI stack (32bit writes) */ + /* 03403400 - 034035ff DSPP EI stack (16bit writes) */ + uint32_t dsppeo[0x1f]; /* 03403800 - 0340381f DSPP EO stack (32bit reads) */ + /* 03403c00 - 03403c3f DSPP EO stack (32bit reads) */ + uint32_t dsppclkreload; /* 034039dc / 03403fbc */ + /* UNCLE */ + uint32_t unclerev; /* 0340c000 */ + uint32_t uncle_soft_rev; /* 0340c004 */ + uint32_t uncle_addr; /* 0340c008 */ + uint32_t uncle_rom; /* 0340c00c */ + }; + + + struct SVF { + uint32_t sport[512]; + uint32_t color; + }; + + struct DSPP { + std::unique_ptr<uint16_t[]> N; + std::unique_ptr<uint16_t[]> EI; + std::unique_ptr<uint16_t[]> EO; + }; + required_device<cpu_device> m_maincpu; required_shared_ptr<uint32_t> m_dram; required_shared_ptr<uint32_t> m_vram; required_device<nvram_device> m_nvram; + required_device<screen_device> m_screen; + required_memory_bank m_bank1; + required_memory_bank m_bank2; + SLOW2 m_slow2; MADAM m_madam; CLIO m_clio; @@ -161,41 +176,28 @@ public: uint8_t m_nvmem[0x8000]; // uint8_t m_video_bits[512]; - DECLARE_READ8_MEMBER(_3do_nvarea_r); - DECLARE_WRITE8_MEMBER(_3do_nvarea_w); - DECLARE_READ32_MEMBER(_3do_slow2_r); - DECLARE_WRITE32_MEMBER(_3do_slow2_w); - DECLARE_READ32_MEMBER(_3do_svf_r); - DECLARE_WRITE32_MEMBER(_3do_svf_w); - DECLARE_READ32_MEMBER(_3do_madam_r); - DECLARE_WRITE32_MEMBER(_3do_madam_w); - DECLARE_READ32_MEMBER(_3do_clio_r); - DECLARE_WRITE32_MEMBER(_3do_clio_w); - uint32_t screen_update__3do(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + DECLARE_READ8_MEMBER(nvarea_r); + DECLARE_WRITE8_MEMBER(nvarea_w); + DECLARE_READ32_MEMBER(slow2_r); + DECLARE_WRITE32_MEMBER(slow2_w); + DECLARE_READ32_MEMBER(svf_r); + DECLARE_WRITE32_MEMBER(svf_w); + DECLARE_READ32_MEMBER(madam_r); + DECLARE_WRITE32_MEMBER(madam_w); + DECLARE_READ32_MEMBER(clio_r); + DECLARE_WRITE32_MEMBER(clio_w); + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER( timer_x16_cb ); - void _3do(machine_config &config); - void _3do_pal(machine_config &config); - void _3do_mem(address_map &map); + void main_mem(address_map &map); -protected: - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; + void m_slow2_init( void ); + void m_madam_init( void ); + void m_clio_init( void ); - required_memory_bank m_bank1; - required_memory_bank m_bank2; - -private: - void m_3do_slow2_init( void ); - void m_3do_madam_init( void ); - void m_3do_clio_init( screen_device *screen ); - - void m_3do_request_fiq(uint32_t irq_req, uint8_t type); + void m_request_fiq(uint32_t irq_req, uint8_t type); }; -/*----------- defined in machine/3do.c -----------*/ - #endif // MAME_INCLUDES_3DO_H |