diff options
| author | 2024-04-25 21:24:10 +0100 | |
|---|---|---|
| committer | 2024-04-25 22:32:27 +0000 | |
| commit | 2d04cacc5322951f187bb17e017c12920ac8ebe2 (patch) | |
| tree | 80ee017efa878dfd5344b44249e6a241f2a7f6e2 /v4.0/src/BIOS/MSBIO2.ASM | |
| parent | Merge pull request #430 from jpbaltazar/typoptbr (diff) | |
| download | ms-dos-main.tar.gz ms-dos-main.tar.xz ms-dos-main.zip | |
Diffstat (limited to 'v4.0/src/BIOS/MSBIO2.ASM')
| -rw-r--r-- | v4.0/src/BIOS/MSBIO2.ASM | 572 |
1 files changed, 572 insertions, 0 deletions
diff --git a/v4.0/src/BIOS/MSBIO2.ASM b/v4.0/src/BIOS/MSBIO2.ASM new file mode 100644 index 0000000..50b25bc --- /dev/null +++ b/v4.0/src/BIOS/MSBIO2.ASM | |||
| @@ -0,0 +1,572 @@ | |||
| 1 | PAGE ,132 ; | ||
| 2 | TITLE MSBIO2 - BIOS | ||
| 3 | |||
| 4 | %OUT ...MSBIO2.ASM | ||
| 5 | |||
| 6 | ;============================================================================== | ||
| 7 | ;REVISION HISTORY: | ||
| 8 | ;AN000 - New for DOS Version 4.00 - J.K. | ||
| 9 | ;AC000 - Changed for DOS Version 4.00 - J.K. | ||
| 10 | ;AN00x - PTM number for DOS Version 4.00 - J.K. | ||
| 11 | ;============================================================================== | ||
| 12 | ;AN001; - P1820 New Message SKL file 10/20/87 J.K. | ||
| 13 | ;AN002; - P5045 New INT 2fh for Get BDS table vector for EMS 06/06/88 J.K. | ||
| 14 | ;============================================================================== | ||
| 15 | |||
| 16 | ROMSEGMENT EQU 0F000H | ||
| 17 | MODELBYTE EQU DS:BYTE PTR [0FFFEH] | ||
| 18 | MODELPCJR EQU 0FDH | ||
| 19 | |||
| 20 | itest=0 | ||
| 21 | |||
| 22 | INCLUDE MSGROUP.INC ;DEFINE CODE SEGMENT | ||
| 23 | INCLUDE MSEQU.INC | ||
| 24 | INCLUDE DEVSYM.INC | ||
| 25 | INCLUDE PUSHPOP.INC | ||
| 26 | INCLUDE MSMACRO.INC | ||
| 27 | |||
| 28 | ASSUME DS:NOTHING,ES:NOTHING | ||
| 29 | |||
| 30 | EXTRN DSK$IN:NEAR | ||
| 31 | EXTRN SETPTRSAV:NEAR | ||
| 32 | EXTRN OUTCHR:NEAR | ||
| 33 | EXTRN SETDRIVE:NEAR | ||
| 34 | EXTRN FLUSH:NEAR | ||
| 35 | EXTRN HARDERR:NEAR | ||
| 36 | EXTRN HARDERR2:NEAR | ||
| 37 | EXTRN MAPERROR:NEAR | ||
| 38 | EXTRN GETBP:NEAR | ||
| 39 | EXTRN CHECKSINGLE:NEAR | ||
| 40 | EXTRN CHECK_TIME_OF_ACCESS:NEAR | ||
| 41 | EXTRN EXIT:NEAR | ||
| 42 | EXTRN HAS1:NEAR | ||
| 43 | EXTRN READ_SECTOR:NEAR | ||
| 44 | EXTRN INT_2F_13:FAR | ||
| 45 | |||
| 46 | EXTRN OLD13:DWORD | ||
| 47 | |||
| 48 | ;DATA | ||
| 49 | EXTRN PTRSAV:DWORD ;IBMBIO1 | ||
| 50 | EXTRN START_BDS:WORD | ||
| 51 | EXTRN FDRIVE1:WORD | ||
| 52 | EXTRN FDRIVE2:WORD | ||
| 53 | EXTRN FDRIVE3:WORD | ||
| 54 | EXTRN FDRIVE4:WORD | ||
| 55 | EXTRN FLAGBITS:WORD | ||
| 56 | EXTRN TIM_DRV:BYTE | ||
| 57 | EXTRN MEDBYT:BYTE | ||
| 58 | EXTRN DRVMAX:BYTE | ||
| 59 | extrn Ext_Boot_Sig:byte ;AN000; ibmbdata | ||
| 60 | extrn SecPerClusInSector:byte ;AN000; ibmbdata | ||
| 61 | extrn Boot_Serial_L:word ;AN000; ibmbdata | ||
| 62 | extrn Boot_Serial_H:word ;AN000; ibmbdata | ||
| 63 | |||
| 64 | PATHSTART 005,DISK | ||
| 65 | EVENB | ||
| 66 | public Model_Byte | ||
| 67 | MODEL_BYTE DB 0FFH ; MODEL BYTE. SET UP AT INIT TIME. | ||
| 68 | ; FF - PC1 | ||
| 69 | ; FE - XT (64/256K PLANAR) | ||
| 70 | ; FD - PC-JR | ||
| 71 | ; FC - PC/AT | ||
| 72 | public Secondary_Model_Byte | ||
| 73 | Secondary_Model_Byte db 0 | ||
| 74 | |||
| 75 | PUBLIC ORIG19 | ||
| 76 | ORIG19 DD ? | ||
| 77 | |||
| 78 | PUBLIC INT19SEM | ||
| 79 | INT19SEM DB 0 ; INDICATE THAT ALL INT 19 | ||
| 80 | ; INITIALIZATION IS COMPLETE | ||
| 81 | |||
| 82 | IRP AA,<02,08,09,0A,0B,0C,0D,0E,70,72,73,74,76,77> | ||
| 83 | public Int19OLD&AA | ||
| 84 | Int19OLD&AA dd -1 ;Orignal hardware int. vectors for INT 19h. | ||
| 85 | ENDM | ||
| 86 | |||
| 87 | EVENB | ||
| 88 | PUBLIC DSKDRVS | ||
| 89 | DSKDRVS DW FDRIVE1 | ||
| 90 | DW FDRIVE2 | ||
| 91 | DW FDRIVE3 | ||
| 92 | DW FDRIVE4 | ||
| 93 | PUBLIC HDSKTAB | ||
| 94 | HDSKTAB DW HDRIVE | ||
| 95 | DW DRIVEX | ||
| 96 | ;* Next area is reseved for mini disk BPB pointers *** J.K. 4/7/86 | ||
| 97 | ;* Don't change this position. Should be addressible from DskDrvs *** J.K. 4/7/86 | ||
| 98 | MINI_DISK_BPB_PTRS DB 40 dup (?) ;J.K. 4/7/86 - memory reserved for Mini disk. | ||
| 99 | |||
| 100 | EVENB | ||
| 101 | PUBLIC INT_2F_NEXT | ||
| 102 | INT_2F_NEXT DD ? | ||
| 103 | |||
| 104 | RET_ADDR DD ? | ||
| 105 | |||
| 106 | PATHEND 005,DISK | ||
| 107 | ; = = = = = = = = = = = = = = = = = = = = | ||
| 108 | |||
| 109 | ; INT19 | ||
| 110 | ; | ||
| 111 | ; WE "HOOK" THE INT 19 VECTOR, BECAUSE CONTRARY TO IBM DOCUMENTATION, | ||
| 112 | ; IT DOES NOT "BOOTSTRAP" THE MACHINE. IT LEAVES MEMORY ALMOST UNTOUCHED. | ||
| 113 | ; SINCE THE BIOS_INIT CODE ASSUMES THAT CERTAIN INTERRUPT VECTORS POINT TO | ||
| 114 | ; THE ROM_BIOS WE MUST "UNHOOK" THEM BEFORE ISSUING THE ACTUAL INT_19. | ||
| 115 | ; CURRENTLY THE ONLY VECTORS THAT NEED TO BE UNHOOKED ARE INT_19, INT_13, | ||
| 116 | ; AND THE HARDWARE INTERRUPTS. | ||
| 117 | ; | ||
| 118 | PUBLIC INT19 | ||
| 119 | INT19 PROC FAR | ||
| 120 | XOR AX,AX | ||
| 121 | MOV DS,AX | ||
| 122 | assume ds:nothing | ||
| 123 | assume es:nothing | ||
| 124 | |||
| 125 | LES DI,OLD13 | ||
| 126 | MOV DS:[13H*4],DI | ||
| 127 | MOV DS:[13H*4+2],ES | ||
| 128 | |||
| 129 | CMP BYTE PTR INT19SEM, 0 | ||
| 130 | JNZ INT19VECS | ||
| 131 | JMP DOINT19 | ||
| 132 | |||
| 133 | ; ON THE PCJR, DON'T REPLACE ANY VECTORS | ||
| 134 | ; MODEL BYTE DEFINITIONS FROM IBMSTACK.ASM | ||
| 135 | MOV AX,ROMSEGMENT | ||
| 136 | MOV DS,AX | ||
| 137 | MOV AL,MODELPCJR | ||
| 138 | |||
| 139 | CMP AL,MODELBYTE | ||
| 140 | JNE INT19VECS | ||
| 141 | JMP DOINT19 | ||
| 142 | |||
| 143 | ;Stacks code has changed these hardware interrupt vectors | ||
| 144 | ;STKINIT in SYSINIT1 will initialzie Int19hOLDxx values. | ||
| 145 | INT19VECS: | ||
| 146 | XOR AX,AX | ||
| 147 | MOV DS,AX | ||
| 148 | |||
| 149 | IRP AA,<02,08,09,0A,0B,0C,0D,0E,70,72,73,74,76,77> | ||
| 150 | |||
| 151 | LES DI,Int19OLD&AA | ||
| 152 | ;SB33103****************************************************************** | ||
| 153 | |||
| 154 | mov ax,es ; | ||
| 155 | cmp ax,-1 ;OPT 0ffffh is unlikely segment | ||
| 156 | je skip_int&AA ;OPT no need to check selector too | ||
| 157 | cmp di,-1 ;OPT 0ffffh is unlikely offset | ||
| 158 | je skip_int&AA | ||
| 159 | |||
| 160 | ;SB33103****************************************************************** | ||
| 161 | MOV DS:[AA&H*4],DI | ||
| 162 | MOV DS:[AA&H*4+2],ES | ||
| 163 | skip_int&AA: | ||
| 164 | ENDM | ||
| 165 | |||
| 166 | DOINT19: | ||
| 167 | LES DI,ORIG19 | ||
| 168 | MOV DS:[19H*4],DI | ||
| 169 | MOV DS:[19H*4+2],ES | ||
| 170 | |||
| 171 | INT 19H | ||
| 172 | INT19 ENDP | ||
| 173 | |||
| 174 | ASSUME DS:CODE | ||
| 175 | PUBLIC DSK$INIT | ||
| 176 | DSK$INIT PROC NEAR | ||
| 177 | PUSH CS | ||
| 178 | POP DS | ||
| 179 | MOV AH,BYTE PTR DRVMAX | ||
| 180 | MOV DI,OFFSET DSKDRVS | ||
| 181 | JMP SETPTRSAV | ||
| 182 | DSK$INIT ENDP | ||
| 183 | |||
| 184 | ; | ||
| 185 | ; INT 2F HANDLER FOR EXTERNAL BLOCK DRIVERS TO COMMUNICATE WITH THE INTERNAL | ||
| 186 | ; BLOCK DRIVER IN IBMDISK. THE MULTIPLEX NUMBER CHOSEN IS 8. THE HANDLER | ||
| 187 | ; SETS UP THE POINTER TO THE REQUEST PACKET IN [PTRSAV] AND THEN JUMPS TO | ||
| 188 | ; DSK$IN, THE ENTRY POINT FOR ALL DISK REQUESTS. | ||
| 189 | ; ON EXIT FROM THIS DRIVER (AT EXIT), WE WILL RETURN TO THE EXTERNAL DRIVER | ||
| 190 | ; THAT ISSUED THIS INT 2F, AND CAN THEN REMOVE THE FLAGS FROM THE STACK. | ||
| 191 | ; THIS SCHEME ALLOWS US TO HAVE A SMALL EXTERNAL DEVICE DRIVER, AND MAKES | ||
| 192 | ; THE MAINTAINANCE OF THE VARIOUS DRIVERS (DRIVER AND IBMBIO) MUCH EASIER, | ||
| 193 | ; SINCE WE ONLY NEED TO MAKE CHANGES IN ONE PLACE (MOST OF THE TIME). | ||
| 194 | ; | ||
| 195 | ; 06/03/88 J.K. When AL=3, return DS:DI -> Start of BDS table. | ||
| 196 | ; (EMS device driver hooks INT 13h to handle 16KB DMA overrun | ||
| 197 | ; problem. BDS table is going to be used to get head/sector | ||
| 198 | ; informations without calling Generic IOCTL Get Device Parm call.) | ||
| 199 | ; | ||
| 200 | ; AL CONTAINS THE INT2F FUNCTION: | ||
| 201 | ; 0 - CHECK FOR INSTALLED HANDLER - RESERVED | ||
| 202 | ; 1 - INSTALL THE BDS INTO THE LINKED LIST | ||
| 203 | ; 2 - DOS REQUEST | ||
| 204 | ; 3 - Get BDS vector ;06/03/88 J.K. | ||
| 205 | ; Return BDS table starting pointer in DS:DI | ||
| 206 | |||
| 207 | MYNUM EQU 8 | ||
| 208 | |||
| 209 | PUBLIC INT2F_DISK | ||
| 210 | INT2F_DISK PROC FAR | ||
| 211 | CMP AH,MYNUM | ||
| 212 | JE MINE | ||
| 213 | JMP CS:[INT_2F_NEXT] ; CHAIN TO NEXT INT 2F HANDLER | ||
| 214 | MINE: | ||
| 215 | CMP AL,0F8H ; IRET ON RESERVED FUNCTIONS | ||
| 216 | JB DO_FUNC | ||
| 217 | IRET | ||
| 218 | DO_FUNC: | ||
| 219 | OR AL,AL ; A GET INSTALLED STATE REQUEST? | ||
| 220 | JNE DISP_FUNC | ||
| 221 | MOV AL,0FFH | ||
| 222 | IRET | ||
| 223 | DISP_FUNC: | ||
| 224 | MESSAGE FTESTINIT,<"INT2F_DISK",CR,LF> | ||
| 225 | CMP AL,1 ; REQUEST FOR INSTALLING BDS? | ||
| 226 | JNE DO_DOS_REQ | ||
| 227 | CALL INSTALL_BDS | ||
| 228 | IRET | ||
| 229 | |||
| 230 | DO_DOS_REQ: | ||
| 231 | ; SET UP POINTER TO REQUEST PACKET | ||
| 232 | cmp al, 3 ;AN002; Get BDS vector? | ||
| 233 | je DO_Get_BDS_Vector ;AN002; | ||
| 234 | MOV WORD PTR CS:[PTRSAV],BX ;othrwise DOS function. | ||
| 235 | MOV WORD PTR CS:[PTRSAV+2],ES | ||
| 236 | JMP DSK$IN | ||
| 237 | |||
| 238 | DO_Get_BDS_Vector: ;AN002; AL=3 | ||
| 239 | push cs ;AN002; | ||
| 240 | pop ds ;AN002; | ||
| 241 | mov di, Start_BDS ;AN002; | ||
| 242 | IRET ;AN002; | ||
| 243 | |||
| 244 | INT2F_DISK ENDP | ||
| 245 | |||
| 246 | ; | ||
| 247 | ; INSTALL_BDS INSTALLS A BDS A LOCATION DS:DI INTO THE CURRENT LINKED LIST OF | ||
| 248 | ; BDS MAINTAINED BY THIS DEVICE DRIVER. IT PLACES THE BDS AT THE END OF THE | ||
| 249 | ; LIST. | ||
| 250 | PUBLIC INSTALL_BDS | ||
| 251 | INSTALL_BDS PROC NEAR | ||
| 252 | MESSAGE FTESTINIT,<"INSTALL BDS",CR,LF> | ||
| 253 | ; DS:DI POINT TO BDS TO BE INSTALLED | ||
| 254 | LES SI,DWORD PTR CS:[START_BDS] ; START AT BEGINNING OF LIST | ||
| 255 | PUSH ES ; SAVE POINTER TO CURRENT BDS | ||
| 256 | PUSH SI | ||
| 257 | ; ES:SI NOW POINT TO BDS IN LINKED LIST | ||
| 258 | LOOP_NEXT_BDS: | ||
| 259 | CMP SI,-1 ; GOT TO END OF LINKED LIST? | ||
| 260 | JZ INSTALL_RET | ||
| 261 | ; IF WE HAVE SEVERAL LOGICAL DRIVES USING THE SAME PHYSICAL DRIVE, WE MUST | ||
| 262 | ; SET THE I_AM_MULT FLAG IN EACH OF THE APPROPRIATE BDSS. | ||
| 263 | MOV AL,BYTE PTR DS:[DI].DRIVENUM | ||
| 264 | CMP BYTE PTR ES:[SI].DRIVENUM,AL | ||
| 265 | JNZ NEXT_BDS | ||
| 266 | MESSAGE FTESTINIT,<"LOGICAL DRIVES",CR,LF> | ||
| 267 | XOR BX,BX | ||
| 268 | MOV BL,FI_AM_MULT | ||
| 269 | OR WORD PTR DS:[DI].FLAGS,BX ; SET FLAGS IN BOTH BDSS CONCERNED | ||
| 270 | OR WORD PTR ES:[SI].FLAGS,BX | ||
| 271 | MOV BL,FI_OWN_PHYSICAL | ||
| 272 | XOR BX,-1 | ||
| 273 | AND WORD PTR DS:[DI].FLAGS,BX ; RESET THAT FLAG FOR 'NEW' BDS | ||
| 274 | ; WE MUST ALSO SET THE FCHANGELINE BIT CORRECTLY. | ||
| 275 | MOV BX,WORD PTR ES:[SI].FLAGS ; DETERMINE IF CHANGELINE AVAILABLE | ||
| 276 | AND BL,FCHANGELINE | ||
| 277 | XOR BH,BH | ||
| 278 | OR WORD PTR DS:[DI].FLAGS,BX | ||
| 279 | |||
| 280 | NEXT_BDS: | ||
| 281 | ; BEFORE MOVING TO NEXT BDS, PRESERVE POINTER TO CURRENT ONE. THIS IS NEEDED AT | ||
| 282 | ; THE END WHEN THE NEW BDS IS LINKED INTO THE LIST. | ||
| 283 | POP BX ; DISCARD PREVIOUS POINTER TO BDS | ||
| 284 | POP BX | ||
| 285 | PUSH ES | ||
| 286 | PUSH SI | ||
| 287 | MOV BX,WORD PTR ES:[SI].LINK + 2 | ||
| 288 | MOV SI,WORD PTR ES:[SI].LINK | ||
| 289 | MOV ES,BX | ||
| 290 | JMP SHORT LOOP_NEXT_BDS | ||
| 291 | |||
| 292 | INSTALL_RET: | ||
| 293 | POP SI ; RETRIEVE POINTER TO LAST BDS | ||
| 294 | POP ES ; IN LINKED LIST. | ||
| 295 | MOV AX,DS | ||
| 296 | MOV WORD PTR ES:[SI].LINK+2,AX ; INSTALL BDS | ||
| 297 | MOV WORD PTR ES:[SI].LINK,DI | ||
| 298 | MOV WORD PTR DS:[DI].LINK,-1 ; SET NEXT POINTER TO NULL | ||
| 299 | RET | ||
| 300 | INSTALL_BDS ENDP | ||
| 301 | |||
| 302 | ; | ||
| 303 | ; RE_INIT INSTALLS THE INT 2F VECTOR THAT WILL HANDLE COMMUNICATION BETWEEN | ||
| 304 | ; EXTERNAL BLOCK DRIVERS AND THE INTERNAL DRIVER. IT ALSO INSTALLS THE | ||
| 305 | ; RESET_INT_13 INTERFACE. IT IS CALLED BY SYSYINIT | ||
| 306 | ; | ||
| 307 | PUBLIC RE_INIT | ||
| 308 | RE_INIT PROC FAR | ||
| 309 | MESSAGE FTESTINIT,<"REINIT",CR,LF> | ||
| 310 | PUSH AX | ||
| 311 | PUSH DS | ||
| 312 | PUSH DI | ||
| 313 | XOR DI,DI | ||
| 314 | MOV DS,DI | ||
| 315 | MOV DI,2FH*4 ; POINT IT TO INT 2F VECTOR | ||
| 316 | MOV AX,WORD PTR DS:[DI] | ||
| 317 | MOV WORD PTR CS:[INT_2F_NEXT],AX | ||
| 318 | MOV AX,WORD PTR DS:[DI+2] ; PRESERVE OLD INT 2F VECTOR | ||
| 319 | MOV WORD PTR CS:[INT_2F_NEXT+2],AX | ||
| 320 | |||
| 321 | ; INSTALL THE RESET_INT_13 | ||
| 322 | ; INTERFACE | ||
| 323 | |||
| 324 | ; | ||
| 325 | ; THE FOLLOWING TWO LINES ARE NOT NEEDED ANYMORE BECAUSE THE LINK HAS BEEN | ||
| 326 | ; HARD-WIRED INTO THE CODE AT NEXT2F_13. - RAJEN. | ||
| 327 | ;------------------------------------------------------------------------------ | ||
| 328 | ; MOV WORD PTR CS:[NEXT2F_13],OFFSET INT2F_DISK ; PRESERVE INT2F_DISK POINTER | ||
| 329 | ; MOV WORD PTR CS:[NEXT2F_13+2],CS | ||
| 330 | ;------------------------------------------------------------------------------ | ||
| 331 | |||
| 332 | CLI | ||
| 333 | MOV WORD PTR DS:[DI],OFFSET INT_2F_13 ; INSTALL NEW VECTORS | ||
| 334 | MOV WORD PTR DS:[DI+2],CS | ||
| 335 | STI | ||
| 336 | POP DI | ||
| 337 | POP DS | ||
| 338 | POP AX | ||
| 339 | |||
| 340 | RET | ||
| 341 | |||
| 342 | RE_INIT ENDP | ||
| 343 | |||
| 344 | ;------------------------------------------------- | ||
| 345 | ; | ||
| 346 | ; ASK TO SWAP THE DISK IN DRIVE A: | ||
| 347 | ; | ||
| 348 | PUBLIC SWPDSK | ||
| 349 | SWPDSK PROC NEAR | ||
| 350 | MOV AL,BYTE PTR DS:[DI].DRIVELET ; GET THE DRIVE LETTER | ||
| 351 | ;USING A DIFFERENT DRIVE IN A ONE DRIVE SYSTEM SO REQUEST THE USER CHANGE DISKS | ||
| 352 | ADD AL,"A" | ||
| 353 | MOV CS:DRVLET,AL | ||
| 354 | PUSH DS ; PRESERVE SEGMENT REGISTER | ||
| 355 | PUSH CS | ||
| 356 | POP DS | ||
| 357 | MOV SI,OFFSET SNGMSG ; DS:SI -> MESSAGE | ||
| 358 | PUSH BX | ||
| 359 | CALL WRMSG ;PRINT DISK CHANGE MESSAGE | ||
| 360 | CALL FLUSH | ||
| 361 | ;SB33003*************************************************************** | ||
| 362 | xor AH, AH ; set command to read character;SB | ||
| 363 | int 16h ; call rom-bios ;SB | ||
| 364 | ;SB33003*************************************************************** | ||
| 365 | POP BX | ||
| 366 | POP DS ; RESTORE SEGMENT REGISTER | ||
| 367 | WRMRET: | ||
| 368 | RET | ||
| 369 | SWPDSK ENDP | ||
| 370 | |||
| 371 | ;---------------------------------------------- | ||
| 372 | ; | ||
| 373 | ; WRITE OUT MESSAGE POINTED TO BY [SI] | ||
| 374 | ; | ||
| 375 | PUBLIC WRMSG | ||
| 376 | WRMSG PROC NEAR | ||
| 377 | LODSB ;GET THE NEXT CHARACTER OF THE MESSAGE | ||
| 378 | OR AL,AL ;SEE IF END OF MESSAGE | ||
| 379 | JZ WRMRET | ||
| 380 | ; INT CHROUT | ||
| 381 | PUSHF | ||
| 382 | PUSH CS | ||
| 383 | CALL OUTCHR | ||
| 384 | JMP SHORT WRMSG | ||
| 385 | WRMSG ENDP | ||
| 386 | |||
| 387 | ; INCLUDE BIOMES.INC | ||
| 388 | include MSBIO.CL2 | ||
| 389 | |||
| 390 | ; | ||
| 391 | ; END OF SUPPORT FOR MULTIPLE FLOPPIES WITH NO LOGICAL DRIVES | ||
| 392 | ; THIS IS NOT 'SPECIAL' ANY MORE BECAUSE WE NOW HAVE THE CAPABILITY OF | ||
| 393 | ; DEFINING LOGICAL DRIVES IN CONFIG.SYS. WE THEREFORE KEEP THE CODE FOR | ||
| 394 | ; SWAPPING RESIDENT ALL THE TIME. | ||
| 395 | ; | ||
| 396 | |||
| 397 | ;J.K. 10/1/86 ******************************************************* | ||
| 398 | ;Variables for Dynamic Relocatable modules | ||
| 399 | ;These should be stay resident. | ||
| 400 | |||
| 401 | public INT6C_RET_ADDR | ||
| 402 | INT6C_RET_ADDR DD ? ; return address from INT 6C for P12 machine | ||
| 403 | |||
| 404 | PATHSTART 001,CLK | ||
| 405 | ; | ||
| 406 | ; DATA STRUCTURES FOR REAL-TIME DATE AND TIME | ||
| 407 | ; | ||
| 408 | public BIN_DATE_TIME | ||
| 409 | public MONTH_TABLE | ||
| 410 | public DAYCNT2 | ||
| 411 | public FEB29 | ||
| 412 | BIN_DATE_TIME: | ||
| 413 | DB 0 ; CENTURY (19 OR 20) OR HOURS (0-23) | ||
| 414 | DB 0 ; YEAR IN CENTURY (0...99) OR MINUTES (0-59) | ||
| 415 | DB 0 ; MONTH IN YEAR (1...12) OR SECONDS (0-59) | ||
| 416 | DB 0 ; DAY IN MONTH (1...31) | ||
| 417 | MONTH_TABLE: ; | ||
| 418 | DW 0 ;MJB002 JANUARY | ||
| 419 | DW 31 ;MJB002 FEBRUARY | ||
| 420 | DW 59 ;MJB002 | ||
| 421 | DW 90 ;MJB002 | ||
| 422 | DW 120 ;MJB002 | ||
| 423 | DW 151 ;MJB002 | ||
| 424 | DW 181 ;MJB002 | ||
| 425 | DW 212 ;MJB002 | ||
| 426 | DW 243 ;MJB002 | ||
| 427 | DW 273 ;MJB002 | ||
| 428 | DW 304 ;MJB002 | ||
| 429 | DW 334 ;MJB002 DECEMBER | ||
| 430 | DAYCNT2 DW 0000 ;MJB002 TEMP FOR COUNT OF DAYS SINCE 1-1-80 | ||
| 431 | FEB29 DB 0 ;MJB002 FEBRUARY 29 IN A LEAP YEAR FLAG | ||
| 432 | PATHEND 001,CLK | ||
| 433 | |||
| 434 | ;******************************************************************** | ||
| 435 | ; | ||
| 436 | |||
| 437 | PUBLIC ENDFLOPPY | ||
| 438 | ENDFLOPPY LABEL BYTE | ||
| 439 | ; | ||
| 440 | ; END OF CODE FOR VIRTUAL FLOPPY DRIVES | ||
| 441 | ; | ||
| 442 | PUBLIC ENDSWAP | ||
| 443 | ENDSWAP LABEL BYTE | ||
| 444 | |||
| 445 | PATHSTART 004,BIO | ||
| 446 | |||
| 447 | PUBLIC HNUM | ||
| 448 | HNUM DB 0 ;NUMBER OF HARDFILES | ||
| 449 | PUBLIC HARDDRV | ||
| 450 | HARDDRV DB 80H ;PHYSICAL DRIVE NUMBER OF FIRST HARDFILE | ||
| 451 | ;********************************************************************** | ||
| 452 | ; "HDRIVE" IS A HARD DISK WITH 512 BYTE SECTORS | ||
| 453 | ;********************************************************************* | ||
| 454 | EVENB | ||
| 455 | PUBLIC BDSH | ||
| 456 | BDSH DW -1 ;LINK TO NEXT STRUCTURE | ||
| 457 | DW CODE | ||
| 458 | DB 80 ;INT 13 DRIVE NUMBER | ||
| 459 | DB "C" ;LOGICAL DRIVE LETTER | ||
| 460 | PUBLIC HDRIVE | ||
| 461 | HDRIVE: | ||
| 462 | DW 512 | ||
| 463 | DB 1 ;SECTORS/ALLOCATION UNIT | ||
| 464 | DW 1 ;RESERVED SECTORS FOR DOS | ||
| 465 | DB 2 ;NO. OF ALLOCATION TABLES | ||
| 466 | DW 16 ;NUMBER OF DIRECTORY ENTRIES | ||
| 467 | DW 0000 ;NUMBER OF SECTORS (AT 512 BYTES EACH) | ||
| 468 | DB 11111000B ;MEDIA DESCRIPTOR | ||
| 469 | DW 1 ;NUMBER OF FAT SECTORS | ||
| 470 | DW 00 ;SECTOR LIMIT | ||
| 471 | DW 00 ;HEAD LIMIT | ||
| 472 | DW 00 ;HIDDEN SECTOR COUNT(low) | ||
| 473 | dw 00 ;AN000; Hidden Sector (high) | ||
| 474 | dw 00 ;AN000; Number of Sectors (low) | ||
| 475 | dw 00 ;AN000; Number of Sectors (high) | ||
| 476 | DB 0 ; TRUE => BIGFAT | ||
| 477 | OPCNTH DW 0 ;OPEN REF. COUNT | ||
| 478 | DB 3 ;FORM FACTOR | ||
| 479 | FLAGSH DW 0020H ;VARIOUS FLAGS | ||
| 480 | ; DB 9 DUP (0) ;RESERVED FOR FUTURE USE | ||
| 481 | DW 40 ; NUMBER OF CYLINDERS | ||
| 482 | RECBPBH DB 31 DUP (?) ; RECOMMENDED BPB FOR DRIVE | ||
| 483 | TRACKH DB -1 ;LAST TRACK ACCESSED ON THIS DRIVE | ||
| 484 | TIM_LOH DW -1 ;KEEP THESE TWO CONTIGUOUS (?) | ||
| 485 | TIM_HIH DW -1 | ||
| 486 | VOLIDH DB "NO NAME ",0 ;AN000; VOLUME ID FOR THIS DISK | ||
| 487 | VolSerH dd 0 ;AN000; Current volume serial number from Boot record | ||
| 488 | SysIDH db "FAT12 " ,0 ;AN000; Current file system id from Boot record | ||
| 489 | |||
| 490 | ; | ||
| 491 | ; END OF SINGLE HARD DISK SECTION | ||
| 492 | ; | ||
| 493 | PUBLIC ENDONEHARD | ||
| 494 | ENDONEHARD LABEL BYTE | ||
| 495 | ;********************************************************************** | ||
| 496 | ; "DRIVEX " IS AN EXTRA TYPE OF DRIVE USUALLY RESERVED FOR AN | ||
| 497 | ; ADDITIONAL HARD FILE | ||
| 498 | ;********************************************************************* | ||
| 499 | EVENB | ||
| 500 | PUBLIC BDSX | ||
| 501 | BDSX DW -1 ;LINK TO NEXT STRUCTURE | ||
| 502 | DW CODE | ||
| 503 | DB 81 ;INT 13 DRIVE NUMBER | ||
| 504 | DB "D" ;LOGICAL DRIVE LETTER | ||
| 505 | PUBLIC DRIVEX | ||
| 506 | DRIVEX: | ||
| 507 | DW 512 | ||
| 508 | DB 00 ;SECTORS/ALLOCATION UNIT | ||
| 509 | DW 1 ;RESERVED SECTORS FOR DOS | ||
| 510 | DB 2 ;NO. OF ALLOCATION TABLES | ||
| 511 | DW 0000 ;NUMBER OF DIRECTORY ENTRIES | ||
| 512 | DW 0000 ;NUMBER OF SECTORS (AT 512 BYTES EACH) | ||
| 513 | DB 11111000B ;MEDIA DESCRIPTOR | ||
| 514 | DW 0000 ;NUMBER OF FAT SECTORS | ||
| 515 | DW 00 ;SECTOR LIMIT | ||
| 516 | DW 00 ;HEAD LIMIT | ||
| 517 | DW 00 ;HIDDEN SECTOR COUNT (low) | ||
| 518 | dw 00 ;AN000; Hidden Sector (high) | ||
| 519 | dw 00 ;AN000; Number of Sectors (low) | ||
| 520 | dw 00 ;AN000; Number of Sectors (high) | ||
| 521 | DB 0 ; TRUE => BIGFAT | ||
| 522 | OPCNTD DW 0 ;OPEN REF. COUNT | ||
| 523 | DB 3 ;FORM FACTOR | ||
| 524 | FLAGSD DW 0020H ;VARIOUS FLAGS | ||
| 525 | ; DB 9 DUP (0) ;RESERVED FOR FUTURE USE | ||
| 526 | DW 40 ; NUMBER OF CYLINDERS | ||
| 527 | RECBPBD DB 31 DUP (?) ; RECOMMENDED BPB FOR DRIVE | ||
| 528 | TRACKD DB -1 ;LAST TRACK ACCESSED ON THIS DRIVE | ||
| 529 | TIM_LOD DW -1 ;KEEP THESE TWO CONTIGUOUS (?) | ||
| 530 | TIM_HID DW -1 | ||
| 531 | VOLIDD DB "NO NAME ",0 ;AN000; VOLUME ID FOR THIS DISK | ||
| 532 | VolSerD dd 0 ;AN000; Current volume serial number from Boot record | ||
| 533 | SysIDD db "FAT12 " ,0 ;AN000; Current file system id from Boot record | ||
| 534 | |||
| 535 | ; | ||
| 536 | ; END OF SECTION FOR TWO HARD DISKS | ||
| 537 | PUBLIC ENDTWOHARD | ||
| 538 | ENDTWOHARD LABEL BYTE | ||
| 539 | |||
| 540 | PATHEND 004,BIO | ||
| 541 | |||
| 542 | PUBLIC TWOHARD | ||
| 543 | TWOHARD LABEL BYTE | ||
| 544 | PAGE | ||
| 545 | INCLUDE MS96TPI.INC | ||
| 546 | |||
| 547 | ;********************************************************************* | ||
| 548 | ;Memory allocation for BDSM table. - J.K. 2/21/86 | ||
| 549 | ;********************************************************************* | ||
| 550 | PUBLIC BDSMs | ||
| 551 | BDSMs BDSM_type Max_mini_dsk_num dup (<>) ;currently max. 23 | ||
| 552 | |||
| 553 | ;** End_of_BDSM defined in IBMINIT.ASM will be used to set the appropriate | ||
| 554 | ;** ending address of BDSM table. | ||
| 555 | |||
| 556 | ; | ||
| 557 | ;;3.3 BUG FIX -SP ------------------------------ | ||
| 558 | ;;Migrated into 4.00 -MRW | ||
| 559 | ;Paragraph buffer between the BDSMs and MSHARD | ||
| 560 | ; | ||
| 561 | ;The relocation code for MSHARD needs this. this cannot be used for | ||
| 562 | ;anything. nothing can come before this or after this.....IMPORTANT!!!! | ||
| 563 | ;don't get too smart and using this buffer for anything!!!!!! | ||
| 564 | ; | ||
| 565 | db 16 dup(0) | ||
| 566 | ; | ||
| 567 | ;end of bug fix buffer | ||
| 568 | ;; | ||
| 569 | ;;3.3 BUG FIX -SP------------------------------ | ||
| 570 | |||
| 571 | CODE ENDS | ||
| 572 | END | ||