Il existe 2 famille de bloc :
Le bloc d'entête (TOL) : C'est le 1er bloc rencontré et il y en a plusieurs sur un chargement de logiciel du commerce. On y trouve donc en 1er octet la longueur puis les paramètres et enfin le code du bloc.
Suite à ce bloc d'entête il peut, dans certain cas, être suivi d'un bloc de données, par exemple dans le cas d'un bloc de remplissage ou d'un bloc de données.
Le soft Monitrix permet de gerer les blocs unitairement.
Voici les différents codes de bloc :
Code : Tout sélectionner
' Les codes de TOL sont les suivants (doc monitrix) :
' code FF => bloc de données en page PROG,
' Programmation : FF, destination, longueur, source
' exemple : FF, 7000, 1000, 6000 Prendre 1000H octets en 6000 et les replacer en 7000.
' ce qui donnera sur la cassette :
' 05 00 70 00 10 FF suivi des data 00 nn nn nn ... nn 00 nn nn nn .. nn
' code FB => bloc de données en page VIDEO (idem FF mais en page vidéo)
' Bloc FD => Fin de fichier !
' PRogrammation : FD,départ, pile, 0
' exemple : FD, 7000, 9000, 0 Fin avec saut (7000) et pile (9000)
'
' code FE = remplissage d'une zone avec une constante :
' Programmation : FE, adresse, longueur,valeur
' exemple : FE,6000,1000,0055 : Remplir la zone 6000 - 6FFF avec la constante 55
'
' Sur la cassette c'est idem, on retrouve les codes de TOL :
' En fait les 5 premiers octets c'est la longueur des data de la TOL, ainsi que l'adresse :
' longueur BLOC = Data(Pointeur_octet + 0) 'usuellement une TOL fait 5 octets
' Adr0 = Data(Pointeur_octet + 1)
' Adr1 = Data(Pointeur_octet + 2)
' Lon0 = Data(Pointeur_octet + 3)
' Lon1 = Data(Pointeur_octet + 4)
' code_TOL = Data(Pointeur_octet + 5)
' Suite à la lecture des octets 1+5 octets décrivant la TOL, viennent les bloc de données :
' Taille data = Data(Pointeur_octet + 0) => donne le nombre de données devant arriver :
' data 1 = Data(Pointeur_octet + 1)
' data 2 = Data(Pointeur_octet + 2)...
' data n = Data(Pointeur_octet + n)
'
'Si la taille du bloc de données = 1 => 1 octet à lire, 2 => 2 octets à lire ...
' 255 => 255 octets à lire et 0 ... => 256 octets à lire ... oui oui, on est bien sur un système 8 bits !
ce qui donne, par exemple, en début de cassette FORMULE1 :
05 00 40 A0 09 FE 01 00 05 DB 5F 02 00 FF…
=> 3 blocs :
Le premier avec L= 05, code FE (à la fin) : fait un remplissage de l’écran (4000 @ écran BR, 9A0 : taille écran BR) avec l'octet du bloc de données suivant :
Le 2eme Bloc L=01 paramètre = 00 (1 octet de donnée :0) est l'octet à mettre dans l'écran réclamé par le bloc FE...
Le troisième bloc : avec le code de données (FF à la fin) sur 5 octets : à l'adresse 5FDB longueur de 0002 octets qui sera suivi d'un bloc de data d'une longueur de 2 !... Si la longueur était plus grande (supérieur à 256 octets) il y aura alors plusieurs bloc de données de 256 puis le dernier avec le modulo nécessaire..
c'est donc entre le 2eme et le 3eme bloc qu'il faut ajouter des synchros de façon à ce qu'hector puisse faire le remplissage de la mémoire écran sur une longueur de 9A0 octets. Il me semble (de mémoire) que j'ajoutais 400 cycles de synchro.
D'ailleurs, j'avais amorcé la réflexion ici :
http://forum.system-cfg.com/viewtopic.p ... loc#p26704
mais ici l'explication est correcte, sans aucun doute (de ma part).