[Asm z80] Interfacciare interrupt

Quello più vicino al linguaggio macchina vero e proprio.

[Asm z80] Interfacciare interrupt

Postby gorilla_bas on 23 Apr 2008 20:43

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 :P
gorilla_bas
Newbies
 
Posts: 6
Joined: 13 Apr 2008 14:28

[Asm z80] Interfacciare interrupt

Sponsor

Google Adsense

Return to ASM

Who is online

Users browsing this forum: No registered users and 1 guest

cron