home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Examples / DriverKit / S3 / S3_reloc.tproj / S3_928_Modes.c < prev    next >
Text File  |  1996-03-26  |  11KB  |  382 lines

  1. /* CONFIDENTIAL
  2.  * Copyright (c) 1993-1996 by NeXT Software, 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;
  382.