Revenir au plan du site


Lancer notre programme dans ACE


On va utiliser notre 'Hello World'. Vous n'avez toujours pas besoin de le comprendre, le but de cet article est de présenter les différentes façons d'utilise un programme avec notre émulateur. Soit en utilisant une disquette, soit en injectant dans la mémoire, etc. L'idée est que vous ayez le choix de la façon dont vous allez travailler.

ORG #100 ; spécifie à quelle adresse on doit assembler notre programme
LD HL,message
CALL print_message
JR $ ; boucle infinie

print_message
LD A,(HL) : INC HL ; récupérer un octet et avancer dans le tableau
OR A : RET Z ; si l'octet est nul, on sort de la routine
CALL #BB5A ; afficher le caractère avec le vecteur système
JR print_message ; et on recommence

message DEFB 'roudoudou.com',0


En l'état, ce programme va s'assembler et produire un binaire. Très bien, mais qu'est-ce qu'on en fait? Il est possible d'importer ce binaire dans la mémoire d'ACE-DL via l'explorateur mémoire et ensuite de l'appeler avec un CALL depuis le BASIC. Ce n'est pas la solution la plus simple alors j'en parlera à la fin de cet article

Executer un snapshot dans ACE


C'est ma méthode préférée, le snapshot peut injecter dans ACE de la RAM et de la ROM. ACE peut même rester ouvert dans un coin car il surveille si le fichier snapshot est modifié. Auquel cas il va le recharger tout seul.

Il faut ajouter au tout début du programme les lignes suivantes pour assembler dans les premiers 64K de RAM :
BUILDSNA
BANKSET 0 ; assembler dans les premiers 64K
RUN #100 ; pour dire à quelle adresse le snapshot doit démarrer

Vous pouvez exécuter ce programme dans ACE-DL avec la ligne de commande suivante Linux (utilisez le nom du .exe sous windows)
./AceDL rasmoutput.sna

Note: Cette façon d'injecter de la mémoire dans ACE pose un problème avec l'utilisation des vecteurs systèmes car la mémoire envoyée ne contiendra QUE votre programme. Si vous voulez utiliser les vecteurs systèmes avec un snapshot, il faudra d'abord faire un snapshot de la mémoire depuis le Basic (F4 dans ACE) et l'importer dans votre source de la façon suivante :
SNAPINIT 'image6128.sna' ; la mémoire de Rasm est initialisée avec le snapshot
BUILDSNA
SNASET GA_ROMCFG,%1100 ; pour être sûr de démarrer dans la mémoire, on les désactive du snapshot au cas où
BANKSET 0 ; assembler dans les premiers 64K
RUN #100 ; pour dire à quelle adresse le snapshot doit démarrer

Et voilà, vous utilisez la plus performante des méthodes, les symboles de votre programme sont automatiquement importées dans le débogueur, vous pouvez y accéder depuis l'explorateur mémoire ou la trace en appuyant sur la touche L et commencer à en taper quelques lettres. Ensuite, un clic (ou un double-clic) vous téléportera à l'emplacement du label.

Il existe d'autres méthodes que je vous présente ci-dessous, si le snapshot ne vous plait pas ^_^.



Enregistrer sur disquette et exécuter dans ACE


Il est possible d'en faire un programme exécutable sur disquette en ajoutant la ligne suivante à la fin :
SAVE 'HELLO.BIN',#100,$-#100,DSK,'hello.dsk'

Vous pouvez exécuter ce programme dans ACE-DL avec la ligne de commande suivante Linux (utilisez le nom du .exe sous windows)
./AceDL hello.dsk -autoRunFile 'hello.bin'



Faire un secteur de boot et exécuter dans ACE


Il est même possible d'en faire un secteur de boot exécutable avec les lignes suivantes à la fin :
EDSK CREATE,'ucpm.dsk',VENDOR,42,OVERWRITE ; create a vendor floppy
EDSK WRITESECT,'ucpm.dsk',#100,$,'0:0x41'

Vous pouvez exécuter ce programme dans ACE-DL avec la ligne de commande suivante Linux (utilisez le nom du .exe sous windows)
./AceDL ucpm.dsk -autoRunCPM



Importer un binaire pur dans ACE (ce n'est pas le plus simple)


Vous voulez vraiment savoir comment importer le binaire du début dans la mémoire? Zêtes têtu non?

Ok, ok, on y va.

D'abord vous lancez ACE et vous ouvrez un explorateur mémoire avec la touche F6. Comme vous le voyez sur la capture ci-dessous, l'explorateur s'ouvre par défaut sur l'espace mémoire émulé qui n'est généralement pas dans la mémoire vive de l'ordinateur mais avec la ROM 0 connecté, comme ici. Première chose, cliquer sur RAM pour basculer dans la mémoire vive.


Vous mettez l'émulateur en pause avec la Trace en appuyant sur F7 et vous cliquez sur l'adresse #100 dans l'explorateur mémoire car l'émulateur n'a aucune idée de ce que contient votre binaire, voir la capture ci-dessus, il fait 31 octets et ne contient pas d'entête AMSDOS (on verra plus tard que c'est plus facile avec l'entête ;) )


Vous faites alors un Drag'N'Drop de votre fichier dans la fenêtre de l'explorateur mémoire.

L'émulateur charge votre fichier à l'adresse à laquelle vous avez cliqué, ici #100 et il fait 31 octets, tout est bon.

Vous appuyez sur F9 pour relancer l'émulation et dans le basic, il ne vous reste qu'à taper CALL &100 pour exécuter votre programme. C'est terminé.




Importer un fichier AMSDOS dans ACE


Notre source de départ aura besoin de quelques modifications. Préciser le point d'entrée et changer la commande de sauvegarde fichier à la fin du source.
RUN #100
SAVE 'hello.bin',#100,$-#100,AMSDOS

Pas besoin de mettre l'émulateur en pause, ni de préciser l'adresse d'import. Réglez quand même l'explorateur mémoire sur RAM. Faites un drag'N'Drop et c'est terminé. Votre fichier est chargé au bon endroit, l'entête n'est pas importé. Vous aurez peut-être la question comme quoi le fichier contient un entête AMSDOS. Si vous n'avez jamais répondu à cette question ou que vous n'avez pas défini de réglage dans les Misc. Options d'ACE, je vous conseille de répondre Always ou Toujours.
Vous pouvez ensuite exécuter votre programme avec un CALL &100