Ein Freezepoint unterbricht das laufende Programm und springt zum DreaMon.
Alle Register der I/O Chips werden dabei gerettet, soda� in das Programm zur�ckgekehrt werden kann, als w�re nichts geschehen.
Es gibt zwei Typen der Freezepoints, die sich in der Sprungart zum DreaMon unterscheiden:
Typ | Ben�tigt | L�nge | Bedingung |
---|---|---|---|
J (JSR) | die Vektoren bei $d3xx | 3 | I/O mu� aktiv sein und der Freezepoint mu� in Bank 0 liegen |
L (JSL) | nichts | 4 | keine |
Der Speicherinhalt beim Freezepoint wird gerettet und durch dem Sprungbefehl ersetzt. Also passt auf, da� ihr nicht �ber selbstmodifizierenden
Code stolpert. (Eine L�sung daf�r findet ihr weiter unten)
Nachdem der Freezepoint ausgef�hrt wurde, wird der urspr�ngliche Speicherinhalt wieder zur�ckgeschrieben. Im DreaMon sieht man also
immer den urspr�nglichen Speicher. Der Disassemble Befehl zeigt einen Freezepoint mit einem kleinen Kommentar hinter dem Opcode an.
Wird ein Freezepoint erreicht, k�nnen 4 Dinge geschehen:
Typ | Parameter | Aktion |
---|---|---|
N (Normal) | keine | Springt einfach zum DreaMon |
C (Count) | n (eine Zahl von 0 bis $ff) | Freezed beim (n+1)-ten mal (also ist n=0 wie 'normal') |
A (Activate) | n (eine Zahl von 0 bis $ff) | Aktiviert die Bits aus n, weiter passiert nichts |
R (Remote) | n (eine Zahl von 0 bis $ff) | Freezed wenn mindestens ein Bit aus n aktiviert ist |
Das standard Zahlensystem f�r alle Parameter ist Hex.
Activate und Remote Freezepoints sind nur in Kombination n�tzlich. Sie werden ben�tigt, wenn timingkritische Routinen oder selbstmodifizierender Code gefreezed werden soll und die anderen Typen nicht funktionieren.
Remote Freezepoints werden nicht in den Speicher geschrieben, wenn sie gesetzt wurden. Sie werden nur vorgemerkt, bis ein Activate Freezepoint
erreicht wird. Nun wird der Remote Freezepoint in den Speicher geschrieben und kann ausgef�hrt werden. Der Parameter f�r beide Typen ist
eine Bit Maske, die steuert, welcher Freezepoint aktiviert wird. Bei einem Activate mit Parameter $15 werden alle Remote Freezepoints gesetzt, die
mindestens die Bits 0, 2 oder 4 gesetzt haben, z.B. einer mit $32.
Freezepoints k�nnen auf zwei verschiedene Arten gesetzt werden:
Beim Assemblieren oder editieren von Disassembler Output
Dazu mu� der Opcode an der zu Freezenden Stelle einfach durch zJumpTyp Aktion und einem Parameter f�r Count, Activate and Remote ersetzt werden.
Beispiel:
An dieser Stelle soll gefreezed werden...>00c018 ad 20 d0 lda $d020
Nun gebt ihr ein...
>00c018 ad 20 d0 zjn;$d020
...um einen 'Normal' 'JSR' Typ zu setzen (Das Semikolon nach 'zjn' zeigt das Zeilenende an. DreaMon ignoriert beim Assemblieren alles dahinter)>00c018 ad 20 d0 zlc12;$d020
...um einen 'Count' 'JSL' Typ zu setzen, der erst beim 18. mal (=$12) Freezed.
Mit dem 'z' Befehl.
Bitte schaut dazu im Abschnitt Freezepoints Verwalten nach.