Compilation du firmware 1.0, création des fichiers asm, obj et lst avec l'assembleur DNA
******************
* septembre 2026 *
******************
Le point de départ de ce travail est le fichier « DAI_Firmware_manual_with_links-v44.txt », résultat du travail effectué par Vincent S avec plusieurs outils dont ceux gravitant dans le domaine de l'intelligence artificielle, Claude notamment.
Je passe sous silence les semaines de correction de la numérisation réalisée par l'IA, le fichier de départ dont il est question ci-dessus est encore loin d'être totalement réalisé par Claude. Mais rendons à Claude, ce qui appartient à Claude, sans elle nous n'aurions pas été aussi vite... Quoique...
Voici les grandes étapes réalisées de mon côté :
-
Génération des fichiers source par création et mise en oeuvre d’un analyseur syntaxique avec lex & yacc
→ génération des 55 modules constituant le firmware manual « "FM-01_C000 C1FA SOURCE.txt"» à « "FM-55_3EDF9 3EFFF SOURCE.txt".
→Les modules contenant des labels multiples pour une même adresse, ont nécessité la génération de directives d’assemblage car le DNA n’accepte pas les labels multiples . L’astuce a consisté à ajouter un astérisque pour passer chaque label supplémentaire en commentaire et à les déclarer via des directives EQU. Par exemple dans le fichier «FM-47_3E1F6 3E3F0 SOURCE.txt », vous pouvez visualiser les directives générées avant la directive END. Dans ce fichier, vous pouvez voir que EGOTO est un label supplémentaire à EGOSUB, que {ETRON, ESTOP, ETROF, ESTEP, ECONT, ECHECK, ERET, ENEW, EEND, EREST} sont des labels supplémentaires à EUT, EERR est un label supplémentaire à EREM etc.
→Les directives générées n’apparaissent pas dans le listing final grâce aux directives UNL et LST.
→Si vous souhaitez recréer l'analyseur syntaxique et/ou simplement l'utiliser pour regénérer les 55 modules sources, vous avez tout ce qu'il vous faut dans ce fichier zip gensources.zip
→Pour raison de cohérence et pour qu’un daïste souhaitant recompiler un ou des modules source, ne soit pas confronté à une erreur DNA, les astériques générés devant les labels supplémentaires dans les fichiers source ont été laissés dans le listing final d'assemblage contrairement à ce qui avait été fait en 1982.
→Vous avez accès à l'intégralité des fichiers 55 modules source 8080 dans un fichier zip mais vous pouvez aussi visualiser/copier chacun individuellement ci-dessous. -
Compilation des 55 modules source avec l'assembleur DNA modifié
- Mettre l'assembleur DNA 64 lignes par page ("
DNA-08_31_DNA 64 LIGNES PAR PAGE.wav") dans le sous répertoire "daik7" de MAME - Sous Windows 11, lancer MAME avec les paramètres suivants :
mame64.exe dai -nothrottle -frameskip 10 -noautosave -debug -log -cass "daik7/DNA-08_31_DNA 64 LIGNES PAR PAGE.wav" - Cliquez dans la fenêtre "
Debug: dai - Intel 8080 ':maincpu'" - Appuyez sur la touche
F12 - Appuyez sur la touche
RETURN - Au clavier, saisissez
UT - Appuyez sur la touche
RETURN - Au clavier, saisissez
Z3 - Appuyez sur la touche
RETURN - Appuyez sur la touche
R - Appuyez sur la touche
RETURN - En fin de chargement, au clavier, saisissez
G1100 - Appuyez sur la touche
RETURN - à la question "
BUFFERDIM DEC ?", répondre16 - Appuyez sur la touche
RETURN - appuyer sur la touche qui ramène la fenêtre du debugger à l'écran, pour mon cas, j'ai personnalisé la touche
² - Dans la fenêtre MAME debugger, saisissez
wp FFF6,1,rw,wpdata !=0Xd,{logerror "%c",a;g} - Appuyez sur la touche
F12 - Ouvrir Sublime Text (par exemple) avec le fichier source (.txt) et copier tout le texte
Ctrl+AetCtrl+C - Dans l'émulation DAI (le DNA vous attend), tapez au clavier
A. - Appuyez sur la touche
Pd Dwnpour coller le texte - Une fois la directive
ENDaffichée, tapez au clavier. - Tapez au clavier
#E.pour vérifier qu'il n'y a pas d'erreur dans le source - Tapez au clavier
H.ce qui passe le DNA en mode sortie imprimante - Tapez au clavier
#L.ce qui lance l'impression de la liste assemblée - A chaque rupture de page, appuyez sur la touche
barre d'espace - Dès que
]apparait à l'écran (fin de listing) affichez le debugger avec la touche spéciale prévue pour...(²chez moi) - Dans la fenêtre MAME debugger, saisissez
exit - Dans le répertoire racine de MAME, déplacez le fichier "
error.log" vers le répertoire où vous aurez préalablement installé (ou reconstruit) l'utilitaire "nettoyage.exe" (voir avant l'étape N°1) - Dans ce dernier répertoire et en mode commande (ou bien sous mingw64), supposons que le module dont vous venez de produire le listing soit le n° 01, alors produisez le fichier nettoyé de cette façon
./nettoyage.exe >01.txt - Il vous reste à éditer "01.txt" et à détruire les dernière lignes vides avant la toute dernière ligne commençant par "
]" - Sauvegardez sur lui-même "01.txt"
- Répétez 54 fois les 32 étapes ci-dessus, et vous obtiendrez alors 55 fichiers numérotés de "01.txt" à "55.txt"
- Fusionnez ces 55 fichiers dans un fichier nommé "DAI_Firmware_V1-0.txt", ce fichier représentera donc la totalité du firmware 1.0 sous forme de listing DNA avec 64 lignes par page.
-
Génération du code objet des ROMs à partir du fichier lst global par création et mise en oeuvre d’un nouvel outil d'analyse syntaxique avec lex & yacc
→Si vous souhaitez recréer l'utilitaire "lst2obj.exe", vous avez tout ce qu'il vous faut dans ce fichier zip lst2obj.zip
→Vous pouvez utiliser directement (sous Windows 11) l'utilitaire "lst2obj.exe" ou le recompiler, dans ce cas, c'est comme pour l'utilitaire permettant de regénérer les sources, un simplemakeet la recompilation se fera dans le répertoire obj que vous aurez eu le soin de créer au préalable...
→Créez donc un répertoireobjet placez-y le fichier "lst2obj.exe" ainsi que le fichier global créé dans le paragraphe précédent : "DAI_Firmware_V1-0.txt" qui est la concaténation de toutes les listes produites avec le DNA.
→Lancez la génération du code objet par la commande "./lst2obj.exe <DAI_Firmware_V1-0.txt", ceci créera 3 fichier binaires511_CodeObjet.bin,512_CodeObjet.binet514_CodeObjet.binqui peuvent être utilisés pour créer les ROMs physique du DAI à savoir les ROMs 511,512 et 514.
→Notez que vous pouvez utiliser cette même commande avec le fichier issu de Claude, mais très largement corrigé manuellement par Vincent et Bruno ! La commande suivante produira les mêmes fichiers "./lst2obj.exe <DAI_Firmware_manual_with_links-v44.txt" -
Contrôle des codes objets produits par comparaison des codes MD5 et SHA-1
→ Dans le répertoireobjutilisez les utilitaires que vous connaissez pour générer les codes MD5 et SHA-1. Sous mingw64,sha1sumetmd5sumferont très bien l'affaire :
sha1sum *.bin
88479e9f2c99ecaa69b97389b6c61232ce26da91 *511_CodeObjet.bin
8b117161764f3921201210c67b91c39bb1006ae5 *512_CodeObjet.bin
a1c239fd48adf577ecefd3dd05e29ab80303f286 *514_CodeObjet.bin
md5sum *.bin
65428991b88afac7aa92d25a55e77876 *511_CodeObjet.bin
4611d3e11361a5ec80540ba1ab0e37c9 *512_CodeObjet.bin
c6100d4a51e561b4238516ab0445ee09 *514_CodeObjet.bin
→Pour comparer, voici ci-dessous la liste des codes MD5 et SHA-1 obtenus après dump de ROMs réelles, sauf pour la version 1.0 qui a été reconstuite en 2019, en appliquant la relation réciproque déduite des modifications indiquées à la fin du firmware manual 1.0 permettant de passer en version 1.1. En clair, j'ai pris une version 1.1 réelle de laquelle j'ai supprimé les modifications indiquées en fin de firmware manual pour retrouver la V1.0.
→À l'issue de tout cet exercice, nous pouvons avoir confiance dans le document "DAI_Firmware_V1-0.txt", il retrace bien le listing de la version 1.0 des ROMs du DAI et permet de retrouver le code objet reconstitué en 2019.
→Les codes MD5 et SHA-1 "officiels" des ROMs du DAI permettant de vérifier les résultats :MD5 ROM_511 1.0 65428991b88afac7aa92d25a55e77876
MD5 ROM_511 1.1 ABBA3C223DE418327B6540BF337CA077
MD5 ROM_511 1.2.1 AF959FAB34F5AB5F90A4B435FC58EAD5
MD5 ROM_511 1.2.2 CD906BAFB097F40322F9B714DB8081D3E
MD5 ROM_511 1.2.3 91FBE780E9E895B86E6D02BB5C109CC5
MD5 ROM_512 1.0 4611d3e11361a5ec80540ba1ab0e37c9
MD5 ROM_512 1.1 C5834C67EA34E1A440A803C4FC2AB470
MD5 ROM_512 1.2.1 F6DFA4AC002F21253C536E5A2CE13D02
MD5 ROM_511 1.2.2 B526C951635300FD70D074C8D6B6D330
MD5 ROM_514 1.0 c6100d4a51e561b4238516ab0445ee09
MD5 ROM_514 1.1 45CEA40566D879B409BAED6681A12925
MD5 ROM_514 1.2.1 F6A2FC2E4C46A4888F79E299F36E0E43
MD5 ROM_514 1.2.2 98FD3D5DAFF020A0D32956DF1ED62157
SHA-1 ROM_511 1.0 88479e9f2c99ecaa69b97389b6c61232ce26da91
SHA-1 ROM_511 1.1 6BBE2336C717354BEAB2AE201DEBEB4FD055BDCB
SHA-1 ROM_511 1.2.1 6F663814106C218BCF5B5A0244C63553756AEB73
SHA-1 ROM_511 1.2.2 CD172173FF700EBB043D36B3513D8C9B581EED5C
SHA-1 ROM_511 1.2.3 C8D5CD6C2600F97223837F9AC985A20C445D9275
SHA-1 ROM_512 1.0 8b117161764f3921201210c67b91c39bb1006ae5
SHA-1 ROM_512 1.1 1BB8717544D8C70AD0A23E69D21637AB38B379BB
SHA-1 ROM_512 1.2.1 5F72BCCF86CB56345422CD810E86E99A6F4B92A2
SHA-1 ROM_511 1.2.2 3DE877910679345F6045DBF8DB225478F908A9BA
SHA-1 ROM_514 1.0 a1c239fd48adf577ecefd3dd05e29ab80303f286
SHA-1 ROM_514 1.1 F9DFE35758290A8F5003194CC784B6E32ADF1E0D
SHA-1 ROM_514 1.2.1 0BC640F78B92ADF57E641C45B3C736DF1776CFD2
SHA-1 ROM_514 1.2.2 E0C446F71585A721BBCCE9000A9946BCA8558099
Les 55 modules source (archive zip) : FM-1.0_SOURCES.zip
Chaque module individuellement :
→L'assembleur DNA d'origine ne produit que 55 lignes par page dans le listing d'assemblage, or, le firmware manual produit en 1982 contient 64 lignes par page, il a donc fallu modifier l'assembleur pour reproduire ce qui a été fait à cette époque. Voici l'adresse du DNA modifié : DNA 64 lignes par page
→À la fin de la procédure ci-dessous, vous aurez besoin de faire un peu de nettoyage dans le fichier issu de la sortie RS232 du DAI émulé par MAME. Aussi, un petit utilitaire réalisé avec lex a été réalisé pour faire le plus gros du nettoyage. Il vous restera juste à détruire les dernière lignes vides avant la toute dernière ligne commençant par "
]". Si vous le souhaitez, vous pouvez modifier la spécification lex pour lui faire réaliser ces dernières suppressions. Téléchargez le fichier fichier zip nettoyage son mode d'emploi est donné dans la procédure ci-dessous. Si vous voulez le modifier et/ou le recompiler, c'est le même principe que pour l'utilitaire permettant de regénérer les sources à partir du fichier « DAI_Firmware_manual_with_links-v44.txt » issu de l'IA Claude.
→Il faut maintenant recompiler chacun des 55 modules ci-dessus, pour créer autant de listes d'assemblage. Or, le listing attendu correspondant au firmware manual de l'époque est celui qui était imprimé via la sortie imprimante du DAI... Nous avons plusieurs solutions pour récupérer cette sortie imprimante, soit utiliser un DAI réel et mettre en oeuvre la solution ici documentée Solution sortie RS232 avec DAI réel, soit utiliser une solution plus efficace via l'émulateur MAME. C'est cette dernière solution qui est ci-dessous documentée.