2655 lines
95 KiB
NASM
2655 lines
95 KiB
NASM
PAGE 109,132
|
||
|
||
TITLE MS-DOS 5.0 EXTBIOS.ASM
|
||
|
||
;************************************************************************
|
||
;* *
|
||
;* *
|
||
;* MODULE NAME: EXTBIOS.ASM *
|
||
;* *
|
||
;* *
|
||
;* COPYRIGHT (C) NEC CORPORATION 1990 *
|
||
;* *
|
||
;* NEC CONFIDENTIAL AND PROPRIETARY *
|
||
;* *
|
||
;* All rights reserved by NEC Corporation. *
|
||
;* this program must be used solely for *
|
||
;* the purpose for which it was furnished *
|
||
;* by NEC Corporation. No past of this program *
|
||
;* may be reproduced or disclosed to others, *
|
||
;* in any form, without the prior written *
|
||
;* permission of NEC Corporation. *
|
||
;* Use of copyright notice does not evidence *
|
||
;* publication of this program. *
|
||
;* *
|
||
;************************************************************************
|
||
|
||
;
|
||
; 84/11/20 ABOUT HARD COPY
|
||
; 84/11/22 ABOUT CTRL-FKY SUPPORT
|
||
; 84/11/23 ABOUT CTRL-FKY FLAG
|
||
; 85/02/01 ABOUT RS232 BIO
|
||
; 85/02/04 "
|
||
; 85/02/08 "
|
||
; 85/02/22 "
|
||
; 85/03/28 RECOVER A BUG
|
||
; 85/04/07 ABOUT PRINT-OUT MODE
|
||
; 85/10/24 ABOUT RS-232C BUG (AT V2.11)
|
||
; 86/09/23
|
||
; 86/10/20 MAKE BIG STACK
|
||
; 86/11/19 FOR RS-232C
|
||
;
|
||
; < 87/08 .. 87/10 -- H/N MODE MS-DOS 3.1 >
|
||
; NEW INT220 FUNC (#18,#19,#128)
|
||
; ADD SUB-FUNC (#10,#12,#13,#14,#17)
|
||
;
|
||
; < 88/03 .. 88/07 -- DOS 3.3 R.01 >
|
||
; NEW INT220 FUNC (#129)
|
||
; ADD SUB-FUNC (??)
|
||
; (STOP) SCSI RETRACT SUPPORT
|
||
;
|
||
; 90/11,12 MS-DOS 5.0
|
||
;
|
||
; 91/08/00 3.5" MO support
|
||
;
|
||
|
||
;********************************************************
|
||
;* *
|
||
;* EXTERNAL SYMBOLS *
|
||
;* *
|
||
;********************************************************
|
||
;
|
||
; This file defines the segment structure of the BIOS.
|
||
; It should be included at the beginning of each source file.
|
||
; All further segment declarations in the file can then be done by just
|
||
; by specifying the segment name, with no attribute, class, or align type.
|
||
|
||
datagrp group Bios_Data,Bios_Data_Init
|
||
|
||
Bios_Data segment word public 'Bios_Data'
|
||
Bios_Data ends
|
||
|
||
Bios_Data_Init segment word public 'Bios_Data_Init'
|
||
Bios_Data_Init ends
|
||
|
||
Filler segment para public 'Filler'
|
||
Filler ends
|
||
|
||
Bios_Code segment word public 'Bios_Code'
|
||
Bios_Code ends
|
||
|
||
Filler2 segment para public 'Filler2'
|
||
Filler2 ends
|
||
|
||
SysInitSeg segment word public 'system_init'
|
||
SysInitSeg ends
|
||
|
||
Bios_DATA segment word public 'Bios_DATA'
|
||
ASSUME CS:BIOS_CODE,DS:DATAGRP
|
||
|
||
EXTRN FKYTBL:NEAR,KBCODTBL:NEAR
|
||
EXTRN EXLPTBL:NEAR
|
||
EXTRN INF5H:BYTE,HDIO_FLG:BYTE
|
||
EXTRN WRAPMOD:BYTE
|
||
|
||
EXTRN BIOS_FLAG:BYTE,FKYSW:BYTE,CURATTR:BYTE
|
||
EXTRN CSRSW:BYTE,HEXMOD:BYTE,ESCCNT:BYTE
|
||
EXTRN SRMFLG:BYTE,KANJICNT:BYTE
|
||
EXTRN PR_KNJCNT:BYTE,SFTJISMOD:BYTE,MODMARK1:BYTE
|
||
EXTRN DEFATTR:BYTE,FKYPTR:WORD,FKY_BUFFER:BYTE
|
||
EXTRN FKYCNT:BYTE,PR_HEADER:DWORD
|
||
|
||
EXTRN CTRLFKY:BYTE
|
||
EXTRN CTRLCMD:BYTE
|
||
EXTRN PR_RATIO:BYTE
|
||
|
||
EXTRN CHRTBL:NEAR ;87/8/25
|
||
EXTRN AUX_HEADER:WORD ;87/8/25
|
||
EXTRN AUX1_HEADER:WORD ;88/05/06
|
||
EXTRN BUFSIZE:WORD ;87/8/25
|
||
|
||
EXTRN MEM_SW1:BYTE,MEM_SW2:BYTE ;87/8/28
|
||
EXTRN SYS_501:BYTE ;87/8/25
|
||
|
||
EXTRN LPTABLE:NEAR,EXLPTBL:NEAR ;870927
|
||
EXTRN SNGDRV_FLG:BYTE,EXTSW:BYTE,CURDRV:BYTE ;870927
|
||
EXTRN HD_NUM:BYTE,N8FD:BYTE,N5FD:BYTE,N5HD:BYTE ;870927
|
||
EXTRN HD_OFFSET:NEAR ;870927
|
||
EXTRN VSYS_FLAG:BYTE,XPORT_FLAG:BYTE,KDRV_FLG:BYTE ;870927
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
EXTRN EXMM_SIZE:BYTE
|
||
EXTRN CH1MSW1:BYTE
|
||
EXTRN HDS_NUM:BYTE,NSHD:BYTE,HDS_OFFSET:WORD
|
||
;-------------------------------------------------------------- 880526
|
||
EXTRN INFSH:BYTE
|
||
;---------------------------------------------------------------------
|
||
EXTRN STOP_FLAG:BYTE,COPY_FLAG:BYTE
|
||
EXTRN COPYSTOP:BYTE
|
||
;----------------------------------------------------- 89/08/16 ---
|
||
EXTRN SCSI_EQUIP:NEAR,MO_DEVICE_TBL:NEAR,DRV_NUM:BYTE
|
||
EXTRN MO_DEV_LENGTH:WORD,CURATTR2:WORD,DEFATTR2:WORD
|
||
EXTRN MO_COUNT:BYTE
|
||
; EXTRN CLRRTN:NEAR
|
||
;--------------------------------------------------------------------
|
||
EXTRN ATTRF:WORD,CRTDOTF:WORD,BIOSF_3:BYTE
|
||
|
||
EXTRN EXT_SAVAX:WORD,EXT_SAVSS:WORD,EXT_SAVSP:WORD
|
||
EXTRN EXT_SAVDS:WORD,EXT_SAVDX:WORD,EXT_SAVBX:WORD
|
||
EXTRN EXT_STACK:NEAR
|
||
EXTRN STP_SAVAX:WORD,STP_SAVSS:WORD,STP_SAVSP:WORD
|
||
EXTRN STOP_STACK:NEAR
|
||
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
EXTRN Start_BDS:word, Lockcnt:byte, ERR_STATUS:byte
|
||
;---------------------------------------------------------------------
|
||
;----------------------------------------------- DOS5 91/09/00 -------
|
||
EXTRN IOSYS_REV:word, MINOR_REV:byte
|
||
;---------------------------------------------------------------------
|
||
|
||
;----------------------------------------------- DOS5 92/07/08 -------
|
||
;<patch BIOS50-P08>
|
||
extrn patch05:near
|
||
;---------------------------------------------------------------------
|
||
|
||
Bios_Data ends
|
||
|
||
Bios_Code segment word public 'Bios_Code'
|
||
ASSUME CS:BIOS_CODE,DS:DATAGRP
|
||
|
||
EXTRN ESCADM:NEAR,ESCIND:NEAR,ESCRI:NEAR
|
||
EXTRN ESCVT_CUU:NEAR,ESCVT_CUD:NEAR,ESCVT_CUF:NEAR
|
||
EXTRN ESCVT_CUB:NEAR,ESCVT_ED:NEAR,ESCVT_EL:NEAR
|
||
EXTRN ESCVT_IL:NEAR,ESCVT_DL:NEAR,ESCKNJ:NEAR
|
||
EXTRN DSPFKY:NEAR,CRTOUT:NEAR
|
||
EXTRN DSPCSR:NEAR,FLUSH:NEAR
|
||
|
||
; EXTRN MO_DEVICE_TBL:NEAR
|
||
; EXTRN MO_DEV_LENGTH:WORD
|
||
EXTRN CLRRTN:NEAR
|
||
EXTRN BDATA_SEG:WORD
|
||
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
EXTRN LockMO:near, UnlockMO:near
|
||
;---------------------------------------------------------------------
|
||
|
||
Bios_Code ends
|
||
|
||
|
||
Bios_Code segment word public 'Bios_Code'
|
||
ASSUME CS:BIOS_CODE,DS:DATAGRP
|
||
|
||
PUBLIC EXTBIOS_CODE_START
|
||
PUBLIC EXTBIOS_CODE_END
|
||
PUBLIC EXTBIOS_END
|
||
PUBLIC EXTBIOS_CODE
|
||
PUBLIC STOP_CHK,COPY_INT_CODE,STOP_INT_CODE
|
||
PUBLIC STOP_CHK_FAR
|
||
|
||
; PUBLIC ATTRF,BIOSF_3 ; 89/08/21
|
||
PUBLIC CRTMDDOT
|
||
; PUBLIC CRTDOTF
|
||
PUBLIC CRTMD2AT,CRTMD1AT
|
||
PUBLIC CRTMD480,CRTMD400
|
||
PUBLIC CRTMDATR
|
||
;----------------------------------------------- DOS5A 92/10/01 ------
|
||
;<patch BIOS50-P27>
|
||
public EX_CRTMD, CRTMD_DEF
|
||
;---------------------------------------------------------------------
|
||
|
||
EXTBIOS_CODE_START:
|
||
|
||
RATIOAK EQU 01H ;RATIO OF ANK AND KANJI ;87/8/25
|
||
KICODE EQU 02H ;KANJI IN CODE ;87/8/25
|
||
CRLFP EQU 80H ;CR/LF OUTPUT ;87/8/25
|
||
|
||
|
||
PAGE
|
||
;****************************************************************
|
||
;* *
|
||
;* EXTENDED FUNCTIONS *
|
||
;* INT 220 *
|
||
;* ENTRY: (CL) = FUNCTION NUMBER *
|
||
;* *
|
||
;****************************************************************
|
||
;
|
||
EXTBIOS_CODE:
|
||
PUSH DS
|
||
PUSH DS
|
||
MOV DS,cs:[bdata_seg]
|
||
POP [EXT_SAVDS] ;SAVE DS
|
||
MOV [EXT_SAVAX],AX ;SAVE AX
|
||
MOV [EXT_SAVSS],SS ;SAVE SS
|
||
MOV [EXT_SAVSP],SP ;SAVE SP
|
||
MOV [EXT_SAVDX],DX ;SAVE DX 87/8/14
|
||
MOV [EXT_SAVBX],BX ;SAVE BX 88/03/31
|
||
;--------------------------------------------------------- 91/01/20 --
|
||
; MOV AX,CS
|
||
|
||
MOV SS,CS:[BDATA_SEG]
|
||
;---------------------------------------------------------------------
|
||
MOV SP,OFFSET EXT_STACK ;SET LOCAL STACK ADDR
|
||
STI ;ENABLE INTERRUPT
|
||
CLD ;
|
||
PUSH ES
|
||
PUSH BX
|
||
PUSH CX
|
||
PUSH DX
|
||
PUSH SI
|
||
PUSH DI
|
||
|
||
MOV [BIOS_FLAG],1
|
||
|
||
;*** EXTENDED BIOS MAIN ***
|
||
|
||
SUB CL,09H ; 89/08/16
|
||
JB EXT_BIOS_RET ;CL<10 ... NOP
|
||
;------------------------------------------------------ DOS5 91/09/09 -
|
||
cmp cl,0dh ;CHECK FUNCTION #
|
||
;-------
|
||
; CMP CL,0CH ;CHECK FUNCTION # 89/08/16
|
||
;---------------------------------------------------------------------
|
||
JB EXT_B1 ; 87/8/14
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
; CMP CL,76H ;80H - 0AH = 76H 87/8/14
|
||
; MOV CL,10 ; 87/8/15
|
||
; JNE EXT_BIOS_RET ; 87/8/14
|
||
;----------------------------------------
|
||
CMP CL,77H ; 89/08/16
|
||
JB EXT_BIOS_RET ; 89/08/16
|
||
CMP CL,79H ;130 - 10 = 120(78H) 89/08/16
|
||
JA EXT_BIOS_RET ;INVALID FUNC#
|
||
SUB CL,77H ; 89/09/01
|
||
;------------------------------------------------------ DOS5 91/09/09 -
|
||
add cl,0dh
|
||
;-------
|
||
; ADD CL,0CH ; 89/09/01
|
||
;---------------------------------------------------------------------
|
||
EXT_B1: ; 87/8/14
|
||
XOR CH,CH
|
||
MOV SI,CX
|
||
SHL SI,1
|
||
ADD SI,OFFSET EXT_RTNTBL
|
||
CALL WORD PTR CS:[SI] ;CALL SUBROUTINE
|
||
|
||
;*** RETURN FROM EXTENDED BIOS ***
|
||
|
||
EXT_BIOS_RET:
|
||
CALL STOP_CHK ;CHECK STOP/COPY INT
|
||
POP DI
|
||
POP SI
|
||
POP DX
|
||
POP CX
|
||
POP BX
|
||
POP ES
|
||
CLI ;DISABLE INTERRUPT
|
||
MOV DS,cs:[bdata_seg]
|
||
MOV AX,[EXT_SAVAX]
|
||
MOV SS,[EXT_SAVSS]
|
||
MOV SP,[EXT_SAVSP]
|
||
MOV DX,[EXT_SAVDX] ; 87/8/14
|
||
MOV BX,[EXT_SAVBX] ; 88/03/31
|
||
POP DS
|
||
IRET ;RETURN
|
||
|
||
|
||
|
||
EX_NOP: ;NO OPERATION
|
||
RET
|
||
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #12 *
|
||
;* READ SOFTKEY TABLE *
|
||
;* *
|
||
;* INPUT: (DS:DX) BUFFER ADDR. *
|
||
;* (AX) FUNC. *
|
||
;* 0000 :ALL N-MODE KEY *
|
||
;* 0001-000A :F<>01-F<>10 *
|
||
;* 000B-0014 :F<>01-F<>10 (+SHIFT) *
|
||
;* 0015-001F :CURSOR KEY *
|
||
;* 0020-0024 :F<>11-F<>15 *
|
||
;* 0025-0029 :F<>11-F<>15 (+SHIFT) *
|
||
;* 002A-0033 :F<>01-F<>10 (+CTRL) *
|
||
;* 0034-0038 :F<>11-F<>15 (+CTRL) *
|
||
;* 0039 :CTRL-XFER *
|
||
;* 003A :CTRL-XFER/ *
|
||
;* F<>01-F<>10(+CTRL) *
|
||
;* 003B-00FE :(RESERVED) *
|
||
;* 00FF :ALL H-MODE KEY *
|
||
;* 0100 :ALL DATA KEY *
|
||
;* 0101 :REMAIN DATA KEY *
|
||
;* 0102-FFFF :(RESERVED) *
|
||
;* *
|
||
;* OUTPUT: AX=0101 CALL ONLY *
|
||
;* (AX) DATA KEY BUFFER REMAIN *
|
||
;* *
|
||
;* BREAK: AX *
|
||
;* *
|
||
;************************************************
|
||
|
||
EX_RFKY:
|
||
CLD
|
||
MOV ES,[EXT_SAVDS] ;DESTINATION SEG.
|
||
MOV DI,DX ;DESTINATION PTR
|
||
MOV AX,[EXT_SAVAX] ;PARAM
|
||
CMP AX,00FFH ;ALL KEY ?
|
||
JA EXRF_F0 ; 87/8/25
|
||
JNZ EXRF_FF ; 87/8/25
|
||
JMP short EXRF_A0
|
||
|
||
EXRF_F0: ; 87/8/25
|
||
CMP AX,0101H ; 87/8/25
|
||
JB EXRF_100 ; 87/8/25
|
||
JE EXRF_101 ; 87/8/25
|
||
RET
|
||
EXRF_100: ; 87/8/25
|
||
CALL EXRF_F1 ; 87/8/25
|
||
RET ; 87/8/25
|
||
EXRF_101: ; 87/8/25
|
||
CALL EXRF_S1 ; 87/8/25
|
||
RET ; 87/8/25
|
||
|
||
EXRF_FF:
|
||
SUB AX,1
|
||
JNB EXRF_C
|
||
EXRF_P0:
|
||
MOV SI,OFFSET FKYTBL+1
|
||
MOV DL,10
|
||
MOV AL,0
|
||
EXRF_P1:
|
||
MOV CX,15
|
||
REP MOVSB
|
||
STOSB
|
||
INC SI
|
||
DEC DL
|
||
JNZ EXRF_P1
|
||
;
|
||
ADD SI,80 ;SKIP F.11 - F.15
|
||
MOV DL,10
|
||
EXRF_P2:
|
||
MOV CX,15
|
||
REP MOVSB
|
||
STOSB
|
||
INC SI
|
||
DEC DL
|
||
JNZ EXRF_P2
|
||
;
|
||
ADD SI,80 ;SKIP SHIFT F.11 - SHIFT F.15
|
||
MOV DL,11
|
||
EXRF_P3:
|
||
MOV CX,5
|
||
REP MOVSB
|
||
STOSB
|
||
ADD SI,3
|
||
DEC DL
|
||
JNZ EXRF_P3
|
||
RET
|
||
|
||
EXRF_A0:
|
||
;READ ALL SOFTKEYS
|
||
MOV SI,OFFSET FKYTBL+1 ;SRCE PTR
|
||
MOV DL,30 ;LOOP CNT 1
|
||
MOV AL,0
|
||
EXRF_A1:
|
||
MOV CX,15 ;
|
||
REP MOVSB ;
|
||
STOSB
|
||
INC SI
|
||
DEC DL
|
||
JNZ EXRF_A1
|
||
MOV DL,11 ;LOOP CNT 1
|
||
EXRF_A2:
|
||
MOV CX,5
|
||
REP MOVSB
|
||
STOSB
|
||
ADD SI,3
|
||
DEC DL
|
||
JNZ EXRF_A2
|
||
;
|
||
MOV SI,OFFSET CTRLFKY+1
|
||
MOV DL,15
|
||
EXRF_A3: ;CTRL-FKY (84/11/22)
|
||
MOV CX,15
|
||
REP MOVSB
|
||
STOSB
|
||
INC SI
|
||
DEC DL
|
||
JNZ EXRF_A3
|
||
RET
|
||
;
|
||
EXRF_C:
|
||
CMP AX,28H ; 87/9/24
|
||
JA EXRF_SKIP
|
||
push ds
|
||
push cs
|
||
pop ds
|
||
MOV BX,OFFSET FC_TABLE
|
||
XLAT BX
|
||
DEC AX
|
||
pop ds
|
||
EXRF_SKIP:
|
||
CMP AX,38H ;ILLEGAL PARAM ?
|
||
JNB EXRF_C2 ;Y
|
||
CMP AX,1EH ;FNC_KEY ?
|
||
JNB EXRF_CC ;NO, KEY CODE
|
||
; FUNCTION KEY
|
||
MOV CL,4
|
||
SHL AX,CL
|
||
MOV SI,AX
|
||
ADD SI,OFFSET FKYTBL+1 ;SRCE PTR
|
||
MOV CX,15
|
||
JMP SHORT EXRF_C1
|
||
; KEY CODE
|
||
EXRF_CC:
|
||
CMP AX,29H ;
|
||
JNB EXRF_CT
|
||
SUB AX,1EH
|
||
MOV CL,3
|
||
SHL AX,CL
|
||
MOV SI,AX
|
||
ADD SI,OFFSET KBCODTBL+1
|
||
MOV CX,5
|
||
JMP SHORT EXRF_C1
|
||
; CTRL-FKY
|
||
EXRF_CT:
|
||
SUB AX,29H ;87/9/22
|
||
MOV CL,4
|
||
SHL AX,CL
|
||
MOV SI,AX
|
||
ADD SI,OFFSET CTRLFKY+1
|
||
MOV CX,15
|
||
EXRF_C1:
|
||
REP MOVSB
|
||
MOV AL,0
|
||
STOSB
|
||
EXRF_C3:
|
||
RET
|
||
|
||
;**** CTRL + XFER INFO. GET 87/9/22 ****
|
||
EXRF_C2:
|
||
CMP AX,41
|
||
JB EXRF_C3
|
||
CMP AX,57 ;CASE (AX : 39H)
|
||
JA EXRF_C3 ; AX > 39H
|
||
JZ EXRF_CTA ; AX = 39H
|
||
EXRF_CT0: ;CTRL-FKY
|
||
CMP AX,50
|
||
JNA EXRF_CT1
|
||
CMP AX,56 ;AX = 38H ?
|
||
JNZ EXRF_C3
|
||
MOV AX,40
|
||
EXRF_CT1:
|
||
SUB AX,41
|
||
MOV CL,4
|
||
SHL AX,CL
|
||
MOV SI,AX
|
||
ADD SI,OFFSET CTRLFKY+1
|
||
MOV CX,15
|
||
JMP SHORT EXRF_C1
|
||
|
||
;**** CTRL + XFER & CTRL + f.x INFO. GET ***
|
||
;**** 87/9/22 ***
|
||
EXRF_CTA:
|
||
MOV AX,56
|
||
CALL EXRF_CT0 ;CTRL + XFER INFO. GET
|
||
MOV CX,10
|
||
EXRF_CTA1: ;CTRL + f.x INFO. GET
|
||
PUSH CX
|
||
MOV AX,51
|
||
SUB AX,CX
|
||
CALL EXRF_CT0
|
||
POP CX
|
||
LOOP EXRF_CTA1
|
||
RET
|
||
|
||
; ALL DATA 87/8/25
|
||
|
||
EXRF_F1:
|
||
MOV SI,OFFSET CHRTBL
|
||
MOV CX,514
|
||
REP MOVSB
|
||
RET
|
||
|
||
; BUFFER SIZE 87/8/25
|
||
|
||
EXRF_S1:
|
||
MOV BX,[BUFSIZE]
|
||
MOV AX,512
|
||
SUB AX,BX
|
||
MOV [EXT_SAVAX],AX
|
||
RET
|
||
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #13 *
|
||
;* SET SOFTKEY TABLE *
|
||
;* *
|
||
;* INPUT: (DS:DX) BUFFER ADDR. *
|
||
;* (AX) FUNC. *
|
||
;* 0000 :ALL N-MODE KEY *
|
||
;* 0001-000A :F<>01-F<>10 *
|
||
;* 000B-0014 :F<>01-F<>10 (+SHIFT) *
|
||
;* 0015-001F :CURSOR KEY *
|
||
;* 0020-0024 :F<>11-F<>15 *
|
||
;* 0025-0029 :F<>11-F<>15 (+SHIFT) *
|
||
;* 002A-0033 :F<>01-F<>10 (+CTRL) *
|
||
;* 0034-0038 :F<>11-F<>15 (+CTRL) *
|
||
;* 0039 :CTRL-XFER *
|
||
;* 003A :CTRL-XFER/ *
|
||
;* F<>01-F<>10(+CTRL) *
|
||
;* 003B-00FE :(RESERVED) *
|
||
;* 00FF :ALL H-MODE KEY *
|
||
;* 0100 :ALL DATA KEY *
|
||
;* 0101 :ONE DATA KEY *
|
||
;* 0102 :CLEAR DATA KEY ALL *
|
||
;* 0103-FFFF :(RESERVED) *
|
||
;* *
|
||
;* OUTPUT: AX=0101 CALL ONLY *
|
||
;* (AX) 0000 :SUCCESS *
|
||
;* FFFF :ERROR(OVERFLOW) *
|
||
;* *
|
||
;* BREAK: AX *
|
||
;* *
|
||
;************************************************
|
||
|
||
EX_SFKY:
|
||
MOV ES,cs:[bdata_seg] ;SET OUR SEG (DEST)
|
||
CLD
|
||
MOV AX,[EXT_SAVAX] ;PARAM
|
||
MOV DS,[EXT_SAVDS] ;SRCE SEG.
|
||
MOV SI,DX ;SRCE PTR
|
||
CMP AX,0FFH
|
||
JA EXSF_F0 ; 87/8/25
|
||
JNZ EXSF_FF ; 87/8/25
|
||
JMP short EXSF_A0
|
||
EXSF_F0: ; 87/8/25
|
||
CMP AX,0101H ; 87/8/25
|
||
JB EXSF_100 ; 87/8/25
|
||
JE EXSF_101 ; 87/8/25
|
||
CMP AX,0102H ; 87/09/10
|
||
JE EXSF_102 ; 87/09/10
|
||
RET
|
||
EXSF_100: ; 87/8/25
|
||
CALL EXSF_F1 ;SET ENTIRE TABLE 87/8/25
|
||
RET ; 87/8/25
|
||
EXSF_101: ; 87/8/25
|
||
CALL EXSF_S1 ;SET 1 ENTRY 87/8/25
|
||
RET ; 87/8/25
|
||
EXSF_102: ; 87/09/10
|
||
CALL EXSF_D1 ;DELETE ALL DATA-KEY 87/09/10
|
||
RET ; 87/09/10
|
||
|
||
EXSF_FF:
|
||
SUB AX,1
|
||
JNB EXSF_C
|
||
EXSF_P0:
|
||
MOV DI,OFFSET FKYTBL
|
||
MOV DL,10
|
||
EXSF_P1:
|
||
MOV CX,15
|
||
CALL EXS_CNTCHK
|
||
REP MOVSB
|
||
INC SI
|
||
DEC DL
|
||
JNZ EXSF_P1
|
||
;
|
||
ADD DI,80 ;SKIP F.11 - F.15
|
||
MOV DL,10
|
||
EXSF_P2:
|
||
MOV CX,15
|
||
CALL EXS_CNTCHK
|
||
REP MOVSB
|
||
INC SI
|
||
DEC DL
|
||
JNZ EXSF_P2
|
||
;
|
||
ADD DI,80 ;SKIP SHIFT F.11 - SHIFT F.15
|
||
MOV DL,11
|
||
EXSF_P3:
|
||
MOV CX,5
|
||
CALL EXS_CNTCHK
|
||
REP MOVSB
|
||
INC SI
|
||
ADD DI,2
|
||
DEC DL
|
||
JNZ EXSF_P3
|
||
JMP short EXSF_A4
|
||
EXSF_A0:
|
||
;SET ALL SOFT KEYS
|
||
MOV DI,OFFSET FKYTBL
|
||
MOV DL,30 ;LOOP CNT 1
|
||
EXSF_A1:
|
||
MOV CX,15
|
||
CALL EXS_CNTCHK
|
||
REP MOVSB
|
||
INC SI
|
||
DEC DL
|
||
JNZ EXSF_A1
|
||
MOV DL,11 ;LOOP CNT 1
|
||
EXSF_A2:
|
||
MOV CX,5
|
||
CALL EXS_CNTCHK
|
||
REP MOVSB
|
||
INC SI
|
||
ADD DI,2
|
||
DEC DL
|
||
JNZ EXSF_A2
|
||
MOV DI,OFFSET CTRLFKY
|
||
MOV DL,15
|
||
EXSF_A3:
|
||
MOV CX,15
|
||
CALL EXS_CNTCHK
|
||
REP MOVSB
|
||
INC SI
|
||
DEC DL
|
||
JNZ EXSF_A3
|
||
EXSF_A4:
|
||
CMP es:[FKYSW],0
|
||
JE EXSF_C2
|
||
JMP SHORT EXSF_C2
|
||
;
|
||
EXSF_C:
|
||
CMP AX,28H
|
||
JA EXSF_SKIP
|
||
PUSH DS
|
||
PUSH CS
|
||
POP DS
|
||
MOV BX,OFFSET FC_TABLE
|
||
XLAT BX
|
||
DEC AX
|
||
POP DS
|
||
EXSF_SKIP:
|
||
CMP AX,38H ;ILLEGAL PARAM ?
|
||
JNB EXSF_C2 ;Y
|
||
CMP AX,1EH ;FNC KEY ?
|
||
JNB EXSF_CC
|
||
; FUNCTION KEY
|
||
MOV CL,4
|
||
SHL AX,CL
|
||
MOV DI,AX
|
||
ADD DI,OFFSET FKYTBL
|
||
MOV CX,15
|
||
JMP SHORT EXSF_C1
|
||
; KEY CODE
|
||
EXSF_CC:
|
||
CMP AX,29H ;87/9/22
|
||
JNB EXSF_CT
|
||
SUB AX,1EH
|
||
MOV CL,3
|
||
SHL AX,CL
|
||
MOV DI,AX
|
||
ADD DI,OFFSET KBCODTBL
|
||
MOV CX,5
|
||
JMP SHORT EXSF_C1
|
||
EXSF_CT:
|
||
SUB AX,29H ;87/9/22
|
||
MOV CL,4
|
||
SHL AX,CL
|
||
MOV DI,AX
|
||
ADD DI,OFFSET CTRLFKY
|
||
MOV CX,15
|
||
EXSF_C1:
|
||
CALL EXS_CNTCHK
|
||
REP MOVSB
|
||
EXSF_C3:
|
||
MOV DS,CS:[BDATA_SEG]
|
||
CALL DSPFKY ;DISPLAY SOFTKEY
|
||
RET
|
||
|
||
;**** CTRL + XFER INFO. SET 87/9/22 ****
|
||
EXSF_C2:
|
||
CMP AX,41
|
||
JB EXSF_C3
|
||
CMP AX,57 ;CASE (AX : 39H)
|
||
JA EXSF_C3 ; AX > 39H
|
||
JZ EXSF_CTA ; AX = 39H
|
||
EXSF_CT0:
|
||
CMP AX,50
|
||
JNA EXSF_CT1
|
||
CMP AX,56 ;AX = 38H ?
|
||
JNZ EXSF_C3
|
||
MOV AX,40
|
||
EXSF_CT1:
|
||
SUB AX,41
|
||
MOV CL,4
|
||
SHL AX,CL
|
||
MOV DI,AX
|
||
ADD DI,OFFSET CTRLFKY
|
||
MOV CX,15
|
||
JMP SHORT EXSF_C1
|
||
|
||
;**** CTRL + XFER & CTRL + f.x INFO. SET ***
|
||
;**** 87/9/22 ***
|
||
EXSF_CTA:
|
||
MOV AX,56
|
||
PUSH DS
|
||
PUSH SI
|
||
PUSH DI
|
||
CALL EXSF_CT0 ;CTRL + XFER INFO. SET
|
||
POP DI
|
||
POP SI
|
||
POP DS
|
||
ADD SI,16
|
||
ADD DI,16
|
||
MOV CX,10
|
||
EXSF_CTA1: ;CTRL + f.x INFO. SET
|
||
PUSH CX
|
||
PUSH DS
|
||
PUSH SI
|
||
PUSH DI
|
||
MOV AX,51
|
||
SUB AX,CX
|
||
CALL EXSF_CT0
|
||
POP DI
|
||
POP SI
|
||
ADD DI,16
|
||
ADD SI,16
|
||
POP DS
|
||
POP CX
|
||
LOOP EXSF_CTA1
|
||
RET
|
||
|
||
; ALL ENTRY SET (512 BYTE) 87/8/25
|
||
|
||
EXSF_F1:
|
||
MOV DI,OFFSET CHRTBL+2
|
||
ADD SI,2
|
||
XOR BX,BX ; 880520
|
||
XOR AX,AX ; 880520
|
||
MOV CX,0512
|
||
REP MOVSB
|
||
MOV DI,OFFSET CHRTBL+2
|
||
MOV CX,DI ; 87/9/14
|
||
ADD CX,512 ; 87/9/14
|
||
|
||
EXSF_F2:
|
||
CMP DI,CX ; 87/9/15
|
||
JAE EXSF_F3 ; 87/9/14
|
||
CMP BYTE PTR ES:[DI],00H
|
||
JE EXSF_F3
|
||
MOV AL,ES:[DI]
|
||
ADD DI,AX ;BUFFER SIZE
|
||
INC BX ;ENTRY COUNTER
|
||
JMP EXSF_F2
|
||
|
||
EXSF_F3:
|
||
SUB DI,OFFSET CHRTBL+2
|
||
MOV ES:[BUFSIZE],DI
|
||
MOV DI,OFFSET CHRTBL
|
||
MOV ES:[DI],BX
|
||
|
||
; NULL PADDING
|
||
|
||
CMP ES:[BUFSIZE],512 ; 87/9/14
|
||
JAE EXSF_F4 ; 87/9/14
|
||
MOV CX,512
|
||
SUB CX,ES:[BUFSIZE]
|
||
ADD DI,2
|
||
ADD DI,ES:[BUFSIZE]
|
||
MOV AL,00H
|
||
REP STOSB
|
||
|
||
EXSF_F4: ; 87/9/14
|
||
RET
|
||
|
||
; 1 ENTRY SET 87/8/25
|
||
|
||
EXSF_S1:
|
||
MOV DI,OFFSET CHRTBL+2 ; 880520
|
||
;;;; ADD DI,ES:[BUFSIZE] ;COMMENT ------ 880520
|
||
;;;; ADD DI,2 ;COMMENT ------ 880520
|
||
;;;; ADD SI,2 ;COMMENT ------ 880504
|
||
CMP BYTE PTR DS:[SI],3 ;CHECK ENTRY SIZE 880520
|
||
JAE EXSF_S11 ;VALID SIZE 880520
|
||
XOR AX,AX ; 880520
|
||
JMP EXSF_S3
|
||
|
||
EXSF_S11:
|
||
;-------------------------------------------------------------- 880520
|
||
MOV AX,[SI+1] ;AX := KEY CODE
|
||
MOV CX,ES:WORD PTR [CHRTBL] ;CX := # OF ENTRIES
|
||
JCXZ EXSF_S1_ADD ;NO OLD ENTRY
|
||
XOR BX,BX
|
||
EXSF_S1_LOOP:
|
||
CMP AX,ES:[DI+1] ;SAME CODE ?
|
||
JE EXSF_S1_FND ;FOUND SAME CODE
|
||
MOV BL,ES:[DI]
|
||
ADD DI,BX ;NEXT ENTRY
|
||
LOOP EXSF_S1_LOOP
|
||
JMP short EXSF_S1_ADD ;NOT FOUND, ADD ENTRY
|
||
EXSF_S1_FND:
|
||
PUSH SI
|
||
MOV SI,DI
|
||
MOV BL,ES:[DI] ;ENTRY SIZE
|
||
DEC ES:WORD PTR [CHRTBL] ;DECREMENT ENTRY COUNT
|
||
SUB ES:[BUFSIZE],BX ;MINUS OLD ENTRY SIZE
|
||
ADD SI,BX ;POINT TO NEXT ENTRY
|
||
MOV BX,SI
|
||
MOV CX,OFFSET CHRTBL+2+512
|
||
SUB CX,BX ;SHIFT LENGTH
|
||
CLD
|
||
;----------------------------------------------- DOS5 91/06/06 ------
|
||
PUSH DS
|
||
PUSH ES
|
||
POP DS ;DS <- BIOSDATA Seg
|
||
;--------------------------------------------------------------------
|
||
REP MOVSB ;DELETE OLD ENTRY
|
||
;----------------------------------------------- DOS5 91/06/06 ------
|
||
POP DS ;DS <- User Buffer Seg
|
||
;--------------------------------------------------------------------
|
||
POP SI
|
||
CMP BYTE PTR DS:[SI],3 ;CHECK NEW ENTRY SIZE
|
||
JA EXSF_S1_ADD ;ADD ENTRY
|
||
XOR AX,AX ;DELETE ONLY (SIZE = 3)
|
||
JMP short EXSF_S3 ;RETURN
|
||
EXSF_S1_ADD:
|
||
MOV DI,OFFSET CHRTBL+2 ; 880520
|
||
ADD DI,ES:[BUFSIZE] ;POINT LAST ENTRY 880520
|
||
;---------------------------------------------------------------------
|
||
XOR AX,AX ; 880520
|
||
MOV AL,DS:[SI]
|
||
ADD AX,ES:[BUFSIZE]
|
||
CMP AX,512
|
||
JNA EXSF_S2
|
||
MOV AX,-1 ;ERROR (BUFFER OVER)
|
||
JMP short EXSF_S3
|
||
|
||
EXSF_S2:
|
||
PUSH DI
|
||
MOV DI,OFFSET CHRTBL
|
||
;;;; MOV BX,0001H ; COMMENT ------- 880520
|
||
ADD ES:WORD PTR [DI],1 ;ENTRY COUNT 1UP 880520
|
||
MOV ES:[BUFSIZE],AX ;SET NEW VALUE
|
||
XOR CX,CX ; 880520
|
||
MOV CL,DS:[SI]
|
||
POP DI
|
||
REP MOVSB ;COPY NEW ENTRY
|
||
|
||
; NULL PADDING
|
||
|
||
XOR AX,AX ; 880520
|
||
CMP ES:[BUFSIZE],512 ; 87/9/14
|
||
JE EXSF_S3 ; 87/9/14
|
||
MOV CX,512
|
||
SUB CX,ES:[BUFSIZE]
|
||
MOV AL,00H
|
||
REP STOSB ;CLEAR REMAIN OF BUFF
|
||
EXSF_S3:
|
||
MOV ES:[EXT_SAVAX],AX
|
||
RET
|
||
|
||
; DELETE ALL DATA-KEY ASSIGN 1987.09.10 BY ITO
|
||
|
||
EXSF_D1:
|
||
MOV WORD PTR ES:[CHRTBL],0 ;CLEAR EXTRY_COUNT FIELD
|
||
MOV ES:[BUFSIZE],0 ;CLEAR BUFFER SIZE FIELD
|
||
RET
|
||
|
||
;
|
||
;*** SUBROUTINE ***
|
||
;
|
||
EXS_CNTCHK:
|
||
MOV BX,SI ;TABLE ADDR
|
||
MOV AL,0 ;DATA COUNTER
|
||
EXS_CNT1:
|
||
CMP BYTE PTR[BX],00H
|
||
JE EXS_CNTRET
|
||
CMP AL,CL
|
||
JNB EXS_CNTRET
|
||
INC AL
|
||
INC BX
|
||
JMP SHORT EXS_CNT1
|
||
EXS_CNTRET:
|
||
STOSB
|
||
RET
|
||
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #10 *
|
||
;* INITIALIZE THE RS232C PORT *
|
||
;* *
|
||
;* INPUT(HIRESO): *
|
||
;* (DH) INITIALIZE INFO. *
|
||
;* (DL B7-B4) CHANNEL NO. *
|
||
;* (DL B3-B0) TRANSFER RATE *
|
||
;* INPUT(NORMAL): *
|
||
;* (0060:0068-0069) *
|
||
;* INITIALIZE INFO. *
|
||
;* *
|
||
;* OUTPUT(HIRESO): *
|
||
;* (AX) 0000 SUCCESS *
|
||
;* FFFF ERROR (NO BOARD) *
|
||
;* OUTPUT(NORMAL): *
|
||
;* NONE *
|
||
;* *
|
||
;************************************************
|
||
|
||
EX_RSINIT:
|
||
CMP DS:WORD PTR [AUX_HEADER+2],0 ;CHECK DRIVER INSTALLED ?
|
||
JNE EX_RSINIT05 ;OK
|
||
RET
|
||
|
||
;*******87/08/28********
|
||
EX_RSINIT05:
|
||
TEST [SYS_501],08H ;HIRESO MODE?
|
||
JNZ EX_RSINIT06 ;YES,
|
||
MOV AH,0
|
||
INT 19H
|
||
|
||
MOV CX,0 ;RETURN DATA CHECK
|
||
CMP AH,00H ;AH NOT = 00H -- ERROR
|
||
JE EX_RSINIT051
|
||
MOV CX,-1
|
||
EX_RSINIT051:
|
||
MOV [EXT_SAVAX],CX
|
||
RET
|
||
|
||
EX_RSINIT06:
|
||
;------------------------------- 870830 BY ITO -------------------
|
||
TEST AH,11110000B ;CH#0 ?
|
||
JNZ EX_RSI06_NOT_C0 ;NO,
|
||
MOV [MEM_SW1],DH ;SET MEM SW1
|
||
PUSH DX ; 87/9/10
|
||
AND DL,0FH ; 87/9/10
|
||
AND [MEM_SW2],0F0H ; 87/9/10
|
||
OR [MEM_SW2],DL ;SET MEM SW2 87/9/10
|
||
POP DX ; 87/9/10
|
||
;------------------------------------------------------ 88/05/06 -
|
||
JMP short EX_RSINIT07 ;
|
||
EX_RSI06_NOT_C0:
|
||
CMP AH,20H ;CHECK CHANNEL NUMBER
|
||
JA EX_RSINIT061 ;CHANNEL OK
|
||
CMP DS:WORD PTR [AUX1_HEADER+2],0 ;DRIVER INSTALLED ?
|
||
JNE EX_RSINIT07 ;YES,
|
||
EX_RSINIT061:
|
||
RET
|
||
|
||
EX_RSINIT07:
|
||
;-----------------------------------------------------------------
|
||
XOR BH,BH ;
|
||
MOV AH,DL
|
||
AND AH,30H
|
||
MOV BL,AH
|
||
MOV CL,03H ;
|
||
SHR BL,CL ;
|
||
MOV BH,00H ;
|
||
MOV ES,DS:[AUX_HEADER+2] ;SET RS-232C DRIVER SEGMENT ADDRESS
|
||
MOV DI,ES:[BX+40H] ;SET BUFFER OFFSET ADDRESS
|
||
OR AH,07H ;SET COMMAND (INITIALIZE_EX)
|
||
MOV BX,0 ;85/02/08
|
||
TEST DH,01
|
||
JZ EX_RSINIT10
|
||
OR BH,30H ;SET XON/OFF ENABLE BIT
|
||
EX_RSINIT10:
|
||
MOV AL,DL
|
||
AND AL,0FH
|
||
INC AL
|
||
AND DH,0FEH ;SET X16
|
||
OR DH,02H ;
|
||
TEST AH,30H ;
|
||
JNZ EX_RSINIT20 ;
|
||
TEST AL,08H ;
|
||
JNZ EX_RSINIT20 ;
|
||
OR DH,001H ;IF >=4800BPS X16
|
||
EX_RSINIT20:
|
||
MOV CH,DH ;SET MODE
|
||
MOV CL,37H ;SET COMMAND FOR 8251
|
||
DEC AL
|
||
DEC AL
|
||
TEST CH,04H
|
||
JNZ EX_RSINIT30
|
||
OR BH,40H ;SET SI/SO ENABLE
|
||
EX_RSINIT30:
|
||
PUSH DS
|
||
PUSH BX
|
||
MOV BX,0F800H
|
||
MOV DS,BX
|
||
CMP WORD PTR DS:[7FFCH],00H
|
||
POP BX
|
||
POP DS
|
||
MOV DX,256 ;
|
||
JNZ POINT_11 ;
|
||
INC DX ;
|
||
POINT_11: ;
|
||
PUSH AX ;SAVE CH NO.
|
||
INT 19H
|
||
OR AH,AH
|
||
POP AX ;
|
||
JZ EX_RSINIT50 ;
|
||
EX_RSINIT40:
|
||
MOV [EXT_SAVAX],-1
|
||
RET
|
||
|
||
EX_RSINIT50:
|
||
MOV [EXT_SAVAX],0
|
||
;
|
||
;===== SET VECT ADDRESS ================ ;DELETE THIS CODE
|
||
; ;88/05/06
|
||
RET
|
||
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #14 *
|
||
;* RS232C FUNCTION *
|
||
;* *
|
||
;* INPUT: (DL B7-B4) CHANNEL NO. *
|
||
;* (DL B3-B0) COMMAND *
|
||
;* 0000 GET DATA LENGTH *
|
||
;* 0001 INITIALIZE *
|
||
;* (BX) INITIALIZE INFO. *
|
||
;* 0110 <<NEW>>DOS3.3 *
|
||
;* GET INITIALIZE PARA. *
|
||
;* 0111 <<NEW>>DOS3.3 *
|
||
;* INSTALL CHECK *
|
||
;* *
|
||
;* OUTPUT: *
|
||
;* COMMAND=0000: *
|
||
;* (AX) DATA LENGTH *
|
||
;* COMMAND=0001: *
|
||
;* (AX) 0000 SUCCESS *
|
||
;* FFFF ERROR ( NO BOARD ) *
|
||
;* COMMAND=0110: *
|
||
;* (BX) INITIALIZE PARA. *
|
||
;* COMMAND=0111: *
|
||
;* (AX) 0000 BOARD INSTALLED *
|
||
;* FFFF NOT *
|
||
;* *
|
||
;************************************************
|
||
|
||
EX_RSFNC:
|
||
;-------------------------------------------------------- 88/05/06 ---
|
||
; CMP CS:WORD PTR [AUX_HEADER+2],0 ;CHECK DRIVER INSTALLED
|
||
; JNE EX_RSFNC_10 ;OK
|
||
; RET
|
||
;---------------------------------------------------------------------
|
||
;*******87/09/10********
|
||
EX_RSFNC_10:
|
||
XOR CX,CX
|
||
MOV AH,DL
|
||
AND AH,0F0H ;CHANNEL NUMBER ONLY
|
||
;-------------------------------------------------------- 88/05/06 ---
|
||
; CMP AH,20H ;CH NO. CHECK
|
||
; JNA EX_RSFNC_100
|
||
; RET
|
||
;----------------
|
||
MOV SI,OFFSET AUX_HEADER+2 ;DRIVER ADDRESS FOR CH#0
|
||
CMP AH,00H ;CH #0 ?
|
||
JE EX_RSFNC_100 ;YES
|
||
MOV SI,OFFSET AUX1_HEADER+2 ;DRIVER ADDRESS FOR CH#1 & 2
|
||
CMP AH,20H ;CH#1 OR 2 ?
|
||
JA EX_RSFNC_104 ;NO, ERROR RETURN
|
||
CMP DS:WORD PTR [SI],0 ;INSTALL CHECK 89/07/28
|
||
JNZ EX_RSFNC_100 ;NOT INSTALL, ERROR RETURN 89/07/28
|
||
JMP EX_RSFNC_1052_1 ; 89/07/28
|
||
;---------------------------------------------------------------------
|
||
EX_RSFNC_100:
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
MOV AH,DL
|
||
AND AH,0FH ;COMMAND ONLY
|
||
CMP AH,00H ;COMMAND = 0
|
||
JNE EX_RSFNC_101 ;NO,
|
||
JMP short EX_RSFNC_DATA ; DATA LENGTH GET
|
||
EX_RSFNC_101:
|
||
CMP AH,01H ;COMMAND = 1
|
||
JNE EX_RSFNC_102 ;NO,
|
||
JMP short EX_RSFNC_INIT ; INITIALIZE
|
||
EX_RSFNC_102:
|
||
CMP AH,06H ;COMMAND = 6
|
||
JNE EX_RSFNC_103 ;NO,
|
||
JMP EX_RSFNC_GETP ; GET INITIALIZE PARA.
|
||
EX_RSFNC_103:
|
||
CMP AH,07H ;COMMAND = 7
|
||
JNE EX_RSFNC_104 ;NO,
|
||
JMP EX_RSFNC_INST ; INSTALL CHECK
|
||
EX_RSFNC_104:
|
||
RET ;NO OPERATION RETURN
|
||
;---------------------------------------------------------------------
|
||
|
||
;****************************************
|
||
;* *
|
||
;* GET DATA LENGTH *
|
||
;* *
|
||
;****************************************
|
||
EX_RSFNC_DATA:
|
||
MOV AH,DL
|
||
AND AH,0F0H
|
||
TEST [SYS_501],08H ;H / N MODE ?
|
||
JZ EXRSF_GETN ;N MODE
|
||
|
||
; HIRESO MODE
|
||
EXRSF_GETH:
|
||
OR AH,02H ;H MODE : DATA LENGTH GET
|
||
INT 19H
|
||
JMP short EX_RSFNCSET
|
||
|
||
; NORMAL MODE
|
||
EXRSF_GETN:
|
||
CMP AH,00H ;CH#0
|
||
JNE EXRSF_GN10
|
||
MOV AH,04H
|
||
INT 19H ;CALL BIOS
|
||
JMP short EX_RSFNCSET ; 88/07/28 D
|
||
|
||
EXRSF_GN10:
|
||
CMP AH,10H ;CH#1
|
||
JNE EXRSF_GN20
|
||
MOV AH,04H
|
||
INT 0D4H ;CALL (EX) BIOS
|
||
JMP short EX_RSFNCSET ; 88/07/28 D
|
||
|
||
EXRSF_GN20:
|
||
MOV AH,04H ;CH#2
|
||
INT 0D5H ;CALL (EX) BIOS
|
||
EX_RSFNCSET:
|
||
MOV [EXT_SAVAX],CX ;DATA LENGTH SET
|
||
RET ; 88/03/31
|
||
; JMP EX_RSFNCRET ; 88/03/31 D
|
||
|
||
;****************************************
|
||
;* *
|
||
;* INITIALIZE THE RS_232C *
|
||
;* *
|
||
;****************************************
|
||
EX_RSFNC_INIT:
|
||
MOV AH,DL
|
||
AND AH,0F0H ;CH# ONLY
|
||
|
||
AND DL,0F0H ; 87/9/4
|
||
AND BL,0FH ; 87/9/4
|
||
OR DL,BL ; 87/9/4
|
||
MOV DH,BH ; 87/9/4
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
CMP AH,00H
|
||
JNE EXRSF0E_00
|
||
MOV [MEM_SW1],DH ;SET MEM SW1
|
||
PUSH DX
|
||
AND DL,0FH
|
||
AND [MEM_SW2],0F0H
|
||
OR [MEM_SW2],DL ;SET MEM SW2
|
||
POP DX
|
||
JMP short EXRSF0E_INIT
|
||
EXRSF0E_00:
|
||
PUSH BX
|
||
MOV DI,OFFSET CH1MSW1 ;PARAM AREA ADDRESS
|
||
XOR BX,BX
|
||
MOV BL,AH ;CHANNEL NUMBER
|
||
MOV CL,4
|
||
SHR BX,CL
|
||
DEC BX
|
||
SHL BX,1 ;WORD OFFSET
|
||
PUSH DX
|
||
AND DL,0FH
|
||
MOV [BX+DI],DH ;SET INIT INFO -1
|
||
MOV [BX+DI+1],DL ;SET INIT INFO -2
|
||
POP DX
|
||
POP BX
|
||
EXRSF0E_INIT:
|
||
;---------------------------------------------------------------------
|
||
TEST [SYS_501],08H ;H / N MODE ?
|
||
JNZ EX_RSFNC_11 ;H MODE
|
||
|
||
; NORMAL MODE
|
||
CMP AH,00H ;CH#0
|
||
JNE EX_RSFNC_105
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
; MOV [MEM_SW1],DH ;SET MEM SW1
|
||
; PUSH DX
|
||
; AND DL,0FH
|
||
; AND [MEM_SW2],0F0H
|
||
; OR [MEM_SW2],DL ;SET MEM SW2
|
||
; POP DX
|
||
; JMP EX_RSFNC_11
|
||
;----------------------------------------
|
||
MOV AH,00H
|
||
INT 19H ;CALL BIOS (INITIALIZE)
|
||
JMP short EX_RSFNC_1052 ;CHECK RESULT
|
||
;---------------------------------------------------------------------
|
||
|
||
EX_RSFNC_105:
|
||
MOV CH,BH
|
||
CMP AH,10H ;CH#1
|
||
JNE EX_RSFNC_1051
|
||
MOV AH,00H
|
||
INT 0D4H
|
||
JMP short EX_RSFNC_1052
|
||
|
||
EX_RSFNC_1051:
|
||
MOV AH,00 ;CH#2
|
||
INT 0D5H
|
||
EX_RSFNC_1052:
|
||
MOV CX,0 ;RETURN DATA CHECK
|
||
CMP AH,00H ;AH NOT = 00H -- ERROR
|
||
JE EX_RSFNC_1053
|
||
EX_RSFNC_1052_1: ; 89/07/28
|
||
MOV CX,-1
|
||
EX_RSFNC_1053:
|
||
MOV [EXT_SAVAX],CX
|
||
RET
|
||
; JMP EX_RSFNCRET ; 88/05/06
|
||
|
||
; HIRESO MODE
|
||
EX_RSFNC_11:
|
||
CALL EX_RSINIT
|
||
EX_RSFNCRET:
|
||
RET
|
||
;*******87/09/10********
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
;****************************************
|
||
;* *
|
||
;* GET INITIALIZE INFO. *
|
||
;* *
|
||
;****************************************
|
||
EX_RSFNC_GETP:
|
||
MOV AH,DL ;CHANNEL NUMBER
|
||
AND AH,0F0H
|
||
CMP AH,00H ;CH#0 ?
|
||
JNE EXRSF0E06_0 ;NO,
|
||
MOV AH,[MEM_SW1] ;GET MEM SW1
|
||
MOV AL,[MEM_SW2] ;GET MEM SW2
|
||
AND AL,0FH ;BAUD RATE ONLY
|
||
JMP short EXRSF0E06_DONE
|
||
EXRSF0E06_0:
|
||
MOV DI,OFFSET CH1MSW1 ;PARAM AREA ADDRESS
|
||
XOR BX,BX
|
||
MOV BL,AH ;CHANNEL NUMBER
|
||
MOV CL,4
|
||
SHR BX,CL
|
||
DEC BX
|
||
SHL BX,1 ;WORD OFFSET
|
||
MOV AH,[BX+DI] ;GET INIT INFO -1
|
||
MOV AL,[BX+DI+1] ;GET INIT INFO -2
|
||
EXRSF0E06_DONE:
|
||
MOV [EXT_SAVBX],AX ;SET TO (BX) REG.
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* BOARD INSTALL CHECK *
|
||
;* *
|
||
;****************************************
|
||
|
||
EX_RSFNC_INST:
|
||
IN AL,0B3H ;READ BOARD STATUS
|
||
CMP AL,-1
|
||
MOV AX,0000H ;INSTALLED
|
||
JNE EXRSF0E07_DONE
|
||
NOT AX ;NOT INSTALLED
|
||
EXRSF0E07_DONE:
|
||
MOV [EXT_SAVAX],AX ;SET RESULT
|
||
RET
|
||
;---------------------------------------------------------------------
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #15 *
|
||
;* SET/RESET 3270SE/ETOS52G MODE *
|
||
;* *
|
||
;* INPUT: *
|
||
;* *
|
||
;* OUTPUT: *
|
||
;* *
|
||
;************************************************
|
||
|
||
EX_CTRLFLG:
|
||
MOV AX,[EXT_SAVAX]
|
||
OR AX,AX
|
||
JS EX_GET_FLAG ;JUMP IF AX >= 8000h 88/03/31
|
||
JZ EX_SET_FLAG
|
||
DEC AX
|
||
JZ EX_RESET_FLAG
|
||
DEC AX
|
||
JZ EX_SET_FLAG2
|
||
DEC AX
|
||
JZ EX_RESET_FLAG2
|
||
RET ; 88/05/06
|
||
; JMP EX_CTRLDONE ; 88/05/06
|
||
EX_SET_FLAG:
|
||
OR [CTRLCMD],01H ; 88/03/31
|
||
RET ; 88/05/06
|
||
; JMP EX_CTRLDONE ; 88/05/06
|
||
EX_SET_FLAG2:
|
||
OR [CTRLCMD],02H ; 88/03/31
|
||
RET ; 88/05/06
|
||
; JMP EX_CTRLDONE ; 88/05/06
|
||
EX_RESET_FLAG:
|
||
AND [CTRLCMD],0FEH ; 88/03/31
|
||
RET ; 88/05/06
|
||
; JMP EX_CTRLDONE ; 88/05/06
|
||
EX_RESET_FLAG2:
|
||
AND [CTRLCMD],0FDH ; 88/03/31
|
||
EX_CTRLDONE:
|
||
RET
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
EX_GET_FLAG:
|
||
MOV CL,[CTRLCMD] ;GET FLAGS
|
||
NOT CX ;REVERSE FLAGS
|
||
AND AX,NOT 8000H ;STRIP SIGN BIT
|
||
JNZ EX_GET_FLAG2
|
||
AND CX,0001H ;CX=0 CTRL-FX IF SOFT KEY
|
||
JMP short EX_GET_FLAGD ;CX=1 NOT (SYSTEM KEY)
|
||
EX_GET_FLAG2:
|
||
SUB AX,2
|
||
JNZ EX_CTRLDONE ;INVALID PARAM
|
||
AND CX,0002H ;CX=0 CTRL-XFER IF SOFT KEY
|
||
SHR CX,1 ;CX=1 NOT (SYSTEM KEY)
|
||
EX_GET_FLAGD:
|
||
MOV [EXT_SAVAX],CX
|
||
RET
|
||
;---------------------------------------------------------------------
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #16 *
|
||
;* DIRECT CONSOLE OUTPUT *
|
||
;* *
|
||
;* INPUT: *
|
||
;* *
|
||
;* OUTPUT: *
|
||
;* *
|
||
;************************************************
|
||
;****************************************
|
||
;* *
|
||
;* MAIN *
|
||
;* *
|
||
;****************************************
|
||
|
||
EXB_16:
|
||
MOV BX,[EXT_SAVAX]
|
||
XCHG BH,BL
|
||
XOR BH,BH
|
||
SHL BX,1
|
||
SHL BX,1
|
||
MOV SI,OFFSET EX16TBL
|
||
MOV AX,CS:[BX+SI] ;ROUTINE 1
|
||
MOV BX,CS:2[BX+SI] ;ROUTINE 2
|
||
CALL AX
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* DISPLAY 1 CHAR *
|
||
;* *
|
||
;****************************************
|
||
|
||
EX16_DSP:
|
||
MOV CL,DL
|
||
CALL BX
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* STRING DATA DISPLAY *
|
||
;* *
|
||
;****************************************
|
||
|
||
EX16_STR:
|
||
MOV ES,[EXT_SAVDS] ;USER SEGMENT
|
||
MOV BX,DX ;BUFFER OFFSET
|
||
EX16_STR_1:
|
||
MOV CL,ES:[BX] ;GET
|
||
CMP CL,'$' ;END OF STRING ?
|
||
JE EX16_STR_2 ;Y
|
||
PUSH BX
|
||
CALL CRTOUT ;DISPLAY
|
||
POP BX
|
||
INC BX ;NEXT DATA
|
||
JMP SHORT EX16_STR_1
|
||
EX16_STR_2:
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* SET ATTRIBUTE *
|
||
;* *
|
||
;****************************************
|
||
EX16_ATTR:
|
||
MOV [CURATTR],DL
|
||
MOV [CURATTR2],DX ; 89/08/16
|
||
EX16_ATTR10:
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* DIRECT CURSOR ADRESSING *
|
||
;* *
|
||
;****************************************
|
||
EX16_CUP:
|
||
ADD DX,2020H
|
||
XCHG DH,DL
|
||
MOV CX,DX ;CL:LINE CH:COLUMN
|
||
CALL BX
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* INDEX / REVERSE INDEX *
|
||
;* *
|
||
;****************************************
|
||
EX16_UPDN:
|
||
CALL BX ;ESCIND OR ESCRI
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* CUU,CUD,CUF,CUB ,IL OR DL *
|
||
;* *
|
||
;****************************************
|
||
EX16_ANSI1:
|
||
XOR DH,DH
|
||
MOV CX,DX
|
||
CALL BX
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* ED / EL *
|
||
;* *
|
||
;****************************************
|
||
EX16_ANSI2:
|
||
XOR DH,DH
|
||
MOV AX,DX
|
||
CALL BX
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* CHANGE CHARACTER MODE *
|
||
;* *
|
||
;****************************************
|
||
EX16_CHR:
|
||
OR DL,30H
|
||
MOV CL,DL
|
||
CALL BX ;MODE SELECT
|
||
RET
|
||
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #17 *
|
||
;* SET/RESET & GET PRINTER OUTPUT MODE *
|
||
;* *
|
||
;* INPUT: *
|
||
;* *
|
||
;* OUTPUT: *
|
||
;* *
|
||
;************************************************
|
||
;****************************************
|
||
;* *
|
||
;* SET / RESET FUNCTION *
|
||
;* *
|
||
;****************************************
|
||
|
||
EX_PRFLG:
|
||
MOV AX,[EXT_SAVAX] ;PARAM
|
||
TEST AX,8000H ;GET PRINTER MODE 87/8/25
|
||
JNZ EX_PRG ; 87/8/25
|
||
TEST AX,0020H ;CR/LF OUTPUT 87/8/25
|
||
JNZ EX_PR3 ; 87/8/25
|
||
OR AX,AX
|
||
JZ EX_PR1_5
|
||
DEC AX
|
||
JZ EX_PR2
|
||
SUB AX,0FH
|
||
JZ EX_PRVAT
|
||
DEC AX
|
||
JNZ EX_PRRET
|
||
AND [PR_RATIO],NOT KICODE ;SET KI=ESC+K MODE
|
||
JMP SHORT EX_PRRET
|
||
EX_PR1_5:
|
||
OR [PR_RATIO],RATIOAK ;SET 1:1.5 MODE
|
||
JMP SHORT EX_PRRET
|
||
EX_PRVAT:
|
||
OR [PR_RATIO],KICODE ;SET KI=ESC+t MODE
|
||
JMP SHORT EX_PRRET
|
||
EX_PR2:
|
||
AND [PR_RATIO],NOT RATIOAK ;SET 1:2 MODE
|
||
JMP SHORT EX_PRRET
|
||
|
||
;*******87/8/25*********
|
||
EX_PR3:
|
||
CMP AX,0021H
|
||
JB EX_PR5
|
||
JE EX_PR4
|
||
JMP SHORT EX_PRRET
|
||
EX_PR4:
|
||
AND [PR_RATIO],NOT CRLFP ;SET CR/LF OUT
|
||
JMP SHORT EX_PRRET
|
||
EX_PR5:
|
||
OR [PR_RATIO],CRLFP ;SET CR/LF NOT OUT
|
||
|
||
;***********************
|
||
EX_PRRET:
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* GET FUNCTION *
|
||
;* *
|
||
;****************************************
|
||
|
||
EX_PRG:
|
||
CMP AX,8000H
|
||
JNE EX_PRG1
|
||
MOV DX,0001H
|
||
JMP short EX_PRG3
|
||
|
||
EX_PRG1:
|
||
CMP AX,8010H
|
||
JNE EX_PRG2
|
||
MOV DX,0002H
|
||
JMP short EX_PRG3
|
||
|
||
EX_PRG2:
|
||
CMP AX,8020H
|
||
JNE SHORT EX_PRG_RET
|
||
MOV DX,0080H
|
||
|
||
EX_PRG3:
|
||
MOV AX,0000H
|
||
MOV AL,[PR_RATIO]
|
||
TEST AX,DX
|
||
MOV AX,0000H
|
||
JNZ EX_PRG_RET
|
||
MOV AX,0001H
|
||
|
||
EX_PRG_RET:
|
||
MOV [EXT_SAVAX],AX
|
||
RET
|
||
|
||
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #18 *
|
||
;* SET IO.SYS VERSION & H/W MODE *
|
||
;* NEW 87/8/14 *
|
||
;* *
|
||
;* INPUT: *
|
||
;* *
|
||
;* OUTPUT: *
|
||
;* *
|
||
;************************************************
|
||
;------------------------------------------------------ 88/03/31 ALL -
|
||
EX_VER:
|
||
;----------------------------------------------------- 90/01/19 ---
|
||
mov ax,[IOSYS_REV]
|
||
mov [EXT_SAVAX],ax
|
||
; MOV [EXT_SAVAX],0004H ; AX=0004H FOR MS-DOS 5.0
|
||
;----------------------------------------------------- 90/01/09 ---
|
||
XOR BX,BX
|
||
MOV ES,BX
|
||
MOV AH,ES:[0501H] ;GET BIOS_FLAG1
|
||
MOV AL,ES:[0458H] ;GET BIOS_FLAG?
|
||
TEST AL,80H ;NEW ARCHTECHTURE ??
|
||
JNZ EXVER_P0
|
||
MOV DH,00H ;PC SERIES
|
||
CALL EXVER_OLDARC ;
|
||
JMP short EXVER_P1
|
||
|
||
EXVER_P0:
|
||
MOV DH,10H ;NPC SERIES
|
||
CALL EXVER_NEWARC
|
||
|
||
EXVER_P1:
|
||
MOV [EXT_SAVDX],DX ;SAVE DX
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* NEW ARC. ROUTINE *
|
||
;* DATE. 88/3/31 *
|
||
;****************************************
|
||
EXVER_NEWARC:
|
||
AND AL,00000111B ;CHECK MACHINE TYPE
|
||
MOV DL,4 ; 90/03/16
|
||
; CMP AL,01H ;X42/44 ?
|
||
; JE EXVERN_00 ;YES (DL)=00
|
||
; INC DL
|
||
; CMP AL,02H ;X43/45 ?
|
||
; JE EXVERN_00 ;YES (DL)=01
|
||
; INC DL
|
||
; CMP AL,04H ;X46 ?
|
||
; JNE EXVERN_10 ;NO
|
||
EXVERN_00:
|
||
TEST AH,00001000B ;HIRESO MODE ?
|
||
JZ EXVERN_10 ;NO, (DH)=10
|
||
INC DH ;YES (DH)=11
|
||
MOV DL,01H ; 90/03/16
|
||
EXVERN_10:
|
||
MOV AL,ES:[487H] ;CPU TYPE CHECK
|
||
CMP AL,04H ;CPU=486?
|
||
JNZ EXVERN_20
|
||
INC DL
|
||
EXVERN_20:
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* OLD ARC. ROUTINE *
|
||
;* DATE. 88/3/31 *
|
||
;****************************************
|
||
EXVER_OLDARC:
|
||
MOV DL,AH ;SAVE AH
|
||
;------------------------------------------------DOS5 91/06/06-----------
|
||
MOV AL,ES:[481h] ;BIOS_FLAG3
|
||
;------------------------------------------------------------------------
|
||
AND AL,01000000B ;ONLY 106KEY BIT
|
||
AND AH,00110000B ;ONLY SYSTEM-TYPE BITS
|
||
OR AL,AH ;MERGE
|
||
MOV AH,ES:[0500H] ;GET BIOS_FLAG INFO.
|
||
AND AH,00000001B ;ONLY EX-SYSTEM-TYPE BIT
|
||
OR AL,AH ;MERGE
|
||
TEST DL,00001000B ;HIRESO MODE ?
|
||
MOV DL,0
|
||
JZ EXVERO_00 ;NO,
|
||
|
||
INC DH ;SET HIRESO MODE BIT
|
||
CMP AL,00H ;98XA ?
|
||
JE EXVERO_DONE ;YES (DL)=00
|
||
INC DL
|
||
CMP AL,20H ;98XL/98XL^2 ?
|
||
JE EXVERO_DONE ;YES (DL)=01
|
||
JMP short EXVERO_DONE0 ;INVALID
|
||
|
||
EXVERO_00:
|
||
CMP AL,00H ;9801 ?
|
||
JE EXVERO_DONE ;YES (DL)=00
|
||
INC DL
|
||
CMP AL,20H ;E/F/M ?
|
||
JE EXVERO_DONE ;YES (DL)=01
|
||
INC DL
|
||
CMP AL,31H ;U2 ?
|
||
JE EXVERO_DONE ;YES (DL)=02
|
||
INC DL
|
||
CMP AL,21H ;VM/VF/VX/UV/XLn/XL^2n/UX/LV/CV ?
|
||
JE EXVERO_DONE ;YES (DL)=03
|
||
INC DL
|
||
CMP AL,61H ;V22/V23 (NEW) ?
|
||
JNE EXVERO_DONE0 ;NO, INVALID
|
||
;YES (DL)=04
|
||
EXVERO_DONE:
|
||
EXVERO_DONE0:
|
||
RET
|
||
;---------------------------------------------------------------------
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #19 *
|
||
;* GET LPTABLE & SINGLE DRIVE INFO. *
|
||
;* NEW 87/8/14 *
|
||
;* *
|
||
;* INPUT: *
|
||
;* *
|
||
;* OUTPUT: *
|
||
;* *
|
||
;************************************************
|
||
|
||
EX_LPTABLE:
|
||
CLD
|
||
MOV ES,[EXT_SAVDS]
|
||
MOV DI,DX
|
||
|
||
; < 96 BYTE BUFFER CLEAR >
|
||
PUSH DI
|
||
MOV CX,96/2
|
||
XOR AX,AX
|
||
REP STOSW
|
||
POP DI
|
||
|
||
; < LPTABLE >
|
||
MOV SI,OFFSET LPTABLE ;LPTABLE OFFSET
|
||
MOV CX,16
|
||
REP MOVSB ;COPY [LPTABLE] CONTENT
|
||
|
||
ADD DI,0AH ;SKIP RFU FIELD
|
||
|
||
; < EXLPTBL >
|
||
MOV SI,OFFSET EXLPTBL ;EXLPTBL POINTER
|
||
MOV CX,26
|
||
REP MOVSW ;COPY [EXLPTBL] CONTENT
|
||
|
||
; < SINGLE DRIVE >
|
||
MOV AL,[SNGDRV_FLG] ;SINGLE DRIVE INFO.
|
||
STOSB ;STORE IT.
|
||
|
||
; < LOGICAL EXTENT >
|
||
MOV AL,[EXTSW] ;LOGICAL EXTENT SWITCH
|
||
STOSB ;STORE IT.
|
||
|
||
; < CURRENT DRIVE >
|
||
MOV AL,[CURDRV] ;CURRENT DRIVE NUMBER
|
||
STOSB ;STORE IT.
|
||
|
||
RET
|
||
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #128 *
|
||
;* GET IO.SYS VARIABLE *
|
||
;* NEW 87/8/14 *
|
||
;* *
|
||
;* INPUT: *
|
||
;* *
|
||
;* OUTPUT: *
|
||
;* *
|
||
;************************************************
|
||
|
||
EX_VARIABLE:
|
||
CLD
|
||
MOV ES,[EXT_SAVDS]
|
||
MOV DI,DX
|
||
|
||
MOV AX,[EXT_SAVAX] ;GET PARAMETER
|
||
CMP AX,8000H ;CMD>8000(FLAGS)?
|
||
JB EXT_VAR00 ;NO,
|
||
CALL MOD_FLAG ;GET FLAG INFO.
|
||
RET
|
||
|
||
EXT_VAR00:
|
||
; < 256 BYTE BUFFER CLEAR >
|
||
PUSH AX
|
||
PUSH DI
|
||
MOV CX,256/2
|
||
XOR AX,AX
|
||
REP STOSW
|
||
POP DI
|
||
POP AX
|
||
|
||
CMP AX,0000H ;CMD=0(DSK INFO.)?
|
||
JNE EXT_VAR10 ;NO,
|
||
CALL DSK_PART ;DISK INFO.
|
||
JMP short EXT_VAR_RET
|
||
|
||
EXT_VAR10:
|
||
CMP AX,0001H ;CMD=1(CON INFO.)?
|
||
JNE EXT_VAR_RET ;NO,
|
||
CALL CON_PART ;COSOLE INFO
|
||
|
||
EXT_VAR_RET:
|
||
RET
|
||
|
||
|
||
;****************************************
|
||
;* *
|
||
;* GET DISK INFO ROUTINE *
|
||
;* DATE. 87/8/14 *
|
||
;****************************************
|
||
DSK_PART:
|
||
; < # OF PARTITION INF >
|
||
MOV SI,OFFSET HD_NUM
|
||
MOV CX,4 ;SET ACTIVE PT/UNIT 88/03/31
|
||
REP MOVSB ;(SASI-HD & NPC-HD)
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
MOV SI,OFFSET HDS_NUM
|
||
MOV CX,7 ;SET ACTIVE PT/UNIT
|
||
REP MOVSB ;(SCSI HD)
|
||
|
||
INC DI ;SKIP RFU FIELD
|
||
;----------------------------------------
|
||
; ADD DI,6 ;SKIP RFU FIEL
|
||
;---------------------------------------------------------------------
|
||
MOV AL,[N8FD] ;1MB FDD INFO.
|
||
STOSB
|
||
MOV AL,[N5FD] ;640KB FDD INFO.
|
||
STOSB
|
||
MOV AL,[N5HD] ;SASI HD INFO.
|
||
STOSB
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
; INC DI ;SKIP RFU FIELD
|
||
;----------------------------------------
|
||
MOV AL,[NSHD] ;SCSI HD INFO.
|
||
STOSB
|
||
;---------------------------------------------------------------------
|
||
MOV SI,OFFSET HD_OFFSET ;PARTITION START SECTOR
|
||
MOV CX,4*4*4 ;4BYTES*4PTS*4UNITS 88/06/18
|
||
REP MOVSB ;SASI & NPC-HD 88/03/31
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
MOV SI,OFFSET HDS_OFFSET ;PARTITION START SECTOR
|
||
MOV CX,0080H ;4BYTES*4PTS*8UNITS 89/07/28
|
||
REP MOVSB ;SCSI HD
|
||
;---------------------------------------------------------------------
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* GET CONSOLE INFO ROUTINE *
|
||
;* DATE. 87/8/14 *
|
||
;****************************************
|
||
CON_PART:
|
||
MOV SI,OFFSET HEXMOD ;CONSOLE TALE TOP
|
||
MOV CX,26
|
||
REP MOVSB ;COPY CONSOLE VAR.
|
||
RET
|
||
|
||
;****************************************
|
||
;* *
|
||
;* GET FLAG INFO. INTO (AX) REG. *
|
||
;* DATE. 87/9/27 *
|
||
;****************************************
|
||
MOD_FLAG:
|
||
; < VSYS_FLAG >
|
||
CMP AX,8000H ;VSYS ?
|
||
JNE MODF01 ;NO,
|
||
MOV AL,[VSYS_FLAG] ;GET FLAG CONTENT
|
||
JMP SHORT MODF_DONE
|
||
|
||
MODF01:
|
||
; < XPORT_FLAG >
|
||
CMP AX,8001H ;XPORT ?
|
||
JNE MODF02 ;NO,
|
||
MOV AL,[XPORT_FLAG] ;GET FLAG INFO.
|
||
JMP SHORT MODF_DONE
|
||
|
||
MODF02:
|
||
; < KDRV_FLAG >
|
||
CMP AX,8002H ;KDRV ?
|
||
JNE MODF_ER ;NO,
|
||
MOV AL,[KDRV_FLG] ;GET FLAG INFO.
|
||
MODF_DONE:
|
||
XOR AH,AH ;CLEAR (AH)
|
||
MODF_ER:
|
||
MOV [EXT_SAVAX],AX ;SET RETURN VALUE
|
||
RET
|
||
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #129 *
|
||
;* EXTENDED MEMORY MANAGEMENT FUNCTION *
|
||
;* NEW 88/3/31 *
|
||
;* *
|
||
;* INPUT: (AX) COMMAND *
|
||
;* 0000 GET EX-MEMORY SIZE *
|
||
;* 0001 ALLOCATE MEMORY *
|
||
;* (BX) ALLOCATE BLOCK SIZE *
|
||
;* *
|
||
;* OUTPUT: COMMAND=0000 *
|
||
;* (AX) EX-MEMORY SIZE *
|
||
;* COMMAND=0001 *
|
||
;* (AX) RESULT CODE *
|
||
;* 0000 NORMAL *
|
||
;* 0001 NOT ENOUGH MEMORY *
|
||
;* FFFF MEMORY NOT EXIST *
|
||
;* *
|
||
;************************************************
|
||
EX_MMFNC:
|
||
PUSH ES
|
||
XOR CX,CX
|
||
MOV ES,CX ;ES = SEGMENT 0
|
||
|
||
MOV DX,[EXT_SAVDX]
|
||
MOV BX,[EXT_SAVBX]
|
||
MOV AX,[EXT_SAVAX]
|
||
OR AX,AX ;PARAM ?
|
||
JNZ EXMMF_00 ;NOT 0000
|
||
|
||
; <COMMAND 0000 >
|
||
MOV AL,[EXMM_SIZE] ;GET REAL MEMORY SIZE
|
||
JMP short EXMMF_DONE ;(AH)=00
|
||
|
||
; <COMMAND 0001 >
|
||
EXMMF_00:
|
||
CMP [EXMM_SIZE],0
|
||
JNE EXMMF_10 ;EX-MEMORY NOT EXIST
|
||
MOV AX,-1 ;RESULT IS ERROR
|
||
JMP short EXMMF_DONE
|
||
|
||
EXMMF_10:
|
||
MOV CL,ES:[0401H] ;GET AVAILABLE MEMORY SIZE
|
||
CMP BX,CX ;CHECK MEMORY SIZE
|
||
JA EXMMF_ER01 ;LESS
|
||
MOV DX,CX
|
||
SUB ES:[0401H],BX ;ADJUST AVAIL MEMORY SIZE
|
||
SHL DX,1
|
||
SHL BX,1
|
||
MOV AX,DX
|
||
SUB AX,BX
|
||
MOV BX,AX ;DX = END(+1), BX = BEGIN
|
||
ADD BX,0010H ;ADD 1MB 880517
|
||
ADD DX,0010H ;ADD 1MB 880517
|
||
XOR AX,AX ;RESULT IS NORMAL
|
||
JMP short EXMMF_DONE
|
||
|
||
EXMMF_ER01:
|
||
MOV AX,0001H ;RESULT IS ERROR
|
||
MOV BX,CX
|
||
EXMMF_DONE:
|
||
MOV [EXT_SAVAX],AX ;SET RESULT
|
||
MOV [EXT_SAVBX],BX
|
||
MOV [EXT_SAVDX],DX
|
||
POP ES
|
||
RET
|
||
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #130 *
|
||
;* EXTENDED MEMORY CHECK FUNCTION *
|
||
;* NEW MSDOS 3.3B PATCH *
|
||
;* *
|
||
;* INPUT: (AX) COMMAND *
|
||
;* 0000 FREE EX-MEMORY SIZE *
|
||
;* *
|
||
;* OUTPUT: COMMAND=0000 *
|
||
;* (AX) FREE EX-MEMORY SIZE *
|
||
;* (BX) START ADDRESS *
|
||
;* (DX) END ADDRESS *
|
||
;************************************************
|
||
EX_MMCHECK:
|
||
PUSH ES
|
||
XOR CX,CX
|
||
MOV ES,CX
|
||
MOV DX,WORD PTR [EXT_SAVDX]
|
||
MOV BX,WORD PTR [EXT_SAVBX]
|
||
MOV AX,WORD PTR [EXT_SAVAX]
|
||
OR AX,AX
|
||
JNZ MMCHECK050
|
||
MOV AX,WORD PTR ES:[401H]
|
||
;------------------------------------------------DOS5 91/02/19-----------
|
||
AND AX,00FFH ;use low byte
|
||
;------------------------------------------------------------------------
|
||
MOV DX,AX
|
||
SHL DX,1
|
||
ADD DX,0010H
|
||
MOV BX,0010H
|
||
TEST BYTE PTR ES:[501H],08H
|
||
JZ MMCHECK060
|
||
ADD BX,0004H
|
||
SUB AX,2
|
||
JNB MMCHECK060
|
||
MOV DX,0014H
|
||
XOR AX,AX
|
||
JMP short MMCHECK060
|
||
MMCHECK050:
|
||
MOV AX,0FFFFH
|
||
MMCHECK060:
|
||
MOV WORD PTR [EXT_SAVAX],AX
|
||
MOV WORD PTR [EXT_SAVBX],BX
|
||
MOV WORD PTR [EXT_SAVDX],DX
|
||
POP ES
|
||
RET
|
||
|
||
PAGE
|
||
;********************************************************
|
||
;* *
|
||
;* *
|
||
;* EXTENDED BIOS USE DATA AREA *
|
||
;* *
|
||
;* *
|
||
;********************************************************
|
||
|
||
EVEN
|
||
;****************************************
|
||
;* *
|
||
;* FUNCTION TABLE *
|
||
;* *
|
||
;****************************************
|
||
|
||
EXT_RTNTBL DW EXT_MODK ;#9 GET/SET MO DISK 89/08/16
|
||
DW EX_RSINIT ;#10 INITIALIZE RS232C
|
||
DW EX_NOP ;#11 RFU
|
||
DW EX_RFKY ;#12 READ SOFT KEY
|
||
DW EX_SFKY ;#13 SET SOFT KEY
|
||
DW EX_RSFNC ;#14 RS232C FUNCTION
|
||
DW EX_CTRLFLG ;#15 3270SE MODE
|
||
DW EXB_16 ;#16 DIRECT CONOUT
|
||
DW EX_PRFLG ;#17 PRINTER MODE
|
||
DW EX_VER ;#18 IO.SYS VERSION 87/8/14
|
||
DW EX_LPTABLE ;#19 LPTABLE/SINGLE DRIVE INFO 87/8/14
|
||
DW EX_CRTMD ;#20 GET/SET CRT MODE 89/08/16
|
||
;------------------------------------------------------ DOS5 91/09/09 -
|
||
DW EX_MINORVER ;#21 IO.SYS MINOR VERSION
|
||
;----------------------------------------------------------------------
|
||
DW EX_VARIABLE ;#128 IO.SYS VARIABLE 87/8/14
|
||
DW EX_MMFNC ;#129 EXTENDED MM FUNCTION 88/03/31
|
||
DW EX_MMCHECK ;#130 EXTENDED MM CHECK 90/03/16
|
||
|
||
;****************************************
|
||
;* *
|
||
;* EXB_16 USE TABLE *
|
||
;* *
|
||
;****************************************
|
||
|
||
EX16TBL DW EX16_DSP ,CRTOUT ;AH=0 : DATA DISPLAY
|
||
DW EX16_STR ,0000H ; 1 : DISPLAY STRING DATA
|
||
DW EX16_ATTR ,0000H ; 2 : SET ATTRIBUTE
|
||
DW EX16_CUP ,ESCADM+22 ; 3 : CURSOR POSITION
|
||
DW EX16_UPDN ,ESCIND ; 4 : INDEX
|
||
DW EX16_UPDN ,ESCRI ; 5 : REVERSE INDEX
|
||
DW EX16_ANSI1,ESCVT_CUU+9 ; 6 : CSR UP
|
||
DW EX16_ANSI1,ESCVT_CUD+9 ; 7 : CSR DOWN
|
||
DW EX16_ANSI1,ESCVT_CUF+9 ; 8 : CSR FOREWARD
|
||
DW EX16_ANSI1,ESCVT_CUB+9 ; 9 : CSR BACKWARD
|
||
DW EX16_ANSI2,ESCVT_ED+9 ; A : ERASE IN DISPLAY
|
||
DW EX16_ANSI2,ESCVT_EL+9 ; B : ERASE IN LINE
|
||
DW EX16_ANSI1,ESCVT_IL+16 ; C : INSERT LINE
|
||
DW EX16_ANSI1,ESCVT_DL+9 ; D : DELETE LINE
|
||
DW EX16_CHR ,ESCKNJ+7 ; E : KANJI/GRAPH
|
||
;----------------------------------------------------- 89/08/16 ---
|
||
|
||
MO_DEV_STR STRUC
|
||
MO_DEV_UNIT DB ?
|
||
MO_DEV_FLG DB ?
|
||
MO_DEV_ID DB ?
|
||
MO_DEV_RFU DB ?
|
||
MO_DEV_STR ENDS
|
||
|
||
; MOVE BIO2.ASM
|
||
;
|
||
;ATTRF DW 0001H ;2BYTE ATTR FLAG
|
||
;CRTDOTF DW 0001H ;480DOT MODE FLAG
|
||
;BIOSF_3 DB 00H ;BIOS_FLG(3) 89/08/21
|
||
|
||
;--------------------------------------------------------------------
|
||
;----------------------------------------------------- 89/08/16 ---
|
||
;****************************************
|
||
;* *
|
||
;* MO_DISK *
|
||
;* 89/08/16 *
|
||
;****************************************
|
||
;
|
||
EXT_MODK:
|
||
;
|
||
MOV DX,[EXT_SAVDX]
|
||
MOV AX,[EXT_SAVAX]
|
||
|
||
CMP AX,0000H ;GET EQUIP
|
||
JE GET_MO_EQUIP
|
||
CMP AX,0001H ;SET AI FLAG
|
||
JE SET_AI_FLAG
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
cmp ax,0010h
|
||
je LockUnlock
|
||
cmp ax,0011h
|
||
je LockUnlock
|
||
;---------------------------------------------------------------------
|
||
RET
|
||
;
|
||
GET_MO_EQUIP:
|
||
MOV ES,[EXT_SAVDS]
|
||
MOV DI,DX
|
||
|
||
; PUSH CS
|
||
; POP DS
|
||
MOV DS,CS:[BDATA_SEG]
|
||
|
||
MOV SI,OFFSET SCSI_EQUIP
|
||
MOV CX,8
|
||
CLD
|
||
REP MOVSB
|
||
RET
|
||
;
|
||
SET_AI_FLAG:
|
||
;------------------------------------------------DOS5 91/06/06-----------
|
||
MOV [EXT_SAVAX],0FFFFH ;SET ERR END STATUS
|
||
;------------------------------------------------------------------------
|
||
CMP MO_COUNT,0
|
||
JZ NO_MO
|
||
|
||
; PUSH CS ;DOS5
|
||
; POP DS ;DOS5
|
||
|
||
AND DL,0FH
|
||
MOV BX,OFFSET MO_DEVICE_TBL
|
||
XOR CH,CH
|
||
MOV CL,MO_COUNT
|
||
SHL CX,1
|
||
SHL CX,1
|
||
;------------------------------------------------DOS5 91/06/06-----------
|
||
; MOV AX,0FFFFH ;SET ERR END STATUS
|
||
;------------------------------------------------------------------------
|
||
SET_AI_LOOP:
|
||
CMP [BX.MO_DEV_ID],DL
|
||
JNE NOT_SET_AI
|
||
MOV BYTE PTR [BX.MO_DEV_FLG],2
|
||
;------------------------------------------------DOS5 91/06/06-----------
|
||
MOV [EXT_SAVAX],0000H
|
||
;------------------------------
|
||
; MOV AX,0000H
|
||
;------------------------------------------------------------------------
|
||
NOT_SET_AI:
|
||
ADD BX,[MO_DEV_LENGTH]
|
||
LOOP SET_AI_LOOP
|
||
NO_MO:
|
||
RET
|
||
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
LockUnlock:
|
||
mov [EXT_SAVAX],0ffffh ;set error
|
||
cmp MO_COUNT,0
|
||
jz LockRet
|
||
|
||
xor dh,dh
|
||
mov cx,26
|
||
mov bx,offset EXLPTBL
|
||
LockSearch:
|
||
cmp byte ptr [bx+1],dl ; compare DA/UA
|
||
je LockSearch10
|
||
add bx,2
|
||
inc dh
|
||
loop LockSearch
|
||
jmp short LockRet
|
||
|
||
LockSearch10:
|
||
test byte ptr [bx],01h ; check mo flag
|
||
jz LockRet
|
||
|
||
mov CURDRV,dh ; drive letter
|
||
cmp ax,0010h
|
||
jne UnlockStart
|
||
LockStart:
|
||
call LockMO
|
||
jmp short LockStatus
|
||
|
||
UnlockStart:
|
||
mov [EXT_SAVAX],01h ; set error
|
||
mov bl,dl
|
||
and bl,0fh
|
||
xor bh,bh ; scsi id -> bx
|
||
cmp byte ptr Lockcnt.[bx],0
|
||
je LockRet
|
||
call UnlockMO
|
||
|
||
LockStatus:
|
||
mov [EXT_SAVAX],0 ; status clear
|
||
jnc LockRet
|
||
mov [EXT_SAVAX],02h ; drive not ready
|
||
cmp [ERR_STATUS],02h ; check scsi sense code
|
||
je LockRet
|
||
mov [EXT_SAVAX],03h ; other error
|
||
LockRet:
|
||
ret
|
||
;---------------------------------------------------------------------
|
||
|
||
;
|
||
;****************************************
|
||
;* *
|
||
;* NPC CRT MODE *
|
||
;* 89/08/16 *
|
||
;****************************************
|
||
;
|
||
EX_CRTMD:
|
||
;----------------------------------------------- DOS5A 92/10/01 ------
|
||
;<patch BIOS50-P27>
|
||
extrn patch10:near
|
||
|
||
call patch10 ;NPC or TA architecture
|
||
; or EX graph architecture bit on?
|
||
jz CRTMD_ERR ;no
|
||
jmp short EX_CRTMD10
|
||
db 3 dup (90h)
|
||
;---------------
|
||
; TEST byte PTR [BIOSF_3],80H ;NPC CHECK 89/08/21
|
||
; JNZ EX_CRTMD10
|
||
; JMP CRTMDRET
|
||
;---------------------------------------------------------------------
|
||
EX_CRTMD10:
|
||
MOV AX,[EXT_SAVAX] ;GET FUNCTION
|
||
CMP AX,0000H ;2BYTE ATTRIBUTE
|
||
JE CRTMD2AT
|
||
CMP AX,0001H ;1BYTE ATTRIBUTE
|
||
JE CRTMD1AT
|
||
CMP AX,0010H ;480 DOT MODE
|
||
JE CRTMD480
|
||
CMP AX,0011H ;400 DOT MODE
|
||
JE CRTMD400
|
||
TEST AX,8000H
|
||
JZ CRTMD_ERR
|
||
JMP SHORT CRTMD_GET
|
||
CRTMD_ERR:
|
||
RET ;ERR
|
||
|
||
CRTMD2AT: ;CHANGE 2BYTE ATTR
|
||
;----------------------------------------------- DOS5A 92/10/01 ------
|
||
;<patch BIOS50-P27>
|
||
extrn CRTMD_TA_2AT:near
|
||
|
||
call CRTMD_TA_2AT
|
||
db 90h
|
||
;---------------
|
||
; MOV AH,2BH
|
||
; INT 18H ;STATUS READ
|
||
;---------------------------------------------------------------------
|
||
TEST AL,80H ;USE EGH
|
||
JNZ CRTMD070
|
||
AND AL,3FH
|
||
OR AL,80H ;EGH SET
|
||
MOV AH,2AH
|
||
INT 18H ;SET 2BYTE ATTR
|
||
;--------------------------------------------------------- 90/01/19 --
|
||
; CALL CLRRTN ;CLEAR SCREEN & POS CURSOR
|
||
; MOV AL,[DEFATTR]
|
||
; MOV [CURATTR],AL ;SET ATTRIBUTE TO DEFAULT
|
||
; MOV AX,[DEFATTR2] ; 89/08/22
|
||
; MOV [CURATTR2],AX ;SET ATTRIBUTE TO DEFAULT 89/08/22
|
||
CALL CRTMD_DEF
|
||
;----------------------------------------------------------------------
|
||
CRTMD080:
|
||
MOV AH,2BH
|
||
INT 18H ;READ STATUS
|
||
TEST AL,80H
|
||
JNZ CRTMD070
|
||
|
||
MOV WORD PTR ATTRF,0001H ;1BYTE ATTRIBUTE
|
||
JMP short CRTMDRET
|
||
CRTMD070:
|
||
MOV WORD PTR ATTRF,0000H ;2BYTE ATTRIBUTE
|
||
JMP short CRTMDRET
|
||
|
||
|
||
CRTMD1AT:
|
||
;----------------------------------------------- DOS5A 92/10/01 ------
|
||
;<patch BIOS50-P27>
|
||
extrn CRTMD_TA_1AT:near
|
||
|
||
call CRTMD_TA_1AT
|
||
db 90h
|
||
;---------------
|
||
; MOV AH,2BH
|
||
; INT 18H ;STATUS READ
|
||
;---------------------------------------------------------------------
|
||
TEST AL,80H ;USE EGH
|
||
JZ CRTMDRET
|
||
AND AL,7FH
|
||
MOV AH,2AH
|
||
INT 18H ;SET 2BYTE ATTR
|
||
;--------------------------------------------------------- 90/01/19 --
|
||
; CALL CLRRTN ;CLEAR SCREEN & POS CURSOR
|
||
; MOV AL,[DEFATTR]
|
||
; MOV [CURATTR],AL ;SET ATTRIBUTE TO DEFAULT
|
||
; MOV AX,[DEFATTR2] ; 89/08/22
|
||
; MOV [CURATTR2],AX ;SET ATTRIBUTE TO DEFAULT 89/08/22
|
||
CALL CRTMD_DEF
|
||
;---------------------------------------------------------------------
|
||
JMP CRTMD080 ;
|
||
|
||
|
||
CRTMD480:
|
||
;----------------------------------------------- DOS5A 92/10/01 ------
|
||
;<patch BIOS50-P27>
|
||
extrn CRTMD_TA_480:near
|
||
|
||
call CRTMD_TA_480
|
||
db 90h
|
||
;---------------
|
||
; MOV AH,2BH
|
||
; INT 18H ;READ STATUS
|
||
;----------------------------------------------------------------------
|
||
TEST AL,01H ;USE 480
|
||
JNZ CRTMDRET
|
||
OR AL,01H
|
||
CRTMD100:
|
||
MOV AH,2AH
|
||
INT 18H ;SET 480DOT
|
||
CALL CRTMD_DEF
|
||
|
||
MOV AH,2BH
|
||
INT 18H ;READ STATUS
|
||
TEST AL,01H ;480DOT
|
||
JZ CRTMD090
|
||
MOV WORD PTR CRTDOTF,0000H ;480 DOT MODE
|
||
JMP SHORT CRTMDRET
|
||
CRTMD090:
|
||
MOV WORD PTR CRTDOTF,0001H ;400 DOT MODE
|
||
JMP SHORT CRTMDRET
|
||
CRTMD400:
|
||
;----------------------------------------------- DOS5A 92/10/01 ------
|
||
;<patch BIOS50-P27>
|
||
extrn CRTMD_TA_400:near
|
||
|
||
call CRTMD_TA_400
|
||
db 90h
|
||
;---------------
|
||
; MOV AH,2BH
|
||
; INT 18H ;READ STATUS
|
||
;---------------------------------------------------------------------
|
||
TEST AL,01H ;USE 480
|
||
JZ CRTMDRET
|
||
AND AL,0FEH
|
||
JMP CRTMD100
|
||
|
||
CRTMDATR:
|
||
;----------------------------------------------- DOS5A 92/10/01 ------
|
||
;<patch BIOS50-P27>
|
||
extrn CRTMD_TA_ATR:near
|
||
|
||
call CRTMD_TA_ATR
|
||
db 90h
|
||
;---------------
|
||
; MOV AH,2BH
|
||
; INT 18H ;READ STATUS
|
||
;---------------------------------------------------------------------
|
||
ROL AL,1
|
||
JMP short CRTMD110
|
||
|
||
CRTMD_GET:
|
||
CMP AX,8000H ;GET ATTRIBUTE
|
||
JE CRTMDATR
|
||
CMP AX,8010H ;GET DOT MODE
|
||
JE CRTMDDOT
|
||
JMP SHORT CRTMDRET
|
||
|
||
CRTMDDOT:
|
||
;----------------------------------------------- DOS5A 92/10/01 ------
|
||
;<patch BIOS50-P27>
|
||
extrn CRTMD_TA_DOT:near
|
||
|
||
call CRTMD_TA_DOT
|
||
db 90h
|
||
;---------------
|
||
; MOV AH,2BH
|
||
; INT 18H ;READ STATUS
|
||
;---------------------------------------------------------------------
|
||
CRTMD110:
|
||
NOT AX
|
||
AND AX,0001H
|
||
MOV [EXT_SAVAX],AX
|
||
CRTMDRET:
|
||
RET
|
||
;--------------------------------------------------------------------
|
||
|
||
CRTMD_DEF PROC
|
||
CALL CLRRTN ;CLEAR SCREEN & POS CURSOR
|
||
MOV AL,[DEFATTR]
|
||
MOV [CURATTR],AL ;SET ATTRIBUTE TO DEFAULT
|
||
MOV AX,[DEFATTR2] ; 89/08/22
|
||
MOV [CURATTR2],AX ;SET ATTRIBUTE TO DEFAULT 89/08/22
|
||
RET
|
||
CRTMD_DEF ENDP
|
||
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
;************************************************
|
||
;* *
|
||
;* FUNC #21 *
|
||
;* GET IO.SYS MINOR VERSION *
|
||
;* *
|
||
;* INPUT: *
|
||
;* *
|
||
;* OUTPUT: *
|
||
;* *
|
||
;************************************************
|
||
EX_MINORVER proc near
|
||
cmp ax,0
|
||
jne EX_MINORVER_RET
|
||
mov al,[MINOR_REV]
|
||
xor ah,ah
|
||
mov [EXT_SAVAX],ax
|
||
EX_MINORVER_RET:
|
||
ret
|
||
EX_MINORVER endp
|
||
;---------------------------------------------------------------------
|
||
|
||
;****************************************
|
||
;* *
|
||
;* SAVE AREA & LOCAL STACK *
|
||
;* *
|
||
;****************************************
|
||
;--------------------------------------------------------- 91/01/20 --
|
||
;EXT_SAVAX DW ? ;AX SAVE
|
||
;EXT_SAVSS DW ? ;SS SAVE
|
||
;EXT_SAVSP DW ? ;SP SAVE
|
||
;EXT_SAVDS DW ? ;DS SAVE
|
||
;EXT_SAVDX DW ? ;DX SAVE 87/8/14
|
||
;EXT_SAVBX DW ? ;BX SAVE 88/03/31
|
||
;
|
||
DW 192 DUP(0CCCCH) ;EXT_BIOS LOCAL STACK
|
||
;SIZE 128 WORD 87/9/27
|
||
;EXT_STACK EQU $
|
||
;---------------------------------------------------------------------
|
||
|
||
FC_TABLE DB 01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH
|
||
DB 10H,11H,12H,13H,14H,15H,16H,17H,18H,19H
|
||
DB 1FH,20H,21H,22H,23H,24H,25H,26H,27H,28H,29H
|
||
DB 0BH,0CH,0DH,0EH,0FH
|
||
DB 1AH,1BH,1CH,1DH,1EH
|
||
PAGE
|
||
;****************************************************************
|
||
;* *
|
||
;* *
|
||
;* BREAK INTERRUPT ([STOP] KEY) PROC *
|
||
;* *
|
||
;* *
|
||
;****************************************************************
|
||
;
|
||
STOP_INT_CODE:
|
||
PUSH DS
|
||
MOV DS,CS:[BDATA_SEG]
|
||
CMP [STOP_FLAG],0
|
||
JE STOP_EXE
|
||
POP DS
|
||
IRET ;NEST 870927
|
||
|
||
STOP_EXE:
|
||
MOV [STOP_FLAG],1
|
||
MOV [STP_SAVAX],AX ;SAVE AX
|
||
|
||
CLI
|
||
IN AL,02H
|
||
OR AL,02H ;KB MASK
|
||
JMP SHORT $+2 ;DELAY 870927
|
||
JMP SHORT $+2 ;DELAY 870927
|
||
JMP SHORT $+2 ;DELAY 870927
|
||
OUT 02H,AL
|
||
|
||
MOV [STP_SAVSS],SS ;SAVE SS
|
||
MOV [STP_SAVSP],SP ;SAVE SP
|
||
;--------------------------------------------------------- 91/01/20 --
|
||
; MOV AX,CS
|
||
|
||
MOV SS,CS:[BDATA_SEG] ;SET OUR SEGMENT
|
||
;---------------------------------------------------------------------
|
||
MOV SP,OFFSET STOP_STACK ;STACK ADDR
|
||
PUSH BX
|
||
PUSH CX
|
||
PUSH DX
|
||
PUSH SI
|
||
PUSH DI
|
||
CLD ;
|
||
MOV AH,2
|
||
INT 18H ;SHIFT KEY SENSE
|
||
TEST AL,01H ;SHIFT + STOP ?
|
||
JNZ STP_CTLS ;YES, MAKE DC3 CODE
|
||
MOV AL,'C'-'@' ;CTRL-C
|
||
CALL STP_CKB ;CLEAR KB_FIFO
|
||
|
||
;-------------------------------------------------------------- 880526
|
||
TEST [HDIO_FLG],1 ;CURRENTLY HD I/O ?
|
||
JNZ SKP_RTRCT ;YES,
|
||
MOV DL,[INF5H] ;SASI HD EQUIPMENT FLAG
|
||
MOV AL,80H ;SET DA
|
||
MOV CX,4 ;MAX 4 UNIT
|
||
CALL RETRACT ;SASI RETRACT
|
||
MOV DL,[INFSH] ;SCSI HD EQUIPMENT FLAG
|
||
MOV AL,0A0H ;SET DA
|
||
MOV CX,7 ;MAX 7 UNIT
|
||
CALL RETRACT ;SCSI RETRACT
|
||
;---------------------------------------------------------------------
|
||
; TEST [HDIO_FLG],1
|
||
; JNZ SKP_RTRCT
|
||
; TEST [INF5H],01H ;HD #1 CONNECT ?
|
||
; JZ SKP_HD1 ;JUMP IF NOT
|
||
; MOV AX,0F80H ;SET RETRACT COMMAND & DA/UA
|
||
; INT 1BH
|
||
SKP_HD1:
|
||
; TEST [INF5H],02H ;HD #2 CONNECT ?
|
||
; JZ SKP_RTRCT ;JUMP IF NOT
|
||
; MOV AX,0F81H
|
||
; INT 1BH
|
||
;----------------------------------------
|
||
SKP_RTRCT:
|
||
|
||
MOV [CSRSW],1 ;CURSOR SWITCH ON
|
||
MOV AH,11H ;
|
||
INT 18H ;SET CURSOR FORM "
|
||
CALL DSPCSR
|
||
|
||
MOV AL,0
|
||
MOV [HEXMOD],AL ;RESET HEX/KANJI INPUT MODE
|
||
MOV [ESCCNT],AL ;RESET ESCAPE MODE
|
||
MOV [SRMFLG],AL ;RESET ESCAPE MODE
|
||
MOV [KANJICNT],AL
|
||
MOV [PR_KNJCNT],AL
|
||
MOV [WRAPMOD],AL ;SET "WRAP AT EOL"
|
||
MOV AL,[DEFATTR]
|
||
MOV [CURATTR],AL ;SET ATTRIBUTE TO DEFAULT
|
||
MOV AX,[DEFATTR2] ; 89/08/22
|
||
MOV [CURATTR2],AX ;SET ATTRIBUTE TO DEFAULT 89/08/22
|
||
;
|
||
;CHECK COPY MODE
|
||
CMP [COPY_FLAG],0 ;COPY MODE ?
|
||
JE STP_RET ;IRETURN
|
||
MOV [COPYSTOP],1 ;COPY ABORT
|
||
JMP SHORT STP_RET ;IRETURN
|
||
STP_CTLS:
|
||
MOV AL,'S'-'@' ;CTRL-S
|
||
CALL STP_CKB ;
|
||
STP_RET:
|
||
|
||
CLI
|
||
POP DI
|
||
POP SI
|
||
POP DX
|
||
POP CX
|
||
POP BX
|
||
MOV SS,[STP_SAVSS] ;RESUME SS
|
||
MOV SP,[STP_SAVSP] ;RESUME SP
|
||
|
||
IN AL,02H
|
||
AND AL,0FDH
|
||
JMP SHORT $+2 ;DELAY 870927
|
||
JMP SHORT $+2 ;DELAY 870927
|
||
JMP SHORT $+2 ;DELAY 870927
|
||
OUT 02H,AL
|
||
|
||
MOV AX,[STP_SAVAX]
|
||
MOV [STOP_FLAG],0
|
||
POP DS
|
||
COPY_INT_CODE:
|
||
IRET
|
||
|
||
STP_CKB:
|
||
CALL FLUSH ;FLUSH THE KB-FIFO
|
||
MOV [FKY_BUFFER],AL ;SET CTRL-C/S CODE
|
||
MOV [FKYPTR],OFFSET FKY_BUFFER
|
||
MOV [FKYCNT],1 ;ENTER FUNC-KEY MODE
|
||
RET
|
||
|
||
;-------------------------------------------------------------- 880526
|
||
RETRACT:
|
||
; HARD DISK RETRACT SUBROUTINE
|
||
; INPUT: (DL)=EQUIPMENT FLAG
|
||
; (CX)=MAX UNIT
|
||
; (AL)=DA (A0 OR 80)
|
||
|
||
MOV DH,1
|
||
RETR_LOOP:
|
||
TEST DL,DH ;TARGET HD CONNECT ?
|
||
JZ SKP_RETR ;NO, SKIP THIS UNIT
|
||
PUSH AX
|
||
PUSH CX
|
||
PUSH DX
|
||
MOV AH,0FH ;COMMAND "RETRACT"
|
||
INT 1BH ;RETRACT !
|
||
POP DX
|
||
POP CX
|
||
POP AX
|
||
SKP_RETR:
|
||
INC AL ;UA 1UP
|
||
SHL DH,1 ;NEXT UNIT
|
||
LOOP RETR_LOOP ;LOOP
|
||
RET
|
||
;---------------------------------------------------------------------
|
||
|
||
PAGE
|
||
;************************************************
|
||
;* *
|
||
;* DATA *
|
||
;* *
|
||
;************************************************
|
||
EVEN
|
||
;
|
||
; ---- DELETE SIGNAL_TBL,VECT_TBL1 & VECT_TBL2 ---- 88/05/06 ---------
|
||
|
||
;--------------------------------------------------------- 91/01/20 --
|
||
;STP_SAVAX DW ? ;AX SAVE
|
||
;STP_SAVSS DW ? ;SS SAVE
|
||
;STP_SAVSP DW ? ;SP SAVE
|
||
|
||
DW 192 DUP(0CCCCH) ;STOP KEY LOCAL STACK
|
||
;SIZE 128 LEVEL 870927
|
||
;STOP_STACK EQU $
|
||
;---------------------------------------------------------------------
|
||
PAGE
|
||
;****************************************************************
|
||
;* *
|
||
;* *
|
||
;* STOP / COPY CHECK ROUTINE *
|
||
;* *
|
||
;* *
|
||
;****************************************************************
|
||
;
|
||
|
||
STOP_CHK_FAR PROC FAR
|
||
CALL STOP_CHK
|
||
RET
|
||
STOP_CHK_FAR ENDP
|
||
|
||
STOP_CHK:
|
||
PUSH DS
|
||
MOV DS,[BDATA_SEG]
|
||
CLI ;DISABLE INTERRUPT
|
||
MOV [BIOS_FLAG],0 ;EXIT FROM BIOS MODE
|
||
CMP [COPY_FLAG],1 ;COPY KEY PRESSED ?
|
||
JNE COPY_ACTV ;NO
|
||
CMP [COPYSTOP],1 ;CANCEL ?
|
||
JE COPY_RESET ;YES
|
||
STI
|
||
PUSH AX
|
||
CALL HARD_COPY
|
||
POP AX
|
||
POP DS
|
||
RET
|
||
|
||
COPY_RESET:
|
||
MOV [COPY_FLAG],0
|
||
MOV [COPYSTOP],0
|
||
COPY_ACTV:
|
||
STI
|
||
POP DS
|
||
RET
|
||
|
||
|
||
HARD_COPY:
|
||
CMP WORD PTR DS:[PR_HEADER+2],0
|
||
JZ COPY_RET
|
||
PUSH DS
|
||
MOV WORD PTR DS:[PR_HEADER],18H
|
||
;----------------------------------------------- DOS5 92/07/08 -------
|
||
;<patch BIOS50-P21>
|
||
db 9ah ;direct far call "call 60:patch05"
|
||
dw offset patch05 ;
|
||
dw 60h ;
|
||
db 3 dup (90h) ;nop
|
||
;---------------
|
||
; MOV DS,WORD PTR DS:[PR_HEADER+2]
|
||
; CALL DWORD PTR DS:[PR_HEADER]
|
||
;---------------------------------------------------------------------
|
||
POP DS
|
||
COPY_RET:
|
||
RET
|
||
|
||
;****************************************************************
|
||
;* *
|
||
;* END OF EXTBIOS MODULE *
|
||
;* *
|
||
;****************************************************************
|
||
EXTBIOS_CODE_END:
|
||
EXTBIOS_END:
|
||
BIOS_CODE ENDS
|
||
END
|
||
|