.DATA EXTRN _SpawnTask FWORD EXTRN _AllocExch FWORD EXTRN _AllocDMAPage FWORD EXTRN _InitDevDr FWORD EXTRN _DmaSetUp 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 _GetTimerTick 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 _fdisk_table DB 175,2,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,175,2,0,2,9,42 DB -1,80,246,15,8,39,2,0,0,0,175 DB 2,0,2,15,27,-1,84,246,15,8,79 DB 0,0,0,0,175,2,0,2,9,42,-1 DB 80,246,15,8,79,2,0,0,0,175,2 DB 0,2,18,27,-1,108,246,15,8,79,0 DB 0,0,0 _rgSectorMax DD 0,720,2400,1440,2880,0,0,0,0,0 _MotorStk DD 100 DUP(0) _MotorStkTop DD 0h _fd_fdc_command DB 0h _fd_drive DB 0h _fd_nr_sectors DB 0h _fd_head DB 0h _fd_sector DB 0h _fd_track DB 0h _seek_status DB 0h _fwrite DB 0h _fd_pData DD 0h _type0 DB 0h _type1 DB 0h _fdstatus DB 64 DUP(0) _FDStatTmp DB 64 DUP(0) _FDC_STATUS DB 8 DUP(0) _LAST_TRACK DB 3 DUP(0) _fdcb DB 128 DUP(0) _dor_crnt DB 0h _motor0_want DB 0h _motor1_want DB 0h _fd_tick DD 0h _fd_newtick DD 0h _fd_exch DD 0h _fd_msg DD 2 DUP(0) _sectbuf DD 0h _physectbuf DD 0h .CODE EXTRN _xprintf: NEAR _enable_ints: PUSH EBP MOV EBP,ESP STI POP EBP RETN _disable_ints: PUSH EBP MOV EBP,ESP CLI POP EBP RETN _fdmotor_task: PUSH EBP MOV EBP,ESP CALL _enable_ints L_1: PUSH 300 CALL FWORD PTR _Sleep PUSH OFFSET _fd_newtick CALL FWORD PTR _GetTimerTick MOV EAX,_fd_newtick SUB EAX,_fd_tick CMP EAX,300 SETA AL AND AL,AL JZ L_2 XOR EAX,EAX MOV AL,_motor0_want AND EAX,EAX SETZ AL AND AL,AL JZ L_3 XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,16 AND EAX,ECX L_3: JZ L_4 CALL _disable_ints XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,-17 AND EAX,ECX MOV _dor_crnt, AL XOR EAX,EAX MOV AL,_dor_crnt PUSH EAX PUSH 1010 CALL FWORD PTR _OutByte CALL _enable_ints L_4: XOR EAX,EAX MOV AL,_motor1_want AND EAX,EAX SETZ AL AND AL,AL JZ L_5 XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,32 AND EAX,ECX L_5: JZ L_6 CALL _disable_ints XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,-33 AND EAX,ECX MOV _dor_crnt, AL XOR EAX,EAX MOV AL,_dor_crnt PUSH EAX PUSH 1010 CALL FWORD PTR _OutByte CALL _enable_ints L_6: L_2: JMP L_1 POP EBP RETN _fd_select: PUSH EBP MOV EBP,ESP SUB ESP,2 PUSH OFFSET _fd_tick CALL FWORD PTR _GetTimerTick XOR EAX,EAX MOV BYTE PTR [EBP-1], AL XOR EAX,EAX MOV BYTE PTR [EBP-2], AL MOV EAX,DWORD PTR [EBP+8] AND EAX,EAX JZ L_7 XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,1 AND EAX,ECX JNZ L_8 MOV EAX,1 MOV BYTE PTR [EBP-1], AL XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,1 OR EAX,ECX MOV _dor_crnt, AL L_8: XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,32 AND EAX,ECX JNZ L_9 MOV EAX,1 MOV BYTE PTR [EBP-1], AL MOV EAX,1 MOV BYTE PTR [EBP-2], AL XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,32 OR EAX,ECX MOV _dor_crnt, AL L_9: JMP L_10 L_7: XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,1 AND EAX,ECX JZ L_11 MOV EAX,1 MOV BYTE PTR [EBP-1], AL XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,254 AND EAX,ECX MOV _dor_crnt, AL L_11: XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,16 AND EAX,ECX JNZ L_12 MOV EAX,1 MOV BYTE PTR [EBP-1], AL MOV EAX,1 MOV BYTE PTR [EBP-2], AL XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,16 OR EAX,ECX MOV _dor_crnt, AL L_12: L_10: XOR EAX,EAX MOV AL,BYTE PTR [EBP-1] AND EAX,EAX JZ L_13 CALL _disable_ints XOR EAX,EAX MOV AL,_dor_crnt PUSH EAX PUSH 1010 CALL FWORD PTR _OutByte CALL _enable_ints XOR EAX,EAX MOV AL,BYTE PTR [EBP-2] AND EAX,EAX JZ L_14 PUSH 33 CALL FWORD PTR _Sleep L_14: L_13: MOV ESP,EBP POP EBP RETN 4 _fd_motoroff: PUSH EBP MOV EBP,ESP MOV EAX,DWORD PTR [EBP+8] AND EAX,EAX JZ L_15 XOR EAX,EAX MOV _motor1_want, AL JMP L_16 L_15: XOR EAX,EAX MOV _motor0_want, AL L_16: POP EBP RETN 4 PUBLIC _fdisk_setup: PUSH EBP MOV EBP,ESP SUB ESP,4 MOV ESI,OFFSET _fdcb MOV EAX,70 MOV BYTE PTR [ESI], AL MOV ESI,OFFSET _fdcb MOV EAX,1 ADD ESI,EAX MOV EAX,68 MOV BYTE PTR [ESI], AL MOV ESI,OFFSET _fdcb MOV EAX,2 ADD ESI,EAX MOV EAX,48 MOV BYTE PTR [ESI], AL MOV ESI,OFFSET _fdcb MOV EAX,3 MOV BYTE PTR [ESI+12], AL MOV ESI,OFFSET _fdcb MOV EAX,1 MOV BYTE PTR [ESI+13], AL MOV ESI,OFFSET _fdcb XOR EAX,EAX MOV BYTE PTR [ESI+36], AL MOV ESI,OFFSET _fdcb XOR EAX,EAX MOV BYTE PTR [ESI+37], AL MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX MOV EAX,70 MOV BYTE PTR [ESI], AL MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX MOV EAX,1 ADD ESI,EAX MOV EAX,68 MOV BYTE PTR [ESI], AL MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX MOV EAX,2 ADD ESI,EAX MOV EAX,49 MOV BYTE PTR [ESI], AL MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX MOV EAX,3 MOV BYTE PTR [ESI+12], AL MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX MOV EAX,1 MOV BYTE PTR [ESI+13], AL MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX XOR EAX,EAX MOV BYTE PTR [ESI+36], AL MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX XOR EAX,EAX MOV BYTE PTR [ESI+37], AL XOR EAX,EAX MOV AL,_dor_crnt MOV ECX,12 OR EAX,ECX MOV _dor_crnt, AL XOR EAX,EAX MOV _motor0_want, AL XOR EAX,EAX MOV _motor1_want, AL XOR EAX,EAX MOV _seek_status, AL MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV DWORD PTR [ESI], EAX PUSH OFFSET _fd_exch CALL FWORD PTR _AllocExch 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 1 PUSH OFFSET _sectbuf PUSH OFFSET _physectbuf CALL FWORD PTR _AllocDMAPage MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JZ L_19 MOV EAX,DWORD PTR [EBP-4] JMP L_18 L_19: PUSH OFFSET _fdmotor_task PUSH 18 XOR EAX,EAX PUSH EAX PUSH OFFSET _MotorStkTop PUSH 1 CALL FWORD PTR _SpawnTask PUSH 6 PUSH OFFSET _fdisk_isr CALL FWORD PTR _SetIRQVector PUSH 6 CALL FWORD PTR _UnMaskIRQ XOR EAX,EAX PUSH EAX CALL _cmos_type MOV _type0, AL XOR EAX,EAX MOV AL,_type0 AND EAX,EAX JZ L_20 MOV ESI,OFFSET _fdcb MOV EAX,512 MOV WORD PTR [ESI+14], AX MOV ESI,OFFSET _fdcb XOR EAX,EAX MOV AL,_type0 SHL EAX,2 MOV EBX,ESI MOV ESI,OFFSET _rgSectorMax ADD ESI,EAX MOV EAX,DWORD PTR [ESI] MOV DWORD PTR [EBX+20], EAX L_20: PUSH 1 CALL _cmos_type MOV _type1, AL XOR EAX,EAX MOV AL,_type1 AND EAX,EAX JZ L_21 MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX MOV EAX,512 MOV WORD PTR [ESI+14], AX MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX XOR EAX,EAX MOV AL,_type1 SHL EAX,2 MOV EBX,ESI MOV ESI,OFFSET _rgSectorMax ADD ESI,EAX MOV EAX,DWORD PTR [ESI] MOV DWORD PTR [EBX+20], EAX L_21: MOV ESI,OFFSET _fdstatus MOV EBX,ESI PUSH EBX CALL _FDC_reset POP EDX MOV DWORD PTR [EDX], EAX AND EAX,EAX JZ L_22 MOV ESI,OFFSET _fdstatus MOV EAX,DWORD PTR [ESI] JMP L_18 L_22: XOR EAX,EAX MOV AL,_type0 AND EAX,EAX JZ L_23 XOR EAX,EAX MOV _fd_drive, AL XOR EAX,EAX PUSH EAX CALL _fd_select CALL _recal MOV DWORD PTR [EBP-4], EAX AND EAX,EAX JZ L_24 CALL _recal MOV DWORD PTR [EBP-4], EAX L_24: XOR EAX,EAX PUSH EAX CALL _fd_motoroff MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JZ L_25 MOV ESI,OFFSET _fdstatus MOV EAX,DWORD PTR [EBP-4] MOV DWORD PTR [ESI], EAX JMP L_18 L_25: L_23: XOR EAX,EAX MOV AL,_type1 AND EAX,EAX JZ L_26 MOV EAX,1 MOV _fd_drive, AL PUSH 1 CALL _fd_select CALL _recal MOV DWORD PTR [EBP-4], EAX AND EAX,EAX JZ L_27 CALL _recal MOV DWORD PTR [EBP-4], EAX L_27: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JZ L_28 MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX XOR EAX,EAX MOV BYTE PTR [ESI+13], AL L_28: PUSH 1 CALL _fd_motoroff L_26: MOV ESI,OFFSET _fdcb MOV EAX,OFFSET _dev_op MOV DWORD PTR [ESI+24], EAX MOV ESI,OFFSET _fdcb MOV EAX,OFFSET _dev_init MOV DWORD PTR [ESI+28], EAX MOV ESI,OFFSET _fdcb MOV EAX,OFFSET _dev_stat MOV DWORD PTR [ESI+32], EAX MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX MOV EAX,OFFSET _dev_op MOV DWORD PTR [ESI+24], EAX MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX MOV EAX,OFFSET _dev_init MOV DWORD PTR [ESI+28], EAX MOV EAX,64 MOV ESI,OFFSET _fdcb ADD ESI,EAX MOV EAX,OFFSET _dev_stat MOV DWORD PTR [ESI+32], EAX PUSH 10 PUSH OFFSET _fdcb PUSH 2 PUSH 1 CALL FWORD PTR _InitDevDr MOV DWORD PTR [EBP-4], EAX L_18: MOV ESP,EBP POP EBP RETN _FDC_reset: PUSH EBP MOV EBP,ESP SUB ESP,4 XOR EAX,EAX MOV _seek_status, AL CALL _disable_ints PUSH 8 PUSH 1010 CALL FWORD PTR _OutByte PUSH 75 CALL FWORD PTR _MicroDelay PUSH 12 PUSH 1010 CALL FWORD PTR _OutByte CALL _enable_ints CALL _wait_int MOV DWORD PTR [EBP-4], EAX AND EAX,EAX JZ L_29 MOV EAX,DWORD PTR [EBP-4] JMP L_30 L_29: PUSH 8 CALL _send_fdc MOV DWORD PTR [EBP-4], EAX AND EAX,EAX JZ L_31 MOV EAX,DWORD PTR [EBP-4] JMP L_30 L_31: PUSH 2 CALL _results MOV DWORD PTR [EBP-4], EAX AND EAX,EAX JZ L_32 MOV EAX,DWORD PTR [EBP-4] JMP L_30 L_32: MOV ESI,OFFSET _FDC_STATUS XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,192 AND EAX,ECX CMP EAX,192 SETE AL AND AL,AL JNZ L_33 MOV ESI,OFFSET _FDC_STATUS XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,192 AND EAX,ECX XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL L_33: JZ L_34 PUSH 3 CALL _send_fdc XOR EAX,EAX PUSH EAX CALL _GetParm PUSH EAX CALL _send_fdc PUSH 1 CALL _GetParm PUSH EAX CALL _send_fdc XOR EAX,EAX JMP L_30 L_34: MOV EAX,608 L_30: MOV ESP,EBP POP EBP RETN _fdisk_isr: PUSHAD PUSH _fd_exch PUSH -3 PUSH -3 CALL FWORD PTR _ISendMsg PUSH 6 CALL FWORD PTR _EndOfIRQ POPAD IRETD _cmos_type: PUSH EBP MOV EBP,ESP SUB ESP,1 XOR EAX,EAX MOV BYTE PTR [EBP-1], AL XOR EAX,EAX MOV AL,BYTE PTR [EBP+8] AND EAX,EAX JZ L_35 PUSH 16 CALL FWORD PTR _ReadCMOS MOV ECX,15 AND EAX,ECX MOV BYTE PTR [EBP-1], AL JMP L_36 L_35: PUSH 16 CALL FWORD PTR _ReadCMOS MOV ECX,4 SHR AL,CL MOV ECX,15 AND EAX,ECX MOV BYTE PTR [EBP-1], AL L_36: XOR EAX,EAX MOV AL,BYTE PTR [EBP-1] MOV ESP,EBP POP EBP RETN 4 _send_fdc: PUSH EBP MOV EBP,ESP SUB ESP,6 MOV EAX,100 MOV DWORD PTR [EBP-4], EAX L_38: PUSH 1012 CALL FWORD PTR _InByte MOV BYTE PTR [EBP-5], AL PUSH 100 CALL FWORD PTR _MicroDelay XOR EAX,EAX MOV AL,BYTE PTR [EBP-5] MOV ECX,128 AND EAX,ECX JZ L_41 XOR EAX,EAX MOV AL,BYTE PTR [EBP-5] MOV ECX,64 AND EAX,ECX JZ L_42 PUSH 1013 CALL FWORD PTR _InByte MOV BYTE PTR [EBP-6], AL PUSH 100 CALL FWORD PTR _MicroDelay JMP L_43 L_42: XOR EAX,EAX MOV AL,BYTE PTR [EBP+8] PUSH EAX PUSH 1013 CALL FWORD PTR _OutByte PUSH 100 CALL FWORD PTR _MicroDelay XOR EAX,EAX JMP L_44 L_43: L_41: L_39: MOV EAX,DWORD PTR [EBP-4] DEC DWORD PTR [EBP-4] AND EAX,EAX JNZ L_38 L_40: MOV EAX,616 L_44: MOV ESP,EBP POP EBP RETN 4 _GetParm: PUSH EBP MOV EBP,ESP MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,BYTE PTR [ESI+13] SHL EAX,4 XOR ECX,ECX MOV CL,BYTE PTR [EBP+8] ADD EAX,ECX MOV ESI,OFFSET _fdisk_table ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] POP EBP RETN 4 _wait_int: PUSH EBP MOV EBP,ESP SUB ESP,4 PUSH _fd_exch PUSH 300 CALL FWORD PTR _Alarm MOV DWORD PTR [EBP-4], EAX PUSH _fd_exch PUSH OFFSET _fd_msg CALL FWORD PTR _WaitMsg MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JZ L_46 PUSH _fd_exch CALL FWORD PTR _KillAlarm MOV EAX,DWORD PTR [EBP-4] JMP L_47 L_46: MOV ESI,OFFSET _fd_msg MOV EAX,DWORD PTR [ESI] CMP EAX,-3 SETNE AL AND AL,AL JZ L_48 MOV ESI,OFFSET _fdstatus MOV EAX,610 MOV DWORD PTR [ESI], EAX JMP L_47 L_48: PUSH _fd_exch CALL FWORD PTR _KillAlarm MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV DWORD PTR [ESI], EAX L_49: L_47: MOV ESP,EBP POP EBP RETN _recal: PUSH EBP MOV EBP,ESP SUB ESP,4 PUSH 7 CALL _send_fdc MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_50 XOR EAX,EAX MOV AL,_fd_drive PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_50: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_51 CALL _wait_int MOV DWORD PTR [EBP-4], EAX L_51: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_52 PUSH 8 CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_52: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_53 PUSH 2 CALL _results MOV DWORD PTR [EBP-4], EAX L_53: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_54 MOV ESI,OFFSET _FDC_STATUS XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,32 AND EAX,ECX JZ L_55 MOV EAX,1 MOV ESI,OFFSET _FDC_STATUS ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] AND EAX,EAX JZ L_56 MOV EAX,615 JMP L_57 L_56: XOR EAX,EAX JMP L_57 L_55: MOV EAX,609 JMP L_57 L_58: L_54: MOV EAX,DWORD PTR [EBP-4] L_57: MOV ESP,EBP POP EBP RETN _seek: PUSH EBP MOV EBP,ESP SUB ESP,4 MOV EAX,1 XOR ECX,ECX MOV CL,_fd_drive SHL EAX,CL AND EAX,0FFh XOR ECX,ECX MOV CL,_seek_status AND EAX,ECX XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL JZ L_59 CALL _recal AND EAX,EAX JZ L_60 CALL _recal MOV DWORD PTR [EBP-4], EAX AND EAX,EAX JZ L_61 MOV EAX,DWORD PTR [EBP-4] JMP L_62 L_61: L_60: MOV EAX,1 XOR ECX,ECX MOV CL,_fd_drive SHL EAX,CL AND EAX,0FFh XOR ECX,ECX MOV CL,_seek_status OR EAX,ECX MOV _seek_status, AL XOR EAX,EAX MOV AL,_fd_drive MOV ESI,OFFSET _LAST_TRACK ADD ESI,EAX XOR EAX,EAX MOV BYTE PTR [ESI], AL XOR EAX,EAX MOV AL,_fd_track XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL JZ L_63 CALL _wait_for_head XOR EAX,EAX JMP L_62 L_63: L_59: MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,BYTE PTR [ESI+13] SHL EAX,4 MOV ECX,14 ADD EAX,ECX MOV ESI,OFFSET _fdisk_table ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] XOR ECX,ECX CMP EAX,ECX SETNE AL AND AL,AL JZ L_64 XOR EAX,EAX MOV AL,_fd_track SHL EAX,1 MOV _fd_track, AL L_64: XOR EAX,EAX MOV AL,_fd_drive MOV ESI,OFFSET _LAST_TRACK ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] XOR ECX,ECX MOV CL,_fd_track CMP EAX,ECX SETE AL AND AL,AL JZ L_65 XOR EAX,EAX JMP L_62 L_65: XOR EAX,EAX MOV AL,_fd_drive MOV ESI,OFFSET _LAST_TRACK ADD ESI,EAX XOR EAX,EAX MOV AL,_fd_track MOV BYTE PTR [ESI], AL PUSH 15 CALL _send_fdc MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_66 XOR EAX,EAX MOV AL,_fd_head MOV ECX,2 SHL EAX,CL AND EAX,0FFh XOR ECX,ECX MOV CL,_fd_drive OR EAX,ECX PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_66: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_67 XOR EAX,EAX MOV AL,_fd_track PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_67: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_68 CALL _wait_int MOV DWORD PTR [EBP-4], EAX L_68: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_69 PUSH 8 CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_69: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_70 PUSH 2 CALL _results MOV DWORD PTR [EBP-4], EAX L_70: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_71 MOV ESI,OFFSET _FDC_STATUS XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,32 AND EAX,ECX JNZ L_72 MOV EAX,1 XOR ECX,ECX MOV CL,_fd_drive SHL EAX,CL AND EAX,0FFh NOT EAX XOR ECX,ECX MOV CL,_seek_status AND EAX,ECX MOV _seek_status, AL MOV EAX,609 MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] JMP L_62 L_72: L_71: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_73 CALL _wait_for_head L_73: XOR EAX,EAX L_62: MOV ESP,EBP POP EBP RETN _read_data: PUSH EBP MOV EBP,ESP SUB ESP,3 XOR EAX,EAX MOV WORD PTR [EBP-2], AX L_74: MOVZX EAX,WORD PTR [EBP-2] CMP EAX,1000 SETB AL AND AL,AL JZ L_75 JMP SHORT L_76 L_77: MOVZX EAX,WORD PTR [EBP-2] INC WORD PTR [EBP-2] JMP SHORT L_74 L_76: PUSH 1012 CALL FWORD PTR _InByte MOV BYTE PTR [EBP-3], AL PUSH 100 CALL FWORD PTR _MicroDelay XOR EAX,EAX MOV AL,BYTE PTR [EBP-3] MOV ECX,128 AND EAX,ECX JZ L_78 XOR EAX,EAX MOV AL,BYTE PTR [EBP-3] MOV ECX,64 AND EAX,ECX JZ L_79 MOV ESI,DWORD PTR [EBP+8] MOV EBX,ESI PUSH EBX PUSH 1013 CALL FWORD PTR _InByte POP EDX MOV BYTE PTR [EDX], AL PUSH 100 CALL FWORD PTR _MicroDelay MOV EAX,1 JMP L_80 L_79: L_78: JMP L_77 L_75: XOR EAX,EAX L_80: MOV ESP,EBP POP EBP RETN 4 _results: PUSH EBP MOV EBP,ESP SUB ESP,3 XOR EAX,EAX MOV WORD PTR [EBP-2], AX L_81: MOVZX EAX,WORD PTR [EBP-2] CMP EAX,DWORD PTR [EBP+8] SETB AL AND AL,AL JZ L_82 LEA EAX,BYTE PTR [EBP-3] PUSH EAX CALL _read_data AND EAX,EAX JZ L_83 MOVZX EAX,WORD PTR [EBP-2] INC WORD PTR [EBP-2] MOV ESI,OFFSET _FDC_STATUS ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [EBP-3] MOV BYTE PTR [ESI], AL PUSH 100 CALL FWORD PTR _MicroDelay JMP L_84 L_83: MOV EAX,617 JMP L_85 L_84: JMP L_81 L_82: XOR EAX,EAX L_85: MOV ESP,EBP POP EBP RETN 4 _purge_fdc: PUSH EBP MOV EBP,ESP SUB ESP,1 L_86: PUSH 1012 CALL FWORD PTR _InByte MOV BYTE PTR [EBP-1], AL XOR EAX,EAX MOV AL,BYTE PTR [EBP-1] MOV ECX,128 AND EAX,ECX JZ L_89 XOR EAX,EAX MOV AL,BYTE PTR [EBP-1] MOV ECX,64 AND EAX,ECX JZ L_90 PUSH 1013 CALL FWORD PTR _InByte PUSH 100 CALL FWORD PTR _MicroDelay JMP L_91 L_90: JMP L_92 L_91: JMP L_93 L_89: JMP L_92 L_93: L_87: MOV EAX,1 AND EAX,EAX JNZ L_86 L_88: L_92: MOV ESP,EBP POP EBP RETN _wait_for_head: PUSH EBP MOV EBP,ESP SUB ESP,4 XOR EAX,EAX MOV AL,_fwrite AND EAX,EAX JZ L_94 PUSH 9 CALL _GetParm MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] MOV ECX,1000 MUL ECX MOV ECX,15 XOR EDX,EDX DIV ECX MOV DWORD PTR [EBP-4], EAX PUSH DWORD PTR [EBP-4] CALL FWORD PTR _MicroDelay L_94: MOV ESP,EBP POP EBP RETN _med_change: PUSH EBP MOV EBP,ESP PUSH 1015 CALL FWORD PTR _InByte MOV ECX,128 AND EAX,ECX JZ L_95 MOV ESI,OFFSET _fdstatus MOV EAX,1 MOV BYTE PTR [ESI+12], AL MOV EAX,605 JMP L_96 L_95: MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV BYTE PTR [ESI+12], AL XOR EAX,EAX L_97: L_96: POP EBP RETN _get_fdc_status: PUSH EBP MOV EBP,ESP SUB ESP,4 CALL _wait_int MOV DWORD PTR [EBP-4], EAX AND EAX,EAX JZ L_98 MOV EAX,DWORD PTR [EBP-4] JMP L_99 L_98: PUSH 7 CALL _results MOV DWORD PTR [EBP-4], EAX AND EAX,EAX JZ L_100 MOV EAX,DWORD PTR [EBP-4] JMP L_99 L_100: MOV ESI,OFFSET _FDC_STATUS XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,192 AND EAX,ECX JNZ L_101 XOR EAX,EAX JMP L_99 L_101: MOV ESI,OFFSET _FDC_STATUS XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,192 AND EAX,ECX CMP EAX,128 SETE AL AND AL,AL JZ L_102 MOV EAX,618 JMP L_99 L_102: MOV ESI,OFFSET _FDC_STATUS XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,192 AND EAX,ECX CMP EAX,192 SETE AL AND AL,AL JZ L_103 MOV EAX,619 JMP L_99 L_103: MOV EAX,1 MOV ESI,OFFSET _FDC_STATUS ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,128 AND EAX,ECX JZ L_104 MOV EAX,604 MOV DWORD PTR [EBP-4], EAX JMP L_105 L_104: MOV EAX,1 MOV ESI,OFFSET _FDC_STATUS ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,32 AND EAX,ECX JZ L_106 MOV EAX,607 MOV DWORD PTR [EBP-4], EAX JMP L_107 L_106: MOV EAX,1 MOV ESI,OFFSET _FDC_STATUS ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,16 AND EAX,ECX JZ L_108 MOV EAX,611 MOV DWORD PTR [EBP-4], EAX JMP L_109 L_108: MOV EAX,1 MOV ESI,OFFSET _FDC_STATUS ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,4 AND EAX,ECX JZ L_110 MOV EAX,604 MOV DWORD PTR [EBP-4], EAX JMP L_111 L_110: MOV EAX,1 MOV ESI,OFFSET _FDC_STATUS ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,2 AND EAX,ECX JZ L_112 MOV EAX,603 MOV DWORD PTR [EBP-4], EAX JMP L_113 L_112: MOV EAX,1 MOV ESI,OFFSET _FDC_STATUS ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,1 AND EAX,ECX JZ L_114 MOV EAX,602 MOV DWORD PTR [EBP-4], EAX JMP L_115 L_114: MOV ESI,OFFSET _fdstatus MOV EAX,608 MOV DWORD PTR [ESI], EAX L_115: L_113: L_111: L_109: L_107: L_105: MOV EAX,DWORD PTR [EBP-4] L_99: MOV ESP,EBP POP EBP RETN _RdWrtVerf: PUSH EBP MOV EBP,ESP SUB ESP,10 XOR EAX,EAX MOV DWORD PTR [EBP-4], EAX MOV EAX,5 MOV BYTE PTR [EBP-6], AL XOR EAX,EAX MOV AL,_fd_nr_sectors MOV ECX,512 MUL ECX MOV DWORD PTR [EBP-10], EAX L_116: XOR EAX,EAX MOV AL,_fd_nr_sectors AND EAX,EAX JZ L_118 MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX SETZ AL AND AL,AL L_118: JZ L_117 MOV EAX,DWORD PTR [EBP+8] JMP L_120 L_121: MOV EAX,1 MOV BYTE PTR [EBP-5], AL MOV EAX,230 MOV _fd_fdc_command, AL JMP L_119 L_122: MOV EAX,1 MOV _fwrite, AL MOV EAX,2 MOV BYTE PTR [EBP-5], AL PUSH _fd_pData PUSH _sectbuf PUSH 512 CALL FWORD PTR _CopyData MOV EAX,197 MOV _fd_fdc_command, AL JMP L_119 L_123: XOR EAX,EAX MOV BYTE PTR [EBP-5], AL MOV EAX,230 MOV _fd_fdc_command, AL JMP L_119 L_120: CMP EAX,3 JE L_123 CMP EAX,2 JE L_122 CMP EAX,1 JE L_121 L_119: PUSH _physectbuf PUSH 512 PUSH 2 MOVSX EAX,BYTE PTR [EBP-5] PUSH EAX PUSH 1 CALL FWORD PTR _DmaSetUp MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_124 L_125: MOVSX EAX,BYTE PTR [EBP-6] DEC BYTE PTR [EBP-6] AND EAX,EAX JZ L_126 XOR EAX,EAX MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_127 CALL _seek MOV DWORD PTR [EBP-4], EAX L_127: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_128 XOR EAX,EAX MOV AL,_fd_fdc_command PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_128: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_129 XOR EAX,EAX MOV AL,_fd_head MOV ECX,2 SHL EAX,CL AND EAX,0FFh MOV ECX,4 AND EAX,ECX XOR ECX,ECX MOV CL,_fd_drive OR EAX,ECX PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_129: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_130 XOR EAX,EAX MOV AL,_fd_track PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_130: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_131 XOR EAX,EAX MOV AL,_fd_head PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_131: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_132 XOR EAX,EAX MOV AL,_fd_sector PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_132: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_133 PUSH 3 CALL _GetParm PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_133: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_134 PUSH 4 CALL _GetParm PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_134: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_135 PUSH 5 CALL _GetParm PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_135: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_136 PUSH 6 CALL _GetParm PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_136: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_137 CALL _get_fdc_status MOV DWORD PTR [EBP-4], EAX L_137: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_138 JMP L_126 L_138: PUSH 200 CALL FWORD PTR _MicroDelay JMP L_125 L_126: L_124: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_139 MOV EAX,DWORD PTR [EBP+8] CMP EAX,1 SETE AL AND AL,AL JZ L_140 PUSH _sectbuf PUSH _fd_pData PUSH 512 CALL FWORD PTR _CopyData L_140: MOV ESI,OFFSET _fdstatus MOV EAX,DWORD PTR [ESI+4] INC DWORD PTR [ESI+4] MOV EAX,_fd_pData ADD EAX,512 MOV _fd_pData, EAX DEC _fd_nr_sectors XOR EAX,EAX MOV AL,_fd_nr_sectors INC _fd_sector XOR EAX,EAX MOV AL,_fd_sector MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,BYTE PTR [ESI+13] SHL EAX,4 MOV ECX,4 ADD EAX,ECX MOV ESI,OFFSET _fdisk_table ADD ESI,EAX XOR EAX,EAX MOV AL,_fd_sector XOR ECX,ECX MOV CL,BYTE PTR [ESI] CMP EAX,ECX SETA AL AND AL,AL JZ L_141 MOV EAX,1 MOV _fd_sector, AL INC _fd_head XOR EAX,EAX MOV AL,_fd_head L_141: XOR EAX,EAX MOV AL,_fd_head CMP EAX,1 SETA AL AND AL,AL JZ L_142 XOR EAX,EAX MOV _fd_head, AL INC _fd_track XOR EAX,EAX MOV AL,_fd_track L_142: L_139: JMP L_116 L_117: MOV EAX,DWORD PTR [EBP-4] L_143: MOV ESP,EBP POP EBP RETN 4 _format_track: PUSH EBP MOV EBP,ESP SUB ESP,4 MOV EAX,77 MOV _fd_fdc_command, AL MOV EAX,1 MOV _fwrite, AL PUSH _fd_pData PUSH 512 PUSH 2 PUSH 1 PUSH 1 CALL FWORD PTR _DmaSetUp MOV DWORD PTR [EBP-4], EAX MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_144 PUSH 3 CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_144: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_145 XOR EAX,EAX PUSH EAX CALL _GetParm PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_145: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_146 PUSH 1 CALL _GetParm PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_146: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_147 CALL _seek MOV DWORD PTR [EBP-4], EAX L_147: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_148 XOR EAX,EAX MOV AL,_fd_fdc_command PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_148: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_149 XOR EAX,EAX MOV AL,_fd_head MOV ECX,2 SHL EAX,CL AND EAX,0FFh MOV ECX,4 AND EAX,ECX XOR ECX,ECX MOV CL,_fd_drive OR EAX,ECX PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_149: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_150 PUSH 3 CALL _GetParm PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_150: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_151 PUSH 4 CALL _GetParm PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_151: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_152 PUSH 7 CALL _GetParm PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_152: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_153 PUSH 8 CALL _GetParm PUSH EAX CALL _send_fdc MOV DWORD PTR [EBP-4], EAX L_153: MOV EAX,DWORD PTR [EBP-4] AND EAX,EAX JNZ L_154 CALL _get_fdc_status MOV DWORD PTR [EBP-4], EAX L_154: MOV EAX,DWORD PTR [EBP-4] MOV ESP,EBP POP EBP RETN _dev_op: PUSH EBP MOV EBP,ESP SUB ESP,8 MOV EAX,DWORD PTR [EBP+8] MOV _fd_pData, EAX XOR EAX,EAX MOV _fwrite, AL MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV DWORD PTR [ESI+4], EAX MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV DWORD PTR [ESI], EAX MOV EAX,DWORD PTR [EBP+24] CMP EAX,10 SETE AL AND AL,AL JZ L_156 XOR EAX,EAX MOV _fd_drive, AL JMP L_157 L_156: MOV EAX,1 MOV _fd_drive, AL L_157: PUSH _fd_exch PUSH OFFSET _fd_msg CALL FWORD PTR _CheckMsg MOV DWORD PTR [EBP-4], EAX XOR EAX,EAX MOV AL,_fd_drive XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL JZ L_158 XOR EAX,EAX MOV AL,_type0 AND EAX,EAX JNZ L_159 MOV ESI,OFFSET _fdstatus MOV EAX,613 MOV DWORD PTR [ESI], EAX JMP L_160 L_159: MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,_type0 MOV BYTE PTR [ESI+13], AL JMP L_161 L_158: XOR EAX,EAX MOV AL,_type1 AND EAX,EAX JNZ L_162 MOV ESI,OFFSET _fdstatus MOV EAX,613 MOV DWORD PTR [ESI], EAX JMP L_160 L_162: MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,_type1 MOV BYTE PTR [ESI+13], AL L_161: MOV ESI,OFFSET _fdstatus MOV EAX,DWORD PTR [EBP+16] CMP EAX,DWORD PTR [ESI+8] SETA AL AND AL,AL JZ L_163 MOV ESI,OFFSET _fdstatus MOV EAX,612 MOV DWORD PTR [ESI], EAX JMP L_160 L_163: XOR EAX,EAX MOV AL,_fd_drive PUSH EAX CALL _fd_select MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,BYTE PTR [ESI+13] SHL EAX,4 MOV ECX,12 ADD EAX,ECX MOV ESI,OFFSET _fdisk_table ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] PUSH EAX PUSH 1015 CALL FWORD PTR _OutByte CALL _purge_fdc MOV ESI,OFFSET _fdstatus MOV EBX,ESI MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,BYTE PTR [ESI+13] SHL EAX,2 MOV ESI,OFFSET _rgSectorMax ADD ESI,EAX MOV EAX,DWORD PTR [ESI] MOV DWORD PTR [EBX+8], EAX MOV EAX,DWORD PTR [EBP+12] MOV _fd_nr_sectors, AL PUSH 3 CALL _GetParm MOV EBX,EAX PUSH EBX PUSH 4 CALL _GetParm POP EDX MOV ECX,EDX MUL ECX MOV ECX,EAX MOV EAX,DWORD PTR [EBP+16] XOR EDX,EDX DIV ECX MOV _fd_track, AL PUSH 3 CALL _GetParm MOV EBX,EAX PUSH EBX PUSH 4 CALL _GetParm POP EDX MOV ECX,EDX MUL ECX MOV ECX,EAX MOV EAX,DWORD PTR [EBP+16] XOR EDX,EDX DIV ECX MOV EAX,EDX MOV DWORD PTR [EBP-8], EAX PUSH 4 CALL _GetParm MOV ECX,EAX MOV EAX,DWORD PTR [EBP-8] XOR EDX,EDX DIV ECX MOV _fd_head, AL PUSH 4 CALL _GetParm MOV ECX,EAX MOV EAX,DWORD PTR [EBP-8] XOR EDX,EDX DIV ECX MOV EAX,EDX ADD EAX,1 MOV _fd_sector, AL MOV EAX,DWORD PTR [EBP+20] JMP L_165 L_166: MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV DWORD PTR [ESI], EAX JMP L_164 L_167: L_168: L_169: MOV ESI,OFFSET _fdstatus MOV EBX,ESI PUSH EBX PUSH DWORD PTR [EBP+20] CALL _RdWrtVerf POP EDX MOV DWORD PTR [EDX], EAX JMP L_164 L_170: MOV ESI,OFFSET _fdstatus MOV EAX,614 MOV DWORD PTR [ESI], EAX JMP L_164 L_171: JMP L_164 L_172: JMP L_164 L_173: MOV ESI,OFFSET _fdstatus MOV EAX,614 MOV DWORD PTR [ESI], EAX JMP L_164 L_165: CMP EAX,6 JE L_172 CMP EAX,5 JE L_171 CMP EAX,4 JE L_170 CMP EAX,3 JE L_169 CMP EAX,2 JE L_168 CMP EAX,1 JE L_167 CMP EAX,0 JE L_166 JMP L_173 L_164: XOR EAX,EAX MOV AL,_fd_drive PUSH EAX CALL _fd_motoroff MOV ESI,OFFSET _fdstatus MOV EAX,DWORD PTR [ESI] L_160: MOV ESP,EBP POP EBP RETN 20 _dev_stat: PUSH EBP MOV EBP,ESP SUB ESP,4 MOV EAX,DWORD PTR [EBP+20] CMP EAX,10 SETE AL AND AL,AL JZ L_174 XOR EAX,EAX MOV _fd_drive, AL JMP L_175 L_174: MOV EAX,1 MOV _fd_drive, AL L_175: XOR EAX,EAX MOV AL,_fd_drive XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL JZ L_176 XOR EAX,EAX MOV AL,_type0 XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL JZ L_177 MOV ESI,OFFSET _fdstatus MOV EAX,613 MOV DWORD PTR [ESI], EAX JMP L_178 L_177: MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,_type0 MOV BYTE PTR [ESI+13], AL MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,_type0 SHL EAX,4 MOV ECX,11 ADD EAX,ECX MOV EBX,ESI MOV ESI,OFFSET _fdisk_table ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,1 ADD EAX,ECX MOV DWORD PTR [EBX+16], EAX MOV ESI,OFFSET _fdstatus MOV EAX,2 MOV DWORD PTR [ESI+20], EAX MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,_type0 SHL EAX,4 MOV ECX,4 ADD EAX,ECX MOV EBX,ESI MOV ESI,OFFSET _fdisk_table ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV DWORD PTR [EBX+24], EAX MOV ESI,OFFSET _fdstatus MOV EAX,512 MOV DWORD PTR [ESI+28], EAX JMP L_179 L_176: XOR EAX,EAX MOV AL,_type1 XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL JZ L_180 MOV ESI,OFFSET _fdstatus MOV EAX,613 MOV DWORD PTR [ESI], EAX JMP L_178 L_180: MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,_type1 MOV BYTE PTR [ESI+13], AL MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,_type1 SHL EAX,4 MOV ECX,11 ADD EAX,ECX MOV EBX,ESI MOV ESI,OFFSET _fdisk_table ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV ECX,1 ADD EAX,ECX MOV DWORD PTR [EBX+16], EAX MOV ESI,OFFSET _fdstatus MOV EAX,2 MOV DWORD PTR [ESI+20], EAX MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,_type1 SHL EAX,4 MOV ECX,4 ADD EAX,ECX MOV EBX,ESI MOV ESI,OFFSET _fdisk_table ADD ESI,EAX XOR EAX,EAX MOV AL,BYTE PTR [ESI] MOV DWORD PTR [EBX+24], EAX MOV ESI,OFFSET _fdstatus MOV EAX,512 MOV DWORD PTR [ESI+28], EAX L_179: MOV ESI,OFFSET _fdstatus MOV EBX,ESI MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,BYTE PTR [ESI+13] SHL EAX,2 MOV ESI,OFFSET _rgSectorMax ADD ESI,EAX MOV EAX,DWORD PTR [ESI] MOV DWORD PTR [EBX+8], EAX MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,BYTE PTR [ESI+13] SHL EAX,4 MOV ESI,OFFSET _fdisk_table ADD ESI,EAX PUSH ESI MOV EAX,OFFSET _fdstatus ADD EAX,32 PUSH EAX PUSH 16 CALL FWORD PTR _CopyData PUSH OFFSET _FDC_STATUS MOV EAX,OFFSET _fdstatus ADD EAX,48 PUSH EAX PUSH 8 CALL FWORD PTR _CopyData MOV EAX,DWORD PTR [EBP+12] CMP EAX,64 SETB AL AND AL,AL JZ L_181 MOV EAX,DWORD PTR [EBP+12] MOV DWORD PTR [EBP-4], EAX JMP L_182 L_181: MOV EAX,64 MOV DWORD PTR [EBP-4], EAX L_182: PUSH OFFSET _fdstatus 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 L_178: MOV ESP,EBP POP EBP RETN 16 _dev_init: PUSH EBP MOV EBP,ESP SUB ESP,4 MOV EAX,DWORD PTR [EBP+8] CMP EAX,64 SETA AL AND AL,AL JZ L_183 MOV EAX,64 MOV DWORD PTR [EBP-4], EAX JMP L_184 L_183: MOV EAX,DWORD PTR [EBP+8] MOV DWORD PTR [EBP-4], EAX L_184: PUSH DWORD PTR [EBP+12] PUSH OFFSET _FDStatTmp PUSH DWORD PTR [EBP-4] CALL FWORD PTR _CopyData MOV EAX,DWORD PTR [EBP+16] CMP EAX,10 SETE AL AND AL,AL JZ L_185 XOR EAX,EAX MOV _fd_drive, AL JMP L_186 L_185: MOV EAX,1 MOV _fd_drive, AL L_186: XOR EAX,EAX MOV AL,_fd_drive XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL JZ L_187 MOV ESI,OFFSET _FDStatTmp XOR EAX,EAX MOV AL,BYTE PTR [ESI+13] MOV _type0, AL XOR EAX,EAX MOV AL,_type0 XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL JZ L_188 MOV ESI,OFFSET _fdstatus MOV EAX,613 MOV DWORD PTR [ESI], EAX JMP L_189 L_188: MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,_type0 MOV BYTE PTR [ESI+13], AL JMP L_190 L_187: MOV ESI,OFFSET _FDStatTmp XOR EAX,EAX MOV AL,BYTE PTR [ESI+13] MOV _type1, AL XOR EAX,EAX MOV AL,_type1 XOR ECX,ECX CMP EAX,ECX SETE AL AND AL,AL JZ L_191 MOV ESI,OFFSET _fdstatus MOV EAX,613 MOV DWORD PTR [ESI], EAX JMP L_189 L_191: MOV ESI,OFFSET _fdstatus XOR EAX,EAX MOV AL,_type1 MOV BYTE PTR [ESI+13], AL L_190: XOR EAX,EAX MOV AL,_fd_drive PUSH EAX CALL _fd_select MOV ESI,OFFSET _fdstatus MOV EBX,ESI PUSH EBX CALL _FDC_reset POP EDX MOV DWORD PTR [EDX], EAX XOR EAX,EAX MOV AL,_fd_drive PUSH EAX CALL _fd_motoroff MOV ESI,OFFSET _fdstatus MOV EAX,DWORD PTR [ESI] L_189: MOV ESP,EBP POP EBP RETN 12