Programmes relogeables

Ces fonctionnalités sont encore en développement et sujettes à modifications/améliorations. Si ce sujet vous intéresse, faites le moi savoir, n'étant pas du tout utilisateur de la chose, je ne ferai évoluer que sur vos suggestions ou requêtes!

RELOCATION, ENDRELOCATION

Déclarer le début d'une zone de code relogeable. RASM va assembler deux fois le code en interne, en décalant l'assemblage de #102 afin de détecter les changements dus aux poids forts et ceux dus aux poids faibles. Il y a plusieurs contraintes inhérentes à cette méthode:
- vous ne devez pas changer de module dans la zone de code relogeable
- la zone relogeable se terminera par la perte du module en cours (on peut faire évoluer pour restaurer)
- vous ne devez pas modifier le ORG en cours (pas trop de sens en même temps). Si vous avez plusieurs fonctions, etc. vous pouvez toujours faire plusieurs sections relogeables
- si vous utilisez des variables ET que vous les modifiez à l'intérieur du code à reloger, vous devez vous assurer qu'elles soient initialisées à l'intérieure de la section à reloger. Dans le cas contraire, les infos en sortie seront à minima erronées.
- vous ne pouvez pas utiliser les sections relogeables à l'intérieur de segments compressés dynamiquement

Exemple d'usage typique:

org #100
relocate
maroutine ld hl,mytable : ld a,hi(mytable2)
call #8000
ld a,lo(mytable2) : add 4 : ld l,a
ld h,hi(mytable2) : ld a,(hl)
ret
mytable defw 300,400,mytable2
mytable2 defw 400,300,2
endrelocate

Produira en sortie un fichier assembleur .rel

relocation0:
.reloc16 defw #0101,#0115
.reloc8h defw #0104,#010E
.reloc8l defw #0109

Le label global définit la section, suivi d'un numéro car le programme source peut contenir plusieurs sections de code relogeables.
Les trois labels de proximité définissent les adresses d'offsets 16 bits à modifier ainsi que les offsets 8 bits correspondant au poids fort ou faible.

Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License