- Code: Select all
;Come la CPU riconosce una richiesta di interruzione?
;Tramite 2 ingressi INT e NMI sui quali dispositivi esterni inviano le proprie richieste di interruzione
;Programmato da Numa
INIT1: LD A,0C3H ;il primo byte è il codice dell'istruzione di salto
LD(0038H),A ;indirizzo della routine di servizio #1
LD IY,SERV1
IM1
EX AF,AF' ;fissa il formato per gli spazi vuoti
LD A,40H
EX AF,AF'
JP MAIN ;salta al MAIN
MAIN: EI ;abilita le interruizioni
LD IX,DSTACK ;fondo stack dati
LD (IX+00H),OFF H ;temporizzatore x visualizzazione
LD HL,ADDH ;predispone il puntatore del buffer
LD A,I
JP E,HIGH
LOW: LD(HL),00H
JR NEXT
HIGH: LD (HL),10H
NEXT: DEC HL ;sposta il puntatore del buffer
DEC (HL) ;decrementa COUNT
LD (DATAL),SP ;trascrive SP nel buffer
LD HL,LEDL ;predispone HL x CONVDI
LD DE,ADDH ;predisponde DE per CONVDI
DISABL: NOP
CALL CONVDI
DLOOP: CALL DISPL
DEC (IX,00H) ;un altro temporizzatore xD
JR NZ,DLOOP
JP MAIN ;salta indietro all'indirizzo del programma
SERV1: PUSH BC
PUSH DE ;salva i registri della CPU
PUSH HL
PUSH AF
PUSH IX
PUSH IY
DS1: INC IX
INC IX ;aggiorna lo stack pointer
INC IX
NOP
LD (IX+00H),OFFH ;predisponde il tempo di DLOOP1, CLOOP1, DLOOP1
LD (IX+01H),O0AH
CLOOP1: LD (IX+02H),O2H
LD HL,ADDH
LD A,I ;valore di IFF2
JP PE,HIGH1
LOW1: LD (HL),00H ;valore=0
JR NEXT1
HIGH1: LD (HL),10H ;valore=1
NEXT1: DEC HL ;sposta il puntatore del buffer
INC (HL) ;incrementa ADDL
LD (DATAL),SP ;trascrive lo stack pointer nel buffer
LD HL,LEDL ;predispone HL e poi DE per CONVDI
LD DE,ADDH
CALL CONVDI
DLOOP: CALL DISPL
DEC (IX+00) ;altro temp.
JR NZ,DLOOP1
DEC (IX+02)
JR NZ,DLOOP1
DEC (IX+02) ;temp. per routine di servizio
JR NZ,CLOOP1
POP IY
POP IX
POP AF
POP HL
POP DE
POP BC
EI ;abilita le int
RETI ;torna all'int.
;NUMA
Numa sarei io
