.MODEL SMALL IVT SEGMENT AT 0 DB 1024 DUP ? IVT ENDS .STACK .DATA DECIMALE DB ? UNITA DB ? VETT DB 00011011B, 00010100B, 01101101B, 01110101B, 00110110B, 01110011B, 01111010B, 00010101B, 01111111B, 00110111B .CODE .STARTUP CLI CALL INIT_IVT CALL INIT_8255 CALL INIT_8259 CALL INIT_8253 MOV DI, 0 STI CALL LEGGI CICLO: NOP JMP CICLO .EXIT CW_8255 EQU 10010000B INIT_8255 PROC PUSH DX PUSH AX MOV DX, 0043H MOV AL, CW_8255 OUT DX, AL POP AX POP DX RET INIT_8255 ENDP CW0_8253 EQU 00110110B INIT_8253 PROC PUSH DX PUSH AX MOV DX, 0053H MOV AL, CW0_8253 OUT DX, AL MOV DX, 0050H MOV AL, F4H OUT DX, AL MOV AL, 01H OUT DX, AL POP AX POP DX RET INIT_8253 ENDP ICW1_8259 EQU 00010011B ICW2_8259 EQU 00100000B ICW4_8259 EQU 00000011B 0CW1_8259 EQU 10111111B INIT_8259 PROC PUSH DX PUSH AX MOV DX, 0060H MOV AL, ICW1_8259 OUT DX, AL MOV DX, 0061H MOV AL, ICW2_8259 OUT DX, AL MOV AL, ICW4_8259 OUT DX, AL MOV AL, OCW1_8259 OUT DX, AL POP AX POP DX RET INIT_8259 ENDP INIT_IVT PROC PUSH AX PUSH BX PUSH DX PUSH DS XOR AX, AX MOV DS, AX MOV BX, 38 SHL BX, 2 MOV AX, OFFSET IR6_P MOV DS:[BX], AX MOV AX, SEG IR6_P MOV DS:[BX+2], AX POP DS POP DX POP BX POP AX RET INIT_IVT ENDP LEGGI PROC PUSH AX PUSH BX PUSH DX XOR AX, AX MOV DX, 0040H IN AL, DX MOV BX, 10 DIV BL MOV DECIMALE, AL MOV UNITA, AH POP DX POP BX POP AX RET LEGGI ENDP IR6_P PROC PUSH AX PUSH BX PUSH DX CMP DI, 1 JE AZZERA INC DI LEA BX, VETT ADD BX, WORD PTR DECIMALE MOV AL, [BX] MOV DX, 0041H OUT DX, AL LEA BX, VETT ADD BX, WORD PTR UNITA MOV AL, [BX] MOV DX, 0042H OUT DX, AL JMP ESCI AZZERA: MOV DX, 0041H MOV AL, 0 OUT DX, AL MOV DX, 0042H MOV AL, 0 OUT DX, AL DEC DI ESCI: POP DX POP BX POP AX IRET IR6_P ENDP