summaryrefslogtreecommitdiff
path: root/v4.0/src/SELECT/CKDISP.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/SELECT/CKDISP.ASM')
-rw-r--r--v4.0/src/SELECT/CKDISP.ASM151
1 files changed, 151 insertions, 0 deletions
diff --git a/v4.0/src/SELECT/CKDISP.ASM b/v4.0/src/SELECT/CKDISP.ASM
new file mode 100644
index 0000000..ba2b318
--- /dev/null
+++ b/v4.0/src/SELECT/CKDISP.ASM
@@ -0,0 +1,151 @@
1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2;
3;
4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5.ALPHA ;AN000;
6.XLIST ;AN000;
7INCLUDE STRUC.INC ;AN000;
8.LIST ;AN000;
9 ;
10 PUBLIC MONO, CGA, EGA, LCD ;AN000;
11 PUBLIC ACTIVE, ALTERNATE ;AN000;
12 ;
13 EXTRN IN_CURNOR:WORD ;AN000;JW
14 ;
15DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000;
16MONO EQU 1 ;AN000;
17CGA EQU 2 ;AN000;
18EGA EQU 3 ;AN000;
19LCD EQU 4 ;AN000;
20 ;
21READ_DISPLAY EQU 1AH ;AN000;
22ALT_SELECT EQU 12H ;AN000;
23EGA_INFO EQU 10H ;AN000;
24MONOCHROME EQU 1 ;AN000;
25BASE_COLOR EQU 0B800H ;AN000;
26BASE_MONO EQU 0B000H ;AN000;
27GET_SYS_ID EQU 0C0H ;AN000;
28LCD_MODEL EQU 0F9H ;AN000;
29GET_STATUS EQU 43H ;AN000;
30ON EQU 1 ;AN000;
31 ;
32SYSTEM_ID STRUC ;AN000;
33 DW ? ;AN000;
34MODEL_BYTE DB ? ;AN000;
35SYSTEM_ID ENDS ;AN000;
36 ;
37ACTIVE DB 0 ;AN000;
38ALTERNATE DB 0 ;AN000;
39 ;
40DATA ENDS ;AN000;DATA
41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
42;
43;
44;
45;
46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
47SERVICE SEGMENT PARA PUBLIC 'SERVICE' ;AN000;segment for far routine
48 ASSUME CS:SERVICE,DS:DATA ;AN000;
49 ;
50 PUBLIC VIDEO_CHECK ;AN000;
51VIDEO_CHECK PROC FAR ;AN000;
52 PUSH AX ;AN000;
53 PUSH BX ;AN000; save all registers
54 PUSH CX ;AN000;
55 PUSH DX ;AN000;
56 PUSH SI ;AN000;
57 PUSH DI ;AN000;
58 PUSH ES ;AN000;
59 XOR AL,AL ;AN000;
60 MOV AH,READ_DISPLAY ;AN000; check for VGA first.
61 INT 10H ;AN000;
62 .IF <AL EQ READ_DISPLAY> ;AN000; VGA present?
63 .SELECT ;AN000; yes....BL contains active..
64 .WHEN <BL EQ MONO> ;AN000; display code.
65 MOV ACTIVE,MONO ;AN000;
66 .WHEN <BL EQ CGA> ;AN000;
67 MOV ACTIVE,CGA ;AN000;
68 .WHEN <BL A CGA> ;AN000;
69 MOV ACTIVE,EGA ;AN000;
70 .ENDSELECT ;AN000;
71 .SELECT ;AN000; ...and BH contains alternate..
72 .WHEN <BH EQ MONO> ;AN000; display code.
73 MOV ALTERNATE,MONO ;AN000;
74 .WHEN <BH EQ CGA> ;AN000;
75 MOV ALTERNATE,CGA ;AN000;
76 .WHEN <BH A CGA> ;AN000;
77 MOV ALTERNATE,EGA ;AN000;
78 .ENDSELECT ;AN000;
79 .ELSE ;AN000; VGA not there..check for EGA.
80 MOV AH,ALT_SELECT ;AN000;
81 MOV BL,EGA_INFO ;AN000;
82 INT 10H ;AN000;
83 .IF <BL NE EGA_INFO> ;AN000; EGA present?
84 MOV ACTIVE,EGA ;AN000; yes....set as active.
85 .IF <BH EQ MONOCHROME> ;AN000; if monochrome attached to EGA then..
86 MOV AX,BASE_COLOR ;AN000; check if CGA is an alternate.
87 CALL CHECK_BUFF ;AN000;
88 .IF <AH EQ AL> ;AN000; CGA there?
89 MOV ALTERNATE,CGA ;AN000; yes....alternate display.
90 .ENDIF ;AN000;
91 .ELSE ;AN000; if color attached to EGA then...
92 MOV AX,BASE_MONO ;AN000; check if monochrome is an alternate.
93 CALL CHECK_BUFF ;AN000;
94 .IF <AH EQ AL> ;AN000; MONO there?
95 MOV ALTERNATE,MONO ;AN000; yes....alternate display.
96 .ENDIF ;AN000;
97 .ENDIF ;AN000;
98 .ELSE ;AN000; EGA not present so...
99 MOV AH,GET_SYS_ID ;AN000; check for LCD.
100 INT 15H ;AN000;
101 .IF <ES:[BX].MODEL_BYTE EQ LCD_MODEL> AND ;AN000; if model byte says convertible..
102 MOV AH,GET_STATUS ;AN000; and..
103 INT 15H ;AN000;
104 .IF <BIT AL NAND ON> ;AN000; if LCD screen attached..then
105 MOV ACTIVE,LCD ;AN000; set LCD as active display.
106 .ELSE ;AN000;
107 MOV AX,BASE_MONO ;AN000; not LCD...check for..
108 CALL CHECK_BUFF ;AN000; MONO....
109 .IF <AH EQ AL> ;AN000;
110 MOV ACTIVE,MONO ;AN000; MONO found...set as active.
111 MOV IN_CURNOR,0B0CH ;AN000;JW set mono cursor size
112 .ENDIF ;AN000;
113 MOV AX,BASE_COLOR ;AN000; ..and check for color.
114 CALL CHECK_BUFF ;AN000;
115 .IF <AH EQ AL> ;AN000;
116 MOV ALTERNATE,CGA ;AN000; color found...set CGA as alternate.
117 .ENDIF ;AN000;
118 .ENDIF ;AN000;
119 .ENDIF ;AN000;
120 .ENDIF ;AN000;
121 POP ES ;AN000;
122 POP DI ;AN000; restore registers.
123 POP SI ;AN000;
124 POP DX ;AN000;
125 POP CX ;AN000;
126 POP BX ;AN000;
127 POP AX ;AN000;
128 RET ;AN000;
129VIDEO_CHECK ENDP ;AN000;
130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
131;
132;
133;
134;
135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
136CHECK_BUFF PROC NEAR ;AN000; write to video buffer to see if it is present
137 PUSH DS ;AN000;
138 MOV DS,AX ;AN000; load DS with address of buffer
139 MOV CH,DS:0 ;AN000; save buffer information (if present)
140 MOV AL,55H ;AN000; prepare to write sample data
141 MOV DS:0,AL ;AN000; write to buffer
142 PUSH BX ;AN000; terminate the bus so that lines..
143 POP BX ;AN000; are reset
144 MOV AH,DS:0 ;AN000; bring sample data back...
145 MOV DS:0,CH ;AN000; repair damage to buffer
146 POP DS ;AN000;
147 RET ;AN000;
148CHECK_BUFF ENDP ;AN000;
149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
150SERVICE ENDS ;AN000;
151 END ;AN000;