summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/ladyfrog.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/ladyfrog.c')
-rw-r--r--src/mame/video/ladyfrog.c155
1 files changed, 155 insertions, 0 deletions
diff --git a/src/mame/video/ladyfrog.c b/src/mame/video/ladyfrog.c
new file mode 100644
index 00000000000..2e7a7968dba
--- /dev/null
+++ b/src/mame/video/ladyfrog.c
@@ -0,0 +1,155 @@
+/***************************************************************************
+
+ video.c
+
+ Functions to emulate the video hardware of the machine.
+
+***************************************************************************/
+#include "driver.h"
+static int tilebank=0;
+
+static tilemap *bg_tilemap;
+static int palette_bank;
+//static int gfxctrl;
+
+UINT8 *ladyfrog_scrlram;
+
+static UINT8 *ladyfrog_spriteram;
+extern UINT8 *ladyfrog_sharedram;
+
+WRITE8_HANDLER(ladyfrog_spriteram_w)
+{
+ ladyfrog_spriteram[offset]=data;
+}
+
+READ8_HANDLER(ladyfrog_spriteram_r)
+{
+ return ladyfrog_spriteram[offset];
+}
+
+static TILE_GET_INFO( get_tile_info )
+{
+ int pal,tile;
+ pal=videoram[tile_index*2+1]&0x0f;
+ tile=videoram[tile_index*2] + ((videoram[tile_index*2+1] & 0xc0) << 2)+ ((videoram[tile_index*2+1] & 0x30) <<6 );
+ SET_TILE_INFO(
+ 0,
+ tile +0x1000 * tilebank,
+ pal,TILE_FLIPY
+ );
+}
+
+WRITE8_HANDLER( ladyfrog_videoram_w )
+{
+ videoram[offset] = data;
+ tilemap_mark_tile_dirty(bg_tilemap,offset>>1);
+}
+
+READ8_HANDLER( ladyfrog_videoram_r )
+{
+ return videoram[offset];
+}
+
+WRITE8_HANDLER( ladyfrog_palette_w )
+{
+ if (offset & 0x100)
+ paletteram_xxxxBBBBGGGGRRRR_split2_w((offset & 0xff) + (palette_bank << 8),data);
+ else
+ paletteram_xxxxBBBBGGGGRRRR_split1_w((offset & 0xff) + (palette_bank << 8),data);
+}
+
+READ8_HANDLER( ladyfrog_palette_r )
+{
+ if (offset & 0x100)
+ return paletteram_2[ (offset & 0xff) + (palette_bank << 8) ];
+ else
+ return paletteram [ (offset & 0xff) + (palette_bank << 8) ];
+}
+
+WRITE8_HANDLER( ladyfrog_gfxctrl_w )
+{
+ palette_bank = (data & 0x20) >> 5;
+
+}
+
+WRITE8_HANDLER( ladyfrog_gfxctrl2_w )
+{
+ tilebank=((data & 0x18) >> 3)^3;
+ tilemap_mark_all_tiles_dirty( bg_tilemap );
+}
+
+
+#ifdef UNUSED_FUNCTION
+READ8_HANDLER( ladyfrog_gfxctrl_r )
+{
+ return gfxctrl;
+}
+#endif
+
+READ8_HANDLER( ladyfrog_scrlram_r )
+{
+ return ladyfrog_scrlram[offset];
+}
+
+WRITE8_HANDLER( ladyfrog_scrlram_w )
+{
+ ladyfrog_scrlram[offset] = data;
+ tilemap_set_scrolly(bg_tilemap, offset, data );
+}
+
+static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect)
+{
+ int i;
+ for (i=0;i<0x20;i++)
+ {
+ int pr = ladyfrog_spriteram[0x9f-i];
+ int offs = (pr & 0x1f) * 4;
+ {
+ int code,sx,sy,flipx,flipy,pal;
+ code = ladyfrog_spriteram[offs+2] + ((ladyfrog_spriteram[offs+1] & 0x10) << 4)+0x800;
+ pal=ladyfrog_spriteram[offs+1] & 0x0f;
+ sx = ladyfrog_spriteram[offs+3];
+ sy = 240-ladyfrog_spriteram[offs+0];
+ flipx = ((ladyfrog_spriteram[offs+1]&0x40)>>6);
+ flipy = ((ladyfrog_spriteram[offs+1]&0x80)>>7);
+ drawgfx(bitmap,machine->gfx[1],
+ code,
+ pal,
+ flipx,flipy,
+ sx,sy,
+ cliprect,TRANSPARENCY_PEN,15);
+
+ if(ladyfrog_spriteram[offs+3]>240)
+ {
+ sx = (ladyfrog_spriteram[offs+3]-256);
+ drawgfx(bitmap,machine->gfx[1],
+ code,
+ pal,
+ flipx,flipy,
+ sx,sy,
+ cliprect,TRANSPARENCY_PEN,15);
+ }
+ }
+ }
+
+}
+
+VIDEO_START( ladyfrog )
+{
+ ladyfrog_spriteram = auto_malloc (160);
+ bg_tilemap = tilemap_create( get_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,32,32 );
+
+ paletteram = auto_malloc(0x200);
+ paletteram_2 = auto_malloc(0x200);
+ tilemap_set_scroll_cols(bg_tilemap,32);
+ tilemap_set_scrolldy( bg_tilemap, 15, 15 );
+}
+
+
+VIDEO_UPDATE( ladyfrog )
+{
+ tilemap_draw(bitmap,cliprect,bg_tilemap,0,0);
+ draw_sprites(machine,bitmap,cliprect);
+ return 0;
+}
+