.MODEL SMALL .STACK 100H .DATA ;Begin van het datasegment. OUDEISR DW 0 ;Offset oude ISR-adres. DW 0 ;Segment oude ISR-adres. PATROON DB 1 ;Bitpatroon. .CODE ;Begin van het codesegment. MOV AX,@DATA MOV DS,AX ;Laat DS naar datasegment wijzen. MOV AX,351CH INT 21H ;DOS getIntVec voor INT 1C. MOV [OUDEISR],BX MOV [OUDEISR+2],ES PUSH DS ;DS tijdelijk bewaren op stapel. MOV DX,SEG ISR ;Nieuwe ISR-adres zetten. MOV DS,DX MOV DX,OFFSET ISR MOV AX,251CH ;DOS setIntVec voor INT 1C. INT 21H POP DS ;DS weer van stapel halen. MOV DX,03BDH LUS: IN AL,DX ;Lees LPT1S. AND AL,08H JNE LUS ;Herhaal totdat I0 = 0. PUSH DS MOV DX,[OUDEISR] ;Oude ISR-adres terugzetten. MOV DS,[OUDEISR+2] MOV AX,251CH INT 21H ;DOS setIntVec voor INT 1C. POP DS MOV AH,4CH INT 21H ;Sluit het programma af en terug naar DOS. ;Interrupt Service Routine voor INT 1C. ISR: PUSH AX ;Bewaar te gebruiken registers. PUSH DX PUSH DS MOV AX,@DATA MOV DS,AX ;Laat DS naar datasegment wijzen. MOV AL,[PATROON] MOV DX,03BCH OUT DX,AL ;Schrijf PATROON naar LPT1D. ROL AL,1 ;Rotate PATROON naar links. MOV [PATROON],AL POP DS POP DX POP AX ;Herstel de gebruikte registers. IRET END