home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / gendacs3.zip / svgadata.s3 < prev    next >
Text File  |  1994-12-08  |  47KB  |  2,032 lines

  1. /*
  2.  *    OS/2 V3 SVGA PMI-File Generator
  3.  */
  4.  
  5. [PMIVersion]
  6.         2.15
  7.  
  8. [AdapterType]
  9.         S3
  10.  
  11. [ChipSet]
  12.         S386C80X
  13.  
  14. #includecode "IBMGPMI.DLL";
  15. [Hardware]
  16. BusType         = ISA
  17. OEMString       = "S386C80X GENERIC, S3 Incorporated"
  18. Version         = "S3 Incorporated. 86C801/805 "
  19. /*
  20.  *    HI-COLOR DAC
  21.  */
  22.  
  23. DACString       = "HICOLOR_RGB Generic"
  24. TotalMemory     = 1048576
  25. MemoryIOAddress = 0x00000000
  26. Endian          = LITTLE
  27. [IdentifyAdapter]
  28. call pfnPMIIdentifyAdapter;
  29.  
  30. /*
  31.  *    Unlock Extended Registers
  32.  */
  33.  
  34. [UnLock]
  35. inb(r0, 0x3d4);
  36. outb(0x3d4, 0x38);
  37. inb(r2, 0x3d5);
  38. outb(0x3d5, 0x48);
  39. outb(0x3d4, 0x39);
  40. inb(r4, 0x3d5);
  41. outb(0x3d5, 0xa5);
  42. outb(0x3d4, 0x40);
  43. inb(r6, 0x3d5);
  44. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x01);
  45. outb(0x3d4, r0);
  46.  
  47. /*
  48.  *    Lock Extended Registers
  49.  */
  50.  
  51. /*
  52.  *    This section locks adapter and chip
  53.  *    AS MUCH as BIOS does and NOT MORE!
  54.  *    In other words, it restores the NORMAL lock state.
  55.  */
  56.  
  57. [Lock]
  58. r6   =   0x00000058;
  59. r4   =   0x0000005a;
  60. r2   =   0x00000096;
  61. inb(r0, 0x3d4);
  62. outb(0x3d4, 0x40);
  63. outb(0x3d5, r6);
  64. outb(0x3d4, 0x39);
  65. outb(0x3d5, r4);
  66. outb(0x3d4, 0x38);
  67. outb(0x3d5, r2);
  68. outb(0x3d4, r0);
  69.  
  70. [Cleanup]
  71. outw(0x4ae8, 0x0002);
  72. rmwbi(0x3d4, 0x3d5, 0x31, 0xf7, 0x00);
  73. rmwbi(0x3d4, 0x3d5, 0x34, 0x00, 0x00);
  74. rmwbi(0x3d4, 0x3d5, 0x3a, 0xef, 0x00);
  75. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x00);
  76. rmwbi(0x3d4, 0x3d5, 0x45, 0xfe, 0x00);
  77. rmwbi(0x3d4, 0x3d5, 0x51, 0xf3, 0x00);
  78. rmwbi(0x3d4, 0x3d5, 0x58, 0xec, 0x00);
  79. rmwbi(0x3d4, 0x3d5, 0x59, 0x00, 0x0a);
  80. rmwbi(0x3d4, 0x3d5, 0x5a, 0x00, 0x00);
  81. rmwbi(0x3d4, 0x3d5, 0x60, 0x00, 0x07);
  82. rmwbi(0x3d4, 0x3d5, 0x61, 0x00, 0x80);
  83. rmwbi(0x3d4, 0x3d5, 0x62, 0x00, 0xa1);
  84. r0   =   0x00000000;
  85. rmwbi(0x3d4, 0x3d5, 0x55, 0xfe, 0x01);
  86. inb(r255, 0x3c7);
  87. inb(r255, 0x3c8);
  88. inb(r255, 0x3c6);
  89. inb(r255, 0x3c6);
  90. inb(r255, 0x3c6);
  91. inb(r255, 0x3c6);
  92. rmwbi(0x3d4, 0x3d5, 0x55, 0xfd, 0x00);
  93. outb(0x3c6, r0);
  94. rmwbi(0x3d4, 0x3d5, 0x55, 0xfe, 0x00);
  95. inb(r255, 0x3c7);
  96. inb(r255, 0x3c8);
  97. outb(0x3c6, 0xff);
  98.  
  99. [ProgramDAC]
  100. rmwbi(0x3d4, 0x3d5, 0x55, 0xfe, 0x01);
  101. inb(r255, 0x3c7);
  102. inb(r255, 0x3c8);
  103. inb(r255, 0x3c6);
  104. inb(r255, 0x3c6);
  105. inb(r255, 0x3c6);
  106. inb(r255, 0x3c6);
  107. rmwbi(0x3d4, 0x3d5, 0x55, 0xfd, 0x00);
  108. outb(0x3c6, r0);
  109. rmwbi(0x3d4, 0x3d5, 0x55, 0xfe, 0x00);
  110. inb(r255, 0x3c7);
  111. inb(r255, 0x3c8);
  112. outb(0x3c6, 0xff);
  113.  
  114. [SetBankLinear]
  115. r0   =   0x00000000;
  116. inb(r1, 0x3d4);
  117. rmwbi(0x3d4, 0x3d5, 0x31, 0xf6, 0x09);
  118. rmwbi(0x3d4, 0x3d5, 0x40, 0xf7, 0x08);
  119. rmwbi(0x3d4, 0x3d5, 0x58, 0xff, 0x00);
  120. outb(0x3d4, 0x35);
  121. inb(r2, 0x3d5);
  122. r2   &=  0x000000f0;
  123. r3   =   r0 &  0x0000000f;
  124. r3   |=  r2;
  125. outb(0x3d5, r3);
  126. outb(0x3d4, 0x51);
  127. inb(r2, 0x3d5);
  128. r2   &=  0x000000f3;
  129. r3   =   r0 &  0x00000030;
  130. r3   >>= 0x00000002;
  131. r3   |=  r2;
  132. outb(0x3d5, r3);
  133. outb(0x3d4, r1);
  134.  
  135. [GetBankLinear]
  136. inb(r1, 0x3d4);
  137. outb(0x3d4, 0x35);
  138. inb(r0, 0x3d5);
  139. r0   &=  0x0000000f;
  140. outb(0x3d4, 0x51);
  141. inb(r2, 0x3d5);
  142. r2   &=  0x00000004;
  143. r2   <<= 0x00000002;
  144. r0   |=  r2;
  145. outb(0x3d4, r1);
  146.  
  147. [TrapRegs]
  148. BYTE_IOPORT 0x03c2;
  149. BYTE_IOPORT 0x03c4;
  150. BYTE_IOPORT 0x03c5, 0x00-0x04;
  151. BYTE_IOPORT 0x03d4;
  152. BYTE_IOPORT 0x03d5, 0x00-0x18, 0x31-0x35, 0x3a-0x3c, 0x40-0x40, 0x42-0x43, 0x45-0x49, 0x4c-0x5a, 0x5c-0x5e, 0x60-0x62;
  153. BYTE_IOPORT 0x03c0;
  154. BYTE_IOPORT 0x03c1, 0x00-0x14;
  155. BYTE_IOPORT 0x03ce;
  156. BYTE_IOPORT 0x03cf, 0x00-0x08;
  157. WORD_IOPORT 0x9ae8;
  158. WORD_IOPORT 0x4ae8;
  159. WORD_IOPORT 0xbee8;
  160. WORD_IOPORT 0x96e8;
  161. WORD_IOPORT 0x86e8;
  162. WORD_IOPORT 0x82e8;
  163. BYTE_IOPORT 0x03c6;
  164. BYTE_IOPORT 0x03c7;
  165. BYTE_IOPORT 0x03c8;
  166.  
  167. [comment]
  168.     Graphics Mode: 640 x 480 x 16 colors.
  169.  
  170. [ModeInfo]
  171.         ModeAttributes   = 0x18
  172.         BytesPerScanLine = 80
  173.         XResolution      = 640
  174.         YResolution      = 480
  175.         TextRows         = 30
  176.         BitsPerPixel     = 4
  177.         NumberOfPlanes   = 4
  178.         PageLength       = 38400
  179.         SaveSize         = 153600
  180.         TotalMemory      = 1048576
  181.         InterlaceMode    = 1
  182.         BufferAddress    = 0x000a0000
  183.         ApertureSize     = 0x00010000
  184.         Int10ModeSet     = 0x012
  185.  
  186. [SetBank]
  187. SetBankLinear;
  188.  
  189. [GetBank]
  190. GetBankLinear;
  191.  
  192. [SetMode]
  193.  
  194. /*
  195.  *    Set Miscellaneous Output Register
  196.  */
  197.  
  198. outb(0x3c2, 0xe3);
  199. /*
  200.  *    Set Sequencer Registers
  201.  */
  202.  
  203. r0   = 0x00; r1   = 0x01; r2   = 0x0f; r3   = 0x00; r4   = 0x06;
  204. boutb(5, 0x00, 0x3c4, 0x3c5);
  205.  
  206. outw(0x3c4, 0x0300);
  207. /*
  208.  *    Set CRT Registers
  209.  */
  210.  
  211. outb(0x3d4, 0x11);
  212. outb(0x3d5, 0x0e);
  213. r0   = 0x5f; r1   = 0x4f; r2   = 0x50; r3   = 0x82; r4   = 0x54;
  214. r5   = 0x80; r6   = 0x0b; r7   = 0x3e; r8   = 0x00; r9   = 0x40;
  215. r10  = 0x00; r11  = 0x00; r12  = 0x00; r13  = 0x00; r14  = 0x00;
  216. r15  = 0x00; r16  = 0xea; r17  = 0x8c; r18  = 0xdf; r19  = 0x28;
  217. r20  = 0x00; r21  = 0xe7; r22  = 0x04; r23  = 0xe3; r24  = 0xff;
  218. boutb(25, 0x00, 0x3d4, 0x3d5);
  219.  
  220. r80  = 0x00; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x38;
  221. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x88; r89  = 0x00;
  222. r90  = 0x0a; 
  223. boutb(11, 0x50, 0x3d4, 0x3d5);
  224.  
  225. r92  = 0x00; r93  = 0x00; r94  = 0x00; 
  226. boutb(3, 0x5c, 0x3d4, 0x3d5);
  227.  
  228. r96  = 0x07; r97  = 0x80; r98  = 0xa1; 
  229. boutb(3, 0x60, 0x3d4, 0x3d5);
  230.  
  231. r49  = 0x85; r50  = 0x40; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  232. boutb(5, 0x31, 0x3d4, 0x3d5);
  233.  
  234. r58  = 0x85; r59  = 0x5a; r60  = 0x10; 
  235. boutb(3, 0x3a, 0x3d4, 0x3d5);
  236.  
  237. r64  = 0x59; 
  238. boutb(1, 0x40, 0x3d4, 0x3d5);
  239.  
  240. r67  = 0x00; 
  241. boutb(1, 0x43, 0x3d4, 0x3d5);
  242.  
  243. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  244. boutb(5, 0x45, 0x3d4, 0x3d5);
  245.  
  246. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  247. boutb(4, 0x4c, 0x3d4, 0x3d5);
  248.  
  249. r66  = 0x04; 
  250. boutb(1, 0x42, 0x3d4, 0x3d5);
  251.  
  252. /*
  253.  *    Set Other Registers
  254.  */
  255.  
  256. call pfnPMISetMonitorTimings;
  257. /*
  258.  *    Set Attribute Registers
  259.  */
  260.  
  261. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  262. r5   = 0x05; r6   = 0x14; r7   = 0x07; r8   = 0x38; r9   = 0x39;
  263. r10  = 0x3a; r11  = 0x3b; r12  = 0x3c; r13  = 0x3d; r14  = 0x3e;
  264. r15  = 0x3f; r16  = 0x01; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  265. r20  = 0x00; 
  266. boutb(21, 0x00, 0x3c0, 0x3c1);
  267.  
  268. /*
  269.  *    Set GDC Registers
  270.  */
  271.  
  272. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  273. r5   = 0x00; r6   = 0x05; r7   = 0x0f; r8   = 0xff; 
  274. boutb(9, 0x00, 0x3ce, 0x3cf);
  275.  
  276. /*
  277.  *    Set Enhanced Command Registers
  278.  */
  279.  
  280. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  281. /*
  282.  *    Set CRT Registers
  283.  */
  284.  
  285. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x01);
  286. /*
  287.  *    Set Enhanced Command Registers
  288.  */
  289.  
  290. outw(0x4ae8, 0x0000);
  291. /*
  292.  *    Set CRT Registers
  293.  */
  294.  
  295. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x00);
  296. /*
  297.  *    Set DAC Registers
  298.  */
  299.  
  300. r0   =   0x00000000;
  301. ProgramDAC;
  302. inb(r0, 0x3da);
  303. outb(0x3c0, 0x20);
  304.  
  305. [comment]
  306.     Graphics Mode: 640 x 480 x 256 colors.
  307.  
  308. [ModeInfo]
  309.         ModeAttributes   = 0x18
  310.         BytesPerScanLine = 80
  311.         XResolution      = 640
  312.         YResolution      = 480
  313.         TextRows         = 30
  314.         BitsPerPixel     = 8
  315.         NumberOfPlanes   = 1
  316.         PageLength       = 307200
  317.         SaveSize         = 307200
  318.         TotalMemory      = 1048576
  319.         InterlaceMode    = 1
  320.         BufferAddress    = 0x000a0000
  321.         ApertureSize     = 0x00010000
  322.         Int10ModeSet     = 0x101
  323.  
  324. [MonitorModeInfo]
  325.         VerticalRefresh         = 72
  326.  
  327. [MonitorModeInfo]
  328.         VerticalRefresh         = 60
  329.  
  330. [SetBank]
  331. SetBankLinear;
  332.  
  333. [GetBank]
  334. GetBankLinear;
  335.  
  336. [SetMode]
  337.  
  338. outb(0x3d4, 0x42);
  339. outb(0x3d5, 0x00);
  340. rmwbi(0x3d4, 0x3d5, 0x11, 0x7f, 0x00);
  341. outb(0x3d4, 0x00);
  342. outb(0x3d5, 0x5F);
  343. /*
  344.  *    Set Miscellaneous Output Register
  345.  */
  346.  
  347. outb(0x3c2, 0xef);
  348. /*
  349.  *    Set Sequencer Registers
  350.  */
  351.  
  352. r0   = 0x00; r1   = 0x01; r2   = 0x0f; r3   = 0x00; r4   = 0x0e;
  353. boutb(5, 0x00, 0x3c4, 0x3c5);
  354.  
  355. outw(0x3c4, 0x0300);
  356. /*
  357.  *    Set CRT Registers
  358.  */
  359.  
  360. outb(0x3d4, 0x11);
  361. outb(0x3d5, 0x0e);
  362. r0   = 0x63; r1   = 0x4f; r2   = 0x50; r3   = 0x86; r4   = 0x53;
  363. r5   = 0x98; r6   = 0x07; r7   = 0x3e; r8   = 0x00; r9   = 0x40;
  364. r10  = 0x00; r11  = 0x00; r12  = 0x00; r13  = 0x00; r14  = 0xff;
  365. r15  = 0x00; r16  = 0xe8; r17  = 0x8b; r18  = 0xdf; r19  = 0x50;
  366. r20  = 0x60; r21  = 0xdf; r22  = 0x07; r23  = 0xab; r24  = 0xff;
  367. boutb(25, 0x00, 0x3d4, 0x3d5);
  368.  
  369. r80  = 0x00; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x00;
  370. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x18; r89  = 0x00;
  371. r90  = 0x0a; 
  372. boutb(11, 0x50, 0x3d4, 0x3d5);
  373.  
  374. r92  = 0x0b; r93  = 0x00; r94  = 0x00; 
  375. boutb(3, 0x5c, 0x3d4, 0x3d5);
  376.  
  377. r96  = 0x07; r97  = 0x80; r98  = 0xa1; 
  378. boutb(3, 0x60, 0x3d4, 0x3d5);
  379.  
  380. r49  = 0x8d; r50  = 0x00; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  381. boutb(5, 0x31, 0x3d4, 0x3d5);
  382.  
  383. r58  = 0x95; r59  = 0x5e; r60  = 0x40; 
  384. boutb(3, 0x3a, 0x3d4, 0x3d5);
  385.  
  386. r64  = 0x51; 
  387. boutb(1, 0x40, 0x3d4, 0x3d5);
  388.  
  389. r67  = 0x00; 
  390. boutb(1, 0x43, 0x3d4, 0x3d5);
  391.  
  392. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  393. boutb(5, 0x45, 0x3d4, 0x3d5);
  394.  
  395. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  396. boutb(4, 0x4c, 0x3d4, 0x3d5);
  397.  
  398. r66  = 0x0b; 
  399. boutb(1, 0x42, 0x3d4, 0x3d5);
  400.  
  401. /*
  402.  *    Set Other Registers
  403.  */
  404.  
  405. call pfnPMISetMonitorTimings;
  406. /*
  407.  *    Set Attribute Registers
  408.  */
  409.  
  410. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  411. r5   = 0x05; r6   = 0x06; r7   = 0x07; r8   = 0x10; r9   = 0x11;
  412. r10  = 0x12; r11  = 0x13; r12  = 0x14; r13  = 0x15; r14  = 0x16;
  413. r15  = 0x17; r16  = 0x41; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  414. r20  = 0x00; 
  415. boutb(21, 0x00, 0x3c0, 0x3c1);
  416.  
  417. /*
  418.  *    Set GDC Registers
  419.  */
  420.  
  421. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  422. r5   = 0x40; r6   = 0x05; r7   = 0x0f; r8   = 0xff; 
  423. boutb(9, 0x00, 0x3ce, 0x3cf);
  424.  
  425. /*
  426.  *    Set Enhanced Command Registers
  427.  */
  428.  
  429. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  430. outw(0x4ae8, 0x0001);
  431. outw(0xbee8, 0x1000);
  432. outw(0xbee8, 0x33ff);
  433. outw(0xbee8, 0x2000);
  434. outw(0xbee8, 0x43ff);
  435. outw(0xbee8, 0xa000);
  436. outw(0xbee8, 0x03ff);
  437. outw(0x96e8, 0x03ff);
  438. outw(0x86e8, 0x0000);
  439. outw(0x82e8, 0x0000);
  440. /*
  441.  *    Set DAC Registers
  442.  */
  443.  
  444. r0   =   0x00000000;
  445. ProgramDAC;
  446. inb(r0, 0x3da);
  447. outb(0x3c0, 0x20);
  448.  
  449. [comment]
  450.     Graphics Mode: 640 x 480 x 64K colors.
  451.  
  452. [ModeInfo]
  453.         ModeAttributes   = 0x18
  454.         BytesPerScanLine = 80
  455.         XResolution      = 640
  456.         YResolution      = 480
  457.         TextRows         = 30
  458.         BitsPerPixel     = 16
  459.         NumberOfPlanes   = 1
  460.         PageLength       = 614400
  461.         SaveSize         = 614400
  462.         TotalMemory      = 1048576
  463.         InterlaceMode    = 1
  464.         BufferAddress    = 0x000a0000
  465.         ApertureSize     = 0x00010000
  466.         Int10ModeSet     = 0x111
  467.  
  468. [MonitorModeInfo]
  469.         VerticalRefresh         = 72
  470.  
  471. [MonitorModeInfo]
  472.         VerticalRefresh         = 60
  473.  
  474. [SetBank]
  475. SetBankLinear;
  476.  
  477. [GetBank]
  478. GetBankLinear;
  479.  
  480. [SetMode]
  481.  
  482. outb(0x3d4, 0x42);
  483. outb(0x3d5, 0x00);
  484. rmwbi(0x3d4, 0x3d5, 0x11, 0x7f, 0x00);
  485. outb(0x3d4, 0x00);
  486. outb(0x3d5, 0x5F);
  487. /*
  488.  *    Set Miscellaneous Output Register
  489.  */
  490.  
  491. outb(0x3c2, 0xef);
  492. /*
  493.  *    Set Sequencer Registers
  494.  */
  495.  
  496. r0   = 0x00; r1   = 0x01; r2   = 0x0f; r3   = 0x00; r4   = 0x0e;
  497. boutb(5, 0x00, 0x3c4, 0x3c5);
  498.  
  499. outw(0x3c4, 0x0300);
  500. /*
  501.  *    Set CRT Registers
  502.  */
  503.  
  504. outb(0x3d4, 0x11);
  505. outb(0x3d5, 0x0e);
  506. r0   = 0xc1; r1   = 0x9f; r2   = 0xa2; r3   = 0x82; r4   = 0xa4;
  507. r5   = 0x1c; r6   = 0x0c; r7   = 0x3e; r8   = 0x00; r9   = 0x40;
  508. r10  = 0x00; r11  = 0x00; r12  = 0x00; r13  = 0x00; r14  = 0xff;
  509. r15  = 0x00; r16  = 0xea; r17  = 0x8c; r18  = 0xdf; r19  = 0xa0;
  510. r20  = 0x60; r21  = 0xe7; r22  = 0x05; r23  = 0xab; r24  = 0xff;
  511. boutb(25, 0x00, 0x3d4, 0x3d5);
  512.  
  513. r80  = 0x50; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x48;
  514. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x18; r89  = 0x00;
  515. r90  = 0x0a; 
  516. boutb(11, 0x50, 0x3d4, 0x3d5);
  517.  
  518. r92  = 0x04; r93  = 0x00; r94  = 0x00; 
  519. boutb(3, 0x5c, 0x3d4, 0x3d5);
  520.  
  521. r96  = 0x2f; r97  = 0x81; r98  = 0x40; 
  522. boutb(3, 0x60, 0x3d4, 0x3d5);
  523.  
  524. r49  = 0x8d; r50  = 0x00; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  525. boutb(5, 0x31, 0x3d4, 0x3d5);
  526.  
  527. r58  = 0x95; r59  = 0xbe; r60  = 0x40; 
  528. boutb(3, 0x3a, 0x3d4, 0x3d5);
  529.  
  530. r64  = 0x51; 
  531. boutb(1, 0x40, 0x3d4, 0x3d5);
  532.  
  533. r67  = 0x00; 
  534. boutb(1, 0x43, 0x3d4, 0x3d5);
  535.  
  536. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  537. boutb(5, 0x45, 0x3d4, 0x3d5);
  538.  
  539. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  540. boutb(4, 0x4c, 0x3d4, 0x3d5);
  541.  
  542. r66  = 0x04; 
  543. boutb(1, 0x42, 0x3d4, 0x3d5);
  544.  
  545. /*
  546.  *    Set Other Registers
  547.  */
  548.  
  549. call pfnPMISetMonitorTimings;
  550. /*
  551.  *    Set Attribute Registers
  552.  */
  553.  
  554. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  555. r5   = 0x05; r6   = 0x06; r7   = 0x07; r8   = 0x10; r9   = 0x11;
  556. r10  = 0x12; r11  = 0x13; r12  = 0x14; r13  = 0x15; r14  = 0x16;
  557. r15  = 0x17; r16  = 0x41; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  558. r20  = 0x00; 
  559. boutb(21, 0x00, 0x3c0, 0x3c1);
  560.  
  561. /*
  562.  *    Set GDC Registers
  563.  */
  564.  
  565. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  566. r5   = 0x40; r6   = 0x05; r7   = 0x0f; r8   = 0xff; 
  567. boutb(9, 0x00, 0x3ce, 0x3cf);
  568.  
  569. /*
  570.  *    Set Enhanced Command Registers
  571.  */
  572.  
  573. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  574. outw(0x4ae8, 0x0001);
  575. outw(0xbee8, 0x1000);
  576. outw(0xbee8, 0x33ff);
  577. outw(0xbee8, 0x2000);
  578. outw(0xbee8, 0x43ff);
  579. outw(0xbee8, 0xa000);
  580. outw(0xbee8, 0x03ff);
  581. outw(0x96e8, 0x03ff);
  582. outw(0x86e8, 0x0000);
  583. outw(0x82e8, 0x0000);
  584. /*
  585.  *    Set DAC Registers
  586.  */
  587.  
  588. r0   =   0x000000c0;
  589. ProgramDAC;
  590. inb(r0, 0x3da);
  591. outb(0x3c0, 0x20);
  592.  
  593. [comment]
  594.     Graphics Mode: 640 x 480 x 16M colors.
  595.  
  596. [ModeInfo]
  597.         ModeAttributes   = 0x18
  598.         BytesPerScanLine = 80
  599.         XResolution      = 640
  600.         YResolution      = 480
  601.         TextRows         = 30
  602.         BitsPerPixel     = 24
  603.         NumberOfPlanes   = 1
  604.         PageLength       = 921600
  605.         SaveSize         = 921600
  606.         TotalMemory      = 1048576
  607.         InterlaceMode    = 1
  608.         BufferAddress    = 0x000a0000
  609.         ApertureSize     = 0x00010000
  610.         Int10ModeSet     = 0x112
  611.  
  612. [MonitorModeInfo]
  613.         VerticalRefresh         = 72
  614.  
  615. [MonitorModeInfo]
  616.         VerticalRefresh         = 60
  617.  
  618. [SetBank]
  619. SetBankLinear;
  620.  
  621. [GetBank]
  622. GetBankLinear;
  623.  
  624. [SetMode]
  625.  
  626. outb(0x3d4, 0x42);
  627. outb(0x3d5, 0x00);
  628. rmwbi(0x3d4, 0x3d5, 0x11, 0x7f, 0x00);
  629. outb(0x3d4, 0x00);
  630. outb(0x3d5, 0x5F);
  631. /*
  632.  *    Set Miscellaneous Output Register
  633.  */
  634.  
  635. outb(0x3c2, 0xef);
  636. /*
  637.  *    Set Sequencer Registers
  638.  */
  639.  
  640. r0   = 0x00; r1   = 0x01; r2   = 0x0f; r3   = 0x00; r4   = 0x0e;
  641. boutb(5, 0x00, 0x3c4, 0x3c5);
  642.  
  643. outw(0x3c4, 0x0300);
  644. /*
  645.  *    Set CRT Registers
  646.  */
  647.  
  648. outb(0x3d4, 0x11);
  649. outb(0x3d5, 0x0e);
  650. r0   = 0x90; r1   = 0x77; r2   = 0x78; r3   = 0x91; r4   = 0x7b;
  651. r5   = 0x0e; r6   = 0x0a; r7   = 0x3e; r8   = 0x00; r9   = 0x40;
  652. r10  = 0x00; r11  = 0x00; r12  = 0x00; r13  = 0x00; r14  = 0xff;
  653. r15  = 0x00; r16  = 0xea; r17  = 0x8c; r18  = 0xdf; r19  = 0x00;
  654. r20  = 0x60; r21  = 0xe7; r22  = 0x03; r23  = 0xab; r24  = 0xff;
  655. boutb(25, 0x00, 0x3d4, 0x3d5);
  656.  
  657. r80  = 0x40; r81  = 0x10; r82  = 0xff; r83  = 0x00; r84  = 0x18;
  658. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x18; r89  = 0x00;
  659. r90  = 0x0a; 
  660. boutb(11, 0x50, 0x3d4, 0x3d5);
  661.  
  662. r92  = 0x0e; r93  = 0x00; r94  = 0x00; 
  663. boutb(3, 0x5c, 0x3d4, 0x3d5);
  664.  
  665. r96  = 0x2f; r97  = 0x81; r98  = 0xe0; 
  666. boutb(3, 0x60, 0x3d4, 0x3d5);
  667.  
  668. r49  = 0x8f; r50  = 0x00; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  669. boutb(5, 0x31, 0x3d4, 0x3d5);
  670.  
  671. r58  = 0x95; r59  = 0x92; r60  = 0x40; 
  672. boutb(3, 0x3a, 0x3d4, 0x3d5);
  673.  
  674. r64  = 0x51; 
  675. boutb(1, 0x40, 0x3d4, 0x3d5);
  676.  
  677. r67  = 0x80; 
  678. boutb(1, 0x43, 0x3d4, 0x3d5);
  679.  
  680. r69  = 0x80; r70  = 0x80; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  681. boutb(5, 0x45, 0x3d4, 0x3d5);
  682.  
  683. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  684. boutb(4, 0x4c, 0x3d4, 0x3d5);
  685.  
  686. r66  = 0x0e; 
  687. boutb(1, 0x42, 0x3d4, 0x3d5);
  688.  
  689. /*
  690.  *    Set Other Registers
  691.  */
  692.  
  693. call pfnPMISetMonitorTimings;
  694. /*
  695.  *    Set Attribute Registers
  696.  */
  697.  
  698. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  699. r5   = 0x05; r6   = 0x06; r7   = 0x07; r8   = 0x10; r9   = 0x11;
  700. r10  = 0x12; r11  = 0x13; r12  = 0x14; r13  = 0x15; r14  = 0x16;
  701. r15  = 0x17; r16  = 0x41; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  702. r20  = 0x00; 
  703. boutb(21, 0x00, 0x3c0, 0x3c1);
  704.  
  705. /*
  706.  *    Set GDC Registers
  707.  */
  708.  
  709. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  710. r5   = 0x40; r6   = 0x05; r7   = 0x0f; r8   = 0xff; 
  711. boutb(9, 0x00, 0x3ce, 0x3cf);
  712.  
  713. /*
  714.  *    Set Enhanced Command Registers
  715.  */
  716.  
  717. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  718. outw(0x4ae8, 0x0001);
  719. outw(0xbee8, 0x1000);
  720. outw(0xbee8, 0x33ff);
  721. outw(0xbee8, 0x2000);
  722. outw(0xbee8, 0x43ff);
  723. outw(0xbee8, 0xa000);
  724. outw(0xbee8, 0x03ff);
  725. outw(0x96e8, 0x03ff);
  726. outw(0x86e8, 0x0000);
  727. outw(0x82e8, 0x0000);
  728. /*
  729.  *    Set DAC Registers
  730.  */
  731.  
  732. r0   =   0x000000e0;
  733. ProgramDAC;
  734. inb(r0, 0x3da);
  735. outb(0x3c0, 0x20);
  736.  
  737. [comment]
  738.     Graphics Mode: 800 x 600 x 16 colors.
  739.  
  740. [ModeInfo]
  741.         ModeAttributes   = 0x18
  742.         BytesPerScanLine = 100
  743.         XResolution      = 800
  744.         YResolution      = 600
  745.         TextRows         = 37
  746.         BitsPerPixel     = 4
  747.         NumberOfPlanes   = 4
  748.         PageLength       = 60000
  749.         SaveSize         = 240000
  750.         TotalMemory      = 1048576
  751.         InterlaceMode    = 1
  752.         BufferAddress    = 0x000a0000
  753.         ApertureSize     = 0x00010000
  754.         Int10ModeSet     = 0x102
  755.  
  756. [SetBank]
  757. SetBankLinear;
  758.  
  759. [GetBank]
  760. GetBankLinear;
  761.  
  762. [SetMode]
  763.  
  764. outb(0x3d4, 0x42);
  765. outb(0x3d5, 0x00);
  766. rmwbi(0x3d4, 0x3d5, 0x11, 0x7f, 0x00);
  767. outb(0x3d4, 0x00);
  768. outb(0x3d5, 0x5F);
  769. /*
  770.  *    Set Miscellaneous Output Register
  771.  */
  772.  
  773. outb(0x3c2, 0x2f);
  774. /*
  775.  *    Set Sequencer Registers
  776.  */
  777.  
  778. r0   = 0x00; r1   = 0x01; r2   = 0x0f; r3   = 0x00; r4   = 0x06;
  779. boutb(5, 0x00, 0x3c4, 0x3c5);
  780.  
  781. outw(0x3c4, 0x0300);
  782. /*
  783.  *    Set CRT Registers
  784.  */
  785.  
  786. outb(0x3d4, 0x11);
  787. outb(0x3d5, 0x0e);
  788. r0   = 0x7d; r1   = 0x63; r2   = 0x64; r3   = 0x80; r4   = 0x6c;
  789. r5   = 0x1b; r6   = 0x98; r7   = 0xf0; r8   = 0x00; r9   = 0x60;
  790. r10  = 0x00; r11  = 0x00; r12  = 0x00; r13  = 0x00; r14  = 0xff;
  791. r15  = 0x00; r16  = 0x7c; r17  = 0xa2; r18  = 0x57; r19  = 0x32;
  792. r20  = 0x00; r21  = 0x57; r22  = 0x98; r23  = 0xe3; r24  = 0xff;
  793. boutb(25, 0x00, 0x3d4, 0x3d5);
  794.  
  795. r80  = 0x00; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x48;
  796. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x08; r89  = 0x00;
  797. r90  = 0x0a; 
  798. boutb(11, 0x50, 0x3d4, 0x3d5);
  799.  
  800. r92  = 0x04; r93  = 0x00; r94  = 0x00; 
  801. boutb(3, 0x5c, 0x3d4, 0x3d5);
  802.  
  803. r96  = 0x2f; r97  = 0x80; r98  = 0xa1; 
  804. boutb(3, 0x60, 0x3d4, 0x3d5);
  805.  
  806. r49  = 0x85; r50  = 0x00; r51  = 0x00; r52  = 0x02; r53  = 0x00;
  807. boutb(5, 0x31, 0x3d4, 0x3d5);
  808.  
  809. r58  = 0x85; r59  = 0x78; r60  = 0x10; 
  810. boutb(3, 0x3a, 0x3d4, 0x3d5);
  811.  
  812. r64  = 0x51; 
  813. boutb(1, 0x40, 0x3d4, 0x3d5);
  814.  
  815. r67  = 0x00; 
  816. boutb(1, 0x43, 0x3d4, 0x3d5);
  817.  
  818. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  819. boutb(5, 0x45, 0x3d4, 0x3d5);
  820.  
  821. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  822. boutb(4, 0x4c, 0x3d4, 0x3d5);
  823.  
  824. r66  = 0x04; 
  825. boutb(1, 0x42, 0x3d4, 0x3d5);
  826.  
  827. /*
  828.  *    Set Other Registers
  829.  */
  830.  
  831. call pfnPMISetMonitorTimings;
  832. /*
  833.  *    Set Attribute Registers
  834.  */
  835.  
  836. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  837. r5   = 0x05; r6   = 0x14; r7   = 0x07; r8   = 0x38; r9   = 0x39;
  838. r10  = 0x3a; r11  = 0x3b; r12  = 0x3c; r13  = 0x3d; r14  = 0x3e;
  839. r15  = 0x3f; r16  = 0x01; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  840. r20  = 0x00; 
  841. boutb(21, 0x00, 0x3c0, 0x3c1);
  842.  
  843. /*
  844.  *    Set GDC Registers
  845.  */
  846.  
  847. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  848. r5   = 0x00; r6   = 0x05; r7   = 0x0f; r8   = 0xff; 
  849. boutb(9, 0x00, 0x3ce, 0x3cf);
  850.  
  851. /*
  852.  *    Set Enhanced Command Registers
  853.  */
  854.  
  855. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  856. /*
  857.  *    Set CRT Registers
  858.  */
  859.  
  860. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x01);
  861. /*
  862.  *    Set Enhanced Command Registers
  863.  */
  864.  
  865. outw(0x4ae8, 0x0000);
  866. /*
  867.  *    Set CRT Registers
  868.  */
  869.  
  870. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x00);
  871. /*
  872.  *    Set DAC Registers
  873.  */
  874.  
  875. r0   =   0x00000000;
  876. ProgramDAC;
  877. inb(r0, 0x3da);
  878. outb(0x3c0, 0x20);
  879.  
  880. [comment]
  881.     Graphics Mode: 800 x 600 x 256 colors.
  882.  
  883. [ModeInfo]
  884.         ModeAttributes   = 0x18
  885.         BytesPerScanLine = 100
  886.         XResolution      = 800
  887.         YResolution      = 600
  888.         TextRows         = 37
  889.         BitsPerPixel     = 8
  890.         NumberOfPlanes   = 1
  891.         PageLength       = 480000
  892.         SaveSize         = 480000
  893.         TotalMemory      = 1048576
  894.         InterlaceMode    = 1
  895.         BufferAddress    = 0x000a0000
  896.         ApertureSize     = 0x00010000
  897.         Int10ModeSet     = 0x103
  898.  
  899. [MonitorModeInfo]
  900.         VerticalRefresh         = 72
  901.  
  902. [MonitorModeInfo]
  903.         VerticalRefresh         = 60
  904.  
  905. [MonitorModeInfo]
  906.         VerticalRefresh         = 56
  907.  
  908. [SetBank]
  909. SetBankLinear;
  910.  
  911. [GetBank]
  912. GetBankLinear;
  913.  
  914. [SetMode]
  915.  
  916. outb(0x3d4, 0x42);
  917. outb(0x3d5, 0x00);
  918. rmwbi(0x3d4, 0x3d5, 0x11, 0x7f, 0x00);
  919. outb(0x3d4, 0x00);
  920. outb(0x3d5, 0x5F);
  921. /*
  922.  *    Set Miscellaneous Output Register
  923.  */
  924.  
  925. outb(0x3c2, 0x2f);
  926. /*
  927.  *    Set Sequencer Registers
  928.  */
  929.  
  930. r0   = 0x00; r1   = 0x01; r2   = 0x0f; r3   = 0x00; r4   = 0x0e;
  931. boutb(5, 0x00, 0x3c4, 0x3c5);
  932.  
  933. outw(0x3c4, 0x0300);
  934. /*
  935.  *    Set CRT Registers
  936.  */
  937.  
  938. outb(0x3d4, 0x11);
  939. outb(0x3d5, 0x0e);
  940. r0   = 0x7d; r1   = 0x63; r2   = 0x64; r3   = 0x80; r4   = 0x6c;
  941. r5   = 0x1b; r6   = 0x98; r7   = 0xf0; r8   = 0x00; r9   = 0x60;
  942. r10  = 0x00; r11  = 0x00; r12  = 0x00; r13  = 0x00; r14  = 0xff;
  943. r15  = 0x00; r16  = 0x7c; r17  = 0xa2; r18  = 0x57; r19  = 0x64;
  944. r20  = 0x00; r21  = 0x57; r22  = 0x98; r23  = 0xe3; r24  = 0xff;
  945. boutb(25, 0x00, 0x3d4, 0x3d5);
  946.  
  947. r80  = 0x00; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x48;
  948. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x18; r89  = 0x00;
  949. r90  = 0x0a; 
  950. boutb(11, 0x50, 0x3d4, 0x3d5);
  951.  
  952. r92  = 0x04; r93  = 0x00; r94  = 0x00; 
  953. boutb(3, 0x5c, 0x3d4, 0x3d5);
  954.  
  955. r96  = 0x2f; r97  = 0x80; r98  = 0xc9; 
  956. boutb(3, 0x60, 0x3d4, 0x3d5);
  957.  
  958. r49  = 0x8d; r50  = 0x00; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  959. boutb(5, 0x31, 0x3d4, 0x3d5);
  960.  
  961. r58  = 0x95; r59  = 0x78; r60  = 0x40; 
  962. boutb(3, 0x3a, 0x3d4, 0x3d5);
  963.  
  964. r64  = 0x51; 
  965. boutb(1, 0x40, 0x3d4, 0x3d5);
  966.  
  967. r67  = 0x00; 
  968. boutb(1, 0x43, 0x3d4, 0x3d5);
  969.  
  970. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  971. boutb(5, 0x45, 0x3d4, 0x3d5);
  972.  
  973. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  974. boutb(4, 0x4c, 0x3d4, 0x3d5);
  975.  
  976. r66  = 0x04; 
  977. boutb(1, 0x42, 0x3d4, 0x3d5);
  978.  
  979. /*
  980.  *    Set Other Registers
  981.  */
  982.  
  983. call pfnPMISetMonitorTimings;
  984. /*
  985.  *    Set Attribute Registers
  986.  */
  987.  
  988. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  989. r5   = 0x05; r6   = 0x14; r7   = 0x07; r8   = 0x38; r9   = 0x39;
  990. r10  = 0x3a; r11  = 0x3b; r12  = 0x3c; r13  = 0x3d; r14  = 0x3e;
  991. r15  = 0x3f; r16  = 0x01; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  992. r20  = 0x00; 
  993. boutb(21, 0x00, 0x3c0, 0x3c1);
  994.  
  995. /*
  996.  *    Set GDC Registers
  997.  */
  998.  
  999. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  1000. r5   = 0x00; r6   = 0x05; r7   = 0x0f; r8   = 0xff; 
  1001. boutb(9, 0x00, 0x3ce, 0x3cf);
  1002.  
  1003. /*
  1004.  *    Set Enhanced Command Registers
  1005.  */
  1006.  
  1007. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  1008. outw(0x4ae8, 0x0001);
  1009. outw(0xbee8, 0x1000);
  1010. outw(0xbee8, 0x33ff);
  1011. outw(0xbee8, 0x2000);
  1012. outw(0xbee8, 0x43ff);
  1013. outw(0xbee8, 0xa000);
  1014. outw(0xbee8, 0x03ff);
  1015. outw(0x96e8, 0x03ff);
  1016. outw(0x86e8, 0x0000);
  1017. outw(0x82e8, 0x0000);
  1018. /*
  1019.  *    Set DAC Registers
  1020.  */
  1021.  
  1022. r0   =   0x00000000;
  1023. ProgramDAC;
  1024. inb(r0, 0x3da);
  1025. outb(0x3c0, 0x20);
  1026.  
  1027. [comment]
  1028.     Graphics Mode: 800 x 600 x 64K colors.
  1029.  
  1030. [ModeInfo]
  1031.         ModeAttributes   = 0x18
  1032.         BytesPerScanLine = 100
  1033.         XResolution      = 800
  1034.         YResolution      = 600
  1035.         TextRows         = 37
  1036.         BitsPerPixel     = 16
  1037.         NumberOfPlanes   = 1
  1038.         PageLength       = 960000
  1039.         SaveSize         = 960000
  1040.         TotalMemory      = 1048576
  1041.         InterlaceMode    = 1
  1042.         BufferAddress    = 0x000a0000
  1043.         ApertureSize     = 0x00010000
  1044.         Int10ModeSet     = 0x114
  1045.  
  1046. [MonitorModeInfo]
  1047.         VerticalRefresh         = 72
  1048.  
  1049. [MonitorModeInfo]
  1050.         VerticalRefresh         = 60
  1051.  
  1052. [MonitorModeInfo]
  1053.         VerticalRefresh         = 56
  1054.  
  1055. [SetBank]
  1056. SetBankLinear;
  1057.  
  1058. [GetBank]
  1059. GetBankLinear;
  1060.  
  1061. [SetMode]
  1062.  
  1063. outb(0x3d4, 0x42);
  1064. outb(0x3d5, 0x00);
  1065. rmwbi(0x3d4, 0x3d5, 0x11, 0x7f, 0x00);
  1066. outb(0x3d4, 0x00);
  1067. outb(0x3d5, 0x5F);
  1068. /*
  1069.  *    Set Miscellaneous Output Register
  1070.  */
  1071.  
  1072. outb(0x3c2, 0x2f);
  1073. /*
  1074.  *    Set Sequencer Registers
  1075.  */
  1076.  
  1077. r0   = 0x00; r1   = 0x01; r2   = 0x0f; r3   = 0x00; r4   = 0x0e;
  1078. boutb(5, 0x00, 0x3c4, 0x3c5);
  1079.  
  1080. outw(0x3c4, 0x0300);
  1081. /*
  1082.  *    Set CRT Registers
  1083.  */
  1084.  
  1085. outb(0x3d4, 0x11);
  1086. outb(0x3d5, 0x0e);
  1087. r0   = 0xff; r1   = 0xc7; r2   = 0xc7; r3   = 0x82; r4   = 0xcc;
  1088. r5   = 0x00; r6   = 0x8e; r7   = 0xf0; r8   = 0x00; r9   = 0x60;
  1089. r10  = 0x00; r11  = 0x00; r12  = 0x00; r13  = 0x00; r14  = 0xff;
  1090. r15  = 0x00; r16  = 0x66; r17  = 0x8c; r18  = 0x57; r19  = 0xc8;
  1091. r20  = 0x00; r21  = 0x63; r22  = 0x80; r23  = 0xa3; r24  = 0xff;
  1092. boutb(25, 0x00, 0x3d4, 0x3d5);
  1093.  
  1094. r80  = 0x90; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x18;
  1095. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x18; r89  = 0x00;
  1096. r90  = 0x0a; 
  1097. boutb(11, 0x50, 0x3d4, 0x3d5);
  1098.  
  1099. r92  = 0x0a; r93  = 0x00; r94  = 0x00; 
  1100. boutb(3, 0x5c, 0x3d4, 0x3d5);
  1101.  
  1102. r96  = 0x2f; r97  = 0x81; r98  = 0x92; 
  1103. boutb(3, 0x60, 0x3d4, 0x3d5);
  1104.  
  1105. r49  = 0x8d; r50  = 0x00; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  1106. boutb(5, 0x31, 0x3d4, 0x3d5);
  1107.  
  1108. r58  = 0x95; r59  = 0xf8; r60  = 0x00; 
  1109. boutb(3, 0x3a, 0x3d4, 0x3d5);
  1110.  
  1111. r64  = 0x51; 
  1112. boutb(1, 0x40, 0x3d4, 0x3d5);
  1113.  
  1114. r67  = 0x00; 
  1115. boutb(1, 0x43, 0x3d4, 0x3d5);
  1116.  
  1117. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  1118. boutb(5, 0x45, 0x3d4, 0x3d5);
  1119.  
  1120. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  1121. boutb(4, 0x4c, 0x3d4, 0x3d5);
  1122.  
  1123. r66  = 0x0a; 
  1124. boutb(1, 0x42, 0x3d4, 0x3d5);
  1125.  
  1126. /*
  1127.  *    Set Other Registers
  1128.  */
  1129.  
  1130. call pfnPMISetMonitorTimings;
  1131. /*
  1132.  *    Set Attribute Registers
  1133.  */
  1134.  
  1135. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  1136. r5   = 0x05; r6   = 0x14; r7   = 0x07; r8   = 0x38; r9   = 0x39;
  1137. r10  = 0x3a; r11  = 0x3b; r12  = 0x3c; r13  = 0x3d; r14  = 0x3e;
  1138. r15  = 0x3f; r16  = 0x01; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  1139. r20  = 0x00; 
  1140. boutb(21, 0x00, 0x3c0, 0x3c1);
  1141.  
  1142. /*
  1143.  *    Set GDC Registers
  1144.  */
  1145.  
  1146. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  1147. r5   = 0x00; r6   = 0x05; r7   = 0x0f; r8   = 0xff; 
  1148. boutb(9, 0x00, 0x3ce, 0x3cf);
  1149.  
  1150. /*
  1151.  *    Set Enhanced Command Registers
  1152.  */
  1153.  
  1154. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  1155. outw(0x4ae8, 0x0001);
  1156. outw(0xbee8, 0x1000);
  1157. outw(0xbee8, 0x33ff);
  1158. outw(0xbee8, 0x2000);
  1159. outw(0xbee8, 0x43ff);
  1160. outw(0xbee8, 0xa000);
  1161. outw(0xbee8, 0x03ff);
  1162. outw(0x96e8, 0x03ff);
  1163. outw(0x86e8, 0x0000);
  1164. outw(0x82e8, 0x0000);
  1165. /*
  1166.  *    Set DAC Registers
  1167.  */
  1168.  
  1169. r0   =   0x000000c0;
  1170. ProgramDAC;
  1171. inb(r0, 0x3da);
  1172. outb(0x3c0, 0x20);
  1173.  
  1174. [comment]
  1175.     Graphics Mode: 1024 x 768 x 16 colors.
  1176.  
  1177. [ModeInfo]
  1178.         ModeAttributes   = 0x18
  1179.         BytesPerScanLine = 128
  1180.         XResolution      = 1024
  1181.         YResolution      = 768
  1182.         TextRows         = 48
  1183.         BitsPerPixel     = 4
  1184.         NumberOfPlanes   = 4
  1185.         PageLength       = 98304
  1186.         SaveSize         = 393216
  1187.         TotalMemory      = 1048576
  1188.         InterlaceMode    = 1
  1189.         BufferAddress    = 0x000a0000
  1190.         ApertureSize     = 0x00010000
  1191.         Int10ModeSet     = 0x104
  1192.  
  1193. [SetBank]
  1194. SetBankLinear;
  1195.  
  1196. [GetBank]
  1197. GetBankLinear;
  1198.  
  1199. [SetMode]
  1200.  
  1201. outb(0x3d4, 0x42);
  1202. outb(0x3d5, 0x00);
  1203. rmwbi(0x3d4, 0x3d5, 0x11, 0x7f, 0x00);
  1204. outb(0x3d4, 0x00);
  1205. outb(0x3d5, 0x5F);
  1206. /*
  1207.  *    Set Miscellaneous Output Register
  1208.  */
  1209.  
  1210. outb(0x3c2, 0xef);
  1211. /*
  1212.  *    Set Sequencer Registers
  1213.  */
  1214.  
  1215. r0   = 0x00; r1   = 0x01; r2   = 0x0f; r3   = 0x00; r4   = 0x06;
  1216. boutb(5, 0x00, 0x3c4, 0x3c5);
  1217.  
  1218. outw(0x3c4, 0x0300);
  1219. /*
  1220.  *    Set CRT Registers
  1221.  */
  1222.  
  1223. outb(0x3d4, 0x11);
  1224. outb(0x3d5, 0x0e);
  1225. r0   = 0xa1; r1   = 0x7f; r2   = 0x80; r3   = 0x84; r4   = 0x84;
  1226. r5   = 0x95; r6   = 0x24; r7   = 0xf5; r8   = 0x00; r9   = 0x60;
  1227. r10  = 0x00; r11  = 0x00; r12  = 0x00; r13  = 0x00; r14  = 0xff;
  1228. r15  = 0x00; r16  = 0x02; r17  = 0x88; r18  = 0xff; r19  = 0x40;
  1229. r20  = 0x00; r21  = 0xff; r22  = 0x24; r23  = 0xe3; r24  = 0xff;
  1230. boutb(25, 0x00, 0x3d4, 0x3d5);
  1231.  
  1232. r80  = 0x00; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x48;
  1233. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x08; r89  = 0x00;
  1234. r90  = 0x0a; 
  1235. boutb(11, 0x50, 0x3d4, 0x3d5);
  1236.  
  1237. r92  = 0x0e; r93  = 0x00; r94  = 0x00; 
  1238. boutb(3, 0x5c, 0x3d4, 0x3d5);
  1239.  
  1240. r96  = 0x2f; r97  = 0x80; r98  = 0x80; 
  1241. boutb(3, 0x60, 0x3d4, 0x3d5);
  1242.  
  1243. r49  = 0x85; r50  = 0x00; r51  = 0x00; r52  = 0x02; r53  = 0x00;
  1244. boutb(5, 0x31, 0x3d4, 0x3d5);
  1245.  
  1246. r58  = 0x85; r59  = 0x9d; r60  = 0x40; 
  1247. boutb(3, 0x3a, 0x3d4, 0x3d5);
  1248.  
  1249. r64  = 0x51; 
  1250. boutb(1, 0x40, 0x3d4, 0x3d5);
  1251.  
  1252. r67  = 0x00; 
  1253. boutb(1, 0x43, 0x3d4, 0x3d5);
  1254.  
  1255. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  1256. boutb(5, 0x45, 0x3d4, 0x3d5);
  1257.  
  1258. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  1259. boutb(4, 0x4c, 0x3d4, 0x3d5);
  1260.  
  1261. r66  = 0x0e; 
  1262. boutb(1, 0x42, 0x3d4, 0x3d5);
  1263.  
  1264. /*
  1265.  *    Set Other Registers
  1266.  */
  1267.  
  1268. call pfnPMISetMonitorTimings;
  1269. /*
  1270.  *    Set Attribute Registers
  1271.  */
  1272.  
  1273. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  1274. r5   = 0x05; r6   = 0x14; r7   = 0x07; r8   = 0x38; r9   = 0x39;
  1275. r10  = 0x3a; r11  = 0x3b; r12  = 0x3c; r13  = 0x3d; r14  = 0x3e;
  1276. r15  = 0x3f; r16  = 0x01; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  1277. r20  = 0x00; 
  1278. boutb(21, 0x00, 0x3c0, 0x3c1);
  1279.  
  1280. /*
  1281.  *    Set GDC Registers
  1282.  */
  1283.  
  1284. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  1285. r5   = 0x00; r6   = 0x05; r7   = 0x0f; r8   = 0xff; 
  1286. boutb(9, 0x00, 0x3ce, 0x3cf);
  1287.  
  1288. /*
  1289.  *    Set Enhanced Command Registers
  1290.  */
  1291.  
  1292. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  1293. outw(0x4ae8, 0x0007);
  1294. outw(0xbee8, 0x1000);
  1295. outw(0xbee8, 0x33ff);
  1296. outw(0xbee8, 0x2000);
  1297. outw(0xbee8, 0x43ff);
  1298. outw(0xbee8, 0xa000);
  1299. outw(0xbee8, 0x03ff);
  1300. outw(0x96e8, 0x03ff);
  1301. outw(0x86e8, 0x0000);
  1302. outw(0x82e8, 0x0000);
  1303. /*
  1304.  *    Set DAC Registers
  1305.  */
  1306.  
  1307. r0   =   0x00000000;
  1308. ProgramDAC;
  1309. inb(r0, 0x3da);
  1310. outb(0x3c0, 0x20);
  1311.  
  1312. [comment]
  1313.     Graphics Mode: 1024 x 768 x 256 colors.
  1314.  
  1315. [ModeInfo]
  1316.         ModeAttributes   = 0x18
  1317.         BytesPerScanLine = 128
  1318.         XResolution      = 1024
  1319.         YResolution      = 768
  1320.         TextRows         = 48
  1321.         BitsPerPixel     = 8
  1322.         NumberOfPlanes   = 1
  1323.         PageLength       = 786432
  1324.         SaveSize         = 786432
  1325.         TotalMemory      = 1048576
  1326.         InterlaceMode    = 1
  1327.         BufferAddress    = 0x000a0000
  1328.         ApertureSize     = 0x00010000
  1329.         Int10ModeSet     = 0x105
  1330.  
  1331. [MonitorModeInfo]
  1332.         VerticalRefresh         = 72
  1333.  
  1334. [MonitorModeInfo]
  1335.         VerticalRefresh         = 70
  1336.  
  1337. [MonitorModeInfo]
  1338.         VerticalRefresh         = 60
  1339.  
  1340. [MonitorModeInfo]
  1341.         VerticalRefresh         = 43
  1342.  
  1343. [SetBank]
  1344. SetBankLinear;
  1345.  
  1346. [GetBank]
  1347. GetBankLinear;
  1348.  
  1349. [SetMode]
  1350.  
  1351. outb(0x3d4, 0x42);
  1352. outb(0x3d5, 0x00);
  1353. rmwbi(0x3d4, 0x3d5, 0x11, 0x7f, 0x00);
  1354. outb(0x3d4, 0x00);
  1355. outb(0x3d5, 0x5F);
  1356. /*
  1357.  *    Set Miscellaneous Output Register
  1358.  */
  1359.  
  1360. outb(0x3c2, 0xef);
  1361. /*
  1362.  *    Set Sequencer Registers
  1363.  */
  1364.  
  1365. r0   = 0x00; r1   = 0x01; r2   = 0x0f; r3   = 0x00; r4   = 0x0e;
  1366. boutb(5, 0x00, 0x3c4, 0x3c5);
  1367.  
  1368. outw(0x3c4, 0x0300);
  1369. /*
  1370.  *    Set CRT Registers
  1371.  */
  1372.  
  1373. outb(0x3d4, 0x11);
  1374. outb(0x3d5, 0x0e);
  1375. r0   = 0xa1; r1   = 0x7f; r2   = 0x80; r3   = 0x84; r4   = 0x84;
  1376. r5   = 0x95; r6   = 0x24; r7   = 0xf5; r8   = 0x00; r9   = 0x60;
  1377. r10  = 0x00; r11  = 0x00; r12  = 0x00; r13  = 0x00; r14  = 0xff;
  1378. r15  = 0x00; r16  = 0x02; r17  = 0x88; r18  = 0xff; r19  = 0x80;
  1379. r20  = 0x00; r21  = 0xff; r22  = 0x24; r23  = 0xe3; r24  = 0xff;
  1380. boutb(25, 0x00, 0x3d4, 0x3d5);
  1381.  
  1382. r80  = 0x00; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x48;
  1383. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x18; r89  = 0x00;
  1384. r90  = 0x0a; 
  1385. boutb(11, 0x50, 0x3d4, 0x3d5);
  1386.  
  1387. r92  = 0x0e; r93  = 0x00; r94  = 0x00; 
  1388. boutb(3, 0x5c, 0x3d4, 0x3d5);
  1389.  
  1390. r96  = 0x2f; r97  = 0x81; r98  = 0x00; 
  1391. boutb(3, 0x60, 0x3d4, 0x3d5);
  1392.  
  1393. r49  = 0x8d; r50  = 0x00; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  1394. boutb(5, 0x31, 0x3d4, 0x3d5);
  1395.  
  1396. r58  = 0x95; r59  = 0x9b; r60  = 0x40; 
  1397. boutb(3, 0x3a, 0x3d4, 0x3d5);
  1398.  
  1399. r64  = 0x51; 
  1400. boutb(1, 0x40, 0x3d4, 0x3d5);
  1401.  
  1402. r67  = 0x00; 
  1403. boutb(1, 0x43, 0x3d4, 0x3d5);
  1404.  
  1405. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  1406. boutb(5, 0x45, 0x3d4, 0x3d5);
  1407.  
  1408. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  1409. boutb(4, 0x4c, 0x3d4, 0x3d5);
  1410.  
  1411. r66  = 0x0e; 
  1412. boutb(1, 0x42, 0x3d4, 0x3d5);
  1413.  
  1414. /*
  1415.  *    Set Other Registers
  1416.  */
  1417.  
  1418. call pfnPMISetMonitorTimings;
  1419. /*
  1420.  *    Set Attribute Registers
  1421.  */
  1422.  
  1423. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  1424. r5   = 0x05; r6   = 0x14; r7   = 0x07; r8   = 0x38; r9   = 0x39;
  1425. r10  = 0x3a; r11  = 0x3b; r12  = 0x3c; r13  = 0x3d; r14  = 0x3e;
  1426. r15  = 0x3f; r16  = 0x01; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  1427. r20  = 0x00; 
  1428. boutb(21, 0x00, 0x3c0, 0x3c1);
  1429.  
  1430. /*
  1431.  *    Set GDC Registers
  1432.  */
  1433.  
  1434. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  1435. r5   = 0x00; r6   = 0x05; r7   = 0x0f; r8   = 0xff; 
  1436. boutb(9, 0x00, 0x3ce, 0x3cf);
  1437.  
  1438. /*
  1439.  *    Set Enhanced Command Registers
  1440.  */
  1441.  
  1442. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  1443. outw(0x4ae8, 0x0007);
  1444. outw(0xbee8, 0x1000);
  1445. outw(0xbee8, 0x33ff);
  1446. outw(0xbee8, 0x2000);
  1447. outw(0xbee8, 0x43ff);
  1448. outw(0xbee8, 0xa000);
  1449. outw(0xbee8, 0x03ff);
  1450. outw(0x96e8, 0x03ff);
  1451. outw(0x86e8, 0x0000);
  1452. outw(0x82e8, 0x0000);
  1453. /*
  1454.  *    Set DAC Registers
  1455.  */
  1456.  
  1457. r0   =   0x00000000;
  1458. ProgramDAC;
  1459. inb(r0, 0x3da);
  1460. outb(0x3c0, 0x20);
  1461.  
  1462. [comment]
  1463.     Text Mode: 40 cols, 25 rows.
  1464.  
  1465. [ModeInfo]
  1466.         ModeAttributes   = 0x08
  1467.         BytesPerScanLine = 40
  1468.         XResolution      = 360
  1469.         YResolution      = 400
  1470.         XCharSize        = 9
  1471.         YCharSize        = 16
  1472.         TextRows         = 25
  1473.         BitsPerPixel     = 4
  1474.         NumberOfPlanes   = 1
  1475.         PageLength       = 4000
  1476.         SaveSize         = 4000
  1477.         TotalMemory      = 1048576
  1478.         InterlaceMode    = 1
  1479.         BufferAddress    = 0x000b8000
  1480.         ApertureSize     = 0x00008000
  1481.         Int10ModeSet     = 0x001
  1482.  
  1483. [SetBank]
  1484. SetBankLinear;
  1485.  
  1486. [GetBank]
  1487. GetBankLinear;
  1488.  
  1489. [SetMode]
  1490.  
  1491. /*
  1492.  *    Set Miscellaneous Output Register
  1493.  */
  1494.  
  1495. outb(0x3c2, 0x67);
  1496. /*
  1497.  *    Set Sequencer Registers
  1498.  */
  1499.  
  1500. r0   = 0x00; r1   = 0x08; r2   = 0x03; r3   = 0x00; r4   = 0x02;
  1501. boutb(5, 0x00, 0x3c4, 0x3c5);
  1502.  
  1503. outw(0x3c4, 0x0300);
  1504. /*
  1505.  *    Set CRT Registers
  1506.  */
  1507.  
  1508. outb(0x3d4, 0x11);
  1509. outb(0x3d5, 0x0e);
  1510. r0   = 0x2d; r1   = 0x27; r2   = 0x28; r3   = 0x90; r4   = 0x2b;
  1511. r5   = 0xa0; r6   = 0xbf; r7   = 0x1f; r8   = 0x00; r9   = 0x4f;
  1512. r10  = 0x0d; r11  = 0x0e; r12  = 0x00; r13  = 0x00; r14  = 0x00;
  1513. r15  = 0x00; r16  = 0x9c; r17  = 0x8e; r18  = 0x8f; r19  = 0x14;
  1514. r20  = 0x1f; r21  = 0x96; r22  = 0xb9; r23  = 0xa3; r24  = 0xff;
  1515. boutb(25, 0x00, 0x3d4, 0x3d5);
  1516.  
  1517. r80  = 0x00; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x38;
  1518. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x88; r89  = 0x00;
  1519. r90  = 0x0a; 
  1520. boutb(11, 0x50, 0x3d4, 0x3d5);
  1521.  
  1522. r92  = 0x01; r93  = 0x00; r94  = 0x00; 
  1523. boutb(3, 0x5c, 0x3d4, 0x3d5);
  1524.  
  1525. r96  = 0x07; r97  = 0x80; r98  = 0xa1; 
  1526. boutb(3, 0x60, 0x3d4, 0x3d5);
  1527.  
  1528. r49  = 0x85; r50  = 0x40; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  1529. boutb(5, 0x31, 0x3d4, 0x3d5);
  1530.  
  1531. r58  = 0x85; r59  = 0x5a; r60  = 0x10; 
  1532. boutb(3, 0x3a, 0x3d4, 0x3d5);
  1533.  
  1534. r64  = 0x59; 
  1535. boutb(1, 0x40, 0x3d4, 0x3d5);
  1536.  
  1537. r67  = 0x00; 
  1538. boutb(1, 0x43, 0x3d4, 0x3d5);
  1539.  
  1540. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  1541. boutb(5, 0x45, 0x3d4, 0x3d5);
  1542.  
  1543. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  1544. boutb(4, 0x4c, 0x3d4, 0x3d5);
  1545.  
  1546. r66  = 0x0e; 
  1547. boutb(1, 0x42, 0x3d4, 0x3d5);
  1548.  
  1549. /*
  1550.  *    Set Other Registers
  1551.  */
  1552.  
  1553. call pfnPMISetMonitorTimings;
  1554. /*
  1555.  *    Set Attribute Registers
  1556.  */
  1557.  
  1558. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  1559. r5   = 0x05; r6   = 0x14; r7   = 0x07; r8   = 0x38; r9   = 0x39;
  1560. r10  = 0x3a; r11  = 0x3b; r12  = 0x3c; r13  = 0x3d; r14  = 0x3e;
  1561. r15  = 0x3f; r16  = 0x0c; r17  = 0x00; r18  = 0x0f; r19  = 0x08;
  1562. r20  = 0x00; 
  1563. boutb(21, 0x00, 0x3c0, 0x3c1);
  1564.  
  1565. /*
  1566.  *    Set GDC Registers
  1567.  */
  1568.  
  1569. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  1570. r5   = 0x10; r6   = 0x0e; r7   = 0x00; r8   = 0xff; 
  1571. boutb(9, 0x00, 0x3ce, 0x3cf);
  1572.  
  1573. /*
  1574.  *    Set Enhanced Command Registers
  1575.  */
  1576.  
  1577. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  1578. /*
  1579.  *    Set CRT Registers
  1580.  */
  1581.  
  1582. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x01);
  1583. /*
  1584.  *    Set Enhanced Command Registers
  1585.  */
  1586.  
  1587. outw(0x4ae8, 0x0000);
  1588. /*
  1589.  *    Set CRT Registers
  1590.  */
  1591.  
  1592. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x00);
  1593. /*
  1594.  *    Set DAC Registers
  1595.  */
  1596.  
  1597. r0   =   0x00000000;
  1598. ProgramDAC;
  1599. inb(r0, 0x3da);
  1600. outb(0x3c0, 0x20);
  1601.  
  1602. [comment]
  1603.     Text Mode: 80 cols, 25 rows.
  1604.  
  1605. [ModeInfo]
  1606.         ModeAttributes   = 0x08
  1607.         BytesPerScanLine = 80
  1608.         XResolution      = 720
  1609.         YResolution      = 400
  1610.         XCharSize        = 9
  1611.         YCharSize        = 16
  1612.         TextRows         = 25
  1613.         BitsPerPixel     = 4
  1614.         NumberOfPlanes   = 1
  1615.         PageLength       = 4000
  1616.         SaveSize         = 4000
  1617.         TotalMemory      = 1048576
  1618.         InterlaceMode    = 1
  1619.         BufferAddress    = 0x000b8000
  1620.         ApertureSize     = 0x00008000
  1621.         Int10ModeSet     = 0x003
  1622.  
  1623. [SetBank]
  1624. SetBankLinear;
  1625.  
  1626. [GetBank]
  1627. GetBankLinear;
  1628.  
  1629. [SetMode]
  1630.  
  1631. /*
  1632.  *    Set Miscellaneous Output Register
  1633.  */
  1634.  
  1635. outb(0x3c2, 0x67);
  1636. /*
  1637.  *    Set Sequencer Registers
  1638.  */
  1639.  
  1640. r0   = 0x00; r1   = 0x00; r2   = 0x03; r3   = 0x00; r4   = 0x02;
  1641. boutb(5, 0x00, 0x3c4, 0x3c5);
  1642.  
  1643. outw(0x3c4, 0x0300);
  1644. /*
  1645.  *    Set CRT Registers
  1646.  */
  1647.  
  1648. outb(0x3d4, 0x11);
  1649. outb(0x3d5, 0x0e);
  1650. r0   = 0x5f; r1   = 0x4f; r2   = 0x50; r3   = 0x82; r4   = 0x55;
  1651. r5   = 0x81; r6   = 0xbf; r7   = 0x1f; r8   = 0x00; r9   = 0x4f;
  1652. r10  = 0x0d; r11  = 0x0e; r12  = 0x00; r13  = 0x00; r14  = 0x00;
  1653. r15  = 0x00; r16  = 0x9c; r17  = 0x8e; r18  = 0x8f; r19  = 0x28;
  1654. r20  = 0x1f; r21  = 0x96; r22  = 0xb9; r23  = 0xa3; r24  = 0xff;
  1655. boutb(25, 0x00, 0x3d4, 0x3d5);
  1656.  
  1657. r80  = 0x00; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x38;
  1658. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x88; r89  = 0x00;
  1659. r90  = 0x0a; 
  1660. boutb(11, 0x50, 0x3d4, 0x3d5);
  1661.  
  1662. r92  = 0x01; r93  = 0x00; r94  = 0x00; 
  1663. boutb(3, 0x5c, 0x3d4, 0x3d5);
  1664.  
  1665. r96  = 0x07; r97  = 0x80; r98  = 0xa1; 
  1666. boutb(3, 0x60, 0x3d4, 0x3d5);
  1667.  
  1668. r49  = 0x85; r50  = 0x40; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  1669. boutb(5, 0x31, 0x3d4, 0x3d5);
  1670.  
  1671. r58  = 0x85; r59  = 0x5a; r60  = 0x10; 
  1672. boutb(3, 0x3a, 0x3d4, 0x3d5);
  1673.  
  1674. r64  = 0x59; 
  1675. boutb(1, 0x40, 0x3d4, 0x3d5);
  1676.  
  1677. r67  = 0x00; 
  1678. boutb(1, 0x43, 0x3d4, 0x3d5);
  1679.  
  1680. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  1681. boutb(5, 0x45, 0x3d4, 0x3d5);
  1682.  
  1683. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  1684. boutb(4, 0x4c, 0x3d4, 0x3d5);
  1685.  
  1686. r66  = 0x0e; 
  1687. boutb(1, 0x42, 0x3d4, 0x3d5);
  1688.  
  1689. /*
  1690.  *    Set Other Registers
  1691.  */
  1692.  
  1693. call pfnPMISetMonitorTimings;
  1694. /*
  1695.  *    Set Attribute Registers
  1696.  */
  1697.  
  1698. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  1699. r5   = 0x05; r6   = 0x14; r7   = 0x07; r8   = 0x38; r9   = 0x39;
  1700. r10  = 0x3a; r11  = 0x3b; r12  = 0x3c; r13  = 0x3d; r14  = 0x3e;
  1701. r15  = 0x3f; r16  = 0x0c; r17  = 0x00; r18  = 0x0f; r19  = 0x08;
  1702. r20  = 0x00; 
  1703. boutb(21, 0x00, 0x3c0, 0x3c1);
  1704.  
  1705. /*
  1706.  *    Set GDC Registers
  1707.  */
  1708.  
  1709. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  1710. r5   = 0x10; r6   = 0x0e; r7   = 0x00; r8   = 0xff; 
  1711. boutb(9, 0x00, 0x3ce, 0x3cf);
  1712.  
  1713. /*
  1714.  *    Set Enhanced Command Registers
  1715.  */
  1716.  
  1717. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  1718. /*
  1719.  *    Set CRT Registers
  1720.  */
  1721.  
  1722. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x01);
  1723. /*
  1724.  *    Set Enhanced Command Registers
  1725.  */
  1726.  
  1727. outw(0x4ae8, 0x0000);
  1728. /*
  1729.  *    Set CRT Registers
  1730.  */
  1731.  
  1732. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x00);
  1733. /*
  1734.  *    Set DAC Registers
  1735.  */
  1736.  
  1737. r0   =   0x00000000;
  1738. ProgramDAC;
  1739. inb(r0, 0x3da);
  1740. outb(0x3c0, 0x20);
  1741.  
  1742. [comment]
  1743.     Text Mode: 132 cols, 25 rows.
  1744.  
  1745. [ModeInfo]
  1746.         ModeAttributes   = 0x08
  1747.         BytesPerScanLine = 132
  1748.         XResolution      = 1056
  1749.         YResolution      = 400
  1750.         XCharSize        = 8
  1751.         YCharSize        = 16
  1752.         TextRows         = 25
  1753.         BitsPerPixel     = 4
  1754.         NumberOfPlanes   = 1
  1755.         PageLength       = 6600
  1756.         SaveSize         = 6600
  1757.         TotalMemory      = 1048576
  1758.         InterlaceMode    = 1
  1759.         BufferAddress    = 0x000b8000
  1760.         ApertureSize     = 0x00008000
  1761.         Int10ModeSet     = 0x109
  1762.  
  1763. [SetBank]
  1764. SetBankLinear;
  1765.  
  1766. [GetBank]
  1767. GetBankLinear;
  1768.  
  1769. [SetMode]
  1770.  
  1771. outb(0x3d4, 0x42);
  1772. outb(0x3d5, 0x00);
  1773. rmwbi(0x3d4, 0x3d5, 0x11, 0x7f, 0x00);
  1774. outb(0x3d4, 0x00);
  1775. outb(0x3d5, 0x5F);
  1776. /*
  1777.  *    Set Miscellaneous Output Register
  1778.  */
  1779.  
  1780. outb(0x3c2, 0x6f);
  1781. /*
  1782.  *    Set Sequencer Registers
  1783.  */
  1784.  
  1785. r0   = 0x00; r1   = 0x01; r2   = 0x03; r3   = 0x00; r4   = 0x02;
  1786. boutb(5, 0x00, 0x3c4, 0x3c5);
  1787.  
  1788. outw(0x3c4, 0x0300);
  1789. /*
  1790.  *    Set CRT Registers
  1791.  */
  1792.  
  1793. outb(0x3d4, 0x11);
  1794. outb(0x3d5, 0x0e);
  1795. r0   = 0x9a; r1   = 0x83; r2   = 0x86; r3   = 0x9d; r4   = 0x87;
  1796. r5   = 0x1b; r6   = 0xbf; r7   = 0x1f; r8   = 0x00; r9   = 0x4f;
  1797. r10  = 0x0d; r11  = 0x0e; r12  = 0x00; r13  = 0x00; r14  = 0x03;
  1798. r15  = 0x9c; r16  = 0x9c; r17  = 0x8e; r18  = 0x8f; r19  = 0x42;
  1799. r20  = 0x1f; r21  = 0x96; r22  = 0xb9; r23  = 0xa3; r24  = 0xff;
  1800. boutb(25, 0x00, 0x3d4, 0x3d5);
  1801.  
  1802. r80  = 0x00; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x08;
  1803. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x08; r89  = 0x00;
  1804. r90  = 0x0a; 
  1805. boutb(11, 0x50, 0x3d4, 0x3d5);
  1806.  
  1807. r92  = 0x02; r93  = 0x00; r94  = 0x00; 
  1808. boutb(3, 0x5c, 0x3d4, 0x3d5);
  1809.  
  1810. r96  = 0x0f; r97  = 0x80; r98  = 0x85; 
  1811. boutb(3, 0x60, 0x3d4, 0x3d5);
  1812.  
  1813. r49  = 0x85; r50  = 0x00; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  1814. boutb(5, 0x31, 0x3d4, 0x3d5);
  1815.  
  1816. r58  = 0x85; r59  = 0x99; r60  = 0x40; 
  1817. boutb(3, 0x3a, 0x3d4, 0x3d5);
  1818.  
  1819. r64  = 0x59; 
  1820. boutb(1, 0x40, 0x3d4, 0x3d5);
  1821.  
  1822. r67  = 0x00; 
  1823. boutb(1, 0x43, 0x3d4, 0x3d5);
  1824.  
  1825. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  1826. boutb(5, 0x45, 0x3d4, 0x3d5);
  1827.  
  1828. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  1829. boutb(4, 0x4c, 0x3d4, 0x3d5);
  1830.  
  1831. r66  = 0x02; 
  1832. boutb(1, 0x42, 0x3d4, 0x3d5);
  1833.  
  1834. /*
  1835.  *    Set Other Registers
  1836.  */
  1837.  
  1838. call pfnPMISetMonitorTimings;
  1839. /*
  1840.  *    Set Attribute Registers
  1841.  */
  1842.  
  1843. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  1844. r5   = 0x05; r6   = 0x14; r7   = 0x07; r8   = 0x38; r9   = 0x39;
  1845. r10  = 0x3a; r11  = 0x3b; r12  = 0x3c; r13  = 0x3d; r14  = 0x3e;
  1846. r15  = 0x3f; r16  = 0x0c; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  1847. r20  = 0x00; 
  1848. boutb(21, 0x00, 0x3c0, 0x3c1);
  1849.  
  1850. /*
  1851.  *    Set GDC Registers
  1852.  */
  1853.  
  1854. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  1855. r5   = 0x10; r6   = 0x0e; r7   = 0x00; r8   = 0xff; 
  1856. boutb(9, 0x00, 0x3ce, 0x3cf);
  1857.  
  1858. /*
  1859.  *    Set Enhanced Command Registers
  1860.  */
  1861.  
  1862. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  1863. /*
  1864.  *    Set CRT Registers
  1865.  */
  1866.  
  1867. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x01);
  1868. /*
  1869.  *    Set Enhanced Command Registers
  1870.  */
  1871.  
  1872. outw(0x4ae8, 0x0000);
  1873. /*
  1874.  *    Set CRT Registers
  1875.  */
  1876.  
  1877. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x00);
  1878. /*
  1879.  *    Set DAC Registers
  1880.  */
  1881.  
  1882. r0   =   0x00000000;
  1883. ProgramDAC;
  1884. inb(r0, 0x3da);
  1885. outb(0x3c0, 0x20);
  1886.  
  1887. [comment]
  1888.     Text Mode: 132 cols, 43 rows.
  1889.  
  1890. [ModeInfo]
  1891.         ModeAttributes   = 0x08
  1892.         BytesPerScanLine = 132
  1893.         XResolution      = 1056
  1894.         YResolution      = 387
  1895.         XCharSize        = 8
  1896.         YCharSize        = 9
  1897.         TextRows         = 43
  1898.         BitsPerPixel     = 4
  1899.         NumberOfPlanes   = 1
  1900.         PageLength       = 11352
  1901.         SaveSize         = 11352
  1902.         TotalMemory      = 1048576
  1903.         InterlaceMode    = 1
  1904.         BufferAddress    = 0x000b8000
  1905.         ApertureSize     = 0x00008000
  1906.         Int10ModeSet     = 0x10a
  1907.  
  1908. [SetBank]
  1909. SetBankLinear;
  1910.  
  1911. [GetBank]
  1912. GetBankLinear;
  1913.  
  1914. [SetMode]
  1915.  
  1916. outb(0x3d4, 0x42);
  1917. outb(0x3d5, 0x00);
  1918. rmwbi(0x3d4, 0x3d5, 0x11, 0x7f, 0x00);
  1919. outb(0x3d4, 0x00);
  1920. outb(0x3d5, 0x5F);
  1921. /*
  1922.  *    Set Miscellaneous Output Register
  1923.  */
  1924.  
  1925. outb(0x3c2, 0x6f);
  1926. /*
  1927.  *    Set Sequencer Registers
  1928.  */
  1929.  
  1930. r0   = 0x00; r1   = 0x01; r2   = 0x03; r3   = 0x00; r4   = 0x02;
  1931. boutb(5, 0x00, 0x3c4, 0x3c5);
  1932.  
  1933. outw(0x3c4, 0x0300);
  1934. /*
  1935.  *    Set CRT Registers
  1936.  */
  1937.  
  1938. outb(0x3d4, 0x11);
  1939. outb(0x3d5, 0x0e);
  1940. r0   = 0x9a; r1   = 0x83; r2   = 0x84; r3   = 0x9d; r4   = 0x87;
  1941. r5   = 0x1b; r6   = 0xbf; r7   = 0x1f; r8   = 0x00; r9   = 0x48;
  1942. r10  = 0x07; r11  = 0x08; r12  = 0x00; r13  = 0x00; r14  = 0x15;
  1943. r15  = 0xa8; r16  = 0x98; r17  = 0x8a; r18  = 0x82; r19  = 0x42;
  1944. r20  = 0x1f; r21  = 0x8b; r22  = 0xb8; r23  = 0xa3; r24  = 0xff;
  1945. boutb(25, 0x00, 0x3d4, 0x3d5);
  1946.  
  1947. r80  = 0x00; r81  = 0x00; r82  = 0xff; r83  = 0x00; r84  = 0x08;
  1948. r85  = 0x00; r86  = 0x00; r87  = 0x00; r88  = 0x08; r89  = 0x00;
  1949. r90  = 0x0a; 
  1950. boutb(11, 0x50, 0x3d4, 0x3d5);
  1951.  
  1952. r92  = 0x02; r93  = 0x00; r94  = 0x00; 
  1953. boutb(3, 0x5c, 0x3d4, 0x3d5);
  1954.  
  1955. r96  = 0x0f; r97  = 0x80; r98  = 0x85; 
  1956. boutb(3, 0x60, 0x3d4, 0x3d5);
  1957.  
  1958. r49  = 0x85; r50  = 0x00; r51  = 0x00; r52  = 0x00; r53  = 0x00;
  1959. boutb(5, 0x31, 0x3d4, 0x3d5);
  1960.  
  1961. r58  = 0x85; r59  = 0x99; r60  = 0x40; 
  1962. boutb(3, 0x3a, 0x3d4, 0x3d5);
  1963.  
  1964. r64  = 0x59; 
  1965. boutb(1, 0x40, 0x3d4, 0x3d5);
  1966.  
  1967. r67  = 0x00; 
  1968. boutb(1, 0x43, 0x3d4, 0x3d5);
  1969.  
  1970. r69  = 0x00; r70  = 0x00; r71  = 0xff; r72  = 0xfc; r73  = 0xff;
  1971. boutb(5, 0x45, 0x3d4, 0x3d5);
  1972.  
  1973. r76  = 0xff; r77  = 0xff; r78  = 0xff; r79  = 0xdf; 
  1974. boutb(4, 0x4c, 0x3d4, 0x3d5);
  1975.  
  1976. r66  = 0x02; 
  1977. boutb(1, 0x42, 0x3d4, 0x3d5);
  1978.  
  1979. /*
  1980.  *    Set Other Registers
  1981.  */
  1982.  
  1983. call pfnPMISetMonitorTimings;
  1984. /*
  1985.  *    Set Attribute Registers
  1986.  */
  1987.  
  1988. r0   = 0x00; r1   = 0x01; r2   = 0x02; r3   = 0x03; r4   = 0x04;
  1989. r5   = 0x05; r6   = 0x14; r7   = 0x07; r8   = 0x38; r9   = 0x39;
  1990. r10  = 0x3a; r11  = 0x3b; r12  = 0x3c; r13  = 0x3d; r14  = 0x3e;
  1991. r15  = 0x3f; r16  = 0x0c; r17  = 0x00; r18  = 0x0f; r19  = 0x00;
  1992. r20  = 0x00; 
  1993. boutb(21, 0x00, 0x3c0, 0x3c1);
  1994.  
  1995. /*
  1996.  *    Set GDC Registers
  1997.  */
  1998.  
  1999. r0   = 0x00; r1   = 0x00; r2   = 0x00; r3   = 0x00; r4   = 0x00;
  2000. r5   = 0x10; r6   = 0x0e; r7   = 0x00; r8   = 0xff; 
  2001. boutb(9, 0x00, 0x3ce, 0x3cf);
  2002.  
  2003. /*
  2004.  *    Set Enhanced Command Registers
  2005.  */
  2006.  
  2007. waitw(0x9ae8, 0x0200, 0x0064, 0x0000);
  2008. /*
  2009.  *    Set CRT Registers
  2010.  */
  2011.  
  2012. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x01);
  2013. /*
  2014.  *    Set Enhanced Command Registers
  2015.  */
  2016.  
  2017. outw(0x4ae8, 0x0000);
  2018. /*
  2019.  *    Set CRT Registers
  2020.  */
  2021.  
  2022. rmwbi(0x3d4, 0x3d5, 0x40, 0xfe, 0x00);
  2023. /*
  2024.  *    Set DAC Registers
  2025.  */
  2026.  
  2027. r0   =   0x00000000;
  2028. ProgramDAC;
  2029. inb(r0, 0x3da);
  2030. outb(0x3c0, 0x20);
  2031.  
  2032.