RALP : Langage machine en REM pour Obscure Systems
Introduction
Reprise du principe Ă©voquĂ© prĂ©cĂ©dement concernant RALP, un article de Micro SystĂšmes expliquant comment positionner un programme en langage machine dans nâimporte quelle ligne REM.
On tente de comprendre et de le faire sur nos Obscure Systems.
Rappel
Suite Ă Ă©tude du BASIC du PHC-25, il sâavĂšre que nous nâavons jamais rĂ©ussi Ă faire fonctionner la fonction USR. Donc la mĂ©thode permet de surmonter le problĂšme.
Lâencodage dâun programme full LM est possible sur PHC-25.
On utilise la premiĂšre ligne comme lanceur.
Le programme LM dĂ©bute Ă lâadresse aprĂšs la fin de la ligne 1.
Le point dâentrĂ©e pouvant Ă©ventuelement ĂȘtre nâimporte oĂč.
Exemple :
10 EXEC &Hnnnn
....
Les principes sont aussi appliqués sur le Canon X-07.
Les travaux du Club C7 utilise cela abondament.
Autres possibilitĂ© selon les systĂšmes, câest un chargement en plage mĂ©moire vidĂ©o, puis dĂ©compactage.
à compléter.
Utilité
- Pour tout programme ayant besoin de LM pour accélérer le code.
- Pour calcul en LM avec ou sans paramĂštre
- Scroll écran pour jeu en BASIC
- etc.
Exemple Ă Ă©tudier sur le tirage alĂ©atoire dâun nombre entier entre 0 et 255. Voir Club C7.
Mise en pratique du LM
Technique RESTORE, READ, DATA et POKE
Classique avec les fonctions RESTORE, READ, DATA et POKE
- RESTORE n : pointeur vers la ligne DATA
- DATA nnnn : contient les codes hexa (nn) du LM (paquet de 16)
- READ : lecture DATA
- POKE : place lâoctet Ă lâendroit spĂ©cifiĂ©
ConcatĂ©ner les octets dans une ligne DATA peut faire gagner autour de 30% dâespace de code.
DATA 112233445566778899AABBCCDDEEFF
vs
DATA 11,22,33,44,55,66,77,88,99,AA,BB,CC,DD,EE,FF
14 octets de moins par ligne DATA.
On ne sâattarde pas câest une technique Ă©prouvĂ©e.
Un test cependant Ă faire câest le RESTORE N, N Ă©tant une variable contenant le numĂ©ro de ligne.
On ne reviendra pas sur cette méthode.
Technique de la ligne REM
Classique sur ce type de machine (issue notablement du ZX81).
On se reserve la premiĂšre ligne du code Basic pour y loger le LM.
Nécessite un programme chargeur.
Ou équivalent avec les techniques modernes. Hexa edition direct par exemple pour du code court.
0 REM 0123456789
1 EXEC &HC003
Les caractĂšres aprĂšs REM doivent ĂȘtre en nombre nĂ©cessaire (longueur du code LM).
Exemple : &hc003 est lâadresse du 1er octet du code LM soit le â0â (PHC-25).
Technique inverse.
0 EXEC &Hnnnn
1 REM 0123456789
La ligne 1 est optionnel. Le LM peut ĂȘtre forcĂ© Ă lâadresse.
&Hnnnn : point dâentrĂ©e du LM.
Prévoir le ORG &hnnnn lors de la compilation.
Câest le principe utilisĂ© par les RPUFOS, issu du programmeur japonais ????.
Pas encore vue sur Canon X-07. Câest donc Ă tester.
Sous programme en REM
Pour une sous routine avec paramĂštres.
0 REM 0123456789
1 REM LM sous-routine
...
100 POKE &HC003,0 : POKE &HC004,255 : ...
110 EXEC &Hcnnn
...
La ligne 0 contient des Octets de paramĂštres.
&Hcnnn : Point dâentrĂ©e de la sous routine ASM.
Par exemple pour faire du calcul, scroll écran.
Plusieurs paramĂštres sont possibles, dĂ©pand du nombre dâoctets rĂ©servĂ©s.
LD (A), &hC003
...
On poke en &hc003.
En retour.
LD &hC003,A
...
On fait un PEEK du &hc003 pour obtenir le résultat, entier [0-255].
Technique dâĂ©crasement DATA Ă expĂ©rimenter
Plus complexe.
DĂ©terminer la position en mĂ©moire dâune ligne REM.
DerriĂšre des DATA.
Avec le READ, faire un POKE Ă partir de la ligne REM.
Coder par POKE la fin de programme avant ?
MĂȘme si celĂ semble peu pertinant.
NB : Ă cause dâun Ă©ventuel CSAVE ?
Prévoir un flag P pour éviter le GOSUB 1000.
La ligne 60000 doit contenir pour elle mĂȘme au moins 16 octets.
Octets qui viennent de la premiÚre ligne DATA (écrasement).
Ensuite câest bon.
Le LM vient donc se loger Ă la place des lignes DATA.
...
1000 RESTORE 60010
1010 ...
...
1100 READ A$ ...
1110 POKE &hnnn, valeur
...
60000 REM XXXXXXXXXXXXXXXX
60010 DATA
NDR : Pas encore testé, expérimentations à faire.
Si ne fonctionne pas, genre le PC ne trouve pas la DATA suivante car on a écraser les lignes.
Mode inverse.
...
1000 RESTORE 60010
1010 ...
...
1100 READ A$ ...
1110 POKE &hnnn, valeur
...
60900 DATA ....
61000 REM XXXXXXXXXXXXXXXX
On part Ă lâenvers.
Compliqué car un RESTORE N; avec N variable ne fonctionne pas forcément (faire les tests).
Sauf si hack peut-ĂȘtre - POKE du numĂ©ro de ligne aprĂšs le restore.
Mais il faut lâadresse de la ligne.
La suite au prochain épisode⊠Chaque systÚme ayant son modus operandi.
