Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2. Copyright (C) 1996-1997 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20. //
  21. // vgamodes.h: VGA mode set tables
  22. //
  23.  
  24. #include "vregset.h"
  25.  
  26. int             VGA_InitMode (viddef_t *vid, vmode_t *pcurrentmode);
  27. void    VGA_SwapBuffers (viddef_t *vid, vmode_t *pcurrentmode, vrect_t *rects);
  28. void    VGA_SetPalette (viddef_t *vid, vmode_t *pcurrentmode,
  29.                                                 unsigned char *pal);
  30.  
  31. ///////////////////////////////////////////////////////////////////////////
  32. // the following base mode descriptors plus extra data together provide all
  33. // the data needed to do VGA mode sets
  34. ///////////////////////////////////////////////////////////////////////////
  35.  
  36. typedef struct {
  37.         int             vidbuffer;
  38.         int             *pregset;
  39. } vextra_t;
  40.  
  41. int     vrsnull[] = {
  42.         VRS_END,
  43. };
  44.  
  45. int vrs320x200x256planar[] = {
  46. //
  47. // switch to linear, non-chain4 mode
  48. //
  49.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  50.         VRS_BYTE_OUT, SC_DATA,  1,
  51.  
  52.         VRS_BYTE_OUT, SC_INDEX, MEMORY_MODE,
  53.         VRS_BYTE_RMW, SC_DATA, ~0x08, 0x04,
  54.         VRS_BYTE_OUT, GC_INDEX, GRAPHICS_MODE,
  55.         VRS_BYTE_RMW, GC_DATA, ~0x13, 0x00,
  56.         VRS_BYTE_OUT, GC_INDEX, MISCELLANOUS,
  57.         VRS_BYTE_RMW, GC_DATA, ~0x02, 0x00,
  58.  
  59.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  60.         VRS_BYTE_OUT, SC_DATA,  3,
  61.  
  62. //
  63. // change the CRTC from doubleword to byte mode
  64. //
  65.         VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  66.         VRS_BYTE_RMW, CRTC_DATA, ~0x40, 0x00,
  67.         VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  68.         VRS_BYTE_RMW, CRTC_DATA, ~0x00, 0x40,
  69.  
  70.         VRS_END,
  71. };
  72.  
  73. int vrs360x200x256planar[] = {
  74. //
  75. // switch to linear, non-chain4 mode
  76. //
  77.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  78.         VRS_BYTE_OUT, SC_DATA,  1,
  79.  
  80.         VRS_WORD_OUT, SC_INDEX, 0x0604,
  81.         VRS_BYTE_OUT, MISC_OUTPUT, 0x67,
  82.  
  83.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  84.         VRS_BYTE_OUT, SC_DATA,  3,
  85.  
  86. //
  87. // unprotect CRTC0 through CRTC0
  88. //
  89.         VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  90.         VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  91.  
  92. //
  93. // change the CRTC from doubleword to byte mode
  94. //
  95.         VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  96.         VRS_BYTE_RMW, CRTC_DATA,  ~0x40, 0x00,
  97.         VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  98.         VRS_BYTE_RMW, CRTC_DATA,  ~0x00, 0x40,
  99.  
  100. //
  101. // set up the CRT Controller
  102. //
  103.         VRS_WORD_OUT, CRTC_INDEX, 0x6B00,
  104.         VRS_WORD_OUT, CRTC_INDEX, 0x5901,
  105.         VRS_WORD_OUT, CRTC_INDEX, 0x5A02,
  106.         VRS_WORD_OUT, CRTC_INDEX, 0x8E03,
  107.         VRS_WORD_OUT, CRTC_INDEX, 0x5E04,
  108.         VRS_WORD_OUT, CRTC_INDEX, 0x8A05,
  109.         VRS_WORD_OUT, CRTC_INDEX, 0x3013,
  110.  
  111.         VRS_END,
  112. };
  113.  
  114. int vrs320x240x256planar[] = {
  115. //
  116. // switch to linear, non-chain4 mode
  117. //
  118.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  119.         VRS_BYTE_OUT, SC_DATA,  1,
  120.  
  121.         VRS_BYTE_OUT, SC_INDEX, MEMORY_MODE,
  122.         VRS_BYTE_RMW, SC_DATA, ~0x08, 0x04,
  123.         VRS_BYTE_OUT, GC_INDEX, GRAPHICS_MODE,
  124.         VRS_BYTE_RMW, GC_DATA, ~0x13, 0x00,
  125.         VRS_BYTE_OUT, GC_INDEX, MISCELLANOUS,
  126.         VRS_BYTE_RMW, GC_DATA, ~0x02, 0x00,
  127.  
  128.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  129.         VRS_BYTE_OUT, SC_DATA,  3,
  130.  
  131. //
  132. // unprotect CRTC0 through CRTC0
  133. //
  134.         VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  135.         VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  136.  
  137. //
  138. // set up the CRT Controller
  139. //
  140.         VRS_WORD_OUT, CRTC_INDEX, 0x0D06,
  141.         VRS_WORD_OUT, CRTC_INDEX, 0x3E07,
  142.         VRS_WORD_OUT, CRTC_INDEX, 0x4109,
  143.         VRS_WORD_OUT, CRTC_INDEX, 0xEA10,
  144.         VRS_WORD_OUT, CRTC_INDEX, 0xAC11,
  145.         VRS_WORD_OUT, CRTC_INDEX, 0xDF12,
  146.         VRS_WORD_OUT, CRTC_INDEX, 0x0014,
  147.         VRS_WORD_OUT, CRTC_INDEX, 0xE715,
  148.         VRS_WORD_OUT, CRTC_INDEX, 0x0616,
  149.         VRS_WORD_OUT, CRTC_INDEX, 0xE317,
  150.  
  151.         VRS_END,
  152. };
  153.  
  154. int vrs360x240x256planar[] = {
  155. //
  156. // switch to linear, non-chain4 mode
  157. //
  158.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  159.         VRS_BYTE_OUT, SC_DATA,  1,
  160.  
  161.         VRS_WORD_OUT, SC_INDEX, 0x0604,
  162.         VRS_BYTE_OUT, MISC_OUTPUT, 0xE7,
  163.  
  164.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  165.         VRS_BYTE_OUT, SC_DATA,  3,
  166.  
  167. //
  168. // unprotect CRTC0 through CRTC0
  169. //
  170.         VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  171.         VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  172.  
  173. //
  174. // set up the CRT Controller
  175. //
  176.         VRS_WORD_OUT, CRTC_INDEX, 0x6B00,
  177.         VRS_WORD_OUT, CRTC_INDEX, 0x5901,
  178.         VRS_WORD_OUT, CRTC_INDEX, 0x5A02,
  179.         VRS_WORD_OUT, CRTC_INDEX, 0x8E03,
  180.         VRS_WORD_OUT, CRTC_INDEX, 0x5E04,
  181.         VRS_WORD_OUT, CRTC_INDEX, 0x8A05,
  182.         VRS_WORD_OUT, CRTC_INDEX, 0x0D06,
  183.         VRS_WORD_OUT, CRTC_INDEX, 0x3E07,
  184.         VRS_WORD_OUT, CRTC_INDEX, 0x4109,
  185.         VRS_WORD_OUT, CRTC_INDEX, 0xEA10,
  186.         VRS_WORD_OUT, CRTC_INDEX, 0xAC11,
  187.         VRS_WORD_OUT, CRTC_INDEX, 0xDF12,
  188.         VRS_WORD_OUT, CRTC_INDEX, 0x3013,
  189.         VRS_WORD_OUT, CRTC_INDEX, 0x0014,
  190.         VRS_WORD_OUT, CRTC_INDEX, 0xE715,
  191.         VRS_WORD_OUT, CRTC_INDEX, 0x0616,
  192.         VRS_WORD_OUT, CRTC_INDEX, 0xE317,
  193.  
  194.         VRS_END,
  195. };
  196.  
  197. int vrs320x350x256planar[] = {
  198. //
  199. // switch to linear, non-chain4 mode
  200. //
  201.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  202.         VRS_BYTE_OUT, SC_DATA,  1,
  203.  
  204.         VRS_BYTE_OUT, SC_INDEX, MEMORY_MODE,
  205.         VRS_BYTE_RMW, SC_DATA, ~0x08, 0x04,
  206.         VRS_BYTE_OUT, GC_INDEX, GRAPHICS_MODE,
  207.         VRS_BYTE_RMW, GC_DATA, ~0x10, 0x00,
  208.         VRS_BYTE_OUT, GC_INDEX, MISCELLANOUS,
  209.         VRS_BYTE_RMW, GC_DATA, ~0x02, 0x00,
  210.         VRS_BYTE_OUT, MISC_OUTPUT, 0xA3,        // 350-scan-line scan rate
  211.  
  212.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  213.         VRS_BYTE_OUT, SC_DATA,  3,
  214.  
  215. //
  216. // unprotect CRTC0 through CRTC0
  217. //
  218.         VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  219.         VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  220.  
  221. //
  222. // stop scanning each line twice
  223. //
  224.         VRS_BYTE_OUT, CRTC_INDEX, MAX_SCAN_LINE,
  225.         VRS_BYTE_RMW, CRTC_DATA, ~0x1F, 0x00,
  226.  
  227. //
  228. // change the CRTC from doubleword to byte mode
  229. //
  230.         VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  231.         VRS_BYTE_RMW, CRTC_DATA, ~0x40, 0x00,
  232.         VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  233.         VRS_BYTE_RMW, CRTC_DATA, ~0x00, 0x40,
  234.  
  235. //
  236. // set the vertical counts for 350-scan-line mode
  237. //
  238.         VRS_WORD_OUT, CRTC_INDEX, 0xBF06,
  239.         VRS_WORD_OUT, CRTC_INDEX, 0x1F07,
  240.         VRS_WORD_OUT, CRTC_INDEX, 0x8310,
  241.         VRS_WORD_OUT, CRTC_INDEX, 0x8511,
  242.         VRS_WORD_OUT, CRTC_INDEX, 0x5D12,
  243.         VRS_WORD_OUT, CRTC_INDEX, 0x6315,
  244.         VRS_WORD_OUT, CRTC_INDEX, 0xBA16,
  245.  
  246.         VRS_END,
  247. };
  248.  
  249. int vrs360x350x256planar[] = {
  250. //
  251. // switch to linear, non-chain4 mode
  252. //
  253.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  254.         VRS_BYTE_OUT, SC_DATA,  1,
  255.  
  256.         VRS_WORD_OUT, SC_INDEX, 0x0604,
  257.         VRS_BYTE_OUT, MISC_OUTPUT, 0xA7,        // 350-scan-line scan rate
  258.  
  259.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  260.         VRS_BYTE_OUT, SC_DATA,  3,
  261.  
  262. //
  263. // unprotect CRTC0 through CRTC0
  264. //
  265.         VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  266.         VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  267.  
  268. //
  269. // stop scanning each line twice
  270. //
  271.         VRS_BYTE_OUT, CRTC_INDEX, MAX_SCAN_LINE,
  272.         VRS_BYTE_RMW, CRTC_DATA, ~0x1F, 0x00,
  273.  
  274. //
  275. // change the CRTC from doubleword to byte mode
  276. //
  277.         VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  278.         VRS_BYTE_RMW, CRTC_DATA, ~0x40, 0x00,
  279.         VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  280.         VRS_BYTE_RMW, CRTC_DATA, ~0x00, 0x40,
  281.  
  282. //
  283. // set the vertical counts for 350-scan-line mode and 360 pixels across
  284. //
  285.         VRS_WORD_OUT, CRTC_INDEX, 0x6B00,
  286.         VRS_WORD_OUT, CRTC_INDEX, 0x5901,
  287.         VRS_WORD_OUT, CRTC_INDEX, 0x5A02,
  288.         VRS_WORD_OUT, CRTC_INDEX, 0x8E03,
  289.         VRS_WORD_OUT, CRTC_INDEX, 0x5E04,
  290.         VRS_WORD_OUT, CRTC_INDEX, 0x8A05,
  291.         VRS_WORD_OUT, CRTC_INDEX, 0xBF06,
  292.         VRS_WORD_OUT, CRTC_INDEX, 0x1F07,
  293.         VRS_WORD_OUT, CRTC_INDEX, 0x8310,
  294.         VRS_WORD_OUT, CRTC_INDEX, 0x8511,
  295.         VRS_WORD_OUT, CRTC_INDEX, 0x5D12,
  296.         VRS_WORD_OUT, CRTC_INDEX, 0x3013,
  297.         VRS_WORD_OUT, CRTC_INDEX, 0x6315,
  298.         VRS_WORD_OUT, CRTC_INDEX, 0xBA16,
  299.  
  300.         VRS_END,
  301. };
  302.  
  303. int vrs320x400x256planar[] = {
  304. //
  305. // switch to linear, non-chain4 mode
  306. //
  307.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  308.         VRS_BYTE_OUT, SC_DATA,  1,
  309.  
  310.  
  311.         VRS_BYTE_OUT, SC_INDEX, MEMORY_MODE,
  312.         VRS_BYTE_RMW, SC_DATA, ~0x08, 0x04,
  313.         VRS_BYTE_OUT, GC_INDEX, GRAPHICS_MODE,
  314.         VRS_BYTE_RMW, GC_DATA, ~0x10, 0x00,
  315.         VRS_BYTE_OUT, GC_INDEX, MISCELLANOUS,
  316.         VRS_BYTE_RMW, GC_DATA, ~0x02, 0x00,
  317.  
  318.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  319.         VRS_BYTE_OUT, SC_DATA,  3,
  320.  
  321. //
  322. // stop scanning each line twice
  323. //
  324.         VRS_BYTE_OUT, CRTC_INDEX, MAX_SCAN_LINE,
  325.         VRS_BYTE_RMW, CRTC_DATA, ~0x1F, 0x00,
  326.  
  327. //
  328. // change the CRTC from doubleword to byte mode
  329. //
  330.         VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  331.         VRS_BYTE_RMW, CRTC_DATA, ~0x40, 0x00,
  332.         VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  333.         VRS_BYTE_RMW, CRTC_DATA, ~0x00, 0x40,
  334.  
  335.         VRS_END,
  336. };
  337.  
  338. int vrs360x400x256planar[] = {
  339. //
  340. // switch to linear, non-chain4 mode
  341. //
  342.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  343.         VRS_BYTE_OUT, SC_DATA,  1,
  344.  
  345.         VRS_WORD_OUT, SC_INDEX, 0x0604,
  346.         VRS_BYTE_OUT, MISC_OUTPUT, 0x67,
  347.  
  348.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  349.         VRS_BYTE_OUT, SC_DATA,  3,
  350.  
  351. //
  352. // unprotect CRTC0 through CRTC0
  353. //
  354.         VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  355.         VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  356.  
  357. //
  358. // stop scanning each line twice
  359. //
  360.         VRS_BYTE_OUT, CRTC_INDEX, MAX_SCAN_LINE,
  361.         VRS_BYTE_RMW, CRTC_DATA, ~0x1F, 0x00,
  362.  
  363. //
  364. // change the CRTC from doubleword to byte mode
  365. //
  366.         VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  367.         VRS_BYTE_RMW, CRTC_DATA,  ~0x40, 0x00,
  368.         VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  369.         VRS_BYTE_RMW, CRTC_DATA,  ~0x00, 0x40,
  370.  
  371. //
  372. // set up the CRT Controller
  373. //
  374.         VRS_WORD_OUT, CRTC_INDEX, 0x6B00,
  375.         VRS_WORD_OUT, CRTC_INDEX, 0x5901,
  376.         VRS_WORD_OUT, CRTC_INDEX, 0x5A02,
  377.         VRS_WORD_OUT, CRTC_INDEX, 0x8E03,
  378.         VRS_WORD_OUT, CRTC_INDEX, 0x5E04,
  379.         VRS_WORD_OUT, CRTC_INDEX, 0x8A05,
  380.         VRS_WORD_OUT, CRTC_INDEX, 0x3013,
  381.  
  382.         VRS_END,
  383. };
  384.  
  385. int vrs320x480x256planar[] = {
  386. //
  387. // switch to linear, non-chain4 mode
  388. //
  389.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  390.         VRS_BYTE_OUT, SC_DATA,  1,
  391.  
  392.         VRS_BYTE_OUT, SC_INDEX, MEMORY_MODE,
  393.         VRS_BYTE_RMW, SC_DATA, ~0x08, 0x04,
  394.         VRS_BYTE_OUT, GC_INDEX, GRAPHICS_MODE,
  395.         VRS_BYTE_RMW, GC_DATA, ~0x10, 0x00,
  396.         VRS_BYTE_OUT, GC_INDEX, MISCELLANOUS,
  397.         VRS_BYTE_RMW, GC_DATA, ~0x02, 0x00,
  398.  
  399.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  400.         VRS_BYTE_OUT, SC_DATA,  3,
  401.  
  402. //
  403. // unprotect CRTC0 through CRTC0
  404. //
  405.         VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  406.         VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  407.  
  408. //
  409. // stop scanning each line twice
  410. //
  411.         VRS_BYTE_OUT, CRTC_INDEX, MAX_SCAN_LINE,
  412.         VRS_BYTE_RMW, CRTC_DATA, ~0x1F, 0x00,
  413.  
  414. //
  415. // change the CRTC from doubleword to byte mode
  416. //
  417.         VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  418.         VRS_BYTE_RMW, CRTC_DATA, ~0x40, 0x00,
  419.         VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  420.         VRS_BYTE_RMW, CRTC_DATA, ~0x00, 0x40,
  421.  
  422. //
  423. // set up the CRT Controller
  424. //
  425.         VRS_WORD_OUT, CRTC_INDEX, 0x0D06,
  426.         VRS_WORD_OUT, CRTC_INDEX, 0x3E07,
  427.         VRS_WORD_OUT, CRTC_INDEX, 0xEA10,
  428.         VRS_WORD_OUT, CRTC_INDEX, 0xAC11,
  429.         VRS_WORD_OUT, CRTC_INDEX, 0xDF12,
  430.         VRS_WORD_OUT, CRTC_INDEX, 0xE715,
  431.         VRS_WORD_OUT, CRTC_INDEX, 0x0616,
  432.  
  433.         VRS_END,
  434. };
  435.  
  436. int vrs360x480x256planar[] = {
  437. //
  438. // switch to linear, non-chain4 mode
  439. //
  440.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  441.         VRS_BYTE_OUT, SC_DATA,  1,
  442.  
  443.         VRS_WORD_OUT, SC_INDEX, 0x0604,
  444.         VRS_BYTE_OUT, MISC_OUTPUT, 0xE7,
  445.  
  446.         VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  447.         VRS_BYTE_OUT, SC_DATA,  3,
  448.  
  449. //
  450. // unprotect CRTC0 through CRTC0
  451. //
  452.         VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  453.         VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  454.  
  455. //
  456. // set up the CRT Controller
  457. //
  458.         VRS_WORD_OUT, CRTC_INDEX, 0x6B00,
  459.         VRS_WORD_OUT, CRTC_INDEX, 0x5901,
  460.         VRS_WORD_OUT, CRTC_INDEX, 0x5A02,
  461.         VRS_WORD_OUT, CRTC_INDEX, 0x8E03,
  462.         VRS_WORD_OUT, CRTC_INDEX, 0x5E04,
  463.         VRS_WORD_OUT, CRTC_INDEX, 0x8A05,
  464.         VRS_WORD_OUT, CRTC_INDEX, 0x0D06,
  465.         VRS_WORD_OUT, CRTC_INDEX, 0x3E07,
  466.         VRS_WORD_OUT, CRTC_INDEX, 0x4009,
  467.         VRS_WORD_OUT, CRTC_INDEX, 0xEA10,
  468.         VRS_WORD_OUT, CRTC_INDEX, 0xAC11,
  469.         VRS_WORD_OUT, CRTC_INDEX, 0xDF12,
  470.         VRS_WORD_OUT, CRTC_INDEX, 0x3013,
  471.         VRS_WORD_OUT, CRTC_INDEX, 0x0014,
  472.         VRS_WORD_OUT, CRTC_INDEX, 0xE715,
  473.         VRS_WORD_OUT, CRTC_INDEX, 0x0616,
  474.         VRS_WORD_OUT, CRTC_INDEX, 0xE317,
  475.  
  476.         VRS_END,
  477. };
  478.  
  479. //
  480. // extra VGA-specific data for vgavidmodes
  481. //
  482. vextra_t        extra320x200x256linear = {
  483.         1, vrsnull
  484. };
  485. vextra_t        extra320x200x256planar = {
  486.         1, vrs320x200x256planar
  487. };
  488. vextra_t        extra360x200x256planar = {
  489.         1, vrs360x200x256planar
  490. };
  491. vextra_t        extra320x240x256planar = {
  492.         1, vrs320x240x256planar
  493. };
  494. vextra_t        extra360x240x256planar = {
  495.         1, vrs360x240x256planar
  496. };
  497. vextra_t        extra320x350x256planar = {
  498.         1, vrs320x350x256planar
  499. };
  500. vextra_t        extra360x350x256planar = {
  501.         1, vrs360x350x256planar
  502. };
  503. vextra_t        extra320x400x256planar = {
  504.         1, vrs320x400x256planar
  505. };
  506. vextra_t        extra360x400x256planar = {
  507.         1, vrs360x400x256planar
  508. };
  509. vextra_t        extra320x480x256planar = {
  510.         1, vrs320x480x256planar
  511. };
  512. vextra_t        extra360x480x256planar = {
  513.         1, vrs360x480x256planar
  514. };
  515.  
  516. //
  517. // base mode descriptors, in ascending order of number of pixels
  518. //
  519.  
  520. vmode_t vgavidmodes[] = {
  521. {
  522.         NULL,
  523.         "320x200", "    ***** standard VGA modes *****    ",
  524.         320, 200, (200.0/320.0)*(320.0/240.0), 320, 0, 1, &extra320x200x256linear,
  525.         VGA_InitMode, VGA_SwapBuffers, VGA_SetPalette,
  526.         VGA_BeginDirectRect, VGA_EndDirectRect
  527. },
  528. {
  529.         NULL,
  530.         "320x200", "    ***** Mode X-style modes *****    ",
  531.         320, 200, (200.0/320.0)*(320.0/240.0), 320, 1, 1, &extra320x200x256planar,
  532.         VGA_InitMode, VGA_SwapBuffers, VGA_SetPalette,
  533.         VGA_BeginDirectRect, VGA_EndDirectRect
  534. },
  535. {
  536.         NULL,
  537.         "360x200", NULL, 360, 200, (200.0/360.0)*(320.0/240.0),
  538.         384, 1, 1, &extra360x200x256planar, VGA_InitMode,
  539.         VGA_SwapBuffers,
  540.         VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  541. },
  542. {
  543.         NULL,
  544.         "320x240", NULL, 320, 240, (240.0/320.0)*(320.0/240.0),
  545.         320, 1, 1, &extra320x240x256planar, VGA_InitMode,
  546.         VGA_SwapBuffers,
  547.         VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  548. },
  549. {
  550.         NULL,
  551.         "360x240", NULL, 360, 240, (240.0/360.0)*(320.0/240.0),
  552.         384, 1, 1, &extra360x240x256planar,
  553.         VGA_InitMode, VGA_SwapBuffers, VGA_SetPalette,
  554.         VGA_BeginDirectRect, VGA_EndDirectRect
  555. },
  556. {
  557.         NULL,
  558.         "320x350", NULL, 320, 350, (350.0/320.0)*(320.0/240.0),
  559.         320, 1, 1, &extra320x350x256planar, VGA_InitMode,
  560.         VGA_SwapBuffers,
  561.         VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  562. },
  563. {
  564.         NULL,
  565.         "360x350", NULL, 360, 350, (350.0/360.0)*(320.0/240.0),
  566.         384, 1, 1, &extra360x350x256planar, VGA_InitMode,
  567.         VGA_SwapBuffers,
  568.         VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  569. },
  570. {
  571.         NULL,
  572.         "320x400", NULL, 320, 400, (400.0/320.0)*(320.0/240.0), 320,
  573.         1, 1, &extra320x400x256planar, VGA_InitMode,
  574.         VGA_SwapBuffers,
  575.         VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  576. },
  577. {
  578.         NULL,
  579.         "360x400", NULL, 360, 400, (400.0/360.0)*(320.0/240.0),
  580.         384, 1, 1, &extra360x400x256planar, VGA_InitMode,
  581.         VGA_SwapBuffers,
  582.         VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  583. },
  584. {
  585.         NULL,
  586.         "320x480", NULL, 320, 480, (480.0/320.0)*(320.0/240.0),
  587.         320, 1, 1, &extra320x480x256planar, VGA_InitMode,
  588.         VGA_SwapBuffers,
  589.         VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  590. },
  591. {
  592.         NULL,
  593.         "360x480", NULL, 360, 480, (480.0/360.0)*(320.0/240.0),
  594.         384, 1, 1, &extra360x480x256planar, VGA_InitMode,
  595.         VGA_SwapBuffers,
  596.         VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  597. },
  598. };
  599.  
  600.