Action! again
1, 2
Re: Action! again
von cas » Mo 29. Aug 2011, 14:28
Ich benutze einen Decompiler/Speichermonitor. Auf echter Hardware benutze ich je nach Rechner Bibo-Mon, QMEG oder den Turbo-Freezer.
Der Atari800 Emulator hat einen guten eingebauten Monitor (F8).
-- Carsten
Re: Action! again
von funkheld » Mo 29. Aug 2011, 14:46
Jup, danke.
Ich dachte man kann dieses dann als Com abspeichern und einfach laden zum abspielen.
Man kann auch mit "W" in Action als Com abspeichern, was ist das denn für eine Com?
gruss
Re: Action! again
von cas » Mo 29. Aug 2011, 15:33
funkheld hat geschrieben:Jup, danke.
Ich dachte man kann dieses dann als Com abspeichern und einfach laden zum abspielen.
Man kann auch mit "W" in Action als Com abspeichern, was ist das denn für eine Com?
gruss
Mit "W" im ACTION! Monitor wird eine Standard Atari COMpound Datei erstellt. Das Atari Profibuch (
http://www.abbuc.de/files/abbuc/atari-p ... lage_1.pdf) auf Seite 155 (2.12.3 Aufbau eines Datenfiles unter ATARI DOS 2.x) hat die Details.
-- Carsten
Re: Action! again
von eda70 » Di 25. Okt 2011, 21:06
Kann man mit Action! aus bspw. verschachtelten IF-THEN und FOR-NEXT direkt eine Funktion mit Return verlassen?
Oder führt das dann zu Problemen?
- Code: Alles auswählen
...
IF B= 1 THEN
FOR i = row-2 to row DO
FOR j = col-2 to col DO
aptr= adr3C(zahl,row,col)+pk
IF aptr^ = 1 then
neuer_wert(zahl,i,j)
RETURN(1) ; <== hier ist der fragliche Rücksprung
FI
OD
OD
FI
...
Re: Action! again
von cas » Mi 26. Okt 2011, 07:22
eda70 hat geschrieben:Kann man mit Action! aus bspw. verschachtelten IF-THEN und FOR-NEXT direkt eine Funktion mit Return verlassen?
Oder führt das dann zu Problemen?
- Code: Alles auswählen
...
IF B= 1 THEN
FOR i = row-2 to row DO
FOR j = col-2 to col DO
aptr= adr3C(zahl,row,col)+pk
IF aptr^ = 1 then
neuer_wert(zahl,i,j)
RETURN(1) ; <== hier ist der fragliche Rücksprung
FI
OD
OD
FI
...
Das führt auf die Dauer zu Problemen, da die Ruecksprungadressen der IF-FI und FOR-DO-OD Blöcke auf dem Stack verbleiben, und der Stack im 6502 ist mit 128 16-Bit Werten sehr klein bemessen. Irgendwann crashed das Programm.
Rueckspruenge per "RETURN" sollten Immer nur in der Hauptebene einer Funktion (FUNC/PROC) geschehen, es sei denn, man räumt den Stack selbst auf (und das ist kompliziert).
In der IF-FI Abfrage kannst Du den/die Schleifen-Variablen auf den Endwert setzen, so wird die Schleife sofort verlassen, das RETURN sollte dann nach dem letzen FI kommen.
-- Carsten
Re: Action! again
von eda70 » Mi 26. Okt 2011, 10:34
Ah, danke, das ist natürlich eine Lösung.
Allerdings ist bei mir -trotzdem das Return rund 60 mal im Programmlauf ausgelöst wurde- kein Fehler oder Crash aufgetreten.
(nur das Programm macht noch nicht ganz was es soll...

- debugging sucks)
Edit: Müsste das Programm nicht den Stack aufräumen, um an die korrekte Rücksprungadresse zu gelangen?
Re: Action! again
von FlorianD » Mi 26. Okt 2011, 21:53
also ich bin mir nicht sicher, ob bei IF-FI und DO-OD Schleifen der Stack bemüht wird. Ich denke, dass das nur der Fall bei Unterroutinen (PROC/FUNC) ist. Die Loops und IFs werden m.E. mit Branches oder JMPs gebildet. Müßte man mal im Source angucken, um sicher zu gehen.
Solche Konstrukte sind möglich:
- Code: Alles auswählen
BYTE FUNC blubb()
IF GLARB=0 ; GLARB = eine globale Variable
RETURN(1)
FI
RETURN(0)
Es gibt noch den Befehl EXIT, der aus einer beliebigen Schleife rausspringt (siehe Handbuch).
Aber sowas wie POP (ATARI BASIC) habe ich als Befehl nicht gefunden.
Re: Action! again
von Tigerduck » Do 1. Mär 2012, 23:08
Ich hätte da auch mal 'ne Frage.
Entweder ich hab' grad Tomaten auf den Augen oder ich sollte mich wieder mit BASIC beschäftigen...
Wenn ich bei einer For-Schleife einen negativen STEP eingebe dann tut sich gar nix, kann das ACTION nicht???
PROC SCHLEIFE(BYTE I)
FOR I=100 TO 0 STEP -1
DO
PRINTBE(I)
OD
RETURN
Hab's auch schon mit CARD und INT probiert (ändert aber nix...)
Weiss jemand Rat?
Tigerduck
Re: Action! again
von eda70 » Fr 2. Mär 2012, 09:41
Ne, negativ kann er nicht.
Muss man entweder über Zwischenschritt machen.
AktWert=SchleifenStartwert-SchleifenWert
(alternativ geht natürlich auch DO-until-OD oder while-do-od, da geht dann auch negativ: AktWert==-1)
Mann kann aus der For-Schleife heraus auch nicht den Start- und Endwert ändern, wohl aber den Zähler.
Schleifen über die Grenze des Datentyps hinaus werden zu Endlosschleifen...
Re: Action! again
von Tigerduck » Fr 2. Mär 2012, 10:52
Danke für die schnelle Antwort!
Na, dann werde ich wohl irgendwie "drumherum" basteln müssen...
Aber kein STEP -n, das kann ja schon das poplige ATARI-Basic

Tigerduck
Re: Action! again
von eda70 » Fr 2. Mär 2012, 12:38
Tigerduck hat geschrieben:Aber kein STEP -n, das kann ja schon das poplige ATARI-Basic

Dafür auch entsprechend schnell...

1, 2