Portions de code compressées

Pour éviter d'assembler un programme, le compresser puis le réimporter, RASM est capable d'assembler et de compresser à la volée, puis reloger au besoin les labels antérieures aux sections compressées. Rasm peut ouvrir un nombre illimités de segments compressés et mélanger les crunchers. Vous pouvez dépasser la limite de 64K d'autant que vous voulez tant que le résultat final revient sous les 64K (ou 16K pour un export de type ROM/Cartouche).

Contrainte : Il n'est pas possible d'imbriquer les segments compressés

LZEXO ; Ouvrir une portion de code compressée avec Exomizer 2.0
LZX7 ; compression avec ZX7
LZX0 ; compression avec ZX0
LZX0B ; compression avec ZX0 backward
LZAPU ; compression avec AP-Ultra
LZSA1 ; compression avec LZSA1
LZSA2 ; compression avec LZSA2
LZ4 ; compression avec LZ4
LZ48 ; compression avec LZ48
LZ49 ; compression avec LZ49

LZCLOSE

Ferme une portion compressée, à utiliser avec n'importe laquelle des balises de compression

Exemples d'utilisation simple

jr plusloin ; ce saut relatif sera relogé
lzx0
incbin 'mydata.bin'
lzclose
plusloin
dec b
jp nz,plusloin ; ce saut absolu sera aussi relogé
ret
; concaténer plusieurs fichiers, les cruncher en ZX0 et enregistrer le résultat
bank
lzx0
incbin 'firstdata.bin'
incbin 'seconddata.bin'
incbin 'thirddata.bin'
lzclose
save 'concat.bin',0,$

Exemple d'utilisation avancé

Création de modules spécifiques à un programme qui doivent tous s'exécuter à partir de la même adresse et dont on veut qu'ils soient compressés en mémoire/ROM pour être décompressés au besoin dans le moteur principal

script_addr=#1000 ; adresse d'exécution de nos scripts

bank
org #C000
script_list
defw script01
defw script02

script01
org script_addr,$
lzx0
defs 256
ret
lzclose
org $

script02
org script_addr,$
lzx0
defs 256
ret
lzclose

org $
level03
jp $            ; le $ ne sera pas relogé, il utilise l'adresse AVANT compression
jp script03  ; les labels sont relogés, l'adresse sera celle après compression

; même effet pour le print immédiat et le print différé, le $ est toujours interprété dès qu'il est rencontré
print '$=',$,'script03=',script03 ; avant
delayed_print '$=',$,'script03=',script03 ; après

Et pour mettre en place un des scripts dans le programme principal:

; C=script to deploy
ld hl,script_list
ld b,0
add hl,bc : add hl,bc
ld a,(hl) : inc hl : ld h,(hl) : ld l,a
ld de,script_addr
jp unzx0
Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License