2 * Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
4 * (c) Copyright 1996 - 2001 Gary Henderson (gary.henderson@ntlworld.com) and
5 * Jerremy Koot (jkoot@snes9x.com)
7 * Super FX C emulator code
8 * (c) Copyright 1997 - 1999 Ivar (ivar@snes9x.com) and
10 * Super FX assembler emulator code (c) Copyright 1998 zsKnight and _Demo_.
12 * DSP1 emulator code (c) Copyright 1998 Ivar, _Demo_ and Gary Henderson.
13 * C4 asm and some C emulation code (c) Copyright 2000 zsKnight and _Demo_.
14 * C4 C code (c) Copyright 2001 Gary Henderson (gary.henderson@ntlworld.com).
16 * DOS port code contains the works of other authors. See headers in
19 * Snes9x homepage: http://www.snes9x.com
21 * Permission to use, copy, modify and distribute Snes9x in both binary and
22 * source form, for non-commercial purposes, is hereby granted without fee,
23 * providing that this license information and copyright notice appear with
24 * all copies and any derived work.
26 * This software is provided 'as-is', without any express or implied
27 * warranty. In no event shall the authors be held liable for any damages
28 * arising from the use of this software.
30 * Snes9x is freeware for PERSONAL USE only. Commercial users should
31 * seek permission of the copyright holders first. Commercial use includes
32 * charging money for Snes9x or software derived from Snes9x.
34 * The copyright holders request that bug fixes and improvements to the code
35 * should be forwarded to them so everyone can benefit from the modifications
38 * Super NES and Super Nintendo Entertainment System are trademarks of
39 * Nintendo Co., Limited and its subsidiary companies.
52 extern uint32 HeadMask [4];
53 extern uint32 TailMask [5];
55 uint8 orgConvertTile (uint8 *pCache, uint32 TileAddr)
57 register uint8 *tp = &Memory.VRAM[TileAddr];
58 uint32 *p = (uint32 *) pCache;
65 for (line = 8; line != 0; line--, tp += 2)
71 if ((pix = *(tp + 0)))
73 p1 |= odd_high[0][pix >> 4];
74 p2 |= odd_low[0][pix & 0xf];
76 if ((pix = *(tp + 1)))
78 p1 |= even_high[0][pix >> 4];
79 p2 |= even_low[0][pix & 0xf];
81 if ((pix = *(tp + 16)))
83 p1 |= odd_high[1][pix >> 4];
84 p2 |= odd_low[1][pix & 0xf];
86 if ((pix = *(tp + 17)))
88 p1 |= even_high[1][pix >> 4];
89 p2 |= even_low[1][pix & 0xf];
91 if ((pix = *(tp + 32)))
93 p1 |= odd_high[2][pix >> 4];
94 p2 |= odd_low[2][pix & 0xf];
96 if ((pix = *(tp + 33)))
98 p1 |= even_high[2][pix >> 4];
99 p2 |= even_low[2][pix & 0xf];
101 if ((pix = *(tp + 48)))
103 p1 |= odd_high[3][pix >> 4];
104 p2 |= odd_low[3][pix & 0xf];
106 if ((pix = *(tp + 49)))
108 p1 |= even_high[3][pix >> 4];
109 p2 |= even_low[3][pix & 0xf];
118 for (line = 8; line != 0; line--, tp += 2)
123 if ((pix = *(tp + 0)))
125 p1 |= odd_high[0][pix >> 4];
126 p2 |= odd_low[0][pix & 0xf];
128 if ((pix = *(tp + 1)))
130 p1 |= even_high[0][pix >> 4];
131 p2 |= even_low[0][pix & 0xf];
133 if ((pix = *(tp + 16)))
135 p1 |= odd_high[1][pix >> 4];
136 p2 |= odd_low[1][pix & 0xf];
138 if ((pix = *(tp + 17)))
140 p1 |= even_high[1][pix >> 4];
141 p2 |= even_low[1][pix & 0xf];
150 for (line = 8; line != 0; line--, tp += 2)
155 if ((pix = *(tp + 0)))
157 p1 |= odd_high[0][pix >> 4];
158 p2 |= odd_low[0][pix & 0xf];
160 if ((pix = *(tp + 1)))
162 p1 |= even_high[0][pix >> 4];
163 p2 |= even_low[0][pix & 0xf];
171 return (non_zero ? TRUE : BLANK_TILE);
176 #define PLOT_PIXEL(screen, pixel) (pixel)
178 inline void WRITE_4PIXELS16 (uint32 Offset, uint8 *Pixels)
181 uint16 *Screen = (uint16 *) GFX.S + Offset;
182 uint8 *Depth = GFX.DB + Offset;
185 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[N])) \
187 Screen [N] = GFX.ScreenColors [Pixel]; \
188 Depth [N] = GFX.Z2; \
198 inline void WRITE_4PIXELS16_FLIPPED (uint32 Offset, uint8 *Pixels)
201 uint16 *Screen = (uint16 *) GFX.S + Offset;
202 uint8 *Depth = GFX.DB + Offset;
205 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[3 - N])) \
207 Screen [N] = GFX.ScreenColors [Pixel]; \
208 Depth [N] = GFX.Z2; \
219 inline void WRITE_4PIXELSHI16 (uint32 Offset, uint8 *Pixels)
222 uint16 *Screen = (uint16 *) GFX.S + Offset;
223 uint8 *Depth = GFX.DB + Offset;
226 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[2*N])) \
228 Screen [N] = GFX.ScreenColors [Pixel]; \
229 Depth [N] = GFX.Z2; \
239 inline void WRITE_4PIXELSHI16_FLIPPED (uint32 Offset, uint8 *Pixels)
242 uint16 *Screen = (uint16 *) GFX.S + Offset;
243 uint8 *Depth = GFX.DB + Offset;
246 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[6 - 2*N])) \
248 Screen [N] = GFX.ScreenColors [Pixel]; \
249 Depth [N] = GFX.Z2; \
260 inline void WRITE_4PIXELS16x2 (uint32 Offset, uint8 *Pixels)
263 uint16 *Screen = (uint16 *) GFX.S + Offset;
264 uint8 *Depth = GFX.DB + Offset;
267 if (GFX.Z1 > Depth [N * 2] && (Pixel = Pixels[N])) \
269 Screen [N * 2] = Screen [N * 2 + 1] = GFX.ScreenColors [Pixel]; \
270 Depth [N * 2] = Depth [N * 2 + 1] = GFX.Z2; \
280 inline void WRITE_4PIXELS16_FLIPPEDx2 (uint32 Offset, uint8 *Pixels)
283 uint16 *Screen = (uint16 *) GFX.S + Offset;
284 uint8 *Depth = GFX.DB + Offset;
287 if (GFX.Z1 > Depth [N * 2] && (Pixel = Pixels[3 - N])) \
289 Screen [N * 2] = Screen [N * 2 + 1] = GFX.ScreenColors [Pixel]; \
290 Depth [N * 2] = Depth [N * 2 + 1] = GFX.Z2; \
300 inline void WRITE_4PIXELS16x2x2 (uint32 Offset, uint8 *Pixels)
303 uint16 *Screen = (uint16 *) GFX.S + Offset;
304 uint8 *Depth = GFX.DB + Offset;
307 if (GFX.Z1 > Depth [N * 2] && (Pixel = Pixels[N])) \
309 Screen [N * 2] = Screen [N * 2 + 1] = Screen [(GFX.RealPitch >> 1) + N * 2] = \
310 Screen [(GFX.RealPitch >> 1) + N * 2 + 1] = GFX.ScreenColors [Pixel]; \
311 Depth [N * 2] = Depth [N * 2 + 1] = Depth [(GFX.RealPitch >> 1) + N * 2] = \
312 Depth [(GFX.RealPitch >> 1) + N * 2 + 1] = GFX.Z2; \
322 inline void WRITE_4PIXELS16_FLIPPEDx2x2 (uint32 Offset, uint8 *Pixels)
325 uint16 *Screen = (uint16 *) GFX.S + Offset;
326 uint8 *Depth = GFX.DB + Offset;
329 if (GFX.Z1 > Depth [N * 2] && (Pixel = Pixels[3 - N])) \
331 Screen [N * 2] = Screen [N * 2 + 1] = Screen [(GFX.RealPitch >> 1) + N * 2] = \
332 Screen [(GFX.RealPitch >> 1) + N * 2 + 1] = GFX.ScreenColors [Pixel]; \
333 Depth [N * 2] = Depth [N * 2 + 1] = Depth [(GFX.RealPitch >> 1) + N * 2] = \
334 Depth [(GFX.RealPitch >> 1) + N * 2 + 1] = GFX.Z2; \
344 void orgDrawTile16 (uint32 Tile, uint32 Offset, uint32 StartLine,
350 RENDER_TILE(WRITE_4PIXELS16, WRITE_4PIXELS16_FLIPPED, 4)
353 void orgDrawClippedTile16 (uint32 Tile, uint32 Offset,
354 uint32 StartPixel, uint32 Width,
355 uint32 StartLine, uint32 LineCount)
361 RENDER_CLIPPED_TILE(WRITE_4PIXELS16, WRITE_4PIXELS16_FLIPPED, 4)
364 void orgDrawTileHi16 (uint32 Tile, uint32 Offset, uint32 StartLine,
370 RENDER_TILEHI(WRITE_4PIXELSHI16, WRITE_4PIXELSHI16_FLIPPED, 4)
373 void orgDrawClippedTileHi16 (uint32 Tile, uint32 Offset,
374 uint32 StartPixel, uint32 Width,
375 uint32 StartLine, uint32 LineCount)
381 RENDER_CLIPPED_TILEHI(WRITE_4PIXELSHI16, WRITE_4PIXELSHI16_FLIPPED, 4)
385 void orgDrawTile16x2 (uint32 Tile, uint32 Offset, uint32 StartLine,
391 RENDER_TILE(WRITE_4PIXELS16x2, WRITE_4PIXELS16_FLIPPEDx2, 8)
394 void orgDrawClippedTile16x2 (uint32 Tile, uint32 Offset,
395 uint32 StartPixel, uint32 Width,
396 uint32 StartLine, uint32 LineCount)
402 RENDER_CLIPPED_TILE(WRITE_4PIXELS16x2, WRITE_4PIXELS16_FLIPPEDx2, 8)
405 void orgDrawTile16x2x2 (uint32 Tile, uint32 Offset, uint32 StartLine,
411 RENDER_TILE(WRITE_4PIXELS16x2x2, WRITE_4PIXELS16_FLIPPEDx2x2, 8)
414 void orgDrawClippedTile16x2x2 (uint32 Tile, uint32 Offset,
415 uint32 StartPixel, uint32 Width,
416 uint32 StartLine, uint32 LineCount)
422 RENDER_CLIPPED_TILE(WRITE_4PIXELS16x2x2, WRITE_4PIXELS16_FLIPPEDx2x2, 8)
425 void orgDrawLargePixel16 (uint32 Tile, uint32 Offset,
426 uint32 StartPixel, uint32 Pixels,
427 uint32 StartLine, uint32 LineCount)
431 register uint16 *sp = (uint16 *) GFX.S + Offset;
432 uint8 *Depth = GFX.DB + Offset;
435 RENDER_TILE_LARGE (GFX.ScreenColors [pixel], PLOT_PIXEL)
438 inline void WRITE_4PIXELS16_ADD (uint32 Offset, uint8 *Pixels)
441 uint16 *Screen = (uint16 *) GFX.S + Offset;
442 uint8 *Depth = GFX.ZBuffer + Offset;
443 uint8 *SubDepth = GFX.SubZBuffer + Offset;
446 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[N])) \
450 if (SubDepth [N] != 1) \
451 Screen [N] = COLOR_ADD (GFX.ScreenColors [Pixel], \
452 Screen [GFX.Delta + N]); \
454 Screen [N] = COLOR_ADD (GFX.ScreenColors [Pixel], \
458 Screen [N] = GFX.ScreenColors [Pixel]; \
459 Depth [N] = GFX.Z2; \
470 inline void WRITE_4PIXELS16_FLIPPED_ADD (uint32 Offset, uint8 *Pixels)
473 uint16 *Screen = (uint16 *) GFX.S + Offset;
474 uint8 *Depth = GFX.ZBuffer + Offset;
475 uint8 *SubDepth = GFX.SubZBuffer + Offset;
478 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[3 - N])) \
482 if (SubDepth [N] != 1) \
483 Screen [N] = COLOR_ADD (GFX.ScreenColors [Pixel], \
484 Screen [GFX.Delta + N]); \
486 Screen [N] = COLOR_ADD (GFX.ScreenColors [Pixel], \
490 Screen [N] = GFX.ScreenColors [Pixel]; \
491 Depth [N] = GFX.Z2; \
502 inline void WRITE_4PIXELS16_ADD1_2 (uint32 Offset, uint8 *Pixels)
505 uint16 *Screen = (uint16 *) GFX.S + Offset;
506 uint8 *Depth = GFX.ZBuffer + Offset;
507 uint8 *SubDepth = GFX.SubZBuffer + Offset;
510 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[N])) \
514 if (SubDepth [N] != 1) \
515 Screen [N] = (uint16) (COLOR_ADD1_2 (GFX.ScreenColors [Pixel], \
516 Screen [GFX.Delta + N])); \
518 Screen [N] = COLOR_ADD (GFX.ScreenColors [Pixel], \
522 Screen [N] = GFX.ScreenColors [Pixel]; \
523 Depth [N] = GFX.Z2; \
534 inline void WRITE_4PIXELS16_FLIPPED_ADD1_2 (uint32 Offset, uint8 *Pixels)
537 uint16 *Screen = (uint16 *) GFX.S + Offset;
538 uint8 *Depth = GFX.ZBuffer + Offset;
539 uint8 *SubDepth = GFX.SubZBuffer + Offset;
542 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[3 - N])) \
546 if (SubDepth [N] != 1) \
547 Screen [N] = (uint16) (COLOR_ADD1_2 (GFX.ScreenColors [Pixel], \
548 Screen [GFX.Delta + N])); \
550 Screen [N] = COLOR_ADD (GFX.ScreenColors [Pixel], \
554 Screen [N] = GFX.ScreenColors [Pixel]; \
555 Depth [N] = GFX.Z2; \
566 inline void WRITE_4PIXELS16_SUB (uint32 Offset, uint8 *Pixels)
569 uint16 *Screen = (uint16 *) GFX.S + Offset;
570 uint8 *Depth = GFX.ZBuffer + Offset;
571 uint8 *SubDepth = GFX.SubZBuffer + Offset;
574 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[N])) \
578 if (SubDepth [N] != 1) \
579 Screen [N] = (uint16) COLOR_SUB (GFX.ScreenColors [Pixel], \
580 Screen [GFX.Delta + N]); \
582 Screen [N] = (uint16) COLOR_SUB (GFX.ScreenColors [Pixel], \
586 Screen [N] = GFX.ScreenColors [Pixel]; \
587 Depth [N] = GFX.Z2; \
598 inline void WRITE_4PIXELS16_FLIPPED_SUB (uint32 Offset, uint8 *Pixels)
601 uint16 *Screen = (uint16 *) GFX.S + Offset;
602 uint8 *Depth = GFX.ZBuffer + Offset;
603 uint8 *SubDepth = GFX.SubZBuffer + Offset;
606 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[3 - N])) \
610 if (SubDepth [N] != 1) \
611 Screen [N] = (uint16) COLOR_SUB (GFX.ScreenColors [Pixel], \
612 Screen [GFX.Delta + N]); \
614 Screen [N] = (uint16) COLOR_SUB (GFX.ScreenColors [Pixel], \
618 Screen [N] = GFX.ScreenColors [Pixel]; \
619 Depth [N] = GFX.Z2; \
630 inline void WRITE_4PIXELS16_SUB1_2 (uint32 Offset, uint8 *Pixels)
633 uint16 *Screen = (uint16 *) GFX.S + Offset;
634 uint8 *Depth = GFX.ZBuffer + Offset;
635 uint8 *SubDepth = GFX.SubZBuffer + Offset;
638 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[N])) \
642 if (SubDepth [N] != 1) \
643 Screen [N] = (uint16) COLOR_SUB1_2 (GFX.ScreenColors [Pixel], \
644 Screen [GFX.Delta + N]); \
646 Screen [N] = (uint16) COLOR_SUB (GFX.ScreenColors [Pixel], \
650 Screen [N] = GFX.ScreenColors [Pixel]; \
651 Depth [N] = GFX.Z2; \
662 inline void WRITE_4PIXELS16_FLIPPED_SUB1_2 (uint32 Offset, uint8 *Pixels)
665 uint16 *Screen = (uint16 *) GFX.S + Offset;
666 uint8 *Depth = GFX.ZBuffer + Offset;
667 uint8 *SubDepth = GFX.SubZBuffer + Offset;
670 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[3 - N])) \
674 if (SubDepth [N] != 1) \
675 Screen [N] = (uint16) COLOR_SUB1_2 (GFX.ScreenColors [Pixel], \
676 Screen [GFX.Delta + N]); \
678 Screen [N] = (uint16) COLOR_SUB (GFX.ScreenColors [Pixel], \
682 Screen [N] = GFX.ScreenColors [Pixel]; \
683 Depth [N] = GFX.Z2; \
695 void orgDrawTile16Add (uint32 Tile, uint32 Offset, uint32 StartLine,
701 RENDER_TILE(WRITE_4PIXELS16_ADD, WRITE_4PIXELS16_FLIPPED_ADD, 4)
704 void orgDrawClippedTile16Add (uint32 Tile, uint32 Offset,
705 uint32 StartPixel, uint32 Width,
706 uint32 StartLine, uint32 LineCount)
712 RENDER_CLIPPED_TILE(WRITE_4PIXELS16_ADD, WRITE_4PIXELS16_FLIPPED_ADD, 4)
715 void orgDrawTile16Add1_2 (uint32 Tile, uint32 Offset, uint32 StartLine,
721 RENDER_TILE(WRITE_4PIXELS16_ADD1_2, WRITE_4PIXELS16_FLIPPED_ADD1_2, 4)
724 void orgDrawClippedTile16Add1_2 (uint32 Tile, uint32 Offset,
725 uint32 StartPixel, uint32 Width,
726 uint32 StartLine, uint32 LineCount)
732 RENDER_CLIPPED_TILE(WRITE_4PIXELS16_ADD1_2, WRITE_4PIXELS16_FLIPPED_ADD1_2, 4)
735 void orgDrawTile16Sub (uint32 Tile, uint32 Offset, uint32 StartLine,
741 RENDER_TILE(WRITE_4PIXELS16_SUB, WRITE_4PIXELS16_FLIPPED_SUB, 4)
744 void orgDrawClippedTile16Sub (uint32 Tile, uint32 Offset,
745 uint32 StartPixel, uint32 Width,
746 uint32 StartLine, uint32 LineCount)
752 RENDER_CLIPPED_TILE(WRITE_4PIXELS16_SUB, WRITE_4PIXELS16_FLIPPED_SUB, 4)
755 void orgDrawTile16Sub1_2 (uint32 Tile, uint32 Offset, uint32 StartLine,
761 RENDER_TILE(WRITE_4PIXELS16_SUB1_2, WRITE_4PIXELS16_FLIPPED_SUB1_2, 4)
764 void orgDrawClippedTile16Sub1_2 (uint32 Tile, uint32 Offset,
765 uint32 StartPixel, uint32 Width,
766 uint32 StartLine, uint32 LineCount)
772 RENDER_CLIPPED_TILE(WRITE_4PIXELS16_SUB1_2, WRITE_4PIXELS16_FLIPPED_SUB1_2, 4)
775 inline void WRITE_4PIXELS16_ADDF1_2 (uint32 Offset, uint8 *Pixels)
778 uint16 *Screen = (uint16 *) GFX.S + Offset;
779 uint8 *Depth = GFX.ZBuffer + Offset;
780 uint8 *SubDepth = GFX.SubZBuffer + Offset;
783 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[N])) \
785 if (SubDepth [N] == 1) \
786 Screen [N] = (uint16) (COLOR_ADD1_2 (GFX.ScreenColors [Pixel], \
789 Screen [N] = GFX.ScreenColors [Pixel];\
790 Depth [N] = GFX.Z2; \
801 inline void WRITE_4PIXELS16_FLIPPED_ADDF1_2 (uint32 Offset, uint8 *Pixels)
804 uint16 *Screen = (uint16 *) GFX.S + Offset;
805 uint8 *Depth = GFX.ZBuffer + Offset;
806 uint8 *SubDepth = GFX.SubZBuffer + Offset;
809 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[3 - N])) \
811 if (SubDepth [N] == 1) \
812 Screen [N] = (uint16) (COLOR_ADD1_2 (GFX.ScreenColors [Pixel], \
815 Screen [N] = GFX.ScreenColors [Pixel];\
816 Depth [N] = GFX.Z2; \
827 inline void WRITE_4PIXELS16_SUBF1_2 (uint32 Offset, uint8 *Pixels)
830 uint16 *Screen = (uint16 *) GFX.S + Offset;
831 uint8 *Depth = GFX.ZBuffer + Offset;
832 uint8 *SubDepth = GFX.SubZBuffer + Offset;
835 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[N])) \
837 if (SubDepth [N] == 1) \
838 Screen [N] = (uint16) COLOR_SUB1_2 (GFX.ScreenColors [Pixel], \
841 Screen [N] = GFX.ScreenColors [Pixel]; \
842 Depth [N] = GFX.Z2; \
853 inline void WRITE_4PIXELS16_FLIPPED_SUBF1_2 (uint32 Offset, uint8 *Pixels)
856 uint16 *Screen = (uint16 *) GFX.S + Offset;
857 uint8 *Depth = GFX.ZBuffer + Offset;
858 uint8 *SubDepth = GFX.SubZBuffer + Offset;
861 if (GFX.Z1 > Depth [N] && (Pixel = Pixels[3 - N])) \
863 if (SubDepth [N] == 1) \
864 Screen [N] = (uint16) COLOR_SUB1_2 (GFX.ScreenColors [Pixel], \
867 Screen [N] = GFX.ScreenColors [Pixel]; \
868 Depth [N] = GFX.Z2; \
879 void orgDrawTile16FixedAdd1_2 (uint32 Tile, uint32 Offset, uint32 StartLine,
885 RENDER_TILE(WRITE_4PIXELS16_ADDF1_2, WRITE_4PIXELS16_FLIPPED_ADDF1_2, 4)
888 void orgDrawClippedTile16FixedAdd1_2 (uint32 Tile, uint32 Offset,
889 uint32 StartPixel, uint32 Width,
890 uint32 StartLine, uint32 LineCount)
896 RENDER_CLIPPED_TILE(WRITE_4PIXELS16_ADDF1_2,
897 WRITE_4PIXELS16_FLIPPED_ADDF1_2, 4)
900 void orgDrawTile16FixedSub1_2 (uint32 Tile, uint32 Offset, uint32 StartLine,
906 RENDER_TILE(WRITE_4PIXELS16_SUBF1_2, WRITE_4PIXELS16_FLIPPED_SUBF1_2, 4)
909 void orgDrawClippedTile16FixedSub1_2 (uint32 Tile, uint32 Offset,
910 uint32 StartPixel, uint32 Width,
911 uint32 StartLine, uint32 LineCount)
917 RENDER_CLIPPED_TILE(WRITE_4PIXELS16_SUBF1_2,
918 WRITE_4PIXELS16_FLIPPED_SUBF1_2, 4)
921 void orgDrawLargePixel16Add (uint32 Tile, uint32 Offset,
922 uint32 StartPixel, uint32 Pixels,
923 uint32 StartLine, uint32 LineCount)
927 register uint16 *sp = (uint16 *) GFX.S + Offset;
928 uint8 *Depth = GFX.ZBuffer + Offset;
931 #define LARGE_ADD_PIXEL(s, p) \
932 (Depth [z + GFX.DepthDelta] ? (Depth [z + GFX.DepthDelta] != 1 ? \
933 COLOR_ADD (p, *(s + GFX.Delta)) : \
934 COLOR_ADD (p, GFX.FixedColour)) \
937 RENDER_TILE_LARGE (GFX.ScreenColors [pixel], LARGE_ADD_PIXEL)
940 void orgDrawLargePixel16Add1_2 (uint32 Tile, uint32 Offset,
941 uint32 StartPixel, uint32 Pixels,
942 uint32 StartLine, uint32 LineCount)
946 register uint16 *sp = (uint16 *) GFX.S + Offset;
947 uint8 *Depth = GFX.ZBuffer + Offset;
950 #define LARGE_ADD_PIXEL1_2(s, p) \
951 ((uint16) (Depth [z + GFX.DepthDelta] ? (Depth [z + GFX.DepthDelta] != 1 ? \
952 COLOR_ADD1_2 (p, *(s + GFX.Delta)) : \
953 COLOR_ADD (p, GFX.FixedColour)) \
956 RENDER_TILE_LARGE (GFX.ScreenColors [pixel], LARGE_ADD_PIXEL1_2)
959 void orgDrawLargePixel16Sub (uint32 Tile, uint32 Offset,
960 uint32 StartPixel, uint32 Pixels,
961 uint32 StartLine, uint32 LineCount)
965 register uint16 *sp = (uint16 *) GFX.S + Offset;
966 uint8 *Depth = GFX.ZBuffer + Offset;
969 #define LARGE_SUB_PIXEL(s, p) \
970 (Depth [z + GFX.DepthDelta] ? (Depth [z + GFX.DepthDelta] != 1 ? \
971 COLOR_SUB (p, *(s + GFX.Delta)) : \
972 COLOR_SUB (p, GFX.FixedColour)) \
975 RENDER_TILE_LARGE (GFX.ScreenColors [pixel], LARGE_SUB_PIXEL)
978 void orgDrawLargePixel16Sub1_2 (uint32 Tile, uint32 Offset,
979 uint32 StartPixel, uint32 Pixels,
980 uint32 StartLine, uint32 LineCount)
984 register uint16 *sp = (uint16 *) GFX.S + Offset;
985 uint8 *Depth = GFX.ZBuffer + Offset;
988 #define LARGE_SUB_PIXEL1_2(s, p) \
989 (Depth [z + GFX.DepthDelta] ? (Depth [z + GFX.DepthDelta] != 1 ? \
990 COLOR_SUB1_2 (p, *(s + GFX.Delta)) : \
991 COLOR_SUB (p, GFX.FixedColour)) \
994 RENDER_TILE_LARGE (GFX.ScreenColors [pixel], LARGE_SUB_PIXEL1_2)