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