/*************************************************************************** Cave hardware ***************************************************************************/ struct sprite_cave { int priority, flags; const UINT8 *pen_data; /* points to top left corner of tile data */ int line_offset; pen_t base_pen; int tile_width, tile_height; int total_width, total_height; /* in screen coordinates */ int x, y, xcount0, ycount0; int zoomx_re, zoomy_re; }; #define MAX_PRIORITY 4 #define MAX_SPRITE_NUM 0x400 class cave_state : public driver_device { public: cave_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_int_timer(*this, "int_timer") { } /* memory pointers */ UINT16 * m_videoregs; UINT16 * m_vram[4]; UINT16 * m_vctrl[4]; UINT16 * m_spriteram; UINT16 * m_spriteram_2; UINT16 * m_paletteram; size_t m_spriteram_size; size_t m_paletteram_size; /* video-related */ struct sprite_cave *m_sprite; struct sprite_cave *m_sprite_table[MAX_PRIORITY][MAX_SPRITE_NUM + 1]; struct { int clip_left, clip_right, clip_top, clip_bottom; UINT8 *baseaddr; int line_offset; UINT8 *baseaddr_zbuf; int line_offset_zbuf; } m_blit; void (*m_get_sprite_info)(running_machine &machine); void (*m_sprite_draw)(running_machine &machine, int priority); tilemap_t *m_tilemap[4]; int m_tiledim[4]; int m_old_tiledim[4]; bitmap_t *m_sprite_zbuf; UINT16 m_sprite_zbuf_baseval; int m_num_sprites; int m_spriteram_bank; int m_spriteram_bank_delay; UINT16 *m_palette_map; int m_layers_offs_x; int m_layers_offs_y; int m_row_effect_offs_n; int m_row_effect_offs_f; int m_background_color; int m_spritetype[2]; int m_kludge; /* misc */ int m_time_vblank_irq; UINT8 m_irq_level; UINT8 m_vblank_irq; UINT8 m_sound_irq; UINT8 m_unknown_irq; UINT8 m_agallet_vblank_irq; /* sound related */ int m_soundbuf_len; UINT8 m_soundbuf_data[32]; //UINT8 m_sound_flag1; //UINT8 m_sound_flag2; /* eeprom-related */ int m_region_byte; /* game specific */ // sailormn int m_sailormn_tilebank; UINT8 *m_mirror_ram; // korokoro UINT16 m_leds[2]; int m_hopper; /* devices */ device_t *m_maincpu; device_t *m_audiocpu; required_device m_int_timer; int m_rasflag; int m_old_rasflag; }; /*----------- defined in video/cave.c -----------*/ WRITE16_HANDLER( cave_vram_0_w ); WRITE16_HANDLER( cave_vram_1_w ); WRITE16_HANDLER( cave_vram_2_w ); WRITE16_HANDLER( cave_vram_3_w ); WRITE16_HANDLER( cave_vram_0_8x8_w ); WRITE16_HANDLER( cave_vram_1_8x8_w ); WRITE16_HANDLER( cave_vram_2_8x8_w ); WRITE16_HANDLER( cave_vram_3_8x8_w ); PALETTE_INIT( cave ); PALETTE_INIT( ddonpach ); PALETTE_INIT( dfeveron ); PALETTE_INIT( mazinger ); PALETTE_INIT( sailormn ); PALETTE_INIT( pwrinst2 ); PALETTE_INIT( korokoro ); VIDEO_START( cave_1_layer ); VIDEO_START( cave_2_layers ); VIDEO_START( cave_3_layers ); VIDEO_START( cave_4_layers ); VIDEO_START( sailormn_3_layers ); SCREEN_UPDATE( cave ); void cave_get_sprite_info(running_machine &machine); void sailormn_tilebank_w(running_machine &machine, int bank);