REALISEZ VOS CARTOUCHES PB5 (4)
Mise en cartouche d'un programme LM
par André Chéramy et Claude Sittler


Après la mise en cartouche d'un programme BASIC, dans notre article précédant, nous poursuivons nos exercices pédagogiques pour vous familiariser un peu plus avec les cartouches PB5. Aujourd'hui, nous verrons comment mettre en cartouche un programme LM (langage machine) pré-existant.

DE QUOI AVEZ-VOUS BESOIN?
1) Un programme LM pour mettre dans la cartouche.
2) Un éditeur hexadécimal (travail sur PC) ou un moniteur (travail sur Oric).
3) Une calculatrice hexadécimale (facultative, m ais pratique).
4) Une "ROM1"
1) LE PROGRAMME LM

Dans tous les cas, il vous faudra un programme LM dont la taille soit inférieure à 16384 octets. Examinez vos disquettes SEDORIC, vous allez bien trouver un bon vieux jeu dont la taille soit égale ou inférieure à 65 secteurs. Pour notre part, nous avons utilisé HARRIER ATTACK, dans une version ayant le STATUS suivant: 0650 3390 41 1100, et dont la taille est donc #3390 - #0650 +1 = #2D41 soit 11585 octets. Attention, ce jeu livré à l'origine sur K7, a été par la suite adapté à SEDORIC de plusieurs manières. Il en circule donc plusieurs versions.

2) L'EDITEUR HEXADECIMAL OU LE MONITEUR

2a) Si vous travaillez sur PC, utilisez un éditeur hexadécimal, par exemple ME.EXE sur la disquette du CEO au format PC de décembre 96 (si vous opérez sous DOS) ou encore HWORKS16.EXE sur la disquette de juin 98 (si vous opérez sous WINDOWS). HWORKS16.EXE est également capable de calculer la checksum des fichiers. A défaut, vous pourrez vérifier votre travail avec CHKSUM.EXE de Robert Chéramy (disquette de juin 1997). Dans les deux cas, la checksum obtenue est identique à celle qui est affichée par la commande CHKSUM de SEDORIC V3.0. Une fois la cartouche PB5 réalisée, vous pourrez la tester sous EUPHORIC, moyennant un paramètrage du fichier EUPHORIC.INI.

2b) Ceux d'entre vous qui ne possèdent pas de PC pourront évidement effectuer tous nos travaux sur ATMOS à l'aide d'un bon moniteur (moyennant une adaptation des procédures). Si vous n'êtes pas familier de ce genre de programme, optez pour quelque chose de simple, par exemple MONAC1.COM (présent sur la disquette de mars 97, S30TOOLS.ZIP). Mais pour tester le fichier qui résultera de leur travail, il faudra shooter ce fichier dans une EPROM 27256. Si vous ne disposez pas de programmateur d'EPROM, nous pourrons vous dépanner (gracieusement, azioujouôle).

3) LA CALCULATRICE HEXADECIMALE

Une calculatrice hexadécimale (soit réelle c'est à dire électronique ou virtuelle, c'est à dire un programme) peut également vous être utile. La disquette de juin 1998 contient par exemple les programmes BCONV16.EXE et CALC16.EXE dans le fichier d'archive HW16V22.ZIP.

4) LA ROM1

Partez de la partie haute "ROM1" de la cartouche CMB, décrite dans le "Journal du Soft" n°9 et déjà utilisée dans notre article précédant. Si vous n'avez par cette ROM1 sous la main, recherchez dans vos archives le fichier PB5LIB02.ROM (32768 octets) zipé dans PB5LIB02.ZIP de la disquette de mars 1998. A l'aide de votre éditeur hexadécimal, éliminez la 1ère moitié du fichier. Il doit donc vous rester un fichier de 16384 octets dont la checksum doit être #6445. A défaut de PB5LIB02.ROM, vous pouvez partir du fichier CMB.256 (32794 octets), zipé dans JSOFT9.ZIP de la disquette de décembre 1997, qui est un fichier K7 au format EUPHORIC. Il faut d'abord retirer l'en-tête K7 (ici, les 26 premiers octets). On obtient alors un fichier de 32768 octets, identique au fichier PB5LIB02.ROM décrit ci-dessus.

S'il vous manque quelque chose, nous serons heureux de vous dépanner (gracieusement, eugaine).

MISE EN CARTOUCHE DU PROGRAMME LM

Revenons au programme LM. Choisissez par exemple un jeu que vous aimez bien. L'option ",V" de la commande LOAD de SEDORIC vous aidera à déterminer les adresses de début (ST), de fin (ED) et d'exécution (EX) et à vérifier qu'il s'agit bien d'un programme LM (fichier de type 40 ou 41). Pour l'instant, évitez tout programme qui soit handicapé par des protections complexes et dont la taille soit supérieure à 16384 octets (taille maximale 65 secteurs affichée par la commande DIR de SEDORIC).

Le programme que vous choisirez aura vraisemblablement des adresses différentes de celles de notre exemple. Vous aurez donc à adapter nos indications, mais c'est très simple. Pour ce faire, remplacez dans ce qui suit HARRIE par le nom de votre fichier et les valeurs que nous indiquons (adresses et taille) par celles de votre programme.

1) VERIFICATION DE LA TAILLE

Chargez votre fichier avec un LOAD"HARRIE",V s'il est sur disquette. Vous pouvez aussi examiner l'en-tête des fichiers K7 au format EUPHORIC avec un éditeur hexadécimal. Notez les adresses de début (ST), de fin (ED) et d'exécution (EX). La taille du fichier est égale à ED - ST + 1. Dans notre exemple, nous avons #3390 - #0650 +1 = #2D41

Calculez le nombre de page NP (bloc de #100 octets) qui seront nécessaires pour contenir votre programme (en arrondissant à la taille supérieure). Dans notre exemple, il faut #2E pages pour loger notre fichier de #2D41 octets. Notez soigneusement les valeurs de NP, ST et EX (soit #2E, #0650 et #1100 dans notre exemple).

2) EXTRACTION DU PROGRAMME PROPREMENT DIT

Afin d'être chargé au bon endroit par votre ORIC, tout programme comporte soit un en-tête (cas des fichiers K7), soit un secteur descripteur (cas des fichiers SEDORIC). C'est le programme nu que vous allez mettre dans la cartouche PB5, il faut donc le déshabiller.

Si vous travaillez sur PC, utilisez CIP.EXE de Robert Chéramy (disquette de juin 1997). Tapez CIP IMAGE.DSK, (en remplaçant IMAGE.DSK par le nom de la disquette où se trouve votre programme LM), puis utilisez l'option "S" pour extraire le programme que vous avez choisi, qui sera sauvé sans en-tête dans un fichier PC. A défaut de CIP, lancez EUPHORIC, sauvez votre programme avec le CSAVE de SEDORIC V3.0 (important), puis retirez l'en-tête du fichier K7 avec votre éditeur hexadécimal. Rappel: la taille des en-têtes de fichier K7 varie avec la longueur du nom utilisé. Pour vous simplifier la vie, faites par exemple un CSAVE"Z",A#0650,E#3390. Il faudra retirer les 15 premiers octets, jusqu'au zéro (inclus) qui suit le "Z" (#5A).

Si vous travaillez avec un ATMOS réel et SEDORIC, il suffit de faire un LOAD"HARRIE",N le programme est à la bonne place en RAM prêt à être "travaillé".

3) CONFECTION DE LA ROM0

La ROM0, c'est la moitié basse de la cartouche PB5. Elle contiendra votre programme LM. A l'aide de votre éditeur hexadécimal, ajoutez de #FF à la fin du programme LM choisi de façon à obtenir un fichier de 16384 octets (#4000). Notre programme HARRIE.COM (11585 octets) avait une checksum de #DB78, nous avons ajouté un bloc de 4799 octets #FF à la fin et obtenu un nouveau fichier sauvé sous le nom HARRIE.LOW de 16384 octets et de checksum #87B9. Avec une calculatrice hexadécimale, on peut vérifier que c'est correct. NB: il est possible d'ajouter autre chose que #FF, notamment #00 qui ne modifie pas la checksum.

La seule raison d'utiliser #FF est que l'écriture ultérieure du fichier dans une EPROM sera plus rapide. Si vous travaillez sur un ORIC réel, à défaut de moniteur, une boucle FOR...NEXT vous permettra de remplir la zone ad hoc (attention un HIMEM est peut-être nécessaire).

4) AJUSTEMENT DE LA ROM1

Nous avons vu plus haut que votre fichier de départ doit être une ROM1 de checksum #6445. Chargez le dans votre éditeur hexadécimal.

1) A l'offset #384D du fichier ROM1, ce qui correspondra à l'adresse finale F84D en ROM, remplacer les octets #01 et #05 par #50 et #06, afin que l'adresse ST de chargement du programme ne soit plus #0501, mais #0650. Rappel: l'offset est le numéro d'ordre de l'octet à partir du début du fichier, le premier octet ayant le numéro zéro. Tous les éditeurs hexadécimaux indiquent l'offset au curseur.

2) A l'offset #3855, remplacez la valeur #19 par la valeur NP que vous avez calculée plus haut (#2E dans notre exemple). Cette valeur est le nombre de pages (bloc de #100 octets) qui seront copiées de la ROM0 dans la RAM. Il était de #19 (c'est à dire 25) pour le programme CMB.

3) A l'offset #385A, remplacez les octets #20, #08 et #C7 (JSR C708) par les octets #4C, LL et HH, pour EX=HHLL. dans notre cas EX=#1100, on a donc LL=#00 et HH=#11), afin de remplacer le lancement du programme BASIC utilisé dans la cartouche CMB (voir le "Journal du Soft" n°9) par un saut direct à l'adresse d'exécution EX de votre programme. Sauvez votre travail ( HARRIE.HIG dans notre cas). Facultatif: vérifiez que votre nouvelle checksum = ancienne - somme des octets retirés + somme des octets ajoutés. Dans notre cas #6418 est bien égal à #6445 -#01 -05 -#19 -20 -#08 -#C7 +#50 +#06 +2E +#4C +#00 +#11.

4) Collez vos 2 fichiers avec un COPY /B ROM0 + ROM1 NOUVEAU.ROM. Dans notre cas: COPY /B HARRIE.LOW + HARRIE.HIG PB5LIB04.ROM¿

5) Testez sous EUPHORIC ou sur votre ATMOS réel si vous avez accès à un programmateur d'EPROM et que votre ATMOS est muni du fil "PB5" (voir le "Journal du Hard" n°9).

Rappel, pour EUPHORIC, il vous faudra utiliser une version 0,99k ou supérieure et l'image de la disquette avec SEDORIC patché "PB5". Ces deux ingrédients sont présents sur la disquette de mars 1998 (EUPHO99K.ZIP et PB5NEW.ZIP). Modifiez les 4 lignes ci-contre de EUPHORIC.INI en tenant compte, comme toujours, du nom du fichier que vous avez confectionné:

Computer=Atmos
DiskController=Microdisc
AtmosRom=pb5lib04.rom
SelectRomWithPB5=Yes

Bootez. Votre jeu sera lancé automatiquement si vous utilisez une configuration sans MICRODISC (ATMOS réel avec simple fil PB5 ou sous EUPHORIC version 0,99l et ultérieure). Dans les autres cas (ATMOS Octocéphalisé, EUPHORIC 0,99k, ou EUPHORIC avec MICRODISC), il sera nécessaire de faire un CALL#C000 pour lancer le jeu...

Si cela vous a plu, vous pouvez recommencer avec un autre jeu, en utilisant cette fois la ROM1 décrite dans notre premier article. Avec un peu de réflexion, cela ne devrait pas vous poser de problème.

Bon amusement !


Les articles du mois