Hobiecat a écrit :gege a écrit :Mmm ça semble balaise...
Et l'avantage c'est que venant de toi, je n'ai même pas honte de ne rien comprendre
Aurais-tu la possibilité d'expliquer les (très) grands principes ?
C'est une "FAT" à créer avec des adresses calculées après avoir concaténé les divers morceaux de code ?
Tu dis que l'OS est mature, c'est parce que des 'hooks' sont prévus pour des extensions ?
Mmmm
G.E.
Je vais expliquer ce que j'ai compris, je pense avoir à peu près tout suivi : ce que Cgh a réussi à faire, c'est à décomposer les ROM sur les modules en instructions individuelles (chaque instruction correspondant à un programme en assembleur). Il est donc possible maintenant, mais c'est un gros boulot, de lister ce qui se trouve sur chaque module existant pour HP-41, les instructions disponibles, et leur morceau de code assembleur correspondant.
Maintenant, avec les outils mis au point, Cgh peut aussi recombiner un module "sur mesure", en picorant les instructions individuelles nécessaires provenant d'autres modules. Il est donc potentiellement possible, à partir de toutes les instructions disponibles, et leur code assembleur correspondant, de rebâtir un module complètement nouveau, avec toutes les instructions déjà existantes, voire de créer de nouvelles instructions.
Cela veut dire que ce développement ouvre des possibilités quasi-infinies sur les modules de 41 : c'est de mon point de vue une sacrée performance !
Merci Hobiecat. Oui c'est tout a fait cela. Mon but etant de fournir une base d'instructions (seules ou en groupe) et un logiciel/programme, le ROM builder, capable de "fabriquer" une ROM sur mesure en "prenant" les instructions qui interessent.
D'ailleurs, le post precedent ayant disparu, je recherche quelqu'un pour realiser le portage sous Windows. De meme, si vous voulez me donner un petit coup de pouce pour le "decoupage" des ROMs, n'hesitez a vous manifester.
Pour repondre a gege, et expliquer la structure d'une ROM, le mieux serait d'ouvrir un nouveau fil comme je l'ai fait avec
les Pensees du PC-1500. Mais cela sera apres que mon developpement actuel soit termine.
Pour les impatients, une petite synthese:
Une ROM contient de 1 a plusieurs pages de 4Ko. Chaque page de 4Ko, commence par le numero de XROM (1..31), et 0 si la ROM est vide. Apres le XROM, on trouve le nombre d'instructions (0..64) disponibles pour cet XROM. Apres, on trouve un tableau de N pointeurs (N etant le nombre d'instructions) donnant l'offset du code assembleur (ou FOCAL pour des ROMs comme MATH). C'est ce qui se nomme la FAT (Function-Address-Table ???)
Le pointeur donne donc la premiere instruction MCODE. Le nom de la fonction (celle qui apparait dans CAT 2) etant codee a l'envers depuis ce pointeur - 1.
Voici un exemple avec le module XFunctions:
Code : Tout sélectionner
> f 8
MODULE 'XFUNCS' IN PAGE 8/0
FAT XROM 25 FCNS 48 ROM-ID 'AP-1C' CHECKSUM 3DC (3DC) OK [COMPUTED 3DC]
8000/0 ......F. 019 'XFUNCS' XROM 25
8001/0 ......F. 030 "XFUNS-1C" FCNS 48
8002/0 ......F. 000,06F 806F XROM 25, 0 -EXT FCN 1C
8004/0 ......F. 001,04A 814A XROM 25, 1 ALENG
8006/0 ......F. 001,0FC 81FC XROM 25, 2 ANUM
8008/0 ......F. 00B,024 8B24 XROM 25, 3 APPCHR
800A/0 ......F. 00B,0CC 8BCC XROM 25, 4 APPREC
800C/0 ......F. 005,082 8582 XROM 25, 5 ARCLREC
800E/0 ......F. 002,06E 826E XROM 25, 6 AROT
8010/0 ......F. 001,064 8164 XROM 25, 7 ATOX
8012/0 ......F. 00A,0F2 8AF2 XROM 25, 8 CLFL
8014/0 ......F. 000,075 8075 XROM 25, 9 CLKEYS
8016/0 ......F. 00A,083 8A83 XROM 25,10 CRFLAS
8018/0 ......F. 00A,07B 8A7B XROM 25,11 CRFLD
801A/0 ......F. 00D,066 8D66 XROM 25,12 DELCHR
801C/0 ......F. 00D,06E 8D6E XROM 25,13 DELREC
801E/0 ......F. 00C,017 8C17 XROM 25,14 EMDIR
8020/0 ......F. 001,07D 817D XROM 25,15 FLSIZE
8022/0 ......F. 006,0E1 86E1 XROM 25,16 GETAS
8024/0 ......F. 003,02A 832A XROM 25,17 GETKEY
8026/0 ......F. 008,0FE 88FE XROM 25,18 GETP
8028/0 ......F. 00E,07B 8E7B XROM 25,19 GETR
802A/0 ......F. 005,079 8579 XROM 25,20 GETREC
802C/0 ......F. 00E,04C 8E4C XROM 25,21 GETRX
802E/0 ......F. 008,0F8 88F8 XROM 25,22 GETSUB
8030/0 ......F. 008,00B 880B XROM 25,23 GETX
8032/0 ......F. 00B,05F 8B5F XROM 25,24 INSCHR
8034/0 ......F. 00B,06A 8B6A XROM 25,25 INSREC
8036/0 ......F. 001,000 8100 XROM 25,26 PASN
8038/0 ......F. 003,0BD 83BD XROM 25,27 PCLPS
803A/0 ......F. 002,0A1 82A1 XROM 25,28 POSA
803C/0 ......F. 007,06D 876D XROM 25,29 POSFL
803E/0 ......F. 000,0AB 80AB XROM 25,30 PSIZE
8040/0 ......F. 00D,0F6 8DF6 XROM 25,31 PURFL
8042/0 ......F. 003,066 8366 XROM 25,32 RCLFLAG
8044/0 ......F. 00F,0B3 8FB3 XROM 25,33 RCLPT
8046/0 ......F. 00F,0BB 8FBB XROM 25,34 RCLPTA
8048/0 ......F. 00E,0D4 8ED4 XROM 25,35 REGMOVE
804A/0 ......F. 00E,0CB 8ECB XROM 25,36 REGSWAP
804C/0 ......F. 006,052 8652 XROM 25,37 SAVEAS
804E/0 ......F. 008,062 8862 XROM 25,38 SAVEP
8050/0 ......F. 00E,082 8E82 XROM 25,39 SAVER
8052/0 ......F. 00E,045 8E45 XROM 25,40 SAVERX
8054/0 ......F. 008,005 8805 XROM 25,41 SAVEX
8056/0 ......F. 00F,041 8F41 XROM 25,42 SEEKPT
8058/0 ......F. 00F,04A 8F4A XROM 25,43 SEEKPTA
805A/0 ......F. 001,088 8188 XROM 25,44 SIZE?
805C/0 ......F. 003,074 8374 XROM 25,45 STOFLAG
805E/0 ......F. 003,0D9 83D9 XROM 25,46 X<>F
8060/0 ......F. 00C,004 8C04 XROM 25,47 XTOA
Prenons l'instruction X<>F. La FAT nous indique que X<>F (XROM 25,46) commence en 83D9 (en fait en x3D9 car ces ROMs sont relogeables. Le 8xxx indique que le module est insere dans le port 1) et desassemblons a cette addresse:
Code : Tout sélectionner
.NAME "X<>F"
83D5/0 B.G..... 086 #086 ; "F"
83D6/0 ..G..... 03E #03E ; ">"
83D7/0 ..G..... 03C #03C ; "<"
83D8/0 .TG..... 018 #018 ; "X"
[X<>F] ; XROM 25,46 'XFUNCS'
83D9/0 ..G..E.. 379,03C,197 NCXQREL 8197
83DC/0 ........ 379,03C,3EE NCXQREL 83EE
83DF/0 ........ 3B8 C=REGN 14 ; 'd'
83E0/0 ........ 37C RCR 12
83E1/0 ........ 0AA A<>C WPT
En 83D9... se trouvent les instructions MCODE de X<>F. De 83D5 a 83D8 (soit pointeur - 1), se trouve le nom de l'instruction a l'envers et code directement pour le LCD, soit F><X, qui remis a l'endroit donnera X<>F !
Il y a aussi des vecteurs (hooks) qui permettent au Main-Frame de realiser des taches en fonction d'evenements. Le CPU NUT n'a pas d'interruption, le Main-Frame "polle" donc en permanence ces differents vecteurs ou "s'endormira" au bout d'un certain temps. La table des vecteurs est situee de xFF4 a xFFA, comme suit (ce sont ceux du CCD, car le XFunctions n'a pas de vecteurs particuliers specifies) :
Code : Tout sélectionner
BFF4/0 ........ 000 NOP ; Pause Loop
BFF5/0 ........ 000 NOP ; Main Running Loop
BFF6/0 ........ 000 NOP ; Deep Sleep Wake Up With No Key Down
BFF7/0 ........ 000 NOP ; Power Off
BFF8/0 ........ 3C3 JNC BFF0 ; I/O Service
BFF9/0 ........ 2D3 JNC BFD3 ; Deep Sleep Wake Up
BFFA/0 ........ 000 NOP ; Cold Start
Enfin, pour finir, on trouve un identifiant de la ROM, sur 4 caracteres et a l'envers:
Code : Tout sélectionner
8FFB/0 ........ 003 ROMID 'AP-1C'
8FFC/0 ........ 031
8FFD/0 ........ 010
8FFE/0 ........ 001
Le AP-1C sera affiche par des instructions comme ROMCHKX. C'est ce marqueur qui est demande avec l'option
-R rr-rr.
Enfin, le dernier mot de la page (xFFF) contient la checksum. Il s'agit d'une somme de controle permettant de verifier que le contenu de la page n'est pas corrompu (ROMCHKX)