1 ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
3 ;=- Tauron VGA Utilities Version 3.0 -=
\r
4 ;=- Released September 20, 1998 -=
\r
6 ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
7 ;=- Copyright (c) 1997, 1998 by Jeff Morgan =-= This code is FREE provided -=
\r
8 ;=- All Rights Reserved. =-= that you put my name some- -=
\r
9 ;=- =-= where in your credits. -=
\r
10 ;=- DISCLAIMER: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
11 ;=- I assume no responsibility whatsoever for any effect that this package, -=
\r
12 ;=- the information contained therein or the use thereof has on you, your -=
\r
13 ;=- sanity, computer, spouse, children, pets or anything else related to -=
\r
14 ;=- you or your existance. No warranty is provided nor implied with this -=
\r
16 ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
24 ATTRCON_ADDR EQU 03C0H
\r
26 VGAENABLE_ADDR EQU 03C3H
\r
28 GRACON_ADDR EQU 03CEH
\r
30 STATUS_ADDR EQU 03DAH
\r
48 VMODE_CHAIN4 EQU 14H
\r
49 VMODE_MODE_X EQU 15H
\r
50 VMODE_MODE_A EQU 16H
\r
51 VMODE_MODE_B EQU 17H
\r
52 VMODE_MODE_C EQU 18H
\r
53 VMODE_MODE_D EQU 19H
\r
54 VMODE_MODE_E EQU 1AH
\r
55 VMODE_MODE_F EQU 1BH
\r
56 VMODE_MODE_G EQU 1CH
\r
57 VMODE_MODE_H EQU 1DH
\r
58 VMODE_MODE_I EQU 1EH
\r
59 VMODE_MODE_J EQU 1FH
\r
60 VMODE_MODE_K EQU 20H
\r
61 VMODE_MODE_L EQU 21H
\r
62 VMODE_MODE_M EQU 22H
\r
63 VMODE_MODE_N EQU 23H
\r
65 ;These next four lines must be included for the text mode stuff to work.
\r
72 DB 0, 0, 0, 0, 0, 42, 0, 42, 0, 0, 42, 42, 42, 0, 0, 42, 0, 42
\r
73 DB 42, 21, 0, 42, 42, 42, 21, 21, 21, 21, 21, 63, 21, 63, 21, 21, 63, 63
\r
74 DB 63, 21, 21, 63, 21, 63, 63, 63, 21, 63, 63, 63, 0, 0, 0, 5, 5, 5
\r
75 DB 8, 8, 8, 11, 11, 11, 14, 14, 14, 17, 17, 17, 20, 20, 20, 24, 24, 24
\r
76 DB 28, 28, 28, 32, 32, 32, 36, 36, 36, 40, 40, 40, 45, 45, 45, 50, 50, 50
\r
77 DB 56, 56, 56, 63, 63, 63, 0, 0, 63, 16, 0, 63, 31, 0, 63, 47, 0, 63
\r
78 DB 63, 0, 63, 63, 0, 47, 63, 0, 31, 63, 0, 16, 63, 0, 0, 63, 16, 0
\r
79 DB 63, 31, 0, 63, 47, 0, 63, 63, 0, 47, 63, 0, 31, 63, 0, 16, 63, 0
\r
80 DB 0, 63, 0, 0, 63, 16, 0, 63, 31, 0, 63, 47, 0, 63, 63, 0, 47, 63
\r
81 DB 0, 31, 63, 0, 16, 63, 31, 31, 63, 39, 31, 63, 47, 31, 63, 55, 31, 63
\r
82 DB 63, 31, 63, 63, 31, 55, 63, 31, 47, 63, 31, 39, 63, 31, 31, 63, 39, 31
\r
83 DB 63, 47, 31, 63, 55, 31, 63, 63, 31, 55, 63, 31, 47, 63, 31, 39, 63, 31
\r
84 DB 31, 63, 31, 31, 63, 39, 31, 63, 47, 31, 63, 55, 31, 63, 63, 31, 55, 63
\r
85 DB 31, 47, 63, 31, 39, 63, 45, 45, 63, 49, 45, 63, 54, 45, 63, 58, 45, 63
\r
86 DB 63, 45, 63, 63, 45, 58, 63, 45, 54, 63, 45, 49, 63, 45, 45, 63, 49, 45
\r
87 DB 63, 54, 45, 63, 58, 45, 63, 63, 45, 58, 63, 45, 54, 63, 45, 49, 63, 45
\r
88 DB 45, 63, 45, 45, 63, 49, 45, 63, 54, 45, 63, 58, 45, 63, 63, 45, 58, 63
\r
89 DB 45, 54, 63, 45, 49, 63, 0, 0, 28, 7, 0, 28, 14, 0, 28, 21, 0, 28
\r
90 DB 28, 0, 28, 28, 0, 21, 28, 0, 14, 28, 0, 7, 28, 0, 0, 28, 7, 0
\r
91 DB 28, 14, 0, 28, 21, 0, 28, 28, 0, 21, 28, 0, 14, 28, 0, 7, 28, 0
\r
92 DB 0, 28, 0, 0, 28, 7, 0, 28, 14, 0, 28, 21, 0, 28, 28, 0, 21, 28
\r
93 DB 0, 14, 28, 0, 7, 28, 14, 14, 28, 17, 14, 28, 21, 14, 28, 24, 14, 28
\r
94 DB 28, 14, 28, 28, 14, 24, 28, 14, 21, 28, 14, 17, 28, 14, 14, 28, 17, 14
\r
95 DB 28, 21, 14, 28, 24, 14, 28, 28, 14, 24, 28, 14, 21, 28, 14, 17, 28, 14
\r
96 DB 14, 28, 14, 14, 28, 17, 14, 28, 21, 14, 28, 24, 14, 28, 28, 14, 24, 28
\r
97 DB 14, 21, 28, 14, 17, 28, 20, 20, 28, 22, 20, 28, 24, 20, 28, 26, 20, 28
\r
98 DB 28, 20, 28, 28, 20, 26, 28, 20, 24, 28, 20, 22, 28, 20, 20, 28, 22, 20
\r
99 DB 28, 24, 20, 28, 26, 20, 28, 28, 20, 26, 28, 20, 24, 28, 20, 22, 28, 20
\r
100 DB 20, 28, 20, 20, 28, 22, 20, 28, 24, 20, 28, 26, 20, 28, 28, 20, 26, 28
\r
101 DB 20, 24, 28, 20, 22, 28, 0, 0, 16, 4, 0, 16, 8, 0, 16, 12, 0, 16
\r
102 DB 16, 0, 16, 16, 0, 12, 16, 0, 8, 16, 0, 4, 16, 0, 0, 16, 4, 0
\r
103 DB 16, 8, 0, 16, 12, 0, 16, 16, 0, 12, 16, 0, 8, 16, 0, 4, 16, 0
\r
104 DB 0, 16, 0, 0, 16, 4, 0, 16, 8, 0, 16, 12, 0, 16, 16, 0, 12, 16
\r
105 DB 0, 8, 16, 0, 4, 16, 8, 8, 16, 10, 8, 16, 12, 8, 16, 14, 8, 16
\r
106 DB 16, 8, 16, 16, 8, 14, 16, 8, 12, 16, 8, 10, 16, 8, 8, 16, 10, 8
\r
107 DB 16, 12, 8, 16, 14, 8, 16, 16, 8, 14, 16, 8, 12, 16, 8, 10, 16, 8
\r
108 DB 8, 16, 8, 8, 16, 10, 8, 16, 12, 8, 16, 14, 8, 16, 16, 8, 14, 16
\r
109 DB 8, 12, 16, 8, 10, 16, 11, 11, 16, 12, 11, 16, 13, 11, 16, 15, 11, 16
\r
110 DB 16, 11, 16, 16, 11, 15, 16, 11, 13, 16, 11, 12, 16, 11, 11, 16, 12, 11
\r
111 DB 16, 13, 11, 16, 15, 11, 16, 16, 11, 15, 16, 11, 13, 16, 11, 12, 16, 11
\r
112 DB 11, 16, 11, 11, 16, 12, 11, 16, 13, 11, 16, 15, 11, 16, 16, 11, 15, 16
\r
113 DB 11, 13, 16, 11, 12, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
\r
114 DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63
\r
116 ; Must be included for any videomode to be set.
\r
119 MAIN_MSG LABEL BYTE
\r
120 DB 'Tauron VGA Utilities v3.0',13,10
\r
121 DB 'Copyright (c) 1998 Jeffrey Morgan. All Rights Reserved.',13,10
\r
122 DB 'Select a video mode to test: (Modes with a ! are not implemented)',13,10
\r
123 DB 'Key Videomode (Modes with a % are unchained)',13,10
\r
124 DB '================================================================================'
\r
125 DB ' 0) 00H, 01H -- 40 x 25 x 16 %F) Mode D -- 360 x 200 x 256',13,10
\r
126 DB ' 1) Mode L -- 40 x 43 x 16 %G) Mode E -- 360 x 240 x 256',13,10
\r
127 DB ' 2) Mode M -- 40 x 50 x 16 %H) Mode F -- 360 x 350 x 256',13,10
\r
128 DB '!3) 07H -- 80 x 25 x 2 %I) Mode G -- 360 x 400 x 256',13,10
\r
129 DB ' 4) 02H, 03H -- 80 x 25 x 16 %J) Mode H -- 360 x 480 x 256',13,10
\r
130 DB ' 5) Mode J -- 80 x 43 x 16 K) 06H -- 640 x 200 x 2',13,10
\r
131 DB ' 6) Mode K -- 80 x 50 x 16 !L) 0FH -- 640 x 350 x 2',13,10
\r
132 DB ' 7) 04H, 05H -- 320 x 200 x 4 M) 11H -- 640 x 480 x 2',13,10
\r
133 DB ' 8) 0DH -- 320 x 200 x 16 N) 0EH -- 640 x 200 x 16',13,10
\r
134 DB ' 9) 13H -- 320 x 200 x 256 O) 10H -- 640 x 350 x 16',13,10
\r
135 DB '%A) Chain 4 -- 320 x 200 x 256 P) Mode I -- 640 x 400 x 16',13,10
\r
136 DB '%B) Mode X -- 320 x 240 x 256 Q) 12H -- 640 x 480 x 16',13,10
\r
137 DB '%C) Mode A -- 320 x 350 x 256',13,10
\r
138 DB '%D) Mode B -- 320 x 400 x 256 R) Dual Font Test',13,10
\r
139 DB '%E) Mode C -- 320 x 480 x 256',13,10
\r
140 DB '===============================================================================',13,10
\r
141 DB 'Hit ',39,'ESC',39,' to exit. Press a key [0-9 or A-O]>$'
\r
143 TEXTMSG_1 DB 218,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,191,0
\r
144 TEXTMSG_2 DB 179,'Text Mode: 00H ',179,0 ; +13
\r
145 TEXTMSG_3 DB 179,'Width: 80 Height: 25',179,0 ; +8
\r
146 TEXTMSG_4 DB 179,'Bytes per screen: 4000',179,0 ; +19
\r
147 TEXTMSG_5 DB 179,'Number of pages: 8 ',179,0
\r
148 TEXTMSG_6 DB 192,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,217,0
\r
150 TEXTMSG_7 DB 218,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,191,0
\r
151 TEXTMSG_8 DB 179,'Text Mode J ',179,0 ; +11
\r
152 TEXTMSG_9 DB 179,'Width: 80 Height: 43',179,0 ; +21, +22
\r
153 TEXTMSG_A DB 179,'Bytes per screen: 3440',179,0 ; +19, +20, +21, +22
\r
154 TEXTMSG_B DB 179,'Number of pages: 8 ',179,0
\r
155 TEXTMSG_C DB 192,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,217,0
\r
157 TEXTMSG_D DB 218,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,191,0
\r
158 TEXTMSG_E DB 179,' DUAL FONT MODE ',179,0 ;
\r
159 TEXTMSG_F DB 192,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,217,0
\r
164 ; Attribute for text charcters
\r
183 ; This must be here to ensure that the fonts are properly found because
\r
184 ; the location of the fonts in ROM is different on every VGA BIOS.
\r
185 ; Get location of the fonts for Modes J and K
\r
190 MOV FONT_8x8_OFF,BP
\r
192 ; Get location of the fonts for Modes 00H, 01H, 02H, 03H, and 07H
\r
197 MOV FONT_8x14_OFF,BP
\r
199 ; Reset the mode and clear the screen
\r
203 ; Print out the message
\r
204 MOV DX,OFFSET MAIN_MSG
\r
210 ; Wait for a keypress
\r
330 ; ====================== New Video Mode ====================================
\r
337 ; Wait for a keypress
\r
342 ; ====================== New Video Mode ====================================
\r
349 ; Wait for a keypress
\r
354 ; ====================== New Video Mode ====================================
\r
362 ; Wait for a keypress
\r
367 ; ====================== New Video Mode ====================================
\r
375 ; Wait for a keypress
\r
380 ; ====================== New Video Mode ====================================
\r
388 ; Wait for a keypress
\r
393 ; ====================== New Video Mode ====================================
\r
400 ; Wait for a keypress
\r
405 ; ====================== New Video Mode ====================================
\r
412 ; Wait for a keypress
\r
417 ; ====================== New Video Mode ====================================
\r
424 ; Wait for a keypress
\r
429 ; ====================== New Video Mode ====================================
\r
436 ; Wait for a keypress
\r
441 ; ====================== New Video Mode ====================================
\r
448 ; Wait for a keypress
\r
453 ; ====================== New Video Mode ====================================
\r
460 ; Wait for a keypress
\r
465 ; ====================== New Video Mode ====================================
\r
472 ; Wait for a keypress
\r
477 ; ====================== New Video Mode ====================================
\r
484 ; Wait for a keypress
\r
489 ; ====================== New Video Mode ====================================
\r
496 ; Wait for a keypress
\r
501 ; ====================== New Video Mode ====================================
\r
508 ; Wait for a keypress
\r
513 ; ====================== New Video Mode ====================================
\r
520 ; Wait for a keypress
\r
525 ; ====================== New Video Mode ====================================
\r
532 ; Wait for a keypress
\r
537 ; ====================== New Video Mode ====================================
\r
544 ; Wait for a keypress
\r
549 ; ====================== New Video Mode ====================================
\r
556 ; Wait for a keypress
\r
561 ; ====================== New Video Mode ====================================
\r
568 ; Wait for a keypress
\r
573 ; ====================== New Video Mode ====================================
\r
580 ; Wait for a keypress
\r
585 ; ====================== New Video Mode ====================================
\r
592 ; Wait for a keypress
\r
597 ; ====================== New Video Mode ====================================
\r
604 ; Wait for a keypress
\r
609 ; ====================== New Video Mode ====================================
\r
616 ; Wait for a keypress
\r
621 ; ====================== New Video Mode ====================================
\r
628 ; Wait for a keypress
\r
633 ; ====================== New Video Mode ====================================
\r
638 ; Reset the mode and clear the screen
\r
642 ; Print out the message
\r
643 MOV DX,OFFSET MAIN_MSG
\r
648 ; ====================== New Video Mode ====================================
\r
650 ; Set the BIOS mode 03h
\r
658 ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
664 mov dx,GRACON_ADDR ;get graphics port
\r
665 mov al,5 ;get write mode reg
\r
666 out dx,al ;select the reg
\r
667 IODELAY ;delay a bit
\r
669 in al,dx ;get value
\r
671 mov [oldmode],al ;store it
\r
673 mov al,6 ;get misc reg
\r
674 out dx,al ;select the reg
\r
675 IODELAY ;delay a bit
\r
677 in al,dx ;get value
\r
679 mov [oldmisc],al ;store it
\r
681 mov dx,SEQ_ADDR ;get sequencer port
\r
682 mov al,2 ;get map mask reg
\r
683 out dx,al ;select the reg
\r
684 IODELAY ;delay a bit
\r
686 in al,dx ;get value
\r
688 mov [oldmask],al ;store it
\r
690 mov al,4 ;get memory selector reg
\r
691 out dx,al ;select the reg
\r
692 IODELAY ;delay a bit
\r
694 in al,dx ;get value
\r
696 mov [oldmem],al ;store it
\r
698 mov dx,GRACON_ADDR ;select graphics port
\r
699 mov al,5 ;get write mode reg
\r
700 mov ah,[oldmode] ;get old value
\r
701 and ah,0fch ;mask it
\r
702 out dx,ax ;set new value
\r
704 mov al,6 ;get misc reg
\r
705 mov ah,[oldmisc] ;get old value
\r
706 and ah,0f1h ;mask it
\r
707 or ah,4 ;set a flag
\r
710 mov dx,SEQ_ADDR ;select sequencer port
\r
711 mov al,2 ;get mask reg
\r
712 mov ah,4 ;get new value
\r
715 mov al,4 ;get memory reg
\r
716 mov ah,[oldmem] ;get old value
\r
718 out dx,ax ;set value
\r
741 SUB CL,byte ptr [BP+12]
\r
757 mov dx,GRACON_ADDR ;get graphics port
\r
758 mov al,5 ;get 1st reg
\r
759 mov ah,[oldmode] ;get old value
\r
762 mov al,6 ;get 2nd reg
\r
763 mov ah,[oldmisc] ;get old value
\r
766 mov dx,SEQ_ADDR ;get seq port
\r
767 mov al,2 ;get 3rd reg
\r
768 mov ah,[oldmask] ;get old value
\r
771 mov al,4 ;get 4th reg
\r
772 mov ah,[oldmem] ;get old value
\r
781 ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r
786 ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
\r