HPHP48-E,*ps**************************************************************************** PRINCIPE DU RPL **************************************************************************** par Laurent JOUANNEAU alias J Y L O G mis à jour le 16 septembre 1993 FICHIER presque complet. pour plus de precision, lisez le fichier JYLOG.TXT et les fichiers HPROM FILES en fait, on parle de langage rpl. mais ce n'est en fait indirectement que de l'assembleur. un programme rpl contient des adresses qui indiquent au microprocesseur où est-ce que le code à executer est. il y a d'abord le pointeur PC (Program counter) qui contient une adresse qui indique où est-ce qu'il y a le code à executer. donc le microprocesseur execute le code asm qui se trouve à l'adresse contenu dans PC. Le rpl est constitué en fait d'une succession d'adresse de programme asm. D0, dans son utilisation normal pointe sur le prochain objet (un external ou autre). cet objet a un prologue (pour tout les objets rpl) ou est juste une adresse (soit une adresse de point d'entrée de la rom = external, soit l'adresse d'un objet rpl de la rom) on notera la valeur de ce prologue ou de cet external @rpl à la fin de chaque prog asm, on a toujours les instructions A=DAT0 A D0=D0+ 5 PC=(A) A=DAT0 A signifit que l'on met dans le registre A ce qu'il y a à l'endroit pointé par D0. A contient alors @rpl puis on fait avancer D0 de 5 quartets. ensuite PC=(A) : cette instruction dit: mettre PC (donc executer le code situe à) l'adresse qui est inscrite à l'adresse @rpl. en plus clair: on lit ce qu'il y a à l'adresse @rpl: ce qu'il y a, c'est a dire une adresse (@asm). puis on on fait pointe PC à l'adresse @asm. 3 cas alors se presente: 1)@rpl est l'adresse d'un external (point d'entrée). alors @asm est l'adresse indiqué en @rpl. en general, @asm=@rpl+5 dans le rpl on a donc par exemple, avec objetn qui est l'adresse d'un external D9D20 objet1 objet2 ... objetn ... dernierobjet B2130 prenons objetn= 44230 ---> @rpl= 03244 (external en 03244h = routine interne de drop) en rom cela donne: | 94230 | code asm ... ^ ^ | | @rpl @asm =03244 =03249 on aura alors A=03244, et PC pointant en 03249 cependant, il arrive que @asm soit different de @rpl+5. et on a un exemple sous la main: à chaque prologue d'objets il y a 028FC par exemple cela donne en ROM pour le prologue d'un reel: | CF820 | ... ^ | @rpl=02933 et @asm=028FC 2)@rpl est le prologue d'un objet: alors, @asm=028FC donc PC va en 028FC et le code situe à cette endroit est execute. la routine situe en 028FC indique à PC d'aller à l'adresse @1 qui est indiqué 10 quartets avant l'adresse prologue. à cette adresse @1, il y a un programme qui fait avancer D0 d'un certain nombre de quartets suivant la taille de l'objet contenu dans le rpl. ainsi, si c'est un reel, D0 avance de 21-5 quartets, et se retrouve au debut de l'objet qui suit ce reel dans le rpl. je dis 21-5 car D0 est toujours en avance de 5 quartets car il y a toujours en fin de prog asm, pour evaluer l'objet qui suit, D0=D0+ 5 (voir plus haut). Pourquoi ? parce que cela evite à chaque fois, si l'objet en question est un external ou une adresse d'objet en ROM, que le programme de cet external ou celui du prologue contienent cette instruction D0=D0+ 5 (5 car une adresse est code sur 5 quartets) tout les programmes de sauts d'objets, programmes des prologues etc sont listés dans le fichier ROM48_00.TXT 3) @rpl represente l'adresse d'un objet rpl situe en rom (un autre programme rpl ou autre) et alors voici quelque chose de tres curieux et qui montre l'ingeniosite de ceux qui ont creer le rpl: @asm= le prologue de l'objet qui est situe à l'adresse @rpl, et donc PC va à cette adresse de prologue et le code situe à cet endroit est execute! mais on a dit qu'à chaque adresse prologue, il y avait 028FC ! eh bien oui, 028FC indique l'adresse d'une routine asm, mais est en meme temps du code asm !!! en reprenant l'exemple du reel precedant. en admettant qu'il est situe en rom, alors PC ne point plus en 028FC mais en 02933 ! et voici donc le code asm (que l'on appelera codepro) qu'il y a à chaque adresse prologue: code asm / mnemonique CF D=D- 1 820 HST&= #F d'apres VOYAGER ou HS=0 1 d'apres ASMFLASH (?? instruction rarement connu !) 487 GOC 0298F cette adresse differe suivant le prologue 1C4 D1=D1- 5 141 DAT1=A A 142 A=DAT0 A 164 D0=D0+ 5 808C PC=(A) ce code signifie: on met l'objet de la rom dans la pile et on continue le rpl. codepro n'est cependant pas situe à toutes les adresses. en effet, si à l'adresse @rpl, se trouve un programme rpl, un objet code par exemple, il faut que celui ci soit evalué, et non depose sur la pile. Ainsi, pour ces objets la (programme rpl, code, xlib name, nom globaux et locaux ), le code situe apres HS=0 1 est different.