]> pd.if.org Git - mmurtl/commitdiff
autocommit for file dated 1995-02-09 11:17:00
authorRichard Burgess <>
Thu, 9 Feb 1995 11:17:00 +0000 (11:17 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Mon, 17 Oct 2016 14:03:48 +0000 (14:03 +0000)
ossource/hardide.asm [new file with mode: 0644]

diff --git a/ossource/hardide.asm b/ossource/hardide.asm
new file mode 100644 (file)
index 0000000..65968a8
--- /dev/null
@@ -0,0 +1,1784 @@
+\r
+.DATA\r
+EXTRN _AllocExch FWORD\r
+EXTRN _InitDevDr FWORD\r
+EXTRN _UnMaskIRQ FWORD\r
+EXTRN _MaskIRQ FWORD\r
+EXTRN _SetIRQVector FWORD\r
+EXTRN _EndOfIRQ FWORD\r
+EXTRN _SendMsg FWORD\r
+EXTRN _ISendMsg FWORD\r
+EXTRN _WaitMsg FWORD\r
+EXTRN _CheckMsg FWORD\r
+EXTRN _Alarm FWORD\r
+EXTRN _KillAlarm FWORD\r
+EXTRN _Sleep FWORD\r
+EXTRN _MicroDelay FWORD\r
+EXTRN _OutByte FWORD\r
+EXTRN _OutWord FWORD\r
+EXTRN _InByte FWORD\r
+EXTRN _InWord FWORD\r
+EXTRN _ReadCMOS FWORD\r
+EXTRN _CopyData FWORD\r
+EXTRN _InWords FWORD\r
+EXTRN _OutWords FWORD\r
+_hd_Cmd DB 8 DUP(0)\r
+_fDataReq DB 0h\r
+_statbyte DB 0h\r
+_hd_control DB 0h\r
+_hd_command DB 0h\r
+_hd_drive DB 0h\r
+_hd_head DB 0h\r
+_hd_nsectors DB 0h\r
+_hd_sector DB 0h\r
+_hd0_type DB 0h\r
+_hd0_heads DB 0h\r
+_hd0_secpertrk DB 0h\r
+_hd0_cyls DW 0h\r
+_hd1_type DB 0h\r
+_hd1_heads DB 0h\r
+_hd1_secpertrk DB 0h\r
+_hd1_cyls DW 0h\r
+_hdstatus DB 64 DUP(0)\r
+_HDStatTmp DB 64 DUP(0)\r
+_hdcb DB 128 DUP(0)\r
+_hd_exch DD 0h\r
+_hd_msg DD 0h\r
+_hd_msg2 DD 0h\r
+_HDDInt DD 0h\r
+\r
+\r
+.CODE\r
+EXTRN _xprintf: NEAR\r
+PUBLIC _hdisk_setup:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,4\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,72\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,1\r
+       ADD ESI,EAX\r
+       MOV EAX,68\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,2\r
+       ADD ESI,EAX\r
+       MOV EAX,48\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,3\r
+       MOV BYTE PTR [ESI+12], AL\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,1\r
+       MOV BYTE PTR [ESI+13], AL\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,512\r
+       MOV WORD PTR [ESI+14], AX\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,524288\r
+       MOV DWORD PTR [ESI+20], EAX\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,OFFSET _hddev_op\r
+       MOV DWORD PTR [ESI+24], EAX\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,OFFSET _hddev_init\r
+       MOV DWORD PTR [ESI+28], EAX\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,OFFSET _hddev_stat\r
+       MOV DWORD PTR [ESI+32], EAX\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,72\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,1\r
+       ADD ESI,EAX\r
+       MOV EAX,68\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,2\r
+       ADD ESI,EAX\r
+       MOV EAX,49\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,3\r
+       MOV BYTE PTR [ESI+12], AL\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,1\r
+       MOV BYTE PTR [ESI+13], AL\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,512\r
+       MOV WORD PTR [ESI+14], AX\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,524288\r
+       MOV DWORD PTR [ESI+20], EAX\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,OFFSET _hddev_op\r
+       MOV DWORD PTR [ESI+24], EAX\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,OFFSET _hddev_init\r
+       MOV DWORD PTR [ESI+28], EAX\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,OFFSET _hddev_stat\r
+       MOV DWORD PTR [ESI+32], EAX\r
+       PUSH 25\r
+       CALL FWORD PTR _ReadCMOS\r
+       MOV _hd0_type, AL\r
+       MOV EAX,16\r
+       MOV _hd0_heads, AL\r
+       MOV EAX,17\r
+       MOV _hd0_secpertrk, AL\r
+       MOV EAX,1024\r
+       MOV _hd0_cyls, AX\r
+       PUSH 26\r
+       CALL FWORD PTR _ReadCMOS\r
+       MOV _hd1_type, AL\r
+       MOV EAX,16\r
+       MOV _hd1_heads, AL\r
+       MOV EAX,17\r
+       MOV _hd1_secpertrk, AL\r
+       MOV EAX,1024\r
+       MOV _hd1_cyls, AX\r
+       PUSH OFFSET _hd_exch\r
+       CALL FWORD PTR _AllocExch\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       PUSH 14\r
+       PUSH OFFSET _hdisk_isr\r
+       CALL FWORD PTR _SetIRQVector\r
+       PUSH 14\r
+       CALL FWORD PTR _UnMaskIRQ\r
+       CALL _hd_reset\r
+       XOR EAX,EAX\r
+       PUSH EAX\r
+       CALL _hd_recal\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JZ L_1\r
+       CALL _hd_reset\r
+       XOR EAX,EAX\r
+       PUSH EAX\r
+       CALL _hd_recal\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JZ L_2\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV DWORD PTR [ESI+16], EAX\r
+       XOR EAX,EAX\r
+       MOV _hd0_type, AL\r
+       MOV EAX,655\r
+       JMP L_3\r
+L_2:\r
+L_1:\r
+       XOR EAX,EAX\r
+       MOV AL,_hd1_type\r
+       AND EAX,EAX\r
+       JZ L_4\r
+       PUSH 1\r
+       CALL _hd_recal\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JZ L_5\r
+       MOV EAX,64\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV DWORD PTR [ESI+16], EAX\r
+       XOR EAX,EAX\r
+       MOV _hd1_type, AL\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_6\r
+       CALL _hd_reset\r
+L_6:\r
+       XOR EAX,EAX\r
+       PUSH EAX\r
+       CALL _hd_recal\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV DWORD PTR [ESI+16], EAX\r
+L_5:\r
+L_4:\r
+       PUSH 12\r
+       PUSH OFFSET _hdcb\r
+       PUSH 2\r
+       PUSH 1\r
+       CALL FWORD PTR _InitDevDr\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_3:\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN\r
+_hd_reset:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,4\r
+       PUSH 14\r
+       CALL FWORD PTR _UnMaskIRQ\r
+       PUSH 4\r
+       PUSH 1014\r
+       CALL FWORD PTR _OutByte\r
+       PUSH 4\r
+       CALL FWORD PTR _MicroDelay\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_control\r
+       MOV ECX,15\r
+       AND EAX,ECX\r
+       PUSH EAX\r
+       PUSH 1014\r
+       CALL FWORD PTR _OutByte\r
+       PUSH 20\r
+       CALL FWORD PTR _Sleep\r
+       PUSH _hd_exch\r
+       PUSH OFFSET _hd_msg\r
+       CALL FWORD PTR _CheckMsg\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,_statbyte\r
+       MOV BYTE PTR [ESI+54], AL\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JZ L_7\r
+       MOV ESI,OFFSET _hdstatus\r
+       MOV EAX,1\r
+       MOV BYTE PTR [ESI+42], AL\r
+       JMP L_8\r
+L_7:\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV BYTE PTR [ESI+42], AL\r
+L_8:\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN\r
+_hdisk_isr:\r
+       PUSHAD\r
+       PUSH 503\r
+       CALL FWORD PTR _InByte\r
+       MOV _statbyte, AL\r
+       MOV EAX,1\r
+       MOV _HDDInt, EAX\r
+       PUSH _hd_exch\r
+       PUSH -16\r
+       PUSH -16\r
+       CALL FWORD PTR _ISendMsg\r
+       PUSH 14\r
+       CALL FWORD PTR _EndOfIRQ\r
+       POPAD\r
+       IRETD\r
+_check_busy:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,2\r
+       XOR EAX,EAX\r
+       MOV WORD PTR [EBP-2], AX\r
+L_9:\r
+       MOVSX EAX,WORD PTR [EBP-2]\r
+       INC WORD PTR [EBP-2]\r
+       CMP EAX,60\r
+       SETL AL\r
+       AND AL,AL\r
+       JZ L_10\r
+       PUSH 503\r
+       CALL FWORD PTR _InByte\r
+       MOV _statbyte, AL\r
+       XOR EAX,EAX\r
+       MOV AL,_statbyte\r
+       MOV ECX,128\r
+       AND EAX,ECX\r
+       XOR ECX,ECX\r
+       CMP EAX,ECX\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_11\r
+       XOR EAX,EAX\r
+       JMP L_12\r
+L_11:\r
+       PUSH 5\r
+       CALL FWORD PTR _Sleep\r
+       JMP L_9\r
+L_10:\r
+       MOV EAX,667\r
+L_12:\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN\r
+_hd_init:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,4\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP+8]\r
+       XOR ECX,ECX\r
+       CMP EAX,ECX\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_13\r
+       MOV EAX,2\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd0_secpertrk\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,6\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP+8]\r
+       MOV ECX,4\r
+       SHL EAX,CL\r
+       AND EAX,0FFh\r
+       MOV EBX,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd0_heads\r
+       MOV ECX,1\r
+       SUB EAX,ECX\r
+       MOV ECX,15\r
+       AND EAX,ECX\r
+       MOV ECX,EBX\r
+       OR EAX,ECX\r
+       MOV ECX,160\r
+       OR EAX,ECX\r
+       MOV BYTE PTR [ESI], AL\r
+       JMP L_14\r
+L_13:\r
+       MOV EAX,2\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd1_secpertrk\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,6\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP+8]\r
+       MOV ECX,4\r
+       SHL EAX,CL\r
+       AND EAX,0FFh\r
+       MOV EBX,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd1_heads\r
+       MOV ECX,1\r
+       SUB EAX,ECX\r
+       MOV ECX,15\r
+       AND EAX,ECX\r
+       MOV ECX,EBX\r
+       OR EAX,ECX\r
+       MOV ECX,160\r
+       OR EAX,ECX\r
+       MOV BYTE PTR [ESI], AL\r
+L_14:\r
+       MOV EAX,1\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,3\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,4\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,5\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV BYTE PTR [ESI], AL\r
+       PUSH 145\r
+       CALL _send_command\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       CALL _hd_wait\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_15\r
+       PUSH 145\r
+       CALL _hd_status\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_15:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 4\r
+_hd_wait:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,4\r
+       XOR EAX,EAX\r
+       MOV _HDDInt, EAX\r
+       PUSH _hd_exch\r
+       CALL FWORD PTR _KillAlarm\r
+       PUSH _hd_exch\r
+       PUSH 300\r
+       CALL FWORD PTR _Alarm\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JZ L_17\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       JMP L_18\r
+L_17:\r
+       PUSH _hd_exch\r
+       PUSH OFFSET _hd_msg\r
+       CALL FWORD PTR _WaitMsg\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       PUSH _hd_exch\r
+       CALL FWORD PTR _KillAlarm\r
+       MOV EAX,_hd_msg\r
+       CMP EAX,-16\r
+       SETNE AL\r
+       AND AL,AL\r
+       JZ L_19\r
+       MOV EAX,_HDDInt\r
+       AND EAX,EAX\r
+       JZ L_20\r
+       MOV EAX,675\r
+       JMP L_18\r
+L_20:\r
+       MOV EAX,660\r
+       JMP L_18\r
+L_21:\r
+       JMP L_22\r
+L_19:\r
+       PUSH _hd_exch\r
+       CALL FWORD PTR _KillAlarm\r
+       XOR EAX,EAX\r
+L_22:\r
+L_18:\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN\r
+_hd_recal:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,4\r
+       MOV EAX,6\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP+8]\r
+       MOV ECX,4\r
+       SHL EAX,CL\r
+       AND EAX,0FFh\r
+       MOV EBX,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_head\r
+       MOV ECX,15\r
+       AND EAX,ECX\r
+       MOV ECX,EBX\r
+       OR EAX,ECX\r
+       MOV ECX,160\r
+       OR EAX,ECX\r
+       MOV BYTE PTR [ESI], AL\r
+       PUSH 16\r
+       CALL _send_command\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_23\r
+       CALL _hd_wait\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_23:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_24\r
+       PUSH 16\r
+       CALL _hd_status\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_24:\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP+8]\r
+       AND EAX,EAX\r
+       JZ L_25\r
+       MOV ESI,OFFSET _hdstatus\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV DWORD PTR [ESI+44], EAX\r
+       JMP L_26\r
+L_25:\r
+       MOV ESI,OFFSET _hdstatus\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV DWORD PTR [ESI+32], EAX\r
+L_26:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 4\r
+_send_command:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,12\r
+L_28:\r
+       PUSH _hd_exch\r
+       LEA EAX,DWORD PTR [EBP-12]\r
+       PUSH EAX\r
+       CALL FWORD PTR _CheckMsg\r
+       CMP EAX,0\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_29\r
+       JMP L_28\r
+L_29:\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_head\r
+       CMP EAX,7\r
+       SETA AL\r
+       AND AL,AL\r
+       JZ L_30\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_control\r
+       MOV ECX,8\r
+       OR EAX,ECX\r
+       MOV _hd_control, AL\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_control\r
+       PUSH EAX\r
+       PUSH 1014\r
+       CALL FWORD PTR _OutByte\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_control\r
+       MOV ECX,247\r
+       AND EAX,ECX\r
+       MOV _hd_control, AL\r
+L_30:\r
+       CALL _check_busy\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_31\r
+       MOV EAX,1\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [ESI]\r
+       PUSH EAX\r
+       PUSH 497\r
+       CALL FWORD PTR _OutByte\r
+L_31:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_32\r
+       CALL _check_busy\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_32:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_33\r
+       MOV EAX,2\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [ESI]\r
+       PUSH EAX\r
+       PUSH 498\r
+       CALL FWORD PTR _OutByte\r
+L_33:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_34\r
+       CALL _check_busy\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_34:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_35\r
+       MOV EAX,3\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [ESI]\r
+       PUSH EAX\r
+       PUSH 499\r
+       CALL FWORD PTR _OutByte\r
+L_35:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_36\r
+       CALL _check_busy\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_36:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_37\r
+       MOV EAX,4\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [ESI]\r
+       PUSH EAX\r
+       PUSH 500\r
+       CALL FWORD PTR _OutByte\r
+L_37:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_38\r
+       CALL _check_busy\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_38:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_39\r
+       MOV EAX,5\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [ESI]\r
+       PUSH EAX\r
+       PUSH 501\r
+       CALL FWORD PTR _OutByte\r
+L_39:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_40\r
+       CALL _check_busy\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_40:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_41\r
+       MOV EAX,6\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [ESI]\r
+       PUSH EAX\r
+       PUSH 502\r
+       CALL FWORD PTR _OutByte\r
+L_41:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_42\r
+       CALL _check_busy\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_42:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_43\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP+8]\r
+       PUSH EAX\r
+       PUSH 503\r
+       CALL FWORD PTR _OutByte\r
+L_43:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 4\r
+_setupseek:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,6\r
+       MOV EAX,DWORD PTR [EBP+8]\r
+       CMP EAX,256\r
+       SETA AL\r
+       AND AL,AL\r
+       JZ L_45\r
+       MOV EAX,670\r
+       JMP L_46\r
+L_45:\r
+       MOV EAX,DWORD PTR [EBP+8]\r
+       CMP EAX,0\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_47\r
+       MOV EAX,671\r
+       JMP L_46\r
+L_47:\r
+       MOV EAX,DWORD PTR [EBP+8]\r
+       MOV _hd_nsectors, AL\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_nsectors\r
+       CMP EAX,256\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_48\r
+       XOR EAX,EAX\r
+       MOV _hd_nsectors, AL\r
+L_48:\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       XOR ECX,ECX\r
+       CMP EAX,ECX\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_49\r
+       XOR EAX,EAX\r
+       MOV AL,_hd0_heads\r
+       XOR ECX,ECX\r
+       MOV CL,_hd0_secpertrk\r
+       MUL ECX\r
+       MOV ECX,EAX\r
+       MOV EAX,DWORD PTR [EBP+12]\r
+       XOR EDX,EDX\r
+       DIV ECX\r
+       MOV WORD PTR [EBP-6], AX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd0_heads\r
+       XOR ECX,ECX\r
+       MOV CL,_hd0_secpertrk\r
+       MUL ECX\r
+       MOV ECX,EAX\r
+       MOV EAX,DWORD PTR [EBP+12]\r
+       XOR EDX,EDX\r
+       DIV ECX\r
+       MOV EAX,EDX\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       XOR ECX,ECX\r
+       MOV CL,_hd0_secpertrk\r
+       XOR EDX,EDX\r
+       DIV ECX\r
+       MOV _hd_head, AL\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       XOR ECX,ECX\r
+       MOV CL,_hd0_secpertrk\r
+       XOR EDX,EDX\r
+       DIV ECX\r
+       MOV EAX,EDX\r
+       ADD EAX,1\r
+       MOV _hd_sector, AL\r
+       JMP L_50\r
+L_49:\r
+       XOR EAX,EAX\r
+       MOV AL,_hd1_heads\r
+       XOR ECX,ECX\r
+       MOV CL,_hd1_secpertrk\r
+       MUL ECX\r
+       MOV ECX,EAX\r
+       MOV EAX,DWORD PTR [EBP+12]\r
+       XOR EDX,EDX\r
+       DIV ECX\r
+       MOV WORD PTR [EBP-6], AX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd1_heads\r
+       XOR ECX,ECX\r
+       MOV CL,_hd1_secpertrk\r
+       MUL ECX\r
+       MOV ECX,EAX\r
+       MOV EAX,DWORD PTR [EBP+12]\r
+       XOR EDX,EDX\r
+       DIV ECX\r
+       MOV EAX,EDX\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       XOR ECX,ECX\r
+       MOV CL,_hd1_secpertrk\r
+       XOR EDX,EDX\r
+       DIV ECX\r
+       MOV _hd_head, AL\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       XOR ECX,ECX\r
+       MOV CL,_hd1_secpertrk\r
+       XOR EDX,EDX\r
+       DIV ECX\r
+       MOV EAX,EDX\r
+       ADD EAX,1\r
+       MOV _hd_sector, AL\r
+L_50:\r
+       MOV EAX,2\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       MOV EAX,DWORD PTR [EBP+8]\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,3\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_sector\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,4\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       MOVZX EAX,WORD PTR [EBP-6]\r
+       MOV ECX,255\r
+       AND EAX,ECX\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,5\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       MOVZX EAX,WORD PTR [EBP-6]\r
+       MOV ECX,8\r
+       SHR AX,CL\r
+       MOV ECX,255\r
+       AND EAX,ECX\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,6\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       MOV ECX,4\r
+       SHL EAX,CL\r
+       AND EAX,0FFh\r
+       MOV EBX,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_head\r
+       MOV ECX,15\r
+       AND EAX,ECX\r
+       MOV ECX,EBX\r
+       OR EAX,ECX\r
+       MOV ECX,160\r
+       OR EAX,ECX\r
+       MOV BYTE PTR [ESI], AL\r
+       XOR EAX,EAX\r
+L_46:\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 8\r
+_hd_seek:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,4\r
+       PUSH DWORD PTR [EBP+8]\r
+       PUSH 1\r
+       CALL _setupseek\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_51\r
+       PUSH 112\r
+       CALL _send_command\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_51:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_52\r
+       CALL _hd_wait\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_52:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_53\r
+       PUSH 112\r
+       CALL _hd_status\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_53:\r
+       MOV ESI,OFFSET _hdstatus\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV DWORD PTR [ESI+36], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 4\r
+_hd_status:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,6\r
+       CALL _check_busy\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_55\r
+       PUSH 503\r
+       CALL FWORD PTR _InByte\r
+       MOV BYTE PTR [EBP-5], AL\r
+       JMP L_56\r
+L_55:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       JMP L_57\r
+L_56:\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       AND EAX,EAX\r
+       JZ L_58\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-5]\r
+       MOV BYTE PTR [ESI+52], AL\r
+       JMP L_59\r
+L_58:\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-5]\r
+       MOV BYTE PTR [ESI+40], AL\r
+L_59:\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-5]\r
+       MOV ECX,1\r
+       AND EAX,ECX\r
+       XOR ECX,ECX\r
+       CMP EAX,ECX\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_60\r
+       XOR EAX,EAX\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP+8]\r
+       JMP L_62\r
+L_63:\r
+L_64:\r
+L_65:\r
+L_66:\r
+L_67:\r
+L_68:\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-5]\r
+       MOV ECX,32\r
+       AND EAX,ECX\r
+       JZ L_69\r
+       MOV EAX,672\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_70\r
+L_69:\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-5]\r
+       MOV ECX,16\r
+       AND EAX,ECX\r
+       XOR ECX,ECX\r
+       CMP EAX,ECX\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_71\r
+       MOV EAX,659\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_71:\r
+L_70:\r
+       JMP L_61\r
+L_72:\r
+L_73:\r
+L_74:\r
+L_75:\r
+       JMP L_61\r
+L_76:\r
+       JMP L_61\r
+L_62:\r
+       CMP EAX,144\r
+       JE L_75\r
+       CMP EAX,80\r
+       JE L_74\r
+       CMP EAX,64\r
+       JE L_73\r
+       CMP EAX,145\r
+       JE L_72\r
+       CMP EAX,16\r
+       JE L_68\r
+       CMP EAX,112\r
+       JE L_67\r
+       CMP EAX,50\r
+       JE L_66\r
+       CMP EAX,48\r
+       JE L_65\r
+       CMP EAX,34\r
+       JE L_64\r
+       CMP EAX,32\r
+       JE L_63\r
+       JMP L_76\r
+L_61:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       JMP L_57\r
+L_60:\r
+       CALL _check_busy\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_78\r
+       PUSH 497\r
+       CALL FWORD PTR _InByte\r
+       MOV BYTE PTR [EBP-6], AL\r
+       JMP L_79\r
+L_78:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       JMP L_57\r
+L_79:\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       AND EAX,EAX\r
+       JZ L_80\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-6]\r
+       MOV BYTE PTR [ESI+53], AL\r
+       JMP L_81\r
+L_80:\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-6]\r
+       MOV BYTE PTR [ESI+41], AL\r
+L_81:\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-6]\r
+       MOV ECX,1\r
+       AND EAX,ECX\r
+       JZ L_82\r
+       MOV EAX,652\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_83\r
+L_82:\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-6]\r
+       MOV ECX,2\r
+       AND EAX,ECX\r
+       JZ L_84\r
+       MOV EAX,659\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_85\r
+L_84:\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-6]\r
+       MOV ECX,4\r
+       AND EAX,ECX\r
+       JZ L_86\r
+       MOV EAX,668\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_87\r
+L_86:\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-6]\r
+       MOV ECX,16\r
+       AND EAX,ECX\r
+       JZ L_88\r
+       MOV EAX,654\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_89\r
+L_88:\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-6]\r
+       MOV ECX,64\r
+       AND EAX,ECX\r
+       JZ L_90\r
+       MOV EAX,653\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_91\r
+L_90:\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [EBP-6]\r
+       MOV ECX,128\r
+       AND EAX,ECX\r
+       JZ L_92\r
+       MOV EAX,651\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_93\r
+L_92:\r
+       MOV EAX,658\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_93:\r
+L_91:\r
+L_89:\r
+L_87:\r
+L_85:\r
+L_83:\r
+L_77:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+L_57:\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 4\r
+_hd_read:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,12\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       MOV ECX,64\r
+       MUL ECX\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOVSX EAX,WORD PTR [ESI+14]\r
+       MOV DWORD PTR [EBP-12], EAX\r
+       MOV EAX,DWORD PTR [EBP+12]\r
+       MOV DWORD PTR [EBP-8], EAX\r
+       PUSH DWORD PTR [EBP+16]\r
+       PUSH DWORD PTR [EBP+12]\r
+       CALL _setupseek\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_94\r
+       PUSH 32\r
+       CALL _send_command\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_94:\r
+L_95:\r
+       MOV EAX,DWORD PTR [EBP-8]\r
+       AND EAX,EAX\r
+       JZ L_97\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       SETZ AL\r
+       AND AL,AL\r
+L_97:\r
+       JZ L_96\r
+       CALL _hd_wait\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_98\r
+       PUSH 32\r
+       CALL _hd_status\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_98:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_99\r
+       PUSH 496\r
+       PUSH DWORD PTR [EBP+8]\r
+       PUSH DWORD PTR [EBP-12]\r
+       CALL FWORD PTR _InWords\r
+       MOV EAX,DWORD PTR [EBP+8]\r
+       ADD EAX,DWORD PTR [EBP-12]\r
+       MOV DWORD PTR [EBP+8], EAX\r
+       DEC DWORD PTR [EBP-8]\r
+       MOV EAX,DWORD PTR [EBP-8]\r
+L_99:\r
+       JMP L_95\r
+L_96:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 12\r
+_hd_write:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,12\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       MOV ECX,64\r
+       MUL ECX\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOVSX EAX,WORD PTR [ESI+14]\r
+       MOV DWORD PTR [EBP-12], EAX\r
+       XOR EAX,EAX\r
+       MOV DWORD PTR [EBP-8], EAX\r
+       PUSH DWORD PTR [EBP+16]\r
+       PUSH DWORD PTR [EBP+12]\r
+       CALL _setupseek\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       PUSH 48\r
+       CALL _send_command\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       CALL _check_busy\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       SETZ AL\r
+       AND AL,AL\r
+       JZ L_101\r
+       XOR EAX,EAX\r
+       MOV AL,_statbyte\r
+       MOV ECX,8\r
+       AND EAX,ECX\r
+L_101:\r
+       JZ L_102\r
+       PUSH 496\r
+       PUSH DWORD PTR [EBP+8]\r
+       PUSH DWORD PTR [EBP-12]\r
+       CALL FWORD PTR _OutWords\r
+       MOV EAX,DWORD PTR [EBP+8]\r
+       ADD EAX,DWORD PTR [EBP-12]\r
+       MOV DWORD PTR [EBP+8], EAX\r
+       MOV EAX,DWORD PTR [EBP-8]\r
+       INC DWORD PTR [EBP-8]\r
+L_102:\r
+L_103:\r
+       MOV EAX,DWORD PTR [EBP-8]\r
+       CMP EAX,DWORD PTR [EBP+12]\r
+       SETB AL\r
+       AND AL,AL\r
+       JZ L_105\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       CMP EAX,0\r
+       SETE AL\r
+       AND AL,AL\r
+L_105:\r
+       JZ L_104\r
+       CALL _hd_wait\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       CMP EAX,0\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_106\r
+       PUSH 48\r
+       CALL _hd_status\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_106:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       CMP EAX,0\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_107\r
+       XOR EAX,EAX\r
+       MOV AL,_statbyte\r
+       MOV ECX,8\r
+       AND EAX,ECX\r
+L_107:\r
+       JZ L_108\r
+       PUSH 496\r
+       PUSH DWORD PTR [EBP+8]\r
+       PUSH DWORD PTR [EBP-12]\r
+       CALL FWORD PTR _OutWords\r
+       MOV EAX,DWORD PTR [EBP+8]\r
+       ADD EAX,DWORD PTR [EBP-12]\r
+       MOV DWORD PTR [EBP+8], EAX\r
+       MOV EAX,DWORD PTR [EBP-8]\r
+       INC DWORD PTR [EBP-8]\r
+L_108:\r
+       JMP L_103\r
+L_104:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_109\r
+       CALL _hd_wait\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_109:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_110\r
+       PUSH 48\r
+       CALL _hd_status\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_110:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 12\r
+_hd_format_track:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,4\r
+       PUSH DWORD PTR [EBP+12]\r
+       PUSH DWORD PTR [EBP+8]\r
+       CALL _setupseek\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       PUSH 80\r
+       CALL _send_command\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       CALL _hd_wait\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       CMP EAX,0\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_112\r
+       PUSH 80\r
+       CALL _hd_status\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_112:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 8\r
+_ReadSector:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,6\r
+       MOV EAX,DWORD PTR [EBP+16]\r
+       MOV WORD PTR [EBP-6], AX\r
+       MOV EAX,DWORD PTR [EBP+12]\r
+       AND EAX,65535\r
+       MOV _hd_head, AL\r
+       MOV EAX,DWORD PTR [EBP+12]\r
+       MOV ECX,16\r
+       SHR EAX,CL\r
+       AND EAX,65535\r
+       MOV _hd_sector, AL\r
+       MOV EAX,2\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       MOV EAX,1\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,3\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_sector\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,4\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       MOVZX EAX,WORD PTR [EBP-6]\r
+       MOV ECX,255\r
+       AND EAX,ECX\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,5\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       MOVZX EAX,WORD PTR [EBP-6]\r
+       MOV ECX,8\r
+       SHR AX,CL\r
+       MOV ECX,255\r
+       AND EAX,ECX\r
+       MOV BYTE PTR [ESI], AL\r
+       MOV EAX,6\r
+       MOV ESI,OFFSET _hd_Cmd\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       MOV ECX,4\r
+       SHL EAX,CL\r
+       AND EAX,0FFh\r
+       MOV EBX,EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_head\r
+       MOV ECX,15\r
+       AND EAX,ECX\r
+       MOV ECX,EBX\r
+       OR EAX,ECX\r
+       MOV ECX,160\r
+       OR EAX,ECX\r
+       MOV BYTE PTR [ESI], AL\r
+       PUSH 32\r
+       CALL _send_command\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       CALL _hd_wait\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_114\r
+       PUSH 32\r
+       CALL _hd_status\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_114:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_115\r
+       PUSH 496\r
+       PUSH DWORD PTR [EBP+8]\r
+       PUSH 512\r
+       CALL FWORD PTR _InWords\r
+L_115:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 12\r
+_hddev_op:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,4\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV DWORD PTR [ESI+4], EAX\r
+       XOR EAX,EAX\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP+24]\r
+       CMP EAX,12\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_117\r
+       XOR EAX,EAX\r
+       MOV _hd_drive, AL\r
+       JMP L_118\r
+L_117:\r
+       MOV EAX,1\r
+       MOV _hd_drive, AL\r
+L_118:\r
+       PUSH _hd_exch\r
+       PUSH OFFSET _hd_msg\r
+       CALL FWORD PTR _CheckMsg\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       XOR ECX,ECX\r
+       CMP EAX,ECX\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_119\r
+       XOR EAX,EAX\r
+       MOV AL,_hd0_type\r
+       XOR ECX,ECX\r
+       CMP EAX,ECX\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_120\r
+       MOV EAX,663\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_120:\r
+       JMP L_121\r
+L_119:\r
+       XOR EAX,EAX\r
+       MOV AL,_hd1_type\r
+       XOR ECX,ECX\r
+       CMP EAX,ECX\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_122\r
+       MOV EAX,663\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_122:\r
+L_121:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_123\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       MOV ECX,64\r
+       MUL ECX\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,DWORD PTR [EBP+16]\r
+       CMP EAX,DWORD PTR [ESI+20]\r
+       SETA AL\r
+       AND AL,AL\r
+       JZ L_124\r
+       MOV EAX,662\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_124:\r
+L_123:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_125\r
+       MOV EAX,DWORD PTR [EBP+20]\r
+       JMP L_127\r
+L_128:\r
+       XOR EAX,EAX\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_126\r
+L_129:\r
+       PUSH DWORD PTR [EBP+16]\r
+       PUSH DWORD PTR [EBP+12]\r
+       PUSH DWORD PTR [EBP+8]\r
+       CALL _hd_read\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_126\r
+L_130:\r
+       PUSH DWORD PTR [EBP+16]\r
+       PUSH DWORD PTR [EBP+12]\r
+       PUSH DWORD PTR [EBP+8]\r
+       CALL _hd_write\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_126\r
+L_131:\r
+       MOV EAX,656\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_126\r
+L_132:\r
+       PUSH DWORD PTR [EBP+16]\r
+       CALL _hd_seek\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_126\r
+L_133:\r
+       PUSH DWORD PTR [EBP+16]\r
+       PUSH DWORD PTR [EBP+12]\r
+       CALL _hd_format_track\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_126\r
+L_134:\r
+       CALL _hd_reset\r
+       XOR EAX,EAX\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_126\r
+L_135:\r
+       PUSH DWORD PTR [EBP+16]\r
+       PUSH DWORD PTR [EBP+12]\r
+       PUSH DWORD PTR [EBP+8]\r
+       CALL _ReadSector\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_126\r
+L_136:\r
+       MOV EAX,664\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_126\r
+L_127:\r
+       CMP EAX,256\r
+       JE L_135\r
+       CMP EAX,8\r
+       JE L_134\r
+       CMP EAX,5\r
+       JE L_133\r
+       CMP EAX,6\r
+       JE L_132\r
+       CMP EAX,3\r
+       JE L_131\r
+       CMP EAX,2\r
+       JE L_130\r
+       CMP EAX,1\r
+       JE L_129\r
+       CMP EAX,0\r
+       JE L_128\r
+       JMP L_136\r
+L_126:\r
+L_125:\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       MOV ECX,64\r
+       MUL ECX\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV DWORD PTR [ESI+16], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+L_137:\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 20\r
+_hddev_stat:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,4\r
+       MOV EAX,DWORD PTR [EBP+20]\r
+       CMP EAX,12\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_138\r
+       MOV ESI,OFFSET _hdstatus\r
+       MOV EBX,ESI\r
+       MOV ESI,OFFSET _hdcb\r
+       MOV EAX,DWORD PTR [ESI+16]\r
+       MOV DWORD PTR [EBX], EAX\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,_hd0_type\r
+       MOV BYTE PTR [ESI+13], AL\r
+       MOV ESI,OFFSET _hdstatus\r
+       MOVZX EAX,_hd0_cyls\r
+       MOV DWORD PTR [ESI+16], EAX\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,_hd0_heads\r
+       MOV DWORD PTR [ESI+20], EAX\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,_hd0_secpertrk\r
+       MOV DWORD PTR [ESI+24], EAX\r
+       MOV ESI,OFFSET _hdstatus\r
+       MOV EBX,ESI\r
+       MOV ESI,OFFSET _hdcb\r
+       MOVSX EAX,WORD PTR [ESI+14]\r
+       MOV DWORD PTR [EBX+28], EAX\r
+       JMP L_139\r
+L_138:\r
+       MOV ESI,OFFSET _hdstatus\r
+       MOV EAX,64\r
+       MOV EBX,ESI\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,DWORD PTR [ESI+16]\r
+       MOV DWORD PTR [EBX], EAX\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,_hd1_type\r
+       MOV BYTE PTR [ESI+13], AL\r
+       MOV ESI,OFFSET _hdstatus\r
+       MOVZX EAX,_hd1_cyls\r
+       MOV DWORD PTR [ESI+16], EAX\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,_hd1_heads\r
+       MOV DWORD PTR [ESI+20], EAX\r
+       MOV ESI,OFFSET _hdstatus\r
+       XOR EAX,EAX\r
+       MOV AL,_hd1_secpertrk\r
+       MOV DWORD PTR [ESI+24], EAX\r
+       MOV ESI,OFFSET _hdstatus\r
+       MOV EAX,64\r
+       MOV EBX,ESI\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOVSX EAX,WORD PTR [ESI+14]\r
+       MOV DWORD PTR [EBX+28], EAX\r
+L_139:\r
+       MOV EAX,DWORD PTR [EBP+12]\r
+       CMP EAX,64\r
+       SETBE AL\r
+       AND AL,AL\r
+       JZ L_140\r
+       MOV EAX,DWORD PTR [EBP+12]\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       JMP L_141\r
+L_140:\r
+       MOV EAX,64\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_141:\r
+       PUSH OFFSET _hdstatus\r
+       PUSH DWORD PTR [EBP+16]\r
+       PUSH DWORD PTR [EBP-4]\r
+       CALL FWORD PTR _CopyData\r
+       MOV ESI,DWORD PTR [EBP+8]\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV DWORD PTR [ESI], EAX\r
+       XOR EAX,EAX\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 16\r
+_hddev_init:\r
+       PUSH EBP\r
+       MOV EBP,ESP\r
+       SUB ESP,8\r
+       XOR EAX,EAX\r
+       MOV DWORD PTR [EBP-4], EAX\r
+       MOV EAX,DWORD PTR [EBP+8]\r
+       CMP EAX,64\r
+       SETA AL\r
+       AND AL,AL\r
+       JZ L_143\r
+       MOV EAX,64\r
+       MOV DWORD PTR [EBP-8], EAX\r
+       JMP L_144\r
+L_143:\r
+       MOV EAX,DWORD PTR [EBP+8]\r
+       MOV DWORD PTR [EBP-8], EAX\r
+L_144:\r
+       PUSH DWORD PTR [EBP+12]\r
+       PUSH OFFSET _HDStatTmp\r
+       PUSH DWORD PTR [EBP-8]\r
+       CALL FWORD PTR _CopyData\r
+       MOV EAX,DWORD PTR [EBP+16]\r
+       CMP EAX,12\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_145\r
+       XOR EAX,EAX\r
+       MOV _hd_drive, AL\r
+       JMP L_146\r
+L_145:\r
+       MOV EAX,1\r
+       MOV _hd_drive, AL\r
+L_146:\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       XOR ECX,ECX\r
+       CMP EAX,ECX\r
+       SETE AL\r
+       AND AL,AL\r
+       JZ L_147\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [ESI+13]\r
+       MOV _hd0_type, AL\r
+       XOR EAX,EAX\r
+       MOV AL,_hd0_type\r
+       AND EAX,EAX\r
+       JZ L_148\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       MOV EAX,DWORD PTR [ESI+16]\r
+       MOV _hd0_cyls, AX\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       MOV EAX,DWORD PTR [ESI+20]\r
+       MOV _hd0_heads, AL\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       MOV EAX,DWORD PTR [ESI+24]\r
+       MOV _hd0_secpertrk, AL\r
+       JMP L_149\r
+L_148:\r
+       MOV EAX,663\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_149:\r
+       JMP L_150\r
+L_147:\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       XOR EAX,EAX\r
+       MOV AL,BYTE PTR [ESI+13]\r
+       MOV _hd1_type, AL\r
+       XOR EAX,EAX\r
+       MOV AL,_hd1_type\r
+       AND EAX,EAX\r
+       JZ L_151\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       MOV EAX,DWORD PTR [ESI+16]\r
+       MOV _hd1_cyls, AX\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       MOV EAX,DWORD PTR [ESI+20]\r
+       MOV _hd1_heads, AL\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       MOV EAX,DWORD PTR [ESI+24]\r
+       MOV _hd1_secpertrk, AL\r
+       JMP L_152\r
+L_151:\r
+       MOV EAX,663\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_152:\r
+L_150:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_153\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       PUSH EAX\r
+       CALL _hd_init\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_153:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_154\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       PUSH EAX\r
+       CALL _hd_recal\r
+       MOV DWORD PTR [EBP-4], EAX\r
+L_154:\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       AND EAX,EAX\r
+       JNZ L_155\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       MOV ECX,64\r
+       MUL ECX\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EBX,ESI\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       MOV EAX,DWORD PTR [ESI+28]\r
+       MOV WORD PTR [EBX+14], AX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       MOV ECX,64\r
+       MUL ECX\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       XOR EAX,EAX\r
+       MOV DWORD PTR [ESI+16], EAX\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       MOV ECX,64\r
+       MUL ECX\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EBX,ESI\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       PUSH EBX\r
+       MOV EBX,ESI\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       MOV EAX,DWORD PTR [EBX+16]\r
+       MOV ECX,DWORD PTR [ESI+24]\r
+       MUL ECX\r
+       MOV EBX,EAX\r
+       MOV ESI,OFFSET _HDStatTmp\r
+       MOV EAX,EBX\r
+       MOV ECX,DWORD PTR [ESI+20]\r
+       MUL ECX\r
+       POP EDX\r
+       MOV DWORD PTR [EDX+20], EAX\r
+L_155:\r
+       XOR EAX,EAX\r
+       MOV AL,_hd_drive\r
+       MOV ECX,64\r
+       MUL ECX\r
+       MOV ESI,OFFSET _hdcb\r
+       ADD ESI,EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV DWORD PTR [ESI+16], EAX\r
+       MOV EAX,DWORD PTR [EBP-4]\r
+       MOV ESP,EBP\r
+       POP EBP\r
+       RETN 12\r