1 // konamiic.cpp
2 //---------------------------------------------------------------------------------------------------------------
3 extern UINT32 KonamiIC_K051960InUse;
4 extern UINT32 KonamiIC_K052109InUse;
5 extern UINT32 KonamiIC_K051316InUse;
6 extern UINT32 KonamiIC_K053245InUse;
7 extern UINT32 KonamiIC_K053247InUse;
8 extern UINT32 KonamiIC_K053936InUse;
9 extern UINT32 KonamiIC_K053250InUse;
10 extern UINT32 KonamiIC_K055555InUse;
11 extern UINT32 KonamiIC_K054338InUse;
12 extern UINT32 KonamiIC_K056832InUse;
13 extern UINT32 KonamiIC_GX_MixerInUse;
14 
15 extern UINT8 *konami_priority_bitmap;
16 extern UINT32 *konami_bitmap32;
17 extern UINT32 *konami_palette32;
18 
19 void KonamiClearBitmaps(UINT32 color);
20 void KonamiBlendCopy(UINT32 *palette);
21 
22 void KonamiICReset();
23 void KonamiICExit();
24 void KonamiICScan(INT32 nAction);
25 
26 void konami_sortlayers3( int *layer, int *pri );
27 void konami_sortlayers4( int *layer, int *pri );
28 void konami_sortlayers5( int *layer, int *pri );
29 
30 void KonamiRecalcPalette(UINT8 *src, UINT32 *dst, INT32 len);
31 
32 void konami_rom_deinterleave_2(UINT8 *src, INT32 len);
33 void konami_rom_deinterleave_4(UINT8 *src, INT32 len);
34 
35 // internal
36 void KonamiAllocateBitmaps();
37 void konami_draw_16x16_tile(UINT8 *gfx, INT32 code, INT32 bpp, INT32 color, INT32 sx, INT32 sy, INT32 flipx, INT32 flipy);
38 void konami_draw_16x16_prio_sprite(UINT8 *gfx, INT32 code, INT32 bpp, INT32 color, INT32 sx, INT32 sy, INT32 flipx, INT32 flipy, UINT32 priority);
39 void konami_draw_16x16_zoom_tile(UINT8 *gfx, INT32 code, INT32 bpp, INT32 color, INT32 t, INT32 sx, INT32 sy, INT32 fx, INT32 fy, INT32 width, INT32 height, INT32 zoomx, INT32 zoomy);
40 void konami_draw_16x16_priozoom_sprite(UINT8 *gfx, INT32 code, INT32 bpp, INT32 color, INT32 t, INT32 sx, INT32 sy, INT32 fx, INT32 fy, INT32 width, INT32 height, INT32 zoomx, INT32 zoomy, UINT32 priority);
41 void konami_render_zoom_shadow_sprite(UINT8 *gfx, INT32 code, INT32 bpp, INT32 color, INT32 sx, INT32 sy, INT32 fx, INT32 fy, INT32 width, INT32 height, INT32 zoomx, INT32 zoomy, UINT32 priority, INT32 shadow);
42 
43 // game-specific modes
44 void konami_set_highlight_mode(INT32 mode);
45 void konami_set_highlight_over_sprites_mode(INT32 mode);
46 void konami_set_layer_shadow_inhibit_mode(INT32 mode);
47 void konami_set_highlight_intensity(INT32 mode);
48 void konami_set_shadow_intensity(INT32 mode);
49 
50 // k051960 / k052109 shared
51 //---------------------------------------------------------------------------------------------------------------
52 void K052109_051960_w(INT32 offset, INT32 data);
53 UINT8 K052109_051960_r(INT32 offset);
54 
55 // k051960.cpp
56 //---------------------------------------------------------------------------------------------------------------
57 extern INT32 K051960ReadRoms;
58 extern INT32 K052109_irq_enabled;
59 void K051960SpritesRender(INT32 min_priority, INT32 max_priority);
60 UINT8 K0519060FetchRomData(UINT32 Offset);
61 UINT8 K051960Read(UINT32 Offset);
62 void K051960Write(UINT32 Offset, UINT8 Data);
63 void K051960SetCallback(void (*Callback)(INT32 *Code, INT32 *Colour, INT32 *Priority, INT32 *Shadow));
64 void K051960SetSpriteOffset(INT32 x, INT32 y);
65 void K051960Reset();
66 void K051960GfxDecode(UINT8 *src, UINT8 *dst, INT32 len);
67 void K051960Init(UINT8* pRomSrc, UINT8* pRomSrcExp, UINT32 RomMask);
68 void K051960Exit();
69 void K051960Scan(INT32 nAction);
70 void K051960SetBpp(INT32 bpp);
71 
72 void K051937Write(UINT32 Offset, UINT8 Data);
73 UINT8 K051937Read(UINT32 Offset);
74 
75 // k052109.cpp
76 //---------------------------------------------------------------------------------------------------------------
77 extern INT32 K052109RMRDLine;
78 extern INT32 K051960_irq_enabled;
79 extern INT32 K051960_nmi_enabled;
80 extern INT32 K051960_spriteflip;
81 
82 void K052109UpdateScroll();
83 void K052109AdjustScroll(INT32 x, INT32 y);
84 
85 #define K052109_OPAQUE		0x10000
86 #define K052109_CATEGORY(x)	(0x100|((x)&0xff))
87 
88 void K052109RenderLayer(INT32 nLayer, INT32 Flags, INT32 Priority);
89 UINT8 K052109Read(UINT32 Offset);
90 void K052109Write(UINT32 Offset, UINT8 Data);
91 void K052109SetCallback(void (*Callback)(INT32 Layer, INT32 Bank, INT32 *Code, INT32 *Colour, INT32 *xFlip, INT32 *priority));
92 void K052109Reset();
93 void K052109GfxDecode(UINT8 *src, UINT8 *dst, INT32 nLen);
94 void K052109Init(UINT8 *pRomSrc, UINT8* pRomSrcExp, UINT32 RomMask);
95 void K052109Exit();
96 void K052109Scan(INT32 nAction);
97 
98 #define K051960ByteRead(nStartAddress)						\
99 if (a >= nStartAddress && a <= nStartAddress + 0x3ff) {				\
100 	return K051960Read(a - nStartAddress);					\
101 }
102 
103 #define K051960ByteWrite(nStartAddress)						\
104 if (a >= nStartAddress && a <= nStartAddress + 0x3ff) {				\
105 	K051960Write((a - nStartAddress), d);					\
106 	return;									\
107 }
108 
109 #define K051960WordWrite(nStartAddress)						\
110 if (a >= nStartAddress && a <= nStartAddress + 0x3ff) {				\
111 	if (a & 1) {								\
112 		K051960Write((a - nStartAddress) + 1, d & 0xff);		\
113 	} else {								\
114 		K051960Write((a - nStartAddress) + 0, (d >> 8) & 0xff);		\
115 	}									\
116 	return;									\
117 }
118 
119 #define K051937ByteRead(nStartAddress)						\
120 if (a >= nStartAddress && a <= nStartAddress + 7) {				\
121 	INT32 Offset = (a - nStartAddress);					\
122 										\
123 	if (Offset == 0) {							\
124 		static INT32 Counter;						\
125 		return (Counter++) & 1;						\
126 	}									\
127 										\
128 	if (K051960ReadRoms && (Offset >= 0x04 && Offset <= 0x07)) {		\
129 		return K0519060FetchRomData(Offset & 3);			\
130 	}									\
131 										\
132 	return 0;								\
133 }
134 
135 #define K015937ByteWrite(nStartAddress)						\
136 if (a >= nStartAddress && a <= nStartAddress + 7) {				\
137 	K051937Write((a - nStartAddress), d);					\
138 	return;									\
139 }
140 
141 #define K052109WordNoA12Read(nStartAddress)					\
142 if (a >= nStartAddress && a <= nStartAddress + 0x7fff) {			\
143 	INT32 Offset = (a - nStartAddress) >> 1;					\
144 	Offset = ((Offset & 0x3000) >> 1) | (Offset & 0x07ff);			\
145 										\
146 	if (a & 1) {								\
147 		return K052109Read(Offset + 0x2000);				\
148 	} else {								\
149 		return K052109Read(Offset + 0x0000);				\
150 	}									\
151 }
152 
153 
154 #define K052109WordNoA12Write(nStartAddress)					\
155 if (a >= nStartAddress && a <= nStartAddress + 0x7fff) {			\
156 	INT32 Offset = (a - nStartAddress) >> 1;					\
157 	Offset = ((Offset & 0x3000) >> 1) | (Offset & 0x07ff);			\
158 										\
159 	if (a & 1) {								\
160 		K052109Write(Offset + 0x2000, d);				\
161 	} else {								\
162 		K052109Write(Offset + 0x0000, d);				\
163 	}									\
164 	return;									\
165 }
166 
167 
168 // K056832.cpp
169 //---------------------------------------------------------------------------------------------------------------
170 #define K056832_LAYER_ALPHA			0x00100000
171 #define K056832_LAYER_OPAQUE			0x00400000
172 #define K056832_DRAW_FLAG_MIRROR     		0x00800000
173 #define K056382_DRAW_FLAG_FORCE_XYSCROLL	0x00800000 // same as flag mirror
174 
175 #define K056832_SET_ALPHA(x)			(K056832_LAYER_ALPHA | ((x)<<8))
176 
177 void K056832Reset();
178 void K056832Init(UINT8 *rom, UINT8 *romexp, INT32 rom_size, void (*cb)(INT32 layer, INT32 *code, INT32 *color, INT32 *flags));
179 void K056832Exit();
180 void K056832Scan(INT32 nAction);
181 void K056832SetLayerAssociation(INT32 status);
182 void K056832SetGlobalOffsets(INT32 minx, INT32 miny);
183 void K056832SetLayerOffsets(INT32 layer, INT32 xoffs, INT32 yoffs);
184 void K056832SetExtLinescroll();
185 void K056832SetLinemap();
186 UINT16 K056832GetVram(INT32 address);
187 INT32 K056832IsIrqEnabled();
188 void K056832ReadAvac(INT32 *mode, INT32 *data);
189 UINT16 K056832ReadRegister(int reg);
190 INT32 K056832GetLookup(INT32 bits);
191 void K056832SetTileBank(int bank);
192 void K056832WordWrite(INT32 offset, UINT16 data);
193 void K056832ByteWrite(INT32 offset, UINT8 data);
194 UINT16 K056832RomWordRead(UINT16 offset);
195 void K056832HalfRamWriteWord(UINT32 offset, UINT16 data);
196 void K056832HalfRamWriteByte(UINT32 offset, UINT8 data);
197 UINT16 K056832HalfRamReadWord(UINT32 offset);
198 UINT8 K056832HalfRamReadByte(UINT32 offset);
199 void K056832RamWriteWord(UINT32 offset, UINT16 data);
200 void K056832RamWriteByte(UINT32 offset, UINT8 data);
201 UINT16 K056832RamReadWord(UINT32 offset);
202 UINT8 K056832RamReadByte(UINT32 offset);
203 UINT16 K056832RomWord8000Read(INT32 offset);
204 void K056832WritebRegsWord(INT32 offset, UINT16 data);
205 void K056832WritebRegsByte(INT32 offset, UINT8 data);
206 UINT16 K056832mwRomWordRead(INT32 address);
207 void K056832Draw(INT32 layer, UINT32 flags, UINT32 priority);
208 INT32 K056832GetLayerAssociation();
209 void K056832Metamorphic_Fixup();
210 
211 // K051316.cpp
212 //---------------------------------------------------------------------------------------------------------------
213 void K051316Init(INT32 chip, UINT8 *gfx, UINT8 *gfxexp, INT32 mask, void (*callback)(INT32 *code,INT32 *color,INT32 *flags), INT32 bpp, INT32 transp);
214 void K051316Reset();
215 void K051316Exit();
216 
217 #define K051316_16BIT	(1<<8)
218 #define K051316_OPAQUE  (2<<8)
219 
220 void K051316RedrawTiles(INT32 chip);
221 
222 UINT8 K051316ReadRom(INT32 chip, INT32 offset);
223 UINT8 K051316Read(INT32 chip, INT32 offset);
224 void K051316Write(INT32 chip, INT32 offset, INT32 data);
225 
226 void K051316WriteCtrl(INT32 chip, INT32 offset, INT32 data);
227 UINT8 K051316ReadCtrl(INT32 chip, INT32 offset);
228 void K051316WrapEnable(INT32 chip, INT32 status);
229 void K051316SetOffset(INT32 chip, INT32 xoffs, INT32 yoffs);
230 void K051316_zoom_draw(INT32 chip, INT32 flags);
231 void K051316Scan(INT32 nAction);
232 
233 // K053245 / k053247 shared
234 //---------------------------------------------------------------------------------------------------------------
235 extern INT32 K05324xZRejection;
236 void K05324xSetZRejection(INT32 z);
237 
238 // K053245.cpp
239 //---------------------------------------------------------------------------------------------------------------
240 INT32 K053245Reset();
241 void K053245GfxDecode(UINT8 *src, UINT8 *dst, INT32 len);
242 void K053245Init(INT32 chip, UINT8 *gfx, UINT8 *gfxexp, INT32 mask, void (*callback)(INT32 *code,INT32 *color,INT32 *priority));
243 void K053245Exit();
244 void K053245SetBpp(INT32 chip, INT32 bpp);
245 
246 void K053245SpritesRender(INT32 chip);
247 
248 void K053245SetSpriteOffset(INT32 chip,INT32 offsx, INT32 offsy);
249 void K053245ClearBuffer(INT32 chip);
250 void K053245UpdateBuffer(INT32 chip);
251 void K053244BankSelect(INT32 chip, INT32 bank);
252 
253 UINT16 K053245ReadWord(INT32 chip, INT32 offset);
254 void K053245WriteWord(INT32 chip, INT32 offset, INT32 data);
255 
256 UINT8 K053245Read(INT32 chip, INT32 offset);
257 void K053245Write(INT32 chip, INT32 offset, INT32 data);
258 UINT8 K053244Read(INT32 chip, INT32 offset);
259 void K053244Write(INT32 chip, INT32 offset, INT32 data);
260 
261 void K053245Scan(INT32 nAction);
262 
263 extern UINT8 *K053245Ram[2];
264 
265 // K053251.cpp
266 //---------------------------------------------------------------------------------------------------------------
267 void K053251Reset();
268 
269 void K053251Write(INT32 offset, INT32 data);
270 
271 INT32 K053251GetPriority(INT32 idx);
272 INT32 K053251GetPaletteIndex(INT32 idx);
273 
274 void K053251Write(INT32 offset, INT32 data);
275 
276 void K053251Scan(INT32 nAction);
277 
278 // K053247.cpp
279 //---------------------------------------------------------------------------------------------------------------
280 void K053247Reset();
281 void K053247Init(UINT8 *gfxrom, UINT8 *gfxromexp, INT32 gfxlen, void (*Callback)(INT32 *code, INT32 *color, INT32 *priority), INT32 flags);
282 void K053247Exit();
283 void K053247Scan(INT32 nAction);
284 
285 void K053247SetBpp(INT32 bpp);
286 
287 extern UINT8 *K053247Ram;
288 extern void (*K053247Callback)(INT32 *code, INT32 *color, INT32 *priority);
289 
290 void K053247Export(UINT8 **ram, UINT8 **gfx, void (**callback)(INT32 *, INT32 *, INT32 *), INT32 *dx, INT32 *dy);
291 void K053247GfxDecode(UINT8 *src, UINT8 *dst, INT32 len); // 16x16
292 void K053247SetSpriteOffset(INT32 offsx, INT32 offsy);
293 void K053247WrapEnable(INT32 status);
294 
295 void K053246_set_OBJCHA_line(INT32 state); // 1 assert, 0 clear
296 INT32 K053246_is_IRQ_enabled();
297 
298 UINT8 K053247Read(INT32 offset);
299 void K053247Write(INT32 offset, INT32 data);
300 UINT8 K053246Read(INT32 offset);
301 void K053246Write(INT32 offset, INT32 data);
302 
303 void K053247WriteRegsByte(INT32 offset, UINT8 data);
304 void K053247WriteRegsWord(INT32 offset, UINT16 data);
305 UINT16 K053247ReadRegs(INT32 offset);
306 UINT16 K053246ReadRegs(INT32 offset);
307 
308 void K053247SpritesRender();
309 
310 UINT16 K053247ReadWord(INT32 offset);
311 void K053247WriteWord(INT32 offset, UINT16 data);
312 
313 // k054000.cpp
314 //------------------------------------------------------------------------------------------
315 void K054000Reset();
316 void K054000Write(INT32 offset, INT32 data);
317 UINT8 K054000Read(INT32 address);
318 void K054000Scan(INT32 nAction);
319 
320 // K051733.cpp
321 //------------------------------------------------------------------------------------------
322 void K051733Reset();
323 void K051733Write(INT32 offset, INT32 data);
324 UINT8 K051733Read(INT32 offset);
325 void K051733Scan(INT32 nAction);
326 
327 // K053936.cpp
328 //------------------------------------------------------------------------------------------
329 
330 void K053936Init(INT32 chip, UINT8 *ram, INT32 len, INT32 w, INT32 h, void (*pCallback)(INT32 offset, UINT16 *ram, INT32 *code, INT32 *color, INT32 *sx, INT32 *sy, INT32 *fx, INT32 *fy));
331 
332 void K053936Reset();
333 void K053936Exit();
334 void K053936Scan(INT32 nAction);
335 
336 void K053936EnableWrap(INT32 chip, INT32 status);
337 void K053936SetOffset(INT32 chip, INT32 xoffs, INT32 yoffs);
338 void K053936PredrawTiles3(INT32 chip, UINT8 *gfx, INT32 tile_size_x, INT32 tile_size_y, INT32 transparent);
339 void K053936PredrawTiles2(INT32 chip, UINT8 *gfx);
340 void K053936PredrawTiles(INT32 chip, UINT8 *gfx, INT32 transparent, INT32 tcol /*transparent color*/);
341 void K053936Draw(INT32 chip, UINT16 *ctrl, UINT16 *linectrl, INT32 transp);
342 
343 extern UINT16 *m_k053936_0_ctrl_16;
344 extern UINT16 *m_k053936_0_linectrl_16;
345 extern UINT16 *m_k053936_0_ctrl;
346 extern UINT16 *m_k053936_0_linectrl;
347 extern UINT16 *K053936_external_bitmap;
348 
349 void K053936GP_set_colorbase(INT32 chip, INT32 color_base);
350 void K053936GP_enable(int chip, int enable);
351 void K053936GP_set_offset(int chip, int xoffs, int yoffs);
352 void K053936GP_clip_enable(int chip, int status);
353 void K053936GP_set_cliprect(int chip, int minx, int maxx, int miny, int maxy);
354 void K053936GP_0_zoom_draw(UINT16 *bitmap, int tilebpp, int blend, int alpha, int pixeldouble_output, UINT16* temp_m_k053936_0_ctrl_16, UINT16* temp_m_k053936_0_linectrl_16,UINT16* temp_m_k053936_0_ctrl, UINT16* temp_m_k053936_0_linectrl);
355 void K053936GpInit();
356 void K053936GPExit();
357 
358 // k053250.cpp
359 //------------------------------------------------------------------------------------------
360 
361 extern UINT16 *K053250Ram; // allocated in k053250Init
362 
363 void K053250Init(INT32 chip, UINT8 *rom, UINT8 *romexp, INT32 size);
364 void K053250SetOffsets(INT32 chip, int offx, int offy);
365 void K053250Reset();
366 void K053250Scan(INT32 nAction);
367 void K053250Exit();
368 
369 void K053250Draw(INT32 chip, int colorbase, int flags, int priority);
370 
371 UINT16 K053250RegRead(INT32 chip, INT32 offset);
372 void K053250RegWrite(INT32 chip, INT32 offset, UINT8 data);
373 UINT16 K053250RomRead(INT32 chip, INT32 offset);
374 
375 
376 // k054338.cpp
377 //------------------------------------------------------------------------------------------
378 
379 #define K338_REG_BGC_R      0
380 #define K338_REG_BGC_GB     1
381 #define K338_REG_SHAD1R     2
382 #define K338_REG_BRI3       11
383 #define K338_REG_PBLEND     13
384 #define K338_REG_CONTROL    15
385 
386 #define K338_CTL_KILL       0x01    /* 0 = no video output, 1 = enable */
387 #define K338_CTL_MIXPRI     0x02
388 #define K338_CTL_SHDPRI     0x04
389 #define K338_CTL_BRTPRI     0x08
390 #define K338_CTL_WAILSL     0x10
391 #define K338_CTL_CLIPSL     0x20
392 
393 void K054338Init();
394 void K054338Reset();
395 void K054338Exit();
396 void K054338Scan(INT32 nAction);
397 void K054338WriteWord(INT32 offset, UINT16 data);
398 void K054338WriteByte(INT32 offset, UINT8 data);
399 INT32 K054338_read_register(int reg);
400 void K054338_fill_solid_bg();
401 void K054338_fill_backcolor(int palette_offset, int mode);
402 INT32 K054338_set_alpha_level(int pblend);
403 INT32 K054338_alpha_level_moo(INT32 pblend);
404 void K054338_invert_alpha(int invert);
405 void K054338_update_all_shadows(INT32 rushingheroes_hack);
406 void K054338_export_config(int **shdRGB);
407 
408 extern INT32 m_shd_rgb[12];
409 
410 // k055555.cpp
411 //------------------------------------------------------------------------------------------
412 
413 #define K55_PALBASE_BG      0   // background palette
414 #define K55_CONTROL         1   // control register
415 #define K55_COLSEL_0        2   // layer A, B color depth
416 #define K55_COLSEL_1        3   // layer C, D color depth
417 #define K55_COLSEL_2        4   // object, S1 color depth
418 #define K55_COLSEL_3        5   // S2, S3 color depth
419 
420 #define K55_PRIINP_0        7   // layer A pri 0
421 #define K55_PRIINP_1        8   // layer A pri 1
422 #define K55_PRIINP_2        9   // layer A "COLPRI"
423 #define K55_PRIINP_3        10  // layer B pri 0
424 #define K55_PRIINP_4        11  // layer B pri 1
425 #define K55_PRIINP_5        12  // layer B "COLPRI"
426 #define K55_PRIINP_6        13  // layer C pri
427 #define K55_PRIINP_7        14  // layer D pri
428 #define K55_PRIINP_8        15  // OBJ pri
429 #define K55_PRIINP_9        16  // sub 1 (GP:PSAC) pri
430 #define K55_PRIINP_10       17  // sub 2 (GX:PSAC) pri
431 #define K55_PRIINP_11       18  // sub 3 pri
432 
433 #define K55_OINPRI_ON       19  // object priority bits selector
434 
435 #define K55_PALBASE_A       23  // layer A palette
436 #define K55_PALBASE_B       24  // layer B palette
437 #define K55_PALBASE_C       25  // layer C palette
438 #define K55_PALBASE_D       26  // layer D palette
439 #define K55_PALBASE_OBJ     27  // OBJ palette
440 #define K55_PALBASE_SUB1    28  // SUB1 palette
441 #define K55_PALBASE_SUB2    29  // SUB2 palette
442 #define K55_PALBASE_SUB3    30  // SUB3 palette
443 
444 #define K55_BLEND_ENABLES   33  // blend enables for tilemaps
445 #define K55_VINMIX_ON       34  // additional blend enables for tilemaps
446 #define K55_OSBLEND_ENABLES 35  // obj/sub blend enables
447 #define K55_OSBLEND_ON      36  // not sure, related to obj/sub blend
448 
449 #define K55_SHAD1_PRI       37  // shadow/highlight 1 priority
450 #define K55_SHAD2_PRI       38  // shadow/highlight 2 priority
451 #define K55_SHAD3_PRI       39  // shadow/highlight 3 priority
452 #define K55_SHD_ON          40  // shadow/highlight
453 #define K55_SHD_PRI_SEL     41  // shadow/highlight
454 
455 #define K55_VBRI            42  // VRAM layer brightness enable
456 #define K55_OSBRI           43  // obj/sub brightness enable, part 1
457 #define K55_OSBRI_ON        44  // obj/sub brightness enable, part 2
458 #define K55_INPUT_ENABLES   45  // input enables
459 
460 /* bit masks for the control register */
461 #define K55_CTL_GRADDIR     0x01    // 0=vertical, 1=horizontal
462 #define K55_CTL_GRADENABLE  0x02    // 0=BG is base color only, 1=gradient
463 #define K55_CTL_FLIPPRI     0x04    // 0=standard Konami priority, 1=reverse
464 #define K55_CTL_SDSEL       0x08    // 0=normal shadow timing, 1=(not used by GX)
465 
466 /* bit masks for the input enables */
467 #define K55_INP_VRAM_A      0x01
468 #define K55_INP_VRAM_B      0x02
469 #define K55_INP_VRAM_C      0x04
470 #define K55_INP_VRAM_D      0x08
471 #define K55_INP_OBJ         0x10
472 #define K55_INP_SUB1        0x20
473 #define K55_INP_SUB2        0x40
474 #define K55_INP_SUB3        0x80
475 
476 #define K055555_COLORMASK   0x0000ffff
477 #define K055555_MIXSHIFT    16
478 #define K055555_BRTSHIFT    18
479 #define K055555_SKIPSHADOW  0x40000000
480 #define K055555_FULLSHADOW  0x80000000
481 
482 extern INT32 K055555_enabled;
483 void K055555WriteReg(UINT8 regnum, UINT8 regdat);
484 void K055555LongWrite(INT32 offset, UINT32 data); // not implimented
485 void K055555WordWrite(INT32 offset, UINT16 data);
486 void K055555ByteWrite(INT32 offset, UINT8 data);
487 INT32 K055555ReadRegister(INT32 regnum);
488 INT32 K055555GetPaletteIndex(INT32 idx);
489 void K055555Reset();
490 void K055555Init();
491 void K055555Exit();
492 void K055555Scan(INT32 nAction);
493 
494 
495 // konamigx.cpp
496 #define GXMIX_BLEND_AUTO    0           // emulate all blend effects
497 #define GXMIX_BLEND_NONE    1           // disable all blend effects
498 #define GXMIX_BLEND_FAST    2           // simulate translucency
499 #define GXMIX_BLEND_FORCE   3           // force mix code on selected layer(s)
500 #define GXMIX_NOLINESCROLL  0x1000      // disable linescroll on selected layer(s)
501 #define GXMIX_NOSHADOW      0x10000000  // disable all shadows (shadow pens will be skipped)
502 #define GXMIX_NOZBUF        0x20000000  // disable z-buffering (shadow pens will be drawn as solid)
503 
504 // Sub Layer Flags
505 #define GXSUB_K053250   0x10    // chip type: 0=K053936 ROZ+, 1=K053250 LVC
506 #define GXSUB_4BPP      0x04    //  16 colors
507 #define GXSUB_5BPP      0x05    //  32 colors
508 #define GXSUB_8BPP      0x08    // 256 colors
509 
510 void konamigx_mixer_init(int objdma);
511 void konamigx_mixer_exit();
512 void konamigx_scan(INT32 nAction);
513 void konamigx_mixer_primode(int mode);
514 void konamigx_mixer(int sub1 /*extra tilemap 1*/, int sub1flags, int sub2 /*extra tilemap 2*/, int sub2flags, int mixerflags, int extra_bitmap /*extra tilemap 3*/, int rushingheroes_hack);
515 extern INT32 konamigx_mystwarr_kludge;
516