|
|
1.1 ! root 1: /* CONFIDENTIAL ! 2: * Copyright (c) 1993 by NeXT Computer, Inc as an unpublished work. ! 3: * All rights reserved. ! 4: * ! 5: * S3_928_Modes.c -- Modes for the S3 928. ! 6: * ! 7: * Author: Derek B Clegg 21 May 1993 ! 8: */ ! 9: #import "S3Modes.h" ! 10: ! 11: /* Tables of register values for the supported modes. */ ! 12: ! 13: /* S3 928 800 x 600 x 15 (S3 mode 0x114 or 0x214). ! 14: */ ! 15: static const S3Mode S3_928_800x600x15 = { ! 16: "S3_928[800 x 600 x 15]", S3_928, TWO_MEGABYTES, ! 17: ! 18: /* Mode control. */ ! 19: { 60, 0x02 }, ! 20: ! 21: /* Advanced function control register (0x4AE8). */ ! 22: 0x07, ! 23: ! 24: /* Extra CRTC registers. */ ! 25: { ! 26: 0x31, 0x8D, 0x32, 0x10, 0x33, 0x20, 0x34, 0x00, 0x35, 0x00, ! 27: 0x3A, 0x95, 0x3B, 0xF8, 0x3C, 0x19, 0x40, 0x50, 0x43, 0x00, ! 28: 0x50, 0x10, 0x51, 0x50, 0x53, 0x00, 0x54, 0x00, 0x56, 0x00, ! 29: 0x57, 0x00, 0x5C, 0x32, 0x5D, 0x00, 0x5E, 0x00, 0x5F, 0x00, ! 30: 0x60, 0x2F, 0x61, 0x81, 0x62, 0x92, 0x63, 0x92, ! 31: }, ! 32: ! 33: /* Standard VGA registers. */ ! 34: { ! 35: 0xEF, ! 36: 0x00, ! 37: { 0x01, 0x01, 0x0F, 0x00, 0x0E }, ! 38: { ! 39: 0x3D, 0x31, 0x32, 0x82, 0x35, 0x1D, 0x74, 0xF0, 0x00, 0x60, ! 40: 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x58, 0x8C, 0x57, 0x00, ! 41: 0x00, 0x57, 0x73, 0xE3, 0xFF, ! 42: }, ! 43: { ! 44: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, ! 45: 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x01, 0x00, 0x0F, 0x00, ! 46: }, ! 47: { ! 48: 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF, ! 49: }, ! 50: } ! 51: }; ! 52: ! 53: /* S3 928 800 x 600 x 24 (S3 mode 0x221). ! 54: */ ! 55: static const S3Mode S3_928_800x600x24 = { ! 56: "S3_928[800 x 600 x 24]", S3_928, THREE_MEGABYTES, ! 57: ! 58: /* Mode control. */ ! 59: { 60, 0x02 }, ! 60: ! 61: /* Advanced function control register (0x4AE8). */ ! 62: 0x07, ! 63: ! 64: /* Extra CRTC registers. */ ! 65: { ! 66: 0x31, 0x8D, 0x32, 0x10, 0x33, 0x20, 0x34, 0x00, 0x35, 0x00, ! 67: 0x3A, 0x95, 0x3B, 0x7C, 0x3C, 0x32, 0x40, 0x50, 0x43, 0x00, ! 68: 0x50, 0x30, 0x51, 0x60, 0x53, 0x20, 0x54, 0x00, 0x56, 0x00, ! 69: 0x57, 0x00, 0x5C, 0x32, 0x5D, 0x00, 0x5E, 0x00, 0x5F, 0x00, ! 70: 0x60, 0x2F, 0x61, 0x81, 0x62, 0x92, 0x63, 0x92, ! 71: }, ! 72: ! 73: /* Standard VGA registers. */ ! 74: { ! 75: 0xEF, ! 76: 0x00, ! 77: { 0x01, 0x01, 0x0F, 0x00, 0x0E }, ! 78: { ! 79: /* I had to add the `+1' to make this mode work. */ ! 80: 0x7F, 0x63 + 1, 0x64 + 1, 0x82, 0x6A, 0x1A, 0x72, 0xF0, 0x00, 0x60, ! 81: 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x59, 0x8D, 0x57, 0x00, ! 82: 0x00, 0x59, 0x72, 0xE3, 0xFF, ! 83: }, ! 84: { ! 85: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, ! 86: 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x01, 0x00, 0x0F, 0x00, ! 87: }, ! 88: { ! 89: 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF, ! 90: }, ! 91: } ! 92: }; ! 93: ! 94: /* S3 928 1024 x 768 x 8 (S3 mode 0x205). ! 95: */ ! 96: static const S3Mode S3_928_1024x768x8 = { ! 97: "S3_928[1024 x 768 x 8]", S3_928, ONE_MEGABYTE, ! 98: ! 99: /* Mode control. */ ! 100: { 60, 0x0D, 70, 0x0E, 72, 0x05 }, ! 101: ! 102: /* Advanced function control register (0x4AE8). */ ! 103: 0x07, ! 104: ! 105: /* Extra CRTC registers. */ ! 106: { ! 107: 0x31, 0x8D, 0x32, 0x10, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, ! 108: 0x3A, 0x95, 0x3B, 0x9D, 0x3C, 0x9F, 0x40, 0x51, 0x43, 0x00, ! 109: 0x50, 0x00, 0x51, 0x00, 0x53, 0x00, 0x54, 0x08, 0x56, 0x00, ! 110: 0x57, 0x00, 0x5C, 0x0D, 0x5D, 0x00, 0x5E, 0x00, 0x5F, 0x00, ! 111: 0x60, 0x1F, 0x61, 0x81, 0x62, 0x00, 0x63, 0x00, ! 112: }, ! 113: ! 114: /* Standard VGA registers. */ ! 115: { ! 116: 0x2F, ! 117: 0x00, ! 118: { 0x01, 0x01, 0x0F, 0x00, 0x0E }, ! 119: { ! 120: 0xA3, 0x7F, 0x80, 0x86, 0x84, 0x95, 0x25, 0xF5, 0x00, 0x60, ! 121: 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x87, 0xFF, 0x80, ! 122: 0x60, 0xFF, 0x21, 0xEB, 0xFF, ! 123: }, ! 124: { ! 125: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, ! 126: 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x01, 0x00, 0x0F, 0x00, ! 127: }, ! 128: { ! 129: 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF, ! 130: }, ! 131: } ! 132: }; ! 133: ! 134: /* S3 928 1024 x 768 x 15 (S3 mode 0x117). ! 135: */ ! 136: static const S3Mode S3_928_1024x768x15 = { ! 137: "S3_928[1024 x 768 x 15]", S3_928, TWO_MEGABYTES, ! 138: ! 139: /* Mode control. */ ! 140: { 60, 0x0D, 72, 0x05 }, ! 141: ! 142: /* Advanced function control register (0x4AE8). */ ! 143: 0x07, ! 144: ! 145: /* Extra CRTC registers. */ ! 146: { ! 147: 0x31, 0x8D, 0x32, 0x10, 0x33, 0x20, 0x34, 0x00, 0x35, 0x00, ! 148: 0x3A, 0x95, 0x3B, 0x4B, 0x3C, 0x20, 0x40, 0x50, 0x43, 0x00, ! 149: 0x50, 0x10, 0x51, 0x50, 0x53, 0x00, 0x54, 0x00, 0x56, 0x00, ! 150: 0x57, 0x00, 0x5C, 0x3D, 0x5D, 0x00, 0x5E, 0x00, 0x5F, 0x00, ! 151: 0x60, 0x2F, 0x61, 0x82, 0x62, 0x00, 0x63, 0x00, ! 152: }, ! 153: ! 154: /* Standard VGA registers. */ ! 155: { ! 156: 0xEF, ! 157: 0x00, ! 158: { 0x01, 0x01, 0x0F, 0x00, 0x0E }, ! 159: { ! 160: 0x4F, 0x3F, 0x40, 0x12, 0x42, 0x0A, 0x24, 0xF5, 0x00, 0x60, ! 161: 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x88, 0xFF, 0x00, ! 162: 0x00, 0xFF, 0x21, 0xE3, 0xFF, ! 163: }, ! 164: { ! 165: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, ! 166: 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x01, 0x00, 0x0F, 0x00, ! 167: }, ! 168: { ! 169: 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF, ! 170: }, ! 171: } ! 172: }; ! 173: ! 174: /* S3 928 1024 x 768 x 24 (S3 mode 222). ! 175: * This mode doesn't quite work yet. ! 176: */ ! 177: static const S3Mode S3_928_1024x768x24 = { ! 178: "S3_928[1024 x 768 x 24]", S3_928, THREE_MEGABYTES, ! 179: ! 180: /* Mode control. */ ! 181: { 60, 0x0D, 72, 0x05 }, ! 182: ! 183: /* Advanced function control register (0x4AE8). */ ! 184: 0x07, ! 185: ! 186: /* Extra CRTC registers. */ ! 187: { ! 188: 0x31, 0x8D, 0x32, 0x10, 0x33, 0x20, 0x34, 0x00, 0x35, 0x00, ! 189: 0x3A, 0x95, 0x3B, 0x9D, 0x3C, 0x40, 0x40, 0x50, 0x43, 0x00, ! 190: 0x50, 0x30, 0x51, 0x60, 0x53, 0x20, 0x54, 0x08, 0x56, 0x00, ! 191: 0x57, 0x00, 0x5C, 0x3D, 0x5D, 0x00, 0x5E, 0x00, 0x5F, 0x00, ! 192: 0x60, 0x1F, 0x61, 0x81, 0x62, 0x00, 0x63, 0x00, ! 193: }, ! 194: ! 195: /* Standard VGA registers. */ ! 196: { ! 197: 0x2F, ! 198: 0x00, ! 199: { 0x01, 0x01, 0x0F, 0x00, 0x0E }, ! 200: { ! 201: 0xA3, 0x7F, 0x80, 0x86, 0x84, 0x95, 0x25, 0xF5, 0x00, 0x60, ! 202: 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x87, 0xFF, 0x00, ! 203: 0x60, 0xFF, 0x21, 0xEB, 0xFF, ! 204: }, ! 205: { ! 206: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, ! 207: 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x01, 0x00, 0x0F, 0x00, ! 208: }, ! 209: { ! 210: 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF, ! 211: }, ! 212: } ! 213: }; ! 214: ! 215: /* S3 928 1280 x 1024 x 8 (S3 mode 0x107). ! 216: */ ! 217: static const S3Mode S3_928_1280x1024x8 = { ! 218: "S3_928[1280 x 1024 x 8]", S3_928, TWO_MEGABYTES, ! 219: ! 220: /* Mode control. */ ! 221: { 60, 0x0C }, ! 222: ! 223: /* Advanced function control register (0x4AE8). */ ! 224: 0x07, ! 225: ! 226: /* Extra CRTC registers. */ ! 227: { ! 228: 0x31, 0x8D, 0x32, 0x10, 0x33, 0x20, 0x34, 0x00, 0x35, 0x00, ! 229: 0x3A, 0x95, 0x3B, 0xBB, 0x3C, 0x14, 0x40, 0x50, 0x43, 0x00, ! 230: 0x50, 0xC0, 0x51, 0x00, 0x53, 0x00, 0x54, 0x00, 0x56, 0x00, ! 231: 0x57, 0x00, 0x5C, 0x3C, 0x5D, 0x00, 0x5E, 0x55, 0x5F, 0x00, ! 232: 0x60, 0x2F, 0x61, 0x81, 0x62, 0x40, 0x63, 0x40, ! 233: }, ! 234: ! 235: /* Standard VGA registers. */ ! 236: { ! 237: 0x2F, ! 238: 0x00, ! 239: { 0x01, 0x01, 0x0F, 0x00, 0x0E }, ! 240: { ! 241: /* I had to add the `-0xE' to make this work. */ ! 242: 0x30, 0x27, 0x27, 0x94, 0x29, 0x8E - 0xE, 0x37, 0x52, 0x00, 0x60, ! 243: 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x8C, 0xFF, 0xA0, ! 244: 0x00, 0x00, 0x31, 0xA3, 0xFF, ! 245: }, ! 246: { ! 247: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, ! 248: 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x01, 0x00, 0x0F, 0x00, ! 249: }, ! 250: { ! 251: 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF, ! 252: }, ! 253: } ! 254: }; ! 255: ! 256: /* S3 928 1280 x 1024 x 15 (S3 mode 0x21A) ! 257: */ ! 258: static const S3Mode S3_928_1280x1024x15 = { ! 259: "S3_928[1280 x 1024 x 15]", S3_928, FOUR_MEGABYTES, ! 260: ! 261: /* Mode control. */ ! 262: { 60, 0x0C }, ! 263: ! 264: /* Advanced function control register (0x4AE8). */ ! 265: 0x07, ! 266: ! 267: /* Extra CRTC registers. */ ! 268: { ! 269: 0x31, 0x8F, 0x32, 0x10, 0x33, 0x20, 0x34, 0x00, 0x35, 0x00, ! 270: 0x3A, 0x95, 0x3B, 0x5D, 0x3C, 0x28, 0x40, 0x50, 0x43, 0x00, ! 271: 0x50, 0x10, 0x51, 0x60, 0x53, 0x20, 0x54, 0x00, 0x56, 0x00, ! 272: 0x57, 0x00, 0x5C, 0x3C, 0x5D, 0x00, 0x5E, 0x55, 0x5F, 0x00, ! 273: 0x60, 0x2F, 0x61, 0x81, 0x62, 0x40, 0x63, 0x40, ! 274: }, ! 275: ! 276: /* Standard VGA registers. */ ! 277: { ! 278: 0x2F, ! 279: 0x00, ! 280: { 0x01, 0x01, 0x0F, 0x00, 0x0E }, ! 281: { ! 282: /* I had to add the `+1' to get this to work. */ ! 283: 0x65, 0x4F + 1, 0x50 + 1, 0x89, 0x52, 0x9C, 0x37, 0x52, 0x00, 0x40, ! 284: 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x05, 0x8C, 0xFF, 0x00, ! 285: 0x00, 0x00, 0x31, 0xE3, 0xFF, ! 286: }, ! 287: { ! 288: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07, 0x38, 0x39, ! 289: 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x01, 0x00, 0x0F, 0x00, ! 290: }, ! 291: { ! 292: 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0F, 0xFF, ! 293: }, ! 294: } ! 295: }; ! 296: ! 297: const IODisplayInfo S3_928_ModeTable[] = { ! 298: { ! 299: /* S3 928; 800 x 600 x 15 @ 60Hz. */ ! 300: 800, 600, 1024, 2048, 60, 0, IO_15BitsPerPixel, ! 301: IO_RGBColorSpace, "-RRRRRGGGGGBBBBB", 0, (void *)&S3_928_800x600x15, ! 302: }, ! 303: { ! 304: /* S3 928; 800 x 600 x 24 @ 60Hz. */ ! 305: 800, 600, 1024, 4096, 60, 0, IO_24BitsPerPixel, ! 306: IO_RGBColorSpace, "--------RRRRRRRRGGGGGGGGBBBBBBBB", ! 307: 0, (void *)&S3_928_800x600x24, ! 308: }, ! 309: { ! 310: /* S3 928; 1024 x 768 x 8 @ 60Hz. RGB */ ! 311: 1024, 768, 1024, 1024, 60, 0, IO_8BitsPerPixel, ! 312: IO_RGBColorSpace, "PPPPPPPP", 0, (void *)&S3_928_1024x768x8, ! 313: }, ! 314: { ! 315: /* S3 928; 1024 x 768 x 8 @ 70Hz. RGB */ ! 316: 1024, 768, 1024, 1024, 70, 0, IO_8BitsPerPixel, ! 317: IO_RGBColorSpace, "PPPPPPPP", 0, (void *)&S3_928_1024x768x8, ! 318: }, ! 319: { ! 320: /* S3 928; 1024 x 768 x 8 @ 72Hz. RGB */ ! 321: 1024, 768, 1024, 1024, 72, 0, IO_8BitsPerPixel, ! 322: IO_RGBColorSpace, "PPPPPPPP", 0, (void *)&S3_928_1024x768x8, ! 323: }, ! 324: { ! 325: /* S3 928; 1024 x 768 x 8 @ 60Hz. */ ! 326: 1024, 768, 1024, 1024, 60, 0, IO_8BitsPerPixel, ! 327: IO_OneIsWhiteColorSpace, "WWWWWWWW", 0, (void *)&S3_928_1024x768x8, ! 328: }, ! 329: { ! 330: /* S3 928; 1024 x 768 x 8 @ 70Hz. */ ! 331: 1024, 768, 1024, 1024, 70, 0, IO_8BitsPerPixel, ! 332: IO_OneIsWhiteColorSpace, "WWWWWWWW", 0, (void *)&S3_928_1024x768x8, ! 333: }, ! 334: { ! 335: /* S3 928; 1024 x 768 x 8 @ 72Hz. */ ! 336: 1024, 768, 1024, 1024, 72, 0, IO_8BitsPerPixel, ! 337: IO_OneIsWhiteColorSpace, "WWWWWWWW", 0, (void *)&S3_928_1024x768x8, ! 338: }, ! 339: { ! 340: /* S3 928; 1024 x 768 x 15 @ 60Hz. */ ! 341: 1024, 768, 1024, 2048, 60, 0, IO_15BitsPerPixel, ! 342: IO_RGBColorSpace, "-RRRRRGGGGGBBBBB", 0, (void *)&S3_928_1024x768x15, ! 343: }, ! 344: { ! 345: /* S3 928; 1024 x 768 x 15 @ 72Hz. */ ! 346: 1024, 768, 1024, 2048, 72, 0, IO_15BitsPerPixel, ! 347: IO_RGBColorSpace, "-RRRRRGGGGGBBBBB", 0, (void *)&S3_928_1024x768x15, ! 348: }, ! 349: { ! 350: /* S3 928; 1024 x 768 x 24 @ 60Hz. */ ! 351: 1024, 768, 1024, 4096, 60, 0, IO_24BitsPerPixel, ! 352: IO_RGBColorSpace, "--------RRRRRRRRGGGGGGGGBBBBBBBB", ! 353: 0, (void *)&S3_928_1024x768x24, ! 354: }, ! 355: { ! 356: /* S3 928; 1024 x 768 x 24 @ 72Hz. */ ! 357: 1024, 768, 1024, 4096, 72, 0, IO_24BitsPerPixel, ! 358: IO_RGBColorSpace, "--------RRRRRRRRGGGGGGGGBBBBBBBB", ! 359: 0, (void *)&S3_928_1024x768x24, ! 360: }, ! 361: { ! 362: /* S3 928; 1280 x 1024 x 8 @ 60Hz. */ ! 363: 1280, 1024, 1280, 1280, 60, 0, IO_8BitsPerPixel, ! 364: IO_OneIsWhiteColorSpace, "WWWWWWWW", 0, (void *)&S3_928_1280x1024x8, ! 365: }, ! 366: { ! 367: /* S3 928; 1280 x 1024 x 8 @ 60Hz. RGB */ ! 368: 1280, 1024, 1280, 1280, 60, 0, IO_8BitsPerPixel, ! 369: IO_RGBColorSpace, "PPPPPPPP", 0, (void *)&S3_928_1280x1024x8, ! 370: }, ! 371: { ! 372: /* S3 928; 1280 x 1024 x 15 @ 60Hz. */ ! 373: 1280, 1024, 2048, 4096, 60, 0, IO_15BitsPerPixel, ! 374: IO_RGBColorSpace, "-RRRRRGGGGGBBBBB", 0, (void *)&S3_928_1280x1024x15, ! 375: }, ! 376: }; ! 377: ! 378: const int S3_928_ModeTableCount = ! 379: (sizeof(S3_928_ModeTable) / sizeof(S3_928_ModeTable[0])); ! 380: ! 381: const int S3_928_defaultMode = 2;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.