1 ;==============================================================================
3 ;AN000 - New for DOS Version 3.4 - J.K.
4 ;AC000 - Changed for DOS Version 3.4 - J.K.
6 ;==============================================================================
7 ;AN001 - d9 Double word MOV instruction for 80386 based machine. 7/1/87 J.K.
8 ;AN002 - d25 Change DASD ERP to that recommended by Storage Systems. 7/29/87 J.K.
9 ;AN003; d304 Boot record structure change for OS2 11/9/87 J.K.
10 ;==============================================================================
15 JMP INIT ;START$ PATCH BY INIT TO POINT TO
18 ;FORMAT_PATCH: ;ARR 2.42
19 ; JMP FMTSET ;MJB001 DISPATCH FOR CALL FROM FORMAT UTILITY
24 ; DB 20 DUP (0) ;IBM WANTS SOME ZEROED AREA (DELETED)
28 ;--------------------------------------------------------------
32 ; BEWARE - THESE TABLES OVERLAP SOMEWHAT! -C.P.
36 DB 24 ; THIS IS THE SIZE OF THE TABLE YUK!!!!
52 TABLE_PATCH LABEL WORD ;ARR 2.42
54 DW DSK$CLOSE ;ARR 2.41
59 DW GENERIC$IOCTL ; KGS 3.20
63 DW IOCTL$GETOWN ; RS 3.20
64 DW IOCTL$SETOWN ; RE 3.20
81 ; DW CMDERR ;J.K. 4/29/86 for CON$GENIOCTL support
82 ; DW CMDERR ;J.K. 4/29/86
83 ; DW CMDERR ;J.K. 4/29/86
84 ; DW CMDERR ;J.K. 4/29/86
85 ; DW CMDERR ;J.K. 4/29/86
86 ; DW CMDERR ;J.K. 4/29/86
87 ; DW CMDERR ;J.K. 4/29/86
88 ; DW CMDERR ;J.K. 4/29/86
89 ; DW CON$GENIOCTL ;J.K. 4/29/86
127 DW EXIT$ZER ;INDICATE ZERO CHARS READ
142 DW PRN$GENIOCTL ;RS 3.20
150 PUBLIC OLD13 ;(MOVED HERE FROM IBMBIO2)
152 db '5986' ;J.K. 11/7/86 Secrete Code for DOS 3.30 IBMBIO.
155 db '21',0,0 ;J.K. 11/8/86 This is my employee serial # !!!
161 AUXBUF DB 0,0,0,0 ;SET OF 1 BYTE BUFFERS FOR COM 1,2,3, AND 4
164 PUBLIC PREVOPER,NUMBER_OF_SEC
165 PREVOPER DW ? ; HOLDS INT 13 REQUEST (I.E. REGISTER AX).
166 NUMBER_OF_SEC DB ? ; HOLDS NUMBER OF SECTORS TO READ ON AN ECC ERROR
169 %OUT VDISK BUFFER NOT CORRECTLY LOCATED
174 VDISK_AREA DB 108 DUP(0) ;FOR USE BY VDISK
177 ; WARNING!!! THESE ARE ADDRESSED TOGETHER IN GETDX
178 AUXNUM DB 0 ;WHICH AUX DEVICE WAS REQUESTED
183 CONHEADER LABEL WORD ;HEADER FOR DEVICE "CON"
185 DW 1000000000010011B ;CON IN AND CON OUT + SPECIAL
192 AUXDEV2 LABEL WORD ;HEADER FOR DEVICE "AUX"
201 PRNDEV2 LABEL WORD ;HEADER FOR DEVICE "PRN"
203 DW CHARDEV + OUTTILBUSY + DEV320
221 DW 0000100001000010B ;J.K.I1. 32 bit sector calculation
228 STEP_DRV DB -2 ; ARR 2.20 LAST DRIVE ACCESSED
231 PHYS_DRV DB 0 ; USED BY SETDRIVE FOR GETTING BDS FOR
232 ; LOGICAL DRIVE, OR PHYSICAL DRIVE.
234 FHAVE96 DB 0 ; FLAG TO INDICATE PRESENCE OF
237 SINGLE DB 0 ; USED TO DETECT SINGLE DRIVE SYSTEMS
240 FHAVEK09 DB 0 ;INDICATES IF THIS IS A K09 OR NOT
241 ; USED BY CONSOLE DRIVER.
243 NEW_ROM DB 0 ;SET TO 1 IF WE HAVE A ROM THAT CAN
244 ; HANDLE STRANGE MEDIA LAYOUTS.
247 FSETOWNER DB ? ;=1 IF WE ARE SETTING THE OWNER OF A
248 ;DRIVE. (EXAMINED BY CHECKSINGLE).
250 Secrete_Code dw 'jk' ;J.K. 11/7/86 Secrete code for DOS 3.30 IBMBIO.
265 DW CHARDEV + OUTTILBUSY + DEV320
274 DW CHARDEV + OUTTILBUSY + DEV320
283 DW CHARDEV + OUTTILBUSY + DEV320
299 COM3DEV LABEL WORD ;EDK
308 COM4DEV LABEL WORD ;EDK
315 ; HARD-WIRE THE LINK TO THE NEXT INT2F HANDLER.
319 EXTRN INT2F_DISK:FAR ;IBMBIO2
325 DD BDS1 ;START OF BDS LINKED LIST.
327 ACCESSCOUNT DB 0 ; NUMBER OF TIMES MEDIA CHECK CALLED
329 TIM_DRV DB -1 ; TIME WHEN LAST DISK I/O PERFORMED
331 FLAGBITS DW 0 ; BITS TO SET IN FLAG FIELD WHEN DOING
340 RFLAG DB ROMREAD ;2 FOR READ, 3 FOR WRITE
341 VERIFY DB 0 ;1 IF VERIFY AFTER WRITE
345 HARDNUM DB 99 ;LOGICAL DRIVE NUMBER OF FIRST HARDFILE
346 PUBLIC MOTORSTARTUP,SETTLECURRENT,SETTLESLOW
347 MOTORSTARTUP DB ? ; VALUE FROM TABLE
348 SETTLECURRENT DB ? ; VALUE FROM TABLE
349 SETTLESLOW DB ? ; SLOW SETTLE VALUE
351 NEXTSPEED DB ? ; VALUE OF SPEED TO BE USED
352 public save_head_sttl
353 Save_head_sttl db ? ;used by READ_SECTOR routine
362 ;KEEP THE NEXT TWO ITEMS CONTIGUOUS - SEE IOCTL_BLOCK FOR REASON
363 PUBLIC CURSEC,CURHD,CURTRK,SPSAV
364 CURSEC DB 0 ;CURRENT SECTOR
365 CURHD DB 0 ;CURRENT HEAD
366 CURTRK DW 0 ;CURRENT TRACK
367 SPSAV DW 0 ;SAVE THE STACK POINTER
369 ; THE FOLLOWING ARE USED FOR IOCTL FUNCTION CALLS
370 PUBLIC FORMT_EOT,HDNUM,TRKNUM,GAP_PATCH
371 FORMT_EOT DB 8 ; EOT USED FOR FORMAT
372 HDNUM DB 0 ; HEAD NUMBER
373 TRKNUM DW 0 ; TRACK BEING MANIPULATED
374 GAP_PATCH DB 50H ; FORMAT GAP PATCHED INTO DPT
376 ;DISK ERRORS RETURNED FROM THE IBM ROM
379 db 0cch ;AN002; Write Fault error
385 DB 4 ;SECTOR NOT FOUND
386 DB 3 ;WRITE ATTEMPT TO WRITE-PROTECT DISK
388 LSTERR DB 0 ;ALL OTHER ERRORS
390 ;RETURNED ERROR CODES CORRESPONDING TO ABOVE
393 db 10 ;AN002; Write Fault error
398 DB 15 ; INVALID MEDIA CHANGE
399 DB 8 ;SECTOR NOT FOUND
400 DB 0 ;WRITE ATTEMPT ON WRITE-PROTECT DISK
403 NUMERR = ERROUT-ERRIN
405 ;-------------------------------------------------------------
407 ; READ IN BOOT SECTOR HERE, READ DONE IN READBOOT.
408 ; ALSO READ SECTOR FOR DMA CHECK FOR HARD DISK.
410 ;J.K. The buffer for a disk sector is going to be at a double word boundary
413 IF ($-CODE) Mod 4 ;AN001;
414 Org ($-CODE)+4-(($-CODE) Mod 4) ;AN001;
418 DiskSector DB 11 DUP(?) ; TAKE CARE OF 3 JUMP BYTES PLUS OEM NAME.
421 PUBLIC SECPERCLUSINSECTOR
422 SecPerClusInSector DB ?
434 DW ? ;AN000; Extended Hidden sector (high)
435 DW ? ;AN000; Extended Total sector (low)
436 DW ? ;AN000; Extended Total sector (high)
437 db ? ;AN003; PHYDRV in boot record.
438 db ? ;AN003; CURRENT HEAD in boot record.
440 Ext_Boot_Sig DB ? ;AN000; Extended Boot record sig. (=90h)
442 Boot_Serial_L DW ? ;AN000; Boot volume serial number (Low)
444 Boot_Serial_H DW ? ;AN000; Boot volume serial number (High)
445 public Boot_Volume_Label
446 Boot_Volume_Label DB 11 dup (' ') ;AN000; Volume label
447 public Boot_System_ID
448 Boot_System_ID DB 8 dup (' ') ;AN000; File system Id.
449 DB 512-($-DISKSECTOR) DUP (?)
451 ;*********************************************************************
452 ; "BDS" CONTAINS INFORMATION FOR EACH DRIVE IN THE SYSTEM.
453 ; VARIOUS VALUES ARE PATCHED WHENEVER ACTIONS ARE PERFORMED.
454 ; SECTORS/ALLOC. UNIT IN BPB INITIALLY SET TO -1 TO SIGNIFY THAT
455 ; THE BPB HAS NOT BEEN FILLED. LINK ALSO SET TO -1 TO SIGNIFY END
456 ; OF LIST. # OF CYLINDERS IN MAXPARMS INITIALIZED TO -1 TO INDICATE
457 ; THAT THE PARAMETERS HAVE NOT BEEN SET.
461 DD BDS2 ;LINK TO NEXT STRUCTURE
462 DB 0 ;INT 13 DRIVE NUMBER
463 DB 0 ;LOGICAL DRIVE LETTER
465 FDRIVE1 DW 512 ;PHYSICAL SECTOR SIZE IN BYTES
466 DB -1 ;SECTORS/ALLOCATION UNIT
467 DW 1 ;RESERVED SECTORS FOR DOS
468 DB 2 ;NO. ALLOCATION TABLES
469 DW 64 ;NUMBER DIRECTORY ENTRIES
470 DW 9*40 ;NUMBER SECTORS (AT 512 BYTES EA.)
471 DB 00000000B ;MEDIA DESCRIPTOR, INITIALLY 00H.
472 DW 2 ;NUMBER OF FAT SECTORS
475 DW 0 ;HIDDEN SECTOR COUNT (low word)
476 dw 0 ;J.K. Hidden sector (high)
477 dw 0 ;J.K. Number sectors (low)
478 dw 0 ;J.K. Number sectors (high)
479 DB 0 ; TRUE => LARGE FATS
480 OPCNT1 DW 0 ;OPEN REF. COUNT
483 FLAGS1 DW 0020H ;VARIOUS FLAGS
484 ; DB 9 DUP (0) ;RESERVED FOR FUTURE USE
485 DW 40 ; NUMBER OF CYLINDERS
486 ; RECOMMENDED BPB FOR DRIVE.
487 RECBPB1 DW 512 ;BYTES PER SECTOR
488 DB 1 ;SECTORS/ALLOCATION UNIT
489 DW 1 ;RESERVED SECTORS FOR DOS
490 DB 2 ;NO. ALLOCATION TABLES
491 DW 0E0H ;NUMBER DIRECTORY ENTRIES
492 DW 9*40 ;NUMBER SECTORS (AT 512 BYTES EA.)
493 DB 0F0H ;MEDIA DESCRIPTOR, INITIALLY F0H.
494 DW 2 ;NUMBER OF FAT SECTORS
497 DW 0 ;HIDDEN SECTOR COUNT(low)
498 dw 0 ;J.K. Hidden sector count (high)
499 dw 0 ;J.K. Number sectors (low)
500 dw 0 ;J.K. Number sectors (high)
502 TRACK1 DB -1 ;LAST TRACK ACCESSED ON THIS DRIVE
503 TIM_LO1 DW -1 ;KEEP THESE TWO CONTIGUOUS (?)
505 VOLID1 DB "NO NAME ",0 ;VOLUME ID FOR THIS DISK
506 VOLSER1 dd 0 ;Current volume serial number from Boot record
507 SYSID1 db "FAT12 ",0 ;Current file system id from Boot record
511 DD BDS3 ;LINK TO NEXT STRUCTURE
512 DB 0 ;INT 13 DRIVE NUMBER
513 DB 0 ;LOGICAL DRIVE LETTER
515 FDRIVE2 DW 512 ;PHYSICAL SECTOR SIZE IN BYTES
516 DB -1 ;SECTORS/ALLOCATION UNIT
517 DW 1 ;RESERVED SECTORS FOR DOS
518 DB 2 ;NO. ALLOCATION TABLES
519 DW 64 ;NUMBER DIRECTORY ENTRIES
520 DW 9*40 ;NUMBER SECTORS (AT 512 BYTES EA.)
521 DB 00000000B ;MEDIA DESCRIPTOR, INITIALLY 00H.
522 DW 2 ;NUMBER OF FAT SECTORS
525 DW 0 ;HIDDEN SECTOR COUNT (low word)
526 dw 0 ;J.K. Hidden sector (high)
527 dw 0 ;J.K. Number sectors (low)
528 dw 0 ;J.K. Number sectors (high)
529 DB 0 ; TRUE => LARGE FATS
530 OPCNT2 DW 0 ;OPEN REF. COUNT
532 FLAGS2 DW 0020H ;VARIOUS FLAGS
533 ; DB 9 DUP (0) ;RESERVED FOR FUTURE USE
534 DW 40 ; NUMBER OF CYLINDERS
535 ; RECOMMENDED BPB FOR DRIVE.
536 RECBPB2 DW 512 ;BYTES PER SECTOR
537 DB 1 ;SECTORS/ALLOCATION UNIT
538 DW 1 ;RESERVED SECTORS FOR DOS
539 DB 2 ;NO. ALLOCATION TABLES
540 DW 0E0H ;NUMBER DIRECTORY ENTRIES
541 DW 9*40 ;NUMBER SECTORS (AT 512 BYTES EA.)
542 DB 0F0H ;MEDIA DESCRIPTOR, INITIALLY F0H.
543 DW 2 ;NUMBER OF FAT SECTORS
546 DW 0 ;HIDDEN SECTOR COUNT(low)
547 dw 0 ;J.K. Hidden sector count (high)
548 dw 0 ;J.K. Number sectors (low)
549 dw 0 ;J.K. Number sectors (high)
551 TRACK2 DB -1 ;LAST TRACK ACCESSED ON THIS DRIVE
552 TIM_LO2 DW -1 ;KEEP THESE TWO CONTIGUOUS (?)
554 VOLID2 DB "NO NAME ",0 ;VOLUME ID FOR THIS DISK
555 VOLSER2 dd 0 ;Current volume serial number from Boot record
556 SYSID2 db "FAT12 ",0 ;Current file system id from Boot record
560 DD BDS4 ;LINK TO NEXT STRUCTURE
561 DB 0 ;INT 13 DRIVE NUMBER
562 DB 0 ;LOGICAL DRIVE LETTER
564 FDRIVE3 DW 512 ;PHYSICAL SECTOR SIZE IN BYTES
565 DB -1 ;SECTORS/ALLOCATION UNIT
566 DW 1 ;RESERVED SECTORS FOR DOS
567 DB 2 ;NO. ALLOCATION TABLES
568 DW 64 ;NUMBER DIRECTORY ENTRIES
569 DW 9*40 ;NUMBER SECTORS (AT 512 BYTES EA.)
570 DB 00000000B ;MEDIA DESCRIPTOR, INITIALLY 00H.
571 DW 2 ;NUMBER OF FAT SECTORS
574 DW 0 ;HIDDEN SECTOR COUNT (low word)
575 dw 0 ;J.K. Hidden sector (high)
576 dw 0 ;J.K. Number sectors (low)
577 dw 0 ;J.K. Number sectors (high)
578 DB 0 ; TRUE => LARGE FATS
579 OPCNT3 DW 0 ;OPEN REF. COUNT
581 FLAGS3 DW 0020H ;VARIOUS FLAGS
582 ; DB 9 DUP (0) ;RESERVED FOR FUTURE USE
583 DW 40 ; NUMBER OF CYLINDERS
584 ; RECOMMENDED BPB FOR DRIVE.
585 RECBPB3 DW 512 ;BYTES PER SECTOR
586 DB 1 ;SECTORS/ALLOCATION UNIT
587 DW 1 ;RESERVED SECTORS FOR DOS
588 DB 2 ;NO. ALLOCATION TABLES
589 DW 0E0H ;NUMBER DIRECTORY ENTRIES
590 DW 9*40 ;NUMBER SECTORS (AT 512 BYTES EA.)
591 DB 0F0H ;MEDIA DESCRIPTOR, INITIALLY F0H.
592 DW 2 ;NUMBER OF FAT SECTORS
595 DW 0 ;HIDDEN SECTOR COUNT(low)
596 dw 0 ;J.K. Hidden sector count (high)
597 dw 0 ;J.K. Number sectors (low)
598 dw 0 ;J.K. Number sectors (high)
600 TRACK3 DB -1 ;LAST TRACK ACCESSED ON THIS DRIVE
601 TIM_LO3 DW -1 ;KEEP THESE TWO CONTIGUOUS (?)
603 VOLID3 DB "NO NAME ",0 ;VOLUME ID FOR THIS DISK
604 VOLSER3 dd 0 ;Current volume serial number from Boot record
605 SYSID3 db "FAT12 ",0 ;Current file system id from Boot record
609 DW -1 ;LINK TO NEXT STRUCTURE
611 DB 0 ;INT 13 DRIVE NUMBER
612 DB 0 ;LOGICAL DRIVE LETTER
614 FDRIVE4 DW 512 ;PHYSICAL SECTOR SIZE IN BYTES
615 DB -1 ;SECTORS/ALLOCATION UNIT
616 DW 1 ;RESERVED SECTORS FOR DOS
617 DB 2 ;NO. ALLOCATION TABLES
618 DW 64 ;NUMBER DIRECTORY ENTRIES
619 DW 9*40 ;NUMBER SECTORS (AT 512 BYTES EA.)
620 DB 00000000B ;MEDIA DESCRIPTOR, INITIALLY 00H.
621 DW 2 ;NUMBER OF FAT SECTORS
624 DW 0 ;HIDDEN SECTOR COUNT (low word)
625 dw 0 ;J.K. Hidden sector (high)
626 dw 0 ;J.K. Number sectors (low)
627 dw 0 ;J.K. Number sectors (high)
628 DB 0 ; TRUE => LARGE FATS
629 OPCNT4 DW 0 ;OPEN REF. COUNT
631 FLAGS4 DW 0020H ;VARIOUS FLAGS
632 ; DB 9 DUP (0) ;RESERVED FOR FUTURE USE
633 DW 40 ; NUMBER OF CYLINDERS
634 ; RECOMMENDED BPB FOR DRIVE.
635 RECBPB4 DW 512 ;BYTES PER SECTOR
636 DB 1 ;SECTORS/ALLOCATION UNIT
637 DW 1 ;RESERVED SECTORS FOR DOS
638 DB 2 ;NO. ALLOCATION TABLES
639 DW 0E0H ;NUMBER DIRECTORY ENTRIES
640 DW 9*40 ;NUMBER SECTORS (AT 512 BYTES EA.)
641 DB 0F0H ;MEDIA DESCRIPTOR, INITIALLY F0H.
642 DW 2 ;NUMBER OF FAT SECTORS
645 DW 0 ;HIDDEN SECTOR COUNT(low)
646 dw 0 ;J.K. Hidden sector count (high)
647 dw 0 ;J.K. Number sectors (low)
648 dw 0 ;J.K. Number sectors (high)
650 TRACK4 DB -1 ;LAST TRACK ACCESSED ON THIS DRIVE
651 TIM_LO4 DW -1 ;KEEP THESE TWO CONTIGUOUS (?)
653 VOLID4 DB "NO NAME ",0 ;VOLUME ID FOR THIS DISK
654 VOLSER4 dd 0 ;Current volume serial number from Boot record
655 SYSID4 db "FAT12 ",0 ;Current file system id from Boot record
666 SM92 BPBTYPE <3,9,70H,2*9*80,2,2>
668 ;-----------------------------------------------
670 ; C O N - CONSOLE DEVICE DRIVER
673 ALTAH DB 0 ;SPECIAL KEY HANDLING
675 KEYRD_Func DB 0 ;AN000; Default is conventional keyboard read
677 KEYSTS_Func DB 1 ;AN000; Defualt if conventional keyboard status check.
679 ; PUBLIC SAV_SC_INFO ;J.K. 4/29/86 FOR CON$GENIOCTL
681 ; PUBLIC SAV_SC_COLORS
682 ; PUBLIC SAV_SC_WIDTH
683 ; PUBLIC SAV_SC_LENGTH
684 ;SAV_SC_INFO LABEL BYTE
688 ;SAV_SC_LENGTH DW 0 ;J.K. 4/29/86 FOR CON$GENIOCTL
690 ;-------------------------------------------------------------
692 ; P R N - PRINTER DEVICE
695 PRINTDEV DB 0 ; INDEX INTO ABOVE ARRAY
697 ; THE FOLLOWING VARIABLE CAN BE MODIFIED VIA IOCTL SUB-FUNCTION 16. IN THIS
698 ; WAY, THE WAIT CAN BE SET TO SUIT THE SPEED OF THE PARTICULAR PRINTER BEING
699 ; USED. ONE FOR EACH PRINTER DEVICE.
703 WAIT_COUNT DW 4 DUP (50H) ; ARRAY OF RETRY COUNTS FOR PRINTER
710 IF iTEST ;Testing Mode for IBMBIO.
714 DIGITS DB "0123456789ABCDEF"
716 ;FTESTBITS DW FTESTDISK+FTESTINIT
717 FTESTBITS DW fTestDISK
718 ;ftestbits dw ftestclock