Avec l'option -remu de la ligne de commande, RASM est capable de compiler dans de la RAM et simultanément dans des ROM (rom basse et jusqu'à 256 roms hautes). Utilisé avec un émulateur qui le supporte, les points d'arrêt seront positionnés avec précision dans la mémoire en discriminant RAM et ROM. De la même façon, les labels auront un positionnement précis, c'en est fini des confusions d'espaces mémoires avec les chunks classiques.
3 nouveaux chunks ont été créés pour l'occasion: LOWR, RMxx et REMU
chunk LOWR
Il représente les données de la ROM basse pour un total de 16384 octets. Les données peuvent être compressées en RLE comme il est possible de le faire pour la mémoire des snapshots v3. Si la compression RLE ne peut être faite, les données seront alors enregistrées en brut sans compression.
chunk RMxx (avec xx représentant un nombre hexadécimal de #00 à #FF)
Il peut y avoir jusqu'à 256 chunks de type RM, le xx indiquant dans quel slot ROM mettre les données. De façon analogue au chunk LOWR et MEM, on peut utiliser la compression RLE. Chaque chunk contenant 16384 octets de données.
chunk REMU
Le chunk REMU contient les données de debug à utiliser par l'émulateur. Ce chunk est en pur ASCII pour faciliter les traitements et les ajouts! Il contient une liste de tags+données séparés par un point-virgule. Ce chunk étant sujet à évolution, il convient de gérer les champs individuellement séparés par un point-virgule. Si un tag n'est pas reconnu, on passe au suivant.
tag rombrk
Le tag rombrk indique un point d'arrêt en ROM, il a deux paramètres: L'adresse logique et le numéro de ROM (0 à 255 pour une ROM haute et 256 pour la ROM basse)
Exemple de point d'arrêt au démarrage de la machine:
rombrk 0 256;
tag brk
Le tag brk indique un point d'arrêt en RAM, il a deux paramètres: L'adresse logique et la bank mémoire concernée. Le point d'arrêt ne sera pris en compte que si le mapping utilisé permet de faire correspondre l'adresse logique!
tag romlabel et label
Les tag romlabel et label indiquent la présence d'un label dans la RAM ou la ROM à la bank indiquée. Ces tags sont similaires aux tags de point d'arrêt dans leurs déclarations respectives
tag romcomz et comz
Les tag romcomz et comz indiquent la présence d'un commentaire dans la RAM ou la ROM à la bank indiquée. Ces tags sont similaires aux tags de point d'arrêt dans leurs déclarations respectives
tag alias
Le tag alias permet d'exporter les valeurs des alias, charge à l'émulateur d'interpréter quand indiquer l'alias à la place d'une valeur. Ce tag n'a qu'un seul paramètre
Évolution des supers snapshots pour l'émulateur ACE-DL
Ce programme déclare des labels situés aux mêmes adresses logiques #0000 et #C000 et va ensuite connecter, exécuter puis déconnecter les ROM et refaire un saut identique à la même adresse dans la RAM.
Grâce aux informations étendues, l'émulateur pourra déterminer quel label afficher dans la trace sans s'emmêler les pinceaux.
buildsna
;******* ram code definition ********
bankset 0
org 0
ram0000
jp backfromram0
org #4000
run #4000
start4000 brk
selectupper ld bc,#DF09 : out (c),c
.connectupper ld bc,#7F80+%0100 : out (c),c
gotoupper jp #C000
backfromupper nop
disconnectupper ld bc,#7F80+%1100 : out (c),c
gotoecran jp #C000
backfromecran nop
connectlower ld bc,#7F80+%1000 : out (c),c
gotolower jp 0
backfromlower nop
disablerom ld bc,#7F80+%1100 : out (c),c
gotoram0 jp 0
backfromram0 nop
selectupper10 ld bc,#DF0A : out (c),c
.connectupper ld bc,#7F80+%0100 : out (c),c
copyto8000 ld hl,#C000 : ld de,#8000 : ld bc,16 : ldir
goto8000 jp #8000
backfromcopy8000 nop
testend jr testend ; infinite loop
org #C000
ecranC000 jp backfromecran
;******* rom code definition ********
rombank lower
org 0
lower0000 jp backfromlower
rombank 9
org #C000 ; do not forget to specify the logical address before your ROM code
upperC000 jp backfromupper
rombank 10
org #8000
label local
romcopy8000 jp backfromcopy8000
label global