summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/mrflea.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/mrflea.c')
-rw-r--r--src/mame/video/mrflea.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/mame/video/mrflea.c b/src/mame/video/mrflea.c
new file mode 100644
index 00000000000..aa1826e05fa
--- /dev/null
+++ b/src/mame/video/mrflea.c
@@ -0,0 +1,97 @@
+/******************************************************************
+
+Mr. F. Lea
+(C) 1983 PACIFIC NOVELTY MFG. INC.
+
+******************************************************************/
+
+#include "driver.h"
+
+static int mrflea_gfx_bank;
+
+WRITE8_HANDLER( mrflea_gfx_bank_w ){
+ mrflea_gfx_bank = data;
+ if( data & ~0x14 ){
+ logerror( "unknown gfx bank: 0x%02x\n", data );
+ }
+}
+
+WRITE8_HANDLER( mrflea_videoram_w ){
+ int bank = offset/0x400;
+ offset &= 0x3ff;
+ videoram[offset] = data;
+ videoram[offset+0x400] = bank;
+ /* the address range that tile data is written to sets one bit of
+ ** the bank select. The remaining bits are from a video register.
+ */
+}
+
+WRITE8_HANDLER( mrflea_spriteram_w ){
+ if( offset&2 ){ /* tile_number */
+ spriteram[offset|1] = offset&1;
+ offset &= ~1;
+ }
+ spriteram[offset] = data;
+}
+
+static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect)
+{
+ const gfx_element *gfx = machine->gfx[0];
+ const UINT8 *source = spriteram;
+ const UINT8 *finish = source+0x100;
+ rectangle clip = machine->screen[0].visarea;
+ clip.max_x -= 24;
+ clip.min_x += 16;
+ while( source<finish ){
+ int xpos = source[1]-3;
+ int ypos = source[0]-16+3;
+ int tile_number = source[2]+source[3]*0x100;
+
+ drawgfx( bitmap, gfx,
+ tile_number,
+ 0, /* color */
+ 0,0, /* no flip */
+ xpos,ypos,
+ &clip,TRANSPARENCY_PEN,0 );
+ drawgfx( bitmap, gfx,
+ tile_number,
+ 0, /* color */
+ 0,0, /* no flip */
+ xpos,256+ypos,
+ &clip,TRANSPARENCY_PEN,0 );
+ source+=4;
+ }
+}
+
+static void draw_background(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect)
+{
+ const UINT8 *source = videoram;
+ const gfx_element *gfx = machine->gfx[1];
+ int sx,sy;
+ int base = 0;
+ if( mrflea_gfx_bank&0x04 ) base |= 0x400;
+ if( mrflea_gfx_bank&0x10 ) base |= 0x200;
+ for( sy=0; sy<256; sy+=8 ){
+ for( sx=0; sx<256; sx+=8 ){
+ int tile_number = base+source[0]+source[0x400]*0x100;
+ source++;
+ drawgfx( bitmap, gfx,
+ tile_number,
+ 0, /* color */
+ 0,0, /* no flip */
+ sx,sy,
+ cliprect,
+ TRANSPARENCY_NONE,0 );
+ }
+ }
+}
+
+VIDEO_START( mrflea ){
+}
+
+VIDEO_UPDATE( mrflea )
+{
+ draw_background(machine, bitmap, cliprect);
+ draw_sprites(machine, bitmap, cliprect);
+ return 0;
+}