From a245cf346313aab20a134f7fa6b4382c3339a511 Mon Sep 17 00:00:00 2001 From: Richard Burgess <> Date: Thu, 9 Feb 1995 11:17:24 +0000 Subject: [PATCH] autocommit for file dated 1995-02-09 11:17:24 --- ossource/parallel.asm | 677 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 677 insertions(+) create mode 100644 ossource/parallel.asm diff --git a/ossource/parallel.asm b/ossource/parallel.asm new file mode 100644 index 0000000..456f59d --- /dev/null +++ b/ossource/parallel.asm @@ -0,0 +1,677 @@ + +.DATA +EXTRN _AllocExch FWORD +EXTRN _InitDevDr FWORD +EXTRN _UnMaskIRQ FWORD +EXTRN _MaskIRQ FWORD +EXTRN _SetIRQVector FWORD +EXTRN _EndOfIRQ FWORD +EXTRN _SendMsg FWORD +EXTRN _ISendMsg FWORD +EXTRN _WaitMsg FWORD +EXTRN _CheckMsg FWORD +EXTRN _GetTimerTick FWORD +EXTRN _Alarm FWORD +EXTRN _KillAlarm FWORD +EXTRN _Sleep FWORD +EXTRN _MicroDelay FWORD +EXTRN _OutByte FWORD +EXTRN _InByte FWORD +EXTRN _CopyData FWORD +EXTRN _SpawnTask FWORD +EXTRN _GetJobNum FWORD +_xmit_timeout DD 100 +_control_byte DB 0 +PUBLIC _SendBuf DB 4096 DUP(0) +_head_send DD 0h +_tail_send DD 0h +_cSendBuf DD 0h +_sSendBuf DD 0h +_burstcount DD 0h +_strobecount DD 0h +_DAT DW 0h +_STA DW 0h +_STC DW 0h +_lptStk DD 200 DUP(0) +_lptStkTop DD 0h +_lptstat DB 61 DUP(0) +_pPS DD 0h +_lptdcb DB 64 DUP(0) + + +.CODE +_lpt_task: + PUSH EBP + MOV EBP,ESP +L_1: + MOV EAX,1 + AND EAX,EAX + JZ L_2 + MOVZX EAX,_STA + PUSH EAX + CALL FWORD PTR _InByte + MOV _control_byte, AL + MOV ESI,OFFSET _lptstat + XOR EAX,EAX + MOV AL,_control_byte + MOV BYTE PTR [ESI+12], AL + MOV EAX,_cSendBuf + AND EAX,EAX + JZ L_3 + MOV EAX,10 + MOV _burstcount, EAX +L_4: + MOV EAX,_cSendBuf + AND EAX,EAX + JZ L_6 + MOV EAX,_burstcount + DEC _burstcount +L_6: + AND EAX,EAX + JZ L_5 + MOVZX EAX,_STA + PUSH EAX + CALL FWORD PTR _InByte + MOV _control_byte, AL + MOV ESI,OFFSET _lptstat + XOR EAX,EAX + MOV AL,_control_byte + MOV BYTE PTR [ESI+12], AL + XOR EAX,EAX + MOV AL,_control_byte + MOV ECX,128 + AND EAX,ECX + JZ L_7 + CLI + MOV EAX,_tail_send + MOV ESI,OFFSET _SendBuf + ADD ESI,EAX + XOR EAX,EAX + MOV AL,BYTE PTR [ESI] + PUSH EAX + MOVZX EAX,_DAT + PUSH EAX + CALL FWORD PTR _OutByte + INC _tail_send + MOV EAX,_tail_send + CMP EAX,_sSendBuf + SETE AL + AND AL,AL + JZ L_8 + XOR EAX,EAX + MOV _tail_send, EAX +L_8: + DEC _cSendBuf + MOV EAX,_cSendBuf + STI + PUSH 13 + MOVZX EAX,_STC + PUSH EAX + CALL FWORD PTR _OutByte + PUSH 12 + MOVZX EAX,_STC + PUSH EAX + CALL FWORD PTR _OutByte + JMP L_9 +L_7: + PUSH 2 + CALL FWORD PTR _Sleep +L_9: + JMP L_4 +L_5: + PUSH 1 + CALL FWORD PTR _Sleep + JMP L_10 +L_3: + PUSH 30 + CALL FWORD PTR _Sleep +L_10: + JMP L_1 +L_2: + POP EBP + RETN +PUBLIC _lpt_setup: + PUSH EBP + MOV EBP,ESP + SUB ESP,4 + MOV ESI,OFFSET _lptdcb + MOV EAX,76 + MOV BYTE PTR [ESI], AL + MOV ESI,OFFSET _lptdcb + MOV EAX,1 + ADD ESI,EAX + MOV EAX,80 + MOV BYTE PTR [ESI], AL + MOV ESI,OFFSET _lptdcb + MOV EAX,2 + ADD ESI,EAX + MOV EAX,84 + MOV BYTE PTR [ESI], AL + MOV ESI,OFFSET _lptdcb + MOV EAX,3 + MOV BYTE PTR [ESI+12], AL + MOV ESI,OFFSET _lptdcb + MOV EAX,2 + MOV BYTE PTR [ESI+13], AL + MOV ESI,OFFSET _lptdcb + MOV EAX,1 + MOV WORD PTR [ESI+14], AX + MOV ESI,OFFSET _lptdcb + XOR EAX,EAX + MOV DWORD PTR [ESI+20], EAX + MOV ESI,OFFSET _lptdcb + MOV EAX,OFFSET _lptdev_op + MOV DWORD PTR [ESI+24], EAX + MOV ESI,OFFSET _lptdcb + MOV EAX,OFFSET _lptdev_init + MOV DWORD PTR [ESI+28], EAX + MOV ESI,OFFSET _lptdcb + MOV EAX,OFFSET _lptdev_stat + MOV DWORD PTR [ESI+32], EAX + MOV ESI,OFFSET _lptstat + MOV EAX,100 + MOV DWORD PTR [ESI+29], EAX + MOV ESI,OFFSET _lptstat + MOV EAX,888 + MOV DWORD PTR [ESI+21], EAX + MOV ESI,OFFSET _lptstat + MOV EAX,7 + MOV BYTE PTR [ESI+20], AL + MOV ESI,OFFSET _lptstat + MOV EAX,4096 + MOV DWORD PTR [ESI+25], EAX + MOV EAX,4096 + MOV _sSendBuf, EAX + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI+21] + MOV _DAT, AX + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI+21] + ADD EAX,1 + MOV _STA, AX + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI+21] + ADD EAX,2 + MOV _STC, AX + XOR EAX,EAX + MOV _cSendBuf, EAX + XOR EAX,EAX + MOV _head_send, EAX + XOR EAX,EAX + MOV _tail_send, EAX + PUSH 8 + MOVZX EAX,_STC + PUSH EAX + CALL FWORD PTR _OutByte + PUSH 100 + CALL FWORD PTR _MicroDelay + PUSH 12 + MOVZX EAX,_STC + PUSH EAX + CALL FWORD PTR _OutByte + PUSH OFFSET _lpt_task + PUSH 19 + XOR EAX,EAX + PUSH EAX + PUSH OFFSET _lptStkTop + PUSH 1 + CALL FWORD PTR _SpawnTask + MOV DWORD PTR [EBP-4], EAX + MOV EAX,DWORD PTR [EBP-4] + AND EAX,EAX + JZ L_11 + MOV EAX,DWORD PTR [EBP-4] + JMP L_12 +L_11: + PUSH 3 + PUSH OFFSET _lptdcb + PUSH 1 + PUSH 1 + CALL FWORD PTR _InitDevDr + MOV DWORD PTR [EBP-4], EAX +L_12: + MOV ESP,EBP + POP EBP + RETN +_WriteByteL: + PUSH EBP + MOV EBP,ESP + SUB ESP,12 + XOR EAX,EAX + MOV DWORD PTR [EBP-4], EAX + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI+29] + MOV DWORD PTR [EBP-8], EAX +L_13: + MOV EAX,_cSendBuf + CMP EAX,_sSendBuf + SETE AL + AND AL,AL + JZ L_14 + PUSH 1 + CALL FWORD PTR _Sleep + MOV EAX,DWORD PTR [EBP-8] + DEC DWORD PTR [EBP-8] + MOV EAX,DWORD PTR [EBP-8] + AND EAX,EAX + JNZ L_15 + MOV EAX,901 + JMP L_16 +L_15: + JMP L_13 +L_14: + CLI + MOV EAX,_head_send + MOV ESI,OFFSET _SendBuf + ADD ESI,EAX + XOR EAX,EAX + MOV AL,BYTE PTR [EBP+8] + MOV BYTE PTR [ESI], AL + INC _head_send + MOV EAX,_head_send + CMP EAX,_sSendBuf + SETE AL + AND AL,AL + JZ L_17 + XOR EAX,EAX + MOV _head_send, EAX +L_17: + INC _cSendBuf + MOV EAX,_cSendBuf + STI + MOV EAX,DWORD PTR [EBP-4] +L_16: + MOV ESP,EBP + POP EBP + RETN 4 +_WriteRecordL: + PUSH EBP + MOV EBP,ESP + SUB ESP,2 + XOR EAX,EAX + MOV WORD PTR [EBP-2], AX +L_18: + MOVZX EAX,WORD PTR [EBP+8] + AND EAX,EAX + JZ L_20 + MOVSX EAX,WORD PTR [EBP-2] + AND EAX,EAX + SETZ AL + AND AL,AL +L_20: + JZ L_19 + MOV ESI,DWORD PTR [EBP+12] + INC DWORD PTR [EBP+12] + XOR EAX,EAX + MOV AL,BYTE PTR [ESI] + PUSH EAX + CALL _WriteByteL + MOV WORD PTR [EBP-2], AX + DEC WORD PTR [EBP+8] + MOVZX EAX,WORD PTR [EBP+8] + JMP L_18 +L_19: + MOVSX EAX,WORD PTR [EBP-2] + MOV ESP,EBP + POP EBP + RETN 8 +_OpenLPT: + PUSH EBP + MOV EBP,ESP + SUB ESP,11 + LEA EAX,DWORD PTR [EBP-8] + PUSH EAX + CALL FWORD PTR _GetJobNum + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI] + AND EAX,EAX + JZ L_22 + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [EBP-8] + CMP EAX,DWORD PTR [ESI] + SETNE AL + AND AL,AL + JZ L_23 + MOV EAX,909 + JMP L_24 +L_23: + XOR EAX,EAX + JMP L_24 +L_25: +L_22: + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [EBP-8] + MOV DWORD PTR [ESI], EAX + MOV EAX,_cSendBuf + AND EAX,EAX + JNZ L_26 + XOR EAX,EAX + MOV _cSendBuf, EAX + XOR EAX,EAX + MOV _head_send, EAX + XOR EAX,EAX + MOV _tail_send, EAX +L_26: + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI+21] + MOV WORD PTR [EBP-10], AX + MOVZX EAX,WORD PTR [EBP-10] + MOV _DAT, AX + MOVZX EAX,WORD PTR [EBP-10] + MOV ECX,1 + ADD EAX,ECX + MOV _STA, AX + MOVZX EAX,WORD PTR [EBP-10] + MOV ECX,2 + ADD EAX,ECX + MOV _STC, AX + XOR EAX,EAX +L_24: + MOV ESP,EBP + POP EBP + RETN +_CloseLPT: + PUSH EBP + MOV EBP,ESP + SUB ESP,8 + LEA EAX,DWORD PTR [EBP-8] + PUSH EAX + CALL FWORD PTR _GetJobNum + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI] + AND EAX,EAX + JZ L_27 + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [EBP-8] + CMP EAX,DWORD PTR [ESI] + SETNE AL + AND AL,AL + JZ L_28 + MOV EAX,912 + JMP L_29 +L_28: + XOR EAX,EAX + JMP L_29 +L_30: + JMP L_31 +L_27: + MOV EAX,907 + JMP L_29 +L_31: + MOVSX EAX,WORD PTR [EBP+8] + AND EAX,EAX + JZ L_32 + XOR EAX,EAX + MOV _cSendBuf, EAX + XOR EAX,EAX + MOV _head_send, EAX + XOR EAX,EAX + MOV _tail_send, EAX +L_32: + MOV ESI,OFFSET _lptstat + XOR EAX,EAX + MOV DWORD PTR [ESI], EAX + XOR EAX,EAX +L_29: + MOV ESP,EBP + POP EBP + RETN 4 +_lptdev_op: + PUSH EBP + MOV EBP,ESP + SUB ESP,9 + LEA EAX,DWORD PTR [EBP-8] + PUSH EAX + CALL FWORD PTR _GetJobNum + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI] + AND EAX,EAX + SETZ AL + AND AL,AL + JZ L_33 + MOV EAX,DWORD PTR [EBP+20] + CMP EAX,10 + SETNE AL + AND AL,AL +L_33: + JZ L_34 + MOV EAX,907 + JMP L_35 +L_34: + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI] + AND EAX,EAX + JZ L_36 + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI] + CMP EAX,DWORD PTR [EBP-8] + SETNE AL + AND AL,AL + JZ L_37 + MOV EAX,DWORD PTR [EBP-8] + CMP EAX,1 + SETNE AL + AND AL,AL +L_37: + JZ L_38 + MOV EAX,912 + JMP L_35 +L_38: +L_36: + XOR EAX,EAX + MOV DWORD PTR [EBP-4], EAX + MOV EAX,DWORD PTR [EBP+20] + JMP L_40 +L_41: + JMP L_39 +L_42: + MOV ESI,DWORD PTR [EBP+8] + XOR EAX,EAX + MOV AL,BYTE PTR [ESI] + PUSH EAX + CALL _WriteByteL + MOV DWORD PTR [EBP-4], EAX + JMP L_39 +L_43: + PUSH DWORD PTR [EBP+8] + PUSH DWORD PTR [EBP+12] + CALL _WriteRecordL + MOV DWORD PTR [EBP-4], EAX + JMP L_39 +L_44: + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [EBP+16] + MOV DWORD PTR [ESI+29], EAX + JMP L_39 +L_45: + CALL _OpenLPT + MOV DWORD PTR [EBP-4], EAX + JMP L_39 +L_46: + XOR EAX,EAX + PUSH EAX + CALL _CloseLPT + MOV DWORD PTR [EBP-4], EAX + JMP L_39 +L_47: + PUSH 1 + CALL _CloseLPT + MOV DWORD PTR [EBP-4], EAX + JMP L_39 +L_48: + MOV EAX,503 + MOV DWORD PTR [EBP-4], EAX + JMP L_39 +L_40: + CMP EAX,12 + JE L_47 + CMP EAX,11 + JE L_46 + CMP EAX,10 + JE L_45 + CMP EAX,14 + JE L_44 + CMP EAX,2 + JE L_43 + CMP EAX,32 + JE L_42 + CMP EAX,0 + JE L_41 + JMP L_48 +L_39: + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [EBP-4] + MOV DWORD PTR [ESI+4], EAX + MOV EAX,DWORD PTR [EBP-4] +L_35: + MOV ESP,EBP + POP EBP + RETN 20 +_lptdev_stat: + PUSH EBP + MOV EBP,ESP + SUB ESP,4 + MOV EAX,DWORD PTR [EBP+12] + CMP EAX,64 + SETA AL + AND AL,AL + JZ L_49 + MOV EAX,64 + MOV DWORD PTR [EBP-4], EAX + JMP L_50 +L_49: + MOV EAX,DWORD PTR [EBP+12] + MOV DWORD PTR [EBP-4], EAX +L_50: + MOV ESI,OFFSET _lptstat + MOV EAX,_cSendBuf + MOV DWORD PTR [ESI+13], EAX + PUSH OFFSET _lptstat + PUSH DWORD PTR [EBP+16] + PUSH DWORD PTR [EBP-4] + CALL FWORD PTR _CopyData + MOV ESI,DWORD PTR [EBP+8] + MOV EAX,DWORD PTR [EBP+12] + MOV DWORD PTR [ESI], EAX + XOR EAX,EAX + MOV ESP,EBP + POP EBP + RETN 16 +_lptdev_init: + PUSH EBP + MOV EBP,ESP + SUB ESP,19 + XOR EAX,EAX + MOV DWORD PTR [EBP-4], EAX + LEA EAX,DWORD PTR [EBP-16] + PUSH EAX + CALL FWORD PTR _GetJobNum + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI] + AND EAX,EAX + JZ L_52 + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI] + CMP EAX,DWORD PTR [EBP-16] + SETNE AL + AND AL,AL +L_52: + JZ L_53 + MOV EAX,912 + JMP L_54 +L_53: + MOV EAX,DWORD PTR [EBP+8] + CMP EAX,40 + SETB AL + AND AL,AL + JZ L_55 + MOV EAX,927 + JMP L_54 +L_55: + MOV EAX,DWORD PTR [EBP+12] + MOV _pPS, EAX + MOV ESI,_pPS + MOV EAX,DWORD PTR [ESI+29] + MOV DWORD PTR [EBP-12], EAX + MOV ESI,_pPS + MOV EAX,DWORD PTR [ESI+21] + MOV WORD PTR [EBP-18], AX + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI] + AND EAX,EAX + JZ L_56 + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI+21] + MOVZX ECX,WORD PTR [EBP-18] + CMP EAX,ECX + SETNE AL + AND AL,AL + JZ L_57 + MOV EAX,909 + MOV DWORD PTR [EBP-4], EAX +L_57: +L_56: + MOV EAX,DWORD PTR [EBP-12] + AND EAX,EAX + JNZ L_58 + MOV EAX,100 + MOV DWORD PTR [EBP-12], EAX +L_58: + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [EBP-12] + MOV DWORD PTR [ESI+29], EAX + MOVZX EAX,WORD PTR [EBP-18] + AND EAX,EAX + JNZ L_59 + MOV EAX,924 + JMP L_54 +L_59: + MOV ESI,OFFSET _lptstat + MOVZX EAX,WORD PTR [EBP-18] + MOV DWORD PTR [ESI+21], EAX + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI+21] + MOV _DAT, AX + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI+21] + ADD EAX,1 + MOV _STA, AX + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI+21] + ADD EAX,2 + MOV _STC, AX + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI] + AND EAX,EAX + JZ L_60 + MOV EAX,_cSendBuf + AND EAX,EAX + SETZ AL + AND AL,AL +L_60: + JNZ L_61 + MOV ESI,OFFSET _lptstat + MOV EAX,DWORD PTR [ESI] + AND EAX,EAX + SETZ AL + AND AL,AL +L_61: + JZ L_62 + PUSH 8 + MOVZX EAX,_STC + PUSH EAX + CALL FWORD PTR _OutByte + PUSH 100 + CALL FWORD PTR _MicroDelay + PUSH 12 + MOVZX EAX,_STC + PUSH EAX + CALL FWORD PTR _OutByte +L_62: + XOR EAX,EAX + MOV DWORD PTR [EBP-4], EAX + MOV EAX,DWORD PTR [EBP-4] +L_54: + MOV ESP,EBP + POP EBP + RETN 12 -- 2.40.0