📄 h815sj.asm
字号:
CODE SEGMENT
ASSUME CS:CODE
PORT EQU 0060h
ORG 9B00H
START: MOV DS:[077AH],1717H
MOV DS:[077CH],1717H
MOV DS:[077EH],1717H
MOV AL,80
MOV DX,PORT+3
OUT DX,AL
MOV AL,13 ;set light divisor
MOV DX,PORT
OUT DX,AL
MOV AL,00 ;set low divisor 9600 boud
MOV DX,PORT+1
OUT DX,AL
MOV AL,00011011B ;8 bits 1 stop
MOV DX,PORT+3
OUT DX,AL
MOV AL,00010011b
MOV DX,PORT+4
OUT DX,AL
MOV AL,00H
MOV DX,PORT+1
OUT DX,AL ;interrupt enable all off
MOV DS:[0740H],077FH
REDIKEY:CALL DISPKEY
CMP BYTE PTR DS:[0752H],10H
JC WATTXD
JMP FUNCKEY
WATTXD: MOV DX,PORT+5
IN AL,DX ;GET LINE STATUS
AND AL,20H
TEST AL,20H
JZ WATTXD
MOV AL,BYTE PTR DS:[0752H]
MOV DX,PORT
OUT DX,AL
MOV CX,0FFFFH
S50: LOOP S50
NEXT: MOV DX,PORT+5
IN AL,DX
AND AL,01
TEST AL,01
JZ NEXT
MOV DX,PORT
IN AL,DX
CMP BYTE PTR DS:[0752H],AL
JZ SERI2
MOV DS:[077AH],1C1CH
MOV DS:[077CH],101BH
MOV DS:[077EH],1010H
SERERR: CALL DISP
JMP SERERR
SERI2: MOV BX,DS:[0740H]
MOV AL,DS:[0752H]
MOV DS:[BX],AL
CMP BX,077AH
JZ SERIAL1
DEC BX
MOV DS:[0740H],BX
MOV CX,0FFFFH
SERI3: LOOP SERI3
JMP REDIKEY
SERIAL1:MOV DS:[0740H],077FH
JMP REDIKEY
FUNCKEY:CMP BYTE PTR DS:[0752H],1FH
JNZ REDIKEY
MOV DS:[077AH],191AH
MOV DS:[077CH],1819H
MOV DS:[077EH],1010H
MONIT: CALL DISP
JMP MONIT
dispkey:call disp
call key
mov ah,al ;newkey
mov bl,ds:[0748h] ;ltime
mov bh,ds:[0749h] ;lkey
mov al,01h
mov dx,0ff21h
out dx,al
cmp ah,bh
mov bh,ah ;bh=new key
mov ah,bl ;al=time
jz disk4
mov bl,88h
mov ah,88h
disk4: dec ah
cmp ah,82h
jz disk6
cmp ah,0eh
jz disk6
cmp ah,00h
jz disk5
mov ah,20h
dec bl
jmp disk7
disk5: mov ah,0fh
disk6: mov bl,ah
mov ah,bh
disk7: mov byte ptr ds:[0748h],bl
mov byte ptr ds:[0749h],bh
mov byte ptr ds:[0752h],bh
mov al,ah
ret
disp: push cx
mov dx,077fh
mov ah,20h
disp0: mov cx,00ffh
mov bx,dx
mov bl,ds:[bx]
mov bh,0h
push dx
mov dx,0ff22h
mov al,BYTE PTR cs:[bx+9C43H] ;
out dx,al
mov dx,0ff21h
mov al,ah
out dx,al
disp1: loop disp1
pop dx
dec dx
shr ah,01h
jnz disp0
pop cx
ret
data1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h
db 80h,90h,88h,83h,0c6h,0a1h,86h,8eh
db 0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh
db 90h,0a3h,0a1h,86h,8fh
key: mov al,0ffh
mov dx,0ff22h
out dx,al
mov bl,00h
mov ah,0feh
mov cx,08h
key1: mov al,ah
mov dx,0ff21h
out dx,al
shl al,01h
mov ah,al
nop
nop
nop
nop
nop
nop
mov dx,0ff23h
in al,dx
not al
nop
nop
and al,0fh
jnz key2
inc bl
loop key1
jmp nkey
key2: test al,01h
je key3
mov al,00h
jmp key6
key3: test al,02h
je key4
mov al,08h
jmp key6
key4: test al,04h
je key5
mov al,10h
jmp key6
key5: test al,08h
je nkey
mov al,18h
key6: add al,bl
cmp al,10h
jnc fkey
mov bl,al
mov bh,0h
mov al,BYTE PTR cs:[bx+9CC4H]
ret
nkey: mov al,20h
fkey: ret
data2: db 07h,04h,08h,05h,09h,06h,0ah,0bh
DB 01h,00h,02h,0fh,03h,0eh,0ch,0dh
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -