Comme fait on pour programmer les interruptions en ASM. En effet je voudrais pouvoir utiliser l'interruption n°5 dans un programme en ASM et cette interruption doit être remise à jours à la fin du programme. Dois-je créer 2 programmes à part en ASM ou une sous fonction dans mon programme et comment faire pour régler l'interruption n°5?
Il te faut 2 fonctions dans ton programme: une fonction d'initialisation (appelée au début) et une fonction de désinitialisation (appelée à la fin). Et pour règler l'auto-interrpution n°5, il suffit d'écrire en les ports documentés dans J89hw.txt comme si c'étaient des adresses en RAM.
Merci Kevin. Avec tes indications j'ai crée ceci mais je n'arrive pas à avoir la vitesse max de l'interruption. Peut être que les valeurs que j'écrit sur les ports sont incorrect?
include "doorsos.h"
include "hexlib.h"
xdef _ti89
xdef _ti92plus
xdef _main
_main
movem.l d0-d7/a0-a6,-(a7)
;Remet à zéro le compteur
move.l #0,counter
;Active l'interruption n°5
move.l $74,old_int5
move.w #$0700,d0 trap #1
bclr.b #2,($600001)
move.l #int5_handler,$74
and.b #%11001111,($600015)
move.b #$FF,($600017)
bset.b #2,($600001)
move.w #0,d0 trap #1
movem.l (a7)+,d0-d7/a0-a6
st.b d0
;-------------
suite:
cmp.w #11000,counter
beq fin
;move.l counter,d0
;move.l #0,d1
;move.l #0,d2
;move.l #7,d4
;jsr hexlib::put_hex
;Test [ESC]
;move.w #8,d0
;bsr masque
;btst.b #6,d0
bne suite
;-------------
fin:
;Désactive l'interruption n°5
movem.l d0-d7/a0-a6,-(a7)
move.w #$0700,d0
trap #1
bclr.b #2,($600001)
move.l old_int5(PC),$74
bset.b #2,$600001
move.w #0,d0
trap #1
movem.l (a7)+,d0-d7/a0-a6
rts
;************************************
;int_5: Interruption de gestion audio
;************************************
int5_handler:
addq.l #1,counter
rte
;************************************
;--------------------------------------------
;Masque pour la lecture du clavier
;********************************************
;********************************************
;masque une ligne du clavier
;--------------------------------------------
;d0=ligne -> d0=réponse
;********************************************
masque:
movem.l d1,-(a7)
move.w #$FFFE,d1
rol.w d0,d1
clr.w d0
move.w d1,($600018)
nop
nop
nop
nop
nop
nop
move.b ($60001B),d0
movem.l (a7)+,d1
RTS
old_int5 dc.l 0
counter dc.l 0
end

Euh, c'est bizarre: ce code m'a pourtant l'air correct. Sauf que tu ne restaures pas les timings corrects de l'auto-interruption n°5 à la fin! (Tu es censé le faire!)
Mais quel horreur ce code!
>move.l #0,counter
clr.l, c'est pour les chiens???
>move.w #0,d0
Vade retro!!!
Mets-nous un moveq.l ou un clr.w!