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.