2025-04-27 07:49:33 -04:00

1016 lines
34 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PAGE 109,132
TITLE MS-DOS 5.0 REINIT.ASM
;
; INIT => INIT + REINIT
;
;850505 REINIT_END LABEL CORRECT
;850519 ADDED "NOT_BSYS_ENT"
;850520 INT FF
;
;************************************************************************
;* *
;* *
;* R E - I N I T I A L I Z E *
;* *
;* *
;* COPYRIGHT (C) NEC CORPORATION 1987 *
;* *
;* 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. *
;* *
;************************************************************************
;************************************************
;* *
;* OTHER SEGMENT *
;* *
;************************************************
BRANCH=0
INTVEC SEGMENT AT 0000H
ORG 08H*4
USR_TIMR_OFST DW ? ;INTERVAL TIMER (USER ROUTINE)
USR_TIMR_SGMT DW ?
ORG 1AH*4
PRNT_VEC_OFST DW ? ;PRINTER-BIOS VECTOR
PRNT_VEC_SGMT DW ?
DISK_VEC_OFST DW ? ;DISK-BIOS VECTER
DISK_VEC_SGMT DW ?
TIMR_VEC_OFST DW ? ;TIMER-BIOS VECTOR
TIMR_VEC_SGMT DW ?
ORG 1EH*4
WARMBOOT DD ? ;WARM BOOT ( NORMAL MODE ONLY )
ORG 500H
BIOS_FLAG DB ? ;BIOS FLAGS
INTVEC ENDS
NORM_ROM SEGMENT AT 0FD80H
ORG 091EH
WBOOT_ROM LABEL FAR
NORM_ROM ENDS
;
; 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
;************************************************
;* *
;* OUR SEGMENT *
;* *
;************************************************
EXTRN DSK_BUF:NEAR
;------------------------------------------------------------ 870825 - -------
EXTRN SYS_500:BYTE,SYS_501:BYTE ; 870825
; EXTRN FAT_INF:NEAR ; 870825
EXTRN INT1E_OFST:WORD,INT1E_SGMT:WORD
;-----------------------------------------------------------------------------
EXTRN SEG_DOS:WORD,CONSOLE_TABLE:NEAR
EXTRN AUXILIARY_TABLE:NEAR,JAPAN_TABLE:NEAR
EXTRN FKYTBL:NEAR,PRINTER_TABLE:NEAR
EXTRN OUT_NXT_PTR:NEAR
EXTRN NEW_1A_ENT:NEAR
EXTRN INT_1CH:NEAR
EXTRN TIM_INT:NEAR
EXTRN NEW_1B_INT:NEAR
EXTRN CONOUT_FAR:FAR
EXTRN BOOT_DRIVE:BYTE
;93/03/25 MVDM DOS5.0A---------
EXTRN DOSDATASG:WORD
; EXTRN DOSDATASG:BYTE
;------------------------------
Bios_Data ends
Bios_Data_Init segment word public 'Bios_Data_Init'
ASSUME CS:DATAGRP,DS:DATAGRP
EXTRN LEAP_IN:FAR
Bios_Data_Init ends
Bios_Code segment word public 'Bios_Code'
ASSUME CS:BIOS_CODE,DS:DATAGRP
EXTRN CRTOUT:NEAR
EXTRN BDATA_SEG:word
Bios_Code ends
Bios_Code segment word public 'Bios_Code'
ASSUME CS:BIOS_CODE,DS:DATAGRP
; PUBLIC RE_INIT,LEAP_OUT
PUBLIC LEAP_OUT
PUBLIC REINIT_END
PUBLIC INT_29_CODE,MSGLOOP,MSGL
PUBLIC MSGLOOP_FAR
PUBLIC INT_TRAP_CODE
PUBLIC NOT_BSYS_ENT ;85/5/19
PUBLIC INT_FF ;85/05/20
PUBLIC WARM_START
;---------------------------------------------------------------------------
;----------------------------------------------------- 88/02/25 ------------
PUBLIC SAVE_INT18,CRTBIOS_START_CODE
PUBLIC STACKINIT
;---------------------------------------------------------------------------
;------------------------------------------------------ DOS5 91/09/09 -
public OLD_1A_OFFSET,OLD_1B_OFFSET
;----------------------------------------------------------------------
GETCS EQU 2 ; 89/08/08
GETIP EQU 0 ; 89/08/08
CR = 13 ;CARRIAGE RETURN
LF = 10 ;LINE FEED
FONT16SIZE = 16/8 * 16 + 2
FONT24SIZE = 24/8 * 24 + 2
SET_FONT16 = 26
SET_FONT24 = 32
DEF_DRV EQU 0336H
PUBLIC REINIT_CODE_START
PUBLIC REINIT_CODE_END
REINIT_CODE_START:
;****************************************************************
;* *
;* RE-INIT ENTRY: *
;* LOAD USER-KANJI-FONT & CONTENTS OF KEY.TBL *
;* *
;****************************************************************
PUBLIC REINIT_CODE_RTN
REINIT_CODE_RTN PROC FAR
;RE_INIT:
PUSH ES ;NEW 870826
PUSH DS
PUSH AX
PUSH BX
PUSH CX
PUSH DX
;************************************************
;* * CORRECT AT 870825
;* READ & LOAD USER KANJI FONT ( H/N ) *
;* *
;************************************************
PUSH DS
MOV DX,0060H ;ES,DS <- 0060H
MOV DS,DX ;
;----------------------------------------------- DOS5 91/02/25 -------
MOV DL,BOOT_DRIVE
MOV ES,dosdatasg ;
MOV ES:[DEF_DRV],DL ; dosdata:[336h] <- BOOT_DRIVE
MOV DX,0060H
;---------------------------------------------------------------------
MOV ES,DX ;
TEST ES:[SYS_501],00001000B ;CHECK H/W MODE
POP DS ;
JNZ USK24 ;JUMP IF HIRESO(24DOT) MODE
TEST ES:[SYS_501],01110000B ;CHECK PC9801 OR OTHER
JNZ USK16 ;JUMP IF NOT 9801
JMP N10 ;JUMP IF 9801(N10)
;****************************************
;* *
;* NORMAL MODE FONT (870825) *
;* *
;****************************************
USK16:
PUSH DS ;
PUSH CS ;
POP DS ;
MOV DX,OFFSET USFONT16
CALL OPEN_FILE ;OPEN 'USKCG16.SYS'
JC NOT_USFONT10 ;ERROR
POP DS ;
PUSH DS
MOV CX,2000H ;FOMT FILE SIZE
CALL READ_FILE ;READ FONT DATA
JC NOT_USFONT ;ERROR
PUSH AX ;
PUSH ES ;
XOR AX,AX ;
MOV ES,AX ;
;------------------------------------------------------ MSDOS 3.3B PATCH --
TEST ES:BYTE PTR [0458H], 80H ;90/03/16
JNZ SET65 ;90/03/16
MOV AL,3FH ;
TEST ES:BYTE PTR [054CH],00001000B
JZ SET63 ;
MOV AL,0BCH ;
SET63:
MOV DS:[0100H],AL ;
SET65: ;90/03/16
;--------------------------------------------------------------------------
POP ES ;
POP AX ;
MOV AH,SET_FONT16 ;BIOS COMMAND
MOV BX,DS ;BX:CX = BUFFER SEG & OFFSET
MOV CX,100H + FONT16SIZE ;SKIP HEADER
L_SET16:
MOV SI,CX ;
MOV DX,[SI] ;JIS CODE
INT 18H ;CALL BIOS;NEC NT PROT
ADD CX,FONT16SIZE ;NEXT
DEC WORD PTR DS:[0100H] ;DECREMENT COUNTER
JNZ L_SET16 ;NEXT FONT
CALL LOAD_OK ;-----------------------------DEB----------
JMP short NOT_USFONT ;JMP TO CLOSE ROUTINE
;****************************************
;* *
;* HIRESO MODE FONT *
;* *
;****************************************
USK24:
PUSH DS ;
PUSH CS ;
POP DS ;
MOV DX,OFFSET USFONT24
CALL OPEN_FILE ;OPEN 'USKCG24.SYS'
JC NOT_USFONT10 ;JMP IF OPEN ERROR
POP DS ;RESTORE DS
PUSH DS
MOV CX,4000H ; SET NUMBER OF PATERN BYTE
CALL READ_FILE ;READ
JC NOT_USFONT ; SKIP IF FAIL TO READ
MOV AH,SET_FONT24 ; SET COMMAND FOR CRT-BIO
MOV BX,0100H + FONT24SIZE+2
L_SETFONT:
MOV SI,BX
MOV DX,[SI-2] ; SET FONT #
INT 18H ; CALL CRT-BIO
ADD BX,FONT24SIZE ; SET NEXT FONT
DEC WORD PTR DS:[100H]
JNZ L_SETFONT
CALL LOAD_OK ;-----------------------------DEB----------
NOT_USFONT:
MOV BX,CS:HANDOLE
MOV AH,3EH
INT 21H ; CLOSE HANDOLE
NOT_USFONT10:
POP DS
N10:
;************************************************
;* *
;* READ & SET FUNCTION KEY TABLE *
;* *
KTBL_HED = 16 ;KEY.TBL HEADER SIZE *
FUNC_SIZ = 16 * 15 * 3 ;FUNCTION KEY TBL SIZE *
ARRW_SIZ = 6 * 11 ;ARROW KEY TBL SIZE *
;************************************************
PUSH DS
PUSH CS
POP DS
MOV DX,OFFSET KEY_FCB
CALL OPEN_FILE ;OPEN 'KEY.TBL'
POP DS
JB SKP_KEY10 ; JMP IF NO-KEY TABLE
MOV CX,1320 ; SET NUMBER OF KEY-TABLE
;--------------------------------------------------------- 90/03/16 --
; MOV DX,OFFSET FAT_INF
; MOV AH,3FH ; READ KEY-TABLE FILE
; INT 21H
CALL READ_FILE
;---------------------------------------------------------------------
JB SKP_KEY ; SKIP IF FAIL TO READ
MOV CL,0DH
MOV DX,100H + 16 ;SKIP HEADER
MOV AX,00FFH
INT 220 ;SET FUNCTION KEY
MOV CL,0DH
MOV DX,100H + KTBL_HED + FUNC_SIZ + ARRW_SIZ -2
MOV AX,0100H
INT 220 ;SET DATA KEY
CALL LOAD_OK_KEY ;----------------------- DEB ---------------
SKP_KEY:
MOV BX,CS:HANDOLE
MOV AH,3EH
INT 21H ; CLOSE CURRENT HANDOLE
SKP_KEY10:
;--------------------------------------------------------- 90/03/20 --
; MOV AX,352FH ;FOR WIN/386 INSTANCETABLE
; INT 21H
; MOV WORD PTR CS:[OLD2FVEC], BX
; MOV WORD PTR CS:[OLD2FVEC+2], ES
; PUSH CS
; POP DS
; MOV DX,OFFSET INST2F
; MOV AX,252FH
; INT 21H
; MOV AX,[SEG_DOS]
; MOV [DOSSEG1],AX
; MOV [DOSSEG2],AX
; MOV [DOSSEG3],AX
;---------------------------------------------------------------------
POP DX
POP CX
POP BX
POP AX
POP DS
POP ES ;NEW 870826
RET
REINIT_CODE_RTN ENDP
;****************************************
;* *
;* OPEN FILE *
;* *
;****************************************
OPEN_FILE:
MOV AX,3D00H ; SET OPEN HANDOLE
INT 21H ; OPEN USKCG.SYS
JB OPEN_FILE_DONE ; JMP IF OPEN ERROR
MOV CS:[HANDOLE],AX
MOV BX,AX ; SET HANDOLE
OPEN_FILE_DONE:
RET
;****************************************
;* *
;* READ FILE RECORD *
;* *
;****************************************
READ_FILE:
MOV DX,0100H ;BUFFER ADDRESS
MOV AH,3FH ; READ FONT-PATERN
INT 21H
RET
;*************** FOR DEBUGGING **********
;* *
USKCG_OK_M DB ' <20><><EFBFBD>[<5B>U<EFBFBD><55><EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>܂<EFBFBD><DC82><EFBFBD>',13,10,0
KEYTBL_OK_M DB ' <20>j<EFBFBD>d<EFBFBD>x<EFBFBD>D<EFBFBD>s<EFBFBD>a<EFBFBD>k<EFBFBD><6B><EFBFBD><EFBFBD><EFBFBD>[<5B>h<EFBFBD><68><EFBFBD>܂<EFBFBD><DC82><EFBFBD>',13,10,0
LOAD_OK:
PUSH BX
MOV BX,OFFSET USKCG_OK_M
CALL DEB_MSG
POP BX
RET
LOAD_OK_KEY:
PUSH BX
MOV BX,OFFSET KEYTBL_OK_M
CALL DEB_MSG
POP SI
RET
DEB_MSG:
PUSH DS
PUSH CS
POP DS
CALL MSGLOOP
POP DS
RET
PAGE
;****************************************************************
;* *
;* INT29 1-BYTE CONSOLE OUTPUT *
;* *
;* INPUT : AL = ASCII CODE FOR DISPLAY *
;* OUTPUT : NONE *
;* BREAK REG: NONE *
;* *
;****************************************************************
CONOUT_CODE DW OFFSET DATAGRP:CONOUT_FAR
DW 0060H
INT_29_CODE:
STI
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH CS
POP DS
CALL CS:DWORD PTR CONOUT_CODE
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
IRET
;****************************************
;* WIN/386 INSTANCE TABLE SUPPORT *
;* *
;****************************************
;WIN386INSTMUX EQU 01603H
;WIN386INSTSIG EQU 05248H
;OLD2FVEC DD 0
;DOSINSTANCETABLE:
;DOSSEG1 DW 0000H
; DW 0000H ;MSDOS.SYS STACK
; DW 0009H
; DW 0060H ;CONSOLE TABLE POINTER
; DW OFFSET CONSOLE_TABLE
; DW 0180H ;384BYTE
; DW 0060H ;AUXILIARY TABLE POINTER
; DW OFFSET AUXILIARY_TABLE
; DW 001AH ;26BYTE
; DW 0060H ;JAPAN FEP TABLE POINTER
; DW OFFSET JAPAN_TABLE
; DW 2554H ;9556BYTE
; DW 0060H ;FUNCTION KEY TABLE POINTER
; DW OFFSET FKYTBL
; DW 0384H ;840BYTE
; DW 0060H ;PRINTER TABLE POINTER
; DW OFFSET PRINTER_TABLE
; DW 000BH ;11BYTE
; DW 0060H
; DW 0000H
; DW 0261H ;609BYTE
;DOSSEG2 DW 0000H ;MSDOS SEGMENT
; DW 0048H
; DW 0004H
;DOSSEG3 DW 0000H ;MSDOS SEGMENT
; DW 00A0H
; DW 0090H
; DW 0060H
; DW OFFSET OUT_NXT_PTR
; DW 0004H
;INST2F:
; CMP AX,WIN386INSTMUX
; JNE SHORT I2FCHAIN
; MOV AX,WIN386INSTSIG
; PUSH CS
; POP DS
; MOV SI,OFFSET DOSINSTANCETABLE
; IRET
;I2FCHAIN:
; JMP CS:[OLD2FVEC]
;****************************************
;* *
;* PRINT MESSAGE *
;* *
;****************************************
MSGLOOP_FAR PROC FAR
CALL MSGLOOP
RET
MSGLOOP_FAR ENDP
MSGLOOP:
PUSH BX
PUSH DS
MOV DS,CS:[BDATA_SEG]
MOV CL,CR
CALL CRTOUT
MOV CL,LF
CALL CRTOUT
POP DS
POP BX
MSGL:
MOV AL,[BX]
TEST AL,AL ;END OF DATA?
JZ RETURN ;JUMP IF SO
MOV CL,AL
PUSH BX
PUSH DS
MOV DS,CS:[BDATA_SEG]
CALL CRTOUT
POP DS
POP BX
INC BX
JMP SHORT MSGL
RETURN:
RET
;****************************************
;* *
;* PRINT MESSAGE *
;* *
;****************************************
WARM_START:
ASSUME DS:INTVEC
XOR AX,AX
MOV DS,AX
AND [BIOS_FLAG],00111111B ;
MOV AX,0060H
MOV ES,AX
MOV AX,ES:[INT1E_OFST] ;RESUME INT1E VECTOR
MOV WORD PTR [WARMBOOT],AX
MOV AX,ES:[INT1E_SGMT]
MOV WORD PTR [WARMBOOT+2],AX
JMP WBOOT_ROM
ASSUME DS:BIOS_CODE
;********************************************************
;* *
;* CLEAR ROM-BIOS BUGS *
;* *
;********************************************************
LEAP_OUT PROC FAR
LEAP_OUT ENDP
;--------
;
;----------------------------------------------------- 871015 --------
; TEST CS:[SYS_501],00001000B ;CHECK HW MODE
ASSUME DS:INTVEC
TEST [BIOS_FLAG+1],00001000B ;CHECK HW MODE
;---------------------------------------------------------------------
JNZ BUG_HIRESO ;JUMP IF HIRESO H/W
;
; NORMAL MODE ONLY
;
;---------------------------------------------------- 871015 ---------
; TEST CS:[SYS_500],00000001B ;CHECK V1/Y1
TEST [BIOS_FLAG],00000001B ;CHECK V1/Y1
ASSUME DS:BIOS_CODE
;---------------------------------------------------------------------
JMP BUG_NORMAL_SKIP1A ;NEC NT PROT
ASSUME DS:INTVEC
PUSH [PRNT_VEC_OFST]
POP CS:[OLD_1A_OFFSET]
PUSH [PRNT_VEC_SGMT]
POP CS:[OLD_1A_SEGMENT]
ADD CS:[OLD_1A_OFFSET],0019H
MOV [PRNT_VEC_OFST],OFFSET NEW_1A_ENT
MOV [PRNT_VEC_SGMT],0060H ;BIOS_CODE SEGMENT
ASSUME DS:BIOS_CODE
MOV AH,10H
INT 1AH ;INITIALIZE THE PRINTER
BUG_NORMAL_SKIP1A:
JMP BUG_COMMON_INT1B
;
; HIRESOLUTION MODE ONLY
;
BUG_HIRESO:
PUSH DS
MOV AX,0F000H
MOV DS,AX
TEST DS:BYTE PTR [0FF88H],01H ;CHECK X2(XA)
JNE TIMER_SKIP ;JUMP IF NOT XA
JMP NEXT_LEAP
TIMER_SKIP:
PUSH CS:WORD PTR PAT0
PUSH CS:WORD PTR PAT0+1
PUSH CS:WORD PTR PAT1+1
PUSH CS:WORD PTR PAT2+1
PUSH CS:WORD PTR PAT3+1
XOR AX,AX
MOV DS,AX
ASSUME DS:INTVEC
LES SI,DS:DWORD PTR [TIMR_VEC_OFST]
MOV CS:MEM1C,SI
MOV CS:MEM1C+2,ES
MOV [TIMR_VEC_OFST],OFFSET INT_1CH
MOV [TIMR_VEC_SGMT],0060H
MOV [USR_TIMR_OFST],OFFSET TIM_INT
MOV [USR_TIMR_SGMT],0060H
ASSUME DS:BIOS_CODE
PUSH ES
POP DS
PUSH CS
POP ES
MOV DI,OFFSET TIMER
PUSH DI
ADD SI,1A3H
MOV CX,212H
REP MOVSB
MOV AL,0FAH ; CODE 'CLI'
POP DI
STOSB
MOV DI,OFFSET CAL_CANCEL_PB
STOSB
MOV DI,OFFSET TIMER+0BCH
STOSB
MOV DI,OFFSET TIMER+19EH
MOV SI,OFFSET TBL1
;------------------------------------------------ PATCH FIX 88/02/25 -
; MOV CX,5
MOV CL,5
PUSH CS
POP DS
REPZ MOVSB
; POP CS:WORD PTR PAT3+1
; POP CS:WORD PTR PAT2+1
; POP CS:WORD PTR PAT1+1
; POP CS:WORD PTR PAT0+1
; POP CS:WORD PTR PAT0
POP WORD PTR CS:[PAT3+1]
POP WORD PTR CS:[PAT2+1]
POP WORD PTR CS:[PAT1+1]
POP WORD PTR CS:[PAT0+1]
POP WORD PTR CS:[PAT0]
MOV WORD PTR CS:[PAT0+12H], 0AEEBH ; 89/07/28
;----------------------------------------------------------------------
NEXT_LEAP:
POP DS
;
; DISK BIOS BUG FIX
;
BUG_COMMON_INT1B:
JMP LEAP_EXIT ;NEC NT PROT
ASSUME DS:INTVEC
PUSH [DISK_VEC_OFST] ;SAVE DISK BIOS VECTOR
POP CS:[OLD_1B_OFFSET]
PUSH [DISK_VEC_SGMT]
POP CS:[OLD_1B_SEGMENT]
MOV [DISK_VEC_OFST],OFFSET NEW_1B_INT
PUSH CS:[BDATA_SEG] ;0060H
POP [DISK_VEC_SGMT] ;SET NEW VETOR
; JMP NEXT_BUG
ASSUME DS:BIOS_CODE
LEAP_EXIT: ;NEC NT PROT
JMP LEAP_IN ;RETURN TO 'INIT' MODULE
;
;****************************************
;* *
;* PRINTER BIOS PATCH ROUTINE *
;* *
;* ( NORMAL(V1/Y1) ONLY ) *
;* *
;****************************************
PUBLIC NEW_1A_ENT_CODE
NEW_1A_ENT_CODE:
STI
PUSH DS
PUSH DX
DB 0EAH
OLD_1A_OFFSET DW 0
OLD_1A_SEGMENT DW 0
;
;****************************************
;* *
;* DISK BIOS PATCH ROUTINE *
;* *
;* ( HIRESO MODE ONLY ) *
;* *
;****************************************
PUBLIC NEW_1B_INT_CODE
NEW_1B_INT_CODE:
PUSH AX
AND AL,78H
CMP AL,70H
POP AX
JE NEED_LOOP
NEW_1B_PRC:
DB 0EAH
OLD_1B_OFFSET DW 0
OLD_1B_SEGMENT DW 0
;
NEED_LOOP:
PUSH BP
MOV BP,SP
PUSH SS:[BP+0002H]
POP CS:OLD_1B_OFF2
PUSH SS:[BP+0004H]
POP CS:OLD_1B_SEG2
MOV SS:WORD PTR [BP+0002H],OFFSET NEED_LOOP10
MOV SS:WORD PTR [BP+0004H],CS
POP BP
JMP NEW_1B_PRC
NEED_LOOP10:
JNB NEED_LOOP20
PUSH CX
MOV CX,0
LOOP $
POP CX
NEED_LOOP20:
DB 0EAH
OLD_1B_OFF2 DW 0
OLD_1B_SEG2 DW 0
;****************************************
;* *
;* TIMER BIOS PATCH ROUTINE *
;* *
;* ( HIRESO MODE ONLY ) *
;* *
;****************************************
MEM1C DW 0,0
TBL1 DB 0E8H,06DH,000H,0EBH,005H
PUBLIC INT_1CH_CODE
INT_1CH_CODE:
CMP AH,2
JB TIM_00
CMP AH,6
JBE TIM_01
TIM_00:
JMP CS:DWORD PTR MEM1C
TIM_01:
PUSH DS
PUSH ES
PUSH SI
PUSH BP
PUSH AX
PUSH BX
PUSH CX
PUSH DX
XOR SI,SI
MOV DS,SI
SUB AH,2
JE CAL_TIMER_SET98
DEC AH
JE CAL_CANCEL_PB
DEC AH
JE CAL_TIMER_SET0
DEC AH
JE CAL_TIMER_SET1
JMP CAL_BEEP_SETR
CAL_RESUME:
POP DX
POP CX
POP BX
POP AX
POP BP
POP SI
POP ES
POP DS
IRET
CAL_TIMER_SET98:
JMP short CAL_SINGLE_SET
CAL_TIMER_SET0:
DEC AH
CAL_TIMER_SET1:
TIMER:
DB 30H DUP (0)
PAT0:
JMP SHORT CAL_RESUME
NOP
CAL_CANCEL_PB:
DB 45H DUP (0)
PAT1:
JMP CAL_RESUME
CAL_SINGLE_SET:
DB 15H DUP (0)
PAT2:
JMP CAL_RESUME
CAL_BEEP_SETR:
DB 3 DUP (0)
PAT3:
JMP CAL_RESUME
DB 18H DUP (0)
PUBLIC TIM_INT_CODE
TIM_INT_CODE:
DB 161H DUP (0)
JMP SHORT $+2
JMP SHORT $+2
CLI
OUT 02,AL
JMP SHORT $+2
JMP SHORT $+2
STI
RET
;************************************************
;* *
;* CRT BIOS PATCH ROUTINE *
;* *
;************************************************
SAVE_PIC DB 0
SAVE_INT18 DW 2 DUP(0)
CRTBIOS_START_CODE:
CMP AH,0AH
JB CRTBIOS010
CLI
PUSH AX
IN AL,02
JMP SHORT $+2
MOV CS:SAVE_PIC,AL
MOV AL,0FBH
OUT 02,AL
JMP SHORT $+2
POP AX
PUSHF
CALL DWORD PTR CS:[SAVE_INT18]
;----------------------------------------------- DOS5 90/12/22 -------
;PATCH FIX
PUSH AX
PUSH DS
XOR AX,AX
MOV DS,AX
CMP WORD PTR DS:[448H],0
JNZ CRT_BIOS1
CMP WORD PTR DS:[58AH],0
JNZ CRT_BIOS1
CMP WORD PTR DS:[444H],0
JNZ CRT_BIOS1
MOV AL,CS:[SAVE_PIC]
JMP SHORT CRT_BIOS2
CRT_BIOS1:
MOV AL,CS:[SAVE_PIC]
;93/03/25 MVDM DOS5.0A---------------------------DOS5 90/02/26-----------
;<patch BIOS50-P10>
AND AL,0FEH
;---------------
; AND AL,0EFH
;------------------------------------------------------------------------
CRT_BIOS2:
OUT 02,AL
JMP $+2
STI
POP DS
POP AX
;---------------------------------------------------------------------
; PUSH AX
; IN AL,02
;;----------------------------------------------------- 89/07/28 ---
; AND AL,0FEH
; JMP SHORT $+2
; OUT 02,AL
; JMP SHORT $+2
; STI
; JMP SHORT $+2
; JMP SHORT $+2
; MOV AL,CS:SAVE_PIC
; cli
; OUT 02,AL
; JMP SHORT $+2
; sti
; POP AX
; NOP
; NOP
;---------------------------------------------------- 890/7/28 ---
IRET
CRTBIOS010:
JMP CS:DWORD PTR [SAVE_INT18]
;************************************************
;* *
;* STACKINIT ROUTINE *
;* *
;************************************************
STACKINIT PROC FAR
RET
STACKINIT ENDP
;****************************************************************
;* *
;* TRAP INTERUPT ENTRY *
;* *
;****************************************************************
INT_TRAP_CODE:
CLI
MOV AX,CS
MOV DS,AX
;----------------------------------------------------- 89/08/08 ---
MOV SI,SP
MOV AX,WORD PTR SS:[SI+GETCS] ;GET USER CS
MOV ES,AX
MOV BX,WORD PTR SS:[SI+GETIP] ;GET USER IP
MOV AL,ES:[BX-1] ;GET INT NO.
MOV AH,AL
MOV CL,4
SHR AH,CL
AND AL,0FH
CMP AH,0AH ;IF 0-9
JB NUMDATA ;THEN JMP
ADD AH,7
NUMDATA:
CMP AL,0AH ;IF 0-9
JB NUMDATA1 ;THEN JMP
ADD AL,7
NUMDATA1:
ADD BYTE PTR INT_NO+1,AH ;SET INT NO.
ADD BYTE PTR INT_NO+3,AL ;SET INT NO.
;----------------------------------------------------- 89/08/08 ---
MOV BX,OFFSET INT_TRP
CALL MSGLOOP
MOV AL,06H
OUT 37H,AL
XOR CX,CX
MOV BX,5
INT_BUZZ:
LOOP INT_BUZZ
DEC BX
JNZ INT_BUZZ
MOV AL,07H
OUT 37H,AL
HLT
INT_HLT:
JMP SHORT INT_HLT
;****************************************************************
;* *
;* ENTRY FOR INT78H ( NOT B4670 SYSTEM ) 85/05/19 *
;* *
;****************************************************************
NOT_BSYS_ENT:
MOV AX,-1 ;SET "NOT BRANCH SYSTEM" ERROR CODE
IRET
;****************************************************************
;* *
;* INT FFH ENTRY (85/05/20) *
;* *
;****************************************************************
INT_FF:
IRET ;INTERRUPT RETURN ONLY
PAGE
;****************************************************************
;* *
;* REINIT DATA *
;* *
;****************************************************************
;----------------------------------------------------- 89/08/08 ---
INT_TRP DB '<27>s<EFBFBD><73><EFBFBD>Ȋ<EFBFBD><C88A><EFBFBD>݂<EFBFBD><DD82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD>',CR,LF
DB '<27><><EFBFBD><EFBFBD>ݔԍ<DD94><D48D>@<40>@'
INT_NO DB '<27>O','<27>O','<27>g',CR,LF
DB '<27><><EFBFBD>Z<EFBFBD>b<EFBFBD>g<EFBFBD>X<EFBFBD>C<EFBFBD>b<EFBFBD>`<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><C482><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',0
;----------------------------------------------------- 89/08/08 ---
;INT_TRP DB 'Int trap halt',0 ;TRAP INT MESSAGE
KEY_FCB DB 'KEY.TBL',0 ;FUNCTION KEY FILE NAME
USFONT24 DB 'USKCG24.SYS',0 ;USER FONT (24DOT) FILE
USFONT16 DB 'USKCG16.SYS',0 ; (16DOT)
HANDOLE DW 0
REINIT_CODE_END:
REINIT_END EQU $
BIOS_CODE ENDS
END