From 8793452d27845f912d5a3ede5ffc07774cd90bc6 Mon Sep 17 00:00:00 2001 From: Richard Burgess <> Date: Thu, 9 Feb 1995 11:17:04 +0000 Subject: [PATCH] autocommit for file dated 1995-02-09 11:17:04 --- ossource/floppy.asm | 2162 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2162 insertions(+) create mode 100644 ossource/floppy.asm diff --git a/ossource/floppy.asm b/ossource/floppy.asm new file mode 100644 index 0000000..baccf66 --- /dev/null +++ b/ossource/floppy.asm @@ -0,0 +1,2162 @@ + +.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 -- 2.40.0