Le code permettant de recevoir un octet synchro est le suivant :
Code : Tout sélectionner
BCL_4:
IN A,(PORTC) ; lecture portC
AND $10 ; PC4? Octet suivant D>H disponible ?
JR Z,BCL_4 ; attente
LD A,$05 ; X0/X2 => PC0 / PC2 à 1
OUT (PORTC),A ; Validation octet envoyé sur PORTB
IN A,(PORTB) ; Lecture PORTA (octet en provenance Disk)
LD H,A ; octet reçu dans H
LD A,$07 ; X0/X1/X2 => PC0 PC1 PC2
OUT (PORTC),A ; RAZ du bit X1 => validation lecture
(selon l'utilisation de l'octet, le LD H,A peut se transforme en autre chose)
Donc hormis ce code de réception j'ai une boucle qui :
1) récupère l'octet d'offset
2) le test à 0 => saut à réception pour nouvelle @
3) addition HL et l'octet reçu (prog optimisé)
4) récupère un octet => LD (HL), octet reçu
5) INC HL
6) récupère un octet => LD (HL), octet reçu
7) INC HL
8 ) récupère un octet => LD (HL), octet reçu
9) INC HL
10) récupère un octet => LD (HL), octet reçu
11) reboucle en 1
réception pour nouvelle @:
20) récupère un octet => LD H, octet reçu
21) récupère un octet => LD L, octet reçu
22) Test si HL = 0 => fin de programme
23) récupère un octet => LD (HL), octet reçu
24) reboucle en 1
Voila comment fonctionne le player.
Mon but serait de faire :
1) récupère l'octet d'offset de façon synchronisée (comme avant)
2) récupération
directe l'octet 2
3) récupération
directe l'octet 3
4) récupération
directe l'octet 4
5) le test à 0 de l'offset => saut à réception pour nouvelle @
6) addition HL et l'octet reçu (prog optimisé)
7) LD (HL), octet 2
8 ) INC HL
9) LD (HL), octet 3
10) INC HL
11) LD (HL), octet 4
12) INC HL
13) reboucle en 1
réception pour nouvelle @:
20) Avec l'octet 2=> LD H, octet 2 reçu
21) Avec l'octet 3=> LD L, octet 3 reçu
22) Test si HL = 0 => fin de programme
23) Avec l'octet 4 => LD (HL), octet 4 reçu
24) reboucle en 1
L'avantage de cette solution est de passer sans le code que j'ai donné en 1er et qui prend beaucoup de temps et qui se traduirait par seulement le IN A,(PORTB) ! L'inconvénient était de devoir synchroniser les temps d'expédition des octets depuis l'Arduino.
Le passage de LD (HL),A + INC HL à PUSH sera aussi à terme à voir (le pointeur d'adresse écran passant de HL à SP) c'est plus économique en cycle et en plus en sort 2 octets ! C'est une bonne idée aussi (auquel cas il faudra que je passe à 5 octets en synchro, qui n'est pas modulo 512 pour la lecture SD).