|
|
1.1 ! root 1: ! 2: #include <SDL/SDL.h> ! 3: #include <SDL/SDL_endian.h> ! 4: ! 5: #include "main.h" ! 6: #include "decode.h" ! 7: #include "configuration.h" ! 8: #include "file.h" ! 9: #include "hostcall.h" ! 10: #include "m68000.h" ! 11: #include "memAlloc.h" ! 12: #include "misc.h" ! 13: #include "stMemory.h" ! 14: #include "screen.h" ! 15: #include "video.h" ! 16: #include "audio.h" ! 17: #include "input.h" ! 18: #include "fe2.h" ! 19: ! 20: #include "../cpu/hatari-glue.h" ! 21: ! 22: unsigned long logscreen, logscreen2, physcreen, physcreen2; ! 23: ! 24: static const unsigned char font_bmp[] = { ! 25: 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x80,0x80,0x80,0x80,0x80,0x0, ! 26: 0x80,0x0,0x0,0x2,0xa0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x50, ! 27: 0xf8,0x50,0x50,0xf8,0x50,0x0,0x0,0x6,0x20,0xf0,0xa0,0xa0,0xa0,0xa0,0xf0,0x20, ! 28: 0x0,0x5,0x0,0xc8,0xd8,0x30,0x60,0xd8,0x98,0x0,0x0,0x6,0xa0,0x0,0xe0,0xa0, ! 29: 0xa0,0xa0,0xe0,0x0,0x0,0x4,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2, ! 30: 0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x0,0x3,0xc0,0x40,0x40,0x40,0x40,0x40, ! 31: 0x40,0xc0,0x0,0x3,0x0,0x0,0x20,0xf8,0x50,0xf8,0x20,0x0,0x0,0x6,0x0,0x0, ! 32: 0x40,0xe0,0x40,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80, ! 33: 0x0,0x2,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0, ! 34: 0x0,0x0,0x80,0x0,0x0,0x2,0x0,0x8,0x18,0x30,0x60,0xc0,0x80,0x0,0x0,0x6, ! 35: 0xe0,0xa0,0xa0,0xa0,0xa0,0xa0,0xe0,0x0,0x0,0x4,0x40,0xc0,0x40,0x40,0x40,0x40, ! 36: 0xe0,0x0,0x0,0x4,0xe0,0x20,0x20,0xe0,0x80,0x80,0xe0,0x0,0x0,0x4,0xe0,0x20, ! 37: 0x20,0xe0,0x20,0x20,0xe0,0x0,0x0,0x4,0x80,0x80,0xa0,0xa0,0xe0,0x20,0x20,0x0, ! 38: 0x0,0x4,0xe0,0x80,0x80,0xe0,0x20,0x20,0xe0,0x0,0x0,0x4,0xe0,0x80,0x80,0xe0, ! 39: 0xa0,0xa0,0xe0,0x0,0x0,0x4,0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x4, ! 40: 0xe0,0xa0,0xa0,0xe0,0xa0,0xa0,0xe0,0x0,0x0,0x4,0xe0,0xa0,0xa0,0xe0,0x20,0x20, ! 41: 0xe0,0x0,0x0,0x4,0x0,0x0,0x0,0x80,0x0,0x80,0x0,0x0,0x0,0x2,0x0,0x0, ! 42: 0x0,0x80,0x0,0x0,0x80,0x80,0x0,0x2,0xe0,0x0,0xe0,0xa0,0xa0,0xa0,0xa0,0x0, ! 43: 0x0,0x4,0x0,0x0,0xe0,0x0,0xe0,0x0,0x0,0x0,0x0,0x4,0xc0,0x0,0xe0,0xa0, ! 44: 0xe0,0x80,0xe0,0x0,0x0,0x4,0xe0,0x20,0x20,0xe0,0x80,0x0,0x80,0x0,0x0,0x4, ! 45: 0xfe,0x82,0xba,0xa2,0xba,0x82,0xfe,0x0,0x0,0x8,0xf0,0x90,0x90,0x90,0xf0,0x90, ! 46: 0x90,0x0,0x0,0x5,0xf0,0x90,0x90,0xf8,0x88,0x88,0xf8,0x0,0x0,0x6,0xe0,0x80, ! 47: 0x80,0x80,0x80,0x80,0xe0,0x0,0x0,0x4,0xf8,0x48,0x48,0x48,0x48,0x48,0xf8,0x0, ! 48: 0x0,0x6,0xf0,0x80,0x80,0xe0,0x80,0x80,0xf0,0x0,0x0,0x5,0xf0,0x80,0x80,0xe0, ! 49: 0x80,0x80,0x80,0x0,0x0,0x4,0xf0,0x80,0x80,0x80,0xb0,0x90,0xf0,0x0,0x0,0x5, ! 50: 0x90,0x90,0x90,0xf0,0x90,0x90,0x90,0x0,0x0,0x5,0xe0,0x40,0x40,0x40,0x40,0x40, ! 51: 0xe0,0x0,0x0,0x4,0xf0,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x4,0x90,0xb0, ! 52: 0xe0,0xc0,0xe0,0xb0,0x90,0x0,0x0,0x5,0x80,0x80,0x80,0x80,0x80,0x80,0xe0,0x0, ! 53: 0x0,0x4,0x88,0xd8,0xf8,0xa8,0x88,0x88,0x88,0x0,0x0,0x6,0x90,0xd0,0xf0,0xb0, ! 54: 0x90,0x90,0x90,0x0,0x0,0x5,0xf0,0x90,0x90,0x90,0x90,0x90,0xf0,0x0,0x0,0x5, ! 55: 0xf0,0x90,0x90,0xf0,0x80,0x80,0x80,0x0,0x0,0x5,0xf0,0x90,0x90,0x90,0x90,0xb0, ! 56: 0xf0,0x18,0x0,0x5,0xf0,0x90,0x90,0xf0,0xe0,0xb0,0x90,0x0,0x0,0x5,0xf0,0x80, ! 57: 0x80,0xf0,0x10,0x10,0xf0,0x0,0x0,0x5,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0x0, ! 58: 0x0,0x3,0x90,0x90,0x90,0x90,0x90,0x90,0xf0,0x0,0x0,0x5,0x90,0x90,0x90,0xb0, ! 59: 0xe0,0xc0,0x80,0x0,0x0,0x5,0x88,0x88,0x88,0xa8,0xf8,0xd8,0x88,0x0,0x0,0x6, ! 60: 0x88,0xd8,0x70,0x20,0x70,0xd8,0x88,0x0,0x0,0x6,0x90,0x90,0x90,0xf0,0x20,0x20, ! 61: 0x20,0x0,0x0,0x5,0xf0,0x10,0x30,0x60,0xc0,0x80,0xf0,0x0,0x0,0x5,0xa0,0x0, ! 62: 0xa0,0xa0,0xa0,0xa0,0xe0,0x0,0x0,0x4,0x0,0x80,0xc0,0x60,0x30,0x18,0x8,0x0, ! 63: 0x0,0x6,0xe0,0xa0,0xa0,0xe0,0xa0,0xa0,0xe0,0x80,0x80,0x4,0xe0,0xa0,0xe0,0x0, ! 64: 0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x0,0x6, ! 65: 0xa0,0x0,0xe0,0x20,0xe0,0xa0,0xe0,0x0,0x0,0x4,0x0,0x0,0xe0,0x20,0xe0,0xa0, ! 66: 0xe0,0x0,0x0,0x4,0x80,0x80,0xe0,0xa0,0xa0,0xa0,0xe0,0x0,0x0,0x4,0x0,0x0, ! 67: 0xc0,0x80,0x80,0x80,0xc0,0x0,0x0,0x3,0x20,0x20,0xe0,0xa0,0xa0,0xa0,0xe0,0x0, ! 68: 0x0,0x4,0x0,0x0,0xe0,0xa0,0xe0,0x80,0xe0,0x0,0x0,0x4,0xc0,0x80,0x80,0xc0, ! 69: 0x80,0x80,0x80,0x0,0x0,0x3,0x0,0x0,0xe0,0xa0,0xa0,0xa0,0xe0,0x20,0xe0,0x4, ! 70: 0x80,0x80,0xe0,0xa0,0xa0,0xa0,0xa0,0x0,0x0,0x4,0x80,0x0,0x80,0x80,0x80,0x80, ! 71: 0x80,0x0,0x0,0x2,0x40,0x0,0x40,0x40,0x40,0x40,0x40,0xc0,0x0,0x3,0x80,0x80, ! 72: 0xb0,0xe0,0xe0,0xb0,0x90,0x0,0x0,0x5,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0, ! 73: 0x0,0x2,0x0,0x0,0xf8,0xa8,0xa8,0xa8,0xa8,0x0,0x0,0x6,0x0,0x0,0xe0,0xa0, ! 74: 0xa0,0xa0,0xa0,0x0,0x0,0x4,0x0,0x0,0xe0,0xa0,0xa0,0xa0,0xe0,0x0,0x0,0x4, ! 75: 0x0,0x0,0xe0,0xa0,0xa0,0xa0,0xe0,0x80,0x80,0x4,0x0,0x0,0xe0,0xa0,0xa0,0xa0, ! 76: 0xe0,0x20,0x30,0x4,0x0,0x0,0xc0,0x80,0x80,0x80,0x80,0x0,0x0,0x3,0x0,0x0, ! 77: 0xc0,0x80,0xc0,0x40,0xc0,0x0,0x0,0x3,0x80,0x80,0xc0,0x80,0x80,0x80,0xc0,0x0, ! 78: 0x0,0x3,0x0,0x0,0xa0,0xa0,0xa0,0xa0,0xe0,0x0,0x0,0x4,0x0,0x0,0xa0,0xa0, ! 79: 0xe0,0xc0,0x80,0x0,0x0,0x4,0x0,0x0,0x88,0xa8,0xf8,0xd8,0x88,0x0,0x0,0x6, ! 80: 0x0,0x0,0xa0,0xe0,0x40,0xe0,0xa0,0x0,0x0,0x4,0x0,0x0,0xa0,0xa0,0xa0,0xa0, ! 81: 0xe0,0x20,0xe0,0x4,0x0,0x0,0xf0,0x30,0x60,0xc0,0xf0,0x0,0x0,0x5,0x81,0x8d, ! 82: 0xe1,0xa0,0xa0,0xa0,0xa0,0x0,0x0,0x9,0x2,0x1a,0xc2,0x80,0xc0,0x40,0xc0,0x0, ! 83: 0x0,0x8,0xfe,0xfc,0xf8,0xfc,0xfe,0xdf,0x8e,0x4,0x0,0x7,0x7f,0x3f,0x1f,0x3f, ! 84: 0x7f,0xfb,0x71,0x20,0x0,0x8,0x4,0x8e,0xdf,0xfe,0xfc,0xf8,0xfc,0xfe,0x0,0x8, ! 85: 0x20,0x71,0xfb,0x7f,0x3f,0x1f,0x3f,0x7f,0x0,0x7,0xff,0x81,0x81,0x81,0x81,0x81, ! 86: 0x81,0xff,0x0,0x9,0x0,0x0,0xe0,0x80,0x80,0x80,0xe0,0x40,0xc0,0x4,0x60,0x0, ! 87: 0xe0,0xa0,0xe0,0x80,0xe0,0x0,0x0,0x4,0xc0,0x0,0xa0,0xa0,0xa0,0xa0,0xe0,0x0, ! 88: 0x0,0x4,0x40,0xa0,0x40,0x40,0x40,0x40,0x40,0x0,0x0,0x4,0x40,0xa0,0xe0,0x20, ! 89: 0xe0,0xa0,0xe0,0x0,0x0,0x4,0x40,0xa0,0xe0,0xa0,0xa0,0xa0,0xe0,0x0,0x0,0x4, ! 90: 0x40,0xa0,0xe0,0xa0,0xe0,0x80,0xe0,0x0,0x0,0x4,0xe0,0x0,0xa0,0xa0,0xa0,0xa0, ! 91: 0xe0,0x0,0x0,0x4,0xc0,0x0,0xe0,0x20,0xe0,0xa0,0xe0,0x0,0x0,0x4,0xe0,0xa0, ! 92: 0xa0,0xa0,0xe0,0xa0,0xa0,0x0,0x0,0x4,0xc0,0xa0,0xa0,0xc0,0xa0,0xa0,0xc0,0x0, ! 93: 0x0,0x4,0xe0,0x80,0x80,0x80,0x80,0x80,0xe0,0x0,0x0,0x4,0xc0,0xa0,0xa0,0xa0, ! 94: 0xa0,0xa0,0xc0,0x0,0x0,0x4,0xe0,0x80,0x80,0xe0,0x80,0x80,0xe0,0x0,0x0,0x4, ! 95: 0xe0,0x80,0x80,0xe0,0x80,0x80,0x80,0x0,0x0,0x4 ! 96: }; ! 97: ! 98: static int DrawChar (int col, int xoffset, char *screen, int chr) ! 99: { ! 100: const char *font_pos; ! 101: int i; ! 102: ! 103: if (xoffset < 0) xoffset = 0; ! 104: ! 105: font_pos = font_bmp; ! 106: font_pos += (chr&0xff)*10; ! 107: screen += xoffset; ! 108: ! 109: for (i=0; i<8; i++) { ! 110: if (*font_pos & 0x80) *screen = col; ! 111: screen++; ! 112: if (*font_pos & 0x40) *screen = col; ! 113: screen++; ! 114: if (*font_pos & 0x20) *screen = col; ! 115: screen++; ! 116: if (*font_pos & 0x10) *screen = col; ! 117: screen++; ! 118: if (*font_pos & 0x8) *screen = col; ! 119: screen++; ! 120: if (*font_pos & 0x4) *screen = col; ! 121: screen++; ! 122: if (*font_pos & 0x2) *screen = col; ! 123: screen++; ! 124: if (*font_pos & 0x1) *screen = col; ! 125: screen++; ! 126: font_pos++; ! 127: screen += SCREENBYTES_LINE-8; ! 128: } ! 129: /* width of character */ ! 130: font_pos++; ! 131: i = *font_pos; ! 132: return xoffset + i; ! 133: } ! 134: ! 135: int DrawStr (int xpos, int ypos, int col, unsigned char *str, bool shadowed) ! 136: { ! 137: int x, y, chr; ! 138: char *screen; ! 139: ! 140: x = xpos; ! 141: y = ypos; ! 142: ! 143: if ((y > 192) || (y<0)) return x; ! 144: set_line: ! 145: screen = LOGSCREEN2; ! 146: screen += SCREENBYTES_LINE * y; ! 147: ! 148: while (*str) { ! 149: chr = *(str++); ! 150: ! 151: if (chr < 0x1e) { ! 152: if (chr == '\r') { ! 153: y += 10; ! 154: x = xpos; ! 155: goto set_line; ! 156: } ! 157: else if (chr == 1) col = *(str++); ! 158: continue; ! 159: } else if (chr == 0x1e) { ! 160: /* read new xpos */ ! 161: x = *(str++); ! 162: x *= 2; ! 163: continue; ! 164: } else if (chr < 0x20) { ! 165: /* Read new position */ ! 166: x = *(str++); ! 167: x *= 2; ! 168: y = *(str++); ! 169: goto set_line; ! 170: } ! 171: ! 172: if (x > 316) continue; ! 173: ! 174: if (shadowed) DrawChar (0, x+1, screen+SCREENBYTES_LINE, chr-0x20); ! 175: x = DrawChar (col, x, screen, chr-0x20); ! 176: } ! 177: ! 178: return x; ! 179: } ! 180: ! 181: #define SWAP(a,b) do { tmp=(a); (a)=(b); (b)=tmp; } while (0); ! 182: ! 183: static void draw_hline (int sx, int ex, int sy, int col) ! 184: { ! 185: char *pix; ! 186: ! 187: pix = LOGSCREEN2 + (SCREENBYTES_LINE * sy) + sx; ! 188: ! 189: for (; sx<=ex; sx++) { ! 190: *pix = col; ! 191: pix++; ! 192: } ! 193: } ! 194: ! 195: static void put_pix (int x, int y, int col) ! 196: { ! 197: char *pix; ! 198: ! 199: pix = LOGSCREEN2 + (SCREENBYTES_LINE * y) + x; ! 200: ! 201: *pix = col; ! 202: } ! 203: ! 204: void DrawTriangle (int Ax, int Ay, int Bx, int By, int Cx, int Cy, int col) ! 205: { ! 206: float dx1, dx2, dx3; ! 207: int tmp; ! 208: float Sx, Sy, Ex; ! 209: ! 210: /* sort so A is lowest y coord, C highest */ ! 211: if (Ay > Cy) { SWAP (Ax,Cx); SWAP (Ay,Cy); } ! 212: if (By > Cy) { SWAP (Bx,Cx); SWAP (By,Cy); } ! 213: if (Ay > By) { SWAP (Ax,Bx); SWAP (Ay,By); } ! 214: ! 215: if ((Ay == By) && (Ax > Bx)) { SWAP (Ax,Bx); SWAP (Ay,By); } ! 216: ! 217: if (By - Ay > 0) dx1 = (Bx - Ax)/(float)(By - Ay); else dx1 = Bx - Ax; ! 218: if (Cy - Ay > 0) dx2 = (Cx - Ax)/(float)(Cy - Ay); else dx2 = Cx - Ax; ! 219: if (Cy - By > 0) dx3 = (Cx - Bx)/(float)(Cy - By); else dx3 = Cx - Bx; ! 220: ! 221: ! 222: Ex = Sx = Ax; ! 223: Sy = Ay; ! 224: ! 225: if (dx1 > dx2) { ! 226: for (; Sy < By; Sy++,Sx+=dx2,Ex+=dx1) ! 227: draw_hline (Sx, Ex, Sy, col); ! 228: Ex = Bx; ! 229: for (; Sy <= Cy; Sy++,Sx+=dx2,Ex+=dx3) ! 230: draw_hline (Sx, Ex, Sy, col); ! 231: } else { ! 232: for (; Sy < By; Sy++,Sx+=dx1,Ex+=dx2) ! 233: draw_hline (Sx, Ex, Sy, col); ! 234: Sx = Bx; ! 235: Sy = By; ! 236: for (; Sy <= Cy; Sy++,Sx+=dx3,Ex+=dx2) ! 237: draw_hline (Sx, Ex, Sy, col); ! 238: } ! 239: ! 240: //put_pix (Ax, Ay, 1); ! 241: //put_pix (Bx, By, 1); ! 242: //put_pix (Cx, Cy, 1); ! 243: } ! 244: ! 245: void DrawPoly (struct Point *pt, int len, int col) ! 246: { ! 247: struct Point p1, p2, p3; ! 248: int i; ! 249: ! 250: p1 = pt[0]; ! 251: for (i=1; i<len-1; i++) { ! 252: p2 = pt[i]; ! 253: p3 = pt[i+1]; ! 254: DrawTriangle (p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, col); ! 255: p1 = p2; ! 256: } ! 257: } ! 258:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.