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èsEt 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




