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 ' ユーザ定義文字をロードしました',13,10,0 KEYTBL_OK_M DB ' KEY.TBLをロードしました',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----------- ; 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 '不正な割り込みが発生しました',CR,LF DB '割り込み番号  ' INT_NO DB '0','0','H',CR,LF DB 'リセットスイッチを押してください',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