Le but est de lire un programme stocké sur cassette audio et de le transmettre tel
quel sur la liaison série RS232, vers un autre ordinateur. L'idée est bien de lire tout type de cassette DAI, sachant qu'il y a en standard 3 types de fichiers prévus par le DAI (programmes basic, données de tableau et fichiers binaires). Pour arriver à lire une cassette DAI et faire ce qui vient d'être écrit, il faut descendre dans les entrailles de la ROM et repérer les routines chargées de la gestion des cassettes audio. Un petit cours s'impose donc sur ce sujet. Je vous rassure tout de suite, vous n'aurez pas à écrire quoi que ce soit, vous trouverez ici même les programmes prêts à l'emploi. Cependant, pour bien comprendre comment fonctionne l'ensemble, je vous conseille de lire ce qui suit. En guise de cours, je vous propose de commenter le programme assembleur permettant d'envoyer sur la liaison RS232 du DAI, chacun des octets d'un fichier lu sur cassette audio. Voici donc le programme (que vous pourrez également bientôt récupérer). Il s'appelle "COPYK7RS232.SRC" pour le source et "COPYK7RS232.BIN G7000" pour l'exécutable.
La directive ORG indique à l'assembleur qu'il va falloir assembler le code à partir de l'adresse 7000. C'est également cette adresse qu'il faudra appeler lors de l'exécution du programme. La ligne 5 charge le registre HL avec l'adresse de début d'une table présente en ROM et contenant les vecteurs cassette. La ligne 6 charge DE avec l'adresse suivant immédiatement la fin de cette table. La ligne 7 charge BC avec l'adresse cible où recopier cette table. Enfin la ligne 8 appelle une routine présente en ROM et permettant de recopier à partir de l'adresse BC, les octets se trouvant entre l'adresse HL et DE-1. La raison est donnée ci-dessous : Le DAI comporte une zone en mémoire RAM dans laquelle sont indiquées les adresses de gestion des unités de lecture/écriture. Le système d'exploitation présent en ROM appelle cette table à chaque fois qu'une opération de lecture ou d'écriture est demandée. C'est à dire à chaque fois qu'une commande Basic LOAD ou SAVE est appelée ou bien à chaque fois qu'une commande R ou W est appelée dans le mode Utility (mode UT). Le système pourrait appeler directement les adresses dont il dispose dans la table en ROM mais ceci ne permettrait pas d'appeler autre chose que les routines du lecteur de cassette, puisque c'est le mode par défaut du DAI. En mappant les adresses en RAM, cela permet de remplacer ces adresses par d'autres points d'entrée. Par exemple le lecteur de micro-cassettes MEMOCOM fait usage de la table en ROM pour indiquer d'autres adresses correspondant à une EPROM additionnelle qu'il faut installer lorsque l'on dispose du MEMOCOM. J'utilise cette possibilité pour le programme permettant de lire des données sur un PC via la liaison RS232, ce que l'on verra plus tard. L'intérêt de restaurer systématiquement les pointeurs liées aux routines de gestion des lecteurs de cassettes standards est le suivant : si le programme COPYK7RS232.BIN vient d'être chargé via la liaison RS232 ou via MEMOCOM (voir par l'unité de disques pour les chanceux) alors les vecteurs présents en RAM seront respectivement ceux de la solution PC/RS232, ceux du MEMOCOM ou ceux du lecteur de disques. Or, le but du programme ci-dessus est de gérer lire un magnétocassette et pas autre chose ! Il faut donc que le système face référence à ses routines et non pas aux routines d'un autre système... Voici donc le pourquoi de la chose. Les lignes 9 et 10 servent à afficher un mini menu : (1)=LOAD En appuyant sur la touche 1 le programme cherchera à lire la cassette audio octet par octet et les enverra un à un sur la liaison RS232 au bout de laquelle un programme se contentera d'en faire un fichier. L'appui sur la touche BREAK quelques secondes permet de retourner dans le mode UT. La ligne 11 appelle la routine de scrutation du clavier. Si CY=1 en sortie de cette routine, c'est que la touche Break a été enfoncée, on appelle alors la routine en E009, on peut se permettre de le faire de cette façon sans passer par l'instruction RST car on est déjà sous Utility et que la mémoire ROM switchée est la bonne. Pour le reste des commentaire lire directement les REM dans le programme ci-dessus. Après avoir été généré sous forme de code binaire, ce programme peut être chargé directement en mémoire par la commande : UT R COPYK7RS232.BIN G7000 Il peut ensuite être exécuté par la commande G7000 Pour ceux qui ne disposent pas de l'assembleur, vous avez toujours la solution d'entrer directement le code assembleur sous UT à partir de l'adresse 7000 puis de sauver le tout avec la commande W7000 7059 COPYK7RS232.BIN G7000 J'indique souvent la commande permettant de lancer le programme dans le nom du programme, cela évite les efforts de mémoire ou de recherche documentaire, c'est pourquoi on trouve "G7000" dans le nom du programme. Voici le code assemblé :
En gras sont représentées les adresses de début de chaque ligne. Vous pourrez facilement entre ce code sous UT avec la commande S Il va falloir entrer chacun des octets, un par un. Pour ça je conseille vivement de le faire ligne par ligne par paquet de 16 octets. L’adresse du début de chaque ligne est en gras. Pour ça, il faut utiliser la commande S qui signifie Substitute. Il faut taper S immédiatement suivi de l’adresse (sans blanc) suivi immédiatement de l’appui sur la barre d’espace. Donc pour commencer à entrer le premier octet, il faut taper : S7000 Et taper tout de suite la barre d’espace sans faire return. Le premier octet en 7000 va apparaître, suivi d’un tiret. On tape ensuite 21 Suivi immédiatement de la barre d’espace et ainsi de suite. Quand vous serez arrivé au bout de la ligne (CD) il faudra appuyer sur la flèche gauche. Vous pourrez alors débuter la deuxième ligne de la même façon et ainsi de suite jusqu’à la ligne débutant en 7050 et se terminant en 7059.
|