Hello, Guest the thread was called122 times and contains 3 replays

last post from sparhawk at the

Numerische Variable aus BASIC

Heute 13.11.2019 ca. 11:30 Uhr Serverreboot wegen Systemupdates. Danke für Euer Verständnis. Team Forum64.de

  • Ich schaue mir gerade ein Program an, welches mit ziemlicher Sicherheit ein compiliertes BASIC Programm sein dürfte. Ich versuche dabei einen Cheat zu machen. Wäre das ganze in normalen Assembler, wäre das nicht so schwierig. :)

    Dabei geht es darum dass das Programm in bestimmten Intervallen eine Zufallszahl zwischen 1 und 111 erzeugt und man diese erraten muss. Hat man sie richtig dann bekommt man einen Bonus. Jetzt suche ich die die Adresse der Variablen in welcher diese Zahl generiert wird, damit man eventuel mit einem POKE oder Monitor die Zahl ermitteln oder verändern kann.

    Dabei ist mir erstens nicht so ganz klar wie Variablen im Speicher abgelegt werden. Und zweitens wie eine Zahl abgelegt wird. Soweit ich das verstanden habe werden alle Zahlen als FLOATS im FAC zwischengespeichert wenn sie verarbeitet werden. INT werden normalerweise nicht benutzt (auch wenn das effizienter wäre).

    Ich habe mir das WIKI dazu durchgelesen, aber mir ist nicht so ganz klar wie das funktioniert.

    In meinem Sample habe ich die Zahl 92. Der Exponent wäre dabei 1, oder? Also müsste in $61 dann 1 reingeschrieben werden. $62-$65 enhält dann die Mantisse. Ist dass dann die Zahl 92? IMO nicht, aber mir ist eben überhaupt nicht klar wie so eine Zahl in FLOAT zerlegt wird.

    Nach meinem Verständniss müsste dann irgendwann der Vergleichswert geladen werden (also die zufällige Zahl) und dann mittles FCOMP ($BC5B) verglichen werden. Bei einem Breakpoint wird diese Funktion auch benutzt, also gehe ich mal davon aus dass ich da richtig liege, nur dass ich die Zahl halt nicht lesen kann.

  • In meinem Sample habe ich die Zahl 92. Der Exponent wäre dabei 1, oder? Also müsste in $61 dann 1 reingeschrieben werden. $62-$65 enhält dann die Mantisse. Ist dass dann die Zahl 92? IMO nicht, aber mir ist eben überhaupt nicht klar wie so eine Zahl in FLOAT zerlegt wird.

    92 ist binär %01011100, die Mantisse ist dann %10111000undhierfolgenjetztbeliebigvieleNullbits. Der Exponent berechnet sich aus der Anzahl der Stellen zwischen der Originalposition des Dezimalpunkts und der Position des führenden Eins-Bits, plus eines "Bias", damit man nicht mit negativen Exponenten hantieren muss.

    Dazu kommt dann noch, dass das führende Eins-Bit im Speicher (nicht im FAC) durch das Vorzeichen der Zahl ersetzt wird, weil das Eins-Bit ja per Definition eh immer Eins ist (der Wert Null wird durch einen Null-Exponenten ausgedrückt).


    Lies mal diesen und diesen Thread, sowie dies und dies.

  • Einfach A=92 eingeben und mit einem Monitor (oder per PEEK) die Werte im Variablenbereich ansehen ...


    41 ist der Variablenname "A", 87 der Exponent und 38 die Mantisse (die führende 1 ist weggelassen und durch das Vorzeichen, positiv=0, ersetzt).

    Exponent ist $80 + 7 (also ein positiver Exponent, weil >= $80), also die Mantisse wäre dann mit dem fiktiven Komma

    1,0111000 x 2^7

    d.h. da Komma gehört um 7 Positionen nach rechts verschoben, wenn man den Exponent "einarbeitet":

    10111000,0 = 92