]> pd.if.org Git - mmurtl/blob - ossource/parallel.asm
autocommit for file dated 1995-02-09 11:17:24
[mmurtl] / ossource / parallel.asm
1 \r
2 .DATA\r
3 EXTRN _AllocExch FWORD\r
4 EXTRN _InitDevDr FWORD\r
5 EXTRN _UnMaskIRQ FWORD\r
6 EXTRN _MaskIRQ FWORD\r
7 EXTRN _SetIRQVector FWORD\r
8 EXTRN _EndOfIRQ FWORD\r
9 EXTRN _SendMsg FWORD\r
10 EXTRN _ISendMsg FWORD\r
11 EXTRN _WaitMsg FWORD\r
12 EXTRN _CheckMsg FWORD\r
13 EXTRN _GetTimerTick FWORD\r
14 EXTRN _Alarm FWORD\r
15 EXTRN _KillAlarm FWORD\r
16 EXTRN _Sleep FWORD\r
17 EXTRN _MicroDelay FWORD\r
18 EXTRN _OutByte FWORD\r
19 EXTRN _InByte FWORD\r
20 EXTRN _CopyData FWORD\r
21 EXTRN _SpawnTask FWORD\r
22 EXTRN _GetJobNum FWORD\r
23 _xmit_timeout DD 100\r
24 _control_byte DB 0\r
25 PUBLIC _SendBuf DB 4096 DUP(0)\r
26 _head_send DD 0h\r
27 _tail_send DD 0h\r
28 _cSendBuf DD 0h\r
29 _sSendBuf DD 0h\r
30 _burstcount DD 0h\r
31 _strobecount DD 0h\r
32 _DAT DW 0h\r
33 _STA DW 0h\r
34 _STC DW 0h\r
35 _lptStk DD 200 DUP(0)\r
36 _lptStkTop DD 0h\r
37 _lptstat DB 61 DUP(0)\r
38 _pPS DD 0h\r
39 _lptdcb DB 64 DUP(0)\r
40 \r
41 \r
42 .CODE\r
43 _lpt_task:\r
44         PUSH EBP\r
45         MOV EBP,ESP\r
46 L_1:\r
47         MOV EAX,1\r
48         AND EAX,EAX\r
49         JZ L_2\r
50         MOVZX EAX,_STA\r
51         PUSH EAX\r
52         CALL FWORD PTR _InByte\r
53         MOV _control_byte, AL\r
54         MOV ESI,OFFSET _lptstat\r
55         XOR EAX,EAX\r
56         MOV AL,_control_byte\r
57         MOV BYTE PTR [ESI+12], AL\r
58         MOV EAX,_cSendBuf\r
59         AND EAX,EAX\r
60         JZ L_3\r
61         MOV EAX,10\r
62         MOV _burstcount, EAX\r
63 L_4:\r
64         MOV EAX,_cSendBuf\r
65         AND EAX,EAX\r
66         JZ L_6\r
67         MOV EAX,_burstcount\r
68         DEC _burstcount\r
69 L_6:\r
70         AND EAX,EAX\r
71         JZ L_5\r
72         MOVZX EAX,_STA\r
73         PUSH EAX\r
74         CALL FWORD PTR _InByte\r
75         MOV _control_byte, AL\r
76         MOV ESI,OFFSET _lptstat\r
77         XOR EAX,EAX\r
78         MOV AL,_control_byte\r
79         MOV BYTE PTR [ESI+12], AL\r
80         XOR EAX,EAX\r
81         MOV AL,_control_byte\r
82         MOV ECX,128\r
83         AND EAX,ECX\r
84         JZ L_7\r
85         CLI\r
86         MOV EAX,_tail_send\r
87         MOV ESI,OFFSET _SendBuf\r
88         ADD ESI,EAX\r
89         XOR EAX,EAX\r
90         MOV AL,BYTE PTR [ESI]\r
91         PUSH EAX\r
92         MOVZX EAX,_DAT\r
93         PUSH EAX\r
94         CALL FWORD PTR _OutByte\r
95         INC _tail_send\r
96         MOV EAX,_tail_send\r
97         CMP EAX,_sSendBuf\r
98         SETE AL\r
99         AND AL,AL\r
100         JZ L_8\r
101         XOR EAX,EAX\r
102         MOV _tail_send, EAX\r
103 L_8:\r
104         DEC _cSendBuf\r
105         MOV EAX,_cSendBuf\r
106         STI\r
107         PUSH 13\r
108         MOVZX EAX,_STC\r
109         PUSH EAX\r
110         CALL FWORD PTR _OutByte\r
111         PUSH 12\r
112         MOVZX EAX,_STC\r
113         PUSH EAX\r
114         CALL FWORD PTR _OutByte\r
115         JMP L_9\r
116 L_7:\r
117         PUSH 2\r
118         CALL FWORD PTR _Sleep\r
119 L_9:\r
120         JMP L_4\r
121 L_5:\r
122         PUSH 1\r
123         CALL FWORD PTR _Sleep\r
124         JMP L_10\r
125 L_3:\r
126         PUSH 30\r
127         CALL FWORD PTR _Sleep\r
128 L_10:\r
129         JMP L_1\r
130 L_2:\r
131         POP EBP\r
132         RETN\r
133 PUBLIC _lpt_setup:\r
134         PUSH EBP\r
135         MOV EBP,ESP\r
136         SUB ESP,4\r
137         MOV ESI,OFFSET _lptdcb\r
138         MOV EAX,76\r
139         MOV BYTE PTR [ESI], AL\r
140         MOV ESI,OFFSET _lptdcb\r
141         MOV EAX,1\r
142         ADD ESI,EAX\r
143         MOV EAX,80\r
144         MOV BYTE PTR [ESI], AL\r
145         MOV ESI,OFFSET _lptdcb\r
146         MOV EAX,2\r
147         ADD ESI,EAX\r
148         MOV EAX,84\r
149         MOV BYTE PTR [ESI], AL\r
150         MOV ESI,OFFSET _lptdcb\r
151         MOV EAX,3\r
152         MOV BYTE PTR [ESI+12], AL\r
153         MOV ESI,OFFSET _lptdcb\r
154         MOV EAX,2\r
155         MOV BYTE PTR [ESI+13], AL\r
156         MOV ESI,OFFSET _lptdcb\r
157         MOV EAX,1\r
158         MOV WORD PTR [ESI+14], AX\r
159         MOV ESI,OFFSET _lptdcb\r
160         XOR EAX,EAX\r
161         MOV DWORD PTR [ESI+20], EAX\r
162         MOV ESI,OFFSET _lptdcb\r
163         MOV EAX,OFFSET _lptdev_op\r
164         MOV DWORD PTR [ESI+24], EAX\r
165         MOV ESI,OFFSET _lptdcb\r
166         MOV EAX,OFFSET _lptdev_init\r
167         MOV DWORD PTR [ESI+28], EAX\r
168         MOV ESI,OFFSET _lptdcb\r
169         MOV EAX,OFFSET _lptdev_stat\r
170         MOV DWORD PTR [ESI+32], EAX\r
171         MOV ESI,OFFSET _lptstat\r
172         MOV EAX,100\r
173         MOV DWORD PTR [ESI+29], EAX\r
174         MOV ESI,OFFSET _lptstat\r
175         MOV EAX,888\r
176         MOV DWORD PTR [ESI+21], EAX\r
177         MOV ESI,OFFSET _lptstat\r
178         MOV EAX,7\r
179         MOV BYTE PTR [ESI+20], AL\r
180         MOV ESI,OFFSET _lptstat\r
181         MOV EAX,4096\r
182         MOV DWORD PTR [ESI+25], EAX\r
183         MOV EAX,4096\r
184         MOV _sSendBuf, EAX\r
185         MOV ESI,OFFSET _lptstat\r
186         MOV EAX,DWORD PTR [ESI+21]\r
187         MOV _DAT, AX\r
188         MOV ESI,OFFSET _lptstat\r
189         MOV EAX,DWORD PTR [ESI+21]\r
190         ADD EAX,1\r
191         MOV _STA, AX\r
192         MOV ESI,OFFSET _lptstat\r
193         MOV EAX,DWORD PTR [ESI+21]\r
194         ADD EAX,2\r
195         MOV _STC, AX\r
196         XOR EAX,EAX\r
197         MOV _cSendBuf, EAX\r
198         XOR EAX,EAX\r
199         MOV _head_send, EAX\r
200         XOR EAX,EAX\r
201         MOV _tail_send, EAX\r
202         PUSH 8\r
203         MOVZX EAX,_STC\r
204         PUSH EAX\r
205         CALL FWORD PTR _OutByte\r
206         PUSH 100\r
207         CALL FWORD PTR _MicroDelay\r
208         PUSH 12\r
209         MOVZX EAX,_STC\r
210         PUSH EAX\r
211         CALL FWORD PTR _OutByte\r
212         PUSH OFFSET _lpt_task\r
213         PUSH 19\r
214         XOR EAX,EAX\r
215         PUSH EAX\r
216         PUSH OFFSET _lptStkTop\r
217         PUSH 1\r
218         CALL FWORD PTR _SpawnTask\r
219         MOV DWORD PTR [EBP-4], EAX\r
220         MOV EAX,DWORD PTR [EBP-4]\r
221         AND EAX,EAX\r
222         JZ L_11\r
223         MOV EAX,DWORD PTR [EBP-4]\r
224         JMP L_12\r
225 L_11:\r
226         PUSH 3\r
227         PUSH OFFSET _lptdcb\r
228         PUSH 1\r
229         PUSH 1\r
230         CALL FWORD PTR _InitDevDr\r
231         MOV DWORD PTR [EBP-4], EAX\r
232 L_12:\r
233         MOV ESP,EBP\r
234         POP EBP\r
235         RETN\r
236 _WriteByteL:\r
237         PUSH EBP\r
238         MOV EBP,ESP\r
239         SUB ESP,12\r
240         XOR EAX,EAX\r
241         MOV DWORD PTR [EBP-4], EAX\r
242         MOV ESI,OFFSET _lptstat\r
243         MOV EAX,DWORD PTR [ESI+29]\r
244         MOV DWORD PTR [EBP-8], EAX\r
245 L_13:\r
246         MOV EAX,_cSendBuf\r
247         CMP EAX,_sSendBuf\r
248         SETE AL\r
249         AND AL,AL\r
250         JZ L_14\r
251         PUSH 1\r
252         CALL FWORD PTR _Sleep\r
253         MOV EAX,DWORD PTR [EBP-8]\r
254         DEC DWORD PTR [EBP-8]\r
255         MOV EAX,DWORD PTR [EBP-8]\r
256         AND EAX,EAX\r
257         JNZ L_15\r
258         MOV EAX,901\r
259         JMP L_16\r
260 L_15:\r
261         JMP L_13\r
262 L_14:\r
263         CLI\r
264         MOV EAX,_head_send\r
265         MOV ESI,OFFSET _SendBuf\r
266         ADD ESI,EAX\r
267         XOR EAX,EAX\r
268         MOV AL,BYTE PTR [EBP+8]\r
269         MOV BYTE PTR [ESI], AL\r
270         INC _head_send\r
271         MOV EAX,_head_send\r
272         CMP EAX,_sSendBuf\r
273         SETE AL\r
274         AND AL,AL\r
275         JZ L_17\r
276         XOR EAX,EAX\r
277         MOV _head_send, EAX\r
278 L_17:\r
279         INC _cSendBuf\r
280         MOV EAX,_cSendBuf\r
281         STI\r
282         MOV EAX,DWORD PTR [EBP-4]\r
283 L_16:\r
284         MOV ESP,EBP\r
285         POP EBP\r
286         RETN 4\r
287 _WriteRecordL:\r
288         PUSH EBP\r
289         MOV EBP,ESP\r
290         SUB ESP,2\r
291         XOR EAX,EAX\r
292         MOV WORD PTR [EBP-2], AX\r
293 L_18:\r
294         MOVZX EAX,WORD PTR [EBP+8]\r
295         AND EAX,EAX\r
296         JZ L_20\r
297         MOVSX EAX,WORD PTR [EBP-2]\r
298         AND EAX,EAX\r
299         SETZ AL\r
300         AND AL,AL\r
301 L_20:\r
302         JZ L_19\r
303         MOV ESI,DWORD PTR [EBP+12]\r
304         INC DWORD PTR [EBP+12]\r
305         XOR EAX,EAX\r
306         MOV AL,BYTE PTR [ESI]\r
307         PUSH EAX\r
308         CALL _WriteByteL\r
309         MOV WORD PTR [EBP-2], AX\r
310         DEC WORD PTR [EBP+8]\r
311         MOVZX EAX,WORD PTR [EBP+8]\r
312         JMP L_18\r
313 L_19:\r
314         MOVSX EAX,WORD PTR [EBP-2]\r
315         MOV ESP,EBP\r
316         POP EBP\r
317         RETN 8\r
318 _OpenLPT:\r
319         PUSH EBP\r
320         MOV EBP,ESP\r
321         SUB ESP,11\r
322         LEA EAX,DWORD PTR [EBP-8]\r
323         PUSH EAX\r
324         CALL FWORD PTR _GetJobNum\r
325         MOV ESI,OFFSET _lptstat\r
326         MOV EAX,DWORD PTR [ESI]\r
327         AND EAX,EAX\r
328         JZ L_22\r
329         MOV ESI,OFFSET _lptstat\r
330         MOV EAX,DWORD PTR [EBP-8]\r
331         CMP EAX,DWORD PTR [ESI]\r
332         SETNE AL\r
333         AND AL,AL\r
334         JZ L_23\r
335         MOV EAX,909\r
336         JMP L_24\r
337 L_23:\r
338         XOR EAX,EAX\r
339         JMP L_24\r
340 L_25:\r
341 L_22:\r
342         MOV ESI,OFFSET _lptstat\r
343         MOV EAX,DWORD PTR [EBP-8]\r
344         MOV DWORD PTR [ESI], EAX\r
345         MOV EAX,_cSendBuf\r
346         AND EAX,EAX\r
347         JNZ L_26\r
348         XOR EAX,EAX\r
349         MOV _cSendBuf, EAX\r
350         XOR EAX,EAX\r
351         MOV _head_send, EAX\r
352         XOR EAX,EAX\r
353         MOV _tail_send, EAX\r
354 L_26:\r
355         MOV ESI,OFFSET _lptstat\r
356         MOV EAX,DWORD PTR [ESI+21]\r
357         MOV WORD PTR [EBP-10], AX\r
358         MOVZX EAX,WORD PTR [EBP-10]\r
359         MOV _DAT, AX\r
360         MOVZX EAX,WORD PTR [EBP-10]\r
361         MOV ECX,1\r
362         ADD EAX,ECX\r
363         MOV _STA, AX\r
364         MOVZX EAX,WORD PTR [EBP-10]\r
365         MOV ECX,2\r
366         ADD EAX,ECX\r
367         MOV _STC, AX\r
368         XOR EAX,EAX\r
369 L_24:\r
370         MOV ESP,EBP\r
371         POP EBP\r
372         RETN\r
373 _CloseLPT:\r
374         PUSH EBP\r
375         MOV EBP,ESP\r
376         SUB ESP,8\r
377         LEA EAX,DWORD PTR [EBP-8]\r
378         PUSH EAX\r
379         CALL FWORD PTR _GetJobNum\r
380         MOV ESI,OFFSET _lptstat\r
381         MOV EAX,DWORD PTR [ESI]\r
382         AND EAX,EAX\r
383         JZ L_27\r
384         MOV ESI,OFFSET _lptstat\r
385         MOV EAX,DWORD PTR [EBP-8]\r
386         CMP EAX,DWORD PTR [ESI]\r
387         SETNE AL\r
388         AND AL,AL\r
389         JZ L_28\r
390         MOV EAX,912\r
391         JMP L_29\r
392 L_28:\r
393         XOR EAX,EAX\r
394         JMP L_29\r
395 L_30:\r
396         JMP L_31\r
397 L_27:\r
398         MOV EAX,907\r
399         JMP L_29\r
400 L_31:\r
401         MOVSX EAX,WORD PTR [EBP+8]\r
402         AND EAX,EAX\r
403         JZ L_32\r
404         XOR EAX,EAX\r
405         MOV _cSendBuf, EAX\r
406         XOR EAX,EAX\r
407         MOV _head_send, EAX\r
408         XOR EAX,EAX\r
409         MOV _tail_send, EAX\r
410 L_32:\r
411         MOV ESI,OFFSET _lptstat\r
412         XOR EAX,EAX\r
413         MOV DWORD PTR [ESI], EAX\r
414         XOR EAX,EAX\r
415 L_29:\r
416         MOV ESP,EBP\r
417         POP EBP\r
418         RETN 4\r
419 _lptdev_op:\r
420         PUSH EBP\r
421         MOV EBP,ESP\r
422         SUB ESP,9\r
423         LEA EAX,DWORD PTR [EBP-8]\r
424         PUSH EAX\r
425         CALL FWORD PTR _GetJobNum\r
426         MOV ESI,OFFSET _lptstat\r
427         MOV EAX,DWORD PTR [ESI]\r
428         AND EAX,EAX\r
429         SETZ AL\r
430         AND AL,AL\r
431         JZ L_33\r
432         MOV EAX,DWORD PTR [EBP+20]\r
433         CMP EAX,10\r
434         SETNE AL\r
435         AND AL,AL\r
436 L_33:\r
437         JZ L_34\r
438         MOV EAX,907\r
439         JMP L_35\r
440 L_34:\r
441         MOV ESI,OFFSET _lptstat\r
442         MOV EAX,DWORD PTR [ESI]\r
443         AND EAX,EAX\r
444         JZ L_36\r
445         MOV ESI,OFFSET _lptstat\r
446         MOV EAX,DWORD PTR [ESI]\r
447         CMP EAX,DWORD PTR [EBP-8]\r
448         SETNE AL\r
449         AND AL,AL\r
450         JZ L_37\r
451         MOV EAX,DWORD PTR [EBP-8]\r
452         CMP EAX,1\r
453         SETNE AL\r
454         AND AL,AL\r
455 L_37:\r
456         JZ L_38\r
457         MOV EAX,912\r
458         JMP L_35\r
459 L_38:\r
460 L_36:\r
461         XOR EAX,EAX\r
462         MOV DWORD PTR [EBP-4], EAX\r
463         MOV EAX,DWORD PTR [EBP+20]\r
464         JMP L_40\r
465 L_41:\r
466         JMP L_39\r
467 L_42:\r
468         MOV ESI,DWORD PTR [EBP+8]\r
469         XOR EAX,EAX\r
470         MOV AL,BYTE PTR [ESI]\r
471         PUSH EAX\r
472         CALL _WriteByteL\r
473         MOV DWORD PTR [EBP-4], EAX\r
474         JMP L_39\r
475 L_43:\r
476         PUSH DWORD PTR [EBP+8]\r
477         PUSH DWORD PTR [EBP+12]\r
478         CALL _WriteRecordL\r
479         MOV DWORD PTR [EBP-4], EAX\r
480         JMP L_39\r
481 L_44:\r
482         MOV ESI,OFFSET _lptstat\r
483         MOV EAX,DWORD PTR [EBP+16]\r
484         MOV DWORD PTR [ESI+29], EAX\r
485         JMP L_39\r
486 L_45:\r
487         CALL _OpenLPT\r
488         MOV DWORD PTR [EBP-4], EAX\r
489         JMP L_39\r
490 L_46:\r
491         XOR EAX,EAX\r
492         PUSH EAX\r
493         CALL _CloseLPT\r
494         MOV DWORD PTR [EBP-4], EAX\r
495         JMP L_39\r
496 L_47:\r
497         PUSH 1\r
498         CALL _CloseLPT\r
499         MOV DWORD PTR [EBP-4], EAX\r
500         JMP L_39\r
501 L_48:\r
502         MOV EAX,503\r
503         MOV DWORD PTR [EBP-4], EAX\r
504         JMP L_39\r
505 L_40:\r
506         CMP EAX,12\r
507         JE L_47\r
508         CMP EAX,11\r
509         JE L_46\r
510         CMP EAX,10\r
511         JE L_45\r
512         CMP EAX,14\r
513         JE L_44\r
514         CMP EAX,2\r
515         JE L_43\r
516         CMP EAX,32\r
517         JE L_42\r
518         CMP EAX,0\r
519         JE L_41\r
520         JMP L_48\r
521 L_39:\r
522         MOV ESI,OFFSET _lptstat\r
523         MOV EAX,DWORD PTR [EBP-4]\r
524         MOV DWORD PTR [ESI+4], EAX\r
525         MOV EAX,DWORD PTR [EBP-4]\r
526 L_35:\r
527         MOV ESP,EBP\r
528         POP EBP\r
529         RETN 20\r
530 _lptdev_stat:\r
531         PUSH EBP\r
532         MOV EBP,ESP\r
533         SUB ESP,4\r
534         MOV EAX,DWORD PTR [EBP+12]\r
535         CMP EAX,64\r
536         SETA AL\r
537         AND AL,AL\r
538         JZ L_49\r
539         MOV EAX,64\r
540         MOV DWORD PTR [EBP-4], EAX\r
541         JMP L_50\r
542 L_49:\r
543         MOV EAX,DWORD PTR [EBP+12]\r
544         MOV DWORD PTR [EBP-4], EAX\r
545 L_50:\r
546         MOV ESI,OFFSET _lptstat\r
547         MOV EAX,_cSendBuf\r
548         MOV DWORD PTR [ESI+13], EAX\r
549         PUSH OFFSET _lptstat\r
550         PUSH DWORD PTR [EBP+16]\r
551         PUSH DWORD PTR [EBP-4]\r
552         CALL FWORD PTR _CopyData\r
553         MOV ESI,DWORD PTR [EBP+8]\r
554         MOV EAX,DWORD PTR [EBP+12]\r
555         MOV DWORD PTR [ESI], EAX\r
556         XOR EAX,EAX\r
557         MOV ESP,EBP\r
558         POP EBP\r
559         RETN 16\r
560 _lptdev_init:\r
561         PUSH EBP\r
562         MOV EBP,ESP\r
563         SUB ESP,19\r
564         XOR EAX,EAX\r
565         MOV DWORD PTR [EBP-4], EAX\r
566         LEA EAX,DWORD PTR [EBP-16]\r
567         PUSH EAX\r
568         CALL FWORD PTR _GetJobNum\r
569         MOV ESI,OFFSET _lptstat\r
570         MOV EAX,DWORD PTR [ESI]\r
571         AND EAX,EAX\r
572         JZ L_52\r
573         MOV ESI,OFFSET _lptstat\r
574         MOV EAX,DWORD PTR [ESI]\r
575         CMP EAX,DWORD PTR [EBP-16]\r
576         SETNE AL\r
577         AND AL,AL\r
578 L_52:\r
579         JZ L_53\r
580         MOV EAX,912\r
581         JMP L_54\r
582 L_53:\r
583         MOV EAX,DWORD PTR [EBP+8]\r
584         CMP EAX,40\r
585         SETB AL\r
586         AND AL,AL\r
587         JZ L_55\r
588         MOV EAX,927\r
589         JMP L_54\r
590 L_55:\r
591         MOV EAX,DWORD PTR [EBP+12]\r
592         MOV _pPS, EAX\r
593         MOV ESI,_pPS\r
594         MOV EAX,DWORD PTR [ESI+29]\r
595         MOV DWORD PTR [EBP-12], EAX\r
596         MOV ESI,_pPS\r
597         MOV EAX,DWORD PTR [ESI+21]\r
598         MOV WORD PTR [EBP-18], AX\r
599         MOV ESI,OFFSET _lptstat\r
600         MOV EAX,DWORD PTR [ESI]\r
601         AND EAX,EAX\r
602         JZ L_56\r
603         MOV ESI,OFFSET _lptstat\r
604         MOV EAX,DWORD PTR [ESI+21]\r
605         MOVZX ECX,WORD PTR [EBP-18]\r
606         CMP EAX,ECX\r
607         SETNE AL\r
608         AND AL,AL\r
609         JZ L_57\r
610         MOV EAX,909\r
611         MOV DWORD PTR [EBP-4], EAX\r
612 L_57:\r
613 L_56:\r
614         MOV EAX,DWORD PTR [EBP-12]\r
615         AND EAX,EAX\r
616         JNZ L_58\r
617         MOV EAX,100\r
618         MOV DWORD PTR [EBP-12], EAX\r
619 L_58:\r
620         MOV ESI,OFFSET _lptstat\r
621         MOV EAX,DWORD PTR [EBP-12]\r
622         MOV DWORD PTR [ESI+29], EAX\r
623         MOVZX EAX,WORD PTR [EBP-18]\r
624         AND EAX,EAX\r
625         JNZ L_59\r
626         MOV EAX,924\r
627         JMP L_54\r
628 L_59:\r
629         MOV ESI,OFFSET _lptstat\r
630         MOVZX EAX,WORD PTR [EBP-18]\r
631         MOV DWORD PTR [ESI+21], EAX\r
632         MOV ESI,OFFSET _lptstat\r
633         MOV EAX,DWORD PTR [ESI+21]\r
634         MOV _DAT, AX\r
635         MOV ESI,OFFSET _lptstat\r
636         MOV EAX,DWORD PTR [ESI+21]\r
637         ADD EAX,1\r
638         MOV _STA, AX\r
639         MOV ESI,OFFSET _lptstat\r
640         MOV EAX,DWORD PTR [ESI+21]\r
641         ADD EAX,2\r
642         MOV _STC, AX\r
643         MOV ESI,OFFSET _lptstat\r
644         MOV EAX,DWORD PTR [ESI]\r
645         AND EAX,EAX\r
646         JZ L_60\r
647         MOV EAX,_cSendBuf\r
648         AND EAX,EAX\r
649         SETZ AL\r
650         AND AL,AL\r
651 L_60:\r
652         JNZ L_61\r
653         MOV ESI,OFFSET _lptstat\r
654         MOV EAX,DWORD PTR [ESI]\r
655         AND EAX,EAX\r
656         SETZ AL\r
657         AND AL,AL\r
658 L_61:\r
659         JZ L_62\r
660         PUSH 8\r
661         MOVZX EAX,_STC\r
662         PUSH EAX\r
663         CALL FWORD PTR _OutByte\r
664         PUSH 100\r
665         CALL FWORD PTR _MicroDelay\r
666         PUSH 12\r
667         MOVZX EAX,_STC\r
668         PUSH EAX\r
669         CALL FWORD PTR _OutByte\r
670 L_62:\r
671         XOR EAX,EAX\r
672         MOV DWORD PTR [EBP-4], EAX\r
673         MOV EAX,DWORD PTR [EBP-4]\r
674 L_54:\r
675         MOV ESP,EBP\r
676         POP EBP\r
677         RETN 12\r