zpalm a écrit :Salut cgh, peux-tu détailler le travail pour découper les modules en instructions? je pourrais peut-être en faire un ou deux si je trouve le temps....
Salut zpalm. Et merci ! Toutes les mains sont les bienvenues
En fait, le travail consiste a extraire d'un fichier source [1 fichier = 1 page de 4Ko], cree par mon sourceur, les instructions (seules ou en groupe) les plus interessantes, ajouter les directives pour l'assembleur, trouver les sous-programmes locaux a la page ou a la ROM utilises par ces instructions, les copier dans un sous-repertoire, ajouter aussi les directives d'inclusion qui vont bien pour que l'assembleur puisse les charger.
Oui, mais tout n'est pas aussi simple. Comme le code est totalement relogeable, certaines ROMs sont optimisees en "placant" les sous-programmes a des endroits particuliers: frontieres de 256/512/1024 octets. J'ai bien ajoute des directives pour que l'assembleur place le code sur ces frontieres, mais cela peut devenir une perte de place colossale, surtout dans le cas des alignements sur les QUAD (1024octets). Il faut donc remplacer les [N]CGO/[N]CXQ [GSB000] et [GOSUBH],<offset> par une [N]CGO/[N]CXQ (mon_label) et cree le label a l'adresse de branchement. C'est le prix a payer pour un generateur de ROM generique...
De plus, comme pour beaucoup de ROM de cette epoque, il n'y a pas de difference entre le code et les donnees/messages. Le sourceur se trouve incapable (sauf dans quelques cas comme [MESSL]) de distinguer le code de ces donnees et donc l'assembleur genere sera sans interet. Voir meme decale les instructions reelles. Il faut donc identifier ces zones et les remettre "comme il faut". Des donnees (#nnn), des messages (.MESSL "...") et du code. Ces zones produisent des symboles orphelins: c'est a dire des symboles references alors qu'ils n'ont pas d'existence logique dans le code. Je n'ai pas encore fait ce dernier travail, mais il prevu. L'effet est simple: cela peut provoquer des erreurs d'assemblage !
Enfin, j'en profite pour renommer certaines instructions afin qu'elles ne portent pas le meme nom que d'autres existantes (AND en ANDXY [ADVANTAGE] ou XANDY [MLROM], ... ). J'essaie aussi de respecter une certaine logique dans le nommage, plus dans la philo. Ex: SUB$ (extraction d'une sous-chaine ALPHA) devient ASUB. Bon, ce n'est que mon avis, mais je tiens a ne pas avoir de "doublon" pour les noms.
Je ne compte pas extraire toutes les ROM, car certaines ROM comme ICODE s'averent inutilisables sans toutes leurs fonctions. De meme, les fonctions d'ICODE seules ne presentent pas d'interet.
Generalement, je fais des groupes, voir des gros groupes: J'ai extrait les instructions BUFFER de l'HPILDEV en un seul bloc, car a la lecture du manuel, ces instructions ne semblent pas interessantes separement. De meme pour les BININ/OCTIN/HEXIN et BINVIEW/OCTVIEW/HEXVIEW. Et il y a en a d'autres.
Je vois plusieurs themes:
- - Les instructions mathematiques/statistiques/finances/...: ASINH, COSH, Z+, ...
- - Les instructions generales avancees sur la pile/X/registres: RCL+, RCL-, X=Y?=Z, E3/E+, DECX, X=NN?, l'artilllerie RG* du PANAME,
- - Les manipulations ALPHA: XTOAL, POSA, ASUB, AREV...
- - La programmation avancee: RTN?, FRE? PSIZE, ...
- - L'HPIL: les differentes instructions de l'HPILDEV, de l'EXT-IO et de l'EXTEND-IL, ...
- - Les buffers I/O: CLBUF, DELBUF, CRBUF,...
- - La programmation synthetique: LB, XROM, NRCL, NSTO, RAMED, COD, DCOD, CFX,..
- - Acces aux MCODE et aux ROMs (ces dernieres instructions ne sont pas les plus urgentes car elles necessitent de posseder des modules avec des pages RAM [HEPAX, NoVRAM, Rambox, 41CL...]
Je ne compte pas toucher aux ROMs suivantes: BLDROM, ICODE, CCD, HEPAX, RAMBOX, toutes les ROMs pour le gestions du MCODE comme ASSEMBLER, DISASM4D, MLROM, tout ce qui contient un HARDWARE dedie comme TIME, WAND, PRINTER, de meme pour les chapitres PLOTTHER, HP82* du PANAME... et enfin tout ce qui contient du FOCAL: ADVANTAGE, PPC, ...
Je m'autorise de venir chercher des instructions, mais pas de tout eclater. J'ai ainsi pris plusieurs instructions au MLROM.
Cerise sur la Gateau: J'en profite pour corriger des bugs, comme c'est le cas avec certaines ROM modernes: BUFFERLAND, SANDBOX, ...
A ce jour, j'ai fait "a peu pres" les ROMs suivantes:
- - PANAMEU : instructions RG*, ALPHA, X<>F, X..NN?, PSIZE, SIZE?
- - HPILDEVU : *IN, *VIEW, AND, OR, XOR,... ROMCHKX. Je n'ai pas pris les instructions ALPHA; celles du PANAMEU etant plus fournies et exhaustives.
- - HPILDEVL : IL BUFFER + IL commandes, mais je n'ai pris SCOPE et MONITOR (trop particulieres et necessitent des vecteurs de polling)...
- - BUFFERLAND : Tout ce qui est general, sauf les buffers d'assignements et les buffers complexes qui necessitent la ROM 41Z.
- - COD/DCOD/RAMED du Zenrom,
- - E3/E+, RCL*, DECX,Y INCX,Y, ... du SANDMATH,
- - aVIEW, AREV, CRTST du SANDBOX,
- - LB, 1D, 2D, 3D, 4D et les instructions logiques 56-bits du MLROM/ASSEMBLER,
- - et quelques autres trucs.
Pour les noms des instructions, je n'utilise pas de caracteres "speciaux": ? est remplace par is, *+-/ par op, les tests (sauf =) par gt, ne,..., le <> par swp, etc...
Si dessous le ls de mon repertoire:
Code : Tout sélectionner
1D_2D_3D_4D.SRC BUFLNG_BUFAD.SRC HEXKB.SRC REGtoROM.SRC STO_INSBYTE.SRC
56-BITS.SRC BUFSTO_RCL.SRC ILDEV-BUFFER.SRC REIDBUF.SRC STOtoL.SRC
ACLis.SRC BUFis.SRC ILDEV-IL.SRC RESZBUF.SRC SUB
AD-LC.SRC BtoD.SRC LA.SRC RGAX.SRC X=Yis=Zis.SRC
ALENGis.SRC CF33_SF33.SRC LB.SRC RGCOPY.SRC XROM.SRC
ANUM_ANUMDEL.SRC CFXSFX.SRC LC-AD.SRC RGINIT.SRC XTOAI.SRC
AREV.SRC CLBUF.SRC LINPT.SRC RGNb.SRC XTOAL.SRC
AROT.SRC CLINC.SRC LOGIC.SRC RGSORT.SRC XTOAR.SRC
ASUB.SRC CODE.SRC LX.SRC RGXBUF.SRC XgeYis0is.SRC
ATOXL_R.SRC COLPT.SRC MYROM.SRC RGop.SRC XopNNis.SRC
ATOXX_YTOAX.SRC CRBUF.SRC NNN.SRC RGopY.SRC XswpF.SRC
BCDtoBIN.SRC CTRST.SRC NRCL_NSTO.SRC ROMCHKX.SRC XtoROM.SRC
BINtoBCD.SRC DECODE_VIEWA.SRC POSA.SRC ROMis.SRC aVIEW.SRC
BITis.SRC DECX_INCX.SRC PSIZE.SRC ROMtoREG.SRC baseIN.SRC
BLDPT.SRC DECY_INCY.SRC PUTPC.SRC ROMtoX.SRC baseVIEW.SRC
BRKPT.SRC DELBUF.SRC RAMED.SRC ROTXY.SRC divMOD.SRC
BUFCAT.SRC DtoB.SRC RAMEDIT.SRC RTNis.SRC xPTBUF.SRC
BUFHEAD.SRC E3divEpls.SRC RCLBYTE.SRC SIZEis.SRC zenrom_COD.SRC
BUFLIST.SRC GETPC.SRC RCLop.SRC STBUF_ASTORCLBUF.SRC zenrom_DCOD.SRC
Si tu es toujours partant pour la decoupe, je t'envoie les sources par courriel, bldrom/asmrom/nsimII (sources sous Linux) et la base d'instructions actuelle. Est-ce que l'adresse avec laquelle nous avions echange l'annee derniere a propos de VASM41 est encore la bonne ?