summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/metro.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/includes/metro.h')
-rw-r--r--src/mame/includes/metro.h159
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;
};