INITPOORT PROC NEAR MOV DX,PPI_ADDR ; LAADT ADRES PRINTERPOORT ADC DX,2 ; VERHOOG TOT CONTROLPOORT MOV AL,00000000B ; STROBE/ACK SIGNAAL HOOG OUT DX,AL RET ; EINDE ROUTINE INITPOORT ENDP ZENDBYTE PROC NEAR PUSH DX ; SAVE REGISTERS PUSH AX MOV DX,PPI_ADDR ; LAADT ADRES PRINTER POORT CALL ZENDNIBBLE ; STUUR LAGE NIBBLE NAAR PC SHR AL,4 ; SCHUIF HOGE NAAR LAGE NIBBLE CALL ZENDNIBBLE POP AX ; HAAL REGISTERS WEER TERUG POP DX RET ; EINDE ROUTINE ZENDBYTE ENDP ZENDNIBBLE PROC NEAR MOV DX,PPI_ADDR ; LAADT BASISADRES PRINTERPOORT PUSH AX ; SAVE REGISTERS AND AL,01111111B ; CLEAR STROBE BIT OUT DX,AL ; ZET DATA OP POORT INC DX ; LAADT ADRES STATUSPOORT ZENDBYTE1: IN AL,DX ; LEES STATUS TEST AL,10000000B ; TEST ATOM ACK (wordt geinverteerd!) JE ZENDBYTE1 ; WACHT TOT SIGNAAL LAAG IS DEC DX ; LAADT ADRES PRINTER OUTPUT POORT OR AL,10000000B ; HAAL STROBE SIGNAAL WEER WEG OUT DX,AL INC DX ; LAADT ADRES PRINTER STATUS POORT ZENDBYTE2: IN AL,DX ; LEES STATUS TEST AL,10000000B ; TEST ATOM ACK (wordt geinverteerd!) JNE ZENDBYTE2 ; WACHT TOT SIGNAAL HOOG IS POP AX ; HAAL REGISTERS TERUG VAN STACK RET ; EINDE ZENDROUTINE ZENDNIBBLE ENDP LEESBYTE PROC NEAR PUSH DX ; SAVE GEBRUIKTE REGISTERS PUSH BX PUSH AX MOV DX,PPI_ADDR ; LAADT ADRES PRINTERSTATUS CALL LEESNIBB ; LEES LAAGSTE DRIE BITS AH SHR AH,4 ; SCHUIF VIER MAAL RECHTS MOV BH,AH ; ZET DATA TIJDELIJK IN BH CALL LEESNIBB ; LEES BITS 4..6 IN AH SHR AH,1 ; SCHUIF EEN MAAL LINKS OR BH,AH ; VOEG BITS SAMEN CALL LEESNIBB ; LEES HOOGSTE TWEE BITS SHL AH,1 OR BH,AH ; VOEG BITS SAMEN POP AX ; HAAL AX WEER VAN STACK MOV AL,BH ; ZET ONTVANGEN BYTE IN AL POP BX ; HERSTEL OVERIGE REGISTERS POP DX RET ; EINDE ROUTINE LEESBYTE ENDP LEESNIBB PROC NEAR MOV DX,PPI_ADDR ; LAADT BASISADRES PRINTERPOORT INC DX ; LAADT ADRES PRINTER STATUS LEESNIBB1: IN AL,DX ; LEES DATA EN STATUS TEST AL,00001000B ; CONTROLEER DATA GELDIG (error=laag) JNE LEESNIBB1 AND AL,01110000B ; ALLEEN b4...b6 BEVATTEN DATA MOV AH,AL ; ZET DATA IN AH MOV AL,00000001B ; GEEF ACK TERUG INC DX ; LAADT DX MET PRINTER CONTROL POORT OUT DX,AL ; MAAK ACK LIJN LAAG DEC DX ; LAADT DX MET PRINTER STATUS POORT LEESNIBB2: IN AL,DX ; WACHT TOT STROBE VERVALT TEST AL,00001000B JE LEESNIBB2 INC DX ; DX WORDT PRINTER CONTROL POORT MOV AL,00000000B ; HAAL ACK WEG OUT DX,AL RET ; EINDE ROUTINE LEESNIBB ENDP