@Daniel : ça n'a apparament aucune incidence sur le fonctionnement, mais après l'instruction EI ($FB), le 'Pas à Pas' et le 'Trace' présentent une irrégularité Sauf erreur de ma part....
Suite au message et aux éclaircissements donnés par Hervé post , j'ai voulu faire un test en mettant un jump vers une routine qui ne fait rien d'autre que d'éliminer l'adresse retour du RST 38H.
Code : Tout sélectionner
0001 0000 ; tasm -80 TestInter.asm -g3
0002 0000
0003 5000 .ORG $5000
0004 5000 ;* *****************************************************
0005 5000 ;* DEBUT
0006 5000 ;* *****************************************************
0007 5000
0008 5000 INIT:
0009 5000 F3 DI ; Désactive les interruptions
0010 5001 CD 11 50 CALL IRQ_ON ; Activation des interruptions et MAJ vecteur $47d0
0011 5004 INIT1:
0012 5004 CD A7 02 CALL $02A7 ; Scrutation rapide du clavier
0013 5007 E6 DF AND $DF ; Bit 5 = 0
0014 5009 FE 51 CP $51 ; Compare touche 'Q'
0015 500B 20 F7 JR NZ, INIT1 ; Si <> 'Q' Retour à 'Scrutation'
0016 500D CD 1F 50 CALL IRQ_OF ; Sinon Désactivation des interruptions
0017 5010 C9 RET
0018 5011
0019 5011 ;* *****************************************************
0020 5011 ;* Activation des interruptions et MAJ vecteur $47d0
0021 5011 ;* *****************************************************
0022 5011
0023 5011 IRQ_ON:
0024 5011 11 21 50 LD DE, DO_IRQ ; Adresse de la routine appelée à chaque interruption
0025 5014 21 D0 47 LD HL, $47d0 ; Adresse appelée par $0038
0026 5017 36 C3 LD (HL), $C3 ; Code Jump -> JP, adresse $47d0
0027 5019 23 INC HL ; $47d0 +1
0028 501A 73 LD (HL), E ; Le byte de poids faible (LSb)
0029 501B 23 INC HL ; $47d0 +2
0030 501C 72 LD (HL), D ; Le byte de poids fort (MSb)
0031 501D FB EI ; Active les interruptions
0032 501E C9 RET ; RET effectué mais non spécifié dans le Pas à Pas
0033 501F
0034 501F ;* *****************************************************
0035 501F ;* Désactivation des interruptions
0036 501F ;* *****************************************************
0037 501F
0038 501F IRQ_OF:
0039 501F F3 DI ; Désactive les interruptions
0040 5020 C9 RET ;
0041 5021
0042 5021 ;* *****************************************************
0043 5021 ;* Routine appelée à chaque interruption
0044 5021 ;* *****************************************************
0045 5021
0046 5021 DO_IRQ:
0047 5021 F3 DI ; Désactive les interruptions
0048 5022 FB EI ; Active les interruptions
0049 5023 18 01 JR DO_IRQ1 ; JR effectué mais non spécifié dans le Pas à Pas
0050 5025 00 .DB $00 ; NOP pour justifier le JR
0051 5026 DO_IRQ1:
0052 5026 F3 DI ; Désactive les interruptions
0053 5027 F1 POP AF ; Elimine l'adresse retour $0038
0054 5028 FB EI ; Active les interruptions
0055 5029 C9 RET ; RET effectué mais non spécifié dans le Pas à Pas
0056 502A
0057 502A .END
0058 502A
tasm: Number of errors = 0
A+