Page 1 sur 3

Le ROM builder pour Coconut

Publié : jeu. 7 août 2014 20:49
par cgh
Le but du projet est de fournir une base de données de fonctions et de permettre tres simplement des les assembler en une image ROM "personnalisée".

La ROM finale et personnelle pour s'utiliser dans des materiels/modules facilement accessibles maintenant, tels que le prodigieux 41CL, les extraordianires Clonix/NoVRAM, mais aussi dans le hardware d'époque : WWRambox/41CY, Eramco, MLDL2000....
Bien sur, les emulateurs actuels seront aussi les bienvenus :)

Eh bien, c'est la derniere ligne droite avant l'arrivee de l'artiste 8)

Je recherche d'ailleurs des beta-testeurs comme suit :geek:
  • Des personnes possedant un 41CL pour tester l'installation des images et leur utilisation sur cette plateforme,
  • Des personnes pouvant tester sur d'autres emulateurs que nsimII: go41CX, V41, emu41, pockemul, ...
  • Des personnes pour tester les ROM "buildees et compilees" plus en detail que ce que je fais moi-meme,
  • Des personnes pour tester le ROM-builder et sa suite sur d'autres OS que Linux/x86 ou x86_64, entre autres Fenetres
  • Et bien sur, toujours des fondus du MCODE pour le decoupage des ROMs eventuellement restantes.
Perso, je fais des tests des images de ROM produites en ROM/Clonix, en RAM/NoVRAM et en RAM/WWRambox.

Si vous etes assez fous pour me suivre, faites vous connaitre sur ce fil :)

Re: Le ROM builder pour Coconut

Publié : jeu. 7 août 2014 21:42
par cgh
Le zip est dispo en fichier joint. C'est du code C testé uniquement sous Linux (Fedora32 et Slackware64).

Il suffit de dezipper l'archive, faire cd bld-asmrom-0.21.999 puis make

Les scripts de constructions des differentes ROM sont dans le répertoire SCRIPTS/ (fichiers .sh pour le bash).

Les images ROM construites (fichiers .ROM), le fichier de log associe (.LST) et le source (.SRC) sont dans le repertoire ROM/. Les images .ROM sont pretes pour etre flashees dans un Clonix.

Le répertoire LIF/ contient les images compressees au format HEPAX (.sda) pour un transfert vers les RAM HEPAX ou NoVRAM/NoV-64 et les images compressees au format WWRambox/Eramco (.r41) pour etre transferees dans les RAM de WWRambox et/ou autre.

Le répertoire BLD/ contient les fonctions ou groupes de fonctions extraites des differentes ROM, plus des petits trucs de mon cru. Les fonctions/instructions sont extraites des ROM suivantes: HPILDEV, EXTIO, XFUNCTIONS, PANAME, PARIO, MLROM, HEPAX, APHABOX, TOOLBOX, SANDBOX, SANDMATH, PPC-MELB, ASSEMBLER, BUFFERLAND et bien sur HEPAX pour les multi-fonctions.

La documentation (fichier DOCUMENTATION) n'est pas encore mise a jour. N'hésitez pas a en parler sur ce fil.

Le code fourni a ete expurge de l'emulateur nsimII pour simplifier la mise au point, mais le package complet et final contiendra nsimII.

ATTENTION: C'est du code en pre-alpha. Il n'est pas completement mature et bien sur des bugs sont presents ici et la. Le but c'est de les trouver. De meme, les ROMs 'compilees' fournies sont testees a minima (pas le temps). Le but est donc de les pousser un peu.

Vous utilisez ce logiciel et les ROM produites avec a vos propres risques. Je ne suis pas responsable des dommages eventuels (materiels et/ou logiciels, corruptions ou pertes de donnees), resultant de l'installation et/ou de l'utilisation du ROM builder, ainsi que des images ROM produites.

Merci a tous !

Re: Le ROM builder pour Coconut

Publié : ven. 8 août 2014 12:21
par cgh
Quelques precisions concernant les ROM. Les images ROM suivantes sont fournies:
- IOBOX -> image IOBOX.ROM
- IOBOX2 -> image IOBOX-2A.ROM
- PANAMBOX0 -> image PANAMBOX-0A.ROM
- PANAMBOX -> images PANAMBOX-1A.ROM et PANAMBOX-2A.ROM
- XFBOX -> image XFBOX.ROM
- XTRABOX0 -> image XTRABOX-0A.ROM
- XTRABOXA -> images XTRABOX-1A.ROM et XTRABOX-2A.ROM
- XTRABOXB -> images XTRABOX-1B.ROM et XTRABOX-2B.ROM
- XTRABOXC -> images XTRABOX-1C.ROM, XTRABOX-2C.ROM et XTRABOX-3C.ROM
- XTRABOXD -> images XTRABOX-1D.ROM, XTRABOX-2D.ROM, XTRABOX-3D.ROM et XTRABOX-4C.ROM
- XTRABOXE -> images XTRABOX-1E.ROM, XTRABOX-2E.ROM, XTRABOX-3E.ROM et XTRABOX-4E.ROM

Les ROM sont independantes les une des autres et les images aussi. On peut donc ne charger que XTRABOX-2E.ROM et XTRABOX-3E.ROM par exemple.

Aucune image n'est bank-switchee, et a part les commandes HP-IL extraites des EXT-IO et HP-ILDEV, aucun hw particulier n'est necessaire (en dehors des 41CL,NoVRAM, Clonix, ...). Ces images peuvent etres placees dans n'importe quelle page de 8 a 15, et il n'est pas oblige qu'ellees se suivent. On peut ainsi installer l'XTRABOXC avec l'image XTRABOX-1C en 8, XTRABOX-2C en 10 et XTRABOX-3C en 15.

La XFBOX contient toutes les fonctions des XFUNCTIONS (de la CX) hormis celles relatives a la memoire etendue (XMEM).
Les IOBOX sont des condenses des EXT-IO/HPILDEV.
Les PANAMBOX (les premières ROM) sont des PANAME expurges des instructions pour les peripheriques HP-IL.
Les XTRABOX sont une compilation d'un peu tout. La version D n'est pas la plus interessante. Il vaut mieux utiliser la version E.

Attention. Ces ROM ne peuvent pas forcement cohabiter, car en dehors des fonctions redondantes, il se peut que les numeros de XROM soient eux aussi multiples. De meme, il vaut mieux tester ces ROM sans avoir d'autres modules inseres (sauf le HP-IL 82160A).
Rappel des identifiants XROM (pour chaque image respectivement):
- IOBOX = IOBOX2 = 18
- PANAMBOX0 = 12
- PANAMBOX = 12 et 13
- XFBOX = 7
- XTRABOX0 = 8
- XTRABOXA = 1 et 2
- XTRABOXB = 1 et 2
- XTRABOXC = 1, 2 et 3
- XTRABOXD = 1, 2, 3 et 5
- XTRABOXE = 1, 2, 3 et 5

Si vous desirez avoir une image avec un numero de XROM different, changer la valeur <xrom> apres l'option -X <xrom> dans le script concerne. Par exemple, pour avoir une XFBOX avec un XROM de 31, changer le -X 7 par un -X 31 dans le fichier SCRIPTS/xfbox.sh puis relancer la generation de la ROM par un ./SCRIPTS/xfbox.sh et votre nouvelle ROM sera generee !

En cas de probleme, n'hesitez a me faire part de vos remarques sur ce fil

Re: Le ROM builder pour Coconut

Publié : ven. 8 août 2014 14:18
par hpmaniac
Superbe travail, mais il va falloir un peu de temps pour comprendre ce que chaque ROM contient....
cgh a écrit :Je recherche d'ailleurs des beta-testeurs comme suit :geek:
  • Des personnes pouvant tester sur d'autres emulateurs que nsimII: go41CX, V41, emu41, pockemul, ...
  • Des personnes pour tester les ROM "buildees et compilees" plus en detail que ce que je fais moi-meme,
Pour ceux qui veulent tester avec les émulateurs go41CX et V41 (ou i41CX+ sur iOS) j'ai converti les .ROM suivants en .MOD:

- IOBOX -> image IOBOX.MOD
- IOBOX2 -> image IOBOX-2A.MOD
- PANAMBOX0 -> image PANAMBOX-0A.MOD
- PANAMBOX -> images PANAMBOX-1A.MOD et PANAMBOX-2A.MOD
- XFBOX -> image XFBOX.MOD
- XTRABOXE -> images XTRABOX-1E.MOD, XTRABOX-2E.MOD, XTRABOX-3E.MOD et XTRABOX-4E.MOD

Pour simplifier je n'ai converti que la dernière version de l'XTRABOX.

Voici ce que donne l'XTRABOX-1E sous V41:
Image

Et lors du test avec la fonction XROMTST de la ROM PPC Melbourne:
Image
Image

Re: Le ROM builder pour Coconut

Publié : ven. 8 août 2014 15:45
par cgh
hpmaniac a écrit :Pour ceux qui veulent tester avec les émulateurs go41CX et V41 (ou i41CX+ sur iOS) j'ai converti les .ROM suivants en .MOD:

- IOBOX -> image IOBOX.MOD
- IOBOX2 -> image IOBOX-2A.MOD
- PANAMBOX0 -> image PANAMBOX-0A.MOD
- PANAMBOX -> images PANAMBOX-1A.MOD et PANAMBOX-2A.MOD
- XFBOX -> image XFBOX.MOD
- XTRABOXE -> images XTRABOX-1E.MOD, XTRABOX-2E.MOD, XTRABOX-3E.MOD et XTRABOX-4E.MOD

Pour simplifier je n'ai converti que la dernière version de l'XTRABOX.
Merci hpmaniac :)

Petite question : Comment les fichiers .MOD sont-ils créés ? Avec l'accord de Warren Furlow, j'ai intégré l'utilitaire MODFile dans nsimII, mais je n'ai jamais vraiment cherché à en savoir plus.
De mémoire, on peut aussi avoir plusieures pages dans un .MOD, non ?

Re: Le ROM builder pour Coconut

Publié : ven. 8 août 2014 16:47
par hpmaniac
J'ai créé les fichiers .MOD avec MLDL2K.exe, le logiciel du MLDL2000.

On peut avoir plusieurs pages/ROMs dans un .MOD mais je ne les ait pas regroupées car tu as écrit:
cgh a écrit :Les ROM sont independantes les une des autres et les images aussi. On peut donc ne charger que XTRABOX-2E.ROM et XTRABOX-3E.ROM par exemple.

Re: Le ROM builder pour Coconut

Publié : ven. 8 août 2014 19:23
par cgh
hpmaniac a écrit :J'ai créé les fichiers .MOD avec MLDL2K.exe, le logiciel du MLDL2000.
OK. J'ai regarde vite fait.
hpmaniac a écrit :On peut avoir plusieurs pages/ROMs dans un .MOD mais je ne les ait pas regroupées car tu as écrit:
cgh a écrit :Les ROM sont independantes les une des autres et les images aussi. On peut donc ne charger que XTRABOX-2E.ROM et XTRABOX-3E.ROM par exemple.
Oui. Tu as raison. C'etait juste pour confirmation.

Re: Le ROM builder pour Coconut

Publié : ven. 8 août 2014 21:11
par cgh
Pour les différentes fonctions inclues dans les ROM, on distingue 4 catégories.

1/ Les fonctions 'extraites' directement des ROM et reintroduites dans une nouvelles ROM sans changement (sauf eventuellement le nom pour eviter les doublons ou dans un soucis homogenisation). Cela concerne le plus grand nombre de fonctions, comme celles venant des ROM HP: XFUNCTIONS, EXT-IO, ILDEV. Sauf precision de ma part, c'est ce cas. Il faut donc se reporter au manuel d'ou les fonctions sont extraites pour connaitre leur utilisation. J'ai changer de nom les fonctions logiques pour eviter que les instructions 56-BITS de l'ASSEMBLER ne se melangent avec les 32-BITS du IL-DEV et elles-meme se melangent avec celles du CCD. De meme, ALEFT,AMID et ARIGHT sont respectivement LEFT$, MID$ et RIGHT$ du ALPHABOX. Dans le meme esprit, a>A et A>a sont UPR$ et LOW$.

2/ Les fonctions que je me suis permis d'ameliorer ou de modifier, voire de corriger,
Dans les ROMs presentes, l'instruction HP-IL FLTYPE, que j'ai etendues avec le type RO (pour ROM41 ou .r41). De plus, dans les images de l'IOBOX*, l'entete - IOBOX (code XROM 18,00) renvoit sur la fonction SEND du EXT-IO.

3/ Les fonctions de mon cru, inspirees et/ou reecrites d'apres une fonction, voire directement crees par mes soins.
Cela concerne sutout une implementation d'un gestion de buffer (inspiree du BUFFERLAND), des fonctions 'synthetiques', comme LX, LB, LA, et enfin des fonctions sur les chaines (A>ST, ST>A, RHASHF, et AIS?).
3.1/ J'ai developpe les fonctions suivantes pour gerer le RGBF (identifiant 9).
RGBF cree le buffer de la taille N en registres specifiee en X. Si X=0, le buffer est detruit. Une fois cree le buffer sera conserve tant qu'il ne sera pas detruit par la fonction adequate ou que la ROM ne sera pas retiree.
?RGBF renvoit la taille si le buffer existe, sinon saute l'instruction suivante.
CLRGBF remet le RGBF a zero et reset le pointeur.
X>RGBF stocke X en RGBF a l'adresse pointee par L (0..N-1). Le pointeur L est incremente si >0. Il est decremente sinon.
RGBF>X contraire de X>RGBF.
X<>RGBF comme precedents mais echange X et le RGBF.
?X=RGBF teste si X est egal au RGBF.
?0=RGBF teste si le RGBF est nul.
?$RGBF teste si le RGBF est une string
L=RGBF charge en L le pointeur du RGBF.
RGBF=L sauve le pointeur du RGBF avec le pointeur L.
L<>RGBF echange...
?L=RGBF teste si L est egal au pointeur RGBF.
A>RGBF sauve ALPHA dans le RGBF a partir du pointeur L.
RGBF>A charge ALPHA depuis le RGBF a partir du pointeur L.
ST>RGBF et RGBF>ST de meme avec X Y Z T de la pile.
A noter que les fonctions entre le RGBF et A ou ST n'incremente pas le pointeur L.
RGX>BF sauve les registres S.D dans le buffer en 0. Cette fonction vient de BUFFERLAND.
BF>RGX le contraire.
3.2/ Les fonctions LX, LA et LB sont basees sur la capacite de lire l'octet qui suit en mode execution de programme et permettent des modifications sans acces a la pile.
LX nnn charge nnn en X[1:0] apres un SXR.
LA nnn ajoute le caractere nnn en ALPHA.
LB nnn insere le mot nnn au PC courant en mode direct. En execution de programme, LB va inserer nnn a l'adresse absolue pointee par X[3:0]. Attention X doit etre une chaine. A noter, que LB peut perturber le decodage des programmes. Faire PACK pour tout resoudre.
3.3/ Concernant les chaines, RHASHF est equivalent a ASHF mais agit sur les 6 caracteres de droite.
A>ST et ST>A chargent ALPHA dans X,Y,Z et T et inversement. A noter que A>ST et ST>A utilisent de vraies strings dans la pile. A>ST va donc stocker le registre ALHPA en T Z Y X, mais ce seront de vraies strings.

4/ Enfin un groupe de fonctions regroupees en une super-fonction (comme HEPAX et HEPAXA du module HEPAX). Je n'aimais pas ce style de fonctions multiple, mais je dois avouer que j'ai compris la frustration des programmeurs devant l'impossibilite d'ajouter une nouvelle fonction car la FAT est pleine (64 fonctions) et il reste plein de place dans la page. J'ai ainsi repris et modifie le code de HEPAX/HEPAXA et j'ai fait evoluer l'assembleur pour pouvoir creer des fonctions multiples. Ce n'est pas encore aussi simple que je le veux, mais cela fonctionne. Les fonctions multiples sont AIS? AIS?A, AX AXA et CDDCD et CDDCDA.
4.1/ AIS? nnn et AIS?A 'alpha'
000 :: ABC : Teste si le 1er caractere de ALPHA est une lettre majuscule, renvoit la lettre en X si oui, saute l'instruction suivante sinon.
001 :: abc : Idem mais teste une minuscule
002 :: DGT : Idem mais teste un chiffre decimal (0..9)
003 :: HEX : Idem mais teste un chiffre hexa-decimal (0..9, A..F)
004 :: PNC : Idem mais teste un caractere de ponctuation !,.:?
005 :: MTH : Idem mais teste un operateur +-*/^<>= et different
006 :: INX : Idem mais teste un des caractere specifie en X (1 a 6 caracteres)
Comme on voit 7 fonctions, pour somme toute une action similaire, d'autant que ce ne sont pas forcement des fonctions que l'on va utiliser souvent.
Alors regroupons les en une "super"-fonction: AIS? (Alpha Is ?). Cette fonction attend un chiffre de 000 a 006 et appelle la "sous fonction demandee (000 = ABC, 001 = abc... 006 = INX).
Sympa ! Mais, j'ai un peu de mal a me souvenir que PNC c'est 004. Dans ce cas, il y a une autre fonction AIS?A qui attend quant a elle, non pas un prompt numerique, mais ALPHA (nous sommes sur une HP-41C !!!!!).
Ainsi, au lieu de AIS? 004, nous entrons AIS?A [ALPHA]PUC[ALPHA] et la fonction 004 sera appelee et executee :)
Ouaip, mon gars, c'est bien ton truc, mais ca, la, c'est en mode direct !!! Moi, je programme, moi, mONsieur !
Qu'a cela ne tienne, en mode programme, AIS? et AIS?A vont s'auto-programmer !!!!

Code : Tout sélectionner

[PRGM]AIS? 002
BEEP
AIS?A [ALPHA]MTH[ALPHA]
BEEP
va generer le code:

Code : Tout sélectionner

AIS?
2
BEEP
AIS?
5
BEEP
et l'execution se passera nickel. Ce code produira un BEEP si le premier caractere ALPHA est un chiffre décimal ou un signe mathématique 8).
4.2/ Les fonctions AX et AXA sont extraites de la ROM PARIO, il s'agit de:
000 :: A-XB
001 :: A-XD
002 :: A-XH
003 :: A-XO
004 :: X-AB
005 :: X-AD
006 :: X-AH
007 :: X-AO
008 :: F-X
009 :: X-F
010 :: XE-M
011 :: XM-E
012 :: XE-SYL
013 :: SXL-XM

Je me permets de vous renvoyer au manuel de la ROM PARIO (avec le PROTOCODER) pour leur description.
4.3/ La fonction CDDCD est un multipleur sur CODE et DECODE, comme suit. Je ne donne que les chaines pour CDDCDA.
000 :: CD = Code ALPHA en X (= CODE du MLROM)
001 :: DC = Decode X en ALPHA (= DECODE du MLROM)
002 :: CR = Code ALPHA dans le registre d'adresse absolue donne par X entier.
003 :: DR = contraire de CR
004 .. 015 :: Cx = Code ALPHA en registre x avec x = t a b c d e
Dx = contraire de Cx
016 :: =ROM = Code AAAAMMM et execute un WMLDL, donc ecrit MMM en AAAA (accede aux RAM HEPAX)
017 :: ?ROM = Code AAAAxxx et execute un RDROM, donc lit le mot MMM en AAAA (accede aux RAM HEPAX) et le decode en ALPHA -> AAAAMMM.
018 :: 1D = Decode 1 digit de X
029 :: 2D = Decode 2 digits de X
020 :: 3D = Decode 3 digits de X
021 :: 4D = Decode 4 digits de X
022 :: C$ = Code ALPHA en X sous forme d'une chaine
023 :: X>$ = Converti le nombre dans X en string
024 :: X?$ = Teste si X contient une string; saute l'instruction suivante sinon
025 :: XCL$ = Efface le bit de string de X

Voila, voila... Bonne decouverte :)

Une petite mise a jour de l'archive avec un debut de documentation (DOCUMENTATION) et une correction des fonctions CDDCD et CDDCDA.

Re: Le ROM builder pour Coconut

Publié : sam. 9 août 2014 00:11
par cgh
Encore une dernière information. Dans les ROM PANAMBOX et XTRABOX*, la function XROM nn,00, soit le fameux header, contient toujours une fonction, qui n'est pas appelée souvent, mais qui peut être utile.

Ainsi -PANAMBX 1A attend un prompt de 3 digit et fixe le contraste de l'ecran (HALF-NUT) selon la valeur (de 0 a 15).
De meme, PANAMBX 2A est l'equivalent de la sous-fonction HEPAXA BCAT du module HEPAX.

Pour XTRABOX*, les headers -XTRABOX 1n sont equivalents a -PANAMBX 1A. Les headers -XTRABOX 2n sont equivalents a -PANAMBX 2A. Enfin, les headers -XTRABOX 3n attendent un prompt de 3 digits. Si la valeur est entre 000 et 031, cela lance un CAT2 a partir de la page contenant le XROM specifie - C'est la fonction ROMCAT. Si la valeur est entre 32 et 63, cela va faire un CHECK de la page contenant le XROM - 32 specifie.

C'est un truc que j'ai fait juste pour m'amuser... 8) ;)

Pour appeler ces fonctions speciale, les ROM PANAMBOX et XTRABOX embarquent une fonction XROM. Le premier prompt demande le XROM id et le 2eme prompt la fonction - mettre 00 !

Re: Le ROM builder pour Coconut

Publié : sam. 9 août 2014 15:59
par hpmaniac
Merci pour tous ces détails. Ça permet de mieux comprendre ce qu'il y a dans les différentes ROMs. Tu as fait bien plus que découper des ROMs existantes... Je suis loin de ton niveau en programmation m-code.
C'est amusant d'associer des fonctions au header de chaque ROM mais si tu dois dupliquer la fonction XROM dans chaque ROM on ne doit rien gagner en nombre d'entrée de la FAT.....
Par curiosité, comment as tu choisi les numéros de XROM? En particulier pourquoi 1,2,3 et 5 pour les XTRABOX?
Autre question, il y a t'il un intérêt à garder/utiliser les versions A, B, C et D par rapport à la version E des XTRABOX?

Re: Le ROM builder pour Coconut

Publié : sam. 9 août 2014 17:05
par cgh
hpmaniac a écrit :Merci pour tous ces détails. Ça permet de mieux comprendre ce qu'il y a dans les différentes ROMs. Tu as fait bien plus que découper des ROMs existantes... Je suis loin de ton niveau en programmation m-code.
C'est amusant d'associer des fonctions au header de chaque ROM mais si tu dois dupliquer la fonction XROM dans chaque ROM on ne doit rien gagner en nombre d'entrée de la FAT.....
Et bien, cela permet d'avoir quand meme une entree de plus, soit 64 fonctions en tout. Si c'est une fonction qui n'est pas souvent utilisee (comme CTRST), c'est tout du benef'.
En fait, il y a une histoire a cela. Beaucoup de ROM externes (CCD, MLROM, SANDBOX, ...) ont des fonctions cachees par le header. Quand je me suis amuse a decouper les ROM et a les compiler, je me trouvais souvent avec une ou plusieurs qui ne rentraient plus en FAT et de la place vide dans la page. J'ai utilise cette astuce pour ajouter une fonction supplementaire. Sinon le header c'est juste un RTN.
Frustre par de la place dispo et plus de place en FAT, j'ai alors regarde du cote de HEPAX et de ses fonctions multiples comme XF et XFA, HEPAX et HEPAXA.
Cela permis d'apprehender assez vite le MCODE sur CPU NUT et d'essayer aussi de faire quelque chose d'utile :)
hpmaniac a écrit :Par curiosité, comment as tu choisi les numéros de XROM? En particulier pourquoi 1,2,3 et 5 pour les XTRABOX?
Les numeros 1 2 3 et sont surtout utilises par les ROM MATH STAT etc... que je ne possede pas et n'utilise pas (je ne suis pas un matheux et ce n'a pas interet actuellement). Apres je choisi aussi en fonction des ROM que je possede et que je compte utiliser. Avec une HP-41CX cela prend les XROM 25 (XF) et 26 (TIME). De meme. j'utilise un module HP-IL, donc cela occupe les XROM 28 et 29, puis comme je souhaite me mettre un peu a l'HPIL avec l'EXTIO et/ou le HP-ILDEV, cela bloque les XROM 22, 23 et 24.
Un NoV-64 avec HEPAX prend le XROM 7, plus d'autres ROM que je conserve: ICODE (19), etc...
Mais maintenant avec le ROM builder, c'est simple de mettre le numero de XROM que l'on souhaite... tant qu'on ne programme pas en FOCAL.
C'est vrai aussi que c'est un choix totalement arbitraire, qui est juste le mien.
hpmaniac a écrit :Autre question, il y a t'il un intérêt à garder/utiliser les versions A, B, C et D par rapport à la version E des XTRABOX?
Oui et Non. Entre les A et ou D et E aucune, si ce n'est un choix different des fonctions compilees. La XTRABOX-0A utilise 1 page, les XTRBAOX-A et B, 2 pages, la XTRABOX-C, 3 pages et enfin les XTRABOX-D et E, 4 pages.
C'est juste des choix de fonctions de plus en plus importants.

Mais n'oublions pas que mon but n'est pas de fournir des ROM, mais une base exhaustive de fonctions et un outil qui pernette a n'importe qui de se compiler "sa" ROM sans grands efforts. Mes ROMs (XTRABOX. PANAMBOX, ...) ne sont que des ROM de tests, des POC comme on dit, pour demontrer la faisabilite et aussi comment se faire une ROM. Mais moi, je les utilise 8)
Par contre, les decoupages deviennent aussi plus compliques et il y a plein d'astuces ou de methodes qui m'obligent soit a modifier le code d'origine, soit a faire evoluer l'assembleur pour que le code fonctionne. J'ai enormement galere avec certaines fonctions comme RAMEDIT, GETKEYX, etc...

Re: Le ROM builder pour Coconut

Publié : dim. 10 août 2014 10:18
par cgh
Une liste des fonctions actuellement disponibles pour le ROM builder.

Code : Tout sélectionner

>>>> BLD/1D_2D_3D_4D.SRC
	"1-D"
	"2-D"
	"3-D"
	"4-D"

>>>> BLD/56-BITS.SRC
	"SXL"
	"SXR"
	"RXR"
	"RXL"
	"X+Y"
	"Y-X"
	"1CMPX"
	"2CMPX"
	"XANDY"
	"XORY"

>>>> BLD/56-BITS_HEPAXA.SRC

>>>> BLD/A-Xx.SRC
	"A-XO"
	"A-XD"
	"A-XH"
	"A-XB"

>>>> BLD/A-Xx_X-Ax_hepaxa.SRC

>>>> BLD/AD-LC.SRC
	"AD-LC"

>>>> BLD/ADEL0.SRC
	"ADEL0"

>>>> BLD/ADRON_OFF.SRC
	"ADRON"
	"ADROFF"

>>>> BLD/AID.SRC
	"AID"

>>>> BLD/AINT.SRC
	"AINT"

>>>> BLD/AIP.SRC
	"AIP"

>>>> BLD/ALEFT_ARIGHT.SRC
	"ALEFT"
	"ARIGHT"

>>>> BLD/ALENGX_XY.SRC
	"ALENGXY"
	"ALENGX"

>>>> BLD/ALENGis.SRC
	"ALENG"

>>>> BLD/AMID.SRC
	"AMID"

>>>> BLD/ANUM_ANUMDEL.SRC
	"ANUM"
	"ANUMDEL"

>>>> BLD/ARCLIP_RGswpA.SRC
	"ARCIP"
	"A<>RG"

>>>> BLD/AREV.SRC
	"AREV"

>>>> BLD/ARGBF.SRC
	"A>RGBF"
	"RGBF>A"

>>>> BLD/AROT.SRC
	"AROT"

>>>> BLD/ASG.SRC
	"ASG"

>>>> BLD/AST.SRC
	"A>ST"
	"ST>A"

>>>> BLD/ASUB.SRC
	"ASUB"

>>>> BLD/ATOXL_R.SRC
	"ATOXL"
	"ATOXR"
	"XTOAL"

>>>> BLD/ATOXX_YTOAX.SRC
	"YTOAX"
	"ATOXX"

>>>> BLD/Ais.SRC
	"A?A$"
	"A?a$"
	"A?D$"
	"A?H$"
	"A?P$"
	"A?S$"
	"A?IN$"

>>>> BLD/Ais2.SRC

>>>> BLD/Ais_hepaxa.SRC

>>>> BLD/AtoRG_RGtoA.SRC
	"RG>A"
	"A>RG"

>>>> BLD/AtoST.SRC
	"A>ST"

>>>> BLD/AtoST2.SRC
	"A>ST"

>>>> BLD/BCAT.SRC
	"BCAT"

>>>> BLD/BCDtoBIN.SRC
	"BCD>BIN"

>>>> BLD/BINtoBCD.SRC
	"BIN>BCD"

>>>> BLD/BIT-XY.SRC
	"BIT-XY?"

>>>> BLD/BITis.SRC
	"BITXY?"

>>>> BLD/BLDPT.SRC
	"BLDPT"

>>>> BLD/BRKPT.SRC
	"BRKPT"

>>>> BLD/BUFAD.SRC
	"BUFAD"

>>>> BLD/BUFCAT.SRC
	"BUFCAT"

>>>> BLD/BUFHEAD.SRC
	"BUFHEAD"

>>>> BLD/BUFHEAD_BUFAD.SRC
	"BUFHEAD"
	"BUFAD"

>>>> BLD/BUFLIST.SRC
	"BUFLIST"

>>>> BLD/BUFLNG_BUFAD.SRC
	"BUFLNG"
	"BUFAD"

>>>> BLD/BUFSTO_RCL.SRC
	"RCLBUF"
	"STOBUF"

>>>> BLD/BUFVIEW.SRC
	"BUFVIEW"

>>>> BLD/BUFis.SRC
	"BUF?"

>>>> BLD/BtoD.SRC
	"B>D"

>>>> BLD/CEIL_FLOOR.SRC
	"CEIL"
	"FLOOR"

>>>> BLD/CF33_SF33.SRC
	"CF33"
	"SF33"

>>>> BLD/CFXSFX.SRC
	"CFX"
	"SFX"

>>>> BLD/CHRstr.SRC
	"CHR$"

>>>> BLD/CLBUF.SRC
	"CLBUF"

>>>> BLD/CLINC.SRC
	"CLINC"

>>>> BLD/CLMM.SRC
	"CLMM"

>>>> BLD/CLRDEV.SRC
	"CLRDEV"

>>>> BLD/CLRLOOP.SRC
	"CLRLOOP"

>>>> BLD/CODE.SRC
	"CODE"

>>>> BLD/COLPT.SRC
	"COLPT"

>>>> BLD/CRBUF.SRC
	"CRBUF"

>>>> BLD/CSST.SRC
	"CSST"

>>>> BLD/CTRST.SRC
	"CTRST"

>>>> BLD/CURTNis.SRC
	"CURTN?"

>>>> BLD/DECODE_VIEWA.SRC
	"DECODE"
	"VIEWA"

>>>> BLD/DECX_INCX.SRC
	"INCX"
	"DECX"

>>>> BLD/DECY_INCY.SRC
	"DECY"
	"INCY"

>>>> BLD/DELBUF.SRC
	"DELBUF"

>>>> BLD/DEVL_DEVT.SRC
	"DEVT"
	"DEVL"

>>>> BLD/DIRX.SRC
	"DIRX"

>>>> BLD/DREGis.SRC
	"DREG?"

>>>> BLD/DtoB.SRC
	"D>B"

>>>> BLD/DtoF.SRC
	"D>F"

>>>> BLD/DtoH.SRC
	"D>H"

>>>> BLD/E3divEpls.SRC
	"E3/E+"

>>>> BLD/ED.SRC
	"ED"

>>>> BLD/EXTIO_ALENGIO.SRC
	"ALENGIO"

>>>> BLD/EXTIO_ANUMDEL.SRC
	"ANUMDEL"

>>>> BLD/EXTIO_ATOXLR_XTOAL.SRC
	"ATOXL"
	"ATOXR"
	"XTOAL"

>>>> BLD/EXTIO_ATOXX_YTOAX.SRC
	"ATOXX"
	"YTOAX"

>>>> BLD/EXTIO_XTOAR.SRC
	"XTOAR"

>>>> BLD/EXTIO_XswpFIO.SRC
	"X<>FIO"

>>>> BLD/EXTIO_hepaxa.SRC

>>>> BLD/FC_FS.SRC
	"FC"
	"FS"

>>>> BLD/FCisSisC.SRC
	"FS?S"
	"FC?S"

>>>> BLD/FINDAID.SRC
	"FINDAID"

>>>> BLD/FLLENG.SRC
	"FLLENG"

>>>> BLD/FLTYPE.SRC
	"FLTYPE"

>>>> BLD/Fop.SRC
	"F-"
	"F+"
	"F/"
	"F*"

>>>> BLD/GCD_LCM.SRC
	"LCM"
	"GCD"

>>>> BLD/GETKEY.SRC
	"GETKEY"

>>>> BLD/GETPC.SRC
	"GETPC"

>>>> BLD/HEPAX.SRC

>>>> BLD/HEPAXA.SRC

>>>> BLD/HEXKB.SRC
	"HEXKB"

>>>> BLD/HMSmul_HMSdiv.SRC
	"HMS*"
	"HMS/"

>>>> BLD/HYP.SRC
	"ASINH"
	"ACOSH"
	"ATANH"
	"SINH"
	"COSH"
	"TANH"

>>>> BLD/HtoD.SRC
	"H>D"

>>>> BLD/ID.SRC
	"ID"

>>>> BLD/ILDEV-BUFFER-VECT.SRC

>>>> BLD/ILDEV-BUFFER.SRC
	"OUTBIN"
	"OUTBINY"
	"INBIN"
	"PT="
	"X=BUF?"
	"X-BUF"
	"BUF-XB"
	"A=BUF?"
	"A=BUFX?"
	"A-BUF"
	"BUF-AX"
	"RG-BUFX"
	"RG=BUF?"
	"BUF-RGX"
	"BSIZEX"
	"AIPT"
	"MIPT"
	"BSIZE?"
	"PT?"
	"OUTBUFX"
	"INBUFX"
	"BUF-XA"
	"PRBYTES"

>>>> BLD/ILDEV-IL.SRC
	"WREG"
	"RREG"
	"RFRM"
	"WFRM"
	"IFCR?"
	"SRQR?"
	"FRAV?"
	"FRNS?"
	"ORAV?"
	"AAU"
	"GET"
	"GTL"
	"IFC"
	"LPD"
	"NRE"
	"REN"
	"SDC"
	"UNL"
	"UNT"
	"CMD"
	"IDY"
	"AAD"
	"NRD"
	"SST"
	"SAI"
	"SDI"
	"TCT"
	"SDA"
	"DDL"
	"DDT"
	"LAD"
	"TAD"

>>>> BLD/INP.SRC
	"INP"

>>>> BLD/INTis_FRCis.SRC
	"INT?"
	"FRC?"

>>>> BLD/INaxb.SRC
	"INAN"
	"INAE"
	"INAC"
	"INACL"
	"INXB"

>>>> BLD/J2_J3_J4.SRC
	"J2"
	"J3"
	"J4"

>>>> BLD/LA.SRC
	"LA"

>>>> BLD/LADEL.SRC
	"LADEL"

>>>> BLD/LADELX.SRC
	"LADELX"

>>>> BLD/LB.SRC
	"LB"

>>>> BLD/LC-AD.SRC
	"LC-AD"

>>>> BLD/LDEL.SRC
	"LDEL"

>>>> BLD/LINPT.SRC
	"LINPT"

>>>> BLD/LKOFF.SRC
	"LKOFF"

>>>> BLD/LKON.SRC
	"LKON"

>>>> BLD/LOCK.SRC
	"LOCK"

>>>> BLD/LOGIC-XY.SRC
	"AND-XY"
	"OR-XY"
	"XOR-XY"
	"NOT-X"

>>>> BLD/LOGIC.SRC
	"ANDXY"
	"ORXY"
	"XORXY"
	"NOTX"

>>>> BLD/LOWdolUPRdol.SRC
	"LOW$"
	"UPR$"

>>>> BLD/LX.SRC
	"LX"

>>>> BLD/LXB.SRC
	"LA"
	"LX"
	"LB"

>>>> BLD/LXB2.SRC
	"LB"
	"LA"
	"LX"

>>>> BLD/LXB3.SRC
	"LB"
	"LA"
	"LX"

>>>> BLD/Lop.SRC
	"CLL"
	"INCL"
	"DECL"

>>>> BLD/Lstr.SRC
	"L$"

>>>> BLD/MAKEB.SRC
	"MAKEB"

>>>> BLD/MANT.SRC
	"MANT"

>>>> BLD/MCSUB.SRC
	"MCSUB"

>>>> BLD/NCR_NPR.SRC
	"NCR"
	"NPR"

>>>> BLD/NLOOP_RCLSEL.SRC
	"NLOOP"
	"RCLSEL"

>>>> BLD/NNN.SRC
	"NNN"

>>>> BLD/NOTREM.SRC
	"NOTREM"

>>>> BLD/NRCL_NSTO.SRC
	"NRCL"
	"NSTO"

>>>> BLD/NUM.SRC
	"NUM"

>>>> BLD/OUTP.SRC
	"OUTP"

>>>> BLD/OUTaxb.SRC
	"OUTAC"
	"OUTACL"
	"OUTAE"
	"OUTAN"
	"OUTXB"

>>>> BLD/PARIO_hepaxa.SRC

>>>> BLD/PGCAT.SRC
	"PGCAT"

>>>> BLD/POLL.SRC
	"POLL"

>>>> BLD/POLLE_POLLD.SRC
	"POLLE"
	"POLLD"

>>>> BLD/POLLUNC.SRC
	"POLLUNC"

>>>> BLD/POSA.SRC
	"POSA"

>>>> BLD/PRIMEis.SRC
	"PRIME?"

>>>> BLD/PSIZE.SRC
	"PSIZE"

>>>> BLD/PUTPC.SRC
	"PUTPC"

>>>> BLD/QREM.SRC
	"QREM"

>>>> BLD/QROOT.SRC
	"QROOT"

>>>> BLD/RADEL.SRC
	"RADEL"

>>>> BLD/RAMED.SRC
	"RAMED"

>>>> BLD/RAMEDIT.SRC
	"RAMEDIT"

>>>> BLD/RCLBYTE.SRC
	"RCLBYTE"

>>>> BLD/RCLF.SRC
	"RCLF"

>>>> BLD/RCLop.SRC
	"RCL-"
	"RCL+"
	"RCL*"
	"RCL/"

>>>> BLD/RDEL.SRC
	"RDEL"

>>>> BLD/REGtoROM.SRC
	"REG>ROM"

>>>> BLD/REIDBUF.SRC
	"REIDBUF"

>>>> BLD/RESZBUF.SRC
	"RESZBUF"

>>>> BLD/RFRM.SRC
	"RFRM"

>>>> BLD/RGAX.SRC
	"RGAX"

>>>> BLD/RGBF.SRC
	"RGBF"
	"BF>ST"
	"ST>BF"
	"ARCLBUF"
	"ASTOBUF"
	"RG?BUF"
	"ST?BUF"
	"A?BUF"
	"X-RGBUF"
	.NAME
	"X>RGBUF"
	"RGBUF>X"
	"X>ABUF"
	"ABUF>X"
	"X>STBUF"
	"STBUF>X"
	"BUF>RGX"
	"RGX>BUF"

>>>> BLD/RGBF2.SRC
	"RGBF"
	"?RGBF"
	"CLRGBF"
	"X<>RGBF"
	"X>RGBF"
	"RGBF>X"
	"BF>RGX"
	"RGX>BF"
	"?X=RGBF"
	"?0=RGBF"
	"?$RGBF"
	"L<>RGBF"
	"RGBF=L"
	"L=RGBF"
	"?L=RGBF"

>>>> BLD/RGBF3.SRC
	"RGBF"
	"?RGBF"
	"CLRGBF"
	"X<>RGBF"
	"X>RGBF"
	"RGBF>X"
	"BF>RGX"
	"RGX>BF"
	"?X=RGBF"
	"?0=RGBF"
	"?$RGBF"
	"L<>RGBF"
	"RGBF=L"
	"L=RGBF"
	"?L=RGBF"

>>>> BLD/RGBF_VECT.SRC

>>>> BLD/RGBF_VECT2.SRC

>>>> BLD/RGCOPY.SRC
	"RGCOPY"

>>>> BLD/RGINIT.SRC
	"RGINIT"

>>>> BLD/RGNb.SRC
	"RGNb"

>>>> BLD/RGSORT.SRC
	"RGSORT"

>>>> BLD/RGXBUF.SRC
	"BUF>RGX"
	"RGX>BUF"

>>>> BLD/RGop.SRC
	"RG+-"
	"RG*"
	"RG/"

>>>> BLD/RGopY.SRC
	"RG+Y"
	"RG*Y"
	"RG/Y"

>>>> BLD/RHASHF.SRC
	"RHASHF"

>>>> BLD/RHASTO.SRC
	"RHASTO"

>>>> BLD/ROMCATX.SRC
	"ROMCATX"

>>>> BLD/ROMCHKX.SRC
	"ROMCHKX"

>>>> BLD/ROMis.SRC
	"ROM?"

>>>> BLD/ROMtoREG.SRC
	"ROM>REG"

>>>> BLD/ROMtoX.SRC
	"ROM>X"

>>>> BLD/ROT-XY.SRC
	"ROT-XY"

>>>> BLD/ROTXY.SRC
	"ROTXY"

>>>> BLD/RVIEW.SRC
	"RVIEW"

>>>> BLD/RWREG.SRC
	"WREG"
	"RREG"

>>>> BLD/RmulP_PmulR.SRC
	"R*P"
	"P*R"

>>>> BLD/Rstr.SRC
	"R$"

>>>> BLD/RtoS_StoR.SRC
	"R-S"
	"S-R"

>>>> BLD/SCFX.SRC
	"SCFX"

>>>> BLD/SEND.SRC
	"SEND"

>>>> BLD/SET_GETPT.SRC
	"GETPT"
	"SETPT"

>>>> BLD/SIGNUM.SRC
	"SIGNUM"

>>>> BLD/SIZEis.SRC
	"SIZE?"

>>>> BLD/SMATH_hepaxa.SRC

>>>> BLD/SRQis.SRC
	"SRQ?"

>>>> BLD/ST>A.SRC
	"ST>A"

>>>> BLD/STAT.SRC
	"STAT"

>>>> BLD/STBUF_ASTORCLBUF.SRC
	"BUF>ST"
	"ST>BUF"
	"ARCLBUF"
	"ASTOBUF"

>>>> BLD/STKswps.SRC
	"STK<>s"

>>>> BLD/STOF.SRC
	"STOF"

>>>> BLD/STO_INSBYTE.SRC
	"STOBYTE"
	"INSBYTE"

>>>> BLD/STOtoL.SRC
	"STO>L"

>>>> BLD/STRGBF.SRC
	"ST>RGBF"
	"RGBF>ST"

>>>> BLD/STSORT.SRC
	"STSORT"

>>>> BLD/ST_ASTORCLBUF.SRC
	"RGBUF"
	"BUF>ST"
	"ST>BUF"
	"ARCLBUF"
	"ASTOBUF"
	"RG?BUF"
	"ST?BUF"
	"A?BUF"
	"X-RGBUF"
	.NAME
	"X>RGBUF"
	"RGBUF>X"
	"X>ABUF"
	"ABUF>X"
	"X>STBUF"
	"STBUF>X"
	"BUF>RGX"
	"RGX>BUF"

>>>> BLD/STswpA.SRC
	"ST<>A"

>>>> BLD/TF.SRC
	"TF"

>>>> BLD/TFX.SRC
	"TFX"

>>>> BLD/TOGF.SRC
	"TOGF"

>>>> BLD/VMANT.SRC
	"VMANT"

>>>> BLD/WFRM.SRC
	"WFRM"

>>>> BLD/X-Ax.SRC
	"X-AH"
	"X-AO"
	"X-AB"
	"X-AD"

>>>> BLD/X-F_F-X.SRC
	"F-X"
	"X-F"

>>>> BLD/X=Yis=Zis.SRC
	"X=Y?Z?"

>>>> BLD/XCAT.SRC
	"XCAT"

>>>> BLD/XCFXSF.SRC
	"XCF"
	"XSF"

>>>> BLD/XCLdol.SRC
	"XCL$"

>>>> BLD/XF_ALENG.SRC
	"ALENG"

>>>> BLD/XF_ANUM.SRC
	"ANUM"

>>>> BLD/XF_AROT.SRC
	"AROT"

>>>> BLD/XF_ATOX.SRC
	"ATOX"

>>>> BLD/XF_CLKEYS.SRC
	"CLKEYS"

>>>> BLD/XF_CLRGX.SRC
	"CLRGX"

>>>> BLD/XF_GETKEY.SRC
	"GETKEY"

>>>> BLD/XF_GETKEYX.SRC
	"GETKEYX"

>>>> BLD/XF_PASN.SRC
	"PASN"

>>>> BLD/XF_PCLPS.SRC
	"PCLPS"

>>>> BLD/XF_POSA.SRC
	"POSA"

>>>> BLD/XF_PSIZE.SRC
	"PSIZE"

>>>> BLD/XF_RCLFLAG.SRC
	"RCLFLAG"

>>>> BLD/XF_REGSWAP_MOVE.SRC
	"REGSWAP"
	"REGMOVE"

>>>> BLD/XF_SIZEis.SRC
	"SIZE?"

>>>> BLD/XF_STOFLAG.SRC
	"STOFLAG"

>>>> BLD/XF_XTOA.SRC
	"XTOA"

>>>> BLD/XF_XopNNis.SRC
	"X=NN?"
	"XzNN?"
	"X<=NN?"
	"X<NN?"
	"X>=NN?"
	"X>NN?"

>>>> BLD/XF_XswpF.SRC
	"X<>F"

>>>> BLD/XF_sREGis.SRC
	"sREG?"

>>>> BLD/XM-E_XE-M.SRC
	"XE-M"
	"XM-E"

>>>> BLD/XM-E_XE-M_2.SRC
	"XE-M"
	"XM-E"
	"XM-SYL"
	"SXL-XM"

>>>> BLD/XNNis.SRC

>>>> BLD/XQtoXR.SRC
	"XQ>XR"

>>>> BLD/XROM.SRC
	"XROM"

>>>> BLD/XROM2.SRC
	"XROM"

>>>> BLD/XTOAI.SRC
	"XTOAI"

>>>> BLD/XTOAL.SRC
	"XTOAL"

>>>> BLD/XTOAR.SRC
	"XTOAR"

>>>> BLD/XXEQ.SRC
	"XXEQ"

>>>> BLD/Xeq1is.SRC
	"X=1?"

>>>> BLD/XeqYR.SRC
	"X=Y?R"

>>>> BLD/XgeYis0is.SRC
	"X>=Y?"
	"X>=0?"

>>>> BLD/Xisdol.SRC
	"X?$"

>>>> BLD/XopNNis.SRC
	"X=NN?"
	"XzNN?"
	"X<=NN?"
	"X<NN?"
	"X>=NN?"
	"X>NN?"

>>>> BLD/Xpow3_Xpow1_3.SRC
	"X^3"
	"CBRT"

>>>> BLD/XswpF.SRC
	"X<>F"

>>>> BLD/XswpREG.SRC
	"X<>REG"

>>>> BLD/XtoROM.SRC
	"X>ROM"

>>>> BLD/Xtodol.SRC
	"X>$"

>>>> BLD/Ypow1divX.SRC
	"Y^1/X"

>>>> BLD/aVIEW.SRC
	"aVIEW"

>>>> BLD/atoA_Atoa.SRC
	"A>a"
	"a>A"

>>>> BLD/baseIN.SRC
	"HEXIN"
	"OCTIN"
	"BININ"

>>>> BLD/baseVIEW.SRC
	"HEXVIEW"
	"OCTVIEW"
	"BINVIEW"

>>>> BLD/divMOD.SRC
	"/MOD"

>>>> BLD/mlrom_1D2D3D4DND.SRC
	"1D"
	"2D"
	"3D"
	"4D"
	"ND"

>>>> BLD/mlrom_CDDCD_1D2D3D4D_hepaxa.SRC

>>>> BLD/mlrom_CDDCD_1D2D3D4D_hepaxa2.SRC

>>>> BLD/mlrom_CDDCD_1D2D3D4D_hepaxa3.SRC

>>>> BLD/mlrom_CODE.SRC
	"CODE"

>>>> BLD/mlrom_DECODE.SRC
	"DECODE"

>>>> BLD/mlrom_DECODE_1D2D3D4D_hepaxa.SRC

>>>> BLD/percentT.SRC
	"%T"

>>>> BLD/sigmaREGis.SRC
	"CRTN?"
	"sRG?"

>>>> BLD/xPTBUF.SRC
	"AIPTBUF"
	"MIPTBUF"
	"?PTBUF"
	"=PTBUF"

>>>> BLD/zenrom_COD.SRC
	"COD"

>>>> BLD/zenrom_DCOD.SRC
	"DCOD"
La syntaxe est:
>>>> BLD/<source>.SRC : le nom du fichier source qui contient les fonctions. C'est le nom <source> sans l'extension .SRC qui est passe au ROM builder apres l'option -f. Par exemple, -f Fop va "inclure" le fichier BLD/Fop.SRC et donc les fonctions F- F+ F/ F*.
"<fonc>" : entre guillemets, le noms des fonctions contenues dans le source (1 fonction par ligne). Inclure le fichier va donc importer toutes les fonctions du fichier.
Le regroupement de fonctions dans un meme fichier est du au fait que les code sont communs et que seuls l'utilisation de flags permet de changer le comportement du code.

Re: Le ROM builder pour Coconut

Publié : mer. 13 août 2014 00:03
par cgh
Nouveautes ce soir: Les executables peuvent etre compiles pour WIN32.

Attention: Le Makefile utilise la chaine croisee mingw de Linux vers win32. Il est necessaire d'installer le package mingw pour compiler. Pour compiler les WIN32, unziper l'archives, puis lancer: make WIN32CC=<chaine-croisee-mingw>-gcc win32 ce qui va generer 2 executables.
Ces 2 executables WIN32 s'utilisent exactement comme les executables Linux, mais sous Windows.

NB: Dans mon cas, comme les mingw sont installes dans mon home, le make se lance comme cela:

Code : Tout sélectionner

make WIN32CC=$HOME/mingw/bin/i686-w64-mingw32-gcc win32

Les scripts du repertoire SCRIPTS/ devront etre adaptes pour utiliser l'executable .exe.

Si vous rencontrez des problemes avec les executables win32, merci de me le signaler, car n'utilisant pas de PC/Windows, je ne ferai pas de debug sur cette plateforme.

Bien sur, toute personne realisant le portage sous WIN32 natif est la bienvenue :)

Re: Le ROM builder pour Coconut

Publié : mer. 13 août 2014 12:48
par hpmaniac
cgh a écrit :Nouveautes ce soir: Les executables bldrom et asmrom peuvent etre compiles pour WIN32.
Bon, je me suis lancé sur mon PC Win7 : j’ai téléchargé l’installeur de MinGW et j’ai installé mingw32-base et msys-base directement sous C:/, l’emplacement par défaut:

Image

Ensuite j’ai ajouté C:\MinGW\bin à la variable Path de Windows:

Image

Puis j’ai lancé le fichier msys.bat qui se trouve dans C:\MinGW\msys\1.0 ce qui m’a ouvert une fenêtre shell et qui m’a créé un répertoire home perso dans C:\MinGW\msys\1.0\home.

J’ai alors copié sous le nom bld-asmrom le contenu de bld-asmrom-0.21.999p2 dans mon répertoire home perso, puis dans la fenêtre shell, j’ai tapé: cd bld-asmrom suivi de make WIN32CC=/c/MinGW/bin/mingw32-gcc win32 :

Image

et il m’a généré les deux exécutables bldrom-win32.exe et asmrom-win32.exe que j’ai renommé en bldrom.exe et asmrom.exe pour ne pas avoir à modifier les scripts.

Ensuite j’ai lancé mon premier script : SCRIPTS/iobox.sh et il a généré la ROM correspondante !

Image

Et voilà je vais pouvoir expérimenter moi aussi les ROMs customs :D

Re: Le ROM builder pour Coconut

Publié : mer. 13 août 2014 20:46
par cgh
hpmaniac a écrit :Ensuite j’ai lancé mon premier script : SCRIPTS/iobox.sh et il a généré la ROM correspondante !

Image

Et voilà je vais pouvoir expérimenter moi aussi les ROMs customs :D
Super ! :) Merci hpmaniac pour la description du build.

Bon, voila je pense que je vous livre ici le dernier zip (0.22.999) avec cette organisation.

J'ai commence le week-end dernier a revoir l'organisation du tout, mais je n'ai pas eu le temps de terminer, alors je vais essayer de continuer ce week-end.
Je pense que l'organisation va se faire ainsi:
  • Les executables vont passer dans un paquetage a part.
    Dans ce pacquetage les repertoires BLD LIF ROM et SCRIPTS seront supprimes.
  • La base de fonctions va devenir independante, car c'est normalement ce paquetage qui devrait bouger le plus : DBBLD-<version>
    Dans ce paquetage, on retrouvera les scripts (SCRIPTS/) [avec eventuellement des fichiers batch (BAT/) pour WIN32]. Les ROM que je me suis amuse a generer seront presentes et serviront de base de tests pour les evolutions futures.
    Comme les evolutions de l'assembleur sont dues le plus souvent aux besoins pour assembler une fonction venant d'une ROM, il y aura une dependance de DBBLD envers l'assembleur. J'ai ajoute une option (--test-version <version>) pour controler la dependance. La version minimum requise est la version premiere diffusee, soit 0.21.999 (le .999 c'est mon code de beta).
  • Quand a nsimII, je ne sais pas trop: je vais retirer tout ce qui concerne le ROM builder, quitte a pointer dessus au besoin. Je pense utiliser une methode de load dynamique pour l'assembleur, ce qui evitera d'avoir a maintenir 2 paquetages. Ce n'est pas prioritaire et ce sera pour plus tard.
De meme, dans ces 2 nouveaux paquetages, il sera possible de generer plusieurs tarball ou archives zip, pour ne diffuser que certains binaires, et/ou les ROM produites. Ceci est en cours.

Enfin, il va falloir adapter les scripts (et batch) pour les rendre plus sympathiques et plus portables... Je vais devoir reflechir un peu.

Deux evolutions seront attendues:
- La generation d'un fichier .MAP (option -m) qui permettra d'optimiser la ROM. Cela existe partiellement avec le fichier listing .LST genere par l'option -l. - C'est fait avec la 0.22.999 ci-joint. C'est d'ailleurs ce qui explique l'augmentation de la version, car il y a une rupture d'interface dans une primitive de l'assembleur.
- La creation des ROM au format .MOD pour les emulateurs. Actuellement, 3 formats existent:
  • .ROM (8192 octets) : C'est la ROM brute, compatible avec nsimII, et prete a etre flashee dans un Clonix/NoV*,
  • .r41 (5120 octets) : C'est le format de compactage utilise par les ROM WWRAMBOS, ESMLDLOS, CCD-OS/X,
  • .sda (5120 octets) : C'est le format de compactage proprietaire pour HEPAX.
Le but de cette reorganisation est de ne pas avoir a refaire un paquetage complet si juste un des morceaux est modifie.
J'espere que de nouvelles fonctions/instructions/ROM decoupees viendront enrichir la base DBBLD.

Christophe