Directives de debug et assertion
PRINT 'chaine',variable
Cette directive permet d'écrire du texte, des variables ou expressions dans la console, au cours de l'assemblage. Les variables doivent exister au moment de l'assemblage pour pouvoir être affichées. Le format de sortie par défaut des valeurs est flottant avec décimales. Il est possible de préfixer les variables par les tags suivants pour changer leur format d'affichage:
- {hex} Afficher la valeur en hexadécimal. Si la valeur vaut moins de #FF alors l'affichage sera forcé sur deux chiffres; Si elle vaut moins de #FFFF alors l'affichage sera forcé sur 4 chiffres. Il n'y aura pas d'extra-zéros avec les valeurs supérieures.
- {hex2}, {hex4], {hex8} Forcer l'affichage hexadécimal sur 2, 4 ou 8 chiffres
- {bin} Afficher la valeur en binaire. Il y a un ajustement automatique sur 8 ou 16 bits de façon analogue au préfixe {hex}
- {bin8}, {bin16}, {bin32} pour forcer l'affichage binaire sur 8, 16 ou 32 bits
- {int} Arrondir et afficher un nombre entier
DELAYED_PRINT
DELAYED_PRINT 'chaine',variable
Cette directive fonctionne de façon analogue à la directive PRINT sauf que l'affichage se fait en fin d'assemblage, quand toutes les variables sont connues. Elle permet donc d'utiliser des variables non encore déclarées. Par contre son usage n'est pas pertinent à l'intérieur d'une boucle car tous les DELAYED_PRINT utiliseraient alors la dernière valeur des variables utilisées.
STOP
STOP
Cette directive arrête l'assemblage et ne produit aucun fichier en sortie.
FAIL 'chaine',variable
FAIL 'chaine',variable
Cette directive est une méta-directive cumulant PRINT et STOP. Un message est donc affiché et l'assemblage arrêté.
NOEXPORT / ENOEXPORT
NOEXPORT
NOEXPORT label1, label2, label3
ENOEXPORT
ENOEXPORT label1, label2, label3
La directive NOEXPORT inhibe l'export de symboles. Par défaut tous les symboles suivants (labels, variables et alias) ne sont plus exportés mais il est possible de spécifier quels symboles ne pas exporter. On peut réactiver l'export des symboles avec ENOEXPORT.
BRK
BRK ; équivalent à DEFB #ED,#FF
Produire un point d'arrêt "en dur" dans le code binaire produit. Ce type de point d'arrêt n'est pas géré par tous les émulateurs.
BREAKPOINT
BREAKPOINT
BREAKPOINT label
Ajoute un point d'arrêt exportable en interne. Le binaire n'est pas changé, il faut exporter ces points d'arrêt pour pouvoir les utiliser. Soit en fichier, soit à l'intérieur d'un snapshot, voir options de la ligne de commande.
Tips: Tout label qui commence par le préfixe BRK génèrera un point d'arrêt soft de façon analogue à la directive BREAKPOINT.
Utilisation étendue de la directive pour exporter des points d'arrêt ACE-DL
BREAKPOINT [options|options|options|…]
Un point d'arrêt ACE par défaut sera initialisé avec le type "Mémoire", l'adresse en cours lors de l'assemblage, le masque d'adresse 0xFFFF, l'accès Lecture/Écriture, la taille de 1 octet, valeur et masque de valeur à zéro, le mode d'exécution STOP, une condition nulle et le nom "imported"
Chaque paramètre peut être (ou non) spécifié de la façon suivante:
- Le type de point d'arrêt avec l'option EXEC, MEM ou IO et de façon plus explicite, TYPE=EXEC, TYPE=MEM, TYPE=IO
- Le mode d'accès avec READ,WRITE,RW,READWRITE et de façon plus explicite, ACCESS=READ, ACCESS=WRITE, ACCESS=RW, ACCESS=READWRITE
- Le mode d'exécution avec STOP,STOPPER,WATCH,WATCHER et de façon plus explicite, RUNMODE=STOP, RUNMODE=STOPPER, RUNMODE=WATCH, RUNMODE=WATCHER
- L'adresse avec ADDR=adresse
- Le masque d'adresse avec MASK=masque
- La taille (pour points d'arrêts mémoire) avec SIZE=taille
- La valeur de déclenchement avec VALUE=valeur
- Le masque de la valeur avec VALMASK=masque
- La condition avec CONDITION='une jolie condition'
- Le nom du point d'arrêt avec NAME='le joli nom'
La création d'une condition doit respecter le format décrit sur la page de l'émulateur ACE-DL => http://www.roudoudou.com/ACE-DL/breakpoints.html
Exemple:
breakpoint MEM,WRITE,STOP,addr=ze_security,size=32,name='isobuffer overflow',condition='HL=0'
NAMEBANK
NAMEBANK numero,'oh la jolie bank!'
Assigne un libellé à une BANK mémoire non temporaire. Soit une ROM en mode cartouche, soit de la RAM en mode Snapshot
NAMEBANK 0,'ROM Init'
NAMEBANK 1,'Serval screen'
NAMEBANK 2,'Rubber code + Rastamix'
produira dans le log de sortie d'une cartouche les libellés entre parenthèse
WriteCPR bank 0 of 14775 bytes start at #0000 (ROM Init)
WriteCPR bank 1 of 14590 bytes start at #0000 (Serval screen)
WriteCPR bank 2 of 10875 bytes start at #0000 (Rubber code + Rastamix)
ou dans un snapshot
Write snapshot v3 file rasmoutput.sna
WriteSNA bank 0,1,2,3 packed ('Engine prototype in RAM')
NAMEROM
NAMEROM numero,'oh la jolie rom!'
Assigne un libellé à une ROM en mode snapshot uniquement
NAMEROM 0,'ROM Init'
produira dans le log de sortie d'une cartouche les libellés entre parenthèse
WriteSNA bank 0,1,2,3 packed
WriteSNA ROM 128 of 2601 bytes start at #0000 ('ROM Init')