3 TITLE MSBIO1
.asm
- BIOS
4 ;==============================================================================
6 ;AN000 - New for DOS Version 4.00 - J.K.
7 ;AC000 - Changed for DOS Version 4.00 - J.K.
8 ;AN00x - PTM number for DOS Version 4.00 - J.K.
9 ;==============================================================================
11 THE LINK STEP IS PERFORMED BY USING THE FOLLOWING
"NEW.ARF" FILE:
21 C:\BIO2
\OLDOBJ
\msinit
+
22 C:\BIO2
\OLDOBJ
\sysinit1
+
23 C:\BIO2
\OLDOBJ
\sysinit2
+
24 C:\BIO2
\OLDOBJ
\sysimes
,msbio
,/M
;
26 THE FOLLOWING IS A BATCH
FILE THAT CAN BE
USED TO CREATE THE IBMBIO
.COM
27 WHERE
"LOCSCR" IS A
FILE THAT JUST HAS THE NUMBER
, 70:
30 exe2bin ibmbio ibmbio
.com
<C
:\BIO2
\Locscr
34 ;***For testing purposes, set the TEST flag to 1. Otherwise reset it.
43 ; THIS IS A DOSMAC MACRO WHICH IS USED IN DEVSYM WHICH IS INCLUDED LATER
56 INCLUDE MSGROUP
.INC ;DEFINE CODE SEGMENT
58 SYSINITSEG
SEGMENT PUBLIC 'SYSTEM_INIT'
63 PATHSTART
MACRO INDEX
,ABBR
65 PUBLIC ABBR
&INDEX
&S
,ABBR
&INDEX
&E
66 ABBR
&INDEX
&S
LABEL BYTE
70 PATHEND
MACRO INDEX
,ABBR
72 ABBR
&INDEX
&E
LABEL BYTE
77 INCLUDE DEVSYM
.INC ;MJB001
79 ; REV 2.1 5/1/83 ARR ADDED TIMER INT HANDLER AND CHANGED ORDER OF AUX
82 ; REV 2.15 7/13/83 ARR BECAUSE IBM IS FUNDAMENTALY BRAIN DAMAGED, AND
83 ; BASCOM IS RUDE ABOUT THE 1CH TIMER INTERRUPT, THE TIMER
84 ; HANDLER HAS TO GO BACK OUT!!!!! IBM SEEMS UNWILLING TO
85 ; BELIEVE THE PROBLEM IS WITH THE BASCOM RUNTIME, NOT THE
86 ; DOS. THEY HAVE EVEN BEEN GIVEN A PATCH FOR BASCOM!!!!!
87 ; THE CORRECT CODE IS COMMENTED OUT AND HAS AN ARR 2.15
88 ; ANNOTATION. THIS MEANS THE BIOS WILL GO BACK TO THE
89 ; MULTIPLE ROLL OVER BUG.
90 ; REV 2.20 8/5/83 ARR IBM MAKES HARDWARE CHANGE. NOW WANTS TO USE HALF
91 ; HIGHT DRIVES FOR HAL0, AND BACK FIT FOR PC/PC XT. PROBLEM
92 ; WITH HEAD SETTLE TIME. PREVIOUS DRIVES GOT BY ON A 0
93 ; SETTLE TIME, 1/2 HIGHT DRIVES NEED 15 HEAD SETTLE WHEN
94 ; DOING WRITES (0 OK ON READ) IF THE HEAD IS BEING STEPPED.
95 ; THIS REQUIRES A LAST TRACK VALUE TO BE KEPT SO THAT BIOS
96 ; KNOWS WHEN HEAD IS BEING MOVED. TO HELP OUT STUPID
97 ; PROGRAMS THAT ISSUE INT 13H DIRECTLY, THE HEAD SETTLE WILL
98 ; NORMALLY BE SET TO 15. IT WILL BE CHANGED TO 0 ON READS,
99 ; OR ON WRITES WHICH DO NOT REQUIRE HEAD STEP.
100 ; REV 2.21 8/11/83 MZ IBM WANTS WRITE WITH VERIFY TO USE HEAD SETTLE 0.
101 ; USE SAME TRICK AS ABOVE.
102 ; REV 2.25 6/20/83 MJB001 ADDED SUPPORT FOR 96TPI AND SALMON
103 ; REV 2.30 6/27/83 MJB002 ADDED REAL-TIME CLOCK
104 ; REV 2.40 7/8/83 MJB003 ADDED VOLUME-ID CHECKING AND INT 2F MACRO
105 ; DEFINITIONS PUSH* AND POP*
106 ; REV 2.41 7/12/83 ARR MORE 2.X ENHANCEMENTS. OPEN/CLOSE MEDIA CHANGE
107 ; REV 2.42 11/3/83 ARR MORE 2.X ENHANCEMENTS. DISK OPEN/CLOSE, FORMAT
108 ; CODE AND OTHER MISC HOOKED OUT TO SHRINK BIOS. CODE FOR
109 ; DISK OPEN/CLOSE, FORMAT INCLUDED ONLY WITH 96TPI DISKS.
110 ; REV 2.43 12/6/83 MZ EXAMINE BOOT SECTORS ON HARD DISKS FOR 16-BIT FAT
111 ; CHECK. EXAMINE LARGE FAT BIT IN BPB FOR WALK OF MEDIA FOR
113 ; REV 2.44 12/9/83 ARR CHANGE TO ERROR REPORTING ON INT 17H
114 ; REV 2.45 12/22/83 MZ MAKE HEAD SETTLE CHANGE ONLY WHEN DISK PARM IS 0.
116 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
118 ; IBM ADDRESSES FOR I/O
120 ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
125 CR
= 13 ;CARRIAGE RETURN
126 BACKSP
= 8 ;BACKSPACE
127 BRKADR
= 1
BH * 4 ;006C 1BH BREAK VECTOR ADDRESS
128 TIMADR
= 1
CH * 4 ;0070 1CH TIMER INTERRUPT
129 DSKADR
= 1EH
* 4 ;ADDRESS OF PTR TO DISK PARAMETERS
130 SEC9
= 522H
;ADDRESS OF DISK PARAMETERS
131 HEADSETTLE
= SEC9
+9 ; ARR 2.20 ADDRESS OF HEAD SETTLE TIME
132 NORMSETTLE
= 15 ; ARR 2.20 NORMAL HEAD SETTLE
133 SPEEDSETTLE
= 0 ; ARR 2.20 SPEED UP SETTLE TIME
134 INITSPOT
= 534H
; ARR IBM WANTS 4 ZEROS HERE
138 ASSUME
CS:CODE,DS:NOTHING
,ES:NOTHING
149 EXTRN GENERIC$IOCTL
:NEAR
150 EXTRN IOCTL$GETOWN
:NEAR
151 EXTRN IOCTL$SETOWN
:NEAR
156 ; EXTRN CON$GENIOCTL:NEAR ;J.K. 4/29/86
166 EXTRN PRN$TILBUSY
:NEAR
167 EXTRN PRN$GENIOCTL
:NEAR
171 extrn Start_Sec_H
:word ;AN000; Starting sector high word for
172 ;disk I/O request. IBMDISK.ASM
230 PUBLIC DUMPBYTES
;J.K. 4/9/86
231 ;Dumpbytes will dump the bytes in memory in hex. Space will be put in between
232 ;the bytes and CR, LF will be put at the end. - J.K.
233 ;Input: DS:SI -> buffer to dump in Hex.
234 ; CX -> # of bytes (Length of the buffer)
267 Hex_to_ascii proc
near ;J.K. - 4/9/86
289 ;SB33002*******************************************************
290 MOV AH, 0Eh ;SET COMMAND TO WRITE A CHAR ;SB;3.30*
291 MOV BX, 7 ;SET FOREGROUND COLOR ;SB;3.30*
292 INT 10h
;CALL ROM-BIOS ;SB;3.30*
293 ;SB33002*******************************************************
305 ;---------------------------------------------------
309 CMDLEN
= 0 ;LENGTH OF THIS COMMAND
310 UNIT
= 1 ;SUB UNIT SPECIFIER
311 CMD
= 2 ;COMMAND CODE
313 MEDIA
= 13 ;MEDIA DESCRIPTOR
314 TRANS
= 14 ;TRANSFER ADDRESS
315 COUNT
= 18 ;COUNT OF BLOCKS OR CHARACTERS
316 START
= 20 ;FIRST BLOCK TO TRANSFER
317 EXTRA
= 22 ;USUALLY A POINTER TO VOL ID FOR ERROR 15
318 START_L
= 26 ;AN000; Extended start sector (Low)
319 START_H
= 28 ;AN000; Extended start sector (High)
323 MOV WORD PTR CS:[PTRSAV
],BX
324 MOV WORD PTR CS:[PTRSAV
+2],ES
348 JMP short AUXENT
;J.K. 4/15/86
351 ;SB33102****************************************************************
352 ;SB Add code to handle two more COM Ports
370 ;SB33102****************************************************************
412 MOV CS:[PRINTDEV
],AH ;SAVE INDEX INTO ARRAY OF RETRY COUNTS
439 MOV CS:[AUXNUM
],AL ;SAVE CHOICE OF AUX/PRN DEVICE
441 LDS BX,CS:[PTRSAV
] ;GET POINTER TO I/O PACKET
444 MOV AL,BYTE PTR DS:[BX].UNIT
;AL = UNIT CODE
445 MOV AH,BYTE PTR DS:[BX].MEDIA
;AH = MEDIA DESCRIP
446 MOV CX,WORD PTR DS:[BX].COUNT
;CX = COUNT
447 MOV DX,WORD PTR DS:[BX].START
;DX = START SECTOR
449 ;SB34MSB100*********************************************************************
451 ;SB The disk device driver can now handle 32 bit start sector number.
452 ;SB So we should check to see if a 32 bit sector number has been specified
453 ;SB and if so get it. Whether a 32 bit sector has been specified or not
454 ;SB the disk driver expects a 32 bit sector number with the high word
455 ;SB in cs:Start_Sec_H and the low word in dx.
458 ;SB 1. Check to see if the request is for the disk driver by
459 ;SB checking to see if SI points to DSKTBL.
461 ;SB 2. If request not for the disk nothing special needs to be done.
463 ;SB 3. If request for the disk then check to see if a 32 bit
464 ;SB sector number has been specified by seeing whether the
465 ;SB the conventional sector number specified is -1. If so
466 ;SB we need to pick the 32 bit sector number from the new
467 ;SB fields in the request packet. See the request header
468 ;SB struc for the fields you need. If the conventional
469 ;SB sector field is not -1 then a 16 bit sector number
470 ;SB has been specified and we just need to initalise the
471 ;SB high word in cs:Start_Sec_H to 0
473 ;SB NOTE: START_L and START_H are the offsets withing the IO_REQUEST packet
474 ;SB which contain the low and hi words of the 32 bit start sector if
475 ;SB it has been used.
477 ;SB NOTE:Remember not to destroy the registers which have been set up before
480 JNZ DSK_REQ_CONT
; Not Disk Req
483 MOV DX,DS:[BX].START_H
; 32 bits DSK REQ
484 MOV CS:START_SEC_H
,DX ; CS:Start_sec_H = Packet.Start_H
485 MOV DX,DS:[BX].START_L
; DX = Packet.Start_L
486 JMP SHORT DSK_REQ_CONT
491 ;SB34MSB100*********************************************************************
494 MOV AL,BYTE PTR DS:[BX].CMD
495 CMP AL,CS:[SI] ;ARR 2.41
498 CBW ; NOTE THAT AL <= 15 MEANS OK
504 LES DI,DWORD PTR DS:[BX].TRANS
512 JMP WORD PTR [SI+1] ;GO DO COMMAND
515 ;=====================================================
517 ;= SUBROUTINES SHARED BY MULTIPLE DEVICES
519 ;=====================================================
520 ;----------------------------------------------------------
522 ; EXIT - ALL ROUTINES RETURN THROUGH THIS PATH
532 MOV AL,3 ;UNKNOWN COMMAND ERROR
538 SUB WORD PTR [BX].COUNT
,CX ;# OF SUCCESSFUL I/O'S
542 MOV AH,10000001B ;MARK ERROR RETURN
547 ASSUME
DS:CODE ; WE ARE NOT SURE THIS IS CORRECT 3/18/86
552 MOV WORD PTR [BX].COUNT
,AX ;INDICATE NO CHARS READ
561 MOV WORD PTR [BX].STATUS
,AX ;MARK OPERATION COMPLETE
572 RET ;RESTORE REGS AND RETURN
575 ;-------------------------------------------------------------
577 ; CHROUT - WRITE OUT CHAR IN AL USING CURRENT ATTRIBUTE
590 ;SB33002a*******************************************************
592 mov AH, 0Eh ; set command to write a character;SB;3.30
593 mov BX, 7 ; set foreground color ;SB ;3.30
594 int 10h
; call rom-bios ;SB ;3.30
596 ;SB33002a*******************************************************
603 ;----------------------------------------------
609 MOV DX,WORD PTR CS:[AUXNUM
]
613 ;************************************************** ARR 2.15
615 ;-----------------------------------------------
617 ; TIMER INTERRUPT HANDLER
631 ; INT 1AH ; GET ROM TIME AND ZAP ROLL OVER
632 ; MOV [TIMER_HIGH],CX
636 ; INC WORD PTR [DAYCNT] ; ONE DAY GONE BY
643 ;************************************************** ARR 2.15