]>
wirehaze git hosting - MS-DOS.git/blob - v4.0/src/BIOS/MSCON.ASM
4 ;==============================================================================
6 ;AN000 - New for DOS Version 4.00 - J.K.
7 ;AC000 - Changed for DOS Version 4.00 - J.K.
8 ;AN00x - PTM number for DOS Version 4.00 - J.K.
9 ;==============================================================================
12 INCLUDE MSGROUP
.INC ;DEFINE CODE SEGMENT
17 ;*** DOS 3.3 will not support more than 25 rows
18 ; INCLUDE DEVSYM.INC ;J.K. 4/29/86 for CON$GENIOCTL support
19 ; INCLUDE IOCTL.INC ;J.K. 4/29/86 for CON$GENIOCTL support
21 EXTRN EXIT
:NEAR ;MSBIO1
22 EXTRN BUS$EXIT
:NEAR ;MSBIO1
24 ; EXTRN CMDERR:NEAR ;MSBIO1 J.K. 4/29/86
27 EXTRN PTRSAV
:DWORD ;MSBIO1
28 EXTRN FHAVEK09
:BYTE ;MSDISK
29 EXTRN ALTAH
:BYTE ;MSBDATA
30 EXTRN KEYRD_Func
:Byte ;MSBDATA
31 EXTRN KEYSTS_Func
:Byte ;MSBDATA
33 ; EXTRN SAV_SC_INFO:BYTE ;MSBDATA J.K. 4/29/86
34 ; EXTRN SAV_SC_MODE:BYTE ;MSBDATA J.K. 4/29/86
35 ;------------------------------------------------------
37 ; CONSOLE READ ROUTINE
39 ASSUME
DS:CODE ; THIS WAS SET BY THE CON DD ENTRY POINT
44 CALL CHRIN
;GET CHAR IN AL
45 STOSB ;STORE CHAR AT ES:DI
50 ;---------------------------------------------------------
52 ; INPUT SINGLE CHAR INTO AL
54 ;J.K.5/12/87 We are going to issue extended keyboard function, if supported.
55 ;The returning value of the extended key stroke of the extended key board
56 ;function uses 0E0h in AL instead of 00 as in the conventional key board
57 ;function. This creates a conflict when the user entered real Greek Alpha
58 ;charater (= 0E0h) to distinguish the extended key stroke and the Greek Alpha.
59 ;This case will be handled in the following manner;
62 ; If AL == 0, then extended code (in AH)
63 ; else If AL == 0E0h, then
64 ; IF AH <> 0, then extended code (in AH)
65 ; else Greek_Alpha character.
66 ;Also, for compatibility reason, if an extended code is detected, then we
67 ;are going to change the value in AL from 0E0h to 00h.
73 mov ah,KEYRD_Func
;AN000; Set by MSINIT. 0 or 10h
75 XCHG AL,ALTAH
;GET CHARACTER & ZERO ALTAH
79 ;SB34CON000**************************************************************
80 ;SB Keyboard I/O interrupt
81 ;SB AH already contains the keyboard read function number
85 ;SB34CON000**************************************************************
87 OR AX,AX ;CHECK FOR NON-KEY AFTER BREAK
89 CMP AX,7200H
;CHECK FOR CTRL-PRTSC
90 JNZ ALT_Ext_Chk
;AN000;
94 ;SB34CON001**************************************************************
95 ;SB IF operation was extended function (i.e. KEYRD_Func != 0) THEN
96 ;SB IF character read was 0E0h THEN
97 ;SB IF extended byte was zero (i.e. AH == 0) THEN
107 cmp BYTE PTR KEYRD_Func
,0
117 ;SB34CON001**************************************************************
118 OR AL,AL ;SPECIAL CASE?
121 MOV ALTAH
,AH ;STORE SPECIAL KEY
126 ;--------------------------------------------------------------
128 ; KEYBOARD NON DESTRUCTIVE READ, NO WAIT
130 ; PC-CONVERTIBLE-TYPE MACHINE: IF BIT 10 IS SET BY THE DOS IN THE STATUS WORD
131 ; OF THE REQUEST PACKET, AND THERE IS NO CHARACTER IN THE INPUT BUFFER, THE
132 ; DRIVER ISSUES A SYSTEM WAIT REQUEST TO THE ROM. ON RETURN FROM THE ROM, IT
133 ; RETURNS A 'CHAR-NOT-FOUND' TO THE DOS.
139 ASSUME
DS:CODE ; THIS WAS SET BY THE CON DD ENTRY POINT
148 ;SB34CON002**************************************************************
149 ;SB Keyboard I/O interrupt
150 ;SB Get keystroke status (KEYSTS_Func)
155 ;SB34CON002**************************************************************
163 TEST [BX].STATUS
,0400H ; SYSTEM WAIT ENABLED?
166 ;********************************
167 ; NEED TO WAIT FOR IBM RESPONSE TO REQUEST FOR CODE ON HOW TO USE THE SYSTEM
169 ;********************************
170 MESSAGE FTESTCON
,<"SYSTEM WAIT STAGE",CR
,LF
>
171 MOV AX,4100H
; WAIT ON AN EXTERNAL EVENT
172 ; MOV BX,0300H ; NO TIMEOUT
173 ; MOV DX,60H ; LOOK AT I/O PORT 60H
174 INT 15H
; CALL ROM FOR SYSTEM WAIT
175 MESSAGE FTESTCON
,<"OUT OF WAIT. AX IS ">
177 MESSAGE FTESTCON
,<CR
,LF
>
183 JNZ NOTBRK
;CHECK FOR NULL AFTER BREAK
184 ;SB34CON004**************************************************************
185 ;SB Keyboard I/O interrupt
186 ;SB Keyboard read function (KEYRD_Func)
191 ;SB34CON004**************************************************************
192 JUMP CON$RDND
;AND GET A REAL STATUS
194 CMP AX,7200H
;CHECK FOR CTRL-PRTSC
195 JNZ RD_Ext_Chk
;AN000;
199 cmp KEYRD_Func
, 0 ;AN000; Extended Keyboard function?
200 jz RDEXIT
;AN000; No. Normal exit.
201 cmp al,0E0h ;AN000; Extended key value or Greek Alpha?
203 cmp ah, 0 ;AN000; Scan code exist?
204 jz RDEXIT
;AN000; Yes. Greek Alpha char.
205 mov al, 0 ;AN000; No. Extended key stroke. Change it for compatibility
217 ;--------------------------------------------------------------
219 ; KEYBOARD FLUSH ROUTINE
221 ASSUME
DS:CODE ; THIS WAS SET BY THE CON DD ENTRY POINT
229 MOV [ALTAH
],0 ;CLEAR OUT HOLDING BUFFER
232 ;SB33012****************************************************************
233 ;SB ; Is there a char there?
234 mov AH, 1 ;SB ; command code for check status
235 int 16h
;SB ; call rom-bios keyboard routine
236 ;SB33012****************************************************************
238 ;SB33013****************************************************************
239 xor AH, AH ;SB ; if zf is nof set, get character
240 int 16h
;SB ; call rom-bios to get character
241 ;SB33013****************************************************************
246 ;----------------------------------------------------------
248 ; CONSOLE WRITE ROUTINE
250 ASSUME
DS:CODE ; THIS WAS SET BY THE CON DD ENTRY POINT
255 MOV AL,ES:[DI] ;GET CHAR
257 INT CHROUT
;OUTPUT CHAR
258 LOOP CON$LP
;REPEAT UNTIL ALL THROUGH
260 ;-----------------------------------------------
266 MOV CS:ALTAH
,3 ;INDICATE BREAK KEY SET
272 ;------------------------------------------------------------------------------
273 ;J.K. 4/29/86 - CONSOLE GENERIC IOCTL SUPPORT FOR DOS 3.3.
274 ;CON$GENIOCTL supports Get mode information, Set mode information functions.
275 ;It will only save the value from "Set mode information" and will return
276 ;the value through "Get mode information". It is supposed to be set by
277 ;the MODE.COM and other application program can retrieve information
278 ;through "Get mode information" call.
279 ;Initially, there is no valuable informaton until set by MODE command, so
280 ;any attemp to "Get mode information" at that points will fail. (unknown
281 ;command with carry set.)
282 ;At entry: CS = DS = code
283 ; CS:[PTRSAV] has seg, address of the Request Header saved in
284 ; in Strategy routine.
286 ; PUBLIC CON$GENIOCTL
289 ; les di, CS:[PTRSAV] ;get the request header
290 ; cmp es:[di].MajorFunction, IOC_SC
294 ; jmp cmderr ;carry is set, exit to cmderr
296 ; mov al, es:[di].MinorFunction ;save minor function
297 ; les di, es:[di].GenericIOCTL_Packet ;pointer of SC_MODE_INFO structure
298 ; mov cx, es:[di].SC_INFO_LENGTH ;save length
300 ; inc di ;ES:DI -> SC_MODE in Info. Packet
301 ; cmp cx, SC_INFO_PACKET_LENGTH ;currently 9.
302 ; jne SC_CMDERR ;cannot accept the different packet
303 ; cmp al, GET_SC_MODE ;minor function = 60h ?
304 ; jne SC_SET_MODE_FUNC ;no, check if it is "Set mode function"
305 ; cmp SAV_SC_MODE, 0 ;information set before?
306 ; je SC_CMDERR ;no, cannot get the info.
307 ;;SC_GET_MODE_FUNC: ;es:di -> SC_MODE in info. packet
309 ; mov si, offset SAV_SC_INFO
310 ; rep movsb ;ds:si -> sav_sc_info, es:di -> sc_mode
313 ;SC_SET_MODE_FUNC: ;es:di -> SC_MODE
314 ; cmp al, SET_SC_MODE ;minor function = 40h ?
316 ; mov si, offset SAV_SC_INFO
322 ; rep movsb ;ds:si -> sc_mode, es:di -> sav_sc_info
325 ;J.K. 4/29/86 - End of CONSOLE GENERIC IOCTL SUPPORT FOR DOS 3.3.