il me semble qu'il y a ue erreur : en 1er c'est la longueur du bloc de commande et ensuite les data du bloc de commande suivi des data :
Dans la source K7.vb j'ai écris:
'
' 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)
le bloc ff serait donc plutot:
bloc de data: 05, dest lo-byte, dest hi-byte, lon lo-byte, lon hi-byte, FF , long_bloc1, data de binaire (256maxi),long_bloc2, data de binaire (256maxi), ....long_blocN, data de binaire (256maxi),long_Dernierbloc, data de binaire (256maxi parexemple 10)
(par exemple pour un bloc FF de 1000 octets, il y aurait 3 blocs de 256 octets + 1 bloc de 232 octets => 3*256 + 232 = 1000,
La longueur de 1000 étant paramétrée sur 16 bits dans le bloc de commande !)
[EDIT]
pour continuer l'exemple :
on charge des données en 4200h sur 1000d octets :
05 00 42 E8 03 FF 00 (256 premiers octets) 00 (256 suivants) 00 (256 suivants) E8 (232 derniers)
suivi d'un bloc de fin :
05 00 00 00 42 FD 00
et ça doit être tout !
[/EDIT]
exemple de trame (toujours dans la source k7.vb) :
' 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..
Il ne faut pas confondre les commandes tel que décrites dans monitrix et les octets que l'on trouve sur la K7, même si c'est très proche. Ci dessous l'analyse d'un fichier K7 complète (hormis les lignes 4000 à 8090 supprimées pour entrer dans le quota de 300ko) :
Il s'agit d'un jeu en basse résolution et affichage sur l'écran d'une image d’accueil avant les datas du programme proprement dit.
On vois bien, par exemple que le bloc d’amorce n'existe pas sur le fichier cassette : il s'agit des cycles de synchro en début de bloc. Dans mes codes j'avais du les ajouter pour laisser le temps au Z80 de respirer car justement ils n'existent pas.
(ce qui est nécessaire dans les bloc de remplissage : si on demande de remplir l'ensemble de l'écran, par exemple pour l'effacer, il faut bien que le Z80 effectue cette commande avant de lire la suite, or la cassette continue de défiler et on rate les octets suivants. ceci dis tu n'a pas a en tenir compte pour créer un fichier K7, ça c'est dans l'émulateur...)