]> pd.if.org Git - mmurtl/blob - ossource/floppy.asm
autocommit for file dated 2003-12-29 17:36:54
[mmurtl] / ossource / floppy.asm
1 \r
2 .DATA\r
3 EXTRN _SpawnTask FWORD\r
4 EXTRN _AllocExch FWORD\r
5 EXTRN _AllocDMAPage FWORD\r
6 EXTRN _InitDevDr FWORD\r
7 EXTRN _DmaSetUp FWORD\r
8 EXTRN _UnMaskIRQ FWORD\r
9 EXTRN _MaskIRQ FWORD\r
10 EXTRN _SetIRQVector FWORD\r
11 EXTRN _EndOfIRQ FWORD\r
12 EXTRN _SendMsg FWORD\r
13 EXTRN _ISendMsg FWORD\r
14 EXTRN _WaitMsg FWORD\r
15 EXTRN _CheckMsg FWORD\r
16 EXTRN _GetTimerTick FWORD\r
17 EXTRN _Alarm FWORD\r
18 EXTRN _KillAlarm FWORD\r
19 EXTRN _Sleep FWORD\r
20 EXTRN _MicroDelay FWORD\r
21 EXTRN _OutByte FWORD\r
22 EXTRN _OutWord FWORD\r
23 EXTRN _InByte FWORD\r
24 EXTRN _InWord FWORD\r
25 EXTRN _ReadCMOS FWORD\r
26 EXTRN _CopyData FWORD\r
27 _fdisk_table DB 175,2,0,0,0,0,0,0,0,0,0\r
28  DB 0,0,0,0,0,175,2,0,2,9,42\r
29  DB -1,80,246,15,8,39,2,0,0,0,175\r
30  DB 2,0,2,15,27,-1,84,246,15,8,79\r
31  DB 0,0,0,0,175,2,0,2,9,42,-1\r
32  DB 80,246,15,8,79,2,0,0,0,175,2\r
33  DB 0,2,18,27,-1,108,246,15,8,79,0\r
34  DB 0,0,0\r
35 _rgSectorMax DD 0,720,2400,1440,2880,0,0,0,0,0\r
36 _MotorStk DD 100 DUP(0)\r
37 _MotorStkTop DD 0h\r
38 _fd_fdc_command DB 0h\r
39 _fd_drive DB 0h\r
40 _fd_nr_sectors DB 0h\r
41 _fd_head DB 0h\r
42 _fd_sector DB 0h\r
43 _fd_track DB 0h\r
44 _seek_status DB 0h\r
45 _fwrite DB 0h\r
46 _fd_pData DD 0h\r
47 _type0 DB 0h\r
48 _type1 DB 0h\r
49 _fdstatus DB 64 DUP(0)\r
50 _FDStatTmp DB 64 DUP(0)\r
51 _FDC_STATUS DB 8 DUP(0)\r
52 _LAST_TRACK DB 3 DUP(0)\r
53 _fdcb DB 128 DUP(0)\r
54 _dor_crnt DB 0h\r
55 _motor0_want DB 0h\r
56 _motor1_want DB 0h\r
57 _fd_tick DD 0h\r
58 _fd_newtick DD 0h\r
59 _fd_exch DD 0h\r
60 _fd_msg DD 2 DUP(0)\r
61 _sectbuf DD 0h\r
62 _physectbuf DD 0h\r
63 \r
64 \r
65 .CODE\r
66 EXTRN _xprintf: NEAR\r
67 _enable_ints:\r
68         PUSH EBP\r
69         MOV EBP,ESP\r
70         STI\r
71         POP EBP\r
72         RETN\r
73 _disable_ints:\r
74         PUSH EBP\r
75         MOV EBP,ESP\r
76         CLI\r
77         POP EBP\r
78         RETN\r
79 _fdmotor_task:\r
80         PUSH EBP\r
81         MOV EBP,ESP\r
82         CALL _enable_ints\r
83 L_1:\r
84         PUSH 300\r
85         CALL FWORD PTR _Sleep\r
86         PUSH OFFSET _fd_newtick\r
87         CALL FWORD PTR _GetTimerTick\r
88         MOV EAX,_fd_newtick\r
89         SUB EAX,_fd_tick\r
90         CMP EAX,300\r
91         SETA AL\r
92         AND AL,AL\r
93         JZ L_2\r
94         XOR EAX,EAX\r
95         MOV AL,_motor0_want\r
96         AND EAX,EAX\r
97         SETZ AL\r
98         AND AL,AL\r
99         JZ L_3\r
100         XOR EAX,EAX\r
101         MOV AL,_dor_crnt\r
102         MOV ECX,16\r
103         AND EAX,ECX\r
104 L_3:\r
105         JZ L_4\r
106         CALL _disable_ints\r
107         XOR EAX,EAX\r
108         MOV AL,_dor_crnt\r
109         MOV ECX,-17\r
110         AND EAX,ECX\r
111         MOV _dor_crnt, AL\r
112         XOR EAX,EAX\r
113         MOV AL,_dor_crnt\r
114         PUSH EAX\r
115         PUSH 1010\r
116         CALL FWORD PTR _OutByte\r
117         CALL _enable_ints\r
118 L_4:\r
119         XOR EAX,EAX\r
120         MOV AL,_motor1_want\r
121         AND EAX,EAX\r
122         SETZ AL\r
123         AND AL,AL\r
124         JZ L_5\r
125         XOR EAX,EAX\r
126         MOV AL,_dor_crnt\r
127         MOV ECX,32\r
128         AND EAX,ECX\r
129 L_5:\r
130         JZ L_6\r
131         CALL _disable_ints\r
132         XOR EAX,EAX\r
133         MOV AL,_dor_crnt\r
134         MOV ECX,-33\r
135         AND EAX,ECX\r
136         MOV _dor_crnt, AL\r
137         XOR EAX,EAX\r
138         MOV AL,_dor_crnt\r
139         PUSH EAX\r
140         PUSH 1010\r
141         CALL FWORD PTR _OutByte\r
142         CALL _enable_ints\r
143 L_6:\r
144 L_2:\r
145         JMP L_1\r
146         POP EBP\r
147         RETN\r
148 _fd_select:\r
149         PUSH EBP\r
150         MOV EBP,ESP\r
151         SUB ESP,2\r
152         PUSH OFFSET _fd_tick\r
153         CALL FWORD PTR _GetTimerTick\r
154         XOR EAX,EAX\r
155         MOV BYTE PTR [EBP-1], AL\r
156         XOR EAX,EAX\r
157         MOV BYTE PTR [EBP-2], AL\r
158         MOV EAX,DWORD PTR [EBP+8]\r
159         AND EAX,EAX\r
160         JZ L_7\r
161         XOR EAX,EAX\r
162         MOV AL,_dor_crnt\r
163         MOV ECX,1\r
164         AND EAX,ECX\r
165         JNZ L_8\r
166         MOV EAX,1\r
167         MOV BYTE PTR [EBP-1], AL\r
168         XOR EAX,EAX\r
169         MOV AL,_dor_crnt\r
170         MOV ECX,1\r
171         OR EAX,ECX\r
172         MOV _dor_crnt, AL\r
173 L_8:\r
174         XOR EAX,EAX\r
175         MOV AL,_dor_crnt\r
176         MOV ECX,32\r
177         AND EAX,ECX\r
178         JNZ L_9\r
179         MOV EAX,1\r
180         MOV BYTE PTR [EBP-1], AL\r
181         MOV EAX,1\r
182         MOV BYTE PTR [EBP-2], AL\r
183         XOR EAX,EAX\r
184         MOV AL,_dor_crnt\r
185         MOV ECX,32\r
186         OR EAX,ECX\r
187         MOV _dor_crnt, AL\r
188 L_9:\r
189         JMP L_10\r
190 L_7:\r
191         XOR EAX,EAX\r
192         MOV AL,_dor_crnt\r
193         MOV ECX,1\r
194         AND EAX,ECX\r
195         JZ L_11\r
196         MOV EAX,1\r
197         MOV BYTE PTR [EBP-1], AL\r
198         XOR EAX,EAX\r
199         MOV AL,_dor_crnt\r
200         MOV ECX,254\r
201         AND EAX,ECX\r
202         MOV _dor_crnt, AL\r
203 L_11:\r
204         XOR EAX,EAX\r
205         MOV AL,_dor_crnt\r
206         MOV ECX,16\r
207         AND EAX,ECX\r
208         JNZ L_12\r
209         MOV EAX,1\r
210         MOV BYTE PTR [EBP-1], AL\r
211         MOV EAX,1\r
212         MOV BYTE PTR [EBP-2], AL\r
213         XOR EAX,EAX\r
214         MOV AL,_dor_crnt\r
215         MOV ECX,16\r
216         OR EAX,ECX\r
217         MOV _dor_crnt, AL\r
218 L_12:\r
219 L_10:\r
220         XOR EAX,EAX\r
221         MOV AL,BYTE PTR [EBP-1]\r
222         AND EAX,EAX\r
223         JZ L_13\r
224         CALL _disable_ints\r
225         XOR EAX,EAX\r
226         MOV AL,_dor_crnt\r
227         PUSH EAX\r
228         PUSH 1010\r
229         CALL FWORD PTR _OutByte\r
230         CALL _enable_ints\r
231         XOR EAX,EAX\r
232         MOV AL,BYTE PTR [EBP-2]\r
233         AND EAX,EAX\r
234         JZ L_14\r
235         PUSH 33\r
236         CALL FWORD PTR _Sleep\r
237 L_14:\r
238 L_13:\r
239         MOV ESP,EBP\r
240         POP EBP\r
241         RETN 4\r
242 _fd_motoroff:\r
243         PUSH EBP\r
244         MOV EBP,ESP\r
245         MOV EAX,DWORD PTR [EBP+8]\r
246         AND EAX,EAX\r
247         JZ L_15\r
248         XOR EAX,EAX\r
249         MOV _motor1_want, AL\r
250         JMP L_16\r
251 L_15:\r
252         XOR EAX,EAX\r
253         MOV _motor0_want, AL\r
254 L_16:\r
255         POP EBP\r
256         RETN 4\r
257 PUBLIC _fdisk_setup:\r
258         PUSH EBP\r
259         MOV EBP,ESP\r
260         SUB ESP,4\r
261         MOV ESI,OFFSET _fdcb\r
262         MOV EAX,70\r
263         MOV BYTE PTR [ESI], AL\r
264         MOV ESI,OFFSET _fdcb\r
265         MOV EAX,1\r
266         ADD ESI,EAX\r
267         MOV EAX,68\r
268         MOV BYTE PTR [ESI], AL\r
269         MOV ESI,OFFSET _fdcb\r
270         MOV EAX,2\r
271         ADD ESI,EAX\r
272         MOV EAX,48\r
273         MOV BYTE PTR [ESI], AL\r
274         MOV ESI,OFFSET _fdcb\r
275         MOV EAX,3\r
276         MOV BYTE PTR [ESI+12], AL\r
277         MOV ESI,OFFSET _fdcb\r
278         MOV EAX,1\r
279         MOV BYTE PTR [ESI+13], AL\r
280         MOV ESI,OFFSET _fdcb\r
281         XOR EAX,EAX\r
282         MOV BYTE PTR [ESI+36], AL\r
283         MOV ESI,OFFSET _fdcb\r
284         XOR EAX,EAX\r
285         MOV BYTE PTR [ESI+37], AL\r
286         MOV EAX,64\r
287         MOV ESI,OFFSET _fdcb\r
288         ADD ESI,EAX\r
289         MOV EAX,70\r
290         MOV BYTE PTR [ESI], AL\r
291         MOV EAX,64\r
292         MOV ESI,OFFSET _fdcb\r
293         ADD ESI,EAX\r
294         MOV EAX,1\r
295         ADD ESI,EAX\r
296         MOV EAX,68\r
297         MOV BYTE PTR [ESI], AL\r
298         MOV EAX,64\r
299         MOV ESI,OFFSET _fdcb\r
300         ADD ESI,EAX\r
301         MOV EAX,2\r
302         ADD ESI,EAX\r
303         MOV EAX,49\r
304         MOV BYTE PTR [ESI], AL\r
305         MOV EAX,64\r
306         MOV ESI,OFFSET _fdcb\r
307         ADD ESI,EAX\r
308         MOV EAX,3\r
309         MOV BYTE PTR [ESI+12], AL\r
310         MOV EAX,64\r
311         MOV ESI,OFFSET _fdcb\r
312         ADD ESI,EAX\r
313         MOV EAX,1\r
314         MOV BYTE PTR [ESI+13], AL\r
315         MOV EAX,64\r
316         MOV ESI,OFFSET _fdcb\r
317         ADD ESI,EAX\r
318         XOR EAX,EAX\r
319         MOV BYTE PTR [ESI+36], AL\r
320         MOV EAX,64\r
321         MOV ESI,OFFSET _fdcb\r
322         ADD ESI,EAX\r
323         XOR EAX,EAX\r
324         MOV BYTE PTR [ESI+37], AL\r
325         XOR EAX,EAX\r
326         MOV AL,_dor_crnt\r
327         MOV ECX,12\r
328         OR EAX,ECX\r
329         MOV _dor_crnt, AL\r
330         XOR EAX,EAX\r
331         MOV _motor0_want, AL\r
332         XOR EAX,EAX\r
333         MOV _motor1_want, AL\r
334         XOR EAX,EAX\r
335         MOV _seek_status, AL\r
336         MOV ESI,OFFSET _fdstatus\r
337         XOR EAX,EAX\r
338         MOV DWORD PTR [ESI], EAX\r
339         PUSH OFFSET _fd_exch\r
340         CALL FWORD PTR _AllocExch\r
341         MOV DWORD PTR [EBP-4], EAX\r
342         MOV EAX,DWORD PTR [EBP-4]\r
343         AND EAX,EAX\r
344         JZ L_17\r
345         MOV EAX,DWORD PTR [EBP-4]\r
346         JMP L_18\r
347 L_17:\r
348         PUSH 1\r
349         PUSH OFFSET _sectbuf\r
350         PUSH OFFSET _physectbuf\r
351         CALL FWORD PTR _AllocDMAPage\r
352         MOV DWORD PTR [EBP-4], EAX\r
353         MOV EAX,DWORD PTR [EBP-4]\r
354         AND EAX,EAX\r
355         JZ L_19\r
356         MOV EAX,DWORD PTR [EBP-4]\r
357         JMP L_18\r
358 L_19:\r
359         PUSH OFFSET _fdmotor_task\r
360         PUSH 18\r
361         XOR EAX,EAX\r
362         PUSH EAX\r
363         PUSH OFFSET _MotorStkTop\r
364         PUSH 1\r
365         CALL FWORD PTR _SpawnTask\r
366         PUSH 6\r
367         PUSH OFFSET _fdisk_isr\r
368         CALL FWORD PTR _SetIRQVector\r
369         PUSH 6\r
370         CALL FWORD PTR _UnMaskIRQ\r
371         XOR EAX,EAX\r
372         PUSH EAX\r
373         CALL _cmos_type\r
374         MOV _type0, AL\r
375         XOR EAX,EAX\r
376         MOV AL,_type0\r
377         AND EAX,EAX\r
378         JZ L_20\r
379         MOV ESI,OFFSET _fdcb\r
380         MOV EAX,512\r
381         MOV WORD PTR [ESI+14], AX\r
382         MOV ESI,OFFSET _fdcb\r
383         XOR EAX,EAX\r
384         MOV AL,_type0\r
385         SHL EAX,2\r
386         MOV EBX,ESI\r
387         MOV ESI,OFFSET _rgSectorMax\r
388         ADD ESI,EAX\r
389         MOV EAX,DWORD PTR [ESI]\r
390         MOV DWORD PTR [EBX+20], EAX\r
391 L_20:\r
392         PUSH 1\r
393         CALL _cmos_type\r
394         MOV _type1, AL\r
395         XOR EAX,EAX\r
396         MOV AL,_type1\r
397         AND EAX,EAX\r
398         JZ L_21\r
399         MOV EAX,64\r
400         MOV ESI,OFFSET _fdcb\r
401         ADD ESI,EAX\r
402         MOV EAX,512\r
403         MOV WORD PTR [ESI+14], AX\r
404         MOV EAX,64\r
405         MOV ESI,OFFSET _fdcb\r
406         ADD ESI,EAX\r
407         XOR EAX,EAX\r
408         MOV AL,_type1\r
409         SHL EAX,2\r
410         MOV EBX,ESI\r
411         MOV ESI,OFFSET _rgSectorMax\r
412         ADD ESI,EAX\r
413         MOV EAX,DWORD PTR [ESI]\r
414         MOV DWORD PTR [EBX+20], EAX\r
415 L_21:\r
416         MOV ESI,OFFSET _fdstatus\r
417         MOV EBX,ESI\r
418         PUSH EBX\r
419         CALL _FDC_reset\r
420         POP EDX\r
421         MOV DWORD PTR [EDX], EAX\r
422         AND EAX,EAX\r
423         JZ L_22\r
424         MOV ESI,OFFSET _fdstatus\r
425         MOV EAX,DWORD PTR [ESI]\r
426         JMP L_18\r
427 L_22:\r
428         XOR EAX,EAX\r
429         MOV AL,_type0\r
430         AND EAX,EAX\r
431         JZ L_23\r
432         XOR EAX,EAX\r
433         MOV _fd_drive, AL\r
434         XOR EAX,EAX\r
435         PUSH EAX\r
436         CALL _fd_select\r
437         CALL _recal\r
438         MOV DWORD PTR [EBP-4], EAX\r
439         AND EAX,EAX\r
440         JZ L_24\r
441         CALL _recal\r
442         MOV DWORD PTR [EBP-4], EAX\r
443 L_24:\r
444         XOR EAX,EAX\r
445         PUSH EAX\r
446         CALL _fd_motoroff\r
447         MOV EAX,DWORD PTR [EBP-4]\r
448         AND EAX,EAX\r
449         JZ L_25\r
450         MOV ESI,OFFSET _fdstatus\r
451         MOV EAX,DWORD PTR [EBP-4]\r
452         MOV DWORD PTR [ESI], EAX\r
453         JMP L_18\r
454 L_25:\r
455 L_23:\r
456         XOR EAX,EAX\r
457         MOV AL,_type1\r
458         AND EAX,EAX\r
459         JZ L_26\r
460         MOV EAX,1\r
461         MOV _fd_drive, AL\r
462         PUSH 1\r
463         CALL _fd_select\r
464         CALL _recal\r
465         MOV DWORD PTR [EBP-4], EAX\r
466         AND EAX,EAX\r
467         JZ L_27\r
468         CALL _recal\r
469         MOV DWORD PTR [EBP-4], EAX\r
470 L_27:\r
471         MOV EAX,DWORD PTR [EBP-4]\r
472         AND EAX,EAX\r
473         JZ L_28\r
474         MOV EAX,64\r
475         MOV ESI,OFFSET _fdcb\r
476         ADD ESI,EAX\r
477         XOR EAX,EAX\r
478         MOV BYTE PTR [ESI+13], AL\r
479 L_28:\r
480         PUSH 1\r
481         CALL _fd_motoroff\r
482 L_26:\r
483         MOV ESI,OFFSET _fdcb\r
484         MOV EAX,OFFSET _dev_op\r
485         MOV DWORD PTR [ESI+24], EAX\r
486         MOV ESI,OFFSET _fdcb\r
487         MOV EAX,OFFSET _dev_init\r
488         MOV DWORD PTR [ESI+28], EAX\r
489         MOV ESI,OFFSET _fdcb\r
490         MOV EAX,OFFSET _dev_stat\r
491         MOV DWORD PTR [ESI+32], EAX\r
492         MOV EAX,64\r
493         MOV ESI,OFFSET _fdcb\r
494         ADD ESI,EAX\r
495         MOV EAX,OFFSET _dev_op\r
496         MOV DWORD PTR [ESI+24], EAX\r
497         MOV EAX,64\r
498         MOV ESI,OFFSET _fdcb\r
499         ADD ESI,EAX\r
500         MOV EAX,OFFSET _dev_init\r
501         MOV DWORD PTR [ESI+28], EAX\r
502         MOV EAX,64\r
503         MOV ESI,OFFSET _fdcb\r
504         ADD ESI,EAX\r
505         MOV EAX,OFFSET _dev_stat\r
506         MOV DWORD PTR [ESI+32], EAX\r
507         PUSH 10\r
508         PUSH OFFSET _fdcb\r
509         PUSH 2\r
510         PUSH 1\r
511         CALL FWORD PTR _InitDevDr\r
512         MOV DWORD PTR [EBP-4], EAX\r
513 L_18:\r
514         MOV ESP,EBP\r
515         POP EBP\r
516         RETN\r
517 _FDC_reset:\r
518         PUSH EBP\r
519         MOV EBP,ESP\r
520         SUB ESP,4\r
521         XOR EAX,EAX\r
522         MOV _seek_status, AL\r
523         CALL _disable_ints\r
524         PUSH 8\r
525         PUSH 1010\r
526         CALL FWORD PTR _OutByte\r
527         PUSH 75\r
528         CALL FWORD PTR _MicroDelay\r
529         PUSH 12\r
530         PUSH 1010\r
531         CALL FWORD PTR _OutByte\r
532         CALL _enable_ints\r
533         CALL _wait_int\r
534         MOV DWORD PTR [EBP-4], EAX\r
535         AND EAX,EAX\r
536         JZ L_29\r
537         MOV EAX,DWORD PTR [EBP-4]\r
538         JMP L_30\r
539 L_29:\r
540         PUSH 8\r
541         CALL _send_fdc\r
542         MOV DWORD PTR [EBP-4], EAX\r
543         AND EAX,EAX\r
544         JZ L_31\r
545         MOV EAX,DWORD PTR [EBP-4]\r
546         JMP L_30\r
547 L_31:\r
548         PUSH 2\r
549         CALL _results\r
550         MOV DWORD PTR [EBP-4], EAX\r
551         AND EAX,EAX\r
552         JZ L_32\r
553         MOV EAX,DWORD PTR [EBP-4]\r
554         JMP L_30\r
555 L_32:\r
556         MOV ESI,OFFSET _FDC_STATUS\r
557         XOR EAX,EAX\r
558         MOV AL,BYTE PTR [ESI]\r
559         MOV ECX,192\r
560         AND EAX,ECX\r
561         CMP EAX,192\r
562         SETE AL\r
563         AND AL,AL\r
564         JNZ L_33\r
565         MOV ESI,OFFSET _FDC_STATUS\r
566         XOR EAX,EAX\r
567         MOV AL,BYTE PTR [ESI]\r
568         MOV ECX,192\r
569         AND EAX,ECX\r
570         XOR ECX,ECX\r
571         CMP EAX,ECX\r
572         SETE AL\r
573         AND AL,AL\r
574 L_33:\r
575         JZ L_34\r
576         PUSH 3\r
577         CALL _send_fdc\r
578         XOR EAX,EAX\r
579         PUSH EAX\r
580         CALL _GetParm\r
581         PUSH EAX\r
582         CALL _send_fdc\r
583         PUSH 1\r
584         CALL _GetParm\r
585         PUSH EAX\r
586         CALL _send_fdc\r
587         XOR EAX,EAX\r
588         JMP L_30\r
589 L_34:\r
590         MOV EAX,608\r
591 L_30:\r
592         MOV ESP,EBP\r
593         POP EBP\r
594         RETN\r
595 _fdisk_isr:\r
596         PUSHAD\r
597         PUSH _fd_exch\r
598         PUSH -3\r
599         PUSH -3\r
600         CALL FWORD PTR _ISendMsg\r
601         PUSH 6\r
602         CALL FWORD PTR _EndOfIRQ\r
603         POPAD\r
604         IRETD\r
605 _cmos_type:\r
606         PUSH EBP\r
607         MOV EBP,ESP\r
608         SUB ESP,1\r
609         XOR EAX,EAX\r
610         MOV BYTE PTR [EBP-1], AL\r
611         XOR EAX,EAX\r
612         MOV AL,BYTE PTR [EBP+8]\r
613         AND EAX,EAX\r
614         JZ L_35\r
615         PUSH 16\r
616         CALL FWORD PTR _ReadCMOS\r
617         MOV ECX,15\r
618         AND EAX,ECX\r
619         MOV BYTE PTR [EBP-1], AL\r
620         JMP L_36\r
621 L_35:\r
622         PUSH 16\r
623         CALL FWORD PTR _ReadCMOS\r
624         MOV ECX,4\r
625         SHR AL,CL\r
626         MOV ECX,15\r
627         AND EAX,ECX\r
628         MOV BYTE PTR [EBP-1], AL\r
629 L_36:\r
630         XOR EAX,EAX\r
631         MOV AL,BYTE PTR [EBP-1]\r
632         MOV ESP,EBP\r
633         POP EBP\r
634         RETN 4\r
635 _send_fdc:\r
636         PUSH EBP\r
637         MOV EBP,ESP\r
638         SUB ESP,6\r
639         MOV EAX,100\r
640         MOV DWORD PTR [EBP-4], EAX\r
641 L_38:\r
642         PUSH 1012\r
643         CALL FWORD PTR _InByte\r
644         MOV BYTE PTR [EBP-5], AL\r
645         PUSH 100\r
646         CALL FWORD PTR _MicroDelay\r
647         XOR EAX,EAX\r
648         MOV AL,BYTE PTR [EBP-5]\r
649         MOV ECX,128\r
650         AND EAX,ECX\r
651         JZ L_41\r
652         XOR EAX,EAX\r
653         MOV AL,BYTE PTR [EBP-5]\r
654         MOV ECX,64\r
655         AND EAX,ECX\r
656         JZ L_42\r
657         PUSH 1013\r
658         CALL FWORD PTR _InByte\r
659         MOV BYTE PTR [EBP-6], AL\r
660         PUSH 100\r
661         CALL FWORD PTR _MicroDelay\r
662         JMP L_43\r
663 L_42:\r
664         XOR EAX,EAX\r
665         MOV AL,BYTE PTR [EBP+8]\r
666         PUSH EAX\r
667         PUSH 1013\r
668         CALL FWORD PTR _OutByte\r
669         PUSH 100\r
670         CALL FWORD PTR _MicroDelay\r
671         XOR EAX,EAX\r
672         JMP L_44\r
673 L_43:\r
674 L_41:\r
675 L_39:\r
676         MOV EAX,DWORD PTR [EBP-4]\r
677         DEC DWORD PTR [EBP-4]\r
678         AND EAX,EAX\r
679         JNZ L_38\r
680 L_40:\r
681         MOV EAX,616\r
682 L_44:\r
683         MOV ESP,EBP\r
684         POP EBP\r
685         RETN 4\r
686 _GetParm:\r
687         PUSH EBP\r
688         MOV EBP,ESP\r
689         MOV ESI,OFFSET _fdstatus\r
690         XOR EAX,EAX\r
691         MOV AL,BYTE PTR [ESI+13]\r
692         SHL EAX,4\r
693         XOR ECX,ECX\r
694         MOV CL,BYTE PTR [EBP+8]\r
695         ADD EAX,ECX\r
696         MOV ESI,OFFSET _fdisk_table\r
697         ADD ESI,EAX\r
698         XOR EAX,EAX\r
699         MOV AL,BYTE PTR [ESI]\r
700         POP EBP\r
701         RETN 4\r
702 _wait_int:\r
703         PUSH EBP\r
704         MOV EBP,ESP\r
705         SUB ESP,4\r
706         PUSH _fd_exch\r
707         PUSH 300\r
708         CALL FWORD PTR _Alarm\r
709         MOV DWORD PTR [EBP-4], EAX\r
710         PUSH _fd_exch\r
711         PUSH OFFSET _fd_msg\r
712         CALL FWORD PTR _WaitMsg\r
713         MOV DWORD PTR [EBP-4], EAX\r
714         MOV EAX,DWORD PTR [EBP-4]\r
715         AND EAX,EAX\r
716         JZ L_46\r
717         PUSH _fd_exch\r
718         CALL FWORD PTR _KillAlarm\r
719         MOV EAX,DWORD PTR [EBP-4]\r
720         JMP L_47\r
721 L_46:\r
722         MOV ESI,OFFSET _fd_msg\r
723         MOV EAX,DWORD PTR [ESI]\r
724         CMP EAX,-3\r
725         SETNE AL\r
726         AND AL,AL\r
727         JZ L_48\r
728         MOV ESI,OFFSET _fdstatus\r
729         MOV EAX,610\r
730         MOV DWORD PTR [ESI], EAX\r
731         JMP L_47\r
732 L_48:\r
733         PUSH _fd_exch\r
734         CALL FWORD PTR _KillAlarm\r
735         MOV ESI,OFFSET _fdstatus\r
736         XOR EAX,EAX\r
737         MOV DWORD PTR [ESI], EAX\r
738 L_49:\r
739 L_47:\r
740         MOV ESP,EBP\r
741         POP EBP\r
742         RETN\r
743 _recal:\r
744         PUSH EBP\r
745         MOV EBP,ESP\r
746         SUB ESP,4\r
747         PUSH 7\r
748         CALL _send_fdc\r
749         MOV DWORD PTR [EBP-4], EAX\r
750         MOV EAX,DWORD PTR [EBP-4]\r
751         AND EAX,EAX\r
752         JNZ L_50\r
753         XOR EAX,EAX\r
754         MOV AL,_fd_drive\r
755         PUSH EAX\r
756         CALL _send_fdc\r
757         MOV DWORD PTR [EBP-4], EAX\r
758 L_50:\r
759         MOV EAX,DWORD PTR [EBP-4]\r
760         AND EAX,EAX\r
761         JNZ L_51\r
762         CALL _wait_int\r
763         MOV DWORD PTR [EBP-4], EAX\r
764 L_51:\r
765         MOV EAX,DWORD PTR [EBP-4]\r
766         AND EAX,EAX\r
767         JNZ L_52\r
768         PUSH 8\r
769         CALL _send_fdc\r
770         MOV DWORD PTR [EBP-4], EAX\r
771 L_52:\r
772         MOV EAX,DWORD PTR [EBP-4]\r
773         AND EAX,EAX\r
774         JNZ L_53\r
775         PUSH 2\r
776         CALL _results\r
777         MOV DWORD PTR [EBP-4], EAX\r
778 L_53:\r
779         MOV EAX,DWORD PTR [EBP-4]\r
780         AND EAX,EAX\r
781         JNZ L_54\r
782         MOV ESI,OFFSET _FDC_STATUS\r
783         XOR EAX,EAX\r
784         MOV AL,BYTE PTR [ESI]\r
785         MOV ECX,32\r
786         AND EAX,ECX\r
787         JZ L_55\r
788         MOV EAX,1\r
789         MOV ESI,OFFSET _FDC_STATUS\r
790         ADD ESI,EAX\r
791         XOR EAX,EAX\r
792         MOV AL,BYTE PTR [ESI]\r
793         AND EAX,EAX\r
794         JZ L_56\r
795         MOV EAX,615\r
796         JMP L_57\r
797 L_56:\r
798         XOR EAX,EAX\r
799         JMP L_57\r
800 L_55:\r
801         MOV EAX,609\r
802         JMP L_57\r
803 L_58:\r
804 L_54:\r
805         MOV EAX,DWORD PTR [EBP-4]\r
806 L_57:\r
807         MOV ESP,EBP\r
808         POP EBP\r
809         RETN\r
810 _seek:\r
811         PUSH EBP\r
812         MOV EBP,ESP\r
813         SUB ESP,4\r
814         MOV EAX,1\r
815         XOR ECX,ECX\r
816         MOV CL,_fd_drive\r
817         SHL EAX,CL\r
818         AND EAX,0FFh\r
819         XOR ECX,ECX\r
820         MOV CL,_seek_status\r
821         AND EAX,ECX\r
822         XOR ECX,ECX\r
823         CMP EAX,ECX\r
824         SETE AL\r
825         AND AL,AL\r
826         JZ L_59\r
827         CALL _recal\r
828         AND EAX,EAX\r
829         JZ L_60\r
830         CALL _recal\r
831         MOV DWORD PTR [EBP-4], EAX\r
832         AND EAX,EAX\r
833         JZ L_61\r
834         MOV EAX,DWORD PTR [EBP-4]\r
835         JMP L_62\r
836 L_61:\r
837 L_60:\r
838         MOV EAX,1\r
839         XOR ECX,ECX\r
840         MOV CL,_fd_drive\r
841         SHL EAX,CL\r
842         AND EAX,0FFh\r
843         XOR ECX,ECX\r
844         MOV CL,_seek_status\r
845         OR EAX,ECX\r
846         MOV _seek_status, AL\r
847         XOR EAX,EAX\r
848         MOV AL,_fd_drive\r
849         MOV ESI,OFFSET _LAST_TRACK\r
850         ADD ESI,EAX\r
851         XOR EAX,EAX\r
852         MOV BYTE PTR [ESI], AL\r
853         XOR EAX,EAX\r
854         MOV AL,_fd_track\r
855         XOR ECX,ECX\r
856         CMP EAX,ECX\r
857         SETE AL\r
858         AND AL,AL\r
859         JZ L_63\r
860         CALL _wait_for_head\r
861         XOR EAX,EAX\r
862         JMP L_62\r
863 L_63:\r
864 L_59:\r
865         MOV ESI,OFFSET _fdstatus\r
866         XOR EAX,EAX\r
867         MOV AL,BYTE PTR [ESI+13]\r
868         SHL EAX,4\r
869         MOV ECX,14\r
870         ADD EAX,ECX\r
871         MOV ESI,OFFSET _fdisk_table\r
872         ADD ESI,EAX\r
873         XOR EAX,EAX\r
874         MOV AL,BYTE PTR [ESI]\r
875         XOR ECX,ECX\r
876         CMP EAX,ECX\r
877         SETNE AL\r
878         AND AL,AL\r
879         JZ L_64\r
880         XOR EAX,EAX\r
881         MOV AL,_fd_track\r
882         SHL EAX,1\r
883         MOV _fd_track, AL\r
884 L_64:\r
885         XOR EAX,EAX\r
886         MOV AL,_fd_drive\r
887         MOV ESI,OFFSET _LAST_TRACK\r
888         ADD ESI,EAX\r
889         XOR EAX,EAX\r
890         MOV AL,BYTE PTR [ESI]\r
891         XOR ECX,ECX\r
892         MOV CL,_fd_track\r
893         CMP EAX,ECX\r
894         SETE AL\r
895         AND AL,AL\r
896         JZ L_65\r
897         XOR EAX,EAX\r
898         JMP L_62\r
899 L_65:\r
900         XOR EAX,EAX\r
901         MOV AL,_fd_drive\r
902         MOV ESI,OFFSET _LAST_TRACK\r
903         ADD ESI,EAX\r
904         XOR EAX,EAX\r
905         MOV AL,_fd_track\r
906         MOV BYTE PTR [ESI], AL\r
907         PUSH 15\r
908         CALL _send_fdc\r
909         MOV DWORD PTR [EBP-4], EAX\r
910         MOV EAX,DWORD PTR [EBP-4]\r
911         AND EAX,EAX\r
912         JNZ L_66\r
913         XOR EAX,EAX\r
914         MOV AL,_fd_head\r
915         MOV ECX,2\r
916         SHL EAX,CL\r
917         AND EAX,0FFh\r
918         XOR ECX,ECX\r
919         MOV CL,_fd_drive\r
920         OR EAX,ECX\r
921         PUSH EAX\r
922         CALL _send_fdc\r
923         MOV DWORD PTR [EBP-4], EAX\r
924 L_66:\r
925         MOV EAX,DWORD PTR [EBP-4]\r
926         AND EAX,EAX\r
927         JNZ L_67\r
928         XOR EAX,EAX\r
929         MOV AL,_fd_track\r
930         PUSH EAX\r
931         CALL _send_fdc\r
932         MOV DWORD PTR [EBP-4], EAX\r
933 L_67:\r
934         MOV EAX,DWORD PTR [EBP-4]\r
935         AND EAX,EAX\r
936         JNZ L_68\r
937         CALL _wait_int\r
938         MOV DWORD PTR [EBP-4], EAX\r
939 L_68:\r
940         MOV EAX,DWORD PTR [EBP-4]\r
941         AND EAX,EAX\r
942         JNZ L_69\r
943         PUSH 8\r
944         CALL _send_fdc\r
945         MOV DWORD PTR [EBP-4], EAX\r
946 L_69:\r
947         MOV EAX,DWORD PTR [EBP-4]\r
948         AND EAX,EAX\r
949         JNZ L_70\r
950         PUSH 2\r
951         CALL _results\r
952         MOV DWORD PTR [EBP-4], EAX\r
953 L_70:\r
954         MOV EAX,DWORD PTR [EBP-4]\r
955         AND EAX,EAX\r
956         JNZ L_71\r
957         MOV ESI,OFFSET _FDC_STATUS\r
958         XOR EAX,EAX\r
959         MOV AL,BYTE PTR [ESI]\r
960         MOV ECX,32\r
961         AND EAX,ECX\r
962         JNZ L_72\r
963         MOV EAX,1\r
964         XOR ECX,ECX\r
965         MOV CL,_fd_drive\r
966         SHL EAX,CL\r
967         AND EAX,0FFh\r
968         NOT EAX\r
969         XOR ECX,ECX\r
970         MOV CL,_seek_status\r
971         AND EAX,ECX\r
972         MOV _seek_status, AL\r
973         MOV EAX,609\r
974         MOV DWORD PTR [EBP-4], EAX\r
975         MOV EAX,DWORD PTR [EBP-4]\r
976         JMP L_62\r
977 L_72:\r
978 L_71:\r
979         MOV EAX,DWORD PTR [EBP-4]\r
980         AND EAX,EAX\r
981         JNZ L_73\r
982         CALL _wait_for_head\r
983 L_73:\r
984         XOR EAX,EAX\r
985 L_62:\r
986         MOV ESP,EBP\r
987         POP EBP\r
988         RETN\r
989 _read_data:\r
990         PUSH EBP\r
991         MOV EBP,ESP\r
992         SUB ESP,3\r
993         XOR EAX,EAX\r
994         MOV WORD PTR [EBP-2], AX\r
995 L_74:\r
996         MOVZX EAX,WORD PTR [EBP-2]\r
997         CMP EAX,1000\r
998         SETB AL\r
999         AND AL,AL\r
1000         JZ L_75\r
1001         JMP SHORT L_76\r
1002 L_77:\r
1003         MOVZX EAX,WORD PTR [EBP-2]\r
1004         INC WORD PTR [EBP-2]\r
1005         JMP SHORT L_74\r
1006 L_76:\r
1007         PUSH 1012\r
1008         CALL FWORD PTR _InByte\r
1009         MOV BYTE PTR [EBP-3], AL\r
1010         PUSH 100\r
1011         CALL FWORD PTR _MicroDelay\r
1012         XOR EAX,EAX\r
1013         MOV AL,BYTE PTR [EBP-3]\r
1014         MOV ECX,128\r
1015         AND EAX,ECX\r
1016         JZ L_78\r
1017         XOR EAX,EAX\r
1018         MOV AL,BYTE PTR [EBP-3]\r
1019         MOV ECX,64\r
1020         AND EAX,ECX\r
1021         JZ L_79\r
1022         MOV ESI,DWORD PTR [EBP+8]\r
1023         MOV EBX,ESI\r
1024         PUSH EBX\r
1025         PUSH 1013\r
1026         CALL FWORD PTR _InByte\r
1027         POP EDX\r
1028         MOV BYTE PTR [EDX], AL\r
1029         PUSH 100\r
1030         CALL FWORD PTR _MicroDelay\r
1031         MOV EAX,1\r
1032         JMP L_80\r
1033 L_79:\r
1034 L_78:\r
1035         JMP L_77\r
1036 L_75:\r
1037         XOR EAX,EAX\r
1038 L_80:\r
1039         MOV ESP,EBP\r
1040         POP EBP\r
1041         RETN 4\r
1042 _results:\r
1043         PUSH EBP\r
1044         MOV EBP,ESP\r
1045         SUB ESP,3\r
1046         XOR EAX,EAX\r
1047         MOV WORD PTR [EBP-2], AX\r
1048 L_81:\r
1049         MOVZX EAX,WORD PTR [EBP-2]\r
1050         CMP EAX,DWORD PTR [EBP+8]\r
1051         SETB AL\r
1052         AND AL,AL\r
1053         JZ L_82\r
1054         LEA EAX,BYTE PTR [EBP-3]\r
1055         PUSH EAX\r
1056         CALL _read_data\r
1057         AND EAX,EAX\r
1058         JZ L_83\r
1059         MOVZX EAX,WORD PTR [EBP-2]\r
1060         INC WORD PTR [EBP-2]\r
1061         MOV ESI,OFFSET _FDC_STATUS\r
1062         ADD ESI,EAX\r
1063         XOR EAX,EAX\r
1064         MOV AL,BYTE PTR [EBP-3]\r
1065         MOV BYTE PTR [ESI], AL\r
1066         PUSH 100\r
1067         CALL FWORD PTR _MicroDelay\r
1068         JMP L_84\r
1069 L_83:\r
1070         MOV EAX,617\r
1071         JMP L_85\r
1072 L_84:\r
1073         JMP L_81\r
1074 L_82:\r
1075         XOR EAX,EAX\r
1076 L_85:\r
1077         MOV ESP,EBP\r
1078         POP EBP\r
1079         RETN 4\r
1080 _purge_fdc:\r
1081         PUSH EBP\r
1082         MOV EBP,ESP\r
1083         SUB ESP,1\r
1084 L_86:\r
1085         PUSH 1012\r
1086         CALL FWORD PTR _InByte\r
1087         MOV BYTE PTR [EBP-1], AL\r
1088         XOR EAX,EAX\r
1089         MOV AL,BYTE PTR [EBP-1]\r
1090         MOV ECX,128\r
1091         AND EAX,ECX\r
1092         JZ L_89\r
1093         XOR EAX,EAX\r
1094         MOV AL,BYTE PTR [EBP-1]\r
1095         MOV ECX,64\r
1096         AND EAX,ECX\r
1097         JZ L_90\r
1098         PUSH 1013\r
1099         CALL FWORD PTR _InByte\r
1100         PUSH 100\r
1101         CALL FWORD PTR _MicroDelay\r
1102         JMP L_91\r
1103 L_90:\r
1104         JMP L_92\r
1105 L_91:\r
1106         JMP L_93\r
1107 L_89:\r
1108         JMP L_92\r
1109 L_93:\r
1110 L_87:\r
1111         MOV EAX,1\r
1112         AND EAX,EAX\r
1113         JNZ L_86\r
1114 L_88:\r
1115 L_92:\r
1116         MOV ESP,EBP\r
1117         POP EBP\r
1118         RETN\r
1119 _wait_for_head:\r
1120         PUSH EBP\r
1121         MOV EBP,ESP\r
1122         SUB ESP,4\r
1123         XOR EAX,EAX\r
1124         MOV AL,_fwrite\r
1125         AND EAX,EAX\r
1126         JZ L_94\r
1127         PUSH 9\r
1128         CALL _GetParm\r
1129         MOV DWORD PTR [EBP-4], EAX\r
1130         MOV EAX,DWORD PTR [EBP-4]\r
1131         MOV ECX,1000\r
1132         MUL ECX\r
1133         MOV ECX,15\r
1134         XOR EDX,EDX\r
1135         DIV ECX\r
1136         MOV DWORD PTR [EBP-4], EAX\r
1137         PUSH DWORD PTR [EBP-4]\r
1138         CALL FWORD PTR _MicroDelay\r
1139 L_94:\r
1140         MOV ESP,EBP\r
1141         POP EBP\r
1142         RETN\r
1143 _med_change:\r
1144         PUSH EBP\r
1145         MOV EBP,ESP\r
1146         PUSH 1015\r
1147         CALL FWORD PTR _InByte\r
1148         MOV ECX,128\r
1149         AND EAX,ECX\r
1150         JZ L_95\r
1151         MOV ESI,OFFSET _fdstatus\r
1152         MOV EAX,1\r
1153         MOV BYTE PTR [ESI+12], AL\r
1154         MOV EAX,605\r
1155         JMP L_96\r
1156 L_95:\r
1157         MOV ESI,OFFSET _fdstatus\r
1158         XOR EAX,EAX\r
1159         MOV BYTE PTR [ESI+12], AL\r
1160         XOR EAX,EAX\r
1161 L_97:\r
1162 L_96:\r
1163         POP EBP\r
1164         RETN\r
1165 _get_fdc_status:\r
1166         PUSH EBP\r
1167         MOV EBP,ESP\r
1168         SUB ESP,4\r
1169         CALL _wait_int\r
1170         MOV DWORD PTR [EBP-4], EAX\r
1171         AND EAX,EAX\r
1172         JZ L_98\r
1173         MOV EAX,DWORD PTR [EBP-4]\r
1174         JMP L_99\r
1175 L_98:\r
1176         PUSH 7\r
1177         CALL _results\r
1178         MOV DWORD PTR [EBP-4], EAX\r
1179         AND EAX,EAX\r
1180         JZ L_100\r
1181         MOV EAX,DWORD PTR [EBP-4]\r
1182         JMP L_99\r
1183 L_100:\r
1184         MOV ESI,OFFSET _FDC_STATUS\r
1185         XOR EAX,EAX\r
1186         MOV AL,BYTE PTR [ESI]\r
1187         MOV ECX,192\r
1188         AND EAX,ECX\r
1189         JNZ L_101\r
1190         XOR EAX,EAX\r
1191         JMP L_99\r
1192 L_101:\r
1193         MOV ESI,OFFSET _FDC_STATUS\r
1194         XOR EAX,EAX\r
1195         MOV AL,BYTE PTR [ESI]\r
1196         MOV ECX,192\r
1197         AND EAX,ECX\r
1198         CMP EAX,128\r
1199         SETE AL\r
1200         AND AL,AL\r
1201         JZ L_102\r
1202         MOV EAX,618\r
1203         JMP L_99\r
1204 L_102:\r
1205         MOV ESI,OFFSET _FDC_STATUS\r
1206         XOR EAX,EAX\r
1207         MOV AL,BYTE PTR [ESI]\r
1208         MOV ECX,192\r
1209         AND EAX,ECX\r
1210         CMP EAX,192\r
1211         SETE AL\r
1212         AND AL,AL\r
1213         JZ L_103\r
1214         MOV EAX,619\r
1215         JMP L_99\r
1216 L_103:\r
1217         MOV EAX,1\r
1218         MOV ESI,OFFSET _FDC_STATUS\r
1219         ADD ESI,EAX\r
1220         XOR EAX,EAX\r
1221         MOV AL,BYTE PTR [ESI]\r
1222         MOV ECX,128\r
1223         AND EAX,ECX\r
1224         JZ L_104\r
1225         MOV EAX,604\r
1226         MOV DWORD PTR [EBP-4], EAX\r
1227         JMP L_105\r
1228 L_104:\r
1229         MOV EAX,1\r
1230         MOV ESI,OFFSET _FDC_STATUS\r
1231         ADD ESI,EAX\r
1232         XOR EAX,EAX\r
1233         MOV AL,BYTE PTR [ESI]\r
1234         MOV ECX,32\r
1235         AND EAX,ECX\r
1236         JZ L_106\r
1237         MOV EAX,607\r
1238         MOV DWORD PTR [EBP-4], EAX\r
1239         JMP L_107\r
1240 L_106:\r
1241         MOV EAX,1\r
1242         MOV ESI,OFFSET _FDC_STATUS\r
1243         ADD ESI,EAX\r
1244         XOR EAX,EAX\r
1245         MOV AL,BYTE PTR [ESI]\r
1246         MOV ECX,16\r
1247         AND EAX,ECX\r
1248         JZ L_108\r
1249         MOV EAX,611\r
1250         MOV DWORD PTR [EBP-4], EAX\r
1251         JMP L_109\r
1252 L_108:\r
1253         MOV EAX,1\r
1254         MOV ESI,OFFSET _FDC_STATUS\r
1255         ADD ESI,EAX\r
1256         XOR EAX,EAX\r
1257         MOV AL,BYTE PTR [ESI]\r
1258         MOV ECX,4\r
1259         AND EAX,ECX\r
1260         JZ L_110\r
1261         MOV EAX,604\r
1262         MOV DWORD PTR [EBP-4], EAX\r
1263         JMP L_111\r
1264 L_110:\r
1265         MOV EAX,1\r
1266         MOV ESI,OFFSET _FDC_STATUS\r
1267         ADD ESI,EAX\r
1268         XOR EAX,EAX\r
1269         MOV AL,BYTE PTR [ESI]\r
1270         MOV ECX,2\r
1271         AND EAX,ECX\r
1272         JZ L_112\r
1273         MOV EAX,603\r
1274         MOV DWORD PTR [EBP-4], EAX\r
1275         JMP L_113\r
1276 L_112:\r
1277         MOV EAX,1\r
1278         MOV ESI,OFFSET _FDC_STATUS\r
1279         ADD ESI,EAX\r
1280         XOR EAX,EAX\r
1281         MOV AL,BYTE PTR [ESI]\r
1282         MOV ECX,1\r
1283         AND EAX,ECX\r
1284         JZ L_114\r
1285         MOV EAX,602\r
1286         MOV DWORD PTR [EBP-4], EAX\r
1287         JMP L_115\r
1288 L_114:\r
1289         MOV ESI,OFFSET _fdstatus\r
1290         MOV EAX,608\r
1291         MOV DWORD PTR [ESI], EAX\r
1292 L_115:\r
1293 L_113:\r
1294 L_111:\r
1295 L_109:\r
1296 L_107:\r
1297 L_105:\r
1298         MOV EAX,DWORD PTR [EBP-4]\r
1299 L_99:\r
1300         MOV ESP,EBP\r
1301         POP EBP\r
1302         RETN\r
1303 _RdWrtVerf:\r
1304         PUSH EBP\r
1305         MOV EBP,ESP\r
1306         SUB ESP,10\r
1307         XOR EAX,EAX\r
1308         MOV DWORD PTR [EBP-4], EAX\r
1309         MOV EAX,5\r
1310         MOV BYTE PTR [EBP-6], AL\r
1311         XOR EAX,EAX\r
1312         MOV AL,_fd_nr_sectors\r
1313         MOV ECX,512\r
1314         MUL ECX\r
1315         MOV DWORD PTR [EBP-10], EAX\r
1316 L_116:\r
1317         XOR EAX,EAX\r
1318         MOV AL,_fd_nr_sectors\r
1319         AND EAX,EAX\r
1320         JZ L_118\r
1321         MOV EAX,DWORD PTR [EBP-4]\r
1322         AND EAX,EAX\r
1323         SETZ AL\r
1324         AND AL,AL\r
1325 L_118:\r
1326         JZ L_117\r
1327         MOV EAX,DWORD PTR [EBP+8]\r
1328         JMP L_120\r
1329 L_121:\r
1330         MOV EAX,1\r
1331         MOV BYTE PTR [EBP-5], AL\r
1332         MOV EAX,230\r
1333         MOV _fd_fdc_command, AL\r
1334         JMP L_119\r
1335 L_122:\r
1336         MOV EAX,1\r
1337         MOV _fwrite, AL\r
1338         MOV EAX,2\r
1339         MOV BYTE PTR [EBP-5], AL\r
1340         PUSH _fd_pData\r
1341         PUSH _sectbuf\r
1342         PUSH 512\r
1343         CALL FWORD PTR _CopyData\r
1344         MOV EAX,197\r
1345         MOV _fd_fdc_command, AL\r
1346         JMP L_119\r
1347 L_123:\r
1348         XOR EAX,EAX\r
1349         MOV BYTE PTR [EBP-5], AL\r
1350         MOV EAX,230\r
1351         MOV _fd_fdc_command, AL\r
1352         JMP L_119\r
1353 L_120:\r
1354         CMP EAX,3\r
1355         JE L_123\r
1356         CMP EAX,2\r
1357         JE L_122\r
1358         CMP EAX,1\r
1359         JE L_121\r
1360 L_119:\r
1361         PUSH _physectbuf\r
1362         PUSH 512\r
1363         PUSH 2\r
1364         MOVSX EAX,BYTE PTR [EBP-5]\r
1365         PUSH EAX\r
1366         PUSH 1\r
1367         CALL FWORD PTR _DmaSetUp\r
1368         MOV DWORD PTR [EBP-4], EAX\r
1369         MOV EAX,DWORD PTR [EBP-4]\r
1370         AND EAX,EAX\r
1371         JNZ L_124\r
1372 L_125:\r
1373         MOVSX EAX,BYTE PTR [EBP-6]\r
1374         DEC BYTE PTR [EBP-6]\r
1375         AND EAX,EAX\r
1376         JZ L_126\r
1377         XOR EAX,EAX\r
1378         MOV DWORD PTR [EBP-4], EAX\r
1379         MOV EAX,DWORD PTR [EBP-4]\r
1380         AND EAX,EAX\r
1381         JNZ L_127\r
1382         CALL _seek\r
1383         MOV DWORD PTR [EBP-4], EAX\r
1384 L_127:\r
1385         MOV EAX,DWORD PTR [EBP-4]\r
1386         AND EAX,EAX\r
1387         JNZ L_128\r
1388         XOR EAX,EAX\r
1389         MOV AL,_fd_fdc_command\r
1390         PUSH EAX\r
1391         CALL _send_fdc\r
1392         MOV DWORD PTR [EBP-4], EAX\r
1393 L_128:\r
1394         MOV EAX,DWORD PTR [EBP-4]\r
1395         AND EAX,EAX\r
1396         JNZ L_129\r
1397         XOR EAX,EAX\r
1398         MOV AL,_fd_head\r
1399         MOV ECX,2\r
1400         SHL EAX,CL\r
1401         AND EAX,0FFh\r
1402         MOV ECX,4\r
1403         AND EAX,ECX\r
1404         XOR ECX,ECX\r
1405         MOV CL,_fd_drive\r
1406         OR EAX,ECX\r
1407         PUSH EAX\r
1408         CALL _send_fdc\r
1409         MOV DWORD PTR [EBP-4], EAX\r
1410 L_129:\r
1411         MOV EAX,DWORD PTR [EBP-4]\r
1412         AND EAX,EAX\r
1413         JNZ L_130\r
1414         XOR EAX,EAX\r
1415         MOV AL,_fd_track\r
1416         PUSH EAX\r
1417         CALL _send_fdc\r
1418         MOV DWORD PTR [EBP-4], EAX\r
1419 L_130:\r
1420         MOV EAX,DWORD PTR [EBP-4]\r
1421         AND EAX,EAX\r
1422         JNZ L_131\r
1423         XOR EAX,EAX\r
1424         MOV AL,_fd_head\r
1425         PUSH EAX\r
1426         CALL _send_fdc\r
1427         MOV DWORD PTR [EBP-4], EAX\r
1428 L_131:\r
1429         MOV EAX,DWORD PTR [EBP-4]\r
1430         AND EAX,EAX\r
1431         JNZ L_132\r
1432         XOR EAX,EAX\r
1433         MOV AL,_fd_sector\r
1434         PUSH EAX\r
1435         CALL _send_fdc\r
1436         MOV DWORD PTR [EBP-4], EAX\r
1437 L_132:\r
1438         MOV EAX,DWORD PTR [EBP-4]\r
1439         AND EAX,EAX\r
1440         JNZ L_133\r
1441         PUSH 3\r
1442         CALL _GetParm\r
1443         PUSH EAX\r
1444         CALL _send_fdc\r
1445         MOV DWORD PTR [EBP-4], EAX\r
1446 L_133:\r
1447         MOV EAX,DWORD PTR [EBP-4]\r
1448         AND EAX,EAX\r
1449         JNZ L_134\r
1450         PUSH 4\r
1451         CALL _GetParm\r
1452         PUSH EAX\r
1453         CALL _send_fdc\r
1454         MOV DWORD PTR [EBP-4], EAX\r
1455 L_134:\r
1456         MOV EAX,DWORD PTR [EBP-4]\r
1457         AND EAX,EAX\r
1458         JNZ L_135\r
1459         PUSH 5\r
1460         CALL _GetParm\r
1461         PUSH EAX\r
1462         CALL _send_fdc\r
1463         MOV DWORD PTR [EBP-4], EAX\r
1464 L_135:\r
1465         MOV EAX,DWORD PTR [EBP-4]\r
1466         AND EAX,EAX\r
1467         JNZ L_136\r
1468         PUSH 6\r
1469         CALL _GetParm\r
1470         PUSH EAX\r
1471         CALL _send_fdc\r
1472         MOV DWORD PTR [EBP-4], EAX\r
1473 L_136:\r
1474         MOV EAX,DWORD PTR [EBP-4]\r
1475         AND EAX,EAX\r
1476         JNZ L_137\r
1477         CALL _get_fdc_status\r
1478         MOV DWORD PTR [EBP-4], EAX\r
1479 L_137:\r
1480         MOV EAX,DWORD PTR [EBP-4]\r
1481         AND EAX,EAX\r
1482         JNZ L_138\r
1483         JMP L_126\r
1484 L_138:\r
1485         PUSH 200\r
1486         CALL FWORD PTR _MicroDelay\r
1487         JMP L_125\r
1488 L_126:\r
1489 L_124:\r
1490         MOV EAX,DWORD PTR [EBP-4]\r
1491         AND EAX,EAX\r
1492         JNZ L_139\r
1493         MOV EAX,DWORD PTR [EBP+8]\r
1494         CMP EAX,1\r
1495         SETE AL\r
1496         AND AL,AL\r
1497         JZ L_140\r
1498         PUSH _sectbuf\r
1499         PUSH _fd_pData\r
1500         PUSH 512\r
1501         CALL FWORD PTR _CopyData\r
1502 L_140:\r
1503         MOV ESI,OFFSET _fdstatus\r
1504         MOV EAX,DWORD PTR [ESI+4]\r
1505         INC DWORD PTR [ESI+4]\r
1506         MOV EAX,_fd_pData\r
1507         ADD EAX,512\r
1508         MOV _fd_pData, EAX\r
1509         DEC _fd_nr_sectors\r
1510         XOR EAX,EAX\r
1511         MOV AL,_fd_nr_sectors\r
1512         INC _fd_sector\r
1513         XOR EAX,EAX\r
1514         MOV AL,_fd_sector\r
1515         MOV ESI,OFFSET _fdstatus\r
1516         XOR EAX,EAX\r
1517         MOV AL,BYTE PTR [ESI+13]\r
1518         SHL EAX,4\r
1519         MOV ECX,4\r
1520         ADD EAX,ECX\r
1521         MOV ESI,OFFSET _fdisk_table\r
1522         ADD ESI,EAX\r
1523         XOR EAX,EAX\r
1524         MOV AL,_fd_sector\r
1525         XOR ECX,ECX\r
1526         MOV CL,BYTE PTR [ESI]\r
1527         CMP EAX,ECX\r
1528         SETA AL\r
1529         AND AL,AL\r
1530         JZ L_141\r
1531         MOV EAX,1\r
1532         MOV _fd_sector, AL\r
1533         INC _fd_head\r
1534         XOR EAX,EAX\r
1535         MOV AL,_fd_head\r
1536 L_141:\r
1537         XOR EAX,EAX\r
1538         MOV AL,_fd_head\r
1539         CMP EAX,1\r
1540         SETA AL\r
1541         AND AL,AL\r
1542         JZ L_142\r
1543         XOR EAX,EAX\r
1544         MOV _fd_head, AL\r
1545         INC _fd_track\r
1546         XOR EAX,EAX\r
1547         MOV AL,_fd_track\r
1548 L_142:\r
1549 L_139:\r
1550         JMP L_116\r
1551 L_117:\r
1552         MOV EAX,DWORD PTR [EBP-4]\r
1553 L_143:\r
1554         MOV ESP,EBP\r
1555         POP EBP\r
1556         RETN 4\r
1557 _format_track:\r
1558         PUSH EBP\r
1559         MOV EBP,ESP\r
1560         SUB ESP,4\r
1561         MOV EAX,77\r
1562         MOV _fd_fdc_command, AL\r
1563         MOV EAX,1\r
1564         MOV _fwrite, AL\r
1565         PUSH _fd_pData\r
1566         PUSH 512\r
1567         PUSH 2\r
1568         PUSH 1\r
1569         PUSH 1\r
1570         CALL FWORD PTR _DmaSetUp\r
1571         MOV DWORD PTR [EBP-4], EAX\r
1572         MOV EAX,DWORD PTR [EBP-4]\r
1573         AND EAX,EAX\r
1574         JNZ L_144\r
1575         PUSH 3\r
1576         CALL _send_fdc\r
1577         MOV DWORD PTR [EBP-4], EAX\r
1578 L_144:\r
1579         MOV EAX,DWORD PTR [EBP-4]\r
1580         AND EAX,EAX\r
1581         JNZ L_145\r
1582         XOR EAX,EAX\r
1583         PUSH EAX\r
1584         CALL _GetParm\r
1585         PUSH EAX\r
1586         CALL _send_fdc\r
1587         MOV DWORD PTR [EBP-4], EAX\r
1588 L_145:\r
1589         MOV EAX,DWORD PTR [EBP-4]\r
1590         AND EAX,EAX\r
1591         JNZ L_146\r
1592         PUSH 1\r
1593         CALL _GetParm\r
1594         PUSH EAX\r
1595         CALL _send_fdc\r
1596         MOV DWORD PTR [EBP-4], EAX\r
1597 L_146:\r
1598         MOV EAX,DWORD PTR [EBP-4]\r
1599         AND EAX,EAX\r
1600         JNZ L_147\r
1601         CALL _seek\r
1602         MOV DWORD PTR [EBP-4], EAX\r
1603 L_147:\r
1604         MOV EAX,DWORD PTR [EBP-4]\r
1605         AND EAX,EAX\r
1606         JNZ L_148\r
1607         XOR EAX,EAX\r
1608         MOV AL,_fd_fdc_command\r
1609         PUSH EAX\r
1610         CALL _send_fdc\r
1611         MOV DWORD PTR [EBP-4], EAX\r
1612 L_148:\r
1613         MOV EAX,DWORD PTR [EBP-4]\r
1614         AND EAX,EAX\r
1615         JNZ L_149\r
1616         XOR EAX,EAX\r
1617         MOV AL,_fd_head\r
1618         MOV ECX,2\r
1619         SHL EAX,CL\r
1620         AND EAX,0FFh\r
1621         MOV ECX,4\r
1622         AND EAX,ECX\r
1623         XOR ECX,ECX\r
1624         MOV CL,_fd_drive\r
1625         OR EAX,ECX\r
1626         PUSH EAX\r
1627         CALL _send_fdc\r
1628         MOV DWORD PTR [EBP-4], EAX\r
1629 L_149:\r
1630         MOV EAX,DWORD PTR [EBP-4]\r
1631         AND EAX,EAX\r
1632         JNZ L_150\r
1633         PUSH 3\r
1634         CALL _GetParm\r
1635         PUSH EAX\r
1636         CALL _send_fdc\r
1637         MOV DWORD PTR [EBP-4], EAX\r
1638 L_150:\r
1639         MOV EAX,DWORD PTR [EBP-4]\r
1640         AND EAX,EAX\r
1641         JNZ L_151\r
1642         PUSH 4\r
1643         CALL _GetParm\r
1644         PUSH EAX\r
1645         CALL _send_fdc\r
1646         MOV DWORD PTR [EBP-4], EAX\r
1647 L_151:\r
1648         MOV EAX,DWORD PTR [EBP-4]\r
1649         AND EAX,EAX\r
1650         JNZ L_152\r
1651         PUSH 7\r
1652         CALL _GetParm\r
1653         PUSH EAX\r
1654         CALL _send_fdc\r
1655         MOV DWORD PTR [EBP-4], EAX\r
1656 L_152:\r
1657         MOV EAX,DWORD PTR [EBP-4]\r
1658         AND EAX,EAX\r
1659         JNZ L_153\r
1660         PUSH 8\r
1661         CALL _GetParm\r
1662         PUSH EAX\r
1663         CALL _send_fdc\r
1664         MOV DWORD PTR [EBP-4], EAX\r
1665 L_153:\r
1666         MOV EAX,DWORD PTR [EBP-4]\r
1667         AND EAX,EAX\r
1668         JNZ L_154\r
1669         CALL _get_fdc_status\r
1670         MOV DWORD PTR [EBP-4], EAX\r
1671 L_154:\r
1672         MOV EAX,DWORD PTR [EBP-4]\r
1673         MOV ESP,EBP\r
1674         POP EBP\r
1675         RETN\r
1676 _dev_op:\r
1677         PUSH EBP\r
1678         MOV EBP,ESP\r
1679         SUB ESP,8\r
1680         MOV EAX,DWORD PTR [EBP+8]\r
1681         MOV _fd_pData, EAX\r
1682         XOR EAX,EAX\r
1683         MOV _fwrite, AL\r
1684         MOV ESI,OFFSET _fdstatus\r
1685         XOR EAX,EAX\r
1686         MOV DWORD PTR [ESI+4], EAX\r
1687         MOV ESI,OFFSET _fdstatus\r
1688         XOR EAX,EAX\r
1689         MOV DWORD PTR [ESI], EAX\r
1690         MOV EAX,DWORD PTR [EBP+24]\r
1691         CMP EAX,10\r
1692         SETE AL\r
1693         AND AL,AL\r
1694         JZ L_156\r
1695         XOR EAX,EAX\r
1696         MOV _fd_drive, AL\r
1697         JMP L_157\r
1698 L_156:\r
1699         MOV EAX,1\r
1700         MOV _fd_drive, AL\r
1701 L_157:\r
1702         PUSH _fd_exch\r
1703         PUSH OFFSET _fd_msg\r
1704         CALL FWORD PTR _CheckMsg\r
1705         MOV DWORD PTR [EBP-4], EAX\r
1706         XOR EAX,EAX\r
1707         MOV AL,_fd_drive\r
1708         XOR ECX,ECX\r
1709         CMP EAX,ECX\r
1710         SETE AL\r
1711         AND AL,AL\r
1712         JZ L_158\r
1713         XOR EAX,EAX\r
1714         MOV AL,_type0\r
1715         AND EAX,EAX\r
1716         JNZ L_159\r
1717         MOV ESI,OFFSET _fdstatus\r
1718         MOV EAX,613\r
1719         MOV DWORD PTR [ESI], EAX\r
1720         JMP L_160\r
1721 L_159:\r
1722         MOV ESI,OFFSET _fdstatus\r
1723         XOR EAX,EAX\r
1724         MOV AL,_type0\r
1725         MOV BYTE PTR [ESI+13], AL\r
1726         JMP L_161\r
1727 L_158:\r
1728         XOR EAX,EAX\r
1729         MOV AL,_type1\r
1730         AND EAX,EAX\r
1731         JNZ L_162\r
1732         MOV ESI,OFFSET _fdstatus\r
1733         MOV EAX,613\r
1734         MOV DWORD PTR [ESI], EAX\r
1735         JMP L_160\r
1736 L_162:\r
1737         MOV ESI,OFFSET _fdstatus\r
1738         XOR EAX,EAX\r
1739         MOV AL,_type1\r
1740         MOV BYTE PTR [ESI+13], AL\r
1741 L_161:\r
1742         MOV ESI,OFFSET _fdstatus\r
1743         MOV EAX,DWORD PTR [EBP+16]\r
1744         CMP EAX,DWORD PTR [ESI+8]\r
1745         SETA AL\r
1746         AND AL,AL\r
1747         JZ L_163\r
1748         MOV ESI,OFFSET _fdstatus\r
1749         MOV EAX,612\r
1750         MOV DWORD PTR [ESI], EAX\r
1751         JMP L_160\r
1752 L_163:\r
1753         XOR EAX,EAX\r
1754         MOV AL,_fd_drive\r
1755         PUSH EAX\r
1756         CALL _fd_select\r
1757         MOV ESI,OFFSET _fdstatus\r
1758         XOR EAX,EAX\r
1759         MOV AL,BYTE PTR [ESI+13]\r
1760         SHL EAX,4\r
1761         MOV ECX,12\r
1762         ADD EAX,ECX\r
1763         MOV ESI,OFFSET _fdisk_table\r
1764         ADD ESI,EAX\r
1765         XOR EAX,EAX\r
1766         MOV AL,BYTE PTR [ESI]\r
1767         PUSH EAX\r
1768         PUSH 1015\r
1769         CALL FWORD PTR _OutByte\r
1770         CALL _purge_fdc\r
1771         MOV ESI,OFFSET _fdstatus\r
1772         MOV EBX,ESI\r
1773         MOV ESI,OFFSET _fdstatus\r
1774         XOR EAX,EAX\r
1775         MOV AL,BYTE PTR [ESI+13]\r
1776         SHL EAX,2\r
1777         MOV ESI,OFFSET _rgSectorMax\r
1778         ADD ESI,EAX\r
1779         MOV EAX,DWORD PTR [ESI]\r
1780         MOV DWORD PTR [EBX+8], EAX\r
1781         MOV EAX,DWORD PTR [EBP+12]\r
1782         MOV _fd_nr_sectors, AL\r
1783         PUSH 3\r
1784         CALL _GetParm\r
1785         MOV EBX,EAX\r
1786         PUSH EBX\r
1787         PUSH 4\r
1788         CALL _GetParm\r
1789         POP EDX\r
1790         MOV ECX,EDX\r
1791         MUL ECX\r
1792         MOV ECX,EAX\r
1793         MOV EAX,DWORD PTR [EBP+16]\r
1794         XOR EDX,EDX\r
1795         DIV ECX\r
1796         MOV _fd_track, AL\r
1797         PUSH 3\r
1798         CALL _GetParm\r
1799         MOV EBX,EAX\r
1800         PUSH EBX\r
1801         PUSH 4\r
1802         CALL _GetParm\r
1803         POP EDX\r
1804         MOV ECX,EDX\r
1805         MUL ECX\r
1806         MOV ECX,EAX\r
1807         MOV EAX,DWORD PTR [EBP+16]\r
1808         XOR EDX,EDX\r
1809         DIV ECX\r
1810         MOV EAX,EDX\r
1811         MOV DWORD PTR [EBP-8], EAX\r
1812         PUSH 4\r
1813         CALL _GetParm\r
1814         MOV ECX,EAX\r
1815         MOV EAX,DWORD PTR [EBP-8]\r
1816         XOR EDX,EDX\r
1817         DIV ECX\r
1818         MOV _fd_head, AL\r
1819         PUSH 4\r
1820         CALL _GetParm\r
1821         MOV ECX,EAX\r
1822         MOV EAX,DWORD PTR [EBP-8]\r
1823         XOR EDX,EDX\r
1824         DIV ECX\r
1825         MOV EAX,EDX\r
1826         ADD EAX,1\r
1827         MOV _fd_sector, AL\r
1828         MOV EAX,DWORD PTR [EBP+20]\r
1829         JMP L_165\r
1830 L_166:\r
1831         MOV ESI,OFFSET _fdstatus\r
1832         XOR EAX,EAX\r
1833         MOV DWORD PTR [ESI], EAX\r
1834         JMP L_164\r
1835 L_167:\r
1836 L_168:\r
1837 L_169:\r
1838         MOV ESI,OFFSET _fdstatus\r
1839         MOV EBX,ESI\r
1840         PUSH EBX\r
1841         PUSH DWORD PTR [EBP+20]\r
1842         CALL _RdWrtVerf\r
1843         POP EDX\r
1844         MOV DWORD PTR [EDX], EAX\r
1845         JMP L_164\r
1846 L_170:\r
1847         MOV ESI,OFFSET _fdstatus\r
1848         MOV EAX,614\r
1849         MOV DWORD PTR [ESI], EAX\r
1850         JMP L_164\r
1851 L_171:\r
1852         JMP L_164\r
1853 L_172:\r
1854         JMP L_164\r
1855 L_173:\r
1856         MOV ESI,OFFSET _fdstatus\r
1857         MOV EAX,614\r
1858         MOV DWORD PTR [ESI], EAX\r
1859         JMP L_164\r
1860 L_165:\r
1861         CMP EAX,6\r
1862         JE L_172\r
1863         CMP EAX,5\r
1864         JE L_171\r
1865         CMP EAX,4\r
1866         JE L_170\r
1867         CMP EAX,3\r
1868         JE L_169\r
1869         CMP EAX,2\r
1870         JE L_168\r
1871         CMP EAX,1\r
1872         JE L_167\r
1873         CMP EAX,0\r
1874         JE L_166\r
1875         JMP L_173\r
1876 L_164:\r
1877         XOR EAX,EAX\r
1878         MOV AL,_fd_drive\r
1879         PUSH EAX\r
1880         CALL _fd_motoroff\r
1881         MOV ESI,OFFSET _fdstatus\r
1882         MOV EAX,DWORD PTR [ESI]\r
1883 L_160:\r
1884         MOV ESP,EBP\r
1885         POP EBP\r
1886         RETN 20\r
1887 _dev_stat:\r
1888         PUSH EBP\r
1889         MOV EBP,ESP\r
1890         SUB ESP,4\r
1891         MOV EAX,DWORD PTR [EBP+20]\r
1892         CMP EAX,10\r
1893         SETE AL\r
1894         AND AL,AL\r
1895         JZ L_174\r
1896         XOR EAX,EAX\r
1897         MOV _fd_drive, AL\r
1898         JMP L_175\r
1899 L_174:\r
1900         MOV EAX,1\r
1901         MOV _fd_drive, AL\r
1902 L_175:\r
1903         XOR EAX,EAX\r
1904         MOV AL,_fd_drive\r
1905         XOR ECX,ECX\r
1906         CMP EAX,ECX\r
1907         SETE AL\r
1908         AND AL,AL\r
1909         JZ L_176\r
1910         XOR EAX,EAX\r
1911         MOV AL,_type0\r
1912         XOR ECX,ECX\r
1913         CMP EAX,ECX\r
1914         SETE AL\r
1915         AND AL,AL\r
1916         JZ L_177\r
1917         MOV ESI,OFFSET _fdstatus\r
1918         MOV EAX,613\r
1919         MOV DWORD PTR [ESI], EAX\r
1920         JMP L_178\r
1921 L_177:\r
1922         MOV ESI,OFFSET _fdstatus\r
1923         XOR EAX,EAX\r
1924         MOV AL,_type0\r
1925         MOV BYTE PTR [ESI+13], AL\r
1926         MOV ESI,OFFSET _fdstatus\r
1927         XOR EAX,EAX\r
1928         MOV AL,_type0\r
1929         SHL EAX,4\r
1930         MOV ECX,11\r
1931         ADD EAX,ECX\r
1932         MOV EBX,ESI\r
1933         MOV ESI,OFFSET _fdisk_table\r
1934         ADD ESI,EAX\r
1935         XOR EAX,EAX\r
1936         MOV AL,BYTE PTR [ESI]\r
1937         MOV ECX,1\r
1938         ADD EAX,ECX\r
1939         MOV DWORD PTR [EBX+16], EAX\r
1940         MOV ESI,OFFSET _fdstatus\r
1941         MOV EAX,2\r
1942         MOV DWORD PTR [ESI+20], EAX\r
1943         MOV ESI,OFFSET _fdstatus\r
1944         XOR EAX,EAX\r
1945         MOV AL,_type0\r
1946         SHL EAX,4\r
1947         MOV ECX,4\r
1948         ADD EAX,ECX\r
1949         MOV EBX,ESI\r
1950         MOV ESI,OFFSET _fdisk_table\r
1951         ADD ESI,EAX\r
1952         XOR EAX,EAX\r
1953         MOV AL,BYTE PTR [ESI]\r
1954         MOV DWORD PTR [EBX+24], EAX\r
1955         MOV ESI,OFFSET _fdstatus\r
1956         MOV EAX,512\r
1957         MOV DWORD PTR [ESI+28], EAX\r
1958         JMP L_179\r
1959 L_176:\r
1960         XOR EAX,EAX\r
1961         MOV AL,_type1\r
1962         XOR ECX,ECX\r
1963         CMP EAX,ECX\r
1964         SETE AL\r
1965         AND AL,AL\r
1966         JZ L_180\r
1967         MOV ESI,OFFSET _fdstatus\r
1968         MOV EAX,613\r
1969         MOV DWORD PTR [ESI], EAX\r
1970         JMP L_178\r
1971 L_180:\r
1972         MOV ESI,OFFSET _fdstatus\r
1973         XOR EAX,EAX\r
1974         MOV AL,_type1\r
1975         MOV BYTE PTR [ESI+13], AL\r
1976         MOV ESI,OFFSET _fdstatus\r
1977         XOR EAX,EAX\r
1978         MOV AL,_type1\r
1979         SHL EAX,4\r
1980         MOV ECX,11\r
1981         ADD EAX,ECX\r
1982         MOV EBX,ESI\r
1983         MOV ESI,OFFSET _fdisk_table\r
1984         ADD ESI,EAX\r
1985         XOR EAX,EAX\r
1986         MOV AL,BYTE PTR [ESI]\r
1987         MOV ECX,1\r
1988         ADD EAX,ECX\r
1989         MOV DWORD PTR [EBX+16], EAX\r
1990         MOV ESI,OFFSET _fdstatus\r
1991         MOV EAX,2\r
1992         MOV DWORD PTR [ESI+20], EAX\r
1993         MOV ESI,OFFSET _fdstatus\r
1994         XOR EAX,EAX\r
1995         MOV AL,_type1\r
1996         SHL EAX,4\r
1997         MOV ECX,4\r
1998         ADD EAX,ECX\r
1999         MOV EBX,ESI\r
2000         MOV ESI,OFFSET _fdisk_table\r
2001         ADD ESI,EAX\r
2002         XOR EAX,EAX\r
2003         MOV AL,BYTE PTR [ESI]\r
2004         MOV DWORD PTR [EBX+24], EAX\r
2005         MOV ESI,OFFSET _fdstatus\r
2006         MOV EAX,512\r
2007         MOV DWORD PTR [ESI+28], EAX\r
2008 L_179:\r
2009         MOV ESI,OFFSET _fdstatus\r
2010         MOV EBX,ESI\r
2011         MOV ESI,OFFSET _fdstatus\r
2012         XOR EAX,EAX\r
2013         MOV AL,BYTE PTR [ESI+13]\r
2014         SHL EAX,2\r
2015         MOV ESI,OFFSET _rgSectorMax\r
2016         ADD ESI,EAX\r
2017         MOV EAX,DWORD PTR [ESI]\r
2018         MOV DWORD PTR [EBX+8], EAX\r
2019         MOV ESI,OFFSET _fdstatus\r
2020         XOR EAX,EAX\r
2021         MOV AL,BYTE PTR [ESI+13]\r
2022         SHL EAX,4\r
2023         MOV ESI,OFFSET _fdisk_table\r
2024         ADD ESI,EAX\r
2025         PUSH ESI\r
2026         MOV EAX,OFFSET _fdstatus\r
2027         ADD EAX,32\r
2028         PUSH EAX\r
2029         PUSH 16\r
2030         CALL FWORD PTR _CopyData\r
2031         PUSH OFFSET _FDC_STATUS\r
2032         MOV EAX,OFFSET _fdstatus\r
2033         ADD EAX,48\r
2034         PUSH EAX\r
2035         PUSH 8\r
2036         CALL FWORD PTR _CopyData\r
2037         MOV EAX,DWORD PTR [EBP+12]\r
2038         CMP EAX,64\r
2039         SETB AL\r
2040         AND AL,AL\r
2041         JZ L_181\r
2042         MOV EAX,DWORD PTR [EBP+12]\r
2043         MOV DWORD PTR [EBP-4], EAX\r
2044         JMP L_182\r
2045 L_181:\r
2046         MOV EAX,64\r
2047         MOV DWORD PTR [EBP-4], EAX\r
2048 L_182:\r
2049         PUSH OFFSET _fdstatus\r
2050         PUSH DWORD PTR [EBP+16]\r
2051         PUSH DWORD PTR [EBP-4]\r
2052         CALL FWORD PTR _CopyData\r
2053         MOV ESI,DWORD PTR [EBP+8]\r
2054         MOV EAX,DWORD PTR [EBP-4]\r
2055         MOV DWORD PTR [ESI], EAX\r
2056         XOR EAX,EAX\r
2057 L_178:\r
2058         MOV ESP,EBP\r
2059         POP EBP\r
2060         RETN 16\r
2061 _dev_init:\r
2062         PUSH EBP\r
2063         MOV EBP,ESP\r
2064         SUB ESP,4\r
2065         MOV EAX,DWORD PTR [EBP+8]\r
2066         CMP EAX,64\r
2067         SETA AL\r
2068         AND AL,AL\r
2069         JZ L_183\r
2070         MOV EAX,64\r
2071         MOV DWORD PTR [EBP-4], EAX\r
2072         JMP L_184\r
2073 L_183:\r
2074         MOV EAX,DWORD PTR [EBP+8]\r
2075         MOV DWORD PTR [EBP-4], EAX\r
2076 L_184:\r
2077         PUSH DWORD PTR [EBP+12]\r
2078         PUSH OFFSET _FDStatTmp\r
2079         PUSH DWORD PTR [EBP-4]\r
2080         CALL FWORD PTR _CopyData\r
2081         MOV EAX,DWORD PTR [EBP+16]\r
2082         CMP EAX,10\r
2083         SETE AL\r
2084         AND AL,AL\r
2085         JZ L_185\r
2086         XOR EAX,EAX\r
2087         MOV _fd_drive, AL\r
2088         JMP L_186\r
2089 L_185:\r
2090         MOV EAX,1\r
2091         MOV _fd_drive, AL\r
2092 L_186:\r
2093         XOR EAX,EAX\r
2094         MOV AL,_fd_drive\r
2095         XOR ECX,ECX\r
2096         CMP EAX,ECX\r
2097         SETE AL\r
2098         AND AL,AL\r
2099         JZ L_187\r
2100         MOV ESI,OFFSET _FDStatTmp\r
2101         XOR EAX,EAX\r
2102         MOV AL,BYTE PTR [ESI+13]\r
2103         MOV _type0, AL\r
2104         XOR EAX,EAX\r
2105         MOV AL,_type0\r
2106         XOR ECX,ECX\r
2107         CMP EAX,ECX\r
2108         SETE AL\r
2109         AND AL,AL\r
2110         JZ L_188\r
2111         MOV ESI,OFFSET _fdstatus\r
2112         MOV EAX,613\r
2113         MOV DWORD PTR [ESI], EAX\r
2114         JMP L_189\r
2115 L_188:\r
2116         MOV ESI,OFFSET _fdstatus\r
2117         XOR EAX,EAX\r
2118         MOV AL,_type0\r
2119         MOV BYTE PTR [ESI+13], AL\r
2120         JMP L_190\r
2121 L_187:\r
2122         MOV ESI,OFFSET _FDStatTmp\r
2123         XOR EAX,EAX\r
2124         MOV AL,BYTE PTR [ESI+13]\r
2125         MOV _type1, AL\r
2126         XOR EAX,EAX\r
2127         MOV AL,_type1\r
2128         XOR ECX,ECX\r
2129         CMP EAX,ECX\r
2130         SETE AL\r
2131         AND AL,AL\r
2132         JZ L_191\r
2133         MOV ESI,OFFSET _fdstatus\r
2134         MOV EAX,613\r
2135         MOV DWORD PTR [ESI], EAX\r
2136         JMP L_189\r
2137 L_191:\r
2138         MOV ESI,OFFSET _fdstatus\r
2139         XOR EAX,EAX\r
2140         MOV AL,_type1\r
2141         MOV BYTE PTR [ESI+13], AL\r
2142 L_190:\r
2143         XOR EAX,EAX\r
2144         MOV AL,_fd_drive\r
2145         PUSH EAX\r
2146         CALL _fd_select\r
2147         MOV ESI,OFFSET _fdstatus\r
2148         MOV EBX,ESI\r
2149         PUSH EBX\r
2150         CALL _FDC_reset\r
2151         POP EDX\r
2152         MOV DWORD PTR [EDX], EAX\r
2153         XOR EAX,EAX\r
2154         MOV AL,_fd_drive\r
2155         PUSH EAX\r
2156         CALL _fd_motoroff\r
2157         MOV ESI,OFFSET _fdstatus\r
2158         MOV EAX,DWORD PTR [ESI]\r
2159 L_189:\r
2160         MOV ESP,EBP\r
2161         POP EBP\r
2162         RETN 12\r