Hello,
Il existe pour le 6502 quelques assembleurs plus que corrects mais... Qui ne restent que des assembleurs. Le C étant mon job de tous les jours et l'assembleur 6502 un hobby depuis plus de 30 ans, je trouve qu'il manque à l'assembleur la gestion des segments et un équivalent des fonctions avec paramètres... Ce qui le rendrait presque agréable. Le seul compilateur C encore utilisé aujourd'hui est CC65 de Ulrich Von Bassovitch... Que tout le petit monde du rétro-computing 6502 a essayé... Puis abandonné. C'est un vrai C, mais d'une lenteur probablement due au très petit nombre de registres, le seul 16 bits étant pc, le program counter.
J'ai donc commencé à écrire en python un pré-assembleur qui comprend quelques mot-clefs supplémentaires et qui réorganise le code: .include .segment
Avec une simple définitions de segments, quelle que soit la cible 6502 (Atari, Apple, Commodore, Oric etc...) on peut choisir de créer un exécutable sous forme de fichier disque, de cartouche etc... Autre avantage, on peut créer des sources réutilisables dans le sens où les variables sont dispatchées une fois pour toutes dans un source unique. par exemple une fonction memcpy serait un source "memcpy.asm" ajouté au source principal par .include, les variables dest src et size étant ajoutées dans le segment zdata et le code... Dans le segment code. Le pré-assembleur concatène les différents fichiers sources puis trie les différents bouts de segments pour faire un code pré-compilé. Ceci est déjà fait et fonctionne très bien.
Voici maintenant le sujet de ce post, les fonctions et leurs paramètres. je pense rajouter 3 mot-clefs supplémentaires au pré-assembleur: .function, .endfunc et .call
J'ai créé une pile logicielle pour les paramètres, mais c'est en dehors de la page zéro pour des raisons évidentes, ça crée quand même pas mal de code d'encapsulation et pour finir ça prend du temps.
J'ai entendu parler d'une autres méthode courante (en tout cas en C), c'est de créer des variables statiques pour chaque fonction. Elles seraient dans le segment data (non initialisé), beaucoup plus rapides d'accès, mais on perd la récursivité... Quelqu'un aurait une expérience ou un ressenti sur une de ces méthodes?
A+
Pfeuh
Partager