· Text 140 · w6 · inlagg
ÄRENDE: INTERUPT
Som någon annan påpekat så kommer
man ibland själv på lösningen till
ett problem som man frågat om.
Någon kanske påminner sig min fråga
om hur en interuptrutin skall utformas.
Nåväl, här kommer en. Den använder
sig av PIO:s 128 microsecundersinterupt.
Den innehåller en rutin som får
tangentbordet att fungera normalt (nästan).
Även en rutin som visar att det hela
fungerar som det ska.
ORG 32767 (t.ex)
START JR STRT
INTV DEFW INTRUT
STRT DI
LD A,79
OUT (57),A
LD A,135
OUT (57),A
LD HL,INTV
LD A,L
OUT (57),A
LD A,H
LD I,A
DEFB 251;EI;ASSEMBLERN TAR EJ EI
RET
INTRUT PUSH AF
LD A,(65535)
DEC A
LD (65535),A
JR NZ,SLUT
LD A,255 ;FÖRDRÖJNINGSRÄKNARE
LD (65535),A
IN A,(56)
BIT 7,A
JR Z,I1
CALL TKN
JR I2
I1 XOR A
LD (65533),A
I2 CALL RUTIN
SLUT POP AF
DEFB 251;EI
RETI
TKN IN A,(56)
CP 131 ;CTRL-C
JR NZ,T1
LD (65031),A
LD A,128
OUT 6,A
T1 LD A,(65533)
CP 70
RET Z
LD A,128
LD (65013),A
LD A,70
LD (65015),A
LD (65533),A
RET
RUTIN PUSH HL
PUSH DE
PUSH BC
LD A,(65534)
LD C,A
LD HL,31744
LD DE,TEXT
LD B,0
ADD HL,BC
EX DE,HL
LD BC,15 ;LÄNGDEN AV TEXT
LDIR
LD C,A
CP 25 ;40-LÄNGDEN AV TEXT
JR NZ,R1
LD A,1
LD (65532),A
R1 CP 0
JR NZ,R4
XOR A
LD (65532),A
R4 LD A,(65532)
CP 0
JR Z,R2
DEC C
JR R3
R2 INC C
R3 LD A,C
LD (65534),A
POP BC
POP DE
POP HL
RET
TEXT DEFM " <<BY OLA A.>> "
Gör call på START och det ska fungera.
Ni får ursäka om programmet inte är
så 'smart' skrivet.