diff options
Diffstat (limited to 'v4.0/src/SELECT/CKDISP.ASM')
| -rw-r--r-- | v4.0/src/SELECT/CKDISP.ASM | 151 |
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; | ||
| 7 | INCLUDE 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 | ; | ||
| 15 | DATA SEGMENT BYTE PUBLIC 'DATA' ;AN000; | ||
| 16 | MONO EQU 1 ;AN000; | ||
| 17 | CGA EQU 2 ;AN000; | ||
| 18 | EGA EQU 3 ;AN000; | ||
| 19 | LCD EQU 4 ;AN000; | ||
| 20 | ; | ||
| 21 | READ_DISPLAY EQU 1AH ;AN000; | ||
| 22 | ALT_SELECT EQU 12H ;AN000; | ||
| 23 | EGA_INFO EQU 10H ;AN000; | ||
| 24 | MONOCHROME EQU 1 ;AN000; | ||
| 25 | BASE_COLOR EQU 0B800H ;AN000; | ||
| 26 | BASE_MONO EQU 0B000H ;AN000; | ||
| 27 | GET_SYS_ID EQU 0C0H ;AN000; | ||
| 28 | LCD_MODEL EQU 0F9H ;AN000; | ||
| 29 | GET_STATUS EQU 43H ;AN000; | ||
| 30 | ON EQU 1 ;AN000; | ||
| 31 | ; | ||
| 32 | SYSTEM_ID STRUC ;AN000; | ||
| 33 | DW ? ;AN000; | ||
| 34 | MODEL_BYTE DB ? ;AN000; | ||
| 35 | SYSTEM_ID ENDS ;AN000; | ||
| 36 | ; | ||
| 37 | ACTIVE DB 0 ;AN000; | ||
| 38 | ALTERNATE DB 0 ;AN000; | ||
| 39 | ; | ||
| 40 | DATA ENDS ;AN000;DATA | ||
| 41 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| 42 | ; | ||
| 43 | ; | ||
| 44 | ; | ||
| 45 | ; | ||
| 46 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| 47 | SERVICE SEGMENT PARA PUBLIC 'SERVICE' ;AN000;segment for far routine | ||
| 48 | ASSUME CS:SERVICE,DS:DATA ;AN000; | ||
| 49 | ; | ||
| 50 | PUBLIC VIDEO_CHECK ;AN000; | ||
| 51 | VIDEO_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; | ||
| 129 | VIDEO_CHECK ENDP ;AN000; | ||
| 130 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| 131 | ; | ||
| 132 | ; | ||
| 133 | ; | ||
| 134 | ; | ||
| 135 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| 136 | CHECK_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; | ||
| 148 | CHECK_BUFF ENDP ;AN000; | ||
| 149 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||
| 150 | SERVICE ENDS ;AN000; | ||
| 151 | END ;AN000; | ||