1 /***************************************************************************
2
3 vidhrdw.c
4
5 Functions to emulate the video hardware of the machine.
6
7 ***************************************************************************/
8
9 #include "driver.h"
10 #include "vidhrdw/generic.h"
11
12 /***************************************************************************
13
14 Draw the game screen in the given osd_bitmap.
15 Do NOT call osd_update_display() from this function, it will be called by
16 the main emulation engine.
17
18 ***************************************************************************/
canyon_vh_screenrefresh(struct osd_bitmap * bitmap,int full_refresh)19 void canyon_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
20 {
21 int offs;
22
23 /* for every character in the Video RAM, check if it has been modified */
24 /* since last time and update it accordingly. */
25 for (offs = videoram_size - 1;offs >= 0;offs--)
26 {
27 if (full_refresh || dirtybuffer[offs])
28 {
29 int charcode;
30 int sx,sy;
31
32 dirtybuffer[offs]=0;
33
34 charcode = videoram[offs] & 0x3F;
35
36 sx = 8 * (offs % 32);
37 sy = 8 * (offs / 32);
38 drawgfx(tmpbitmap,Machine->gfx[0],
39 charcode, (videoram[offs] & 0x80)>>7,
40 0,0,sx,sy,
41 &Machine->visible_area,TRANSPARENCY_NONE,0);
42 }
43 }
44
45 /* copy the character mapped graphics */
46 copybitmap(bitmap,tmpbitmap,0,0,0,0,&Machine->visible_area,TRANSPARENCY_NONE,0);
47
48 for (offs=0; offs<2; offs++)
49 {
50 int sx, sy;
51 int pic;
52 int flipx;
53
54 sx = 224 - spriteram[offs*2+1];
55 sy = 240 - spriteram[offs*2+8];
56 pic = spriteram[offs*2+9];
57 if (pic & 0x80)
58 flipx=0;
59 else
60 flipx=1;
61
62 drawgfx(bitmap,Machine->gfx[1],
63 (pic & 0x18) >> 3, offs,
64 flipx,0,sx,sy,
65 &Machine->visible_area,TRANSPARENCY_PEN,0);
66 }
67
68 /* Draw the bombs as 2x2 squares */
69 for (offs=2; offs<4; offs++)
70 {
71 int sx, sy;
72
73 sx = 254 - spriteram[offs*2+1];
74 sy = 246 - spriteram[offs*2+8];
75
76 drawgfx(bitmap,Machine->gfx[2],
77 0, offs,
78 0,0,sx,sy,
79 &Machine->visible_area,TRANSPARENCY_PEN,0);
80 }
81 }
82