📄 h8259-1a.asm
字号:
CODE SEGMENT
ASSUME CS:CODE
INTPORT1 EQU 0020H ;intrupt port
INTPORT2 EQU 0021H
CONTPORT EQU 00DFH ;command port of diplay
DATAPORT EQU 00DEH ;data port of display
DATA1 EQU 0580H ;display zone of intrupt times
DATA2 EQU 0500H ;data table of LED, 16 bytes
DATA3 EQU 0510H ;display '8259---1' zone, 8 bytes
DATA4 EQU 0518H ;display '8259Good', 8 bytes
ORG 1000H
JMP START
START: CALL FORMAT ;set display data
MOV SI,DATA3 ;display '8259-1'
CALL LEDDISP
CLD
MOV DI,DATA1 ;clear diplay RAM
MOV CX,08H
XOR AX,AX
REP STOSW
MOV AX,0H
MOV DS,AX
CALL WRINTVER ;write interrupt ver.
MOV AL,13H ;write ICW1-ICW4
MOV DX,INTPORT1
OUT DX,AL
MOV AL,08H ;interrupt ver. 08H-0FH
MOV DX,INTPORT2
OUT DX,AL
MOV AL,01H
OUT DX,AL
MOV AL,0F7H ;open IR3
OUT DX,AL
MOV BYTE PTR DS:[0601H],01H ;intrupe times=1
STI
WATING: JMP WATING
NOP
NOP
WRINTVER:MOV AX,0H
MOV ES,AX
MOV DI,002CH ;002CH is Ver. of IRQ3
LEA AX,INTIRQ3
STOSW
MOV AX,CS
STOSW
RET
INTIRQ3: PUSH AX
PUSH BX
PUSH DX
CLI
MOV AL,DS:[0601H]
CALL CONVERS ;change times from 0-9 to LED value
MOV SI,DATA1 ;display times
CALL LEDDISP
ADD BYTE PTR DS:[0601H],01H ;times add 1
CMP BYTE PTR DS:[0601H],06H
JNA INTRE1
MOV SI,DATA4 ;display '8259Good'
CALL LEDDISP
INTRE1: MOV AL,20H ;intrupt over command
MOV DX,INTPORT1
OUT DX,AL
STI
POP DX
POP BX
POP AX
IRET
CONVERS: MOV BH,0H
AND AL,0FH
MOV BL,AL
MOV AL,CS:[BX+DATA2]
MOV BX,DATA1
MOV DS:[BX],AL
RET
LEDDISP: MOV AL,90H ;command of writting 8279A display RAM
MOV DX,CONTPORT
OUT DX,AL
MOV BYTE PTR DS:[0600H],00 ;0600H is count, 8 LED
LED1: CMP BYTE PTR DS:[0600H],07H
JA LED2 ;if hane writed 8 LED then LED2
MOV BL,DS:[0600H]
MOV BH,0H
MOV AL,CS:[BX+SI]
MOV DX,DATAPORT
OUT DX,AL
ADD BYTE PTR DS:[0600H],01H
JMP LED1
LED2: RET
FORMAT: MOV BX,0 ;set display code of LED
MOV WORD PTR DS:[BX+0500H],063FH ;data table of LED
ADD BX,2
MOV WORD PTR DS:[BX+0500H],4F5BH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],6D66H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],077DH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],6F7FH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],7C77H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],5E39H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],7179H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],4006H ;'8259---1'
ADD BX,2
MOV WORD PTR DS:[BX+0500H],4040H
ADD BX,2
MOV WORD PTR DS:[BX+0500H],6D6FH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],7F5BH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],3F5EH ;'8259Good'
ADD BX,2
MOV WORD PTR DS:[BX+0500H],5C3FH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],6D6FH
ADD BX,2
MOV WORD PTR DS:[BX+0500H],7F5BH
RET
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -