Hier nun die optisch korrigierte Version
Hier nun die optisch korrigierte Version
Prima, nun noch eine formale Korrektur zu $29b: der korrekte Offset "$F3" entspricht -13, nicht -3...
Das Zauberwort für die Umrechnung ist "Zweierkomplement". Ist das oberste Bit (hier: Bit 7) gesetzt, ist die Zahl negativ. Dann geht man wie folgt vor:
Zahl $F3 entspricht binär 1111 0011.
Invertieren aller Bits (=EOR #$FF): 0000 1100
Entspricht in Hex: $0C, in Dez = 12
Eins dazuaddieren (+ #$01): $0D bzw. dezimal 13
Und weil es eben ne negative Zahl ist: $F3 = -13
Geht natürlich auch andersherum:
13 = 0000 1101
=> 1111 0010 = $F2
+1 = 1111 0011 = $F3
Voilà... da ist die -13 in Hexadezimal (8 Bit)...
Und wenn ich schon am Beitragen bin:
Die beiden ersten LDA-Befehle sind "immediate" ($A9), da sollte also konsequenterweise auch ein "#" vor den direkt zu ladenden Wert (bei den Befehlen in $270 und $274).
Falls Du noch weitere Kommentare zu den Codezeilen magst:
$270: Low-Byte Basic-Start
$272: als Pointer in Zeropage ($73) setzen
$274: High-Byte Basic-Start
$276: als Pointer in Zeropage ($74) setzen => $73/$74 zeigt auf Basicspeicher-Start ($0401)
$278: Akku mit #0 laden
$27a - $280: Basicspeicher-Start mit #0 beschreiben (hier stehen i.a. die Zeiger auf die zweite Basic-Zeile im Speicher. "0000" (16Bit-Pointer) sagt "Ende des Programms, es folgt keine weitere Zeile" - und hier eben, dass überhaupt keine gültige Zeile im Basicspeicher steht, also kein Programm im RAM)
$283: Zähler für 24 Bytes => X-Register laden
$285 - $28b (inkl.): Routine ab $290 in die Zeropage ab Adresse $BF kopieren, insgesamt 24 Bytes (von #$17 nach #$0 herunterzählend, bei Überlauf nach #$FF entsteht eine negative Zahl (-1, siehe oben das Thema Zweierkomplement), und die BPL-Schleife wird verlassen (Branch if PLus ist wegen MINUS-Zahl beim Zähler nicht mehr erfüllt)
$28d: Fertig mit Kopieren, Sprung in den Monitor nach Adresse $E1A1
Dahinter folgt der Code, den die Routine in die Zeropage kopiert. Die hast Du im Listing als "Subroutine: Get BASIC char" beschrieben.
Dank des Kopierens landet übrigens die explizite Adresse, die im Listing bei Adresse $297 steht ("EA60"), in der Zeropage bei den Adressen $C6 / $C7 - und dort wird sie dann auch schön von der Routine später selbst direkt hochgezählt bzw. kann neu geschrieben werden. "EA60" ist also wohl nur ein Dummy, der später ins Basic-Programm zeigt und die Eingaben / Zeilen auswertet...
Wie herrlich, mal wieder die Kenntnisse aus den 80ern und 90ern zu reaktivieren!!
Have fun!
Nebenbei, mein ROM Wizard liefert dir 6502 Disassembly direkt aus dem Binärfile.
Einige wenige Mausklicks genügen...
SC/MP übrigens auch...
Danke Euch beiden...ich bin ja noch am üben 😊