Super snapshot pour Amstrad CPC

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
Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License