1 ORG 00H 2 3 ; Version 0.5 alpha 4 ; This code tested under MSDOS 6.22 only. 5 ; This file intended to be installed sector 6 6 ; My installation done using DISKEDIT from NU8. 7 8 9 ; Ports for normal IDE/ATA are 10 ; 0x1F0 Primary Irq 14 11 ; 0x170 Secondary Irq 15 12 ; 0x1E8 Tertiary Irq 11 13 ; 0x168 Quaternary Irq 10 14 15 ; Secondary status register at Base+0x206 not used 16 ; because register not present on many ISA add-in 17 ; cards and sound cards. 18 19 ; For the meaning of the remainder of the ID block 20 ; sent by devices in responce to the command please goto 21 ; http://www.t13.org and look up ATAPI4 or later. 22 23 BASEOFPORT EQU 0168H 24 ;BASEOFPORT EQU 0170H 25 26 ; Check 0x168 for whether there is an HD present. 27 28 00000000 E8380F CALL SAVEREGS 29 00000003 E8FE0B CALL LF 30 00000006 1E PUSH DS 31 00000007 31C0 XOR AX,AX 32 00000009 8ED8 MOV DS,AX 33 0000000B A14E00 MOV AX,[04EH] 34 0000000E 2E3B06[2410] CMP AX,[CS:CS_IN] 35 00000013 750D JNE RUNONE 36 37 00000015 B84000 MOV AX,040H 38 00000018 8ED8 MOV DS,AX 39 0000001A A07500 MOV AL,[075H] 40 0000001D FEC8 DEC AL 41 0000001F A27500 MOV [075H],AL 42 43 00000022 2E8B16[FE0F] RUNONE MOV DX,[CS:DRIVEHEAD] 44 00000027 EC IN AL,DX 45 00000028 24EF AND AL,0EFH 46 0000002A EE OUT DX,AL 47 0000002B E8930C CALL DELAY 48 0000002E EC IN AL,DX 49 0000002F 3CFF CMP AL,0FFH 50 00000031 7503 JNE TESTHERE 51 00000033 E9AD00 JMP NOTHERE 52 00000036 B0A5 TESTHERE MOV AL,0A5H 53 00000038 2E8B16[F00F] MOV DX,[CS:SECTORCOUNT] 54 0000003D EE OUT DX,AL 55 0000003E EC IN AL,DX 56 0000003F 3CFF CMP AL,0FFH 57 00000041 7503 JNE GOID 58 00000043 E99D00 JMP NOTHERE 59 60 00000046 E8D009 GOID CALL IDDRIVE 61 00000049 3C00 CMP AL,00H 62 0000004B 745B JE NODRVS 63 64 0000004D 1E PUSH DS 65 0000004E 31C0 XOR AX,AX 66 00000050 8ED8 MOV DS,AX 67 00000052 A14C00 MOV AX,[04CH] 68 00000055 8B164E00 MOV DX,[04EH] 69 00000059 2EA3[E101] MOV [CS:OFS13],AX 70 0000005D 2E8916[E301] MOV [CS:SEG13],DX 71 72 00000062 B8[F100] MOV AX,L13 73 00000065 0E PUSH CS 74 00000066 5A POP DX 75 76 00000067 A34C00 MOV [04CH],AX 77 0000006A 89164E00 MOV [04EH],DX 78 79 0000006E 52 PUSH DX 80 0000006F E8920B CALL LF 81 00000072 BA[3010] MOV DX,OLD13 82 00000075 E8660B CALL PRN_DX 83 00000078 2E8B16[E301] MOV DX,[CS:SEG13] 84 0000007D 2E8916[170C] MOV [CS:PRNWORD],DX 85 00000082 E8D40B CALL PRN_WORD 86 00000085 E87C0B CALL LF 87 00000088 E8FA0B CALL PRN_SEG 88 0000008B E81C0C CALL PRN_FN 89 0000008E BA[CB00] MOV DX,MYMODIN 90 00000091 E84A0B CALL PRN_DX 91 00000094 5A POP DX 92 ;FIRST THE HD COUNT 40:75 NEEDS TO INC'D THEN ATTACH OUR INT 13 HANDLE R 93 00000095 B84000 MOV AX,040H 94 00000098 8ED8 MOV DS,AX 95 0000009A A07500 MOV AL,[075H] 96 0000009D 0C80 OR AL,080H 97 0000009F 2EA2[E50F] MOV [CS:OURDRIVE],AL 98 000000A3 FE067500 INC BYTE [075H] 99 000000A7 1F POP DS 100 101 ; THIS IS WHERE THE REAL PARTITION SECTOR GETS LOADED AND JUMPED TO 102 103 000000A8 E8590B NODRVS CALL LF 104 000000AB 31C0 XOR AX,AX 105 000000AD 8EC0 MOV ES,AX 106 000000AF BB007C MOV BX,07C00H 107 000000B2 B280 MOV DL,80H 108 000000B4 B600 MOV DH,00H 109 000000B6 B102 MOV CL,02H 110 000000B8 B500 MOV CH,00H 111 000000BA B001 MOV AL,01H 112 000000BC B402 MOV AH,02H 113 000000BE CD13 INT 013H 114 115 000000C0 E8DC0E CALL RTNREGS 116 117 000000C3 EA DB 0EAH 118 000000C4 007C DW 07C00H 119 000000C6 0000 DW 00H 120 121 000000C8 E9F70A JMP QUIT 122 123 000000CB 424F2042494F53204D- MYMODIN DB 'BO BIOS MOD INSTALLED',0DH,0AH,'$' 124 000000D4 4F4420494E5354414C- 125 000000DD 4C45440D0A24 126 127 000000E3 BA[B110] NOTHERE MOV DX,NTHR 128 000000E6 E8F50A CALL PRN_DX 129 000000E9 E9BCFF JMP NODRVS 130 ; LOCAL INT 13 WORK BEGINS HERE 131 132 000000EC 00 WEBUSY DB 00H 133 000000ED 00 OLDMS DB 00H 134 000000EE 00 THISFUNC DB 00H 135 000000EF 0000 THISAX DW 00H 136 137 000000F1 2E3A16[E50F] L13 CMP DL,[CS:OURDRIVE] 138 000000F6 7403 JE ISOURS 139 000000F8 E9E400 JMP NOTOURS 140 000000FB FA ISOURS CLI 141 000000FC 2E8826[EE00] MOV [CS:THISFUNC],AH 142 00000101 2EA3[EF00] MOV [CS:THISAX],AX 143 00000105 E8330E CALL SAVEREGS 144 00000108 50 PUSH AX 145 00000109 B88116 MOV AX,01681H 146 0000010C CD2F INT 02FH 147 0000010E 58 POP AX 148 0000010F 50 PUSH AX 149 00000110 53 PUSH BX 150 00000111 57 PUSH DI 151 00000112 88E3 MOV BL,AH 152 00000114 30FF XOR BH,BH 153 00000116 BF[E310] MOV DI,FUNCBUF 154 00000119 2E8A01 MOV AL,[CS:BX+DI] 155 0000011C FEC0 INC_AL INC AL 156 0000011E 3C00 CMP AL,00H 157 00000120 2E8801 MOV [CS:BX+DI],AL 158 00000123 3C00 CMP AL,00H 159 00000125 7503 JNE BUSYLOOP 160 00000127 E9F2FF JMP INC_AL 161 0000012A 2EA0[EC00] BUSYLOOP MOV AL,[CS:WEBUSY] 162 0000012E 3C00 CMP AL,00H 163 00000130 7423 JE NOTBUSY 164 165 00000132 52 PUSH DX 166 00000133 BA[4510] MOV DX,DRVBSY 167 00000136 E8CB0A CALL LF 168 00000139 E8A20A CALL PRN_DX 169 0000013C E8820B CALL DELAY 170 0000013F 5A POP DX 171 00000140 50 PUSH AX 172 00000141 31C0 XOR AX,AX 173 00000143 FEC4 INC AH 174 00000145 CD16 INT 016H 175 00000147 7409 JZ NOKEY 176 00000149 3C1B CMP AL,01BH 177 0000014B 7505 JNE NOKEY 178 0000014D 2EFE0E[EC00] DEC BYTE [CS:WEBUSY] 179 180 00000152 E9D5FF NOKEY JMP BUSYLOOP 181 182 00000155 FEC0 NOTBUSY INC AL 183 00000157 2EA2[EC00] MOV [CS:WEBUSY],AL 184 0000015B 5F POP DI 185 0000015C 5B POP BX 186 0000015D 58 POP AX 187 188 0000015E 50 PUSH AX 189 0000015F 52 PUSH DX 190 00000160 2E8B16[FE0F] MOV DX,[CS:DRIVEHEAD] 191 00000165 EC IN AL,DX 192 00000166 2EA2[ED00] MOV [CS:OLDMS],AL 193 194 0000016A 5A L_UNDER80 POP DX 195 0000016B 58 POP AX 196 197 0000016C 80FC00 CMP AH,00H 198 0000016F 7477 JE L_1300 199 00000171 80FC01 CMP AH,01H 200 00000174 7475 JE L_1301 201 00000176 80FC02 CMP AH,02H 202 00000179 7473 JE L_1302 203 0000017B 80FC03 CMP AH,03H 204 0000017E 7471 JE L_1303 205 00000180 80FC04 CMP AH,04H 206 00000183 746F JE L_1304 207 00000185 80FC08 CMP AH,08H 208 00000188 746D JE L_1308 209 0000018A 80FC09 CMP AH,09H 210 0000018D 746B JE L_1309 211 0000018F 80FC0A CMP AH,0AH 212 00000192 7469 JE L_130A 213 00000194 80FC0B CMP AH,0BH 214 00000197 7467 JE L_130B 215 00000199 80FC0C CMP AH,0CH 216 0000019C 7465 JE L_130C 217 0000019E 80FC0D CMP AH,0DH 218 000001A1 7445 JE L_1300 219 000001A3 80FC10 CMP AH,010H 220 000001A6 7440 JE L_1300 221 000001A8 80FC15 CMP AH,015H 222 000001AB 7459 JE L_1315 223 000001AD 80FC16 CMP AH,016H 224 000001B0 7436 JE L_1300 225 226 000001B2 80FC25 CMP AH,025H 227 000001B5 7452 JE L_1325 228 229 000001B7 80FC41 CMP AH,041H 230 000001BA 7450 JE L_1341 231 000001BC 80FC42 CMP AH,042H 232 000001BF 744E JE L_1342 233 000001C1 80FC43 CMP AH,043H 234 000001C4 744C JE L_1343 235 000001C6 80FC44 CMP AH,044H 236 000001C9 744A JE L_1344 237 000001CB 80FC47 CMP AH,047H 238 000001CE 7448 JE L_1347 239 000001D0 80FC48 CMP AH,048H 240 000001D3 7446 JE L_1348 241 000001D5 80FCFF CMP AH,0FFH 242 000001D8 7444 JE L_13FF 243 244 000001DA B401 MOV AH,01H 245 000001DC E94200 JMP INTDONE 246 247 248 000001DF 90 NOTOURS NOP 249 250 000001E0 EA DB 0EAH 251 000001E1 0000 OFS13: DW 00H 252 000001E3 0000 SEG13: DW 00H 253 254 000001E5 E9DA09 JMP QUIT 255 256 000001E8 E9B100 L_1300 JMP L1300 257 258 000001EB E9B100 L_1301 JMP L1301 259 260 000001EE E9E200 L_1302 JMP L1302 261 262 000001F1 E99C01 L_1303 JMP L1303 263 264 000001F4 E93802 L_1304 JMP L1304 265 266 000001F7 E96A02 L_1308 JMP L1308 267 268 000001FA E9DB02 L_1309 JMP L1309 269 270 000001FD E90403 L_130A JMP L130A 271 272 00000200 E9B903 L_130B JMP L130B 273 274 00000203 E99504 L_130C JMP L130C 275 276 00000206 E9B604 L_1315 JMP L1315 277 278 00000209 E90505 L_1325 JMP L1325 279 280 0000020C E92805 L_1341 JMP L1341 281 282 0000020F E9B600 L_1342 JMP L1342 283 284 00000212 E97501 L_1343 JMP L1343 285 286 00000215 E91102 L_1344 JMP L1344 287 288 00000218 E97A04 L_1347 JMP L1347 289 290 0000021B E93805 L_1348 JMP L1348 291 292 0000021E E9A605 L_13FF JMP L13FF 293 294 295 00000221 2E8826[1210] INTDONE MOV [CS:AH_IN],AH 296 00000226 2E8B16[FE0F] MOV DX,[CS:DRIVEHEAD] 297 0000022B 2EA0[ED00] MOV AL,[CS:OLDMS] 298 0000022F EE OUT DX,AL 299 00000230 E88E0A CALL DELAY 300 00000233 E8580B CALL BSY0 301 00000236 EE OUT DX,AL 302 00000237 E8870A CALL DELAY 303 0000023A E8510B CALL BSY0 304 0000023D 2EA0[EC00] MOV AL,[CS:WEBUSY] 305 00000241 FEC8 DEC AL 306 00000243 2EA2[EC00] MOV [CS:WEBUSY],AL 307 00000247 F8 CLC 308 00000248 2E803E[1210]00 CMP BYTE [CS:AH_IN],00H 309 0000024E 7501 JNE INTDONEREGS 310 00000250 F9 STC 311 00000251 50 INTDONEREGS PUSH AX 312 00000252 B88216 MOV AX,01682H 313 00000255 CD2F INT 02FH 314 00000257 58 POP AX 315 00000258 E8440D CALL RTNREGS 316 0000025B F8 CLC 317 0000025C 2E803E[EE00]41 CMP BYTE [CS:THISFUNC],041H 318 00000262 7406 JE NOERREXIT 319 00000264 80FC00 CMP AH,00H 320 00000267 7401 JE NOERREXIT 321 00000269 F9 STC 322 0000026A FB NOERREXIT STI 323 0000026B 9C PUSHF 324 0000026C 2EA3[9402] MOV [CS:TEMPAX],AX 325 00000270 58 POP AX 326 00000271 2EA3[9A02] MOV [CS:TEMPFLG],AX 327 00000275 58 POP AX 328 00000276 2EA3[9602] MOV [CS:TEMPOFS],AX 329 0000027A 58 POP AX 330 0000027B 2EA3[9802] MOV [CS:TEMPSEG],AX 331 0000027F 58 POP AX 332 00000280 2EA1[9A02] MOV AX,[CS:TEMPFLG] 333 00000284 50 PUSH AX 334 00000285 2EA1[9802] MOV AX,[CS:TEMPSEG] 335 00000289 50 PUSH AX 336 0000028A 2EA1[9602] MOV AX,[CS:TEMPOFS] 337 0000028E 50 PUSH AX 338 0000028F 2EA1[9402] MOV AX,[CS:TEMPAX] 339 00000293 CF IRET 340 341 00000294 0000 TEMPAX: DW 00H 342 00000296 0000 TEMPOFS: DW 00H 343 00000298 0000 TEMPSEG: DW 00H 344 0000029A 0000 TEMPFLG: DW 00H 345 346 347 L1300 ; Reset Hard Disk 348 0000029C E9B403 JMP L130D 349 350 L1301 ; Drive Status 351 0000029F F8 CLC 352 000002A0 2E8A26[E40F] MOV AH,[CS:ERRORBYTE] 353 000002A5 E979FF JMP INTDONE 354 355 000002A8 0000 WAITCOUNT: DW 00H 356 357 000002AA 5245414420434F4D4D- L1302CMDERR: DB 'READ COMMAND TIMEOUT ERROR',0DH,0AH,'$' 358 000002B3 414E442054494D454F- 359 000002BC 5554204552524F520D- 360 000002C5 0A24 361 362 000002C7 00 L1302ERR: DB 00H 363 364 L1342 ; Extended read 365 366 000002C8 E87A06 CALL PARSEPACKET 367 000002CB 7203 JC L1342ERRDONE 368 000002CD E90600 JMP L1302CMD 369 000002D0 E98900 L1342ERRDONE JMP L1302ERRDONE 370 371 ; MAYBE MAKE A GENERIC READ CALLABLE BLOCK 372 373 374 L1302 ; Read Sectors 375 000002D3 E81F05 CALL RWSETUP 376 000002D6 2E803E[EE00]42 L1302CMD CMP BYTE [CS:THISFUNC],042H 377 000002DC 7501 JNE L1302GO 378 000002DE 90 NOP 379 ; MOV AX,[CS:THISAX] 380 ; MOV [CS:PRNWORD],AX 381 ; CALL LF 382 ; CALL LF 383 ; CALL LF 384 ; CALL PRN_WORD 385 ; CALL SPC 386 ; CALL PRN_WORD 387 ; CALL LF 388 ; CALL LF 389 ; CALL LF 390 ; MOV AH,0 391 ; INT 016H 392 393 000002DF 2EC606[C702]00 L1302GO MOV BYTE [CS:L1302ERR],00H 394 000002E5 2E8B16[0210] MOV DX,[CS:COMMAND] 395 000002EA B020 MOV AL,020H 396 000002EC EE OUT DX,AL 397 000002ED E89E0A CALL BSY0 398 399 000002F0 2EA0[2810] L1302CONTINUE MOV AL,[CS:XFERCOUNT] 400 000002F4 98 CBW 401 000002F5 89C7 MOV DI,AX 402 000002F7 2E8B16[2910] MOV DX,[CS:XFERSEG] 403 000002FC 8EC2 MOV ES,DX 404 000002FE 2E8B16[EC0F] MOV DX,[CS:DATAREG] 405 00000303 2E8B1E[2B10] MOV BX,[CS:XFEROFS] 406 00000308 BE0000 L1302MULTLOOP MOV SI,00H 407 0000030B 2EC706[A802]0000 MOV WORD [CS:WAITCOUNT],00H 408 409 ; CALL DRQ1 410 411 00000312 E8FD0A L1302DRQ CALL DRQ 412 00000315 7220 JC L1302SECLOOP 413 00000317 2EA0[E30F] MOV AL,[CS:STATBYTE] 414 0000031B 2EA2[160C] MOV [CS:PRNBYTE],AL 415 0000031F 2EFF06[A802] INC WORD [CS:WAITCOUNT] 416 00000324 2E813E[A802]0000 CMP WORD [CS:WAITCOUNT],00H 417 0000032B 7403 JE L1302TIMEOUT 418 0000032D E9E2FF JMP L1302DRQ 419 420 00000330 B404 L1302TIMEOUT MOV AH,04H 421 00000332 B001 MOV AL,01H 422 00000334 E92500 JMP L1302ERRDONE 423 424 00000337 ED L1302SECLOOP IN AX,DX 425 00000338 268900 MOV [ES:BX+SI],AX 426 0000033B 46 INC SI 427 0000033C 46 INC SI 428 0000033D 81FE0002 CMP SI,0200H 429 00000341 7CF4 JL L1302SECLOOP 430 00000343 81C30002 ADD BX,0200H 431 00000347 4F DEC DI 432 00000348 81FF0000 CMP DI,00H 433 0000034C 75BA JNE L1302MULTLOOP 434 0000034E 30E4 XOR AH,AH 435 00000350 2E803E[EE00]42 CMP BYTE [CS:THISFUNC],042H 436 00000356 7411 JE L1342DONE 437 00000358 2EA0[1610] MOV AL,[CS:AL_IN] 438 0000035C 2EC606[C702]00 L1302ERRDONE MOV BYTE [CS:L1302ERR],00H 439 00000362 2EA2[1610] MOV [CS:AL_IN],AL 440 00000366 E9B8FE JMP INTDONE 441 00000369 E9F0FF L1342DONE JMP L1302ERRDONE 442 443 444 445 0000036C 575249544520434F4D- L1303CMDERR DB 'WRITE COMMAND TIMEOUT ERROR',0DH,0AH,'$' 446 00000375 4D414E442054494D45- 447 0000037E 4F5554204552524F52- 448 00000387 0D0A24 449 450 451 L1343 ; Extended read 452 453 0000038A E8B805 CALL PARSEPACKET 454 0000038D E90300 JMP L1303CMD 455 456 ; MAYBE MAKE A GENERIC WRITE CALLABLE BLOCK 457 458 459 L1303 ; Write Sectors 460 00000390 E86204 CALL RWSETUP 461 00000393 2E8B16[0210] L1303CMD MOV DX,[CS:COMMAND] 462 00000398 B030 MOV AL,030H 463 0000039A EE OUT DX,AL 464 0000039B E84809 CALL BSY0DRQ1 465 0000039E 730B JNC L1303CONTINUE 466 000003A0 52 PUSH DX 467 000003A1 BA[6C03] MOV DX,L1303CMDERR 468 000003A4 E83708 CALL PRN_DX 469 000003A7 5A POP DX 470 000003A8 E95300 JMP L1303TIMEOUT 471 472 000003AB 2EC706[A802]0000 L1303CONTINUE MOV WORD [CS:WAITCOUNT],00H 473 000003B2 2EA0[2810] MOV AL,[CS:XFERCOUNT] 474 000003B6 98 CBW 475 000003B7 89C7 MOV DI,AX 476 000003B9 2E8B16[2910] MOV DX,[CS:XFERSEG] 477 000003BE 8EC2 MOV ES,DX 478 000003C0 2E8B16[EC0F] MOV DX,[CS:DATAREG] 479 000003C5 2E8B1E[2B10] MOV BX,[CS:XFEROFS] 480 000003CA BE0000 L1303MULTLOOP MOV SI,00H 481 000003CD 2EC706[A802]0000 MOV WORD [CS:WAITCOUNT],00H 482 483 ; CALL DRQ1 484 485 000003D4 E80F09 L1303DRQ CALL BSY0DRQ1 486 000003D7 732C JNC L1303LOOP 487 000003D9 2EA0[E30F] MOV AL,[CS:STATBYTE] 488 000003DD 2EA2[160C] MOV [CS:PRNBYTE],AL 489 000003E1 E82908 CALL SPC 490 000003E4 E85D08 CALL PRN_BYTE 491 000003E7 E82308 CALL SPC 492 000003EA E8D408 CALL DELAY 493 000003ED 2EFF06[A802] INC WORD [CS:WAITCOUNT] 494 000003F2 2E813E[A802]0000 CMP WORD [CS:WAITCOUNT],00H 495 000003F9 7403 JE L1303TIMEOUT 496 000003FB E9D6FF JMP L1303DRQ 497 498 000003FE B404 L1303TIMEOUT MOV AH,04H 499 00000400 B001 MOV AL,01H 500 00000402 E91D00 JMP L1303ERRDONE 501 502 00000405 268B00 L1303LOOP MOV AX,[ES:BX+SI] 503 00000408 EF OUT DX,AX 504 00000409 46 INC SI 505 0000040A 46 INC SI 506 0000040B 81FE0002 CMP SI,0200H 507 0000040F 7CF4 JL L1303LOOP 508 00000411 81C30002 ADD BX,0200H 509 00000415 4F DEC DI 510 00000416 81FF0000 CMP DI,00H 511 0000041A 75AE JNE L1303MULTLOOP 512 0000041C 30E4 XOR AH,AH 513 0000041E 2EA0[1610] MOV AL,[CS:AL_IN] 514 515 00000422 2EA2[1610] L1303ERRDONE MOV [CS:AL_IN],AL 516 00000426 E9F8FD JMP INTDONE 517 518 L1344 ; Extended read 519 520 00000429 E81905 CALL PARSEPACKET 521 0000042C E90300 JMP L1304CMD 522 523 ; MAYBE MAKE A GENERIC READ CALLABLE BLOCK 524 525 526 527 L1304 ; Verify Sectors 528 0000042F E8C303 CALL RWSETUP 529 00000432 2E8B16[0210] L1304CMD MOV DX,[CS:COMMAND] 530 00000437 B040 MOV AL,040H 531 00000439 EE OUT DX,AL 532 0000043A E88408 CALL DELAY 533 0000043D E84E09 CALL BSY0 534 00000440 7217 JC L1304TIMEOUT 535 00000442 2E8B16[0410] MOV DX,[CS:STATUS] 536 00000447 30E4 XOR AH,AH 537 00000449 FEC4 INC AH 538 0000044B EC IN AL,DX 539 0000044C 2401 AND AL,01H 540 0000044E 3C01 CMP AL,01H 541 00000450 7404 JE VERERR 542 00000452 30C0 XOR AL,AL 543 00000454 FECC DEC AH 544 00000456 E9C8FD VERERR JMP INTDONE 545 00000459 B404 L1304TIMEOUT MOV AH,04H 546 0000045B 2EC606[1610]01 MOV BYTE [CS:AL_IN],01H 547 00000461 E9F2FF JMP VERERR 548 549 550 L1308 ; Drive Parms 551 00000464 1E PUSH DS 552 00000465 B84000 MOV AX,040H 553 00000468 8ED8 MOV DS,AX 554 0000046A 8A167500 MOV DL,[075h] 555 0000046E 2E8816[1910] MOV [CS:DL_IN],DL 556 00000473 1F POP DS 557 00000474 31C0 XOR AX,AX 558 00000476 31DB XOR BX,BX 559 00000478 2E8B0E[0610] MOV CX,[CS:MYCYLINDERS] 560 0000047D 86CD XCHG CL,CH 561 0000047F D0E1 SHL CL,1 562 00000481 D0E1 SHL CL,1 563 00000483 D0E1 SHL CL,1 564 00000485 D0E1 SHL CL,1 565 00000487 D0E1 SHL CL,1 566 00000489 D0E1 SHL CL,1 567 0000048B 2E020E[0910] ADD CL,[CS:MYSECTORS] 568 00000490 2E8A36[0810] MOV DH,[CS:MYHEADS] 569 00000495 FECE DEC DH 570 00000497 31C0 XOR AX,AX 571 00000499 31DB XOR BX,BX 572 0000049B 2EA3[0A10] MOV [CS:AX_IN],AX 573 0000049F 2E891E[0C10] MOV [CS:BX_IN],BX 574 000004A4 2E890E[0E10] MOV [CS:CX_IN],CX 575 000004A9 2E8916[1010] MOV [CS:DX_IN],DX 576 000004AE 2E8826[1210] MOV [CS:AH_IN],AH 577 000004B3 2E883E[1310] MOV [CS:BH_IN],BH 578 000004B8 2E882E[1410] MOV [CS:CH_IN],CH 579 000004BD 2E8836[1510] MOV [CS:DH_IN],DH 580 000004C2 2EA2[1610] MOV [CS:AL_IN],AL 581 000004C6 2E881E[1710] MOV [CS:BL_IN],BL 582 000004CB 2E880E[1810] MOV [CS:CL_IN],CL 583 000004D0 2E8816[1910] MOV [CS:DL_IN],DL 584 585 000004D5 E949FD JMP INTDONE 586 587 588 L1309 ; initialize device parms? done for spinrite. 589 000004D8 C606[1210]00 MOV BYTE [AH_IN],00H 590 000004DD F8 CLC 591 000004DE E940FD JMP INTDONE 592 593 594 000004E1 52454144204C4F4E47- L130ACMDERR: DB 'READ LONG COMMAND TIMEOUT ERROR',0DH,0AH,'$' 595 000004EA 20434F4D4D414E4420- 596 000004F3 54494D454F55542045- 597 000004FC 52524F520D0A24 598 599 00000503 00 L130AERR: DB 00H 600 601 L130A ; Read Sectors 602 00000504 2EC606[0305]00 MOV BYTE [CS:L130AERR],00H 603 0000050A E8E802 CALL RWSETUP 604 0000050D 2E8B16[0210] MOV DX,[CS:COMMAND] 605 00000512 B022 MOV AL,022H 606 00000514 EE OUT DX,AL 607 00000515 E8CE07 CALL BSY0DRQ1 608 00000518 7310 JNC L130ACONTINUE 609 0000051A 2EFE06[0305] INC BYTE [CS:L130AERR] 610 0000051F 52 PUSH DX 611 00000520 BA[E104] MOV DX,L130ACMDERR 612 00000523 E8B806 CALL PRN_DX 613 00000526 5A POP DX 614 00000527 E93E00 JMP L130ATIMEOUT 615 616 0000052A B001 L130ACONTINUE MOV AL,01H 617 0000052C 98 CBW 618 0000052D 89C7 MOV DI,AX 619 0000052F 2E8B16[2910] MOV DX,[CS:XFERSEG] 620 00000534 8EC2 MOV ES,DX 621 00000536 2E8B16[EC0F] MOV DX,[CS:DATAREG] 622 0000053B 2E8B1E[2B10] MOV BX,[CS:XFEROFS] 623 00000540 BE0000 L130AMULTLOOP MOV SI,00H 624 00000543 2EC706[A802]0000 MOV WORD [CS:WAITCOUNT],00H 625 626 ; CALL DRQ1 627 628 0000054A E8C508 L130ADRQ CALL DRQ 629 0000054D 7220 JC L130ASECLOOP 630 0000054F 2EA0[E30F] MOV AL,[CS:STATBYTE] 631 00000553 2EA2[160C] MOV [CS:PRNBYTE],AL 632 00000557 2EFF06[A802] INC WORD [CS:WAITCOUNT] 633 0000055C 2E813E[A802]0000 CMP WORD [CS:WAITCOUNT],00H 634 00000563 7403 JE L130ATIMEOUT 635 00000565 E9E2FF JMP L130ADRQ 636 637 00000568 B404 L130ATIMEOUT MOV AH,04H 638 0000056A B001 MOV AL,01H 639 0000056C E91D00 JMP L130AERRDONE 640 641 0000056F ED L130ASECLOOP IN AX,DX 642 00000570 268900 MOV [ES:BX+SI],AX 643 00000573 46 INC SI 644 00000574 46 INC SI 645 00000575 81FE0402 CMP SI,0204H 646 00000579 7CF4 JL L130ASECLOOP 647 0000057B 81C30402 ADD BX,0204H 648 0000057F 4F DEC DI 649 00000580 81FF0000 CMP DI,00H 650 00000584 75BA JNE L130AMULTLOOP 651 00000586 30E4 XOR AH,AH 652 00000588 2EA0[1610] MOV AL,[CS:AL_IN] 653 0000058C 2EC606[0305]00 L130AERRDONE MOV BYTE [CS:L130AERR],00H 654 00000592 2EA2[1610] MOV [CS:AL_IN],AL 655 00000596 E988FC JMP INTDONE 656 657 00000599 5752495445204C4F4E- L130BCMDERR DB 'WRITE LONG COMMAND TIMEOUT ERROR',0DH,0AH,'$' 658 000005A2 4720434F4D4D414E44- 659 000005AB 2054494D454F555420- 660 000005B4 4552524F520D0A24 661 662 L130B ; Write Sectors 663 000005BC E83602 CALL RWSETUP 664 000005BF 2E8B16[0210] MOV DX,[CS:COMMAND] 665 000005C4 B032 MOV AL,032H 666 000005C6 EE OUT DX,AL 667 000005C7 E81C07 CALL BSY0DRQ1 668 000005CA 730B JNC L130BCONTINUE 669 000005CC 52 PUSH DX 670 000005CD BA[9905] MOV DX,L130BCMDERR 671 000005D0 E80B06 CALL PRN_DX 672 000005D3 5A POP DX 673 000005D4 E95100 JMP L130BTIMEOUT 674 675 000005D7 2EC706[A802]0000 L130BCONTINUE MOV WORD [CS:WAITCOUNT],00H 676 000005DE B001 MOV AL,1 677 000005E0 98 CBW 678 000005E1 89C7 MOV DI,AX 679 000005E3 2E8B16[2910] MOV DX,[CS:XFERSEG] 680 000005E8 8EC2 MOV ES,DX 681 000005EA 2E8B16[EC0F] MOV DX,[CS:DATAREG] 682 000005EF 2E8B1E[2B10] MOV BX,[CS:XFEROFS] 683 000005F4 BE0000 L130BMULTLOOP MOV SI,00H 684 000005F7 2EC706[A802]0000 MOV WORD [CS:WAITCOUNT],00H 685 686 ; CALL DRQ1 687 688 000005FE E8E506 L130BDRQ CALL BSY0DRQ1 689 00000601 732C JNC L130BLOOP 690 00000603 2EA0[E30F] MOV AL,[CS:STATBYTE] 691 00000607 2EA2[160C] MOV [CS:PRNBYTE],AL 692 0000060B E8FF05 CALL SPC 693 0000060E E83306 CALL PRN_BYTE 694 00000611 E8F905 CALL SPC 695 00000614 E8AA06 CALL DELAY 696 00000617 2EFF06[A802] INC WORD [CS:WAITCOUNT] 697 0000061C 2E813E[A802]0000 CMP WORD [CS:WAITCOUNT],00H 698 00000623 7403 JE L130BTIMEOUT 699 00000625 E9D6FF JMP L130BDRQ 700 701 00000628 B404 L130BTIMEOUT MOV AH,04H 702 0000062A B001 MOV AL,01H 703 0000062C E91D00 JMP L130BERRDONE 704 705 0000062F 268B00 L130BLOOP MOV AX,[ES:BX+SI] 706 00000632 EF OUT DX,AX 707 00000633 46 INC SI 708 00000634 46 INC SI 709 00000635 81FE0402 CMP SI,0204H 710 00000639 7CF4 JL L130BLOOP 711 0000063B 81C30402 ADD BX,0204H 712 0000063F 4F DEC DI 713 00000640 81FF0000 CMP DI,00H 714 00000644 75AE JNE L130BMULTLOOP 715 00000646 30E4 XOR AH,AH 716 00000648 2EA0[1610] MOV AL,[CS:AL_IN] 717 718 0000064C 2EA2[1610] L130BERRDONE MOV [CS:AL_IN],AL 719 00000650 E9CEFB JMP INTDONE 720 721 722 00000653 E88301 L130D CALL SETMSLBA 723 00000656 2E813E[E80F]0000 CMP WORD [CS:ISREM],00H 724 0000065D 750E JNE L130DNOREM 725 0000065F 2E8B16[0210] MOV DX,[CS:COMMAND] 726 00000664 B0DE MOV AL,0DEH 727 00000666 EE OUT DX,AL 728 00000667 E86207 CALL BSY1 729 0000066A E82107 CALL BSY0 730 0000066D 2E8B16[F00F] L130DNOREM MOV DX,[CS:SECTORCOUNT] 731 00000672 2E8A26[E60F] MOV AH,[CS:ISLBA] 732 00000677 EE OUT DX,AL ;+2 733 00000678 42 INC DX 734 00000679 B000 MOV AL,00H 735 0000067B EE OUT DX,AL ; +3 736 0000067C 42 INC DX 737 0000067D EE OUT DX,AL ; +4 738 0000067E 42 INC DX 739 0000067F EE OUT DX,AL ; +5 740 00000680 42 INC DX 741 00000681 EC IN AL,DX 742 00000682 24F0 AND AL,0F0H 743 00000684 EE OUT DX,AL ; +6 744 00000685 42 INC DX 745 00000686 B010 MOV AL,010H 746 00000688 EE OUT DX,AL ; +7 747 00000689 E84007 CALL BSY1 748 0000068C E8FF06 CALL BSY0 749 0000068F B400 L130DDONE MOV AH,00H 750 00000691 F8 CLC 751 00000692 E98CFB JMP INTDONE 752 753 754 ; MOV DX,[CS:DATAREG] 755 ; ADD DX,0206H 756 ; MOV AL,04H 757 ; OUT DX,AL 758 ; CALL DELAY 759 ; CALL DELAY 760 ; CALL DELAY 761 ; CALL BSY1 762 ; CALL DELAY 763 ; CALL DELAY 764 ; CALL DELAY 765 ; MOV AL,00H 766 ; OUT DX,AL 767 ; CALL BSY0 768 ; MOV AH,00H 769 ; JMP INTDONE 770 771 772 00000695 E8AD02 L1347 CALL PARSEPACKET 773 00000698 E90300 JMP L130CCMD 774 775 L130C ; Seek to Cyl 776 0000069B E85701 CALL RWSETUP 777 0000069E 2E8B16[0210] L130CCMD MOV DX,[CS:COMMAND] 778 000006A3 B070 MOV AL,070H 779 000006A5 EE OUT DX,AL 780 000006A6 E81806 CALL DELAY 781 000006A9 E87706 CALL BSY0DRDY1 782 000006AC 2EA0[E30F] MOV AL,[CS:STATBYTE] 783 000006B0 2401 AND AL,01H 784 000006B2 3C01 CMP AL,01H 785 000006B4 7502 JNE L130CGOOD 786 000006B6 B404 MOV AH,04H 787 000006B8 E966FB L130CGOOD JMP INTDONE 788 789 790 000006BB 0000 MYCYLHDAX: DW 00H 791 000006BD 0000 MYCYLHDDX: DW 00H 792 793 000006BF 2EA1[0610] L1315 MOV AX,[CS:MYCYLINDERS] 794 000006C3 2E8A1E[0810] MOV BL,[CS:MYHEADS] 795 000006C8 30FF XOR BH,BH 796 000006CA F7E3 MUL BX 797 000006CC 2EA3[BB06] MOV [CS:MYCYLHDAX],AX 798 000006D0 2E8916[BD06] MOV [CS:MYCYLHDDX],DX 799 000006D5 2E8B1E[0910] MOV BX,[CS:MYSECTORS] 800 000006DA F7E3 MUL BX 801 000006DC 2EA3[1010] MOV [CS:DX_IN],AX 802 000006E0 2E8916[0E10] MOV [CS:CX_IN],DX 803 000006E5 2EA1[BD06] MOV AX,[CS:MYCYLHDDX] 804 000006E9 F7E3 MUL BX 805 000006EB 2E0106[0E10] ADD [CS:CX_IN],AX 806 000006F0 2E8B0E[0E10] MOV CX,[CS:CX_IN] 807 000006F5 2E8B16[1010] MOV DX,[CS:DX_IN] 808 000006FA 2E880E[1810] MOV [CS:CL_IN],CL 809 000006FF 2E882E[1410] MOV [CS:CH_IN],CH 810 00000704 2E8816[1910] MOV [CS:DL_IN],DL 811 00000709 2E8836[1510] MOV [CS:DH_IN],DH 812 813 0000070E E910FB JMP INTDONE 814 815 816 L1325 ; Identify Drive 817 00000711 2E8B1E[2010] MOV BX,[CS:ES_IN] 818 00000716 8EC3 MOV ES,BX 819 00000718 2E8B1E[0C10] MOV BX,[CS:BX_IN] 820 0000071D 89DF MOV DI,BX 821 0000071F BE[E411] MOV SI,MYBUFFER 822 00000722 31DB XOR BX,BX 823 00000724 2E8B00 L1325LOOP MOV AX,[CS:SI+BX] 824 00000727 268901 MOV [ES:DI+BX],AX 825 0000072A 43 INC BX 826 0000072B 43 INC BX 827 0000072C 81FB0002 CMP BX,0200H 828 00000730 7CF2 JL L1325LOOP 829 00000732 B400 MOV AH,00H 830 00000734 E9EAFA JMP INTDONE 831 832 L1341 ; Extended info 833 00000737 2E813E[E60F]0000 CMP WORD [CS:ISLBA],00H 834 0000073E 7413 JE L1341ERROR 835 00000740 E85C08 CALL RTNREGS 836 00000743 BB55AA MOV BX,0AA55H 837 00000746 B90000 MOV CX,00H 838 00000749 B000 MOV AL,00H 839 0000074B B401 MOV AH,01H 840 0000074D E8EB07 CALL SAVEREGS 841 00000750 E9CEFA JMP INTDONE 842 843 00000753 E971FB L1341ERROR JMP L1302ERR 844 845 846 L1348 ; Extended get parms 847 ; CALL PRN_FN 848 00000756 2E813E[E60F]0000 CMP WORD [CS:ISLBA],00H 849 0000075D 7463 JE L1348ERROR 850 0000075F E83D08 CALL RTNREGS 851 00000762 803C1A CMP BYTE [SI],01AH 852 00000765 7C5B JL L1348ERROR 853 00000767 803C1E CMP BYTE [SI],01EH 854 0000076A 7C07 JL L1348_1A 855 0000076C C7041A00 MOV WORD [SI],01AH 856 00000770 E90400 JMP L1348_GO 857 00000773 C7041A00 L1348_1A MOV WORD [SI],01AH 858 00000777 2EA1[5012] L1348_GO MOV AX,[CS:MYBUFFER+06CH] 859 0000077B 894404 MOV [SI+04H],AX 860 0000077E 2EA1[5212] MOV AX,[CS:MYBUFFER+06EH] 861 00000782 894408 MOV [SI+08H],AX 862 00000785 2EA1[5412] MOV AX,[CS:MYBUFFER+070H] 863 00000789 89440C MOV [SI+0CH],AX 864 865 0000078C C744060000 MOV WORD [SI+06H],00H 866 00000791 C7440A0000 MOV WORD [SI+0AH],00H 867 00000796 C7440E0000 MOV WORD [SI+0EH],00H 868 869 0000079B 2EA1[5C12] MOV AX,[CS:MYBUFFER+078H] 870 0000079F 894410 MOV [SI+010H],AX 871 000007A2 2EA1[5E12] MOV AX,[CS:MYBUFFER+07AH] 872 000007A6 894412 MOV [SI+012H],AX 873 874 000007A9 C744140000 MOV WORD [SI+14H],00H 875 000007AE C744160000 MOV WORD [SI+16H],00H 876 877 000007B3 C744180002 MOV WORD [SI+018H],0200H 878 ; MOV WORD [SI+01AH],0FFFFH 879 ; MOV WORD [SI+01CH],0FFFFH 880 000007B8 C744020000 MOV WORD [SI+02H],00H 881 000007BD B400 MOV AH,00H 882 000007BF E95FFA JMP INTDONE 883 884 885 000007C2 B401 L1348ERROR MOV AH,01H 886 000007C4 E95AFA JMP INTDONE 887 888 000007C7 BE[E310] L13FF MOV SI,FUNCBUF 889 000007CA 0E PUSH CS 890 000007CB 2E8936[1A10] MOV [CS:SI_IN],SI 891 000007D0 5E POP SI 892 000007D1 2E8936[1E10] MOV [CS:DS_IN],SI 893 000007D6 E948FA JMP INTDONE 894 895 896 ;SETMSLBA MOV DX,[CS:DRIVEHEAD] 897 ; IN AL,DX 898 ; AND AL,0A0H 899 ; OUT DX,AL 900 ; CALL DELAY 901 ; CALL BSY0 902 ; MOV BX,[CS:ISLBA] 903 ; CMP BX,00H 904 ; JNE NOTLBA 905 ; OR AL,040H 906 ; OUT DX,AL 907 ;NOTLBA CALL DELAY 908 ; CALL BSY0 909 ; RET 910 911 000007D9 2E8B16[FE0F] SETMSLBA MOV DX,[CS:DRIVEHEAD] 912 000007DE EC IN AL,DX 913 000007DF 24A0 AND AL,0A0H 914 000007E1 EE OUT DX,AL 915 000007E2 E8DC04 CALL DELAY 916 ; CALL BSY0 917 000007E5 2E813E[E60F]0000 CMP WORD [CS:ISLBA],00H 918 000007EC 7406 JE NOLBA 919 000007EE 0CE0 OR AL,0E0H 920 000007F0 EE OUT DX,AL 921 000007F1 E8CD04 CALL DELAY 922 ; CALL BSY0 923 000007F4 C3 NOLBA RET 924 925 926 927 928 929 930 931 RWSETUP ; PREPARE FOR READING/WRITING/VERIFYING OF SECTORS 932 000007F5 E8E1FF CALL SETMSLBA 933 ; PUSH AX 934 935 ; CALL LF 936 937 ; MOV AX,[CS:AX_IN] 938 ; MOV [CS:PRNWORD],AX 939 ; CALL PRN_WORD 940 ; CALL SPC 941 942 ; MOV AX,[CS:BX_IN] 943 ; MOV [CS:PRNWORD],AX 944 ; CALL PRN_WORD 945 ; CALL SPC 946 947 ; MOV AX,[CS:CX_IN] 948 ; MOV [CS:PRNWORD],AX 949 ; CALL PRN_WORD 950 ; CALL SPC 951 952 ; MOV AX,[CS:DX_IN] 953 ; MOV [CS:PRNWORD],AX 954 ; CALL PRN_WORD 955 ; CALL SPC 956 957 ; CALL SPC 958 ; CALL LF 959 ; POP AX 960 961 000007F8 2EA1[2010] MOV AX,[CS:ES_IN] 962 000007FC 2EA3[2910] MOV [CS:XFERSEG],AX 963 00000800 2EA1[0C10] MOV AX,[CS:BX_IN] 964 00000804 2EA3[2B10] MOV [CS:XFEROFS],AX 965 966 00000808 2EA0[1610] MOV AL,[CS:AL_IN] 967 0000080C 2EA2[2810] MOV [CS:XFERCOUNT],AL 968 00000810 2E8B16[F00F] MOV DX,[CS:SECTORCOUNT] 969 00000815 EE OUT DX,AL 970 00000816 2E8B16[E60F] MOV DX,[CS:ISLBA] 971 0000081B 81FA0100 CMP DX,1 972 0000081F 7452 JE RWLBA 973 00000821 2EA0[1810] RWCHS MOV AL,[CS:CL_IN] 974 00000825 243F AND AL,03FH 975 00000827 2E8B16[F20F] MOV DX,[CS:SECTORNUMBER] 976 0000082C EE OUT DX,AL 977 0000082D 2EA0[1810] MOV AL,[CS:CL_IN] 978 00000831 D0E8 SHR AL,1 979 00000833 D0E8 SHR AL,1 980 00000835 D0E8 SHR AL,1 981 00000837 D0E8 SHR AL,1 982 00000839 D0E8 SHR AL,1 983 0000083B D0E8 SHR AL,1 984 0000083D 2E8B16[FA0F] MOV DX,[CS:CYLINDERHIGH] 985 00000842 EE OUT DX,AL 986 00000843 2E8B16[F60F] MOV DX,[CS:CYLINDERLOW] 987 00000848 2EA0[1410] MOV AL,[CS:CH_IN] 988 0000084C EE OUT DX,AL 989 990 0000084D 2E8B16[FE0F] MOV DX,[CS:DRIVEHEAD] 991 00000852 2E8A1E[1510] MOV BL,[CS:DH_IN] 992 00000857 EC IN AL,DX 993 00000858 24F0 AND AL,0F0H 994 0000085A 80E30F AND BL,0FH 995 0000085D 08D8 OR AL,BL 996 0000085F EE OUT DX,AL 997 998 00000860 E9E100 JMP RWSETUPDONE 999 1000 00000863 0000 CYLHDAX DW 00H 1001 00000865 0000 CYLHDDX DW 00H 1002 00000867 0000 CYLSECAX1 DW 00H 1003 00000869 0000 CYLSECDX1 DW 00H 1004 0000086B 0000 CYLSECAX2 DW 00H 1005 0000086D 0000 CYLSECDX2 DW 00H 1006 1007 0000086F 00 LBA0007 DB 00H 1008 00000870 00 LBA080F DB 00H 1009 00000871 00 LBA1017 DB 00H 1010 00000872 00 LBA181B DB 00H 1011 1012 RWLBA 1013 1014 ; FIRST CYLINDER*HEADS 1015 00000873 31C0 XOR AX,AX 1016 00000875 31DB XOR BX,BX 1017 00000877 31C9 XOR CX,CX 1018 00000879 31D2 XOR DX,DX 1019 0000087B 2EA0[1410] MOV AL,[CS:CH_IN] 1020 0000087F 2E8A26[1810] MOV AH,[CS:CL_IN] ; Upper two(2) bits of cylinder 1021 00000884 D0EC SHR AH,1 ; number in bits 7-6 1022 00000886 D0EC SHR AH,1 1023 00000888 D0EC SHR AH,1 1024 0000088A D0EC SHR AH,1 1025 0000088C D0EC SHR AH,1 1026 0000088E D0EC SHR AH,1 1027 00000890 2E8A1E[0810] MOV BL,[CS:MYHEADS] 1028 00000895 B700 MOV BH,00H 1029 00000897 F7E3 MUL BX 1030 ; Multiply by total heads 1031 ; Total goes in DX:AX 1032 ; DX=0 IF UNDER 8 GIG 1033 1034 ; THEN ADD HEADS 1035 1036 00000899 2E8A1E[1510] MOV BL,[CS:DH_IN] ; Add selected head number 1037 0000089E 30FF XOR BH,BH 1038 000008A0 01D8 ADD AX,BX 1039 000008A2 81D20000 ADC DX,0 ; Add with carry from Add AX,BX 1040 000008A6 2EA3[6308] MOV [CS:CYLHDAX],AX 1041 000008AA 2E8916[6508] MOV [CS:CYLHDDX],DX 1042 1043 ; THEN * SECTORS/TRK 1044 1045 000008AF 2EA1[6308] MOV AX,[CS:CYLHDAX] 1046 000008B3 2E8A1E[0910] MOV BL,[CS:MYSECTORS] 1047 000008B8 B700 MOV BH,00H 1048 000008BA F7E3 MUL BX 1049 000008BC 2EA3[6708] MOV [CS:CYLSECAX1],AX 1050 000008C0 2E8916[6908] MOV [CS:CYLSECDX1],DX 1051 1052 000008C5 2EA1[6508] MOV AX,[CS:CYLHDDX] 1053 000008C9 2E8A1E[0910] MOV BL,[CS:MYSECTORS] 1054 000008CE B700 MOV BH,00H 1055 000008D0 F7E3 MUL BX 1056 000008D2 2EA3[6B08] MOV [CS:CYLSECAX2],AX 1057 000008D6 2E8916[6D08] MOV [CS:CYLSECDX2],DX 1058 1059 000008DB 2EA1[6708] MOV AX,[CS:CYLSECAX1] 1060 000008DF 2E8B16[6908] MOV DX,[CS:CYLSECDX1] 1061 000008E4 2E8B1E[6B08] MOV BX,[CS:CYLSECAX2] 1062 000008E9 01DA ADD DX,BX 1063 1064 ; THEN ADD SECTOR# 1065 1066 000008EB 2E8A1E[1810] MOV BL,[CS:CL_IN] 1067 000008F0 80E33F AND BL,03FH 1068 000008F3 30FF XOR BH,BH 1069 000008F5 01D8 ADD AX,BX 1070 000008F7 81D20000 ADC DX,00H 1071 1072 ; THEN -1 1073 1074 000008FB 48 DEC AX 1075 000008FC 81DA0000 SBB DX,00H 1076 1077 00000900 2EA2[6F08] MOV [CS:LBA0007],AL 1078 00000904 2E8826[7008] MOV [CS:LBA080F],AH 1079 00000909 2E8816[7108] MOV [CS:LBA1017],DL 1080 0000090E 2E8836[7208] MOV [CS:LBA181B],DH 1081 1082 00000913 2E8B16[F40F] MOV DX,[CS:LBA_00_07] 1083 00000918 2EA0[6F08] MOV AL,[CS:LBA0007] 1084 0000091C EE OUT DX,AL 1085 1086 0000091D 2E8B16[F80F] MOV DX,[CS:LBA_08_0F] 1087 00000922 2EA0[7008] MOV AL,[CS:LBA080F] 1088 00000926 EE OUT DX,AL 1089 1090 00000927 2E8B16[FC0F] MOV DX,[CS:LBA_10_17] 1091 0000092C 2EA0[7108] MOV AL,[CS:LBA1017] 1092 00000930 EE OUT DX,AL 1093 1094 00000931 2E8B16[0010] MOV DX,[CS:LBA_18_1B] 1095 00000936 2E8A1E[7208] MOV BL,[CS:LBA181B] 1096 0000093B EC IN AL,DX 1097 0000093C 24F0 AND AL,0F0H 1098 0000093E 80E30F AND BL,0FH 1099 00000941 08D8 OR AL,BL 1100 00000943 EE OUT DX,AL 1101 1102 00000944 C3 RWSETUPDONE RET 1103 1104 00000945 90 PARSEPACKET NOP 1105 00000946 E890FE CALL SETMSLBA 1106 00000949 803C10 CMP BYTE [SI],010H 1107 0000094C 7D06 JGE SIZEGOOD 1108 0000094E B407 MOV AH,07H 1109 00000950 F9 STC 1110 00000951 E94700 JMP PARSERROR 1111 1112 SIZEGOOD; CALL LF 1113 1114 00000954 2E8B16[F40F] MOV DX,[CS:LBA_00_07] 1115 00000959 8A4408 MOV AL,[SI+08H] 1116 0000095C EE OUT DX,AL 1117 ; MOV [CS:PRNBYTE],AL 1118 ; CALL PRN_BYTE 1119 ; CALL SPC 1120 1121 0000095D 2E8B16[F80F] MOV DX,[CS:LBA_08_0F] 1122 00000962 8A4409 MOV AL,[SI+09H] 1123 00000965 EE OUT DX,AL 1124 ; MOV [CS:PRNBYTE],AL 1125 ; CALL PRN_BYTE 1126 ; CALL SPC 1127 1128 00000966 2E8B16[FC0F] MOV DX,[CS:LBA_10_17] 1129 0000096B 8A440A MOV AL,[SI+0AH] 1130 0000096E EE OUT DX,AL 1131 ; MOV [CS:PRNBYTE],AL 1132 ; CALL PRN_BYTE 1133 ; CALL SPC 1134 1135 0000096F 2E8B16[0010] MOV DX,[CS:LBA_18_1B] 1136 00000974 8A5C0B MOV BL,[SI+0BH] 1137 00000977 EC IN AL,DX 1138 00000978 24F0 AND AL,0F0H 1139 0000097A 80E30F AND BL,0FH 1140 0000097D 08D8 OR AL,BL 1141 0000097F EE OUT DX,AL 1142 ; MOV [CS:PRNBYTE],AL 1143 ; CALL PRN_BYTE 1144 ; CALL SPC 1145 1146 00000980 8B4404 MOV AX,[SI+04H] 1147 00000983 2EA3[2B10] MOV [CS:XFEROFS],AX 1148 ; MOV [CS:PRNWORD],AX 1149 ; CALL PRN_WORD 1150 ; CALL SPC 1151 1152 00000987 8B4406 MOV AX,[SI+06H] 1153 0000098A 2EA3[2910] MOV [CS:XFERSEG],AX 1154 ; MOV [CS:PRNWORD],AX 1155 ; CALL PRN_WORD 1156 ; CALL SPC 1157 1158 0000098E 2E8B16[F00F] MOV DX,[CS:SECTORCOUNT] 1159 00000993 8A4402 MOV AL,[SI+2] 1160 00000996 2EA2[2810] MOV [CS:XFERCOUNT],AL 1161 ; MOV [CS:PRNBYTE],AL 1162 ; CALL PRN_BYTE 1163 ; CALL SPC 1164 ; PUSH AX 1165 ; MOV AH,00 1166 ; INT 016H 1167 ; POP AX 1168 ; CALL LF 1169 ; CALL LF 1170 0000099A F8 CLC 1171 0000099B C3 PARSERROR RET 1172 1173 IDDRVSTR: 1174 0000099C 504C45415345204245- DB 'PLEASE BE PATIENT FOR A MOMENT WHILE I CHECK FOR HARDDRIVE' 1175 000009A5 2050415449454E5420- 1176 000009AE 464F522041204D4F4D- 1177 000009B7 454E54205748494C45- 1178 000009C0 204920434845434B20- 1179 000009C9 464F52204841524444- 1180 000009D2 52495645 1181 000009D6 0A0D DB 0AH,0DH 1182 000009D8 414E44204944454E54- DB 'AND IDENTIFY IT. MODEL NUMBER WILL BE DISPLAYED BELOW IF FOUND' 1183 000009E1 4946592049542E204D- 1184 000009EA 4F44454C204E554D42- 1185 000009F3 45522057494C4C2042- 1186 000009FC 4520444953504C4159- 1187 00000A05 45442042454C4F5720- 1188 00000A0E 494620464F554E44 1189 00000A16 0A0D24 DB 0AH,0DH,'$' 1190 1191 00000A19 52 IDDRIVE PUSH DX 1192 00000A1A BA[9C09] MOV DX,IDDRVSTR 1193 00000A1D E8BE01 CALL PRN_DX 1194 00000A20 5A POP DX 1195 ; CALL DELAY 1196 ; CALL BSY0 ; Wait for BSY to clear 1197 ; CALL DRDY1 ; Check for Drive Rdy Bit being set 1198 00000A21 E8FF02 CALL BSY0DRDY1 1199 00000A24 2E8B16[FE0F] MOV DX,[CS:DRIVEHEAD] 1200 00000A29 EC IN AL,DX 1201 00000A2A 24EF AND AL,0EFH 1202 00000A2C EE OUT DX,AL 1203 ; CALL DELAY 1204 ; CALL BSY0 ; Wait for BSY to clear 1205 ; CALL DRDY1 ; Check for Drive Rdy Bit being set 1206 00000A2D E8F302 CALL BSY0DRDY1 1207 00000A30 2E8B16[0210] MOV DX,[CS:COMMAND] 1208 00000A35 B0EC MOV AL,0ECH ; ID Ata device (Non Packet) 1209 00000A37 EE OUT DX,AL 1210 ; CALL DELAY 1211 00000A38 E8E802 GOODID CALL BSY0DRDY1 1212 ; CALL BSY0 ; Wait for BSY to clear 1213 ; CALL DRQ1 ; Check for Drive Rdy Bit being set 1214 1215 00000A3B BE0000 MOV SI,00H ;This is a read loop 1216 00000A3E 2E8B16[EC0F] MOV DX,[CS:DATAREG] 1217 00000A43 BB[E411] IDLOOP MOV BX,MYBUFFER 1218 00000A46 ED IN AX,DX 1219 00000A47 2E8900 MOV [CS:BX+SI],AX 1220 00000A4A 46 INC SI 1221 00000A4B 46 INC SI 1222 00000A4C 81FE0002 CMP SI,200H 1223 00000A50 7CF1 JL IDLOOP ; At 0x200 the whole block has been read. 1224 1225 00000A52 E8AF01 CALL LF 1226 00000A55 BE[E411] MOV SI,MYBUFFER 1227 00000A58 BF1B00 MOV DI,01BH 1228 00000A5B 89FB MDLLOOP MOV BX,DI 1229 00000A5D D1E3 SHL BX,1 1230 00000A5F 2E8B08 MOV CX,[CS:SI+BX] 1231 00000A62 88E8 MOV AL,CH 1232 00000A64 E86401 CALL PRN_AL 1233 00000A67 88C8 MOV AL,CL 1234 00000A69 E85F01 CALL PRN_AL 1235 00000A6C 47 INC DI 1236 00000A6D 81FF2E00 CMP DI,46 1237 00000A71 7EE8 JLE MDLLOOP 1238 00000A73 E88E01 CALL LF 1239 1240 00000A76 2EA1[E411] MOV AX,[CS:MYBUFFER+00H] 1241 00000A7A 250080 AND AX,08000H 1242 00000A7D 3D0080 CMP AX,08000H 1243 00000A80 7503 JNE ISATA 1244 00000A82 E93D01 JMP QUIT 1245 1246 ISATA 1247 00000A85 2EA1[E411] MOV AX,[CS:MYBUFFER] 1248 00000A89 258000 AND AX,080H 1249 00000A8C 3D8000 CMP AX,080H 1250 00000A8F 7508 JNE NOTREM 1251 00000A91 B80100 MOV AX,01H 1252 00000A94 2E8916[E80F] MOV [CS:ISREM],DX 1253 1254 00000A99 2EA1[4612] NOTREM MOV AX,[CS:MYBUFFER+062H] 1255 00000A9D 250002 AND AX,0200H 1256 00000AA0 3D0002 CMP AX,0200H 1257 00000AA3 7426 JE GOLBA 1258 00000AA5 2E8B16[E611] MOV DX,[CS:MYBUFFER+02H] 1259 00000AAA 4A DEC DX 1260 00000AAB 2E8916[0610] MOV [CS:MYCYLINDERS],DX 1261 00000AB0 2E8B16[EA11] MOV DX,[CS:MYBUFFER+06H] 1262 00000AB5 30F6 XOR DH,DH 1263 00000AB7 2E8816[0810] MOV [CS:MYHEADS],DL 1264 00000ABC 2E8B16[F011] MOV DX,[CS:MYBUFFER+0CH] 1265 00000AC1 30F6 XOR DH,DH 1266 00000AC3 2E8816[0910] MOV [CS:MYSECTORS],DL 1267 00000AC8 E99800 JMP IDDONE 1268 1269 GOLBA 1270 00000ACB BA0100 MOV DX,01H 1271 00000ACE 2E8916[E60F] MOV [CS:ISLBA],DX 1272 00000AD3 2E8B16[FE0F] MOV DX,[CS:DRIVEHEAD] 1273 00000AD8 EC IN AL,DX 1274 00000AD9 0C40 OR AL,040H 1275 00000ADB EE OUT DX,AL 1276 00000ADC E84402 CALL BSY0DRDY1 1277 1278 00000ADF 2E8B16[E611] MOV DX,[CS:MYBUFFER+02H] 1279 00000AE4 81FAFF3F CMP DX,03FFFH 1280 00000AE8 7C35 JL NOTOVERCHS 1281 00000AEA 2E8B16[EA11] MOV DX,[CS:MYBUFFER+06H] 1282 00000AEF 30F6 XOR DH,DH 1283 00000AF1 81FA1000 CMP DX,010H 1284 00000AF5 7C28 JL NOTOVERCHS 1285 00000AF7 2E8B16[F011] MOV DX,[CS:MYBUFFER+0CH] 1286 00000AFC 81FA3F00 CMP DX,03FH 1287 00000B00 7C1D JL NOTOVERCHS 1288 1289 00000B02 BAFF03 MOV DX,03FFH 1290 00000B05 2E8916[0610] MOV [CS:MYCYLINDERS],DX 1291 00000B0A BAFF00 MOV DX,0FFH 1292 00000B0D 2E8816[0810] MOV [CS:MYHEADS],DL 1293 00000B12 BA3F00 MOV DX,03FH 1294 00000B15 30F6 XOR DH,DH 1295 00000B17 2E8816[0910] MOV [CS:MYSECTORS],DL 1296 00000B1C E94400 JMP IDDONE 1297 1298 NOTOVERCHS 1299 00000B1F 2E8B16[E611] MOV DX,[CS:MYBUFFER+02H] 1300 00000B24 4A DEC DX 1301 00000B25 2E8916[0610] MOV [CS:MYCYLINDERS],DX 1302 00000B2A 2E8B16[EA11] MOV DX,[CS:MYBUFFER+06H] 1303 00000B2F 30F6 XOR DH,DH 1304 00000B31 2E8816[0810] MOV [CS:MYHEADS],DL 1305 00000B36 2E8B16[F011] MOV DX,[CS:MYBUFFER+0CH] 1306 00000B3B 30F6 XOR DH,DH 1307 00000B3D 2E8816[0910] MOV [CS:MYSECTORS],DL 1308 1309 LBAADJUST 1310 00000B42 2E8B16[0610] MOV DX,[CS:MYCYLINDERS] 1311 00000B47 81FAFF03 CMP DX,03FFH 1312 00000B4B 7E16 JLE IDDONE 1313 00000B4D D1EA SHR DX,1 1314 00000B4F 2E8916[0610] MOV [CS:MYCYLINDERS],DX 1315 00000B54 2E8A16[0810] MOV DL,[CS:MYHEADS] 1316 00000B59 D0E2 SHL DL,1 1317 00000B5B 2E8816[0810] MOV [CS:MYHEADS],DL 1318 00000B60 E9DFFF JMP LBAADJUST 1319 1320 00000B63 BA[6910] IDDONE MOV DX,USETHIS 1321 00000B66 E87500 CALL PRN_DX 1322 1323 00000B69 B400 DRVYN MOV AH,00H 1324 00000B6B CD16 INT 016H 1325 00000B6D 3C59 CMP AL,'Y' 1326 00000B6F 7415 JE DRVKEY 1327 00000B71 3C79 CMP AL,'y' 1328 00000B73 7411 JE DRVKEY 1329 00000B75 3C4E CMP AL,'N' 1330 00000B77 740D JE DRVKEY 1331 00000B79 3C6E CMP AL,'n' 1332 00000B7B 7409 JE DRVKEY 1333 00000B7D 3C1B CMP AL,01BH 1334 00000B7F 75E8 JNE DRVYN 1335 00000B81 B04E BADID MOV AL,'N' 1336 00000B83 E92300 JMP CHOSEN 1337 00000B86 2EA2[C10B] DRVKEY MOV [CS:DRVANS],AL 1338 00000B8A E83E00 CALL PRN_AL 1339 1340 ; CONTINUE TO CHECK KEY CODES FOR YyNn - BckSpc - Esc 1341 ; ONLY ACCEPT LAST TWO IN SECOND HALF OF CHECK. 1342 1343 00000B8D B400 DRVKEYCHK MOV AH,00H 1344 00000B8F CD16 INT 016H 1345 00000B91 3C0D CMP AL,0DH 1346 00000B93 7414 JE CHOSEN 1347 00000B95 3C08 CMP AL,08H 1348 00000B97 75F4 JNE DRVKEYCHK 1349 00000B99 E82F00 CALL PRN_AL 1350 00000B9C B020 MOV AL,' ' 1351 00000B9E E82A00 CALL PRN_AL 1352 00000BA1 B008 MOV AL,08H 1353 00000BA3 E82500 CALL PRN_AL 1354 00000BA6 E9C0FF JMP DRVYN 1355 00000BA9 2E8A16[C10B] CHOSEN MOV DL,[CS:DRVANS] 1356 00000BAE 30C0 XOR AL,AL 1357 00000BB0 80FA4E CMP DL,'N' 1358 00000BB3 7407 JE ISNN 1359 00000BB5 80FA6E CMP DL,'n' 1360 00000BB8 7402 JE ISNN 1361 00000BBA FEC0 INC AL 1362 1363 00000BBC 90 ISNN NOP 1364 00000BBD E84400 CALL LF 1365 00000BC0 C3 RET 1366 1367 00000BC1 00 DRVANS: DB 00H 1368 1369 00000BC2 E83F00 QUIT CALL LF 1370 00000BC5 E83C00 CALL LF 1371 00000BC8 CB RETF 1372 1373 1374 00000BC9 0000 VIDINFO: DW 00H 1375 1376 00000BCB 50 PRN_AL PUSH AX 1377 00000BCC 53 PUSH BX 1378 00000BCD 51 PUSH CX 1379 00000BCE B40E MOV AH,0EH 1380 00000BD0 2E8B1E[C90B] MOV BX,[CS:VIDINFO] 1381 00000BD5 B90100 MOV CX,1 1382 00000BD8 CD10 INT 010H 1383 00000BDA 59 POP CX 1384 00000BDB 5B POP BX 1385 00000BDC 58 POP AX 1386 00000BDD C3 RET 1387 1388 00000BDE 50 PRN_DX PUSH AX 1389 00000BDF 53 PUSH BX 1390 00000BE0 57 PUSH DI 1391 00000BE1 89D7 MOV DI,DX 1392 00000BE3 B40F MOV AH,0FH 1393 00000BE5 CD10 INT 010H 1394 00000BE7 B300 MOV BL,0 1395 00000BE9 2E891E[C90B] MOV [CS:VIDINFO],BX 1396 00000BEE 2E8A05 PRNLOOP MOV AL,[CS:DI] 1397 00000BF1 3C24 CMP AL,'$' 1398 00000BF3 740B JE PRNDONE 1399 00000BF5 3C00 CMP AL,00H 1400 00000BF7 7407 JE PRNDONE 1401 00000BF9 E8CFFF CALL PRN_AL 1402 00000BFC 47 INC DI 1403 00000BFD E9EEFF JMP PRNLOOP 1404 00000C00 5F PRNDONE POP DI 1405 00000C01 5B POP BX 1406 00000C02 58 POP AX 1407 00000C03 C3 RET 1408 1409 00000C04 52 LF PUSH DX 1410 00000C05 BA[2D10] MOV DX,LFSTR 1411 00000C08 E8D3FF CALL PRN_DX 1412 00000C0B 5A POP DX 1413 00000C0C C3 RET 1414 1415 00000C0D 52 SPC PUSH DX 1416 00000C0E BA[DF10] MOV DX,PRNSPC 1417 00000C11 E8CAFF CALL PRN_DX 1418 00000C14 5A POP DX 1419 00000C15 C3 RET 1420 1421 00000C16 00 PRNBYTE DB 00H 1422 00000C17 0000 PRNWORD DW 00H 1423 1424 00000C19 50 PRN_LO PUSH AX 1425 00000C1A 52 PUSH DX 1426 00000C1B 57 PUSH DI 1427 00000C1C 80E20F AND DL,0FH 1428 00000C1F 89D7 MOV DI,DX 1429 00000C21 2E8A85[CD10] MOV AL,[CS:HEXSET+DI] 1430 00000C26 E8A2FF CALL PRN_AL 1431 00000C29 5F POP DI 1432 00000C2A 5A POP DX 1433 00000C2B 58 POP AX 1434 00000C2C C3 RET 1435 1436 00000C2D 50 PRN_HI PUSH AX 1437 00000C2E 52 PUSH DX 1438 00000C2F 57 PUSH DI 1439 00000C30 80E2F0 AND DL,0F0H 1440 00000C33 C0EA04 SHR DL,4 1441 00000C36 89D7 MOV DI,DX 1442 00000C38 2E8A85[CD10] MOV AL,[CS:HEXSET+DI] 1443 00000C3D E88BFF CALL PRN_AL 1444 00000C40 5F POP DI 1445 00000C41 5A POP DX 1446 00000C42 58 POP AX 1447 00000C43 C3 RET 1448 1449 00000C44 52 PRN_BYTE PUSH DX 1450 00000C45 31D2 XOR DX,DX 1451 00000C47 2E8A16[160C] MOV DL,[CS:PRNBYTE] 1452 00000C4C E8DEFF CALL PRN_HI 1453 00000C4F 2E8A16[160C] MOV DL,[CS:PRNBYTE] 1454 00000C54 E8C2FF CALL PRN_LO 1455 00000C57 5A POP DX 1456 00000C58 C3 RET 1457 1458 00000C59 53 PRN_WORD PUSH BX 1459 00000C5A 2E8B1E[170C] MOV BX,[CS:PRNWORD] 1460 00000C5F 2E883E[160C] MOV [CS:PRNBYTE],BH 1461 00000C64 E8DDFF CALL PRN_BYTE 1462 00000C67 2E881E[160C] MOV [CS:PRNBYTE],BL 1463 00000C6C E8D5FF CALL PRN_BYTE 1464 00000C6F E89BFF CALL SPC 1465 00000C72 5B POP BX 1466 00000C73 C3 RET 1467 1468 00000C74 494E5354414C4C4544- CSEQS: DB 'INSTALLED AT CS=$' 1469 00000C7D 2041542043533D24 1470 1471 00000C85 52 PRN_SEG PUSH DX 1472 00000C86 BA[740C] MOV DX,CSEQS 1473 00000C89 E852FF CALL PRN_DX 1474 00000C8C 0E PUSH CS 1475 00000C8D 5A POP DX 1476 00000C8E 2E8916[170C] MOV [CS:PRNWORD],DX 1477 00000C93 5A POP DX 1478 00000C94 E8C2FF CALL PRN_WORD 1479 00000C97 E86AFF CALL LF 1480 00000C9A C3 RET 1481 1482 00000C9B 46554E434255462041- FNEQS: DB 'FUNCBUF AT FN=$' 1483 00000CA4 5420464E3D24 1484 1485 00000CAA 52 PRN_FN PUSH DX 1486 00000CAB BA[9B0C] MOV DX,FNEQS 1487 00000CAE E82DFF CALL PRN_DX 1488 00000CB1 BA[E310] MOV DX,FUNCBUF 1489 00000CB4 2E8916[170C] MOV [CS:PRNWORD],DX 1490 00000CB9 E89DFF CALL PRN_WORD 1491 00000CBC E845FF CALL LF 1492 00000CBF 5A POP DX 1493 00000CC0 C3 RET 1494 1495 ;delayloop 1496 00000CC1 52 DELAY PUSH DX 1497 00000CC2 50 PUSH AX 1498 00000CC3 2E8B16[EE0F] MOV DX,[CS:ERRORREG] 1499 00000CC8 EC IN AL,DX 1500 00000CC9 2EA2[E40F] MOV [CS:ERRORBYTE],AL 1501 ; IN AL,DX 1502 00000CCD E4EC IN AL,0ECh 1503 00000CCF E6EC OUT 0ECh,AL 1504 00000CD1 E4EC IN AL,0ECh 1505 00000CD3 E6EC OUT 0ECh,AL 1506 00000CD5 E4EC IN AL,0ECh 1507 00000CD7 E6EC OUT 0ECh,AL 1508 00000CD9 E4EC IN AL,0ECh 1509 00000CDB E6EC OUT 0ECh,AL 1510 00000CDD E4EC IN AL,0ECh 1511 00000CDF 58 POP AX 1512 00000CE0 5A POP DX 1513 00000CE1 C3 RET ; DELAYED FOR 4 READS OF ERROR PORT ENOUGH? 1514 1515 00000CE2 00000000 BSYDRQCOUNT DD 00H 1516 1517 00000CE6 2E66C706[E20C]0000- BSY0DRQ1 MOV DWORD [CS:BSYDRQCOUNT],00H 1518 00000CEE 0000 1519 00000CF0 52 PUSH DX 1520 00000CF1 50 PUSH AX 1521 00000CF2 2E66FF06[E20C] BSY0DRQ1LOOP INC DWORD [CS:BSYDRQCOUNT] 1522 00000CF8 2E66813E[E20C]0000- CMP DWORD [CS:BSYDRQCOUNT],010000H 1523 00000D00 0100 1524 00000D02 7417 JE BSYDRQTIMEOUT 1525 00000D04 E8BAFF CALL DELAY 1526 00000D07 2E8B16[0410] MOV DX,[CS:STATUS] ;bsy clr loop1 1527 00000D0C EC IN AL,DX 1528 00000D0D 2EA2[E30F] MOV [CS:STATBYTE],AL 1529 00000D11 2488 AND AL,88H 1530 00000D13 3C08 CMP AL,08H 1531 00000D15 75DB JNE BSY0DRQ1LOOP 1532 00000D17 F8 CLC 1533 00000D18 58 BSYDRQDONE POP AX 1534 00000D19 5A POP DX 1535 00000D1A C3 RET 1536 00000D1B F9 BSYDRQTIMEOUT STC 1537 00000D1C E9F9FF JMP BSYDRQDONE 1538 1539 00000D1F 00000000 BSYDRDYCOUNT DD 00H 1540 1541 00000D23 2E66C706[1F0D]0000- BSY0DRDY1 MOV DWORD [CS:BSYDRDYCOUNT],00H 1542 00000D2B 0000 1543 00000D2D 52 PUSH DX 1544 00000D2E 50 PUSH AX 1545 00000D2F 2E66FF06[1F0D] BSYDRDYLOOP INC DWORD [CS:BSYDRDYCOUNT] 1546 00000D35 2E66813E[1F0D]0000- CMP DWORD [CS:BSYDRDYCOUNT],010000H 1547 00000D3D 0100 1548 00000D3F 7421 JE BSYDRDYTIMEOUT 1549 00000D41 E87DFF CALL DELAY 1550 00000D44 2E8B16[0410] MOV DX,[CS:STATUS] ;bsy clr loop1 1551 00000D49 EC IN AL,DX 1552 00000D4A 2EA2[E30F] MOV [CS:STATBYTE],AL 1553 00000D4E 2401 AND AL,01H 1554 00000D50 3C01 CMP AL,01H 1555 00000D52 740E JE BSYDRDYTIMEOUT 1556 00000D54 2EA0[E30F] MOV AL,[CS:STATBYTE] 1557 00000D58 2488 AND AL,88H 1558 00000D5A 3C08 CMP AL,08H 1559 00000D5C 75D1 JNE BSYDRDYLOOP 1560 00000D5E F8 CLC 1561 00000D5F 58 BSYDRDYDONE POP AX 1562 00000D60 5A POP DX 1563 00000D61 C3 RET 1564 00000D62 F9 BSYDRDYTIMEOUT STC 1565 00000D63 E9F9FF JMP BSYDRDYDONE 1566 1567 00000D66 0000 BSYCOUNT: DW 00H 1568 1569 00000D68 425359204552524F52- BSYERRORSTR: DB 'BSY ERROR',0DH,0AH,'$' 1570 00000D71 0D0A24 1571 1572 00000D74 52 BSY PUSH DX 1573 00000D75 50 PUSH AX 1574 00000D76 E848FF CALL DELAY 1575 00000D79 2E8B16[0410] MOV DX,[CS:STATUS] ;bsy clr loop1 1576 00000D7E EC IN AL,DX 1577 00000D7F 2EA2[E30F] MOV [CS:STATBYTE],AL 1578 00000D83 F8 CLC 1579 00000D84 2480 AND AL,80H 1580 00000D86 3C00 CMP AL,00H 1581 00000D88 7401 JE BSYCLR 1582 00000D8A F9 STC 1583 00000D8B 58 BSYCLR POP AX 1584 00000D8C 5A POP DX 1585 00000D8D C3 RET 1586 1587 1588 00000D8E 52 BSY0 PUSH DX 1589 00000D8F 50 PUSH AX 1590 00000D90 2EC706[660D]0000 MOV WORD [CS:BSYCOUNT],0 1591 00000D97 2EFF06[660D] BSY0LOOP INC WORD [CS:BSYCOUNT] 1592 00000D9C E822FF CALL DELAY 1593 00000D9F 2E813E[660D]0000 CMP WORD [CS:BSYCOUNT],00H 1594 00000DA6 741E JE BSY0TIMEOUT 1595 00000DA8 2E8B16[0410] MOV DX,[CS:STATUS] ;bsy clr loop1 1596 00000DAD EC IN AL,DX 1597 00000DAE 2EA2[E30F] MOV [CS:STATBYTE],AL 1598 00000DB2 2401 AND AL,01H 1599 00000DB4 3C01 CMP AL,01H 1600 00000DB6 740E JE BSY0TIMEOUT 1601 00000DB8 2EA0[E30F] MOV AL,[CS:STATBYTE] 1602 1603 00000DBC 2480 AND AL,080H 1604 00000DBE 3C00 CMP AL,00H 1605 00000DC0 75D5 JNE BSY0LOOP 1606 00000DC2 F8 CLC 1607 00000DC3 58 BSY0DONE POP AX 1608 00000DC4 5A POP DX 1609 00000DC5 C3 RET 1610 1611 00000DC6 52 BSY0TIMEOUT PUSH DX 1612 ; MOV DX,BSYERRORSTR 1613 ; CALL PRN_DX 1614 00000DC7 58 POP AX 1615 00000DC8 F9 STC 1616 00000DC9 E9F7FF JMP BSY0DONE 1617 1618 00000DCC 52 BSY1 PUSH DX 1619 00000DCD 50 PUSH AX 1620 00000DCE 2EC706[660D]0000 MOV WORD [CS:BSYCOUNT],0 1621 00000DD5 2EFF06[660D] BSY1LOOP INC WORD [CS:BSYCOUNT] 1622 00000DDA E8E4FE CALL DELAY 1623 00000DDD 2E813E[660D]0000 CMP WORD [CS:BSYCOUNT],00H 1624 00000DE4 7414 JE BSY1TIMEOUT 1625 00000DE6 2E8B16[0410] MOV DX,[CS:STATUS] ;bsy clr loop1 1626 00000DEB EC IN AL,DX 1627 00000DEC 2EA2[E30F] MOV [CS:STATBYTE],AL 1628 00000DF0 2480 AND AL,80H 1629 00000DF2 3C80 CMP AL,80H 1630 00000DF4 75DF JNE BSY1LOOP 1631 00000DF6 F8 CLC 1632 00000DF7 58 BSY1DONE POP AX 1633 00000DF8 5A POP DX 1634 00000DF9 C3 RET 1635 1636 00000DFA 52 BSY1TIMEOUT PUSH DX 1637 00000DFB BA[680D] MOV DX,BSYERRORSTR 1638 00000DFE E8DDFD CALL PRN_DX 1639 00000E01 5A POP DX 1640 00000E02 58 POP AX 1641 00000E03 5A POP DX 1642 00000E04 F9 STC 1643 00000E05 C3 RET 1644 1645 00000E06 445251204552524F52- DRQERRORSTR: DB 'DRQ ERROR',0DH,0AH,'$' 1646 00000E0F 0D0A24 1647 1648 00000E12 52 DRQ PUSH DX 1649 00000E13 50 PUSH AX 1650 00000E14 2E8B16[0410] MOV DX,[CS:STATUS] 1651 00000E19 EC IN AL,DX 1652 00000E1A EC IN AL,DX 1653 00000E1B 2EA2[E30F] MOV [CS:STATBYTE],AL 1654 00000E1F F8 CLC 1655 00000E20 2408 AND AL,08H 1656 00000E22 3C00 CMP AL,00H 1657 00000E24 7401 JE DRQCLR 1658 00000E26 F9 STC ; DRQ SET 1659 00000E27 58 DRQCLR POP AX 1660 00000E28 5A POP DX 1661 00000E29 C3 RET ; DRQ CLR 1662 1663 00000E2A 0000 DRQCOUNT: DW 00H 1664 1665 00000E2C 52 DRQ0 PUSH DX 1666 00000E2D 50 PUSH AX 1667 00000E2E 2EC706[2A0E]0000 MOV WORD [CS:DRQCOUNT],0 1668 00000E35 2EFF06[2A0E] DRQ0LOOP INC WORD [CS:DRQCOUNT] 1669 00000E3A E884FE CALL DELAY 1670 00000E3D 2E813E[2A0E]0000 CMP WORD [CS:DRQCOUNT],00H 1671 00000E44 7414 JE DRQ0TIMEOUT 1672 00000E46 2E8B16[0410] MOV DX,[CS:STATUS] ;bsy clr loop1 1673 00000E4B EC IN AL,DX 1674 00000E4C 2EA2[E30F] MOV [CS:STATBYTE],AL 1675 00000E50 2408 AND AL,08H 1676 00000E52 3C00 CMP AL,00H 1677 00000E54 75DF JNE DRQ0LOOP 1678 00000E56 F8 CLC 1679 00000E57 58 DRQ0DONE POP AX 1680 00000E58 5A POP DX 1681 00000E59 C3 RET 1682 00000E5A 52 DRQ0TIMEOUT PUSH DX 1683 00000E5B BA[060E] MOV DX,DRQERRORSTR 1684 00000E5E E87DFD CALL PRN_DX 1685 00000E61 5A POP DX 1686 00000E62 F9 STC 1687 00000E63 E9F1FF JMP DRQ0DONE 1688 1689 00000E66 52 DRQ1 PUSH DX 1690 00000E67 50 PUSH AX 1691 00000E68 2EC706[2A0E]0000 MOV WORD [CS:DRQCOUNT],0 1692 00000E6F 2EFF06[2A0E] DRQ1LOOP INC WORD [CS:DRQCOUNT] 1693 00000E74 E84AFE CALL DELAY 1694 00000E77 2E813E[2A0E]0000 CMP WORD [CS:DRQCOUNT],00H 1695 00000E7E 7414 JE DRQ1TIMEOUT 1696 00000E80 2E8B16[0410] MOV DX,[CS:STATUS] ;bsy clr loop1 1697 00000E85 EC IN AL,DX 1698 00000E86 2EA2[E30F] MOV [CS:STATBYTE],AL 1699 00000E8A 2408 AND AL,08H 1700 00000E8C 3C08 CMP AL,08H 1701 00000E8E 75DF JNE DRQ1LOOP 1702 00000E90 F8 CLC 1703 00000E91 58 DRQ1DONE POP AX 1704 00000E92 5A POP DX 1705 00000E93 C3 RET 1706 00000E94 52 DRQ1TIMEOUT PUSH DX 1707 00000E95 BA[060E] MOV DX,DRQERRORSTR 1708 00000E98 E843FD CALL PRN_DX 1709 00000E9B 5A POP DX 1710 00000E9C F9 STC 1711 00000E9D E9F1FF JMP DRQ1DONE 1712 1713 00000EA0 44524459204552524F- DRDYERRORSTR: DB 'DRDY ERROR',0DH,0AH,'$' 1714 00000EA9 520D0A24 1715 1716 00000EAD 52 DRDY PUSH DX 1717 00000EAE 50 PUSH AX 1718 00000EAF 2E8B16[0410] MOV DX,[CS:STATUS] 1719 00000EB4 EC IN AL,DX 1720 00000EB5 EC IN AL,DX 1721 00000EB6 2EA2[E30F] MOV [CS:STATBYTE],AL 1722 00000EBA F8 CLC 1723 00000EBB 2440 AND AL,40H 1724 00000EBD 3C00 CMP AL,00H 1725 00000EBF 7401 JE DRDYCLR 1726 00000EC1 F9 STC 1727 00000EC2 58 DRDYCLR POP AX 1728 00000EC3 5A POP DX 1729 00000EC4 C3 RET 1730 1731 1732 00000EC5 0000 DRDYCOUNT: DW 00H 1733 1734 00000EC7 52 DRDY0 PUSH DX 1735 00000EC8 50 PUSH AX 1736 00000EC9 2EC706[C50E]0000 MOV WORD [CS:DRDYCOUNT],0 1737 00000ED0 2EFF06[C50E] DRDY0LOOP INC WORD [CS:DRDYCOUNT] 1738 00000ED5 E8E9FD CALL DELAY 1739 00000ED8 2E813E[C50E]0000 CMP WORD [CS:DRDYCOUNT],00H 1740 00000EDF 7414 JE DRDY0TIMEOUT 1741 00000EE1 2E8B16[0410] MOV DX,[CS:STATUS] 1742 00000EE6 EC IN AL,DX 1743 00000EE7 2EA2[E30F] MOV [CS:STATBYTE],AL 1744 00000EEB 2440 AND AL,040H 1745 00000EED 3C00 CMP AL,00H 1746 00000EEF 75DF JNE DRDY0LOOP 1747 00000EF1 F8 CLC 1748 00000EF2 58 DRDY0DONE POP AX 1749 00000EF3 5A POP DX 1750 00000EF4 C3 RET 1751 00000EF5 52 DRDY0TIMEOUT PUSH DX 1752 00000EF6 BA[A00E] MOV DX,DRDYERRORSTR 1753 00000EF9 E8E2FC CALL PRN_DX 1754 00000EFC 5A POP DX 1755 00000EFD F9 STC 1756 00000EFE E9F1FF JMP DRDY0DONE 1757 1758 1759 00000F01 52 DRDY1 PUSH DX 1760 00000F02 50 PUSH AX 1761 00000F03 2EC706[C50E]0000 MOV WORD [CS:DRDYCOUNT],0 1762 00000F0A 2EFF06[C50E] DRDY1LOOP INC WORD [CS:DRDYCOUNT] 1763 00000F0F E8AFFD CALL DELAY 1764 00000F12 2E813E[C50E]0000 CMP WORD [CS:DRDYCOUNT],00H 1765 00000F19 7414 JE DRDY1TIMEOUT 1766 00000F1B 2E8B16[0410] MOV DX,[CS:STATUS] 1767 00000F20 EC IN AL,DX 1768 00000F21 2EA2[E30F] MOV [CS:STATBYTE],AL 1769 00000F25 2440 AND AL,040H 1770 00000F27 3C00 CMP AL,00H 1771 00000F29 75DF JNE DRDY1LOOP 1772 00000F2B F8 CLC 1773 00000F2C 58 DRDY1DONE POP AX 1774 00000F2D 5A POP DX 1775 00000F2E C3 RET 1776 00000F2F 52 DRDY1TIMEOUT PUSH DX 1777 00000F30 BA[A00E] MOV DX,DRDYERRORSTR 1778 00000F33 E8A8FC CALL PRN_DX 1779 00000F36 5A POP DX 1780 00000F37 F9 STC 1781 00000F38 E9F1FF JMP DRDY1DONE 1782 1783 00000F3B 2EA3[0A10] SAVEREGS MOV [CS:AX_IN],AX 1784 00000F3F 2EA3[2610] MOV [CS:OLD_AX],AX 1785 00000F43 2E891E[0C10] MOV [CS:BX_IN],BX 1786 00000F48 2E890E[0E10] MOV [CS:CX_IN],CX 1787 00000F4D 2E8916[1010] MOV [CS:DX_IN],DX 1788 00000F52 2E8826[1210] MOV [CS:AH_IN],AH 1789 00000F57 2E883E[1310] MOV [CS:BH_IN],BH 1790 00000F5C 2E882E[1410] MOV [CS:CH_IN],CH 1791 00000F61 2E8836[1510] MOV [CS:DH_IN],DH 1792 00000F66 2EA2[1610] MOV [CS:AL_IN],AL 1793 00000F6A 2E881E[1710] MOV [CS:BL_IN],BL 1794 00000F6F 2E880E[1810] MOV [CS:CL_IN],CL 1795 00000F74 2E8816[1910] MOV [CS:DL_IN],DL 1796 00000F79 2E8936[1A10] MOV [CS:SI_IN],SI 1797 00000F7E 2E893E[1C10] MOV [CS:DI_IN],DI 1798 00000F83 2E892E[2210] MOV [CS:BP_IN],BP 1799 00000F88 0E PUSH CS 1800 00000F89 1E PUSH DS 1801 00000F8A 06 PUSH ES 1802 00000F8B 58 POP AX 1803 00000F8C 2EA3[2010] MOV [CS:ES_IN],AX 1804 00000F90 58 POP AX 1805 00000F91 2EA3[1E10] MOV [CS:DS_IN],AX 1806 00000F95 58 POP AX 1807 00000F96 2EA3[2410] MOV [CS:CS_IN],AX 1808 00000F9A 2EA1[0A10] MOV AX,[CS:AX_IN] 1809 00000F9E C3 RET 1810 1811 RTNREGS 1812 00000F9F 2EA1[1E10] MOV AX,[CS:DS_IN] 1813 00000FA3 8ED8 MOV DS,AX 1814 00000FA5 2EA1[2010] MOV AX,[CS:ES_IN] 1815 00000FA9 8EC0 MOV ES,AX 1816 00000FAB 2E8A26[1210] MOV AH,[CS:AH_IN] 1817 00000FB0 2E8A3E[1310] MOV BH,[CS:BH_IN] 1818 00000FB5 2E8A2E[1410] MOV CH,[CS:CH_IN] 1819 00000FBA 2E8A36[1510] MOV DH,[CS:DH_IN] 1820 00000FBF 2EA0[1610] MOV AL,[CS:AL_IN] 1821 00000FC3 2E8A1E[1710] MOV BL,[CS:BL_IN] 1822 00000FC8 2E8A0E[1810] MOV CL,[CS:CL_IN] 1823 00000FCD 2E8A16[1910] MOV DL,[CS:DL_IN] 1824 00000FD2 2E8B36[1A10] MOV SI,[CS:SI_IN] 1825 00000FD7 2E8B3E[1C10] MOV DI,[CS:DI_IN] 1826 00000FDC 2E8B2E[2210] MOV BP,[CS:BP_IN] 1827 00000FE1 C3 RET 1828 1829 00000FE2 00 DONESTATUS: DB 00H 1830 00000FE3 20 STATBYTE: DB 020H 1831 00000FE4 30 ERRORBYTE: DB 030H 1832 00000FE5 FF OURDRIVE DB 0FFH 1833 00000FE6 0000 ISLBA: DW 00H 1834 00000FE8 0000 ISREM: DW 00H 1835 1836 00000FEA 6801 BASE: DW BASEOFPORT+0H 1837 00000FEC 6801 DATAREG: DW BASEOFPORT+0H 1838 00000FEE 6901 ERRORREG: DW BASEOFPORT+01H 1839 00000FF0 6A01 SECTORCOUNT: DW BASEOFPORT+02H 1840 1841 00000FF2 6B01 SECTORNUMBER: DW BASEOFPORT+03H 1842 00000FF4 6B01 LBA_00_07: DW BASEOFPORT+03H ; Lba Bits 00 - 07 1843 1844 00000FF6 6C01 CYLINDERLOW: DW BASEOFPORT+04H 1845 00000FF8 6C01 LBA_08_0F: DW BASEOFPORT+04H ; Lba Bits 08 - 0F 1846 1847 00000FFA 6D01 CYLINDERHIGH: DW BASEOFPORT+05H 1848 00000FFC 6D01 LBA_10_17: DW BASEOFPORT+05H ; Lba Bits 10 - 17 1849 1850 00000FFE 6E01 DRIVEHEAD: DW BASEOFPORT+06H 1851 00001000 6E01 LBA_18_1B: DW BASEOFPORT+06H ; Lba Bits 18 - 1B 1852 1853 00001002 6F01 COMMAND: DW BASEOFPORT+07H 1854 00001004 6F01 STATUS: DW BASEOFPORT+07H 1855 1856 00001006 0000 MYCYLINDERS: DW 00H 1857 00001008 00 MYHEADS: DB 00H 1858 00001009 00 MYSECTORS: DB 00H 1859 1860 0000100A 0000 AX_IN: DW 00H 1861 0000100C 0000 BX_IN: DW 00H 1862 0000100E 0000 CX_IN: DW 00H 1863 00001010 0000 DX_IN: DW 00H 1864 00001012 00 AH_IN: DB 00H 1865 00001013 00 BH_IN: DB 00H 1866 00001014 00 CH_IN: DB 00H 1867 00001015 00 DH_IN: DB 00H 1868 00001016 00 AL_IN: DB 00H 1869 00001017 00 BL_IN: DB 00H 1870 00001018 00 CL_IN: DB 00H 1871 00001019 00 DL_IN: DB 00H 1872 0000101A 0000 SI_IN: DW 00H 1873 0000101C 0000 DI_IN: DW 00H 1874 0000101E 0000 DS_IN: DW 00H 1875 00001020 0000 ES_IN: DW 00H 1876 00001022 0000 BP_IN: DW 00H 1877 00001024 0000 CS_IN: DW 00H 1878 00001026 0000 OLD_AX: DW 00H 1879 00001028 00 XFERCOUNT DB 00H 1880 00001029 0000 XFERSEG: DW 00H 1881 0000102B 0000 XFEROFS: DW 00H 1882 0000102D 0D0A24 LFSTR: DB 0DH,0AH,'$' 1883 00001030 4F4C4420494E542031- OLD13: DB 'OLD INT 13 WAS AT ->$' 1884 00001039 332057415320415420- 1885 00001042 2D3E24 1886 00001045 544845204452495645- DRVBSY: DB 'THE DRIVER IS BUSY ','$' 1887 0000104E 522049532042555359- 1888 00001057 2024 1889 00001059 554E4B4E4F574E2045- UNKNOWN: DB 'UNKNOWN ERROR',0DH,0AH,'$' 1890 00001062 52524F520D0A24 1891 00001069 0D0A USETHIS: DB 0DH,0AH 1892 0000106B 544849532049532054- DB 'THIS IS TEST PRE-DOS BOOT CODE',0DH,0AH 1893 00001074 455354205052452D44- 1894 0000107D 4F5320424F4F542043- 1895 00001086 4F44450D0A 1896 0000108B 444F20594F55205741- DB 'DO YOU WANT TO USE THIS DRIVE Y/N -> ','$' 1897 00001094 4E5420544F20555345- 1898 0000109D 205448495320445249- 1899 000010A6 564520592F4E202D3E- 1900 000010AF 2024 1901 000010B1 444556494345204F52- NTHR: DB 'DEVICE OR PORT NOT PRESENT ','$' 1902 000010BA 20504F5254204E4F54- 1903 000010C3 2050524553454E5420- 1904 000010CC 24 1905 000010CD 303132333435363738- HEXSET DB '0123456789ABCDEF $' 1906 000010D6 394142434445462024 1907 000010DF 202024 PRNSPC DB ' $' 1908 000010E2 FF DB 0FFH 1909 000010E3 FUNCBUF: RESB 0100H 1910 000011E3 FF DB 0FFH 1911 000011E4 MYBUFFER: RESW 0100H