1 /******************************************************************************
2
3 Video Hardware for Video System Mahjong series.
4
5 Driver by Takahiro Nogi <nogi@kt.rim.or.jp> 2001/02/04 -
6
7 ******************************************************************************/
8
9 #include "driver.h"
10 #include "vidhrdw/generic.h"
11
12
13 static int fromanc2_dispvram, fromanc2_dispvram_old;
14 static int fromanc2_scrollx[2][4], fromanc2_scrolly[2][4];
15 static int fromanc2_gfxbank[2][4];
16 static data16_t *fromanc2_paletteram[2];
17 static data16_t *fromanc2_videoram[2][4];
18 static struct tilemap *fromanc2_tilemap[2][4];
19
20
21 /******************************************************************************
22
23
24
25 ******************************************************************************/
fromanc2_set_dispvram_w(int vram)26 void fromanc2_set_dispvram_w(int vram)
27 {
28 fromanc2_dispvram = (vram ? 1 : 0);
29
30 if (fromanc2_dispvram_old != fromanc2_dispvram) {
31 fromanc2_dispvram_old = fromanc2_dispvram;
32
33 if (fromanc2_tilemap[fromanc2_dispvram][0]) tilemap_mark_all_tiles_dirty(fromanc2_tilemap[fromanc2_dispvram][0]);
34 if (fromanc2_tilemap[fromanc2_dispvram][1]) tilemap_mark_all_tiles_dirty(fromanc2_tilemap[fromanc2_dispvram][1]);
35 if (fromanc2_tilemap[fromanc2_dispvram][2]) tilemap_mark_all_tiles_dirty(fromanc2_tilemap[fromanc2_dispvram][2]);
36 if (fromanc2_tilemap[fromanc2_dispvram][3]) tilemap_mark_all_tiles_dirty(fromanc2_tilemap[fromanc2_dispvram][3]);
37 }
38 }
39
40 /******************************************************************************
41
42 Callbacks for the TileMap code
43
44 ******************************************************************************/
45
fromanc2_get_tile_info(int tile_index,int vram,int layer)46 static INLINE void fromanc2_get_tile_info(int tile_index, int vram, int layer)
47 {
48 int tile, color;
49
50 tile = (fromanc2_videoram[vram][layer][tile_index] & 0x3fff) | (fromanc2_gfxbank[vram][layer] << 14);
51 color = ((fromanc2_videoram[vram][layer][tile_index] & 0xc000) >> 14) | (0x10 * vram);
52
53 SET_TILE_INFO(layer, tile, color, 0)
54 }
55
fromanc2_get_v0_l0_tile_info(int tile_index)56 static void fromanc2_get_v0_l0_tile_info(int tile_index) { fromanc2_get_tile_info(tile_index, 0, 0); }
fromanc2_get_v0_l1_tile_info(int tile_index)57 static void fromanc2_get_v0_l1_tile_info(int tile_index) { fromanc2_get_tile_info(tile_index, 0, 1); }
fromanc2_get_v0_l2_tile_info(int tile_index)58 static void fromanc2_get_v0_l2_tile_info(int tile_index) { fromanc2_get_tile_info(tile_index, 0, 2); }
fromanc2_get_v0_l3_tile_info(int tile_index)59 static void fromanc2_get_v0_l3_tile_info(int tile_index) { fromanc2_get_tile_info(tile_index, 0, 3); }
fromanc2_get_v1_l0_tile_info(int tile_index)60 static void fromanc2_get_v1_l0_tile_info(int tile_index) { fromanc2_get_tile_info(tile_index, 1, 0); }
fromanc2_get_v1_l1_tile_info(int tile_index)61 static void fromanc2_get_v1_l1_tile_info(int tile_index) { fromanc2_get_tile_info(tile_index, 1, 1); }
fromanc2_get_v1_l2_tile_info(int tile_index)62 static void fromanc2_get_v1_l2_tile_info(int tile_index) { fromanc2_get_tile_info(tile_index, 1, 2); }
fromanc2_get_v1_l3_tile_info(int tile_index)63 static void fromanc2_get_v1_l3_tile_info(int tile_index) { fromanc2_get_tile_info(tile_index, 1, 3); }
64
65
fromancr_get_tile_info(int tile_index,int vram,int layer)66 static INLINE void fromancr_get_tile_info(int tile_index, int vram, int layer)
67 {
68 int tile, color;
69
70 tile = fromanc2_videoram[vram][layer][tile_index] | (fromanc2_gfxbank[vram][layer] << 16);
71 color = vram;
72
73 SET_TILE_INFO(layer, tile, color, 0)
74 }
75
fromancr_get_v0_l0_tile_info(int tile_index)76 static void fromancr_get_v0_l0_tile_info(int tile_index) { fromancr_get_tile_info(tile_index, 0, 0); }
fromancr_get_v0_l1_tile_info(int tile_index)77 static void fromancr_get_v0_l1_tile_info(int tile_index) { fromancr_get_tile_info(tile_index, 0, 1); }
fromancr_get_v0_l2_tile_info(int tile_index)78 static void fromancr_get_v0_l2_tile_info(int tile_index) { fromancr_get_tile_info(tile_index, 0, 2); }
fromancr_get_v1_l0_tile_info(int tile_index)79 static void fromancr_get_v1_l0_tile_info(int tile_index) { fromancr_get_tile_info(tile_index, 1, 0); }
fromancr_get_v1_l1_tile_info(int tile_index)80 static void fromancr_get_v1_l1_tile_info(int tile_index) { fromancr_get_tile_info(tile_index, 1, 1); }
fromancr_get_v1_l2_tile_info(int tile_index)81 static void fromancr_get_v1_l2_tile_info(int tile_index) { fromancr_get_tile_info(tile_index, 1, 2); }
82
83
84 /******************************************************************************
85
86 Memory handlers
87
88 ******************************************************************************/
89
READ16_HANDLER(fromanc2_paletteram_0_r)90 READ16_HANDLER( fromanc2_paletteram_0_r )
91 {
92 return fromanc2_paletteram[0][offset];
93 }
94
READ16_HANDLER(fromanc2_paletteram_1_r)95 READ16_HANDLER( fromanc2_paletteram_1_r )
96 {
97 return fromanc2_paletteram[1][offset];
98 }
99
WRITE16_HANDLER(fromanc2_paletteram_0_w)100 WRITE16_HANDLER( fromanc2_paletteram_0_w )
101 {
102 UINT16 color;
103 UINT8 r, g, b;
104
105 COMBINE_DATA(&fromanc2_paletteram[0][offset]);
106
107 // GGGG_GRRR_RRBB_BBBx
108 r = (data >> 6) & 0x1f;
109 g = (data >> 11) & 0x1f;
110 b = (data >> 1) & 0x1f;
111
112 r = (r << 3) | (r >> 2);
113 g = (g << 3) | (g >> 2);
114 b = (b << 3) | (b >> 2);
115
116 color = ((offset & 0x0700) << 1) + (offset & 0x00ff);
117 palette_set_color(0x000 + color, r, g, b);
118 }
119
WRITE16_HANDLER(fromanc2_paletteram_1_w)120 WRITE16_HANDLER( fromanc2_paletteram_1_w )
121 {
122 UINT16 color;
123 UINT8 r, g, b;
124
125 COMBINE_DATA(&fromanc2_paletteram[1][offset]);
126
127 // GGGG_GRRR_RRBB_BBBx
128 r = (data >> 6) & 0x1f;
129 g = (data >> 11) & 0x1f;
130 b = (data >> 1) & 0x1f;
131
132 r = (r << 3) | (r >> 2);
133 g = (g << 3) | (g >> 2);
134 b = (b << 3) | (b >> 2);
135
136 color = ((offset & 0x0700) << 1) + (offset & 0x00ff);
137 palette_set_color(0x100 + color, r, g, b);
138 }
139
140
READ16_HANDLER(fromancr_paletteram_0_r)141 READ16_HANDLER( fromancr_paletteram_0_r )
142 {
143 return fromanc2_paletteram[0][offset];
144 }
145
READ16_HANDLER(fromancr_paletteram_1_r)146 READ16_HANDLER( fromancr_paletteram_1_r )
147 {
148 return fromanc2_paletteram[1][offset];
149 }
150
WRITE16_HANDLER(fromancr_paletteram_0_w)151 WRITE16_HANDLER( fromancr_paletteram_0_w )
152 {
153 UINT16 color;
154 UINT8 r, g, b;
155
156 COMBINE_DATA(&fromanc2_paletteram[0][offset]);
157
158 // xGGG_GGRR_RRRB_BBBB
159 r = (data >> 5) & 0x1f;
160 g = (data >> 10) & 0x1f;
161 b = (data >> 0) & 0x1f;
162
163 r = (r << 3) | (r >> 2);
164 g = (g << 3) | (g >> 2);
165 b = (b << 3) | (b >> 2);
166
167 color = ((offset & 0x0700) << 1) + (offset & 0x00ff);
168 palette_set_color(0x000 + color, r, g, b);
169 }
170
WRITE16_HANDLER(fromancr_paletteram_1_w)171 WRITE16_HANDLER( fromancr_paletteram_1_w )
172 {
173 UINT16 color;
174 UINT8 r, g, b;
175
176 COMBINE_DATA(&fromanc2_paletteram[1][offset]);
177
178 // xGGG_GGRR_RRRB_BBBB
179 r = (data >> 5) & 0x1f;
180 g = (data >> 10) & 0x1f;
181 b = (data >> 0) & 0x1f;
182
183 r = (r << 3) | (r >> 2);
184 g = (g << 3) | (g >> 2);
185 b = (b << 3) | (b >> 2);
186
187 color = ((offset & 0x0700) << 1) + (offset & 0x00ff);
188 palette_set_color(0x100 + color, r, g, b);
189 }
190
191
READ16_HANDLER(fromanc4_paletteram_0_r)192 READ16_HANDLER( fromanc4_paletteram_0_r )
193 {
194 return fromanc2_paletteram[0][offset];
195 }
196
READ16_HANDLER(fromanc4_paletteram_1_r)197 READ16_HANDLER( fromanc4_paletteram_1_r )
198 {
199 return fromanc2_paletteram[1][offset];
200 }
201
WRITE16_HANDLER(fromanc4_paletteram_0_w)202 WRITE16_HANDLER( fromanc4_paletteram_0_w )
203 {
204 UINT16 color;
205 UINT8 r, g, b;
206
207 COMBINE_DATA(&fromanc2_paletteram[0][offset]);
208
209 // xRRR_RRGG_GGGB_BBBB
210 r = (data >> 10) & 0x1f;
211 g = (data >> 5) & 0x1f;
212 b = (data >> 0) & 0x1f;
213
214 r = (r << 3) | (r >> 2);
215 g = (g << 3) | (g >> 2);
216 b = (b << 3) | (b >> 2);
217
218 color = ((offset & 0x0700) << 1) + (offset & 0x00ff);
219 palette_set_color(0x000 + color, r, g, b);
220 }
221
WRITE16_HANDLER(fromanc4_paletteram_1_w)222 WRITE16_HANDLER( fromanc4_paletteram_1_w )
223 {
224 UINT16 color;
225 UINT8 r, g, b;
226
227 COMBINE_DATA(&fromanc2_paletteram[1][offset]);
228
229 // xRRR_RRGG_GGGB_BBBB
230 r = (data >> 10) & 0x1f;
231 g = (data >> 5) & 0x1f;
232 b = (data >> 0) & 0x1f;
233
234 r = (r << 3) | (r >> 2);
235 g = (g << 3) | (g >> 2);
236 b = (b << 3) | (b >> 2);
237
238 color = ((offset & 0x0700) << 1) + (offset & 0x00ff);
239 palette_set_color(0x100 + color, r, g, b);
240 }
241
242
fromanc2_dispvram_w(offs_t offset,data16_t data,data16_t mem_mask,int vram,int layer)243 static INLINE void fromanc2_dispvram_w(offs_t offset, data16_t data, data16_t mem_mask, int vram, int layer)
244 {
245 layer += (offset < 0x1000) ? 0 : 1;
246
247 COMBINE_DATA(&fromanc2_videoram[vram][layer][offset & 0x0fff]);
248 tilemap_mark_tile_dirty(fromanc2_tilemap[vram][layer], offset & 0x0fff);
249 }
250
WRITE16_HANDLER(fromanc2_videoram_0_w)251 WRITE16_HANDLER( fromanc2_videoram_0_w ) { fromanc2_dispvram_w(offset, data, mem_mask, 0, 0); }
WRITE16_HANDLER(fromanc2_videoram_1_w)252 WRITE16_HANDLER( fromanc2_videoram_1_w ) { fromanc2_dispvram_w(offset, data, mem_mask, 0, 2); }
WRITE16_HANDLER(fromanc2_videoram_2_w)253 WRITE16_HANDLER( fromanc2_videoram_2_w ) { fromanc2_dispvram_w(offset, data, mem_mask, 1, 0); }
WRITE16_HANDLER(fromanc2_videoram_3_w)254 WRITE16_HANDLER( fromanc2_videoram_3_w ) { fromanc2_dispvram_w(offset, data, mem_mask, 1, 2); }
255
WRITE16_HANDLER(fromanc2_gfxreg_0_w)256 WRITE16_HANDLER( fromanc2_gfxreg_0_w )
257 {
258 switch (offset) {
259 case 0x00: fromanc2_scrollx[0][0] = -(data - 0x000); break;
260 case 0x01: fromanc2_scrolly[0][0] = -(data - 0x000); break;
261 case 0x02: fromanc2_scrollx[0][1] = -(data - 0x004); break;
262 case 0x03: fromanc2_scrolly[0][1] = -(data - 0x000); break;
263 // offset 0x04 - 0x11 unknown
264 default: break;
265 }
266 }
267
WRITE16_HANDLER(fromanc2_gfxreg_1_w)268 WRITE16_HANDLER( fromanc2_gfxreg_1_w )
269 {
270 switch (offset) {
271 case 0x00: fromanc2_scrollx[1][0] = -(data - 0x1be); break;
272 case 0x01: fromanc2_scrolly[1][0] = -(data - 0x1ef); break;
273 case 0x02: fromanc2_scrollx[1][1] = -(data - 0x1c2); break;
274 case 0x03: fromanc2_scrolly[1][1] = -(data - 0x1ef); break;
275 // offset 0x04 - 0x11 unknown
276 default: break;
277 }
278 }
279
WRITE16_HANDLER(fromanc2_gfxreg_2_w)280 WRITE16_HANDLER( fromanc2_gfxreg_2_w )
281 {
282 switch (offset) {
283 case 0x00: fromanc2_scrollx[0][2] = -(data - 0x1c0); break;
284 case 0x01: fromanc2_scrolly[0][2] = -(data - 0x1ef); break;
285 case 0x02: fromanc2_scrollx[0][3] = -(data - 0x1c3); break;
286 case 0x03: fromanc2_scrolly[0][3] = -(data - 0x1ef); break;
287 // offset 0x04 - 0x11 unknown
288 default: break;
289 }
290 }
291
WRITE16_HANDLER(fromanc2_gfxreg_3_w)292 WRITE16_HANDLER( fromanc2_gfxreg_3_w )
293 {
294 switch (offset) {
295 case 0x00: fromanc2_scrollx[1][2] = -(data - 0x1bf); break;
296 case 0x01: fromanc2_scrolly[1][2] = -(data - 0x1ef); break;
297 case 0x02: fromanc2_scrollx[1][3] = -(data - 0x1c3); break;
298 case 0x03: fromanc2_scrolly[1][3] = -(data - 0x1ef); break;
299 // offset 0x04 - 0x11 unknown
300 default: break;
301 }
302 }
303
WRITE16_HANDLER(fromanc2_gfxbank_0_w)304 WRITE16_HANDLER( fromanc2_gfxbank_0_w )
305 {
306 fromanc2_gfxbank[0][0] = (data & 0x000f) >> 0;
307 fromanc2_gfxbank[0][1] = (data & 0x00f0) >> 4;
308 fromanc2_gfxbank[0][2] = (data & 0x0f00) >> 8;
309 fromanc2_gfxbank[0][3] = (data & 0xf000) >> 12;
310 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[0][0]);
311 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[0][1]);
312 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[0][2]);
313 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[0][3]);
314 }
315
WRITE16_HANDLER(fromanc2_gfxbank_1_w)316 WRITE16_HANDLER( fromanc2_gfxbank_1_w )
317 {
318 fromanc2_gfxbank[1][0] = (data & 0x000f) >> 0;
319 fromanc2_gfxbank[1][1] = (data & 0x00f0) >> 4;
320 fromanc2_gfxbank[1][2] = (data & 0x0f00) >> 8;
321 fromanc2_gfxbank[1][3] = (data & 0xf000) >> 12;
322 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[1][0]);
323 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[1][1]);
324 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[1][2]);
325 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[1][3]);
326 }
327
328
fromancr_vram_w(offs_t offset,data16_t data,data16_t mem_mask,int layer)329 static INLINE void fromancr_vram_w(offs_t offset, data16_t data, data16_t mem_mask, int layer)
330 {
331 int vram = (offset < 0x1000) ? 0 : 1;
332
333 COMBINE_DATA(&fromanc2_videoram[vram][layer][offset & 0x0fff]);
334 tilemap_mark_tile_dirty(fromanc2_tilemap[vram][layer], offset & 0x0fff);
335 }
336
WRITE16_HANDLER(fromancr_videoram_0_w)337 WRITE16_HANDLER( fromancr_videoram_0_w ) { fromancr_vram_w(offset, data, mem_mask, 1); }
WRITE16_HANDLER(fromancr_videoram_1_w)338 WRITE16_HANDLER( fromancr_videoram_1_w ) { fromancr_vram_w(offset, data, mem_mask, 0); }
WRITE16_HANDLER(fromancr_videoram_2_w)339 WRITE16_HANDLER( fromancr_videoram_2_w ) { fromancr_vram_w(offset, data, mem_mask, 2); }
340
WRITE16_HANDLER(fromancr_gfxreg_0_w)341 WRITE16_HANDLER( fromancr_gfxreg_0_w )
342 {
343 switch (offset) {
344 case 0x00: fromanc2_scrollx[0][0] = -(data - 0x1bf); break;
345 case 0x01: fromanc2_scrolly[0][0] = -(data - 0x1ef); break;
346 case 0x02: fromanc2_scrollx[1][0] = -(data - 0x1c3); break;
347 case 0x03: fromanc2_scrolly[1][0] = -(data - 0x1ef); break;
348 // offset 0x04 - 0x11 unknown
349 default: break;
350 }
351 }
352
WRITE16_HANDLER(fromancr_gfxreg_1_w)353 WRITE16_HANDLER( fromancr_gfxreg_1_w )
354 {
355 switch (offset) {
356 case 0x00: fromanc2_scrollx[0][1] = -(data - 0x000); break;
357 case 0x01: fromanc2_scrolly[0][1] = -(data - 0x000); break;
358 case 0x02: fromanc2_scrollx[1][1] = -(data - 0x004); break;
359 case 0x03: fromanc2_scrolly[1][1] = -(data - 0x000); break;
360 // offset 0x04 - 0x11 unknown
361 default: break;
362 }
363 }
364
fromancr_gfxbank_w(int data)365 void fromancr_gfxbank_w(int data)
366 {
367 fromanc2_gfxbank[0][0] = (data & 0x0010) >> 4; // BG (1P)
368 fromanc2_gfxbank[0][1] = (data & 0xf000) >> 12; // FG (1P)
369 fromanc2_gfxbank[1][0] = (data & 0x0008) >> 3; // BG (2P)
370 fromanc2_gfxbank[1][1] = (data & 0x0f00) >> 8; // FG (2P)
371 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[0][0]);
372 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[0][1]);
373 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[1][0]);
374 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[1][1]);
375 }
376
377
fromanc4_vram_w(offs_t offset,data16_t data,data16_t mem_mask,int layer)378 static INLINE void fromanc4_vram_w(offs_t offset, data16_t data, data16_t mem_mask, int layer)
379 {
380 int vram = (offset < 0x4000) ? 0 : 1;
381
382 COMBINE_DATA(&fromanc2_videoram[vram][layer][offset & 0x3fff]);
383 tilemap_mark_tile_dirty(fromanc2_tilemap[vram][layer], offset & 0x3fff);
384 }
385
WRITE16_HANDLER(fromanc4_videoram_0_w)386 WRITE16_HANDLER( fromanc4_videoram_0_w ) { fromanc4_vram_w(offset, data, mem_mask, 2); }
WRITE16_HANDLER(fromanc4_videoram_1_w)387 WRITE16_HANDLER( fromanc4_videoram_1_w ) { fromanc4_vram_w(offset, data, mem_mask, 1); }
WRITE16_HANDLER(fromanc4_videoram_2_w)388 WRITE16_HANDLER( fromanc4_videoram_2_w ) { fromanc4_vram_w(offset, data, mem_mask, 0); }
389
WRITE16_HANDLER(fromanc4_gfxreg_0_w)390 WRITE16_HANDLER( fromanc4_gfxreg_0_w )
391 {
392 switch (offset) {
393 case 0x00: fromanc2_scrollx[0][2] = -(data - 0xfbb); break;
394 case 0x01: fromanc2_scrolly[0][2] = -(data - 0x1e4); break;
395 case 0x02: fromanc2_scrollx[1][2] = -(data - 0xfbb); break;
396 case 0x03: fromanc2_scrolly[1][2] = -(data - 0x1e4); break;
397 case 0x05: fromanc2_gfxbank[0][2] = (data & 0x000f) >> 0;
398 fromanc2_gfxbank[1][2] = (data & 0x0f00) >> 8;
399 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[0][2]);
400 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[1][2]);
401 break;
402 // offset 0x04, 0x06 - 0x11 unknown
403 default: break;
404 }
405 }
406
WRITE16_HANDLER(fromanc4_gfxreg_1_w)407 WRITE16_HANDLER( fromanc4_gfxreg_1_w )
408 {
409 switch (offset) {
410 case 0x00: fromanc2_scrollx[0][1] = -(data - 0xfba); break;
411 case 0x01: fromanc2_scrolly[0][1] = -(data - 0x1e4); break;
412 case 0x02: fromanc2_scrollx[1][1] = -(data - 0xfba); break;
413 case 0x03: fromanc2_scrolly[1][1] = -(data - 0x1e4); break;
414 case 0x05: fromanc2_gfxbank[0][1] = (data & 0x000f) >> 0;
415 fromanc2_gfxbank[1][1] = (data & 0x0f00) >> 8;
416 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[0][1]);
417 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[1][1]);
418 break;
419 // offset 0x04, 0x06 - 0x11 unknown
420 default: break;
421 }
422 }
423
WRITE16_HANDLER(fromanc4_gfxreg_2_w)424 WRITE16_HANDLER( fromanc4_gfxreg_2_w )
425 {
426 switch (offset) {
427 case 0x00: fromanc2_scrollx[0][0] = -(data - 0xfbb); break;
428 case 0x01: fromanc2_scrolly[0][0] = -(data - 0x1e4); break;
429 case 0x02: fromanc2_scrollx[1][0] = -(data - 0xfbb); break;
430 case 0x03: fromanc2_scrolly[1][0] = -(data - 0x1e4); break;
431 case 0x05: fromanc2_gfxbank[0][0] = (data & 0x000f) >> 0;
432 fromanc2_gfxbank[1][0] = (data & 0x0f00) >> 8;
433 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[0][0]);
434 tilemap_mark_all_tiles_dirty(fromanc2_tilemap[1][0]);
435 break;
436 // offset 0x04, 0x06 - 0x11 unknown
437 default: break;
438 }
439 }
440
441
442 /******************************************************************************
443
444 Start the video hardware emulation.
445
446 ******************************************************************************/
447
VIDEO_START(fromanc2)448 VIDEO_START( fromanc2 )
449 {
450 fromanc2_tilemap[0][0] = tilemap_create(fromanc2_get_v0_l0_tile_info, tilemap_scan_rows, TILEMAP_OPAQUE, 8, 8, 64, 64);
451 fromanc2_tilemap[0][1] = tilemap_create(fromanc2_get_v0_l1_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 64, 64);
452 fromanc2_tilemap[0][2] = tilemap_create(fromanc2_get_v0_l2_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 64, 64);
453 fromanc2_tilemap[0][3] = tilemap_create(fromanc2_get_v0_l3_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 64, 64);
454 fromanc2_tilemap[1][0] = tilemap_create(fromanc2_get_v1_l0_tile_info, tilemap_scan_rows, TILEMAP_OPAQUE, 8, 8, 64, 64);
455 fromanc2_tilemap[1][1] = tilemap_create(fromanc2_get_v1_l1_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 64, 64);
456 fromanc2_tilemap[1][2] = tilemap_create(fromanc2_get_v1_l2_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 64, 64);
457 fromanc2_tilemap[1][3] = tilemap_create(fromanc2_get_v1_l3_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 64, 64);
458
459 fromanc2_videoram[0][0] = auto_malloc((64 * 64) * sizeof(data16_t));
460 fromanc2_videoram[0][1] = auto_malloc((64 * 64) * sizeof(data16_t));
461 fromanc2_videoram[0][2] = auto_malloc((64 * 64) * sizeof(data16_t));
462 fromanc2_videoram[0][3] = auto_malloc((64 * 64) * sizeof(data16_t));
463 fromanc2_videoram[1][0] = auto_malloc((64 * 64) * sizeof(data16_t));
464 fromanc2_videoram[1][1] = auto_malloc((64 * 64) * sizeof(data16_t));
465 fromanc2_videoram[1][2] = auto_malloc((64 * 64) * sizeof(data16_t));
466 fromanc2_videoram[1][3] = auto_malloc((64 * 64) * sizeof(data16_t));
467
468 fromanc2_paletteram[0] = auto_malloc(0x800 * 2);
469 fromanc2_paletteram[1] = auto_malloc(0x800 * 2);
470
471 if (!fromanc2_tilemap[0][0] ||
472 !fromanc2_tilemap[0][1] ||
473 !fromanc2_tilemap[0][2] ||
474 !fromanc2_tilemap[0][3] ||
475 !fromanc2_tilemap[1][0] ||
476 !fromanc2_tilemap[1][1] ||
477 !fromanc2_tilemap[1][2] ||
478 !fromanc2_tilemap[1][3] ||
479 !fromanc2_videoram[0][0] ||
480 !fromanc2_videoram[0][1] ||
481 !fromanc2_videoram[0][2] ||
482 !fromanc2_videoram[0][3] ||
483 !fromanc2_videoram[1][0] ||
484 !fromanc2_videoram[1][1] ||
485 !fromanc2_videoram[1][2] ||
486 !fromanc2_videoram[1][3] ||
487 !fromanc2_paletteram[0] ||
488 !fromanc2_paletteram[1]) {
489 return 1;
490 }
491
492 tilemap_set_transparent_pen(fromanc2_tilemap[0][1], 0x000);
493 tilemap_set_transparent_pen(fromanc2_tilemap[0][2], 0x000);
494 tilemap_set_transparent_pen(fromanc2_tilemap[0][3], 0x000);
495 tilemap_set_transparent_pen(fromanc2_tilemap[1][1], 0x000);
496 tilemap_set_transparent_pen(fromanc2_tilemap[1][2], 0x000);
497 tilemap_set_transparent_pen(fromanc2_tilemap[1][3], 0x000);
498
499 fromanc2_dispvram = 0;
500
501 return 0;
502 }
503
VIDEO_START(fromancr)504 VIDEO_START( fromancr )
505 {
506 fromanc2_tilemap[0][0] = tilemap_create(fromancr_get_v0_l0_tile_info, tilemap_scan_rows, TILEMAP_OPAQUE, 8, 8, 64, 64);
507 fromanc2_tilemap[0][1] = tilemap_create(fromancr_get_v0_l1_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 64, 64);
508 fromanc2_tilemap[0][2] = tilemap_create(fromancr_get_v0_l2_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 64, 64);
509 fromanc2_tilemap[0][3] = 0;
510 fromanc2_tilemap[1][0] = tilemap_create(fromancr_get_v1_l0_tile_info, tilemap_scan_rows, TILEMAP_OPAQUE, 8, 8, 64, 64);
511 fromanc2_tilemap[1][1] = tilemap_create(fromancr_get_v1_l1_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 64, 64);
512 fromanc2_tilemap[1][2] = tilemap_create(fromancr_get_v1_l2_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 64, 64);
513 fromanc2_tilemap[1][3] = 0;
514
515 fromanc2_videoram[0][0] = auto_malloc((64 * 64) * sizeof(data16_t));
516 fromanc2_videoram[0][1] = auto_malloc((64 * 64) * sizeof(data16_t));
517 fromanc2_videoram[0][2] = auto_malloc((64 * 64) * sizeof(data16_t));
518 fromanc2_videoram[1][0] = auto_malloc((64 * 64) * sizeof(data16_t));
519 fromanc2_videoram[1][1] = auto_malloc((64 * 64) * sizeof(data16_t));
520 fromanc2_videoram[1][2] = auto_malloc((64 * 64) * sizeof(data16_t));
521
522 fromanc2_paletteram[0] = auto_malloc(0x800 * 2);
523 fromanc2_paletteram[1] = auto_malloc(0x800 * 2);
524
525 if (!fromanc2_tilemap[0][0] ||
526 !fromanc2_tilemap[0][1] ||
527 !fromanc2_tilemap[0][2] ||
528 !fromanc2_tilemap[1][0] ||
529 !fromanc2_tilemap[1][1] ||
530 !fromanc2_tilemap[1][2] ||
531 !fromanc2_videoram[0][0] ||
532 !fromanc2_videoram[0][1] ||
533 !fromanc2_videoram[0][2] ||
534 !fromanc2_videoram[1][0] ||
535 !fromanc2_videoram[1][1] ||
536 !fromanc2_videoram[1][2] ||
537 !fromanc2_paletteram[0] ||
538 !fromanc2_paletteram[1]) {
539 return 1;
540 }
541
542 tilemap_set_transparent_pen(fromanc2_tilemap[0][1], 0x0ff);
543 tilemap_set_transparent_pen(fromanc2_tilemap[0][2], 0x0ff);
544 tilemap_set_transparent_pen(fromanc2_tilemap[1][1], 0x0ff);
545 tilemap_set_transparent_pen(fromanc2_tilemap[1][2], 0x0ff);
546
547 fromanc2_dispvram = 0;
548
549 return 0;
550 }
551
552
VIDEO_START(fromanc4)553 VIDEO_START( fromanc4 )
554 {
555 fromanc2_tilemap[0][0] = tilemap_create(fromancr_get_v0_l0_tile_info, tilemap_scan_rows, TILEMAP_OPAQUE, 8, 8, 256, 64);
556 fromanc2_tilemap[0][1] = tilemap_create(fromancr_get_v0_l1_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 256, 64);
557 fromanc2_tilemap[0][2] = tilemap_create(fromancr_get_v0_l2_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 256, 64);
558 fromanc2_tilemap[0][3] = 0;
559 fromanc2_tilemap[1][0] = tilemap_create(fromancr_get_v1_l0_tile_info, tilemap_scan_rows, TILEMAP_OPAQUE, 8, 8, 256, 64);
560 fromanc2_tilemap[1][1] = tilemap_create(fromancr_get_v1_l1_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 256, 64);
561 fromanc2_tilemap[1][2] = tilemap_create(fromancr_get_v1_l2_tile_info, tilemap_scan_rows, TILEMAP_TRANSPARENT, 8, 8, 256, 64);
562 fromanc2_tilemap[1][3] = 0;
563
564 fromanc2_videoram[0][0] = auto_malloc((256 * 64) * sizeof(data16_t));
565 fromanc2_videoram[0][1] = auto_malloc((256 * 64) * sizeof(data16_t));
566 fromanc2_videoram[0][2] = auto_malloc((256 * 64) * sizeof(data16_t));
567 fromanc2_videoram[1][0] = auto_malloc((256 * 64) * sizeof(data16_t));
568 fromanc2_videoram[1][1] = auto_malloc((256 * 64) * sizeof(data16_t));
569 fromanc2_videoram[1][2] = auto_malloc((256 * 64) * sizeof(data16_t));
570
571 fromanc2_paletteram[0] = auto_malloc(0x800 * 2);
572 fromanc2_paletteram[1] = auto_malloc(0x800 * 2);
573
574 if (!fromanc2_tilemap[0][0] ||
575 !fromanc2_tilemap[0][1] ||
576 !fromanc2_tilemap[0][2] ||
577 !fromanc2_tilemap[1][0] ||
578 !fromanc2_tilemap[1][1] ||
579 !fromanc2_tilemap[1][2] ||
580 !fromanc2_videoram[0][0] ||
581 !fromanc2_videoram[0][1] ||
582 !fromanc2_videoram[0][2] ||
583 !fromanc2_videoram[1][0] ||
584 !fromanc2_videoram[1][1] ||
585 !fromanc2_videoram[1][2] ||
586 !fromanc2_paletteram[0] ||
587 !fromanc2_paletteram[1]) {
588 return 1;
589 }
590
591 tilemap_set_transparent_pen(fromanc2_tilemap[0][1], 0x000);
592 tilemap_set_transparent_pen(fromanc2_tilemap[0][2], 0x000);
593 tilemap_set_transparent_pen(fromanc2_tilemap[1][1], 0x000);
594 tilemap_set_transparent_pen(fromanc2_tilemap[1][2], 0x000);
595
596 fromanc2_dispvram = 0;
597
598 return 0;
599 }
600
601 /******************************************************************************
602
603 Display refresh
604
605 ******************************************************************************/
606
VIDEO_UPDATE(fromanc2)607 VIDEO_UPDATE( fromanc2 )
608 {
609 if (fromanc2_tilemap[fromanc2_dispvram][0]) {
610 tilemap_set_scrollx(fromanc2_tilemap[fromanc2_dispvram][0], 0, -fromanc2_scrollx[fromanc2_dispvram][0]);
611 tilemap_set_scrolly(fromanc2_tilemap[fromanc2_dispvram][0], 0, -fromanc2_scrolly[fromanc2_dispvram][0]);
612 tilemap_draw(bitmap,cliprect, fromanc2_tilemap[fromanc2_dispvram][0], 0, 0);
613 }
614 if (fromanc2_tilemap[fromanc2_dispvram][1]) {
615 tilemap_set_scrollx(fromanc2_tilemap[fromanc2_dispvram][1], 0, -fromanc2_scrollx[fromanc2_dispvram][1]);
616 tilemap_set_scrolly(fromanc2_tilemap[fromanc2_dispvram][1], 0, -fromanc2_scrolly[fromanc2_dispvram][1]);
617 tilemap_draw(bitmap,cliprect, fromanc2_tilemap[fromanc2_dispvram][1], 0, 0);
618 }
619 if (fromanc2_tilemap[fromanc2_dispvram][2]) {
620 tilemap_set_scrollx(fromanc2_tilemap[fromanc2_dispvram][2], 0, -fromanc2_scrollx[fromanc2_dispvram][2]);
621 tilemap_set_scrolly(fromanc2_tilemap[fromanc2_dispvram][2], 0, -fromanc2_scrolly[fromanc2_dispvram][2]);
622 tilemap_draw(bitmap,cliprect, fromanc2_tilemap[fromanc2_dispvram][2], 0, 0);
623 }
624 if (fromanc2_tilemap[fromanc2_dispvram][3]) {
625 tilemap_set_scrollx(fromanc2_tilemap[fromanc2_dispvram][3], 0, -fromanc2_scrollx[fromanc2_dispvram][3]);
626 tilemap_set_scrolly(fromanc2_tilemap[fromanc2_dispvram][3], 0, -fromanc2_scrolly[fromanc2_dispvram][3]);
627 tilemap_draw(bitmap,cliprect, fromanc2_tilemap[fromanc2_dispvram][3], 0, 0);
628 }
629 }
630