diff options
Diffstat (limited to 'src/mame/includes/metro.h')
-rw-r--r-- | src/mame/includes/metro.h | 159 |
1 files changed, 83 insertions, 76 deletions
diff --git a/src/mame/includes/metro.h b/src/mame/includes/metro.h index 2e00a387e55..459151536d9 100644 --- a/src/mame/includes/metro.h +++ b/src/mame/includes/metro.h @@ -41,6 +41,7 @@ public: m_vram_1(*this, "vram_1"), m_vram_2(*this, "vram_2"), m_spriteram(*this, "spriteram"), + m_spriteregs(*this, "spriteregs"), m_tiletable(*this, "tiletable"), m_blitter_regs(*this, "blitter_regs"), m_scroll(*this, "scroll"), @@ -55,73 +56,6 @@ public: m_k053936_ram(*this, "k053936_ram") { } - /* devices */ - required_device<cpu_device> m_maincpu; - optional_device<cpu_device> m_audiocpu; - optional_device<okim6295_device> m_oki; - optional_device<device_t> m_ymsnd; // TODO set correct type - optional_device<es8712_device> m_essnd; - optional_device<k053936_device> m_k053936; - optional_device<eeprom_serial_93cxx_device> m_eeprom; - required_device<gfxdecode_device> m_gfxdecode; - required_device<screen_device> m_screen; - required_device<palette_device> m_palette; - optional_device<generic_latch_8_device> m_soundlatch; - - /* memory pointers */ - optional_shared_ptr<uint16_t> m_vram_0; - optional_shared_ptr<uint16_t> m_vram_1; - optional_shared_ptr<uint16_t> m_vram_2; - required_shared_ptr<uint16_t> m_spriteram; - optional_shared_ptr<uint16_t> m_tiletable; - optional_shared_ptr<uint16_t> m_blitter_regs; - optional_shared_ptr<uint16_t> m_scroll; - optional_shared_ptr<uint16_t> m_window; - optional_shared_ptr<uint16_t> m_irq_enable; - optional_shared_ptr<uint16_t> m_irq_levels; - optional_shared_ptr<uint16_t> m_irq_vectors; - optional_shared_ptr<uint16_t> m_rombank; - required_shared_ptr<uint16_t> m_videoregs; - optional_shared_ptr<uint16_t> m_screenctrl; - optional_shared_ptr<uint16_t> m_input_sel; - optional_shared_ptr<uint16_t> m_k053936_ram; - - int m_flip_screen; - - /* video-related */ - tilemap_t *m_k053936_tilemap; - int m_tilemap_scrolldx[3]; - - int m_support_8bpp; - int m_support_16x16; - int m_has_zoom; - int m_sprite_xoffs; - int m_sprite_yoffs; - int m_sprite_xoffs_dx; - emu_timer *m_blit_done_timer; - - std::unique_ptr<uint8_t[]> m_expanded_gfx1; - - /* irq_related */ - int m_vblank_bit; - int m_blitter_bit; - int m_irq_line; - uint8_t m_requested_int[8]; - emu_timer *m_mouja_irq_timer; - emu_timer *m_karatour_irq_timer; - - /* sound related */ - uint16_t m_soundstatus; - int m_porta; - int m_portb; - int m_busy_sndcpu; - bool m_essnd_gate; - - /* misc */ - int m_gakusai_oki_bank_lo; - int m_gakusai_oki_bank_hi; - - DECLARE_READ16_MEMBER(metro_irq_cause_r); DECLARE_WRITE16_MEMBER(metro_irq_cause_w); DECLARE_WRITE16_MEMBER(mouja_irq_timer_ctrl_w); @@ -158,7 +92,6 @@ public: DECLARE_WRITE16_MEMBER(metro_vram_1_w); DECLARE_WRITE16_MEMBER(metro_vram_2_w); DECLARE_WRITE16_MEMBER(metro_window_w); - void blt_write( address_space &space, const int tmap, const offs_t offs, const uint16_t data, const uint16_t mask ); DECLARE_CUSTOM_INPUT_MEMBER(custom_soundstatus_r); DECLARE_WRITE8_MEMBER(gakusai_oki_bank_hi_w); DECLARE_WRITE8_MEMBER(gakusai_oki_bank_lo_w); @@ -168,7 +101,8 @@ public: DECLARE_WRITE8_MEMBER(dokyusp_eeprom_bit_w); DECLARE_WRITE8_MEMBER(dokyusp_eeprom_reset_w); DECLARE_WRITE8_MEMBER(mouja_sound_rombank_w); - void gakusai_oki_bank_set(); + DECLARE_READ16_MEMBER(gakusai_spriteregs_r); + DECLARE_WRITE16_MEMBER(gakusai_spriteregs_w); // vmetal DECLARE_WRITE8_MEMBER(vmetal_control_w); @@ -189,7 +123,6 @@ public: TILE_GET_INFO_MEMBER(metro_k053936_get_tile_info); TILE_GET_INFO_MEMBER(metro_k053936_gstrik2_get_tile_info); TILEMAP_MAPPER_MEMBER(tilemap_scan_gstrik2); - void expand_gfx1(); DECLARE_VIDEO_START(metro_i4100); DECLARE_VIDEO_START(metro_i4220); DECLARE_VIDEO_START(metro_i4220_dx_tmap); @@ -203,19 +136,93 @@ public: INTERRUPT_GEN_MEMBER(karatour_interrupt); INTERRUPT_GEN_MEMBER(puzzlet_interrupt); TIMER_CALLBACK_MEMBER(metro_blit_done); - void update_irq_state(); IRQ_CALLBACK_MEMBER(metro_irq_callback); + DECLARE_READ_LINE_MEMBER(metro_rxd_r); + +protected: + virtual void machine_start() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + +private: + /* devices */ + required_device<cpu_device> m_maincpu; + optional_device<cpu_device> m_audiocpu; + optional_device<okim6295_device> m_oki; + optional_device<device_t> m_ymsnd; // TODO set correct type + optional_device<es8712_device> m_essnd; + optional_device<k053936_device> m_k053936; + optional_device<eeprom_serial_93cxx_device> m_eeprom; + required_device<gfxdecode_device> m_gfxdecode; + required_device<screen_device> m_screen; + required_device<palette_device> m_palette; + optional_device<generic_latch_8_device> m_soundlatch; + + /* memory pointers */ + optional_shared_ptr<uint16_t> m_vram_0; + optional_shared_ptr<uint16_t> m_vram_1; + optional_shared_ptr<uint16_t> m_vram_2; + required_shared_ptr<uint16_t> m_spriteram; + required_shared_ptr<uint16_t> m_spriteregs; + optional_shared_ptr<uint16_t> m_tiletable; + optional_shared_ptr<uint16_t> m_blitter_regs; + optional_shared_ptr<uint16_t> m_scroll; + optional_shared_ptr<uint16_t> m_window; + optional_shared_ptr<uint16_t> m_irq_enable; + optional_shared_ptr<uint16_t> m_irq_levels; + optional_shared_ptr<uint16_t> m_irq_vectors; + optional_shared_ptr<uint16_t> m_rombank; + required_shared_ptr<uint16_t> m_videoregs; + optional_shared_ptr<uint16_t> m_screenctrl; + optional_shared_ptr<uint16_t> m_input_sel; + optional_shared_ptr<uint16_t> m_k053936_ram; + + int m_flip_screen; + + /* video-related */ + tilemap_t *m_k053936_tilemap; + int m_tilemap_scrolldx[3]; + + int m_support_8bpp; + int m_support_16x16; + int m_has_zoom; + int m_sprite_xoffs; + int m_sprite_yoffs; + int m_sprite_xoffs_dx; + emu_timer *m_blit_done_timer; + + std::unique_ptr<uint8_t[]> m_expanded_gfx1; + + /* irq_related */ + int m_vblank_bit; + int m_blitter_bit; + int m_irq_line; + uint8_t m_requested_int[8]; + emu_timer *m_mouja_irq_timer; + emu_timer *m_karatour_irq_timer; + + /* sound related */ + uint16_t m_soundstatus; + int m_porta; + int m_portb; + int m_busy_sndcpu; + bool m_essnd_gate; + + /* misc */ + int m_gakusai_oki_bank_lo; + int m_gakusai_oki_bank_hi; + static constexpr uint32_t m_vram_size = 0x20000 / 2; + + void update_irq_state(); inline uint8_t get_tile_pix( uint16_t code, uint8_t x, uint8_t y, int big, uint16_t *pix ); inline void metro_vram_w( offs_t offset, uint16_t data, uint16_t mem_mask, int layer, uint16_t *vram ); void metro_draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); void draw_layers( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri, int layers_ctrl ); inline int blt_read( const uint8_t *ROM, const int offs ); - void metro_common( ); + void metro_common(); void draw_tilemap( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, uint32_t flags, uint32_t pcode, int sx, int sy, int wx, int wy, int big, uint16_t *tilemapram, int layer ); - DECLARE_READ_LINE_MEMBER(metro_rxd_r); + void expand_gfx1(); + void blt_write( address_space &space, const int tmap, const offs_t offs, const uint16_t data, const uint16_t mask ); + void gakusai_oki_bank_set(); -protected: - virtual void machine_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; }; |