Compilation du firmware 1.1, 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 de la version 1.0 du firmware « 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.

J'ai appliqué à ce fichier, les modifications se trouvant à la fin du firmware manual initial v1.0, pour le passer en v1.1, ce qui a donné le fichier suivant DAI_Firmware_manual_V1-1.txt

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.
  • Les 55 modules source (archive zip) : FM-1.1_SOURCES.zip

    Chaque module individuellement :

  • Compilation des 55 modules source avec l'assembleur DNA modifié


  • →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.
    1. 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
    2. 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"
    3. Cliquez dans la fenêtre "Debug: dai - Intel 8080 ':maincpu'"
    4. Appuyez sur la touche F12
    5. Appuyez sur la touche RETURN
    6. Au clavier, saisissez UT
    7. Appuyez sur la touche RETURN
    8. Au clavier, saisissez Z3
    9. Appuyez sur la touche RETURN
    10. Appuyez sur la touche R
    11. Appuyez sur la touche RETURN
    12. En fin de chargement, au clavier, saisissez G1100
    13. Appuyez sur la touche RETURN
    14. à la question "BUFFERDIM DEC ?", répondre 16
    15. Appuyez sur la touche RETURN
    16. appuyer sur la touche qui ramène la fenêtre du debugger à l'écran, pour mon cas, j'ai personnalisé la touche ²
    17. Dans la fenêtre MAME debugger, saisissez wp FFF6,1,rw,wpdata !=0Xd,{logerror "%c",a;g}
    18. Appuyez sur la touche F12
    19. Ouvrir Sublime Text (par exemple) avec le fichier source (.txt) et copier tout le texte Ctrl+A et Ctrl+C
    20. Dans l'émulation DAI (le DNA vous attend), tapez au clavier A.
    21. Appuyez sur la touche Pd Dwn pour coller le texte
    22. Une fois la directive END affichée, tapez au clavier .
    23. Tapez au clavier #E. pour vérifier qu'il n'y a pas d'erreur dans le source
    24. Tapez au clavier H. ce qui passe le DNA en mode sortie imprimante
    25. Tapez au clavier #L. ce qui lance l'impression de la liste assemblée
    26. A chaque rupture de page, appuyez sur la touche barre d'espace
    27. Dès que ] apparait à l'écran (fin de listing) affichez le debugger avec la touche spéciale prévue pour...(² chez moi)
    28. Dans la fenêtre MAME debugger, saisissez exit
    29. 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)
    30. 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
    31. Il vous reste à éditer "01.txt" et à détruire les dernière lignes vides avant la toute dernière ligne commençant par "]"
    32. Sauvegardez sur lui-même "01.txt"
    33. Répétez 54 fois les 32 étapes ci-dessus, et vous obtiendrez alors 55 fichiers numérotés de "01.txt" à "55.txt"
    34. Fusionnez ces 55 fichiers dans un fichier nommé "DAI_Firmware_V1-1.txt", ce fichier représentera donc la totalité du firmware 1.1 sous forme de listing DNA avec 64 lignes par page.

    Les 55 fichiers individuels lst + le merge (archive zip) : Firmware_1-1.zip

    Chaque fichier lst individuellement :

    Merge des 55 lst du firmware v1.1 :

  • 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 simple make et 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épertoire obj et placez-y le fichier "lst2obj.exe" ainsi que le fichier global créé dans le paragraphe précédent : "DAI_Firmware_V1-1.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-1.txt", ceci créera 3 fichier binaires 511_CodeObjet.bin,512_CodeObjet.bin et 514_CodeObjet.bin qui peuvent être utilisés pour créer les ROMs physique du DAI à savoir les ROMs 511,512 et 514.
  • Contrôle des codes objets produits par comparaison des codes MD5 et SHA-1


    → Dans le répertoire obj utilisez les utilitaires que vous connaissez pour générer les codes MD5 et SHA-1. Sous mingw64, sha1sum et md5sum feront très bien l'affaire :
    sha1sum *.bin
    6bbe2336c717354beab2ae201debeb4fd055bdcb *511_CodeObjet.bin
    1bb8717544d8c70ad0a23e69d21637ab38b379bb *512_CodeObjet.bin
    f9dfe35758290a8f5003194cc784b6e32adf1e0d *514_CodeObjet.bin

    md5sum *.bin
    abba3c223de418327b6540bf337ca077 *511_CodeObjet.bin
    c5834c67ea34e1a440a803c4fc2ab470 *512_CodeObjet.bin
    45cea40566d879b409baed6681a12925 *514_CodeObjet.bin


    →À l'issue de tout cet exercice, nous pouvons avoir confiance dans le document "DAI_Firmware_V1-1.txt", il retrace bien le listing de la version 1.1 des ROMs du DAI et permet de retrouver le code objet compris dans la majorité des DAI vendus dans les années 1980.

    →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

Copyright 2004-2023 © Bruno VIVIEN tous droits réservés.