AIM-65 Eigenbau

  • 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!