Tapegesteuerte Lernsoftware: seltsame Abfrage


Tapegesteuerte Lernsoftware: seltsame Abfrage

von Erhard » So 29. Mär 2020, 10:21
Hi,

eine Software verwendet Piepser auf Cassette, um das Fortschreiten des Programmablaufs zu steuern.

Im Programm findet sich dazu folgende Abfrage zu SKSTAT:

IF INT(PEEK(53775)/32+0.5)=INT(PEEK(53775)/32) THEN ....

Ich vermute, hier wird auf ein gelöschtes Bit 5 geprüft, aber ich verstehe nicht, wie diese Abfrage funktioniert.

Das Konstrukt wurde sicher verwendet, weil das normale BASIC kein binäres AND hat, mit dem die nicht abzufragenden Bits ausmaskiert werden können.

CU, Erhard

Re: Tapegesteuerte Lernsoftware: seltsame Abfrage

von CharlieChaplin » So 29. Mär 2020, 18:27
Gesehen u.a. bei PDI (Adventures of Oswald, Sammy the Sea Serpent, etc.) und Atari (Invitation to Programming 1, 2, 3, etc. - erstellt von PDI im Auftrag von Atari)...

Diese Art der Verbindung von Programm und Audioton ist jedoch recht selten zur Anwendung gekommen. Sehr viel verbreiteter war/ist das Educational Tape System von Atari und Dorsett, für die man jedoch die Educational System Cart. benötigt. (Auf solchen Educational Tapes ist kein normales Tape-Ladegeräusch drauf, d.h. man kann sie ohne Cart. gar nicht laden.)

Das Basic Programm wartet auf einen einzelnen kurzen Biep/Blip/Pulse von Tape (deutlich kürzer als 128 Bytes), bevor es mit dem nächsten Programmpart weitermacht. Keine Ahnung, ob solche Tapes (bzw. CAS davon) via Emulator laufen. Da ich jedoch so böse bin, Tapes auf Diskette zu kopieren und von dort via CSIM oder DOS zu laden, war ich so frech und habe die entsprechenden Programmstellen (so ich sie denn gefunden habe) entweder entfernt oder mittels REM deaktiviert und durch Pausen in Form von For/Next Schleifen ersetzt...

Re: Tapegesteuerte Lernsoftware: seltsame Abfrage

von Dietrich » So 29. Mär 2020, 23:18
Interessant - den Trick kannte ich noch gar nicht.

Mit dieser Abfrage wird Bit 4 von SKSTAT (das ist die SERIN-Leitung) auf 0 getestet.

Du kannst dir das klar machen, wenn du dir überlegst, wann INT(X+0.5)=INT(X) ist. Das ist genau dann der Fall, wenn die 1. Nachkommastelle von X dezimal zwischen 0 und 4 liegt (also n.0000 bis n.4999) bzw. binär gleich 0 ist (0.5 dezimal ist 0.1 binär).
Wenn du nun X vorher durch 2 teilst, rutscht Bit 0 von X in die 1. binäre Nachkommastelle, also wird Bit 0 getestet. Wenn du X vorher durch 4 teilst, rutscht Bit 1 von X in die 1. Nachkommastelle, also wird Bit 1 getestet usw.

So kann man also einzelne Bits in ATARI-BASIC testen - cool!

Tapegesteuerte Lernsoftware: seltsame Abfrage

von Erhard » Mo 30. Mär 2020, 12:51
Hi,

Dietrich hat geschrieben:Mit dieser Abfrage wird Bit 4 von SKSTAT


es wird also durch das Teilen durch 32 Bit 4 in die erste Nachkommastelle verschoben.

Ich nehme an, daß die Werte der Bits 0-3, die sich ja auch in Nachkommastellen widerspiegeln, in die Rechnung nicht einfließen, da durch das Addieren von 0,5 nur die erste Nachkommastelle eine relevante Änderung erfährt?

Ferner wird mit der Abfrage ja auf die Änderung des Bits gewartet, wenn ich das richtig sehe von 1 auf 0?

Vielen Dank!

Erhard

Re: Tapegesteuerte Lernsoftware: seltsame Abfrage

von Dietrich » Mi 1. Apr 2020, 19:53
Ich nehme an, daß die Werte der Bits 0-3, die sich ja auch in Nachkommastellen widerspiegeln, in die Rechnung nicht einfließen, da durch das Addieren von 0,5 nur die erste Nachkommastelle eine relevante Änderung erfährt?

Genau. Am einfachsten lässt sich das nachvollziehen, wenn man komplett binär rechnet (z.B. ist 0.5 dezimal = 0.1 binär und 11.25 dezimal = 1011.01 binär).

Ferner wird mit der Abfrage ja auf die Änderung des Bits gewartet, wenn ich das richtig sehe von 1 auf 0?

Nein, es wird wirklich Bit 4 auf 0 getestet, wie oben geschrieben. (Geht während der Abfrage Bit 4 von 1 auf 0 kommt false raus.)

Tapegesteuerte Lernsoftware: seltsame Abfrage

von Erhard » Fr 3. Apr 2020, 08:58
Hi,

Dietrich hat geschrieben:Nein, es wird wirklich Bit 4 auf 0 getestet, wie oben geschrieben. (Geht während der Abfrage Bit 4 von 1 auf 0 kommt false raus.)


tja, aber genau dafür ist die Abfrage da. Der Programmablauf wird an dieser Stelle angehalten, bis der Piepser auf dem Tape kundtut, daß die Audiospur mit der Sprache an der Stelle angekommen ist und daß es weitergehen kann.

Aber okay, ich hab hier ja nicht die komplette Routine gezeigt sondern nur diese Abfrage.

CU, Erhard