|
|
1.1 ! root 1: /* ! 2: Hatari - macros.h ! 3: ! 4: Lookup tables and macros for screen conversion routines. ! 5: ! 6: This file is distributed under the GNU Public License, version 2 or at your ! 7: option any later version. Read the file gpl.txt for details. ! 8: */ ! 9: ! 10: #ifndef HATARI_CONVERTMACROS_H ! 11: #define HATARI_CONVERTMACROS_H ! 12: ! 13: /* For palette we don't go from colour '0' as the whole background ! 14: * would change, so go from this value ! 15: */ ! 16: #define BASECOLOUR 0x0A ! 17: #define BASECOLOUR_LONG 0x0A0A0A0A ! 18: ! 19: /* Remap tables to convert from plane format to byte-per-pixel ! 20: * (Upper is for 4-Planes so if shifted by 2) ! 21: */ ! 22: static Uint32 Remap_2_Planes[256] = { ! 23: 0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, 0x01000100, 0x00010100, 0x01010100, ! 24: 0x00000001, 0x01000001, 0x00010001, 0x01010001, 0x00000101, 0x01000101, 0x00010101, 0x01010101, ! 25: 0x02000000, 0x03000000, 0x02010000, 0x03010000, 0x02000100, 0x03000100, 0x02010100, 0x03010100, ! 26: 0x02000001, 0x03000001, 0x02010001, 0x03010001, 0x02000101, 0x03000101, 0x02010101, 0x03010101, ! 27: 0x00020000, 0x01020000, 0x00030000, 0x01030000, 0x00020100, 0x01020100, 0x00030100, 0x01030100, ! 28: 0x00020001, 0x01020001, 0x00030001, 0x01030001, 0x00020101, 0x01020101, 0x00030101, 0x01030101, ! 29: 0x02020000, 0x03020000, 0x02030000, 0x03030000, 0x02020100, 0x03020100, 0x02030100, 0x03030100, ! 30: 0x02020001, 0x03020001, 0x02030001, 0x03030001, 0x02020101, 0x03020101, 0x02030101, 0x03030101, ! 31: 0x00000200, 0x01000200, 0x00010200, 0x01010200, 0x00000300, 0x01000300, 0x00010300, 0x01010300, ! 32: 0x00000201, 0x01000201, 0x00010201, 0x01010201, 0x00000301, 0x01000301, 0x00010301, 0x01010301, ! 33: 0x02000200, 0x03000200, 0x02010200, 0x03010200, 0x02000300, 0x03000300, 0x02010300, 0x03010300, ! 34: 0x02000201, 0x03000201, 0x02010201, 0x03010201, 0x02000301, 0x03000301, 0x02010301, 0x03010301, ! 35: 0x00020200, 0x01020200, 0x00030200, 0x01030200, 0x00020300, 0x01020300, 0x00030300, 0x01030300, ! 36: 0x00020201, 0x01020201, 0x00030201, 0x01030201, 0x00020301, 0x01020301, 0x00030301, 0x01030301, ! 37: 0x02020200, 0x03020200, 0x02030200, 0x03030200, 0x02020300, 0x03020300, 0x02030300, 0x03030300, ! 38: 0x02020201, 0x03020201, 0x02030201, 0x03030201, 0x02020301, 0x03020301, 0x02030301, 0x03030301, ! 39: 0x00000002, 0x01000002, 0x00010002, 0x01010002, 0x00000102, 0x01000102, 0x00010102, 0x01010102, ! 40: 0x00000003, 0x01000003, 0x00010003, 0x01010003, 0x00000103, 0x01000103, 0x00010103, 0x01010103, ! 41: 0x02000002, 0x03000002, 0x02010002, 0x03010002, 0x02000102, 0x03000102, 0x02010102, 0x03010102, ! 42: 0x02000003, 0x03000003, 0x02010003, 0x03010003, 0x02000103, 0x03000103, 0x02010103, 0x03010103, ! 43: 0x00020002, 0x01020002, 0x00030002, 0x01030002, 0x00020102, 0x01020102, 0x00030102, 0x01030102, ! 44: 0x00020003, 0x01020003, 0x00030003, 0x01030003, 0x00020103, 0x01020103, 0x00030103, 0x01030103, ! 45: 0x02020002, 0x03020002, 0x02030002, 0x03030002, 0x02020102, 0x03020102, 0x02030102, 0x03030102, ! 46: 0x02020003, 0x03020003, 0x02030003, 0x03030003, 0x02020103, 0x03020103, 0x02030103, 0x03030103, ! 47: 0x00000202, 0x01000202, 0x00010202, 0x01010202, 0x00000302, 0x01000302, 0x00010302, 0x01010302, ! 48: 0x00000203, 0x01000203, 0x00010203, 0x01010203, 0x00000303, 0x01000303, 0x00010303, 0x01010303, ! 49: 0x02000202, 0x03000202, 0x02010202, 0x03010202, 0x02000302, 0x03000302, 0x02010302, 0x03010302, ! 50: 0x02000203, 0x03000203, 0x02010203, 0x03010203, 0x02000303, 0x03000303, 0x02010303, 0x03010303, ! 51: 0x00020202, 0x01020202, 0x00030202, 0x01030202, 0x00020302, 0x01020302, 0x00030302, 0x01030302, ! 52: 0x00020203, 0x01020203, 0x00030203, 0x01030203, 0x00020303, 0x01020303, 0x00030303, 0x01030303, ! 53: 0x02020202, 0x03020202, 0x02030202, 0x03030202, 0x02020302, 0x03020302, 0x02030302, 0x03030302, ! 54: 0x02020203, 0x03020203, 0x02030203, 0x03030203, 0x02020303, 0x03020303, 0x02030303, 0x03030303, ! 55: }; ! 56: ! 57: static Uint32 Remap_2_Planes_Upper[256] = { ! 58: 0x00000000, 0x04000000, 0x00040000, 0x04040000, 0x00000400, 0x04000400, 0x00040400, 0x04040400, ! 59: 0x00000004, 0x04000004, 0x00040004, 0x04040004, 0x00000404, 0x04000404, 0x00040404, 0x04040404, ! 60: 0x08000000, 0x0C000000, 0x08040000, 0x0C040000, 0x08000400, 0x0C000400, 0x08040400, 0x0C040400, ! 61: 0x08000004, 0x0C000004, 0x08040004, 0x0C040004, 0x08000404, 0x0C000404, 0x08040404, 0x0C040404, ! 62: 0x00080000, 0x04080000, 0x000C0000, 0x040C0000, 0x00080400, 0x04080400, 0x000C0400, 0x040C0400, ! 63: 0x00080004, 0x04080004, 0x000C0004, 0x040C0004, 0x00080404, 0x04080404, 0x000C0404, 0x040C0404, ! 64: 0x08080000, 0x0C080000, 0x080C0000, 0x0C0C0000, 0x08080400, 0x0C080400, 0x080C0400, 0x0C0C0400, ! 65: 0x08080004, 0x0C080004, 0x080C0004, 0x0C0C0004, 0x08080404, 0x0C080404, 0x080C0404, 0x0C0C0404, ! 66: 0x00000800, 0x04000800, 0x00040800, 0x04040800, 0x00000C00, 0x04000C00, 0x00040C00, 0x04040C00, ! 67: 0x00000804, 0x04000804, 0x00040804, 0x04040804, 0x00000C04, 0x04000C04, 0x00040C04, 0x04040C04, ! 68: 0x08000800, 0x0C000800, 0x08040800, 0x0C040800, 0x08000C00, 0x0C000C00, 0x08040C00, 0x0C040C00, ! 69: 0x08000804, 0x0C000804, 0x08040804, 0x0C040804, 0x08000C04, 0x0C000C04, 0x08040C04, 0x0C040C04, ! 70: 0x00080800, 0x04080800, 0x000C0800, 0x040C0800, 0x00080C00, 0x04080C00, 0x000C0C00, 0x040C0C00, ! 71: 0x00080804, 0x04080804, 0x000C0804, 0x040C0804, 0x00080C04, 0x04080C04, 0x000C0C04, 0x040C0C04, ! 72: 0x08080800, 0x0C080800, 0x080C0800, 0x0C0C0800, 0x08080C00, 0x0C080C00, 0x080C0C00, 0x0C0C0C00, ! 73: 0x08080804, 0x0C080804, 0x080C0804, 0x0C0C0804, 0x08080C04, 0x0C080C04, 0x080C0C04, 0x0C0C0C04, ! 74: 0x00000008, 0x04000008, 0x00040008, 0x04040008, 0x00000408, 0x04000408, 0x00040408, 0x04040408, ! 75: 0x0000000C, 0x0400000C, 0x0004000C, 0x0404000C, 0x0000040C, 0x0400040C, 0x0004040C, 0x0404040C, ! 76: 0x08000008, 0x0C000008, 0x08040008, 0x0C040008, 0x08000408, 0x0C000408, 0x08040408, 0x0C040408, ! 77: 0x0800000C, 0x0C00000C, 0x0804000C, 0x0C04000C, 0x0800040C, 0x0C00040C, 0x0804040C, 0x0C04040C, ! 78: 0x00080008, 0x04080008, 0x000C0008, 0x040C0008, 0x00080408, 0x04080408, 0x000C0408, 0x040C0408, ! 79: 0x0008000C, 0x0408000C, 0x000C000C, 0x040C000C, 0x0008040C, 0x0408040C, 0x000C040C, 0x040C040C, ! 80: 0x08080008, 0x0C080008, 0x080C0008, 0x0C0C0008, 0x08080408, 0x0C080408, 0x080C0408, 0x0C0C0408, ! 81: 0x0808000C, 0x0C08000C, 0x080C000C, 0x0C0C000C, 0x0808040C, 0x0C08040C, 0x080C040C, 0x0C0C040C, ! 82: 0x00000808, 0x04000808, 0x00040808, 0x04040808, 0x00000C08, 0x04000C08, 0x00040C08, 0x04040C08, ! 83: 0x0000080C, 0x0400080C, 0x0004080C, 0x0404080C, 0x00000C0C, 0x04000C0C, 0x00040C0C, 0x04040C0C, ! 84: 0x08000808, 0x0C000808, 0x08040808, 0x0C040808, 0x08000C08, 0x0C000C08, 0x08040C08, 0x0C040C08, ! 85: 0x0800080C, 0x0C00080C, 0x0804080C, 0x0C04080C, 0x08000C0C, 0x0C000C0C, 0x08040C0C, 0x0C040C0C, ! 86: 0x00080808, 0x04080808, 0x000C0808, 0x040C0808, 0x00080C08, 0x04080C08, 0x000C0C08, 0x040C0C08, ! 87: 0x0008080C, 0x0408080C, 0x000C080C, 0x040C080C, 0x00080C0C, 0x04080C0C, 0x000C0C0C, 0x040C0C0C, ! 88: 0x08080808, 0x0C080808, 0x080C0808, 0x0C0C0808, 0x08080C08, 0x0C080C08, 0x080C0C08, 0x0C0C0C08, ! 89: 0x0808080C, 0x0C08080C, 0x080C080C, 0x0C0C080C, 0x08080C0C, 0x0C080C0C, 0x080C0C0C, 0x0C0C0C0C, ! 90: }; ! 91: ! 92: static Uint32 Remap_1_Plane[16] = { ! 93: 0x00000000+BASECOLOUR_LONG, 0x01000000+BASECOLOUR_LONG, 0x00010000+BASECOLOUR_LONG, 0x01010000+BASECOLOUR_LONG, 0x00000100+BASECOLOUR_LONG, 0x01000100+BASECOLOUR_LONG, 0x00010100+BASECOLOUR_LONG, 0x01010100+BASECOLOUR_LONG, ! 94: 0x00000001+BASECOLOUR_LONG, 0x01000001+BASECOLOUR_LONG, 0x00010001+BASECOLOUR_LONG, 0x01010001+BASECOLOUR_LONG, 0x00000101+BASECOLOUR_LONG, 0x01000101+BASECOLOUR_LONG, 0x00010101+BASECOLOUR_LONG, 0x01010101+BASECOLOUR_LONG, ! 95: }; ! 96: ! 97: ! 98: #define LOW_BUILD_PIXELS_0 \ ! 99: { \ ! 100: ebx &= 0x0f0f0f0f; \ ! 101: ecx &= 0x0f0f0f0f; \ ! 102: eax = (ebx >> 12) | ebx; \ ! 103: edx = (ecx >> 12) | ecx; \ ! 104: ecx = Remap_2_Planes_Upper[edx & 0x00ff]; \ ! 105: ecx += Remap_2_Planes[eax & 0x00ff]; \ ! 106: } ! 107: ! 108: #define LOW_BUILD_PIXELS_1 \ ! 109: { \ ! 110: ecx = Remap_2_Planes_Upper[(edx >> 8) & 0x00ff]; \ ! 111: ecx += Remap_2_Planes[(eax >> 8) & 0x00ff]; \ ! 112: } ! 113: ! 114: #define LOW_BUILD_PIXELS_2 \ ! 115: { \ ! 116: ebx = (*edi & 0xf0f0f0f0) >> 4; \ ! 117: ecx = (*(edi+1) & 0xf0f0f0f0) >> 4; \ ! 118: eax = (ebx >> 12) | ebx; \ ! 119: edx = (ecx >> 12) | ecx; \ ! 120: ecx = Remap_2_Planes_Upper[edx & 0x00ff]; \ ! 121: ecx += Remap_2_Planes[eax & 0x00ff]; \ ! 122: } ! 123: ! 124: #define LOW_BUILD_PIXELS_3 \ ! 125: { \ ! 126: ecx = Remap_2_Planes_Upper[(edx >> 8) & 0x00ff]; \ ! 127: ecx += Remap_2_Planes[(eax >> 8) & 0x00ff]; \ ! 128: } ! 129: ! 130: ! 131: #define MED_BUILD_PIXELS_0 \ ! 132: { \ ! 133: ebx &= 0x0f0f0f0f; \ ! 134: eax = (ebx >> 12) | ebx; \ ! 135: ecx = Remap_2_Planes[eax & 0x000000ff]; \ ! 136: } ! 137: ! 138: #define MED_BUILD_PIXELS_1 \ ! 139: { \ ! 140: ecx = Remap_2_Planes[(eax >> 8) & 0x000000ff]; \ ! 141: } ! 142: ! 143: #define MED_BUILD_PIXELS_2 \ ! 144: { \ ! 145: ebx = (*edi & 0xf0f0f0f0) >> 4; \ ! 146: eax = (ebx >> 12) | ebx; \ ! 147: ecx = Remap_2_Planes[eax & 0x000000ff]; \ ! 148: } ! 149: ! 150: #define MED_BUILD_PIXELS_3 \ ! 151: { \ ! 152: ecx = Remap_2_Planes[(eax >> 8) & 0x000000ff]; \ ! 153: } ! 154: ! 155: ! 156: /* Routines to create 'ecx' pixels - MUST be called in this order */ ! 157: #define HIGH_BUILD_PIXELS_0 \ ! 158: { \ ! 159: eax = (ebx & 0x0000000f); \ ! 160: } ! 161: ! 162: #define HIGH_BUILD_PIXELS_1 \ ! 163: { \ ! 164: eax = (ebx >> 4) & 0x0000000f;\ ! 165: } ! 166: ! 167: #define HIGH_BUILD_PIXELS_2 \ ! 168: { \ ! 169: eax = (ebx >> 8) & 0x0000000f;\ ! 170: } ! 171: ! 172: #define HIGH_BUILD_PIXELS_3 \ ! 173: { \ ! 174: eax = (ebx >> 12) & 0x0000000f;\ ! 175: } ! 176: ! 177: ! 178: /* Plot Low Resolution (320xH) 16-Bit pixels */ ! 179: #define PLOT_LOW_320_16BIT(offset) \ ! 180: { \ ! 181: esi[offset] = (Uint16)STRGBPalette[ecx & 0x00ff]; \ ! 182: esi[offset+1] = (Uint16)STRGBPalette[(ecx >> 8) & 0x00ff]; \ ! 183: esi[offset+2] = (Uint16)STRGBPalette[(ecx >> 16) & 0x00ff]; \ ! 184: esi[offset+3] = (Uint16)STRGBPalette[(ecx >> 24) & 0x00ff]; \ ! 185: } ! 186: ! 187: /* Plot Low Resolution (320xH) 8-Bit pixels */ ! 188: #define PLOT_LOW_320_8BIT(offset) \ ! 189: { \ ! 190: esi[offset] = SDL_SwapLE32(ecx + BASECOLOUR_LONG); \ ! 191: } ! 192: ! 193: /* Plot Low Resolution (640xH) 8-Bit pixels */ ! 194: #define PLOT_LOW_640_8BIT(offset) \ ! 195: { \ ! 196: ebpp = ecx + BASECOLOUR_LONG; \ ! 197: ecx = ((ebpp & 0x0000ff00) << 8) | (ebpp & 0x000000ff); \ ! 198: esi[offset] = SDL_SwapLE32((ecx << 8) | ecx); \ ! 199: ecx = ((ebpp & 0x00ff0000) >> 8) | (ebpp & 0xff000000); \ ! 200: esi[offset+1] = SDL_SwapLE32((ecx >> 8) | ecx); \ ! 201: } ! 202: ! 203: /* Plot Low Resolution (640xH) 8-Bit pixels (double on Y) */ ! 204: #define PLOT_LOW_640_8BIT_DOUBLE_Y(offset) \ ! 205: { \ ! 206: ebpp = ecx + BASECOLOUR_LONG; \ ! 207: ecx = ((ebpp & 0x0000ff00) << 8) | (ebpp & 0x000000ff); \ ! 208: esi[offset+PCScreenBytesPerLine/4] = \ ! 209: esi[offset] = SDL_SwapLE32((ecx << 8) | ecx); \ ! 210: ecx = ((ebpp & 0x00ff0000) >> 8) | (ebpp & 0xff000000); \ ! 211: esi[offset+1+PCScreenBytesPerLine/4] = \ ! 212: esi[offset+1] = SDL_SwapLE32((ecx >> 8) | ecx); \ ! 213: } ! 214: ! 215: /* Plot Low Resolution (640xH) 16-Bit pixels */ ! 216: #define PLOT_LOW_640_16BIT(offset) \ ! 217: { \ ! 218: esi[offset] = STRGBPalette[ecx & 0x000000ff]; \ ! 219: esi[offset+1] = STRGBPalette[(ecx >> 8) & 0x000000ff]; \ ! 220: esi[offset+2] = STRGBPalette[(ecx >> 16) & 0x000000ff]; \ ! 221: esi[offset+3] = STRGBPalette[(ecx >> 24) & 0x000000ff]; \ ! 222: } ! 223: ! 224: /* Plot Low Resolution (640xH) 16-Bit pixels (Double on Y) */ ! 225: #define PLOT_LOW_640_16BIT_DOUBLE_Y(offset) \ ! 226: { \ ! 227: ebx = STRGBPalette[ecx & 0x000000ff]; \ ! 228: esi[offset] = esi[offset+PCScreenBytesPerLine/4] = ebx; \ ! 229: ebx = STRGBPalette[(ecx >> 8) & 0x000000ff]; \ ! 230: esi[offset+1] = esi[offset+1+PCScreenBytesPerLine/4] = ebx; \ ! 231: ebx = STRGBPalette[(ecx >> 16) & 0x000000ff]; \ ! 232: esi[offset+2] = esi[offset+2+PCScreenBytesPerLine/4] = ebx; \ ! 233: ebx = STRGBPalette[(ecx >> 24) & 0x000000ff]; \ ! 234: esi[offset+3] = esi[offset+3+PCScreenBytesPerLine/4] = ebx; \ ! 235: } ! 236: ! 237: ! 238: /* Plot Medium Resolution (640xH) 8-Bit pixels */ ! 239: #define PLOT_MED_640_8BIT(offset) \ ! 240: { \ ! 241: esi[offset] = SDL_SwapLE32(ecx + BASECOLOUR_LONG); \ ! 242: } ! 243: ! 244: /* Plot Medium Resolution (640xH) 8-Bit pixels (Double on Y) */ ! 245: #define PLOT_MED_640_8BIT_DOUBLE_Y(offset) \ ! 246: { \ ! 247: esi[offset] = esi[offset+PCScreenBytesPerLine/4] =\ ! 248: SDL_SwapLE32(ecx + BASECOLOUR_LONG); \ ! 249: } ! 250: ! 251: /* Plot Medium Resolution(640xH) 16-Bit pixels */ ! 252: #define PLOT_MED_640_16BIT(offset) \ ! 253: { \ ! 254: esi[offset] = (Uint16)STRGBPalette[ecx & 0x000000ff]; \ ! 255: esi[offset+1] = (Uint16)STRGBPalette[(ecx >> 8) & 0x000000ff]; \ ! 256: esi[offset+2] = (Uint16)STRGBPalette[(ecx >> 16) & 0x000000ff]; \ ! 257: esi[offset+3] = (Uint16)STRGBPalette[(ecx >> 24) & 0x000000ff]; \ ! 258: } ! 259: ! 260: /* Plot Medium Resolution(640xH) 16-Bit pixels (Double on Y) */ ! 261: #define PLOT_MED_640_16BIT_DOUBLE_Y(offset) \ ! 262: { \ ! 263: esi[offset+PCScreenBytesPerLine/2] =\ ! 264: esi[offset] = (Uint16)STRGBPalette[ecx & 0x000000ff]; \ ! 265: esi[offset+1+PCScreenBytesPerLine/2] =\ ! 266: esi[offset+1] = (Uint16)STRGBPalette[(ecx >> 8) & 0x000000ff]; \ ! 267: esi[offset+2+PCScreenBytesPerLine/2] =\ ! 268: esi[offset+2] = (Uint16)STRGBPalette[(ecx >> 16) & 0x000000ff]; \ ! 269: esi[offset+3+PCScreenBytesPerLine/2] =\ ! 270: esi[offset+3] = (Uint16)STRGBPalette[(ecx >> 24) & 0x000000ff]; \ ! 271: } ! 272: ! 273: ! 274: /* Plot High Resolution (640xH) 8-Bit pixels */ ! 275: #define PLOT_HIGH_640_8BIT(offset) \ ! 276: { \ ! 277: esi[offset] = SDL_SwapLE32(Remap_1_Plane[eax]); \ ! 278: } ! 279: ! 280: ! 281: /* Plot Spectrum512 Resolution(320xH) 16-Bit pixels */ ! 282: #define PLOT_SPEC512_LEFT_LOW_320_16BIT(offset) \ ! 283: { \ ! 284: esi[offset] = (Uint16)STRGBPalette[ecx & 0x000000ff]; \ ! 285: } ! 286: ! 287: /* Plot Spectrum512 Resolution(320xH) 16-Bit pixels */ ! 288: #define PLOT_SPEC512_MID_320_16BIT PLOT_MED_640_16BIT ! 289: ! 290: /* Plot Spectrum512 Resolution(320xH) 16-Bit pixels */ ! 291: #define PLOT_SPEC512_END_LOW_320_16BIT(offset) \ ! 292: { \ ! 293: esi[offset] = (Uint16)STRGBPalette[ecx & 0x000000ff]; \ ! 294: esi[offset+1] = (Uint16)STRGBPalette[(ecx >> 8) & 0x000000ff]; \ ! 295: esi[offset+2] = (Uint16)STRGBPalette[(ecx >> 16) & 0x000000ff]; \ ! 296: } ! 297: ! 298: ! 299: /* Plot Spectrum512 Resolution (640xH) 16-Bit pixels */ ! 300: #define PLOT_SPEC512_LEFT_LOW_640_16BIT(offset) \ ! 301: { \ ! 302: esi[offset] = STRGBPalette[ecx & 0x000000ff]; \ ! 303: } ! 304: ! 305: /* Plot Spectrum512 Resolution (640xH) 16-Bit pixels */ ! 306: #define PLOT_SPEC512_MID_640_16BIT PLOT_LOW_640_16BIT ! 307: ! 308: /* Plot Spectrum512 Resolution (640xH) 16-Bit pixels */ ! 309: #define PLOT_SPEC512_END_LOW_640_16BIT(offset) \ ! 310: { \ ! 311: esi[offset] = STRGBPalette[ecx & 0x000000ff]; \ ! 312: esi[offset+1] = STRGBPalette[(ecx >> 8) & 0x000000ff]; \ ! 313: esi[offset+2] = STRGBPalette[(ecx >> 16) & 0x000000ff]; \ ! 314: } ! 315: ! 316: /* Plot Spectrum512 Resolution (640xH) 16-Bit pixels (Double on Y) */ ! 317: #define PLOT_SPEC512_LEFT_LOW_640_16BIT_DOUBLE_Y(offset) \ ! 318: { \ ! 319: esi[offset+PCScreenBytesPerLine/4] = \ ! 320: esi[offset] = STRGBPalette[ecx & 0x000000ff]; \ ! 321: } ! 322: ! 323: /* Plot Spectrum512 Resolution (640xH) 16-Bit pixels (Double on Y) */ ! 324: #define PLOT_SPEC512_MID_640_16BIT_DOUBLE_Y PLOT_LOW_640_16BIT_DOUBLE_Y ! 325: ! 326: /* Plot Spectrum512 Resolution (640xH) 16-Bit pixels (Double on Y) */ ! 327: #define PLOT_SPEC512_END_LOW_640_16BIT_DOUBLE_Y(offset) \ ! 328: { \ ! 329: ebx = STRGBPalette[ecx & 0x000000ff]; \ ! 330: esi[offset] = esi[offset+PCScreenBytesPerLine/4] = ebx; \ ! 331: ebx = STRGBPalette[(ecx >> 8) & 0x000000ff]; \ ! 332: esi[offset+1] = esi[offset+1+PCScreenBytesPerLine/4] = ebx; \ ! 333: ebx = STRGBPalette[(ecx >> 16) & 0x000000ff]; \ ! 334: esi[offset+2] = esi[offset+2+PCScreenBytesPerLine/4] = ebx; \ ! 335: } ! 336: ! 337: #endif /* HATARI_CONVERTMACROS_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.