2846 lines
104 KiB
NASM
2846 lines
104 KiB
NASM
PAGE 109,132
|
||
|
||
TITLE MS-DOS 5.0 INIT.ASM
|
||
|
||
;************************************************************************
|
||
;* *
|
||
;* *
|
||
;* MODULE NAME: INIT.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. *
|
||
;* *
|
||
;************************************************************************
|
||
|
||
;--------------------------------------------------------
|
||
; CORRECTION HISTORY
|
||
;--------------------------------------------------------
|
||
; 84/11/12 INF5H <- INF5F
|
||
; 84/11/12 SET HARD_LAST
|
||
; 84/11/16 SURE TO BEHAVE SINGLE DRIVE
|
||
; 84/11/18 SORE TO SET HD BPB IMAGE
|
||
; 84/11/22 8"1 MEDIA DSC -> FEH
|
||
; 84/11/23 REMV NEEDS DIFFER MEDIA DSC(256KB 1MB)
|
||
; 85/02/07 CORRECT FOR X2ROM(85/1/31)
|
||
; 85/03/01 KANJI DRIVER & AI RESULST
|
||
; 85/03/30 ADDING B4670-CODE
|
||
; 85/05/05 - 05/10 FOR B4670 SIGNON MESSAGE
|
||
; 85/05/14 LENGTH(IO.SYS) IS 0E000H(56KB)
|
||
; 85/05/15,17 VIRTUAL BOOT,STACK SIZE = 128 WORD
|
||
; 85/05/19 SIGNON FOR BRANCH
|
||
; 85/05/20 INT FF VECTOR <<3C><>>
|
||
; 85/08/06 ENHANCEMENT FOR DOS 3.XX
|
||
; 85/08/06 LENGTH(IO.SYS) IS 0A000H(40K)
|
||
; 85/10/02 command load drive is current
|
||
; 85/10/09 IO.SYS 48KB
|
||
; 86/10/31 FOR X21 B4670 INT 1B SAVE BY QNES
|
||
; 86/11/12 RETURN START INE VECTOR SAVE
|
||
;--------------------------------------------------------
|
||
; 87/8 -87/9 HIRESO/NORMAL MS-DOS
|
||
;--------------------------------------------------------
|
||
; 88/2 -88/3 MS-DOS 3.3
|
||
; SCSI HD, X4x HD, EXFNC,
|
||
;--------------------------------------------------------
|
||
; 90/11 -91/7 MS-DOS 5.0
|
||
;------------------------------------------------------- 870820 ----------
|
||
BRANCH = 0 ;0 IF NOT B4670 SYSTEM
|
||
;-------------------------------------------------------------------------
|
||
include dossvc.inc
|
||
;************************************************
|
||
;* *
|
||
;* OTHER SEGMENT *
|
||
;* 0000 SEG : INTERRUPT VEC *
|
||
;* FD80 SEG : NORMAL MODE ROM *
|
||
;* *
|
||
;************************************************
|
||
|
||
HCI EQU 5
|
||
SPI EQU 6
|
||
WBT1 EQU 30
|
||
HD_BIOS EQU 0B1H
|
||
EXB EQU 220
|
||
|
||
INT_VEC SEGMENT AT 0000H
|
||
ORG 4*HCI
|
||
HCOPY_OFFSET DW ?
|
||
HSCOPY_SEGMENT DW ?
|
||
ORG 4*SPI
|
||
STPKY_OFFSET DW ?
|
||
STPKY_SEGMENT DW ?
|
||
ORG 4*08H ;TIMER H/W INT VECTOR
|
||
INT08_OFFSET DW ?
|
||
INT08_SEGMENT DW ?
|
||
;------------------------------------------------ 88/02/25 ----------
|
||
ORG 4*18H
|
||
INT18_OFFSET DW ?
|
||
INT18_SEGMENT DW ?
|
||
;--------------------------------------------------------------------
|
||
ORG 4*1AH
|
||
PRDRV_OFFSET DW ?
|
||
PRDRV_SEGMENT DW ?
|
||
ORG 4*1BH
|
||
INT1B_OFFSET DW ?
|
||
INT1B_SEGMENT DW ?
|
||
ORG 4*1CH ;TIMER VECTOR
|
||
INT1C_OFFSET DW ?
|
||
INT1C_SEGMENT DW ?
|
||
ORG 4*WBT1
|
||
WBOOT1_OFFSET DW ?
|
||
WBOOT1_SEGMENT DW ?
|
||
WBOOT2_OFFSET DW ?
|
||
WBOOT2_SEGMENT DW ?
|
||
ORG 4*32
|
||
INT32_OFFSET DW ?
|
||
INT32_SEGMENT DW ?
|
||
ORG 4*29H
|
||
INT29_OFFSET DW ?
|
||
INT29_SEGMENT DW ?
|
||
ORG 4*HD_BIOS
|
||
HD_BIOS_OFFSET DW ?
|
||
HD_BIOS_SEGMENT DW ?
|
||
ORG 4*EXB
|
||
EXBIOS_OFFSET DW ?
|
||
EXBIOS_SEGMENT DW ?
|
||
ORG 4*255
|
||
INTFF_OFFSET DW ?
|
||
INTFF_SEGMENT DW ?
|
||
|
||
ORG 402H
|
||
DISK_SELECT DB ? ;SELECT INF(85/02/02)
|
||
;--------------------------------------------------------- 89/08/18 --
|
||
ORG 460H
|
||
DISK_INF DB ?
|
||
;------------------------------------------------ 88/02/25 ----------
|
||
ORG 480H
|
||
CPU_TYPE DB ?
|
||
;--------------------------------------------------------------------
|
||
;--------------------------------------------------------- 88/03/22 --
|
||
ORG 482H
|
||
SCSIHD_EQUIP DB ? ;SCSI HD EQUIPMENT FLAGS
|
||
;---------------------------------------------------------------------
|
||
ORG 494H
|
||
DISK_EQUIP2 DB ? ;BI-MEIDA DRIVE INFO. (NORMAL)
|
||
;---------------------------------------------------- 871020 ---------
|
||
ORG 500H
|
||
BIO_FLG0 DB ? ;BIOS USE FLAGS
|
||
;---------------------------------------------------------------------
|
||
BIO_FLAG DB ? ;BIOS USE FLAGS
|
||
ORG 55CH
|
||
DISK_EQUIP DW ? ;640KB/1MB/HD EQUIPMENT FLAGS
|
||
ORG 560H
|
||
DISK_TYPE DB ? ;5"FD TYPE
|
||
ORG 584H
|
||
DISK_BOOT DB ? ;BOOT DISK DA/UA
|
||
ORG 5E6H
|
||
OMNI_SERVER DB ? ;85/03/28
|
||
OMNI_STATION DB ? ;85/03/28
|
||
|
||
INT_VEC 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
|
||
|
||
|
||
;************************************************
|
||
;* *
|
||
;* OUR SGMENT *
|
||
;* *
|
||
;************************************************
|
||
Bios_Data segment word public 'Bios_Data'
|
||
ASSUME CS:DATAGRP,DS:DATAGRP
|
||
;--------------------------------------------------------- 88/03/22 --
|
||
EXTRN HD2_NUM:BYTE,HD3_NUM:BYTE
|
||
EXTRN HDS_NUM:BYTE,HDS1_NUM:BYTE
|
||
EXTRN HDS2_NUM:BYTE,HDS3_NUM:BYTE
|
||
EXTRN HDS4_NUM:BYTE,HDS5_NUM:BYTE
|
||
EXTRN HDS6_NUM:BYTE,HDS7_NUM:BYTE
|
||
|
||
EXTRN HD2_OFFSET:WORD,HD3_OFFSET:WORD
|
||
EXTRN HD2_LAST:WORD,HD3_LAST:WORD
|
||
EXTRN HDS_OFFSET:WORD,HDS1_OFFSET:WORD
|
||
EXTRN HDS2_OFFSET:WORD,HDS3_OFFSET:WORD
|
||
EXTRN HDS4_OFFSET:WORD,HDS5_OFFSET:WORD
|
||
EXTRN HDS6_OFFSET:WORD,HDS7_OFFSET:WORD
|
||
EXTRN HDS_LAST:WORD,HDS1_LAST:WORD
|
||
EXTRN HDS2_LAST:WORD,HDS3_LAST:WORD
|
||
EXTRN HDS4_LAST:WORD,HDS5_LAST:WORD
|
||
EXTRN HDS6_LAST:WORD,HDS7_LAST:WORD
|
||
|
||
EXTRN CPV2:WORD,CPV3:WORD,BPS2:WORD,BPS3:WORD
|
||
EXTRN TPC2:BYTE,TPC3:BYTE,SPT2:BYTE,SPT3:BYTE
|
||
EXTRN CPVS:WORD,CPVS1:WORD,BPSS:WORD,BPSS1:WORD
|
||
EXTRN TPCS:BYTE,TPCS1:BYTE,SPTS:BYTE,SPTS1:BYTE
|
||
EXTRN CPVS2:WORD,CPVS3:WORD,BPSS2:WORD,BPSS3:WORD
|
||
EXTRN TPCS2:BYTE,TPCS3:BYTE,SPTS2:BYTE,SPTS3:BYTE
|
||
EXTRN CPVS4:WORD,CPVS5:WORD,BPSS4:WORD,BPSS5:WORD
|
||
EXTRN TPCS4:BYTE,TPCS5:BYTE,SPTS4:BYTE,SPTS5:BYTE
|
||
EXTRN CPVS6:WORD,CPVS7:WORD,BPSS6:WORD,BPSS7:WORD
|
||
EXTRN TPCS6:BYTE,TPCS7:BYTE,SPTS6:BYTE,SPTS7:BYTE
|
||
|
||
EXTRN HDDSK5_3:NEAR,HDDSK5_4:NEAR
|
||
EXTRN HDDSKS_1:NEAR,HDDSKS_2:NEAR
|
||
EXTRN HDDSKS_3:NEAR,HDDSKS_4:NEAR
|
||
EXTRN HDDSKS_5:NEAR,HDDSKS_6:NEAR
|
||
EXTRN HDDSKS_7:NEAR,HDDSKS_8:NEAR
|
||
|
||
EXTRN SVHD3:WORD,SVHD4:WORD
|
||
EXTRN SVHDS1:WORD,SVHDS2:WORD
|
||
EXTRN SVHDS3:WORD,SVHDS4:WORD
|
||
EXTRN SVHDS5:WORD,SVHDS6:WORD
|
||
EXTRN SVHDS7:WORD,SVHDS8:WORD
|
||
|
||
EXTRN INFSH:BYTE
|
||
EXTRN DA:BYTE
|
||
EXTRN HD_CNT:BYTE
|
||
EXTRN SCSI_CNT:BYTE
|
||
|
||
EXTRN NSHD:BYTE
|
||
|
||
EXTRN CURATTR:BYTE,DEFATTR:BYTE
|
||
EXTRN CURATTR2:WORD,DEFATTR2:WORD ; 89/08/22
|
||
EXTRN ESCATRSAVE:BYTE,RTRY_CNT:BYTE
|
||
EXTRN ATRSAVE2:WORD ; 89/08/22
|
||
EXTRN MEM_SW1:BYTE,MEM_SW2:BYTE,MEM_SW3:BYTE
|
||
EXTRN MEM_SW4:BYTE,HD_CAP:BYTE
|
||
EXTRN MEM_SW5:BYTE
|
||
EXTRN CPV:WORD,CPV1:WORD,BPS:WORD,BPS1:WORD
|
||
EXTRN TPC:BYTE,TPC1:BYTE,SPT:BYTE,SPT1:BYTE
|
||
|
||
EXTRN DSK_BUF:NEAR
|
||
EXTRN DSK_BUF2:NEAR ;90/03/27
|
||
|
||
EXTRN SYS_500:BYTE,SYS_501:BYTE
|
||
|
||
EXTRN DRV_NUM:BYTE,DEV_TBL:NEAR
|
||
EXTRN N8FD:BYTE,N5FD:BYTE,N5HD:BYTE
|
||
EXTRN SEG_DOS:WORD
|
||
|
||
EXTRN DSK8_SNG:NEAR,DSK8_DBL:NEAR
|
||
EXTRN DSK5_SNG8:NEAR,DSK5_DBL8:NEAR,DSK5_SNG9:NEAR,DSK5_DBL9:NEAR
|
||
EXTRN DSK5_DBL8D:NEAR,DSK5_DBL9D:NEAR
|
||
EXTRN HDDSK5_1:NEAR,HDDSK5_2:NEAR
|
||
EXTRN ALC_TYP:BYTE,AUT_LEX:BYTE,BT_TYP:BYTE
|
||
EXTRN HD_NUM:BYTE,HD1_NUM:BYTE
|
||
EXTRN UA:BYTE,LPTABLE:BYTE
|
||
EXTRN SVPTR:WORD,SVPTR1:WORD,SVPTR2:WORD
|
||
EXTRN HD_SPT:BYTE,HD_LNG:WORD,HD_HED:BYTE
|
||
EXTRN HD_OFFSET:WORD,HD1_OFFSET:WORD,HD_LAST:WORD,HD1_LAST:WORD
|
||
EXTRN EXLPTBL:WORD
|
||
EXTRN ERROR_FLG:BYTE
|
||
EXTRN INF8F:BYTE,INF5F:BYTE,INF5H:BYTE
|
||
EXTRN COPY_INT:NEAR,STOP_INT:NEAR,EXTBIOS:NEAR
|
||
|
||
EXTRN INT_29:NEAR
|
||
EXTRN INT_TRAP:NEAR
|
||
EXTRN REINIT_END:NEAR
|
||
EXTRN INT_FF:NEAR
|
||
|
||
EXTRN INIT_TBL:WORD
|
||
EXTRN CHR_VOL1:BYTE,CHR_X2:BYTE
|
||
EXTRN HD_LBL:BYTE
|
||
EXTRN X2_SW_00:BYTE,X2_SW_01:BYTE,DD_FLG:BYTE
|
||
EXTRN X2_SW_02:BYTE,X2_SW_03:BYTE
|
||
EXTRN SV_SELECT:BYTE,SV_RDRV:BYTE
|
||
EXTRN SVHD1:WORD,SVHD2:WORD
|
||
|
||
; B4670 FIELD
|
||
;
|
||
EXTRN VSYS_FLAG:BYTE
|
||
IF BRANCH ;-------------------------------------- 871002 -------
|
||
EXTRN VT_BPB:BYTE
|
||
EXTRN B4670ENT:NEAR,INTD3_ENTRY:NEAR,B4670_INT1F:NEAR
|
||
EXTRN ROM_INT1B:DWORD,ROM_INT1A:DWORD,NXT_INT1F:DWORD
|
||
EXTRN VDISK_BIO:NEAR,PRT_BIO:NEAR
|
||
EXTRN SENS_DRV:NEAR,VS_MOUNT:NEAR,FSTDRV:BYTE
|
||
;
|
||
;***********************86/10/31 BY QNES ************************
|
||
EXTRN X21_DSKBIO:WORD,X21_TIMBIO:WORD,X21_TIMINT:WORD
|
||
EXTRN VEC_SAVE:WORD ;86/11/12
|
||
;****************************************************************
|
||
ENDIF ;-------------------------------------------------------------
|
||
EXTRN NOT_BSYS_ENT:NEAR ;85/05/19 (ENTRY INT78
|
||
|
||
;------------------------------------ 870811- 87XXXX * H/N DOS -----------
|
||
EXTRN REVISION:BYTE ;BIO2
|
||
EXTRN INT1E_OFST:WORD ;BIO2
|
||
EXTRN INT1E_SGMT:WORD ;BIO2
|
||
EXTRN VRAMSEG:WORD ;BIO2
|
||
EXTRN LINMOD:BYTE ;BIO2
|
||
EXTRN SNGDRV_FLG:BYTE ;BIO2
|
||
EXTRN COMP_HDDSK5_1:BYTE ;BIO2
|
||
EXTRN COMP_HDOFST_N:WORD ;BIO2
|
||
EXTRN VSYS_FLAG:BYTE ;BIO2
|
||
EXTRN XPORT_FLAG:BYTE ;BIO2
|
||
EXTRN INT1B_OFST:WORD ;BIO2
|
||
EXTRN INT1B_SGMT:WORD ;BIO2
|
||
EXTRN EXT_ROM:WORD ;BIO2
|
||
;--------------------------------------------------------------------------
|
||
EXTRN TITLE_M:BYTE ;BIO2 (SIGNON MESSAGE)
|
||
;-------------------------------------------------------- 88/02/28 --
|
||
; EXTRN SAVE_INT1B:WORD
|
||
EXTRN EXFNC_START:NEAR,EXFNC_END:NEAR
|
||
; EXTRN DISK_PRM0:WORD,DISK_PRM1:WORD
|
||
; EXTRN H5_DPM:WORD
|
||
EXTRN HDINT_END:NEAR
|
||
EXTRN EXFNC_FLG:BYTE
|
||
EXTRN STACK_TOP:NEAR
|
||
EXTRN CRTBIOS_START:NEAR
|
||
EXTRN CH1MSW1:BYTE
|
||
EXTRN EXMM_SIZE:BYTE
|
||
;---------------------------------------------------------------------
|
||
EXTRN FBIGFAT:BYTE,FBIGFATS:BYTE
|
||
EXTRN START_BDS:NEAR
|
||
|
||
EXTRN MO_LPFLG:BYTE
|
||
EXTRN MOSW:BYTE,SCSI_FLG:BYTE
|
||
EXTRN YUKO_UNIT:BYTE
|
||
EXTRN MO_COUNT:BYTE
|
||
EXTRN SCSI_EQUIP:NEAR
|
||
EXTRN NSMO:BYTE
|
||
EXTRN MO_DEVICE_TBL:NEAR
|
||
EXTRN BIOSF_3:byte ; 89/08/21
|
||
|
||
EXTRN B_COMMAND:BYTE,B_SCSIID:BYTE
|
||
EXTRN B_DOFFSET:WORD,B_DSEGMENT:WORD,B_DLENGTH:WORD
|
||
EXTRN B_SCSI_STATUS:BYTE
|
||
EXTRN SCSI55_FLG:BYTE
|
||
|
||
EXTRN MO_LPFLG2:BYTE
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
EXTRN READDOS:NEAR ;READDOS
|
||
;---------------------------------------------------------------------
|
||
|
||
|
||
; extrn BDATA_END:near
|
||
extrn dosdatasg:word
|
||
|
||
;----------------------------------------------- DOS5 90/12/14 -------
|
||
EXTRN BPBCOPY:WORD
|
||
;----------------------------------------------- DOS5 90/12/25 -------
|
||
EXTRN BIOS_SEG:WORD
|
||
;----------------------------------------------- DOS5 91/01/10 -------
|
||
EXTRN INFVT:BYTE, BOOT_PART:WORD
|
||
EXTRN WSINGLE:BYTE, READ_BUF:BYTE
|
||
EXTRN BOOT_DRIVE:BYTE
|
||
EXTRN FAT16:BYTE
|
||
EXTRN BDS20:WORD
|
||
EXTRN BDS21:WORD
|
||
;----------------------------------------------- DOS5 91/02/20 -------
|
||
extrn B_DATA_END:NEAR
|
||
extrn SVPTR3:WORD, HD_MEDIA:BYTE, HDS_MEDIA:BYTE
|
||
;---------------------------------------------------------------------
|
||
Bios_Data ends
|
||
|
||
Bios_Code segment word public 'Bios_Code'
|
||
ASSUME CS:BIOS_CODE,DS:DATAGRP
|
||
;---------------------------------------------------------------------
|
||
EXTRN HDSASI_END:NEAR ;HD_SASI
|
||
; EXTRN HDSCSI_END:NEAR
|
||
EXTRN MODISK_END:NEAR ;MODISK
|
||
EXTRN MO_BIOS_far:far ;MODISK
|
||
EXTRN CMD_CLEAR_FAR:far ;MODISK
|
||
EXTRN HD_ENTI:NEAR ;HDINT
|
||
EXTRN WARM_START:NEAR ;REINIT
|
||
EXTRN CLRRTN_FAR:FAR ;CONSOLE
|
||
EXTRN MSGLOOP_FAR:FAR ;REINIT
|
||
EXTRN LEAP_OUT:FAR ;REINIT ; FOR NOT B4670)
|
||
|
||
EXTRN SAVE_INT1B:WORD ;EXFNC
|
||
EXTRN SAVE_INT18:WORD ;REINIT
|
||
|
||
Bios_Code ends
|
||
|
||
SysInitSeg segment word public 'system_init'
|
||
ASSUME CS:SYSINITSEG,DS:SYSINITSEG
|
||
EXTRN CURRENT_DOS_LOCATION:WORD
|
||
|
||
; EXTRN FINAL_DOS_LOCATION:WORD
|
||
|
||
EXTRN DEVICE_LIST:DWORD
|
||
EXTRN MEMORY_SIZE:WORD
|
||
EXTRN DEFAULT_DRIVE:BYTE
|
||
EXTRN BUFFERS:WORD ;88/03/17 BYTE -> WORD
|
||
; EXTRN FILES:BYTE
|
||
EXTRN DEFAULT_DRIVE:BYTE
|
||
|
||
; EXTRN SYSSIZE:FAR
|
||
|
||
EXTRN SYSINIT:FAR
|
||
SysInitSeg ends
|
||
|
||
|
||
Bios_Data_Init segment word public 'Bios_Data_Init'
|
||
ASSUME CS:DATAGRP,DS:DATAGRP
|
||
|
||
INIT_DATA_INIT_START:
|
||
PUBLIC INIT_DATA_INIT_START
|
||
|
||
PUBLIC INIT_A
|
||
|
||
PUBLIC INIT,LEAP_IN
|
||
|
||
INIT_A:
|
||
|
||
DEF_DRV EQU 2E4H ;DEFAULT DRIVE IN DOS
|
||
; ;KANJI = 02E4H FOR 3.XX
|
||
|
||
|
||
CMOS_SEG EQU 0E3FEH ;FOR RS232C INTERFACE
|
||
CR EQU 0DH ;CARRIAGE RETURN
|
||
LF EQU 0AH ;LINE FEED
|
||
|
||
;--------------------------------------------------------- 88/03/22 --
|
||
HDOFF_SIZE EQU 2*8
|
||
HDLST_SIZE EQU 2*8
|
||
HDNUM_SIZE EQU 1*1
|
||
HDMEDIA_SIZE EQU 23*4
|
||
FBIGFAT_SIZE EQU 1
|
||
;----------------------------------------------- DOS5 90/12/14 -------
|
||
BPB_SIZE EQU 17
|
||
HDDSK_SIZE EQU BPB_SIZE*4
|
||
;---------------------------------------------------------------------
|
||
;HDDSK_SIZE EQU 1*52
|
||
;---------------------------------------------------------------------
|
||
CPV_SIZE EQU 2*1
|
||
BPS_SIZE EQU 2*1
|
||
TPC_SIZE EQU 1*1
|
||
SPT_SIZE EQU 1*1
|
||
FBIGFAT_SIZE EQU 1*1
|
||
|
||
|
||
_INQUIRY = 12H ; Inquiry
|
||
|
||
PAGE
|
||
;** BIOS PARAMETER BLOCK DEFINITION
|
||
;
|
||
; The BPB contains information about the disk structure. It dates
|
||
; back to the earliest FAT systems and so FAT information is
|
||
; intermingled with physical driver information.
|
||
;
|
||
; A boot sector contains a BPB for its device; for other disks
|
||
; the driver creates a BPB. DOS keeps copies of some of this
|
||
; information in the DPB.
|
||
;
|
||
; The BDS structure contains a BPB within it.
|
||
;
|
||
|
||
A_BPB STRUC
|
||
BPB_BYTESPERSECTOR DW ?
|
||
BPB_SECTORSPERCLUSTER DB ?
|
||
BPB_RESERVEDSECTORS DW ?
|
||
BPB_NUMBEROFFATS DB ?
|
||
BPB_ROOTENTRIES DW ?
|
||
BPB_TOTALSECTORS DW ?
|
||
BPB_MEDIADESCRIPTOR DB ?
|
||
BPB_SECTORSPERFAT DW ?
|
||
BPB_SECTORSPERTRACK DW ?
|
||
BPB_HEADS DW ?
|
||
BPB_HIDDENSECTORS DW ?
|
||
DW ?
|
||
BPB_BIGTOTALSECTORS DW ?
|
||
DW ?
|
||
DB 6 DUP(?) ; NOTE: many times these
|
||
; ; 6 bytes are omitted
|
||
; ; when BPB manipulations
|
||
; ; are performed!
|
||
A_BPB ENDS
|
||
|
||
|
||
EXT_BOOT_SIGNATURE EQU 41 ;Extended boot signature
|
||
;
|
||
EXT_BPB_INFO STRUC
|
||
EBPB_BYTESPERSECTOR DW ?
|
||
EBPB_SECTORSPERCLUSTER DB ?
|
||
EBPB_RESERVEDSECTORS DW ?
|
||
EBPB_NUMBEROFFATS DB ?
|
||
EBPB_ROOTENTRIES DW ?
|
||
EBPB_TOTALSECTORS DW ?
|
||
EBPB_MEDIADESCRIPTOR DB ?
|
||
EBPB_SECTORSPERFAT DW ?
|
||
EBPB_SECTORSPERTRACK DW ?
|
||
EBPB_HEADS DW ?
|
||
EBPB_HIDDENSECTOR DD ?
|
||
EBPB_BIGTOTALSECTORS DD ?
|
||
EXT_BPB_INFO ENDS
|
||
;
|
||
;AN001; EXT_PHYDRV, EXT_CURHD included in the header for OS2.
|
||
EXT_IBMBOOT_HEADER STRUC
|
||
EXT_BOOT_JUMP DB 3 DUP (?)
|
||
EXT_BOOT_OEM DB 8 DUP (?)
|
||
EXT_BOOT_BPB DB size EXT_BPB_INFO dup (?)
|
||
EXT_PHYDRV DB 80h
|
||
EXT_CURHD DB 0
|
||
EXT_BOOT_SIG DB EXT_BOOT_SIGNATURE
|
||
EXT_BOOT_SERIAL DD ?
|
||
EXT_BOOT_VOL_LABEL DB 11 DUP (?)
|
||
EXT_SYSTEM_ID DB 8 DUP (?)
|
||
EXT_IBMBOOT_HEADER ENDS
|
||
|
||
|
||
bds_struc struc
|
||
bds_link dd 0ffffh ; link to next bds
|
||
bds_drivenum db 80 ; int 13 drive number
|
||
bds_drivelet db 3 ; dos drive number
|
||
|
||
; We want to embed a BPB declaration here, but we can't initialize
|
||
; it properly if we do, so we duplicate the byte/word/dword architecture
|
||
; of the BPB declaration.
|
||
|
||
;BDS_BPB db size BPBSTRUC dup (?) ; actual BPB
|
||
BDS_BPB dw 512 ; BPB_BYTESPERSECTOR
|
||
db 1 ; BPB_SECTORSPERCLUSTER
|
||
dw 1 ; BPB_RESERVEDSECTORS
|
||
db 2 ; BPB_NUMBEROFFATS
|
||
dw 16 ; BPB_ROOTENTRIES
|
||
dw 0 ; BPB_TOTALSECTORS
|
||
db 0f8h ; BPB_MEDIADESCRIPTOR
|
||
dw 1 ; BPB_SECTORSPERFAT
|
||
dw 0 ; BPB_SECTORSPERTRACK
|
||
dw 0 ; BPB_HEADS
|
||
dd 0 ; BPB_HIDDENSECTORS
|
||
dd 0 ; BPB_BIGTOTALSECTORS
|
||
|
||
bds_fatsiz db 0 ; flags...
|
||
bds_opcnt dw 0 ; open ref. count
|
||
bds_formfactor db 3 ; form factor index
|
||
bds_flags dw 0020h ; various flags
|
||
bds_ccyln dw 40 ; max number of cylinders
|
||
|
||
BDS_RBPB db size A_BPB dup (0) ; recommended BPB
|
||
|
||
bds_track db -1 ; last track accessed on drive
|
||
bds_tim_lo dw 1 ; time of last access. keep
|
||
bds_tim_hi dw 0 ; these contiguous.
|
||
bds_volid db "NO NAME ",0 ; volume id of medium
|
||
bds_vol_serial dd 0 ;current volume serial number from boot record
|
||
bds_filesys_id db "FAT12 ",0 ; current file system id from boot record
|
||
bds_struc ends
|
||
|
||
|
||
; values for various flags in bds_flags.
|
||
|
||
fnon_removable equ 01h ;for non-removable media
|
||
fchangeline equ 02h ;if changeline supported on drive
|
||
return_fake_bpb equ 04h ; when set, don't do a build bpb
|
||
; just return the fake one
|
||
good_tracklayout equ 08h ; the track layout has no funny sectors
|
||
fi_am_mult equ 10h ;if more than one logical for this physical
|
||
fi_own_physical equ 20h ;signify logical owner of this physical
|
||
fchanged equ 40h ;indicates media changed
|
||
set_dasd_true equ 80h ; set dasd before next format
|
||
fchanged_by_format equ 100h ;media changed by format
|
||
unformatted_media equ 200h ;an001; fixed disk only
|
||
|
||
|
||
|
||
PAGE
|
||
;
|
||
; DRIVE ALLOCATE REFER TABLE
|
||
;
|
||
; MEDIA TYPE ARE 4. 1 MEDIA HAS 3 BYTE.
|
||
; 1 TYPE HAS 3*4 BYTE. TABLE IS 3*4*12 BYTE.
|
||
;
|
||
ALC_TBL DB 70H ;TYPE 1
|
||
DW INF5F
|
||
DB 90H
|
||
DW INF8F
|
||
DB 80H
|
||
DW INF5H
|
||
DB 68H
|
||
DW INFVT
|
||
;
|
||
DB 70H ;TYPE 2
|
||
DW INF5F
|
||
DB 80H
|
||
DW INF5H
|
||
DB 90H
|
||
DW INF8F
|
||
DB 68H
|
||
DW INFVT
|
||
;
|
||
DB 90H ;TYPE 3
|
||
DW INF8F
|
||
DB 70H
|
||
DW INF5F
|
||
DB 80H
|
||
DW INF5H
|
||
DB 68H
|
||
DW INFVT
|
||
;
|
||
DB 90H ;TYPE 4
|
||
DW INF8F
|
||
DB 80H
|
||
DW INF5H
|
||
DB 70H
|
||
DW INF5F
|
||
DB 68H
|
||
DW INFVT
|
||
;
|
||
DB 80H ;TYPE 5
|
||
DW INF5H
|
||
DB 70H
|
||
DW INF5F
|
||
DB 90H
|
||
DW INF8F
|
||
DB 68H
|
||
DW INFVT
|
||
;
|
||
DB 80H ;TYPE 6
|
||
DW INF5H
|
||
DB 90H
|
||
DW INF8F
|
||
DB 70H
|
||
DW INF5F
|
||
DB 68H
|
||
DW INFVT
|
||
;
|
||
DB 68H ;TYPE 7
|
||
DW INFVT
|
||
DB 70H
|
||
DW INF5F
|
||
DB 90H
|
||
DW INF8F
|
||
DB 80H
|
||
DW INF5H
|
||
;
|
||
DB 68H ;TYPE 8
|
||
DW INFVT
|
||
DB 70H
|
||
DW INF5F
|
||
DB 80H
|
||
DW INF5H
|
||
DB 90H
|
||
DW INF8F
|
||
;
|
||
DB 68H ;TYPE 9
|
||
DW INFVT
|
||
DB 90H
|
||
DW INF8F
|
||
DB 70H
|
||
DW INF5F
|
||
DB 80H
|
||
DW INF5H
|
||
;
|
||
DB 68H ;TYPE 10
|
||
DW INFVT
|
||
DB 90H
|
||
DW INF8F
|
||
DB 80H
|
||
DW INF5H
|
||
DB 70H
|
||
DW INF5F
|
||
;
|
||
DB 68H ;TYPE 11
|
||
DW INFVT
|
||
DB 80H
|
||
DW INF5H
|
||
DB 70H
|
||
DW INF5F
|
||
DB 90H
|
||
DW INF8F
|
||
;
|
||
DB 68H ;TYPE 12
|
||
DW INFVT
|
||
DB 80H
|
||
DW INF5H
|
||
DB 90H
|
||
DW INF8F
|
||
DB 70H
|
||
DW INF5F
|
||
;
|
||
;INFVT DB 00000000B ;VIRTUAL DRIVE MUST BE 4
|
||
|
||
;---------------------------------------------------- 871001 -------------
|
||
;BOOT_PART DW 0 ;BOOT PARTITION ENTRY
|
||
;-------------------------------------------------------------------------
|
||
;WSINGLE DB 0
|
||
|
||
MODISK_BPB DW 2048 ; BYTE / SECTOR
|
||
DB 16 ; SECTOR / CLUSTER
|
||
DW 2 ; RESERVE SECTOR
|
||
DB 2 ; FAT AREA
|
||
DW 3072 ; ROOT DIRECTORY ENTRY
|
||
DW 65432 ; SECTOR / MEDIA
|
||
DB 0F8H ; MEDIA DESCRIPTER
|
||
DW 8 ; SECTOR / FAT AREA
|
||
;----------------------------------------------- DOS5 90/12/14 -------
|
||
DD 0 ; DUMMY
|
||
;---------------------------------------------------------------------
|
||
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
MODISK_BPB2 DW 200h ; BYTE / SECTOR
|
||
DB 4 ; SECTOR / CLUSTER
|
||
DW 1 ; RESERVE SECTOR
|
||
DB 2 ; FAT AREA
|
||
DW 200h ; ROOT DIRECTORY ENTRY
|
||
DW 0 ; SECTOR / MEDIA
|
||
DB 0f0h ; MEDIA DESCRIPTER
|
||
DW 0f3h ; SECTOR / FAT AREA
|
||
DD 3cbe0h ; total sectors
|
||
;---------------------------------------------------------------------
|
||
|
||
;READ_BUF DB 24H DUP (0)
|
||
|
||
;----------------------------------------------- DOS5 91/05/17 -------
|
||
MSG_INVALIDpt DB 13,10,07,'<27>T<EFBFBD>ڈȍ~<7E>̃A<CC83>N<EFBFBD>e<EFBFBD>B<EFBFBD>u<EFBFBD>ȗ̈<C897><CC88>͖<EFBFBD><CD96><EFBFBD><EFBFBD>ł<EFBFBD><C582>'
|
||
DB '<27>N<EFBFBD><4E><EFBFBD>ł<EFBFBD><C582>܂<EFBFBD><DC82><EFBFBD>',0
|
||
;---------------------------------------------------------------------
|
||
|
||
PAGE
|
||
EVEN
|
||
;****************************************************************
|
||
;* *
|
||
;* INIT ENTRY POINT *
|
||
;* *
|
||
;* INPUT: (SI) BOOT PARTITION ENTRY ADDR (HD ONLY) *
|
||
;* *
|
||
;****************************************************************
|
||
|
||
DOSSPOT LABEL WORD
|
||
|
||
INIT: ;PRINT SIGN ON MESSAGE AND INITIALIZE
|
||
CLI ;INTERRUPT DISABLE
|
||
;------ added @12/03/1992 for NEC emulation dos debugging
|
||
; int 3
|
||
;------ end of midification @12/03/1992 NEC
|
||
MOV AX,CS ;WE ENTERED WITH A JMPF SO USE
|
||
MOV SS,AX ;CS: AS THE INITIAL VALUE OF SS:,
|
||
MOV DS,AX ; DS:
|
||
MOV ES,AX ; AND ES:
|
||
; USE LOCAL STACK DURING INITIALIZATION
|
||
;93/03/26 MVDM DOS5.0A-------------------------- DOS5A 92/05/21 --------
|
||
;<patch BIOS50-P19>
|
||
MOV SP,0ffffh
|
||
;---------------
|
||
;;;;; MOV SP,OFFSET STACK_TOP
|
||
;-----------------------------------------------------------------------
|
||
;------------------------------------------------- 871001 ------------
|
||
;93/03/26 MVDM DOS5.0A-------------------------- DOS5A 92/04/17 --------
|
||
db 4 dup (90h)
|
||
;---------------
|
||
; SUB SI,0100H
|
||
;-----------------------------------------------------------------------
|
||
MOV [BOOT_PART],SI ;PARTITION (NORMAL ONLY)
|
||
;---------------------------------------------------------------------
|
||
;
|
||
; SETUP ALL INTERRUPT VECTOR IN LOW MEMORY EXCEPT 0 - 1FH
|
||
;
|
||
PUSH DS ;SAVE THE DS REGISTER
|
||
PUSH ES ;SAVE ES
|
||
XOR AX,AX ;CLEAR AX
|
||
MOV DS,AX
|
||
MOV ES,AX ;SET ES AND DS ZERO
|
||
; SETUP INTERRUPT
|
||
ASSUME DS:INT_VEC
|
||
MOV INT32_OFFSET,OFFSET INT_TRAP
|
||
MOV INT32_SEGMENT,CS
|
||
MOV SI,OFFSET INT32_OFFSET
|
||
MOV DI,SI
|
||
ADD DI,4
|
||
MOV CX,446
|
||
CLD
|
||
REP MOVSW
|
||
|
||
CALL B4670VEC ;VECTOR SAVE ROUTINE FOR B4670 870827
|
||
;------ deleted following instruction for debugging @12/03/1992 NEC
|
||
JMP LEAP_OUT ;ROM BUG FIX ROUTINE (REINIT)
|
||
;------ end of modification @12/03/1992
|
||
|
||
LEAP_IN PROC FAR
|
||
|
||
LEAP_IN ENDP
|
||
|
||
;
|
||
; WARM START VECTOR ALREADY HAS BEEN SETTED UP (AT ITF)
|
||
;
|
||
MOV INT29_OFFSET,OFFSET INT_29 ;(41)
|
||
MOV INT29_SEGMENT,CS
|
||
MOV EXBIOS_OFFSET,OFFSET EXTBIOS ;(220)
|
||
MOV EXBIOS_SEGMENT,CS ;(220);NEC NT PROT
|
||
;********************************************************
|
||
;* *
|
||
;* << NORMAL MODE ONLY >> 870827 *
|
||
;* *
|
||
;* SETUP WARM INT VECTOR *
|
||
;* & CHECK 5"2DD EXT ROM ( N10 ONLY ) *
|
||
;* & CHECK 5"HD EXT ROM ( N10 ONLY ) *
|
||
;* *
|
||
;********************************************************
|
||
|
||
CALL CHK_CRTBIOS ;CHECK HIRESO XA,XL
|
||
|
||
ASSUME DS:DATAGRP
|
||
POP ES
|
||
POP DS
|
||
;
|
||
;********************************************************
|
||
;* *
|
||
;* INITIALIZE SCREEN/KEYBORAD *
|
||
;* & SET INIT VALUE TO IO.SYS VARIABLE *
|
||
;* *
|
||
;********************************************************
|
||
|
||
CALL SETVRAM ;CHECK H/W MODE & SET VRAM SEGMENT
|
||
CALL SETCMOS ;GET/SET MEMORY SW CONTENTS
|
||
CALL SAV_FLAG ;SAVE 0:500/501 VALUE
|
||
CALL DEFULT ;SET DEFULT VALUE
|
||
CALL SETVAL ;SET IO.SYS VARIABLE -------870826--
|
||
CALL KBINIT ;KB BIO INITIALIZE
|
||
STI ;ENABLE INTERRUPT
|
||
|
||
;********************************************************
|
||
;* *
|
||
;* GENERATE HARD DISK MANAGEMENT INFORMATION *
|
||
;* *
|
||
;********************************************************
|
||
HARD_INF:
|
||
PUSH DS ;SAVE DS
|
||
XOR AX,AX ;CLEAR AX
|
||
MOV DS,AX ;SET ZERO TO DS
|
||
MOV BX,564H ;SET S0 ADDR (85/03/01)
|
||
MOV CX,4 ;SET LOOP TIMES
|
||
SET_AI:
|
||
OR DS:BYTE PTR[BX],0C0H ;SET AI FLAG
|
||
ADD BX,8 ;NEXT ADDR (85/03/01)
|
||
LOOP SET_AI
|
||
;
|
||
ASSUME DS:INT_VEC
|
||
MOV AL,0A0H ;NEC NT PROT
|
||
MOV CS:[BT_TYP],AL ;SAVE IT
|
||
MOV AL,0 ;NEC NT PROT
|
||
MOV CS:[SV_SELECT],AL ;SAVE IT
|
||
MOV AX,[DISK_EQUIP] ;GET DISK EQUIPMENT INFORMATION
|
||
;---------------------------------------------------------- 88/03/21 --
|
||
AND AH,0FH ;ONLY SASI EQUIP
|
||
MOV CS:[INF5H],AH ;SAVE IT
|
||
MOV AH,1 ;NEC NT PROT
|
||
ASSUME DS:DATAGRP
|
||
POP DS
|
||
MOV [INFSH],AH ;SAVE IT
|
||
;
|
||
CMP [INF5H],00H ;SASI UNIT ?
|
||
JE SASI_EXIT ;NO SASI
|
||
MOV DA,00H
|
||
MOV HD_CNT,0 ;SASI HD TABLE #0
|
||
TEST INF5H,01H ;SASI #0?
|
||
JZ SASI010 ;NO
|
||
MOV UA,00H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SASI010:
|
||
MOV HD_CNT,1 ;SASI HD TABLE #1
|
||
TEST INF5H,02H ;SASI #1
|
||
JZ SASI020 ;NO
|
||
MOV UA,01H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SASI020:
|
||
MOV HD_CNT,2 ;SASI HD TABLE #2
|
||
TEST INF5H,04H ;SASI #2?
|
||
JZ SASI030 ;NO
|
||
MOV UA,02H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SASI030:
|
||
MOV HD_CNT,3 ;SASI HD TABLE #3
|
||
TEST INF5H,08H ;SASI #3 ?
|
||
JZ SASI040 ;NO
|
||
MOV UA,03H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SASI040:
|
||
SASI_EXIT:
|
||
CMP INFSH,00H ;SCSI UNIT ?
|
||
JNZ SCSI005
|
||
JMP SCSI_EXIT ;
|
||
SCSI005:
|
||
MOV DA,20H
|
||
MOV HD_CNT,0 ;SCSIHD TABLE #0
|
||
TEST INFSH,01H ;SCSI #0?
|
||
JZ SCSI010 ;NO
|
||
INC SCSI_CNT
|
||
MOV UA,00H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SCSI010:
|
||
MOV HD_CNT,1 ;SCSIHD TABLE #1
|
||
TEST INFSH,02H ;SCSI #1?
|
||
JZ SCSI020 ;NO
|
||
INC SCSI_CNT
|
||
MOV UA,01H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SCSI020:
|
||
MOV HD_CNT,2 ;SCSIHD TABLE #2
|
||
TEST INFSH,04H ;SCSI #2?
|
||
JZ SCSI030 ;NO
|
||
INC SCSI_CNT
|
||
MOV UA,02H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SCSI030:
|
||
MOV HD_CNT,3 ;SCSIHD TABLE #3
|
||
TEST INFSH,08H ;SCSI #3?
|
||
JZ SCSI040 ;NO
|
||
INC SCSI_CNT
|
||
MOV UA,03H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SCSI040:
|
||
MOV HD_CNT,4 ;SCSIHD TABLE #4
|
||
TEST INFSH,10H ;SCSI #4?
|
||
JZ SCSI050 ;NO
|
||
INC SCSI_CNT
|
||
CMP SCSI_CNT,4
|
||
JA SCSI_EXIT
|
||
MOV UA,04H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SCSI050:
|
||
MOV HD_CNT,5 ;SCSIHD TABLE #5
|
||
TEST INFSH,20H ;SCSI #5?
|
||
JZ SCSI060 ;NO
|
||
INC SCSI_CNT
|
||
CMP SCSI_CNT,4
|
||
JA SCSI_EXIT
|
||
MOV UA,05H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SCSI060:
|
||
MOV HD_CNT,6 ;SCSIHD TABLE #6
|
||
TEST INFSH,40H ;SCSI #6?
|
||
JZ SCSI070 ;NO
|
||
INC SCSI_CNT
|
||
CMP SCSI_CNT,4
|
||
JA SCSI_EXIT
|
||
MOV UA,06H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SCSI070:
|
||
MOV HD_CNT,7 ;SCSIHD TABLE #7
|
||
TEST INFSH,80H ;SCSI #7?
|
||
JZ SCSI080 ;NO
|
||
INC SCSI_CNT
|
||
CMP SCSI_CNT,4
|
||
JA SCSI_EXIT
|
||
MOV UA,07H
|
||
CALL HARDINIT ;HARD DISK INITIARIZE
|
||
SCSI080:
|
||
SCSI_EXIT:
|
||
;----------------------------------------------------------------------
|
||
HARD_EXIT:
|
||
MO_DISK:
|
||
JMP MKTBL ;NEC NT PROT
|
||
;------------------------------------------------ DOS5 91/08/00 --------
|
||
mov al,MO_LPFLG
|
||
push ax
|
||
call CNV_MO_LPFLG
|
||
;-----------------------------------------------------------------------
|
||
CMP BYTE PTR MO_LPFLG,00H
|
||
JZ MODISK_EXIT
|
||
MOV DA,20H
|
||
MOV HD_CNT,0
|
||
MOV SCSI_CNT,0
|
||
MOV UA,0
|
||
MOINIT010:
|
||
CMP UA,8
|
||
JAE MODISK_EXIT
|
||
MOV AL,01H
|
||
MOV CL,HD_CNT
|
||
SHL AL,CL
|
||
TEST BYTE PTR MO_LPFLG,AL
|
||
JZ MOINIT020
|
||
INC SCSI_CNT
|
||
; CMP SCSI_CNT,2
|
||
CMP SCSI_CNT,4 ;DOS5 5"MO*2 + 3.5"MO*2
|
||
JA MODISK_EXIT
|
||
CALL MODISK_INIT
|
||
MOINIT020:
|
||
INC HD_CNT
|
||
INC UA
|
||
JMP MOINIT010
|
||
MODISK_EXIT:
|
||
;------------------------------------------------ DOS5 91/08/00 --------
|
||
pop ax
|
||
mov MO_LPFLG,al
|
||
;-----------------------------------------------------------------------
|
||
;********************************************************
|
||
;* *
|
||
;* MAKE LOGICAL-PHYSICAL CONVERTING TABLE *
|
||
;* *
|
||
;********************************************************
|
||
MKTBL:
|
||
;********************************************************
|
||
;* *
|
||
;* SET BDS TABLE *
|
||
;* *
|
||
;********************************************************
|
||
CALL SET_BDS
|
||
|
||
;------------------------------------------------DOS5 91/02/20-----------
|
||
;********************************************************
|
||
;* *
|
||
;* REASSIGN PROPER BPB ACCORDING TO BDS *
|
||
;* *
|
||
;********************************************************
|
||
CALL REASS_INITTBL
|
||
;------------------------------------------------------------------------
|
||
|
||
;********************************************************
|
||
;* *
|
||
;* DISPLAY FUNCTION KEY & PRINT TITLE MESSAGE *
|
||
;* *
|
||
;********************************************************
|
||
CALL CSRON ;DISPLAY CURSOR
|
||
|
||
;********************************************************
|
||
;* *
|
||
;* GET & SET MAIN MEMORY SIZE *
|
||
;* *
|
||
;********************************************************
|
||
PUSH DS ;SAVE DS
|
||
ASSUME DS:INT_VEC
|
||
XOR AX,AX
|
||
MOV DS,AX ;DS <- 0000H
|
||
MOV AL,[BIO_FLAG]
|
||
ASSUME DS:DATAGRP
|
||
POP DS ;RESTORE DS
|
||
MOV DX,2000H ;SET 128K
|
||
AND AL,07H ;GET MEMORY BITS
|
||
JZ MEM_END
|
||
COMP_MEM:
|
||
ADD DX,2000H ;PLUS 128K
|
||
DEC AL
|
||
JNZ COMP_MEM
|
||
MEM_END:
|
||
;********************************************************
|
||
;* *
|
||
;* SET DEFAULT DRIVE *
|
||
;* *
|
||
;********************************************************
|
||
;------------------------------------------------DOS5 91/05/14----------
|
||
CMP [SV_RDRV],4 ; boot from 5th or later partition
|
||
JB DO_SETDRVNUM
|
||
MOV BX,OFFSET DATAGRP:MSG_INVALIDpt ;Invalid partition mesage
|
||
CALL MSGLOOP_FAR
|
||
HLTLOOP:
|
||
JMP HLTLOOP ; error!!!!
|
||
|
||
DO_SETDRVNUM:
|
||
;-----------------------------------------------------------------------
|
||
CALL SETDRVNUM ;84/11/18
|
||
MOV AL,[BT_TYP]
|
||
|
||
IF BRANCH ;-----------------------------------------------------
|
||
PUSH AX ;
|
||
AND AL,0F0H ;ONLY DA
|
||
CMP AL,60H ;BOOT FROM B4670 ?
|
||
POP AX ;
|
||
JNE SKIP_VBT ;NO,
|
||
MOV BL,[FSTDRV] ;1ST VDRIVE NO.
|
||
AND AL,03H ;
|
||
ADD BL,AL ;
|
||
JMP SET_DEFAULT ;
|
||
SKIP_VBT: ;
|
||
ENDIF ;-------------------------------------------------------------
|
||
|
||
PUSH AX
|
||
AND AL,0F0H
|
||
;--------------------------------------------------- 871011 ----------
|
||
CMP AL,0F0H ;1MBFD ON 640KB-INF ?
|
||
POP AX
|
||
JNE SKIP_SBT0 ; NO,
|
||
;------------------------------------------------ MSDOS 3.3B BUG ------
|
||
AND AL,07FH ; YES, TREAT TO 7x 90/03/16
|
||
;----------------------------------------------------------------------
|
||
JMP SHORT SKIP_SBT
|
||
SKIP_SBT0:
|
||
PUSH AX
|
||
AND AL,0F0H
|
||
CMP AL,10H ;640KBFD ON 1MB-INF ?
|
||
;93/03/26 MVDM DOS5.0A------------------------- DOS5A 92/12/01 ------
|
||
;<patch BIOS50-P30>
|
||
|
||
extrn patch144_d2:near
|
||
public patch144_d2_ret, SKIP_SBT
|
||
|
||
jmp patch144_d2
|
||
|
||
patch144_d2_ret:
|
||
;---------------
|
||
; POP AX
|
||
; JNE SKIP_SBT ; NO,
|
||
;---------------------------------------------------------------------
|
||
OR AL,80H ; YES, ADJUST TO 9x
|
||
SKIP_SBT:
|
||
MOV CX,26
|
||
MOV BX,OFFSET EXLPTBL+1 ;SET DA/UA TABLE ADDR
|
||
;------------------------------------------------------- 871001 ------
|
||
; TEST SV_SELECT,40H ;BOOT FROM HARD DISK ?
|
||
; JZ SEARCHBT ;SKIP IF NO
|
||
;----------------
|
||
PUSH AX ;
|
||
AND AL,0F0H ;DA ONLY
|
||
|
||
CMP AL,80H ;BOOT FROM SASI ?
|
||
JZ SKIP_SASI
|
||
CMP AL,0A0H ;BOOT FROM SCSI ?
|
||
POP AX
|
||
JZ X_DRCNT
|
||
JMP short SEARCHBT
|
||
|
||
; POP AX ;
|
||
; JNE SEARCHBT ;NO,
|
||
SKIP_SASI:
|
||
POP AX
|
||
;--------------------------------------------------------- 90/03/20 --
|
||
PUSH BX
|
||
MOV BX,OFFSET X2_SW_00
|
||
PUSH AX
|
||
AND AX,000FH
|
||
ADD BX,AX
|
||
POP AX
|
||
TEST BYTE PTR [BX],-1
|
||
POP BX
|
||
JNZ X_DRCNT ;850610
|
||
JMP short SEARCHBT ;88/03/22
|
||
|
||
; CMP AL,82H ;SASI #2
|
||
; JAE X_DRCNT
|
||
;------------------------------------------------------- 871011 ------
|
||
; TEST AL,01H ;UNIT#1 ?
|
||
; JNZ SKPUNT0 ;YES,
|
||
;---------------------------------------------------------------------
|
||
; TEST [X2_SW_00],-1 ;850610
|
||
; JNZ X_DRCNT ;850610
|
||
; JMP SEARCHBT ;88/03/22
|
||
;SKPUNT0:
|
||
; TEST [X2_SW_01],-1 ;850610
|
||
; JNZ X_DRCNT ;88/03/22
|
||
; JMP SEARCHBT ;88/03/22
|
||
;---------------------------------------------------------------------
|
||
X_DRCNT: ;850610
|
||
;** MOV AH,[BT_TYP] ;COMMENT 871001
|
||
ADDDRV:
|
||
CMP [BX],AL ;HIT? DL->AL 871001
|
||
JE SKIP_ADD ;YES,
|
||
INC [SV_RDRV] ;NO, NEXT
|
||
ADDDRV10:
|
||
ADD BX,2
|
||
LOOP ADDDRV ; JMP ADDDRV --> LOOP ADDDRV 88/05/19
|
||
|
||
SKIP_ADD:
|
||
MOV BL,[SV_RDRV] ;GET RELATIVE DRIVE
|
||
JMP SHORT SET_DEFAULT
|
||
|
||
SEARCHBT:
|
||
CMP [BX],AL ;HIT ?
|
||
JE SEARCHBT_10 ;SKIP IF SO
|
||
INC BX
|
||
INC BX
|
||
LOOP SEARCHBT
|
||
SEARCHBT_10:
|
||
SUB BX,OFFSET EXLPTBL+1
|
||
SHR BX,1
|
||
|
||
;****************************************870827 NEW
|
||
;* *
|
||
;* SET IO.SYS VARIABLE -2 *
|
||
;* *
|
||
;****************************************
|
||
CALL SETVAL2
|
||
;********************************************************
|
||
;* *
|
||
;* SET MM SIZE & BUFFERS INITIAL VALUE *
|
||
;* *
|
||
;********************************************************
|
||
SET_DEFAULT:
|
||
MOV AX,SEG SYSINITSEG
|
||
MOV DS,AX
|
||
ASSUME DS:SYSINITSEG
|
||
MOV [MEMORY_SIZE],DX
|
||
;------------------------------------------------ 870825 - BUFFERS ---
|
||
MOV AX,0002H ;
|
||
CMP DX,6000H ; MM BUFFERS
|
||
JB SET_BUFFERS ; ----------------------
|
||
MOV AX,0005H ; 128KB 2
|
||
JE SET_BUFFERS ; 256KB 2
|
||
MOV AX,000AH ; 384KB 5
|
||
CMP DX,8000H ; 512KB 10
|
||
JE SET_BUFFERS ; 640KB 20
|
||
MOV AX,0014H ; 768KB 20
|
||
SET_BUFFERS: ;
|
||
MOV [BUFFERS],AX ; 768KB IS HIRESO ONLY
|
||
; 88/03/17 AL -> AX
|
||
;---------------------------------------------------------------------
|
||
;********************************************************
|
||
;* *
|
||
;* SYSINIT CALL *
|
||
;* *
|
||
;********************************************************
|
||
;
|
||
; IO.SYS FILE SIZE MUST BE FIXED
|
||
; L(IO.SYS)...64K
|
||
;
|
||
BIOSSIZ EQU 1000H ;BIOS SIZE (PARAGRAH) 46KB(871001)
|
||
|
||
MOV AX,CS
|
||
ADD AX,BIOSSIZ
|
||
PUSH DS
|
||
MOV DS,AX
|
||
;----------------------------------------- LOAD MSDOS.SYS 871002 -----
|
||
PUSH AX ;SAVE DOS LOCATION
|
||
PUSH BX ;SAVE DEFAULT DRIVE
|
||
CALL READDOS ;LOAD MS-DOS
|
||
POP BX ;
|
||
POP AX
|
||
;---------------------------------------------------------------------
|
||
; MOV DS:[DEF_DRV],BL
|
||
POP DS
|
||
push ax
|
||
SVC SVC_DEMGETBOOTDRIVE
|
||
dec al
|
||
MOV CS:[BOOT_DRIVE],AL
|
||
MOV [DEFAULT_DRIVE],AL ;1 ORIGIN DRIVE NUMBER
|
||
pop ax
|
||
MOV [CURRENT_DOS_LOCATION],AX
|
||
;
|
||
MOV AX,CS
|
||
MOV WORD PTR [DEVICE_LIST+2],AX
|
||
MOV WORD PTR [DEVICE_LIST],OFFSET DEV_TBL
|
||
;
|
||
MOV AX,OFFSET REINIT_END
|
||
;--------------------------------------------------------- 88/03/23 --
|
||
CMP CS:[INFSH],00H
|
||
JZ FINAL_08
|
||
MOV AX,OFFSET HDSASI_END
|
||
FINAL_08:
|
||
;---------------------------------------------------------------------
|
||
;--------------------------------------------------------- 88/03/23 --
|
||
TEST CS:[SYS_501],01110000B
|
||
JZ FINAL_05
|
||
CMP CS:[INF5H],00H
|
||
JZ FINAL_06
|
||
MOV AX,OFFSET HDSASI_END
|
||
;------------------------------------------------------ 88/02/25 -----
|
||
CMP CS:EXFNC_FLG,0
|
||
JZ FINAL_06
|
||
MOV AX,OFFSET EXFNC_END
|
||
JMP short FINAL_06
|
||
FINAL_05:
|
||
MOV AX,OFFSET HDINT_END
|
||
FINAL_06:
|
||
;---------------------------------------------------------------------
|
||
;--------------------------------------------------------- 88/03/23 --
|
||
CMP BYTE PTR CS:MO_LPFLG,00H
|
||
JZ FINAL_09
|
||
MOV AX,OFFSET MODISK_END
|
||
FINAL_09:
|
||
;---------------------------------------------------------------------
|
||
IF BRANCH ;--------------------------------------- 871002 ------
|
||
TEST CS:MEM_SW4,10H
|
||
JZ FINAL_10
|
||
MOV AX,OFFSET DOSSPOT
|
||
CALL BRNCINIT ;85/04/11
|
||
ENDIF ;-------------------------------------------------------------
|
||
FINAL_10:
|
||
;------------------------------------------------ DOS5 91/01/20 --------
|
||
MOV SI,WORD PTR CS:START_BDS
|
||
MOV CX,1
|
||
SEARCH_BDS:
|
||
CMP WORD PTR CS:[SI].BDS_LINK,-1
|
||
JE GOT_BDS_END
|
||
INC CX
|
||
MOV SI,WORD PTR CS:[SI].BDS_LINK
|
||
JMP SEARCH_BDS
|
||
GOT_BDS_END:
|
||
MOV AX,OFFSET DATAGRP:BDS21 ;END ADDR (#DRIVE=<20)
|
||
CMP CX,20
|
||
JBE SET_END_ADDR
|
||
MOV AX,OFFSET DATAGRP:B_DATA_END ;END ADDR (#DRIVE>20)
|
||
SET_END_ADDR:
|
||
;-----------------------------------------------------------------------
|
||
|
||
ADD AX,000FH
|
||
MOV CL,4
|
||
SHR AX,CL
|
||
ADD AX,60H ;85/03/05
|
||
mov cs:[dosdatasg],ax
|
||
|
||
; MOV [FINAL_DOS_LOCATION],AX
|
||
;
|
||
MOV CS:[SEG_DOS],AX
|
||
;
|
||
JMP SYSINIT
|
||
|
||
PAGE
|
||
;****************************************************************
|
||
;* *
|
||
;* SUBROUTINES *
|
||
;* *
|
||
;****************************************************************
|
||
ASSUME DS:DATAGRP
|
||
|
||
;************************************************
|
||
;* *
|
||
;* B4670 SUBROUTINES *
|
||
;* *
|
||
;************************************************
|
||
|
||
B4670VEC:
|
||
IF BRANCH ;-----------------------------------------------------
|
||
MOV AX,[INT1B_OFFSET] ;SAVE VECTOR FOR RETURN,START
|
||
MOV CS:[X21_DSKBIO],AX ;
|
||
MOV AX,[INT1B_SEGMENT]
|
||
MOV CS:[X21_DSKBIO+2],AX
|
||
|
||
MOV AX,[INT1C_OFFSET] ;SAVE VECTOR FOR RETURN,START
|
||
MOV CS:[X21_TIMBIO],AX ;TIMER
|
||
MOV AX,[INT1C_SEGMENT]
|
||
MOV CS:[X21_TIMBIO+2],AX
|
||
|
||
MOV AX,[INT08_OFFSET] ;SAVE VECTOR FOR RETURN,START
|
||
MOV CS:[X21_TIMINT],AX ;TIMER
|
||
MOV AX,[INT08_SEGMENT]
|
||
MOV CS:[X21_TIMINT+2],AX
|
||
ENDIF ;-------------------------------------------------------------
|
||
RET
|
||
|
||
BRNCINIT:
|
||
IF BRANCH ;-----------------------------------------------------
|
||
PUSH AX
|
||
PUSH ES
|
||
PUSH CS
|
||
POP ES
|
||
MOV DI,OFFSET DATAGRP:INIT_TBL
|
||
MOV AX,OFFSET DATAGRP:VT_BPB
|
||
MOV CX,26
|
||
CLD
|
||
REP STOSW
|
||
POP ES
|
||
POP AX
|
||
ENDIF ;-------------------------------------------------------------
|
||
RET
|
||
|
||
SETDRVNUM:
|
||
MOV AL,90H
|
||
CALL CNTDRV
|
||
MOV N8FD,CL
|
||
MOV AL,70H
|
||
CALL CNTDRV
|
||
MOV N5FD,CL
|
||
MOV AL,80H ;DA=SASI HD
|
||
CALL CNTDRV
|
||
MOV N5HD,CL
|
||
;--------------------------------------------------------- 88/03/22 --
|
||
MOV [MOSW],00H
|
||
MOV AL,0A0H ;DA=SCSI HD
|
||
CALL CNTDRV
|
||
MOV NSHD,CL
|
||
MOV [MOSW],01H
|
||
MOV AL,0A0H
|
||
CALL CNTDRV
|
||
MOV NSMO,CL
|
||
;---------------------------------------------------------------------
|
||
RET
|
||
|
||
CNTDRV:
|
||
MOV BX,OFFSET EXLPTBL+1
|
||
XOR CL,CL
|
||
CNTDRV10:
|
||
CMP BYTE PTR[BX],0
|
||
JE CNTDRV30
|
||
MOV AH,[BX]
|
||
AND AH,0F0H ;ONLY DA
|
||
CMP AH,AL
|
||
JNZ CNTDRV20
|
||
;--------------------------------------------------------- 89/08/19 --
|
||
CMP AL,0A0H
|
||
JNZ CNTDRV18
|
||
CMP [MOSW],0
|
||
JNZ CNTDRV16
|
||
;------------------------------------------------DOS5 91/08/00-----------
|
||
test BYTE PTR [BX-1],01H
|
||
;---------------
|
||
; CMP BYTE PTR [BX-1],00H
|
||
;------------------------------------------------------------------------
|
||
JZ CNTDRV18
|
||
JMP short CNTDRV20
|
||
CNTDRV16:
|
||
;------------------------------------------------DOS5 91/08/00-----------
|
||
test BYTE PTR [BX-1],01H
|
||
jnz CNTDRV18
|
||
;---------------
|
||
; CMP BYTE PTR [BX-1],01H
|
||
; JZ CNTDRV18
|
||
;------------------------------------------------------------------------
|
||
JMP short CNTDRV20
|
||
CNTDRV18:
|
||
;---------------------------------------------------------------------
|
||
INC CL
|
||
CNTDRV20:
|
||
ADD BX,2
|
||
JMP SHORT CNTDRV10
|
||
CNTDRV30:
|
||
RET
|
||
|
||
B4670_CNT:
|
||
IF BRANCH ;-----------------------------------------------------
|
||
MOV [FSTDRV],0 ;CLEAR
|
||
PUSH AX
|
||
PUSH BX
|
||
B4670_CNT_LOOP:
|
||
MOV AL,[BX] ;GET DA/UA
|
||
OR AL,AL
|
||
JZ B4670_CNT_EXIT ;SKIP IF NULL
|
||
AND AL,0F0H ;ONLY DA
|
||
CMP AL,60H ;VIRTUAL DISK
|
||
JE B4670_CNT_EXIT
|
||
INC [FSTDRV]
|
||
ADD BX,2
|
||
JMP SHORT B4670_CNT_LOOP ;SEARCH NEXT
|
||
B4670_CNT_EXIT:
|
||
POP BX
|
||
POP AX
|
||
ENDIF ;-------------------------------------------------------------
|
||
RET
|
||
|
||
;************************************************
|
||
;* *
|
||
;* << NORMAL MODE ONLY >> 870827 *
|
||
;* *
|
||
;* SETUP WARM INT VECTOR *
|
||
;* & CHECK 5"2DD EXT ROM ( N10 ONLY ) *
|
||
;* & CHECK 5"HD EXT ROM ( N10 ONLY ) *
|
||
;* *
|
||
;************************************************
|
||
ASSUME DS:INT_VEC
|
||
|
||
;************************************************
|
||
;* *
|
||
;* CHKECK CRT BIOS *
|
||
;* XA,XL(H) INT 18 SAVE *
|
||
;************************************************
|
||
CHK_CRTBIOS:
|
||
TEST BYTE PTR [BIO_FLAG],08H
|
||
JZ CRTBIOS_10
|
||
TEST BYTE PTR [CPU_TYPE],02H
|
||
JNZ CRTBIOS_10
|
||
PUSH AX
|
||
PUSH ES
|
||
MOV ES,CS:BIOS_SEG ;BIOS CODE SEGMENT
|
||
MOV AX,[INT18_OFFSET]
|
||
MOV ES:SAVE_INT18,AX
|
||
MOV AX,[INT18_SEGMENT]
|
||
MOV ES:SAVE_INT18+2,AX
|
||
MOV WORD PTR [INT18_OFFSET],OFFSET CRTBIOS_START
|
||
MOV WORD PTR [INT18_SEGMENT],CS
|
||
POP ES
|
||
POP AX
|
||
CRTBIOS_10:
|
||
RET
|
||
|
||
ASSUME DS:DATAGRP
|
||
|
||
;************************************************
|
||
;* *
|
||
;* GET & SET MEMORY SWITCH CONTENT *
|
||
;* *
|
||
;************************************************
|
||
SETVRAM:
|
||
PUSH DS
|
||
XOR AX,AX
|
||
MOV DS,AX
|
||
MOV CS:[VRAMSEG],0A000H
|
||
TEST BYTE PTR DS:[0501H],08H ;HW-MODE ?
|
||
JZ SETVRAM10 ;NORMAL
|
||
MOV CS:[VRAMSEG],0E000H ;HIRESO
|
||
SETVRAM10:
|
||
POP DS
|
||
RET
|
||
;************************************************
|
||
;* *
|
||
;* GET & SET MEMORY SWITCH CONTENT *
|
||
;* *
|
||
;************************************************
|
||
SETCMOS:
|
||
PUSH DS
|
||
;---------------------------------------------------------------------
|
||
; MOV AX,CMOS_SEG ;SET CMOS SEG ADDR
|
||
;--------
|
||
MOV AX,CS:[VRAMSEG]
|
||
ADD AX,03FEH
|
||
;---------------------------------------------------------------------
|
||
MOV DS,AX
|
||
MOV SI,2
|
||
MOV DI,OFFSET MEM_SW1
|
||
MOV CX,4
|
||
L_MEMSW1:
|
||
MOVSB ;GET MEMORY SWITCH 1-4
|
||
ADD SI,3
|
||
LOOP L_MEMSW1
|
||
MOV DI,OFFSET MEM_SW5
|
||
MOV CX,3
|
||
L_MEMSW5:
|
||
MOVSB ;GET MEMORY SWITCH 5-7
|
||
ADD SI,3
|
||
LOOP L_MEMSW5
|
||
;------------------------------------------------------ 88/03/31 -----
|
||
XOR AX,AX
|
||
MOV DS,AX ;DS = SEGMENT 0
|
||
MOV AL,DS:[458H] ;GET BIOSF_3 89/08/21
|
||
MOV CS:BYTE PTR [BIOSF_3],AL;SET BIOSF_3 89/08/21
|
||
MOV AL,DS:[0401H] ;GET EXTENDED MM SIZE
|
||
POP DS
|
||
MOV [EXMM_SIZE],AL ;SAVE IT
|
||
; < COPY MEM_SW1-2 TO CH?MSW1-2 >
|
||
MOV DI,OFFSET CH1MSW1
|
||
MOV SI,DI
|
||
MOV AL,[MEM_SW1] ;GET MM SW1
|
||
STOSB ;COPY TO C#1
|
||
MOV AL,[MEM_SW2]
|
||
AND AL,0FH ;GET MM SW2 (BAUD RATE ONLY)
|
||
STOSB ;COPY TO C#1
|
||
MOV CX,4 ;COPY 4 TIMES
|
||
REP MOVSB
|
||
;---------------------------------------------------------------------
|
||
RET
|
||
;************************************************
|
||
;* *
|
||
;* SAVE BIOS FLAG CONTENT *
|
||
;* *
|
||
;************************************************
|
||
SAV_FLAG:
|
||
PUSH DS
|
||
XOR AX,AX
|
||
MOV DS,AX ;DS <- 0000H
|
||
MOV SI,500H
|
||
MOV DI,OFFSET SYS_500
|
||
MOVSW ;0:500H - 501H GET
|
||
POP DS
|
||
RET
|
||
;------------------------------------------------------------------
|
||
;************************************************
|
||
;* *
|
||
;* CURSOR DISPLAY ON *
|
||
;* *
|
||
;************************************************
|
||
CSRON:
|
||
MOV AH,11H
|
||
INT 18H
|
||
RET
|
||
|
||
;************************************************
|
||
;* *
|
||
;* INITIALIZE THE KEYBOARD *
|
||
;* *
|
||
;************************************************
|
||
KBINIT:
|
||
MOV AX,0300H
|
||
INT 18H
|
||
RET
|
||
|
||
;************************************************
|
||
;* *
|
||
;* MAKE EXLPTBL EXCEPT ALC_TYP = 0. *
|
||
;* *
|
||
;************************************************
|
||
AUTO_TBL:
|
||
MOV AL,ALC_TYP ;SET DRIVE ALLOCATION TYPE
|
||
DEC AL
|
||
MOV AH,3*4 ;1 TYPE HAS 12 BYTE
|
||
MUL AH
|
||
MOV BP,OFFSET DATAGRP:ALC_TBL ;SET ALLOCATION TABLE ADDR
|
||
ADD BP,AX ;SET PROPER ENTRY
|
||
MOV BX,OFFSET EXLPTBL+1
|
||
MOV CX,4
|
||
AUTO_TBL10:
|
||
PUSH CX
|
||
MOV AH,[BP] ;FIRST DA/UA
|
||
MOV DI,1[BP]
|
||
MOV AL,[DI] ;GET EQUIP INF
|
||
CMP AH,80H
|
||
JE AUTO_TBL10H
|
||
CALL M_COMMON
|
||
JMP short AUTO_TBL20
|
||
AUTO_TBL10H:
|
||
CALL HARD_COMMON
|
||
AUTO_TBL20:
|
||
ADD BP,3
|
||
POP CX
|
||
DEC CX
|
||
JNE AUTO_TBL10
|
||
RET
|
||
|
||
HARD_COMMON:
|
||
MOV SCSI_FLG,00H ;89/08/19
|
||
MOV AL,HD_NUM
|
||
MOV AH,80H
|
||
CALL MH_COMMON
|
||
MOV AL,HD1_NUM
|
||
MOV AH,81H
|
||
CALL MH_COMMON
|
||
RET
|
||
|
||
;********************************************************
|
||
;* *
|
||
;* ASSIGN INIT TABLE *
|
||
;* *
|
||
;********************************************************
|
||
ASS_INITTBL:
|
||
MOV SVHD1,OFFSET datagrp:HDDSK5_1 - BPB_SIZE
|
||
MOV SVHD2,OFFSET datagrp:HDDSK5_2 - BPB_SIZE
|
||
MOV SVHD3,OFFSET datagrp:HDDSK5_3 - BPB_SIZE
|
||
MOV SVHD4,OFFSET datagrp:HDDSK5_4 - BPB_SIZE
|
||
MOV SVHDS1,OFFSET datagrp:HDDSKS_1 - BPB_SIZE
|
||
MOV SVHDS2,OFFSET datagrp:HDDSKS_2 - BPB_SIZE
|
||
MOV SVHDS3,OFFSET datagrp:HDDSKS_3 - BPB_SIZE
|
||
MOV SVHDS4,OFFSET datagrp:HDDSKS_4 - BPB_SIZE
|
||
MOV SVHDS5,OFFSET datagrp:HDDSKS_5 - BPB_SIZE
|
||
MOV SVHDS6,OFFSET datagrp:HDDSKS_6 - BPB_SIZE
|
||
MOV SVHDS7,OFFSET datagrp:HDDSKS_7 - BPB_SIZE
|
||
MOV SVHDS8,OFFSET datagrp:HDDSKS_8 - BPB_SIZE
|
||
MOV BX,OFFSET datagrp:EXLPTBL+1 ;SET EXLPTBL ADDR
|
||
MOV DI,OFFSET datagrp:INIT_TBL ;SET TARGET TABLE ADDR
|
||
MOV BP,OFFSET datagrp:LPTABLE ;SET LPTABLE ADDR
|
||
XOR CX,CX
|
||
ASS_INIT10:
|
||
MOV AL,[BX] ;GET UA/DA
|
||
;--------------------------------------------------------- 88/03/22 --
|
||
CMP AL,0
|
||
JNZ ASS_INIT12
|
||
JMP ASS_EXIT
|
||
; OR AL,AL ;END OF TABLE ?
|
||
; JE ASS_EXIT
|
||
ASS_INIT12:
|
||
;---------------------------------------------------------------------
|
||
CMP CX,16
|
||
JAE ASS_INIT15
|
||
MOV [BP],AL ;SET IT
|
||
ASS_INIT15:
|
||
AND AL,0F0H ;STRRIP DA
|
||
CMP AL,80H
|
||
JE ASS_INIT30 ;SKIP IF SASI
|
||
CMP AL,0A0H
|
||
JE ASS_INIT70 ;SKIP IF SCSI
|
||
MOV SI,OFFSET datagrp:DSK8_DBL ;SET 8"FD DOUBLE BPB
|
||
CMP AL,90H ;8"FD
|
||
JE ASS_INIT20 ;SKIP IF SO
|
||
;-------------------------------- CORRECT FIRST BPB 720K -> 1MB --- 870911 --
|
||
MOV SI,OFFSET datagrp:DSK8_DBL ;
|
||
;----------------------------------------------------------------------------
|
||
IF BRANCH ;----------------------------------------------- 90/03/16 --
|
||
CMP AL,70H
|
||
JE ASS_INIT20 ;SKIP IF SO
|
||
MOV SI,OFFSET datagrp:VT_BPB
|
||
ENDIF ;---------------------------------------------------------------
|
||
ASS_INIT20:
|
||
MOV [DI],SI
|
||
ASS_INIT25:
|
||
INC CX
|
||
INC BP
|
||
INC DI
|
||
INC DI
|
||
INC BX
|
||
INC BX
|
||
JMP ASS_INIT10
|
||
;--------------------------------------------------------- 88/03/22 --
|
||
ASS_INIT30:
|
||
CMP BYTE PTR [BX],80H
|
||
JNE ASS_INIT40 ;SKIP IF NOT SASI #0
|
||
ADD SVHD1,BPB_SIZE
|
||
MOV SI,SVHD1 ;GET HARD DPB
|
||
JMP short ASS_INIT60
|
||
ASS_INIT40:
|
||
CMP BYTE PTR [BX],81H
|
||
JNE ASS_INIT50 ;SKIP IF NOT SASI #1
|
||
ADD SVHD2,BPB_SIZE
|
||
MOV SI,SVHD2 ;GET HARD DPB
|
||
JMP short ASS_INIT60
|
||
ASS_INIT50:
|
||
CMP BYTE PTR [BX],82H
|
||
JNE ASS_INIT55 ;SKIP IF NOT SASI #2
|
||
ADD SVHD3,BPB_SIZE
|
||
MOV SI,SVHD3 ;GET HARD DPB
|
||
JMP short ASS_INIT60
|
||
ASS_INIT55:
|
||
ADD SVHD4,BPB_SIZE
|
||
MOV SI,SVHD4 ;GET HARD DPB
|
||
ASS_INIT60:
|
||
MOV [DI],SI
|
||
JMP SHORT ASS_INIT25
|
||
|
||
ASS_INIT70:
|
||
CMP BYTE PTR [BX],0A0H
|
||
JNE ASS_INIT80 ;SKIP IF NOT SCSI #0
|
||
ADD SVHDS1,BPB_SIZE
|
||
MOV SI,SVHDS1 ;GET HARD DPB
|
||
JMP short ASS_INIT200
|
||
ASS_INIT80:
|
||
CMP BYTE PTR [BX],0A1H
|
||
JNE ASS_INIT90 ;SKIP IF NOT SCSI #1
|
||
ADD SVHDS2,BPB_SIZE
|
||
MOV SI,SVHDS2 ;GET HARD DPB
|
||
JMP short ASS_INIT200
|
||
ASS_INIT90:
|
||
CMP BYTE PTR [BX],0A2H
|
||
JNE ASS_INIT100 ;SKIP IF NOT SCSI #2
|
||
ADD SVHDS3,BPB_SIZE
|
||
MOV SI,SVHDS3 ;GET HARD DPB
|
||
JMP short ASS_INIT200
|
||
ASS_INIT100:
|
||
CMP BYTE PTR [BX],0A3H
|
||
JNE ASS_INIT110 ;SKIP IF NOT SCSI #3
|
||
ADD SVHDS4,BPB_SIZE
|
||
MOV SI,SVHDS4 ;GET HARD DPB
|
||
JMP short ASS_INIT200
|
||
ASS_INIT110:
|
||
CMP BYTE PTR [BX],0A4H
|
||
JNE ASS_INIT120 ;SKIP IF NOT SCSI #4
|
||
ADD SVHDS5,BPB_SIZE
|
||
MOV SI,SVHDS5 ;GET HARD DPB
|
||
JMP short ASS_INIT200
|
||
ASS_INIT120:
|
||
CMP BYTE PTR [BX],0A5H
|
||
JNE ASS_INIT130 ;SKIP IF NOT SCSI #5
|
||
ADD SVHDS6,BPB_SIZE
|
||
MOV SI,SVHDS6 ;GET HARD DPB
|
||
JMP short ASS_INIT200
|
||
ASS_INIT130:
|
||
CMP BYTE PTR [BX],0A6H
|
||
JNE ASS_INIT140 ;SKIP IF NOT SCSI #6
|
||
ADD SVHDS7,BPB_SIZE
|
||
MOV SI,SVHDS7 ;GET HARD DPB
|
||
JMP short ASS_INIT200
|
||
ASS_INIT140:
|
||
ADD SVHDS8,BPB_SIZE
|
||
MOV SI,SVHDS8 ;GET HARD DPB
|
||
ASS_INIT200:
|
||
JMP ASS_INIT60
|
||
|
||
;---------------------------------------------------------------------
|
||
ASS_EXIT:
|
||
SUB BX,OFFSET datagrp:EXLPTBL+1
|
||
SHR BX,1 ;GET NUMBER OF DRIVE
|
||
MOV DRV_NUM,BL ;SET IT(REF DSK_INIT)
|
||
RET
|
||
|
||
;************************************************
|
||
;* *
|
||
;* SET BDS TABLE *
|
||
;* *
|
||
;************************************************
|
||
|
||
SET_BDS:
|
||
MOV AX,CS
|
||
MOV DS,AX
|
||
MOV ES,AX
|
||
MOV DI,WORD PTR START_BDS ;SET BDS #1
|
||
MOV SI,OFFSET datagrp:INIT_TBL ;SET BPB POINTER TABLE
|
||
MOV BX,OFFSET datagrp:EXLPTBL+1
|
||
XOR CX,CX
|
||
NEXT_BDS:
|
||
MOV AL,BYTE PTR [BX-2]
|
||
CMP BYTE PTR [BX],AL ;CHECK DA/UA
|
||
JZ SETBDS010
|
||
XOR DX,DX
|
||
JMP short SETBDS020
|
||
SETBDS010:
|
||
INC DX
|
||
SETBDS020:
|
||
CMP WORD PTR [SI],0000H ;END BPB POINTER TABLE
|
||
JNZ SETBDS025
|
||
JMP END_BDS
|
||
SETBDS025:
|
||
MOV AL,BYTE PTR [BX]
|
||
MOV [DI].BDS_DRIVENUM,AL
|
||
MOV [DI].BDS_DRIVELET,CL
|
||
;--------------------------------------------------------- 89/08/08 --
|
||
TEST BYTE PTR [BX-01],80H
|
||
JZ SETBDS025_3
|
||
OR WORD PTR [DI].BDS_FLAGS,fi_am_mult
|
||
CMP BYTE PTR [WSINGLE],0FFH
|
||
JZ SETBDS025_1
|
||
MOV BYTE PTR [WSINGLE],0FFH
|
||
JMP short SETBDS025_3
|
||
SETBDS025_1:
|
||
XOR WORD PTR [DI].BDS_FLAGS,fi_own_physical
|
||
SETBDS025_3:
|
||
;---------------------------------------------------------------------
|
||
PUSH CX
|
||
MOV CX,13
|
||
PUSH DI
|
||
PUSH SI
|
||
LEA DI,[DI].BDS_BPB
|
||
MOV SI,WORD PTR [SI]
|
||
REP MOVSB ;COPY BPB --> BDS
|
||
POP SI
|
||
POP DI
|
||
;----------------------------------------------------- 89/07/28 ---
|
||
CMP BYTE PTR [DI].BDS_BPB.BPB_MEDIADESCRIPTOR,01H
|
||
JA SETBDS025_4
|
||
MOV BYTE PTR [DI].BDS_BPB.BPB_MEDIADESCRIPTOR,0FEH
|
||
JMP short SETBDS025_6
|
||
SETBDS025_4:
|
||
CMP BYTE PTR [DI].BDS_BPB.BPB_MEDIADESCRIPTOR,02H
|
||
JNB SETBDS025_6
|
||
MOV BYTE PTR [DI].BDS_BPB.BPB_MEDIADESCRIPTOR,0FBH
|
||
SETBDS025_6:
|
||
TEST BYTE PTR [BX],10H ;CHECK FD OR HD
|
||
;----------------------------------------------------- 89/07/28 ---
|
||
JZ SETBDS27
|
||
;----------------------------------------------- DOS5 91/06/12 -------
|
||
TEST BYTE PTR [BX],80H ;if DA/UA = 9xh
|
||
JNZ SKIP_FDJ ; then skip
|
||
MOV BYTE PTR [DI].BDS_FORMFACTOR,02H
|
||
SKIP_FDJ:
|
||
;---------------------------------------------------------------------
|
||
JMP SKIP_FD
|
||
SETBDS27:
|
||
TEST BYTE PTR [BX-1],01H ;CHECK HD OR MODISK
|
||
JZ SETBDS28 ; skip if HD
|
||
MOV BYTE PTR [DI].BDS_BPB.BPB_SECTORSPERTRACK,40H
|
||
MOV BYTE PTR [DI].BDS_FORMFACTOR,05H
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
push bx
|
||
mov bl,byte ptr [bx]
|
||
and bl,0fh
|
||
xor bh,bh
|
||
cmp byte ptr SCSI_EQUIP.[bx],07h
|
||
pop bx
|
||
jne NOT_35MO
|
||
mov byte ptr [di].BDS_BPB.BPB_SECTORSPERTRACK,19h
|
||
mov byte ptr [di].BDS_FORMFACTOR,08h
|
||
NOT_35MO:
|
||
;---------------------------------------------------------------------
|
||
MOV BYTE PTR [DI].BDS_BPB.BPB_HEADS,1
|
||
MOV WORD PTR [DI].BDS_FLAGS,fi_own_physical ;DOS5 91/05/10
|
||
PUSH BX
|
||
PUSH DX
|
||
JMP SHORT SKIP_MODISK
|
||
SETBDS28:
|
||
PUSH BX
|
||
PUSH DX
|
||
;----------------------------------------------- DOS5 91/02/20 -------
|
||
PUSH SI
|
||
MOV SI,OFFSET HD_MEDIA
|
||
TEST BYTE PTR [BX],20H
|
||
JZ SETBDS28_SASI
|
||
MOV SI,OFFSET HDS_MEDIA
|
||
SETBDS28_SASI:
|
||
XOR AH,AH
|
||
MOV AL,BYTE PTR [BX]
|
||
AND AX,0FH
|
||
MOV CX,92
|
||
PUSH DX
|
||
MUL CX
|
||
ADD SI,AX
|
||
POP DX
|
||
MOV AX,DX ; # of partition
|
||
MOV CX,23
|
||
PUSH DX
|
||
MUL CX
|
||
ADD SI,AX ; SI points media Ids
|
||
POP DX
|
||
|
||
CMP BYTE PTR [SI+15],0 ; 1st byte of FILE_SYS_ID
|
||
JE SETBDS28_NOTEXT ; not ext bpb then skip
|
||
MOV CX,WORD PTR [SI]
|
||
MOV WORD PTR [DI].BDS_VOL_SERIAL,CX
|
||
MOV CX,WORD PTR [SI+2]
|
||
MOV WORD PTR [DI].BDS_VOL_SERIAL+2,CX; set serial number
|
||
ADD SI,4
|
||
PUSH DI
|
||
LEA DI,[DI].BDS_VOLID
|
||
MOV CX,11
|
||
REP MOVSB ; set volume label
|
||
ADD DI,5
|
||
MOV CX,8
|
||
REP MOVSB ; set fat id
|
||
POP DI
|
||
SETBDS28_NOTEXT:
|
||
POP SI
|
||
;---------------------------------------------------------------------
|
||
XOR AH,AH
|
||
MOV AL,BYTE PTR [BX]
|
||
PUSH AX
|
||
AND AL,0F0H
|
||
MOV DA,AL ;SET DA
|
||
POP AX
|
||
AND AL,0FH
|
||
MOV UA,AL ;SET UA
|
||
CALL SENSE_HD ;SENSE HD
|
||
MOV BYTE PTR [DI].BDS_BPB.BPB_SECTORSPERTRACK,DL
|
||
MOV BYTE PTR [DI].BDS_BPB.BPB_HEADS,DH
|
||
MOV BYTE PTR [DI].BDS_FORMFACTOR,05H
|
||
;----------------------------------------------------- 89/07/28 ---
|
||
MOV WORD PTR [DI].BDS_FLAGS,fi_own_physical+fnon_removable ;DOS5 91/05/10
|
||
SKIP_MODISK:
|
||
;------------------------------------------------DOS5 91/01/20-----------
|
||
PUSH SI
|
||
MOV SI,WORD PTR [SI]
|
||
ADD SI,13
|
||
MOV AX,WORD PTR [SI]
|
||
MOV WORD PTR [DI].BDS_BPB.BPB_BIGTOTALSECTORS,AX
|
||
MOV AX,WORD PTR [SI+2]
|
||
MOV WORD PTR [DI+2].BDS_BPB.BPB_BIGTOTALSECTORS,AX
|
||
POP SI
|
||
;------------------------------------------------------------------------
|
||
;;; MOV BYTE PTR [DI].BDS_FLAGS,21H ;DOS5 91/05/10
|
||
MOV AX,WORD PTR [DI].BDS_BPB.BPB_TOTALSECTORS
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
xor dx,dx
|
||
or ax,ax ;ax=0 if large partition
|
||
jnz SETBDS027
|
||
mov ax,word ptr [di].BDS_BPB.BPB_BIGTOTALSECTORS
|
||
mov dx,word ptr [di].BDS_BPB.BPB_BIGTOTALSECTORS+2
|
||
SETBDS027:
|
||
push dx
|
||
;---------------------------------------------------------------------
|
||
PUSH AX
|
||
MOV AX,WORD PTR [DI].BDS_BPB.BPB_HEADS
|
||
MUL WORD PTR [DI].BDS_BPB.BPB_SECTORSPERTRACK
|
||
MOV CX,AX
|
||
POP AX
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
pop dx
|
||
;---------------
|
||
; XOR DX,DX
|
||
;---------------------------------------------------------------------
|
||
DIV CX
|
||
OR DX,DX
|
||
JZ SETBDS028
|
||
INC AX
|
||
SETBDS028:
|
||
MOV WORD PTR [DI].BDS_CCYLN,AX
|
||
|
||
POP DX
|
||
POP BX
|
||
|
||
PUSH SI
|
||
|
||
TEST BYTE PTR [BX],20H
|
||
JNZ SETBDS030
|
||
MOV SI,OFFSET HD_OFFSET
|
||
JMP short SETBDS040
|
||
SETBDS030:
|
||
MOV SI,OFFSET HDS_OFFSET
|
||
SETBDS040:
|
||
XOR AH,AH
|
||
MOV AL,BYTE PTR [BX]
|
||
AND AL,0FH
|
||
MOV CL,4
|
||
SHL AX,CL
|
||
ADD SI,AX
|
||
|
||
MOV AX,DX
|
||
SHL AX,1
|
||
SHL AX,1
|
||
ADD SI,AX
|
||
MOV AX,WORD PTR [SI]
|
||
MOV [DI].BDS_BPB.BPB_HIDDENSECTORS,AX
|
||
;------------------------------------------------DOS5 91/01/20-----------
|
||
MOV AX,WORD PTR [SI+2]
|
||
MOV WORD PTR [DI+2].BDS_BPB.BPB_HIDDENSECTORS,AX
|
||
;------------------------------------------------------------------------
|
||
|
||
TEST BYTE PTR [BX],20H
|
||
JNZ SETBDS050
|
||
MOV SI,OFFSET FBIGFAT
|
||
JMP short SETBDS060
|
||
SETBDS050:
|
||
MOV SI,OFFSET FBIGFATS
|
||
SETBDS060:
|
||
XOR AH,AH
|
||
MOV AL,BYTE PTR [BX]
|
||
AND AL,0FH
|
||
;----------------------------------------------- DOS5 91/02/20 -------
|
||
ADD SI,AX
|
||
MOV AX,1
|
||
MOV CX,DX
|
||
SHL AX,CL
|
||
TEST BYTE PTR [SI],AL
|
||
JZ SETBDS070
|
||
MOV [DI].BDS_FATSIZ,40H
|
||
|
||
SETBDS070:
|
||
;---------------------
|
||
; MOV CL,2
|
||
; SHL AX,CL
|
||
; ADD SI,AX
|
||
; ADD SI,DX
|
||
; MOV AL,BYTE PTR [SI]
|
||
; MOV [DI].BDS_FATSIZ,AL
|
||
;---------------------------------------------------------------------
|
||
|
||
POP SI
|
||
SKIP_FD:
|
||
PUSH SI
|
||
PUSH DI
|
||
MOV CX,25
|
||
LEA SI,[DI].BDS_BPB
|
||
LEA DI,[DI].BDS_RBPB
|
||
REP MOVSB ;COPY BDS(BPB) --> BDS(RBPB)
|
||
POP DI
|
||
POP SI
|
||
POP CX
|
||
MOV DI,WORD PTR [DI].BDS_LINK
|
||
INC CX
|
||
ADD SI,2
|
||
ADD BX,2
|
||
;----------------------------------------------------- 89/07/28 ---
|
||
CMP DI,-1
|
||
JZ END_MAX
|
||
;----------------------------------------------------- 89/07/28 ---
|
||
JMP NEXT_BDS
|
||
|
||
END_BDS:
|
||
CMP DI,OFFSET DATAGRP:BDS21
|
||
JNE NOT20
|
||
MOV DI,OFFSET DATAGRP:BDS20
|
||
MOV WORD PTR [DI],-1
|
||
JMP SHORT END_MAX
|
||
NOT20:
|
||
SUB DI,SIZE BDS_STRUC
|
||
MOV WORD PTR [DI],-1
|
||
END_MAX: ; 89/07/28
|
||
RET
|
||
|
||
;------------------------------------------------DOS5 91/02/15-----------
|
||
;
|
||
;Reassign init table
|
||
;
|
||
; ENTRY:
|
||
;
|
||
; EXIT: init table set
|
||
;
|
||
; USES: di, si, bx, flags
|
||
;
|
||
|
||
REASS_INITTBL:
|
||
|
||
MOV BX, OFFSET INIT_TBL
|
||
MOV DI, WORD PTR START_BDS
|
||
REASS_10:
|
||
LEA SI, [DI].BDS_RBPB
|
||
MOV WORD PTR [BX], SI
|
||
ADD BX, 2
|
||
MOV DI, WORD PTR [DI.BDS_LINK]
|
||
CMP DI, -1 ;Is that the last drive?
|
||
JNE REASS_10
|
||
RET
|
||
;------------------------------------------------------------------------
|
||
|
||
;--------------------------------------------------------- 89/08/18 --
|
||
|
||
;************************************************
|
||
; MODISK INITIARIZE ROUTINE *
|
||
; *
|
||
;************************************************
|
||
MODISK_INIT:
|
||
XOR AX , AX ; AL <- UNIT COUNTER
|
||
; AH <- SCSI ID COUNTER
|
||
MOV BX , OFFSET MO_DEVICE_TBL ; BX <- DEV MANAGEMENT TBL PTR SET
|
||
|
||
|
||
MOV DL , BYTE PTR MO_LPFLG ; DEVICE INFORMATION
|
||
MOV CX , 8 ; SHIFT COUNTER
|
||
|
||
SET_LOOP:
|
||
CLC ; CF = 0
|
||
SHR DL , 1 ; SHIFT
|
||
JC MO_DEV_SET ; JMP IF BIT ON CONNECTION
|
||
JMP short CHK_NEXT ; NEXT BIT CHECK
|
||
|
||
MO_DEV_SET:
|
||
PUSH CX ;
|
||
XOR CX , CX ;
|
||
MOV CL , YUKO_UNIT ; MANEGEMENT PART / MEDIA
|
||
MO_DEV_LOOP:
|
||
MOV [BX] , AL ; UNIT# SET
|
||
INC AL ; UNIT# COUNT UP
|
||
INC BX ; SET PTR DEV_TBL FLAG
|
||
MOV BYTE PTR [BX] , 02H ; SET BPB UPDATE FLAG = 02
|
||
INC BX ; SET PTR DEV_TBL SCSI ID
|
||
MOV [BX] , AH ; SCSI ID SET
|
||
INC BX ;
|
||
INC BX ; NEXT TBL PTR
|
||
LOOP MO_DEV_LOOP ; CREATE TBL NUMBER OF MAGEMENT
|
||
POP CX ;
|
||
|
||
CHK_NEXT:
|
||
INC AH ; SCSI ID COUNTER UP
|
||
LOOP SET_LOOP ;
|
||
|
||
|
||
MOV AL,UA
|
||
OR AL,0A0H
|
||
CMP AL,[BT_TYP]
|
||
JNZ MOINIT100
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
mov bl,UA
|
||
xor bh,bh
|
||
cmp byte ptr SCSI_EQUIP.[bx],07h ;if 3.5" MO
|
||
je MOINIT100 ; don't call HARDINIT
|
||
;---------------------------------------------------------------------
|
||
MODISK_BOOT:
|
||
CALL HARDINIT
|
||
MOINIT100:
|
||
MOV DL , BYTE PTR MO_LPFLG ; DEVICE INFORMATION
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
mov dh, byte ptr MO_LPFLG2 ; device information ( 3.5"MO)
|
||
;---------------------------------------------------------------------
|
||
MOV CX , 0 ; SHIFT COUNTER
|
||
MOV BX,OFFSET HDDSKS_1
|
||
MOINIT110:
|
||
CMP CX,8
|
||
JZ MOINIT250
|
||
CLC ; CF = 0
|
||
SHR DL , 1 ; SHIFT
|
||
JC MOINIT150 ; JMP IF BIT ON CONNECTION
|
||
JMP short MOINIT200 ; NEXT BIT CHECK
|
||
MOINIT150:
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
cmp UA,cl
|
||
jne short MOINIT200
|
||
|
||
mov YUKO_UNIT,4 ;4 drive/unit
|
||
test dh, 1
|
||
jz MOINIT160
|
||
mov YUKO_UNIT,1 ;1 drive/unit
|
||
MOINIT160:
|
||
;---------------------------------------------------------------------
|
||
PUSH BX
|
||
MOV BX, OFFSET HDS_NUM
|
||
ADD BX, CX
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
mov al,YUKO_UNIT
|
||
MOV BYTE PTR [BX],al
|
||
;---------------
|
||
; MOV BYTE PTR [BX],4
|
||
;---------------------------------------------------------------------
|
||
POP BX
|
||
|
||
PUSH CX
|
||
MOV DI,BX
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
mov cl,YUKO_UNIT
|
||
xor ch,ch
|
||
;---------------
|
||
; MOV CX,4
|
||
;---------------------------------------------------------------------
|
||
MOINIT180:
|
||
PUSH CX
|
||
MOV SI,OFFSET DATAGRP:MODISK_BPB
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
test dh, 1
|
||
jz MOINIT190
|
||
mov si, offset DATAGRP:MODISK_BPB2
|
||
MOINIT190:
|
||
;---------------------------------------------------------------------
|
||
MOV CX,BPB_SIZE
|
||
REP MOVSB
|
||
POP CX
|
||
LOOP MOINIT180
|
||
POP CX
|
||
MOINIT200:
|
||
INC CX
|
||
ADD BX,HDDSK_SIZE
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
shr dh,1
|
||
;---------------------------------------------------------------------
|
||
JMP MOINIT110
|
||
MOINIT250:
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
mov YUKO_UNIT,4 ;reset to 4 drive/unit
|
||
;---------------------------------------------------------------------
|
||
RET
|
||
|
||
;---------------------------------------------------------------------
|
||
;------------------------------------------------ DOS5 91/08/00 --------
|
||
;
|
||
; CNV_MO_LPFLG
|
||
;
|
||
; FUNCTION: merge MO_LPFLG and MO_LPFLG2
|
||
;
|
||
; INPUT : MO_LPFLG
|
||
; MO_LPFLG2
|
||
;
|
||
; OUTPUT: MO_LPFLG updated
|
||
; MO_LPFLG2 updated
|
||
;
|
||
; MO_LPFLG 01001001 <20><> 00001001 <20><> 00001111
|
||
; MO_LPFLG2 00110110 <20><> 00000110 <20><> 00000110
|
||
;
|
||
;
|
||
|
||
CNV_MO_LPFLG proc near
|
||
|
||
xor dl,dl
|
||
mov al,MO_LPFLG
|
||
mov cx,8
|
||
CNV_Loop1:
|
||
shr al,1
|
||
jnc CNV_Next1
|
||
inc dl
|
||
cmp dl,2
|
||
jb CNV_Next1
|
||
mov dl,8
|
||
xchg dl,cl
|
||
sub cl,dl
|
||
inc cl
|
||
shl al,cl
|
||
xor MO_LPFLG,al
|
||
jmp short CNV_10
|
||
CNV_Next1:
|
||
loop CNV_Loop1
|
||
|
||
CNV_10:
|
||
xor dl,dl
|
||
mov al,MO_LPFLG2
|
||
mov cx,8
|
||
CNV_Loop2:
|
||
shr al,1
|
||
jnc CNV_Next2
|
||
inc dl
|
||
cmp dl,2
|
||
jb CNV_Next2
|
||
mov dl,8
|
||
xchg dl,cl
|
||
sub cl,dl
|
||
inc cl
|
||
shl al,cl
|
||
xor MO_LPFLG2,al
|
||
jmp short CNV_EXIT
|
||
CNV_Next2:
|
||
loop CNV_Loop2
|
||
|
||
CNV_EXIT:
|
||
mov al,MO_LPFLG2
|
||
or MO_LPFLG,al
|
||
ret
|
||
|
||
CNV_MO_LPFLG endp
|
||
;-----------------------------------------------------------------------
|
||
|
||
;************************************************
|
||
;* *
|
||
;* FD MAKING COMMON *
|
||
;* *
|
||
;************************************************
|
||
|
||
M_COMMON:
|
||
MOV CX,4 ;SET LOOPING TIMES
|
||
PUSH BX ;SAVE CURRENT POINTER
|
||
CLC ;CLERA CARRY
|
||
M_COM10:
|
||
SHR AL,1 ;CHECK CONNECTING
|
||
JNC M_COM20 ;SKIP IF NOT CONNECT
|
||
;--------------------------------------------------------- 88/05/19 --
|
||
CMP HD_CNT,26 ;MAX 26 DRIVE ?
|
||
JAE M_COM20
|
||
MOV [BX],AH ;PUT IT
|
||
ADD BX,2 ;GET NEXT ENTRY
|
||
INC HD_CNT ;DRIVE NUM ++
|
||
;---------------------------------------------------------------------
|
||
M_COM20:
|
||
INC AH
|
||
LOOP M_COM10
|
||
POP CX
|
||
MOV DX,BX
|
||
SUB DX,CX
|
||
CMP DX,2 ;SKIP IF SINGLE
|
||
JNE M_COM30
|
||
CMP AUT_LEX,0
|
||
JE M_COM30 ;DON'T NEED LOGICAL EXTEND
|
||
CMP INF5H,0 ;84/11/18
|
||
JNE M_COM30
|
||
;----------------------------------------------- DOS5 91/04/01 -------
|
||
; PATCH FIX
|
||
CMP INFSH,0
|
||
JNE M_COM30
|
||
CMP MO_LPFLG,0
|
||
JNE M_COM30
|
||
;---------------------------------------------------------------------
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
CMP MO_LPFLG2,0
|
||
JNE M_COM30
|
||
;---------------------------------------------------------------------
|
||
;--------------------------------
|
||
MOV CL,INF8F
|
||
ADD CL,INF5F
|
||
CMP CL,1
|
||
JA M_COM30
|
||
;--------------------------------
|
||
;--------------------------------------------------------- 88/05/19 --
|
||
CMP HD_CNT,26 ;MAX 26 DRIVE ?
|
||
JAE M_COM30
|
||
MOV AUT_LEX,0 ;ONLY ONE TIME
|
||
MOV CL,-2[BX]
|
||
MOV [BX],CL
|
||
OR BYTE PTR[BX-3],80H ;SET LOGICAL EXTENT FLAG
|
||
OR BYTE PTR[BX-1],80H ;SET LOGICAL EXTENT FLAG
|
||
ADD BX,2
|
||
INC HD_CNT ;DRIVE NUM ++
|
||
;---------------------------------------------------------------------
|
||
M_COM30:
|
||
RET
|
||
|
||
;************************************************
|
||
;* *
|
||
;* HARD DISK ALL MAKING *
|
||
;* *
|
||
;************************************************
|
||
MK_HDCOMMON:
|
||
MOV SCSI_FLG,00H ; 89/08/19
|
||
MOV AL,HD_NUM ;SASI HD #0
|
||
MOV AH,80H
|
||
;----------------------------------------------- DOS5 90/12/14 -------
|
||
MOV BP,OFFSET HDDSK5_1
|
||
;---------------------------------------------------------------------
|
||
CALL MH_COMMON
|
||
MOV AL,HD1_NUM ;SASI HD #1
|
||
MOV AH,81H
|
||
;----------------------------------------------- DOS5 90/12/14 -------
|
||
MOV BP,OFFSET HDDSK5_2
|
||
;---------------------------------------------------------------------
|
||
CALL MH_COMMON
|
||
MOV AL,HD2_NUM ;SASI HD #2
|
||
MOV AH,82H
|
||
;----------------------------------------------- DOS5 90/12/14 -------
|
||
MOV BP,OFFSET HDDSK5_3
|
||
;---------------------------------------------------------------------
|
||
CALL MH_COMMON
|
||
MOV AL,HD3_NUM ;SASI HD #3
|
||
MOV AH,83H
|
||
;----------------------------------------------- DOS5 90/12/14 -------
|
||
MOV BP,OFFSET HDDSK5_4
|
||
;---------------------------------------------------------------------
|
||
CALL MH_COMMON
|
||
;--------------------------------------------------------- 89/08/19 --
|
||
; MOV AL,HDS_NUM ;SCSI HD #0
|
||
; MOV AH,0A0H
|
||
; CALL MH_COMMON
|
||
; MOV AL,HDS1_NUM ;SCSI HD #1
|
||
; MOV AH,0A1H
|
||
; CALL MH_COMMON
|
||
; MOV AL,HDS2_NUM ;SCSI HD #2
|
||
; MOV AH,0A2H
|
||
; CALL MH_COMMON
|
||
; MOV AL,HDS3_NUM ;SCSI HD #3
|
||
; MOV AH,0A3H
|
||
; CALL MH_COMMON
|
||
; MOV AL,HDS4_NUM ;SCSI HD #4
|
||
; MOV AH,0A4H
|
||
; CALL MH_COMMON
|
||
; MOV AL,HDS5_NUM ;SCSI HD #5
|
||
; MOV AH,0A5H
|
||
; CALL MH_COMMON
|
||
; MOV AL,HDS6_NUM ;SCSI HD #6
|
||
; MOV AH,0A6H
|
||
; CALL MH_COMMON
|
||
; MOV AL,HDS7_NUM ;SCSI HD #7
|
||
; MOV AH,0A7H
|
||
; CALL MH_COMMON
|
||
|
||
MOV AL,INFSH
|
||
MOV SCSI_FLG,00H
|
||
CALL MK_SCSI_COMMON
|
||
;---------------------------------------------------------------------
|
||
RET
|
||
|
||
MK_MOCOMMON:
|
||
MOV AL,BYTE PTR MO_LPFLG
|
||
MK_MOCOMMON_10:
|
||
MOV SCSI_FLG,01H
|
||
CALL MK_SCSI_COMMON
|
||
RET
|
||
|
||
;----------------------------------------------- DOS5 91/08/00 -------
|
||
MK_MOCOMMON2:
|
||
mov al,byte ptr MO_LPFLG2
|
||
jmp MK_MOCOMMON_10
|
||
;---------------------------------------------------------------------
|
||
|
||
;************************************************
|
||
; *
|
||
; MAKE SCSI I/F DEVICE LPTABLE/EXLPTBL *
|
||
; *
|
||
; IN al = device equip *
|
||
; SCSI_FLG = 00h if hard disk *
|
||
; 01h if MO disk *
|
||
;************************************************
|
||
MK_SCSI_COMMON:
|
||
MOV AH,0A0H
|
||
MOV SI,OFFSET HDS_NUM
|
||
;----------------------------------------------- DOS5 90/12/14 -------
|
||
MOV BP,OFFSET HDDSKS_1
|
||
;---------------------------------------------------------------------
|
||
MKSCSI010:
|
||
;----------------------------------------------- DOS5 90/12/17 -------
|
||
PUSH BP
|
||
;---------------------------------------------------------------------
|
||
CMP AH,0A8H
|
||
JZ MKSCSIEXIT
|
||
SHR AL,1
|
||
JNC MKSCSI020
|
||
PUSH AX
|
||
MOV AL,[SI]
|
||
CALL MH_COMMON
|
||
POP AX
|
||
MKSCSI020:
|
||
INC AH
|
||
INC SI
|
||
;----------------------------------------------- DOS5 90/12/14 -------
|
||
POP BP
|
||
ADD BP,HDDSK_SIZE
|
||
;---------------------------------------------------------------------
|
||
JMP MKSCSI010
|
||
MKSCSIEXIT:
|
||
;----------------------------------------------- DOS5 90/12/17 -------
|
||
POP BP
|
||
;---------------------------------------------------------------------
|
||
RET
|
||
|
||
;************************************************
|
||
;* *
|
||
;* HARD DISK MAKING COMMON *
|
||
;* *
|
||
;* ENTRY AL : NUMBER OF PARTITION *
|
||
;* AH : DA/UA *
|
||
;* BX : POINTS EXLPTBL *
|
||
;* BP : POINTS HDDSKx_x *
|
||
;* SCSI_FLG : 01 IF MO *
|
||
;* *
|
||
;* EXIT EXLPTBL SET *
|
||
;* *
|
||
;************************************************
|
||
|
||
MH_COMMON:
|
||
PUSH CX
|
||
OR AL,AL
|
||
JE MH_COMMON20
|
||
MOV CL,AL
|
||
XOR CH,CH
|
||
MH_COMMON10:
|
||
;--------------------------------------------------------- 88/05/19 --
|
||
CMP HD_CNT,26 ;MAX 26 DRIVE ?
|
||
JAE MH_COMMON15
|
||
MOV [BX],AH ;MAKE EXLPTBL
|
||
;--------------------------------------------------------- 89/08/19 --
|
||
PUSH AX
|
||
MOV AH,SCSI_FLG
|
||
;----------------------------------------------- DOS5 90/12/14 -------
|
||
CMP WORD PTR DS:[BP+8],0
|
||
JNE NOT_LARGE
|
||
OR AH,02 ;SET LARGE PATITION BIT
|
||
NOT_LARGE:
|
||
;---------------------------------------------------------------------
|
||
MOV [BX-1],AH
|
||
POP AX
|
||
;---------------------------------------------------------------------
|
||
ADD BX,2
|
||
;----------------------------------------------- DOS5 90/12/17 -------
|
||
ADD BP,BPB_SIZE
|
||
;---------------------------------------------------------------------
|
||
INC HD_CNT ;DRIVE NUM ++
|
||
MH_COMMON15:
|
||
;---------------------------------------------------------------------
|
||
LOOP MH_COMMON10
|
||
MH_COMMON20:
|
||
POP CX
|
||
RET
|
||
|
||
;************************************************
|
||
;* *
|
||
;* HARD DISK INITIARIZE ROUTINE *
|
||
;* *
|
||
;************************************************ 88/03/21
|
||
|
||
HARDINIT:
|
||
RET
|
||
|
||
;************************************************870815NEW
|
||
;* *
|
||
;* HARD DISK SENSE *
|
||
;* *
|
||
;* INPUT : NONE *
|
||
;* OUTPUT: CF=0:NORMAL *
|
||
;* AH HD CAPACITY *
|
||
;* BX BYTES / SECTOR *
|
||
;* DH TRACKS / CYLINDER *
|
||
;* DL SECTORS / TRACK *
|
||
;* CF=1:ERROR *
|
||
;* *
|
||
;************************************************
|
||
SENSE_HD:
|
||
MOV CX,5 ;RETRY COUNT
|
||
SNSHD00:
|
||
XOR BX,BX
|
||
; MOV AX,8400H ;SET SENSE COMMAND AND DA/UA
|
||
; OR AL,[UA] ;MAKE UA
|
||
MOV AH,84H ;SET SENSE COMMAND
|
||
MOV AL,DA ;SET DA/UA
|
||
OR AL,UA
|
||
INT 1BH ;EXECUTE SENSE COMMAND
|
||
JNC SNSHD01 ;SKIP IF SENSE GOOD
|
||
LOOP SNSHD00
|
||
STC ;SET CARRY
|
||
RET
|
||
|
||
SNSHD01:
|
||
OR BX,BX ;BYTE/SEC = 0 (OLD BIOS) ?
|
||
JNZ SNSHD01?SKIP?N ;NO,
|
||
MOV BX,256 ;BYTES/SECTOR
|
||
MOV DL,33 ;SECTORS/TRACK
|
||
MOV DH,4 ;IF CAPACITY >= 20(MB)
|
||
CMP AH,3 ; THEN TRACKS/CYLINDER = 8
|
||
JB SNSHD01?SKIP?N ; ELSE TRACKS/CYLINDER = 4
|
||
MOV DH,8 ;
|
||
SNSHD01?SKIP?N:
|
||
CLC
|
||
RET
|
||
|
||
;************************************************
|
||
;* *
|
||
;* FIND SELF NUMBER *
|
||
;* *
|
||
;************************************************
|
||
BOOT_ID EQU 0 ;BOOT IDENTIFICATION
|
||
SYS_ID EQU 1 ;SYSTEM IDENTIFICATION
|
||
IPL_ADR EQU 4 ;ADDR OF IPL
|
||
LV_STA EQU 8 ;START ADDR OF LOGICAL VOLUME
|
||
LV_ENA EQU 12 ;END ADDR OF LOGICAL VOLUME
|
||
|
||
;************************************************
|
||
;* *
|
||
;* RECALIBLATE *
|
||
;* *
|
||
;************************************************
|
||
RCBL:
|
||
RET
|
||
|
||
PAGE
|
||
|
||
;************************************************
|
||
;* *
|
||
;* SET DEFAULT ATTRIBUTE *
|
||
;* *
|
||
;************************************************
|
||
DEFULT:
|
||
MOV AL,[MEM_SW3] ;GET CONTENTS OF MEM_SW3
|
||
AND AL,40H ;ONLY 2**6 BIT
|
||
JNZ DEF30 ;SKIP IF NOT 0
|
||
MOV [CURATTR],0E1H
|
||
MOV [DEFATTR],0E1H
|
||
MOV [ESCATRSAVE],0E1H
|
||
MOV [CURATTR2],00E1H
|
||
MOV [DEFATTR2],00E1H
|
||
MOV [ATRSAVE2],00E1H
|
||
DEF30:
|
||
RET
|
||
|
||
;************************************************870826 NEW
|
||
;* *
|
||
;* SET H/W MODE & DEFAULT VALUE *
|
||
;* *
|
||
;************************************************
|
||
MODE_HIRESO = 00000001B
|
||
SETVAL PROC
|
||
TEST [SYS_501],00001000B ;CHECK H/W MODE
|
||
JNZ SETV_HIRESO ;NZ IF HIRESO MODE
|
||
|
||
AND [REVISION],NOT MODE_HIRESO ;HW-MODE FLAG
|
||
MOV [LINMOD],1 ;DEFAULT LINE-MODE IS 25 (1)
|
||
RET
|
||
|
||
SETV_HIRESO:
|
||
OR [REVISION],MODE_HIRESO ;HW-MODE FLAG
|
||
MOV [LINMOD],0 ;DEFAULT LINE-MODE IS 25 (0)
|
||
RET
|
||
SETVAL ENDP
|
||
|
||
;************************************************
|
||
;* *
|
||
;* SET H/W MODE & DEFAULT VALUE (2) *
|
||
;* *
|
||
;************************************************
|
||
SETVAL2 PROC
|
||
PUSH DX
|
||
PUSH DS
|
||
PUSH ES
|
||
MOV DX,CS
|
||
MOV DS,DX
|
||
MOV ES,DX
|
||
|
||
MOV SI,OFFSET EXLPTBL ;EX-LPTABLE OFFSET
|
||
MOV CX,26 ;NUMBER OF ENTRY
|
||
XOR DL,DL
|
||
CLD
|
||
STVAL2_LOOP:
|
||
LODSW
|
||
TEST AX,0080H ;LOGICAL EXTENT ?
|
||
JZ STVAL2_SKP ;NO,
|
||
MOV DL,-1
|
||
STVAL2_SKP:
|
||
LOOP STVAL2_LOOP ;NEXT
|
||
MOV [SNGDRV_FLG],DL ;SET SINGLE DRIVE FLAG
|
||
|
||
;\\\\\\ TEST [SYS_501],00001000B ;H/W MODE ?
|
||
;\\\\\\ JNZ STVAL2_NORM_SKP ;HIRESO
|
||
MOV SI,OFFSET HD_OFFSET ;COPY HD_OFFSET CONTENT
|
||
MOV DI,OFFSET COMP_HDOFST_N
|
||
MOVSW ;COPY #0 INFO.
|
||
MOVSW
|
||
MOV SI,OFFSET HD1_OFFSET
|
||
MOVSW ;COPY #1 INFO.
|
||
MOVSW
|
||
|
||
STVAL2_NORM_SKP:
|
||
MOV SI,OFFSET HDDSK5_1 ;COPY HD BPB#1
|
||
MOV DI,OFFSET COMP_HDDSK5_1
|
||
MOV CX,13
|
||
REP MOVSB
|
||
MOV SI,OFFSET HDDSK5_2 ;COPY HD BPB#2
|
||
MOV CX,13
|
||
REP MOVSB
|
||
|
||
POP ES
|
||
POP DS
|
||
POP DX
|
||
RET
|
||
SETVAL2 ENDP
|
||
|
||
;************************************************
|
||
;* *
|
||
;* B4670 INITIALIZE PROCEDURE *
|
||
;* *
|
||
;************************************************
|
||
; 85/03/28
|
||
;
|
||
B4670_PRC:
|
||
IF BRANCH ;-----------------------------------------------------
|
||
XOR AX,AX ;V (850517)
|
||
PUSH ES
|
||
MOV ES,AX ;ES POINTS ZERO-SEGMENT
|
||
MOV ES:WORD PTR [0078H*4],OFFSET B4670ENT
|
||
MOV ES:WORD PTR [0078H*4+2],CS
|
||
|
||
TEST MEM_SW4,10H ;B4670 SUPPORT ?
|
||
JE B4670_ABORT0 ;SKIP IF NO
|
||
;
|
||
B4670_PRC10:
|
||
MOV ES:WORD PTR [00D3H*4],OFFSET INTD3_ENTRY
|
||
MOV ES:WORD PTR [00D3H*4+2],CS
|
||
;
|
||
;-----INTIALIZE OMNI-BIO
|
||
;
|
||
MOV AL,6
|
||
MOV DI,0080H
|
||
INT 0D3H ;INITIALIZE IT
|
||
CMP AL,3FH ;CHECK CORRECT ZONE ?
|
||
JA B4670_ABORT0
|
||
CMP AL,00H ;SAME CHECK
|
||
JAE B4670_GOOD
|
||
B4670_ABORT0:
|
||
MOV ES:WORD PTR [0078H*4],OFFSET NOT_BSYS_ENT ;85/05/19(I)
|
||
MOV ES:WORD PTR [0078H*4+2],CS ;85/05/19(I)
|
||
POP ES
|
||
RET
|
||
;
|
||
; BOARD IS GOOD !!
|
||
;
|
||
B4670_GOOD:
|
||
MOV ES:[OMNI_STATION],AL ;SAVE SA
|
||
MOV DI,OFFSET SA_NO ;85/05/18
|
||
CALL CUL_SA ;85/05/18
|
||
;---------------------------- 85/05/15 ---------;
|
||
MOV AL,[MEM_SW5+2] ;GET MEMORY SW(7) CONTENT
|
||
TEST AL,01000000B ;NODE SPECIFIED ?
|
||
JNZ B4670_SKP21 ;Y
|
||
XOR AL,AL ;DEFAULT IS 00H
|
||
B4670_SKP21: ;
|
||
AND AL,00111111B ;
|
||
MOV ES:BYTE PTR [OMNI_SERVER],AL ;SAVE SERVER-SA
|
||
MOV DI,OFFSET SV_NO ;
|
||
CALL CUL_SA ;SET TO MESSAGE SATA
|
||
;-----------------------------------------------;
|
||
MOV VSYS_FLAG,01H
|
||
;
|
||
; SAVE ROM-VECTOR IMAGE
|
||
;
|
||
;******************************* 86/11/12 B4670 BY QNES FOR X21 ************
|
||
MOV DI,OFFSET VEC_SAVE
|
||
MOV SI,00
|
||
MOV CX,03EH
|
||
CLD
|
||
PUSH ES
|
||
PUSH DS
|
||
PUSH ES
|
||
POP DS
|
||
PUSH CS
|
||
POP ES
|
||
REP MOVSW
|
||
POP DS
|
||
POP ES
|
||
;*****************************************************************************
|
||
MOV AX,ES:WORD PTR [001BH*4] ;SAVE 1B VECTOR
|
||
MOV WORD PTR ROM_INT1B,AX
|
||
MOV AX,ES:WORD PTR [001BH*4+2]
|
||
MOV WORD PTR ROM_INT1B+2,AX
|
||
MOV AX,ES:WORD PTR [001AH*4] ;SAVE 1A VECTOR
|
||
MOV WORD PTR ROM_INT1A,AX
|
||
MOV AX,ES:WORD PTR [001AH*4+2]
|
||
MOV WORD PTR ROM_INT1A+2,AX
|
||
MOV AX,ES:WORD PTR [001FH*4] ;SAVE 1F VECTOR
|
||
MOV WORD PTR [NXT_INT1F],AX
|
||
MOV AX,ES:WORD PTR [001FH*4+2]
|
||
MOV WORD PTR [NXT_INT1F+2],AX
|
||
;
|
||
; SET NEW-VECTOR IMAGE
|
||
;
|
||
MOV ES:WORD PTR [001BH*4],OFFSET VDISK_BIO
|
||
MOV ES:WORD PTR [001BH*4+2],CS
|
||
MOV ES:WORD PTR [001AH*4],OFFSET PRT_BIO
|
||
MOV ES:WORD PTR [001AH*4+2],CS
|
||
MOV ES:WORD PTR [001FH*4],OFFSET B4670_INT1F
|
||
MOV ES:WORD PTR [001FH*4+2],CS
|
||
|
||
MOV INFVT,00001111B
|
||
POP ES
|
||
ENDIF ;-------------------------------------------------------------
|
||
RET
|
||
|
||
;
|
||
; CONVERT HEX TO DECIMAL
|
||
;
|
||
CUL_SA:
|
||
IF BRANCH ;-----------------------------------------------------
|
||
CMP AL,10
|
||
JA CULSA_SKP10
|
||
OR AL,30H
|
||
MOV CS:[DI+1],AL
|
||
JMP SHORT CULSA_SKP20
|
||
CULSA_SKP10:
|
||
XOR AH,AH
|
||
MOV CL,10
|
||
DIV CL
|
||
OR AX,3030H
|
||
MOV WORD PTR CS:[DI],AX
|
||
CULSA_SKP20:
|
||
ENDIF ;-------------------------------------------------------------
|
||
RET
|
||
|
||
;
|
||
; INITIALIZE INTERNAL-FLAG FIELD
|
||
; & MAKE LPTABLE.
|
||
B4670_MK:
|
||
IF BRANCH ;-----------------------------------------------------
|
||
CMP [VSYS_FLAG],1
|
||
JNE B4670_MK_RET
|
||
MOV DX,0 ;SET COUNTER
|
||
B4670_IN:
|
||
PUSH DX ;SAVE UNIT# 850517
|
||
CALL SENS_DRV
|
||
JC B4670_IN10
|
||
CALL VS_MOUNT
|
||
B4670_IN10:
|
||
POP DX ;RESUME UNIT# 850517
|
||
INC DX
|
||
CMP DX,4
|
||
JNE B4670_IN
|
||
B4670_MK_RET:
|
||
ENDIF ;-------------------------------------------------------------
|
||
RET
|
||
|
||
|
||
;
|
||
; MESSAGE (B4670)
|
||
;
|
||
B4670MSG:
|
||
IF BRANCH ;-----------------------------------------------------
|
||
TEST [MEM_SW4],10H
|
||
JZ B4670MSG_DONE
|
||
|
||
MOV BX,OFFSET B4670_MSG_OK
|
||
CMP [VSYS_FLAG],0
|
||
JE B4670MSG_DONE
|
||
CALL MSGLOOP_FAR ;DISPLAY SIGN ON (B4670)
|
||
B4670MSG_DONE:
|
||
ENDIF ;-------------------------------------------------------------
|
||
RET
|
||
|
||
ASSUME DS:DATAGRP
|
||
|
||
PAGE
|
||
|
||
;
|
||
; SIGN ON MESSAGE
|
||
;
|
||
|
||
;--------------------------------------------------------MAMA------
|
||
; INCLUDE SIGNON.INC ;DELETE 871015
|
||
;--------------------------------------------------------MAMA------
|
||
|
||
|
||
IF BRANCH ;-------------------------------------- 871002 -------
|
||
B4670_MSG_OK DB '<27>@BRANCH4670 <20>f<EFBFBD>o<EFBFBD>C<EFBFBD>X<EFBFBD>T<EFBFBD>[<5B>o<EFBFBD>Q<EFBFBD><51><EFBFBD>Nj@<40>\'
|
||
DB '<27><><EFBFBD>g<EFBFBD>p<EFBFBD>\<5C>ł<EFBFBD>',CR,LF
|
||
DB ' <20>X<EFBFBD>e<EFBFBD>[<5B>V<EFBFBD><56><EFBFBD><EFBFBD><EFBFBD>ԍ<EFBFBD><D48D><EFBFBD> '
|
||
SA_NO DB '00'
|
||
DB ' <20>C<EFBFBD>T<EFBFBD>[<5B>o<EFBFBD>A<EFBFBD>h<EFBFBD><68><EFBFBD>X<EFBFBD><58> '
|
||
SV_NO DB '00'
|
||
DB ' <20>ł<EFBFBD>',CR,LF,0
|
||
ENDIF ;-------------------------------------------------------------
|
||
;--------------------------------------------------------- 88/05/06 --
|
||
;
|
||
; WORK BUFFERS
|
||
;
|
||
;HARD_WORK DB 512 DUP(?)
|
||
;IPL_BUF DB 512 DUP(?)
|
||
;---------------------------------------------------------------------
|
||
;------------------------------------------------ CUT 88/02/25 -----
|
||
;
|
||
; STACK
|
||
;
|
||
; DW 128 DUP(0CCCCH)
|
||
;STACKTOP LABEL WORD
|
||
;--------------------------------------------------------------------
|
||
IO_LAST LABEL BYTE
|
||
|
||
INIT_CODE_END:
|
||
|
||
BIOS_DATA_INIT ENDS
|
||
|
||
END
|
||
|