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

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