1 /***************************************************************************
2
3 vidhrdw.c
4
5 Functions to emulate the video hardware of the machine.
6
7 ***************************************************************************/
8
9 #include "driver.h"
10
11
12
13 unsigned char *gundealr_bg_videoram,*gundealr_fg_videoram;
14
15 static struct tilemap *bg_tilemap,*fg_tilemap;
16 static int flipscreen;
17
18
19
20 /***************************************************************************
21
22 Callbacks for the TileMap code
23
24 ***************************************************************************/
25
get_bg_tile_info(int tile_index)26 static void get_bg_tile_info(int tile_index)
27 {
28 unsigned char attr = gundealr_bg_videoram[2*tile_index+1];
29 SET_TILE_INFO(
30 0,
31 gundealr_bg_videoram[2*tile_index] + ((attr & 0x07) << 8),
32 (attr & 0xf0) >> 4,
33 0)
34 }
35
gundealr_scan(UINT32 col,UINT32 row,UINT32 num_cols,UINT32 num_rows)36 static UINT32 gundealr_scan(UINT32 col,UINT32 row,UINT32 num_cols,UINT32 num_rows)
37 {
38 /* logical (col,row) -> memory offset */
39 return (row & 0x0f) + ((col & 0x3f) << 4) + ((row & 0x10) << 6);
40 }
41
get_fg_tile_info(int tile_index)42 static void get_fg_tile_info(int tile_index)
43 {
44 unsigned char attr = gundealr_fg_videoram[2*tile_index+1];
45 SET_TILE_INFO(
46 1,
47 gundealr_fg_videoram[2*tile_index] + ((attr & 0x03) << 8),
48 (attr & 0xf0) >> 4,
49 0)
50 }
51
52
53
54 /***************************************************************************
55
56 Start the video hardware emulation.
57
58 ***************************************************************************/
59
VIDEO_START(gundealr)60 VIDEO_START( gundealr )
61 {
62 bg_tilemap = tilemap_create(get_bg_tile_info,tilemap_scan_cols,TILEMAP_OPAQUE, 8, 8,32,32);
63 fg_tilemap = tilemap_create(get_fg_tile_info,gundealr_scan, TILEMAP_TRANSPARENT,16,16,64,32);
64
65 if (!bg_tilemap || !fg_tilemap)
66 return 1;
67
68 tilemap_set_transparent_pen(fg_tilemap,15);
69
70 return 0;
71 }
72
73
74
75 /***************************************************************************
76
77 Memory handlers
78
79 ***************************************************************************/
80
WRITE_HANDLER(gundealr_bg_videoram_w)81 WRITE_HANDLER( gundealr_bg_videoram_w )
82 {
83 if (gundealr_bg_videoram[offset] != data)
84 {
85 gundealr_bg_videoram[offset] = data;
86 tilemap_mark_tile_dirty(bg_tilemap,offset/2);
87 }
88 }
89
WRITE_HANDLER(gundealr_fg_videoram_w)90 WRITE_HANDLER( gundealr_fg_videoram_w )
91 {
92 if (gundealr_fg_videoram[offset] != data)
93 {
94 gundealr_fg_videoram[offset] = data;
95 tilemap_mark_tile_dirty(fg_tilemap,offset/2);
96 }
97 }
98
WRITE_HANDLER(gundealr_paletteram_w)99 WRITE_HANDLER( gundealr_paletteram_w )
100 {
101 int r,g,b,val;
102
103
104 paletteram[offset] = data;
105
106 val = paletteram[offset & ~1];
107 r = (val >> 4) & 0x0f;
108 g = (val >> 0) & 0x0f;
109
110 val = paletteram[offset | 1];
111 b = (val >> 4) & 0x0f;
112 /* TODO: the bottom 4 bits are used as well, but I'm not sure about the meaning */
113
114 r = 0x11 * r;
115 g = 0x11 * g;
116 b = 0x11 * b;
117
118 palette_set_color(offset / 2,r,g,b);
119 }
120
WRITE_HANDLER(gundealr_fg_scroll_w)121 WRITE_HANDLER( gundealr_fg_scroll_w )
122 {
123 static unsigned char scroll[4];
124
125 scroll[offset] = data;
126 tilemap_set_scrollx(fg_tilemap,0,scroll[1] | ((scroll[0] & 0x03) << 8));
127 tilemap_set_scrolly(fg_tilemap,0,scroll[3] | ((scroll[2] & 0x03) << 8));
128 }
129
WRITE_HANDLER(yamyam_fg_scroll_w)130 WRITE_HANDLER( yamyam_fg_scroll_w )
131 {
132 static unsigned char scroll[4];
133
134 scroll[offset] = data;
135 tilemap_set_scrollx(fg_tilemap,0,scroll[0] | ((scroll[1] & 0x03) << 8));
136 tilemap_set_scrolly(fg_tilemap,0,scroll[2] | ((scroll[3] & 0x03) << 8));
137 }
138
WRITE_HANDLER(gundealr_flipscreen_w)139 WRITE_HANDLER( gundealr_flipscreen_w )
140 {
141 flipscreen = data;
142 tilemap_set_flip(ALL_TILEMAPS,flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
143 }
144
145
146
147 /***************************************************************************
148
149 Display refresh
150
151 ***************************************************************************/
152
VIDEO_UPDATE(gundealr)153 VIDEO_UPDATE( gundealr )
154 {
155 tilemap_draw(bitmap,cliprect,bg_tilemap,0,0);
156 tilemap_draw(bitmap,cliprect,fg_tilemap,0,0);
157 }
158