Una funzionalità di Power64 è unMonitor/Debugger che funziona sul Macintosh tramite emulazione. Quindi è possibile esaminare e modificare i Contenuti del C64 senza usare qualsiasi RAM C64. Il monitor è completamente invisibile per l'esecuzione del programma.
Per iniziare il monitor/debugger segli dal menu File/Monitor/Debugger (Mela-G). Una finestra apparirà dove puoi inserire comandi (vedi lista di comandi supportati sotto) e vedi risultati.
I comandi pre-impostati del monitor/debuggers funzioneranno sul C64, ma usa il comando 'z' (vedi sotto) per esaminare 1 dei lettori disco.
Per eseguire un comando digitalo in 1 linea e premi <Invio>. Nota che puoi 'reciclare' vecchi comandi muovendo il cursore su un vecchio comando e premendo <Invio> ancora o usando Taglia e Incolla. C'è anche una storia, che può essere usata con Ctrl-Su/Giù.
Per modificare i contenuti della RAM è meglio prima usare un comando che visualizza i vecchi contenuti in una forma conveniente (solitamente il comando 'm') e poi modifica l' uscita. Premendo <Invio> mentre il cursore è sulla linea modificata, la memoria può essere modificata.
L'uscita di qualsiasi comando può essere controllata usando Spazio e Return. Mentre si preme Spazio genera solo una singola linea di uscita, premendo Return causa l'uscita di essere generata fino a che un altro tasto è premuto. Escape (Esc) annulla qualsiasi comando.
I comandi 'm', 'k', 'n', 'b' e 'y' possono anche essere controllati usando i tasti cursore. Il cursore giù produce (come lo Spazio) la Prossima linea di uscita. Cursore su da alla prima linea la linea corrente e Cursore sinistra/destra generano la linea corrente +/- 1 Byte.
Molti comandi si aspettano 1 o 2 parametri numerici che possono essere dati come espressioni tipo C. I valori possono essere dati sia in esadecimali (senza prefisso o con prefisso '$' o '0x'), decimali (prefisso '#') o binari (prefisso '%') costanti o usando i registri CPU ('rA', 'rX', 'rY', 'PC', 'SP' (includendo l'offset $0100)) o i contenuti della RAM ('RAM[xxxx]' o 'RAMb[xxxx]' per 8 bit accesso o 'RAMw[xxxx]' per 16 bit). MEM[xxxx] funziona come la RAM[xxxx] ma impiega la corrente configurazione memoria nell'account. Quindi MEM[xxxx] a volte accederà alla RAM, a volte alla ROM a volte ai Chips I/O. Invece di MEM[xxxx] è anche possibile usare PEEK(yyyy), dove, come standard BASIC, l'indirizzo yyyy è dato in notazione decimale. I nomi di registro aritmetici ('rA', 'rX', 'rY') e riferimenti RAM possono avere il suffisso's' o 'u' (e.g. 'rAs','rXu', RAMsb[xxxx]) per denotare una valore segnato o non (pre-impostato: non segnato).
Questi valori possono essere combinati con operatori '+', '-', '*', '/', '<<', '>>', '&', '|', '^', '~', '-'. Tutte le operazioni sono eseguite usando integrali da 32 bit segnati . Nota che (differente da C) gli operatori shift hanno maggiore precedenza di '+', '-', '*' e '/' (Credo che la semantica C sia sfortunata in questo punto). Naturalmente puoi usare parentesi per rafforzare uno specifico ordine di valutazione.
Il monitor supporta i seguente comandi (parametri in parentesi sono opzionali):
a StartAddr - Assembla
Assembla Codice partendo daStartAddr. Tutte le costanti e indirizzi nel codice devono essere dati in esadecimale. E' possibile usare i comuni "illegal opcodes". Una linea linea vuota finisce l'assemblamento.
b StartAddr (EndAddr) - Scarico Memoria Binaria
Visualizza la memoria Contenuti da StartAddr to EndAddr in notazione binaria. Impostazione bits sono denotati di '*', e puliti bits di '.'. Questo rende semplice vedere al bitmap per un set carattere. Cambia i contenuti della memoria di sovrascrittura dati premendo <Invio>.
c StartAddr EndAddr CompareAddr - Compara Memoria
Compara la memoria Contenuti da StartAddr to EndAddr con memoria Contenuti del campo partendo da CompareAddr. Campi equi/non-equi di memoria sono riportati. Nota che campi uguali di meno di 3 bytes che sono circondati di campi non-equi sono considerati artefati, e sono soppressi in ordine di evitare confusione.
d StartAddr (EndAddr) - Disassembla
Disassembla la memoria Contenuti da StartAddr to EndAddr. Cambiamenti ad un programma sono possibili di ovrascrittura in uscita e premendo <Invio>.
f StartAddr EndAddr Bytes - Cerca
Cerca una serie di bytes in un campo di memoria. I bytes devono essere dati in esadecimale. E' possibile usare '?' come un carattere Jolly. Peraltro è possibile la ricerca di stringhe per carattere. Quando si cerca per stringhe non c'è distinzione di testo con Maiuscole/minuscole, ASCII/schermo codice o normale/reverse.
Esempio: f a000 a080 43 42 ?d f e000 f000 "Commodore"
fa StartAddr EndAddr SearchAddr - Cerca indirizzo
Cerca tutti riferimenti all'indirizzo assoluto SearchAddr nel programma entro il campo di memoria StartAddr fino a EndAddr. Ancora è possibile usare '?' come un carattere Jolly
Esempio: fa e000 ffff d0?? - trova tutti gli accessi del VIC nel Kernal ROM.
fp StartAddr EndAddr Value - Cerca Poke
Cerca tutte le locazioni nel campo di memoria che contiengono un valore specifico. Usando + anziché StartAddr EndAddr manda l' fp a cercare solo nei risultati della precedente ricerca.
Esempio: Considera che dal gioco Serpentine vuoi saperne il numero di vite rimaste. Dopo che hai fatto partire il gioco hai 5 vite. Così fp 0800 2A00 5 cercherà nei luoghi che conterranno il valore 5. Ci sono parecchie locazioni (troppe per ricollocarle in mano). Ora gioca finché perdi (hai adesso 4 vite rimaste) ora usa fp + 4 per cercare tytte quelle locazioni che contengano le 4 vite ed usate per contenerne 5. Non ne esce alcuna - Male!. Seconda prova: Partiamo con 5 vite e poi ne abbiamo una che attualmente sta andando e 4 ne rimangono. Allora rilanciamo il gioco ed usiamo fp 0800 2a00 4 per cercare i luoghi che contengono 4. Dopo aver perso 1 vita, usiamo fp + 3 per cercare ancora. Notare: C'è solo 1 coincidenza ($0924)! A volte ci possono essere diverse coincidenze, ma solitamente ce ne sono poche, di modo che possono essere ricatalogate sulle dita. Ora sappiamo dove Serpentine immagazzini il numero di vite rimanenti. Possiamo ora solo usare m 0924 per vedere ed aggiornare questo valore od usare fa 0800 2a00 0924 per cercare i luoghi dove Serpentine accede od aggiorna questo valore (e poi applica le appropriate correzioni).
ota che fp è un comando avanzato per utenti esperti. Ci sono molti modi per un gioco ad immagazzinare un valore. Il problema 'Off-by-One' è stato mostrato sopra.E' anche possibile che un gioco non conti il numero di vite rimaste ma il numero di quelle già usate od in uso. Altre quantità come i punteggi a volte sono immagazzinati con un fattore (es: se tutti i punti sono multipli di 100, allora non c'è motivo di immagazzinamento dei 2 zero, sicché un gioco può o non può dividere il punteggio per 100 prima di immagazzinarlo). Il comando fp cerca per valori dati in formato binario (little- and big-endian), in formato BCD (little- and big-endian), in formato ASCII e FLOTA. Pazienza, prove ripetute ed intuizioni sono la chiave di successo quando si usa il comando fp.
g (RegPC) - Vai
Riprende l'esecuzione del programma C64 all'indirizzo RegPC (pre-impostato al corrente PC). Questo non distrugge la finestra del monitor.
h - Help
Visualizza un breve sommario dei comandi del monitor.
l (LoadAddr) - Carica Dati
Carica dati dal disco fisso Mac (*.C64, *.CBM, *.PRG o *.P00) nella RAM C64. Solitamente caricherai dati all'indirizzo immagazzinato nel file, ma è possibile sovrascrivere questo producendo un nuovo LoadAddr. Il file è selezionato usando un selettore file Mac.
lr LoadAddr - Load Raw Data
Carica dati dal disco fisso Mac nella RAM C64. Questo carica le entrate(!) Contenuti del file nella RAM, includendo l' header dati di un file *.P00 e i 2 bytes di testa caricano l'indirizzo. Quindi è necessario fornire un nuovo caricamento di indirizzo come un parametro lr. Il file è selezionato usando un selettore file Mac.
k StartAddr (EndAddr) - PETASCII Memory Dump
Visualizza la memoria Contenuti da StartAddr to EndAddr come caratteri-PETASCII. Cambia i contenuti del memoria di sovrascrittura dati premendo <Invio>.
m StartAddr (EndAddr) - HEX/PETASCII Memory Dump
Visualizza la memoria Contenuti da StartAddr to EndAddr come valori-hex e come caratteri PETASCII. Cambia i contenuti del memoria di sovrascrittura dei valori-esadecimali premendo <Invio>.
n StartAddr (EndAddr) - Scarico Codice Schermo
Visualizza la memoria Contenuti da StartAddr to EndAddr come codici di schermo C64. Cambia i contenuti del memoria di sovrascrittura di uscita premendo <Invio>.
o StartAddr EndAddr Dati - Occupa Memoria
Riempie il campo di memoria da StartAddr to EndAddr con valore Dati.
p ("FileName") - Pulisci Log File
Chiude il corrente file registro, e ne apre uno nuovo (pre-impostato: "C64 Monitor - dd.mm.yyyy" nella cartella del file stampa). L'uscita di qualsiasi comando può essere mandata al log file.
r - Mostra Registri CPU
Visualizza i contenuti dei registri CPU. I cambi sono possibili di sovrascrittura in uscita premendo <Invio>.
s StartAddr EndAddr - Salva Dati
Salva il campo di memoria StartAddr to EndAddr al disco fisso. Il file è selezionato usando un selettore file Mac. Dipende sull'estensione dei files verrà scritto in formato *.C64, o *.P00 . Se vuoi salvare lo stesso campo che era precedentemente caricato non è necessario specificare lo StartAddr e EndAddr.
sr StartAddr EndAddr - Salva linea Dati
Salva il campo di memoria da StartAddr a EndAddr al disco fisso. Solo i dati dellaa memoria sono salvati, nessun indirizzo o altra informazione sull'header è immagazzinato nel file. Il file è selezionato usando un selettore file Mac.
t (RegPC) - Traccia Programma
Il programma all'indirizzo RegPC (pre-impostato al corrente PC) è eseguito 1 rendiconto a tempo. Dopo ogni comando lo stato della CPU è visualizzato e Power64 attende per un tasto. Premi Spazio per eseguire un'altra istruzione C64. Premi Return per tracciare rapidamente - Tutta l'informazione è visualizzata, ma Power64 non attende per un tasto. Premi 'J' rapidamente eseguire il promemoria della corrente sottoroutine. Premi 'S' per eseguire la linea corrente (un piano direndiconto o un completa chiamata di sottoincarico). Premi 'G' per abortire traccia modalità e scambia indietro la finestra C64, eseguendo codice a piena velocità.
tb (Addr (Cnt)) (!) - Imposta/Pulisci/Mostra Punti di Interruzione
Senza parametri tb visualizza un lista di tutti i Punti di Interruzione correntemente impostati. Quando solo un Addr,tb è dato, esso imposta un Punto di Interruzione all'indirizzo specificato. Ogni volta il C64 raggiunge questo indirizzo, il programma esecuzione verrà portato in modalità Traccia. Se, in aggiunta al Addr,tb riceve anche un Cnt entrerà solo in modalità Traccia quando il programma esecuzione raggiunge Addr per il Cnt'th. A quel punto il Punto di Interruzione sarà automaticamente cancellato. Per cancellare manualmente un singolo Punto di Interruzione, usa tb Addr!. Usa tb ! per rimuovere tutti Punti di Interruzione in una volta.
La speciale parole chiave IRQ, NMI e RESET può essere usata invece di Addr per creare un Punto di Interruzione qualora ci sia un'eccezione.
Nota: I Punti di Interruzione possono fallire se il programma usa un codice auto modificante.
tl (Scanline (RegPC)) - Traccia La Linea di Scansione
Esegui il programma C64 all'indirizzo RegPC (pre-impostato: corrente PC) fino a che il VIC ha raggiunto uno specifico Scanline (pre-impostato: stesso come ultimo comando tl). Poi cambia in modalità Traccia ed esegue il rendiconto passo-passo. Questo è utile quando si testa un codice Raster-IRQ.
tq (Cnt (RegPC)) - Traccia Veloce
Esegue rendiconti Cnt del programma C64 all' indirizzo RegPC (pre-impostato al corrente PC) rapidamente. Poi cambia in modalità Traccia. Questo aiuta a finire lunghi circoli rapidamente senza guardare a ogni singola interazione.
v vic - Mostra lo stato del Video IC
Visualizza lo stato del Video IC in uno stile semplice da leggere.
v sid - Mostra lo stato del Suono ID
Visualizza lo stato del Syono ID in uno stile semplice da leggere.
v cia1 | cia2 - Mostra lo stato del CIA 1 o CIA2
Visualizza lo stato del CIA1 o CIA2 in uno stile semplice da leggere (includendo dati interni da registri ombra).
v ram - Mostra la configurazione memoria
Visualizza la configurazione memoria in uno stile semplice da leggere.
w StartAddr EndAddr DestAddr - Scrivi (Copia) Memoria
Copia i contenuti del memoria campo StartAddr to EndAddr in il memoria campo partendo da DestAddr. Questo funziona correttamente anche se il Fonte: e destinazione campi sovrapposti (o sono identici quando si copiano le ROM nella RAM).
x - Chiudi Monitor
Chiude il monitor finestra.
y StartAddr (EndAddr) - Scarico Sprite
Visualizza la memoria Contenuti da StartAddr to EndAddr in notazione binaria con 3 bytes in un linea. I set di bits sono denotati di '*', bits puliti di '.'. Questo rende semplice per esaminare sprite bitmaps. Cambia i contenuti della memoria di sovrascrittura dati premendo <Invio>.
z DeviceNumber - Seleziona un Dispositivo per Testare
Seleziona che dispositivo deve essere esaminato dal monitor. Seleziona il DeviceNumber 8-11 e scegli il corrispondente lettore disco. Tutti altri numeri li seleziona il C64.
$ HexExpr - Valuta un espressione Esadecimale
# DecimalExpr - Valuta un espressione Decimale
% BinaryExpr - Valuta un espressione Binaria
? Espressione - Calcola Espressione
Valuta un espressione e stampa il suo valore in esadecimale e decimale.
POKE DecimalAddr, DecimalExpr - Cambia Memoria
Cambia il valore di locazione di 1 memoria. Nota che in contrasto ad altri comandi debugger, l'indirizzo e il valore sono dati in notazione decimale, solo come in C64 BASIC. Questo lo rende più semplice per inserire cheat-POKEs in un programma corrente.
SYS DecimalAddr - Inizio Programma
Come il comando Go, ma l'indirizzo è dato in notazione <Return> alla BASIC
L'uscita di tutti questi comandi può essere mandata ad un file registro (in aggiunta allo schermo) di capitalizzare il comando nome. Il file registro è situato nella cartella di stampa (vedei 5.15 Stampante ) ed è chiamato "C64 Monitor - dd.mm.yyyy" se pre-impostato. Vedi il comando 'p' sopra sui modi di rinominare il file registro.