--- /dev/null
+\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