;----------------------------------------------------------------------------------------------- ;Par Marc Plouhinec (site: http://www.thebestof.tk email:m_plouhinec@yahoo.fr) ;Petit programme qui explique comment faire des interruptions ;Ce programme affiche 2 caractères, l'un défile et l'autre reste statique ;on presse la touche [1], les 2 caractères défilent, on presse la touche [2] pour quitter ;Ce logiciel est un exemple pour les programmeurs de SNG ;----------------------------------------------------------------------------------------------- #include "sng10.inc" .ORG START_ADDR .DB "Exemple interruptions",0 ROM_CALL(CLEARLCD) ;efface l'écran LD DE,test ;On lance la première interruption (celle qui fait défiler le premier caractère) CALL NEW_INTERRUPT ; boucle1: ; CALL affiche_caractere ; ld a,$FF ; out (1),a ;attend l'appui de la touche [1] ld a,%11101111 ;(Vous remarquez que le caractère change tout seul) out (1),a ; in a,(1) ; and %00000010 ; jr nz,boucle1 ; LD DE,test2 ;On lance la deuxième interruption (celle qui fait défiler le second caractère) CALL NEW_INTERRUPT ; boucle2: ; CALL affiche_caractere ; ld a,$FF ; out (1),a ;attend l'appui de la touche [2] ld a,%11110111 ;(Vous remarquez que les caractères changent tout seuls) out (1),a ; in a,(1) ; and %00000010 ; jr nz,boucle2 ; LD A,1 ;-|arrête la seconde interruption CALL STOP_INTERRUPT ;-| LD A,0 ;---|arrête la première interruption CALL STOP_INTERRUPT ;---| RET ;Quitte affiche_caractere: ;affiche les caractères enregistrés dans buffer1 et buffer2. LD HL,0 LD (CURSOR_POS),HL LD A,(buffer1) ROM_CALL(TX_CHARPUT) LD HL,$4 LD (CURSOR_POS),HL LD A,(buffer2) ROM_CALL(TX_CHARPUT) RET test: ;incrémente le buffer1 LD A,(buffer1) INC A LD (buffer1),A RET test2: ;incrémente le buffer2 LD A,(buffer2) INC A LD (buffer2),A RET buffer1 .DB 0 buffer2 .DB 0 .end END