Oui il est modifié, ca correspond au test de fin d'instrument (et rebouclage par le LDD qui suit). Pour la performance, le code s'auto-moifie intensément. Désolé que je n'ai pas été assez précis sur cet aspect.
Bon j'entrevois une autre façon de coder la boucle.. A voir si ca respecte la taille et le timing.
[EDIT] oui 199µs/boucle.
Code:
125 7411 f_loop set *
78 3 7411 CC 0000 LDD #0 ; 3
79 2 7414 8B 00 ADDA #0 ; 2 LSB freq>>
81 4 7416 97 12 STA <*-4 ; 4
82 2 7418 C9 00 ADCB #0 ; 2
84 3 741A 8E 0000 LDX #0 ; 3
85 741B ch_smp0 set *-2
86 3 741D 3A ABX ; 3
87 4 741E 8C 0000 CMPX #0 ; 4
73 741F ch_end set *-2
89 3 7421 25 DD BCS ch0L1 ; 3
90 3 7423 8E 0000 LDX #0
73 7424 ch_rpt set *-2
92 5 7426 9F 1B ch0L0 STX <ch_smp0 ; 5
93 4+0 7428 E6 84 LDB ,X ; 4
94 2 742A C4 0F ANDB #$0F ; 2
73 742B nibble set *-1
96 2 742C CA F0 vol0 ORB #$F0 ; 2
73 742D vol set *-1
98 4+1 742E E6 C5 LDB b,u ; 5
100 4 7430 D7 98 STB <mix0 ; 4 => 46
78 3 7432 CC 0000 LDD #0 ; 3
79 2 7435 8B 00 ADDA #0 ; 2 LSB freq>>
81 4 7437 97 33 STA <*-4 ; 4
82 2 7439 C9 00 ADCB #0 ; 2
84 3 743B 8E 0000 LDX #0 ; 3
86 3 743E 3A ABX ; 3
87 4 743F 8C 0000 CMPX #0 ; 4
89 3 7442 25 BE BCS ch1L1 ; 3
90 3 7444 8E 0000 LDX #0
92 5 7447 9F 3C ch1L0 STX <ch_smp1 ; 5
93 4+0 7449 E6 84 LDB ,X ; 4
94 2 744B C4 0F ANDB #$0F ; 2
96 2 744D CA F0 vol1 ORB #$F0 ; 2
98 4+1 744F E6 C5 LDB b,u ; 5
100 4 7451 D7 96 STB <mix1 ; 4 => 46
78 3 7453 CC 0000 LDD #0 ; 3
79 2 7456 8B 00 ADDA #0 ; 2 LSB freq>>
81 4 7458 97 54 STA <*-4 ; 4
82 2 745A C9 00 ADCB #0 ; 2
84 3 745C 8E 0000 LDX #0 ; 3
87 4 7460 8C 0000 CMPX #0 ; 4
89 3 7463 25 9F BCS ch2L1 ; 3
90 3 7465 8E 0000 LDX #0
92 5 7468 9F 5D ch2L0 STX <ch_smp2 ; 5
93 4+0 746A E6 84 LDB ,X ; 4
94 2 746C C4 0F ANDB #$0F ; 2
96 2 746E CA F0 vol2 ORB #$F0 ; 2
98 4+1 7470 E6 C5 LDB b,u ; 5
100 4 7472 D7 94 STB <mix2 ; 4 => 46
78 3 7474 CC 0000 LDD #0 ; 3
79 2 7477 8B 00 ADDA #0 ; 2 LSB freq>>
81 4 7479 97 75 STA <*-4 ; 4
82 2 747B C9 00 ADCB #0 ; 2
84 3 747D 8E 0000 LDX #0 ; 3
86 3 7480 3A ABX ; 3
87 4 7481 8C 0000 CMPX #0 ; 4
89 3 7484 25 80 BCS ch3L1 ; 3
90 3 7486 8E 0000 LDX #0
92 5 7489 9F 7E ch3L0 STX <ch_smp3 ; 5
93 4+0 748B E6 84 LDB ,X ; 4
94 2 748D C4 0F ANDB #$0F ; 2
96 2 748F CA F0 vol3 ORB #$F0 ; 2
98 4+1 7491 E6 C5 LDB b,u ; 5
130
106 2 7493 CB 00 addb #0 ; 2
107 7494 mix2 set *-1
106 2 7495 CB 00 addb #0 ; 2
107 7496 mix1 set *-1
106 2 7497 CB 00 addb #0 ; 2
107 7498 mix0 set *-1
137
138 4+1 749C 31 3F leay -1,y ; 5
(139) Branch Out Of Range
139 3 749E 26 FE bne f_loop ; 3 ==> 199 cycles
Mais débordement encore pire: 14 octets
Si on met un LBNE on se prend 3 cycles de plus, et ca dépasse 200µs. C'est pas encore bon.
Je ne dois pas être très loin quand même de la solution simple et de bon gout...
[EDIT2] YES!
187 cycles (mais j'aime pas le LBNE final: c'est moche)
Code:
120 7411 f_loop set *
78 2 7411 C6 00 LDB #0 ; 2
79 2 7413 CB 00 ADDB #0 ; 2 LSB freq>>
73 7414 ch_flo set *-1
81 4 7415 D7 12 STB <*-3 ; 4
82 2 7417 C6 00 LDB #0 ; 2
83 2 7419 C9 00 ADCB #0 ; 2
73 741A ch_fhi set *-1
85 3 741B 8E 0000 LDX #0 ; 3
86 741C ch_smp0 set *-2
87 3 741E 3A ABX ; 3
88 4 741F 8C 0000 CMPX #0 ; 4
73 7420 ch_end set *-2
90 3 7422 25 DC BCS ch0L1 ; 3
91 3 7424 8E 0000 LDX #0
73 7425 ch_rpt set *-2
93 5 7427 9F 1C ch0L0 STX <ch_smp0 ; 5
94 4+0 7429 E6 84 LDB ,X ; 4
95 2 742B C4 0F ANDB #$0F ; 2
73 742C nibble set *-1
97 2 742D CA F0 vol0 ORB #$F0 ; 2
73 742E vol set *-1
100 4+1 742F A6 C5 LDA b,u ; 5
78 2 7431 C6 00 LDB #0 ; 2
79 2 7433 CB 00 ADDB #0 ; 2 LSB freq>>
81 4 7435 D7 32 STB <*-3 ; 4
82 2 7437 C6 00 LDB #0 ; 2
83 2 7439 C9 00 ADCB #0 ; 2
85 3 743B 8E 0000 LDX #0 ; 3
87 3 743E 3A ABX ; 3
88 4 743F 8C 0000 CMPX #0 ; 4
90 3 7442 25 BE BCS ch1L1 ; 3
91 3 7444 8E 0000 LDX #0
93 5 7447 9F 3C ch1L0 STX <ch_smp1 ; 5
94 4+0 7449 E6 84 LDB ,X ; 4
95 2 744B C4 0F ANDB #$0F ; 2
97 2 744D CA F0 vol1 ORB #$F0 ; 2
102 4+1 744F AB C5 ADDA b,u ; 5 => 43
78 2 7451 C6 00 LDB #0 ; 2
79 2 7453 CB 00 ADDB #0 ; 2 LSB freq>>
81 4 7455 D7 52 STB <*-3 ; 4
82 2 7457 C6 00 LDB #0 ; 2
83 2 7459 C9 00 ADCB #0 ; 2
85 3 745B 8E 0000 LDX #0 ; 3
87 3 745E 3A ABX ; 3
88 4 745F 8C 0000 CMPX #0 ; 4
90 3 7462 25 A0 BCS ch2L1 ; 3
91 3 7464 8E 0000 LDX #0
93 5 7467 9F 5C ch2L0 STX <ch_smp2 ; 5
94 4+0 7469 E6 84 LDB ,X ; 4
95 2 746B C4 0F ANDB #$0F ; 2
97 2 746D CA F0 vol2 ORB #$F0 ; 2
102 4+1 746F AB C5 ADDA b,u ; 5 => 43
78 2 7471 C6 00 LDB #0 ; 2
79 2 7473 CB 00 ADDB #0 ; 2 LSB freq>>
81 4 7475 D7 72 STB <*-3 ; 4
82 2 7477 C6 00 LDB #0 ; 2
83 2 7479 C9 00 ADCB #0 ; 2
85 3 747B 8E 0000 LDX #0 ; 3
87 3 747E 3A ABX ; 3
88 4 747F 8C 0000 CMPX #0 ; 4
90 3 7482 25 82 BCS ch3L1 ; 3
91 3 7484 8E 0000 LDX #0
93 5 7487 9F 7C ch3L0 STX <ch_smp3 ; 5
94 4+0 7489 E6 84 LDB ,X ; 4
95 2 748B C4 0F ANDB #$0F ; 2
97 2 748D CA F0 vol3 ORB #$F0 ; 2
102 4+1 748F AB C5 ADDA b,u ; 5 => 43
125
126 5 7491 B7 E7CD sta $E7CD ; 5 sortie son
127
128 4+1 7494 31 3F leay -1,y ; 5
129 6 7496 1026 FF77 lbne f_loop ; 6 ==> 187 µs
je me demande si un "beq suite" suivi un "jmp <f_loop" à la place ne serait pas plus élégant ?