Binärdatei mit normalen Ataribasic einlesen.


Binärdatei mit normalen Ataribasic einlesen.

von robbifan » Mi 17. Sep 2008, 09:30
Hallo, ich habe eine Bindatei, die ich mit dem Basic vom Atari800 einlesen möchte.
Finde den Befehl nicht.

mfg
peter

von FlorianD » Mi 17. Sep 2008, 09:47
normales ATARI Basic: gibt es keinen Befehl für, muss man sich selbst bauen mit OPEN und GET, und Auswerten des Headerinfos (siehe z.B. INSIDE ATARI DOS)

TURBO-Basic: BLOAD "D:FILENAME.COM"

von atarixle » Mi 17. Sep 2008, 23:44
Binärdatei ist nicht gleich DOS-Programm ...

In Atari-BASIC:

-Datei öffnen auf Kanal #1
10 OPEN #1,4,0,"D:filename.ext"

-ein Byte aus der Datei lesen (bzw. aus Kanal #1)
20 GET #1,E

-das Byte anzeigen ... um (ESC) einzugeben, zweimal die ESC-Taste drücken .. das verhindert, dass Steuerzeichen ausgeführt werden
30 PRINT "(ESC)";CHR$(E)

-und zurück
40 GOTO 20

Das Programm wird mit einer Fehlermeldung enden, aber es sollte dir das Prinzip von OPEN und GET zeigen.

von FlorianD » Do 18. Sep 2008, 10:39
fügt man ein

5 TRAP 50

und ein

50 CLOSE #1
60 END

in das Programm ein, wird der ERROR (End of FILE erreicht) abgefangen, der Kanal geschlossen und das Programm sauber beendet.

Wenn es ein echtes Binary File ist (also ein *.EXE oder *.COM) sind die ersten 2 Bytes $FF, dann folgt die Startadresse und dann die Endadresse, dann die Daten.
Das kann beliebig oft für Speicherbereiche (auch nicht zusammenhängende) wiederholt werden.
(siehe z.B. http://www.atarimax.com/jindroush.atari ... mtexe.html )
Die INIT und RUN Adressen werden ebenfalls auf diese Weise initialisert.

von robbifan » Do 18. Sep 2008, 11:32
Hallo, ich habe ein Programm , welches ich mit dem Atasm compiliert habe. Es heisst Test.bin und möchte dieses ab adresse $600 einladen und dann mit "a=usr($600,0,33) " starten.
Die grösse der Datei ist 120 Byte.

Wie lese ich die Datei ein?
Wie kann man dann eine unbekannte Grösse einer Datei einlesen?

Könnt ihr das mal genau erklären ?

mfg
peter

von FlorianD » Do 18. Sep 2008, 19:14
Code: Alles auswählen
10 OPEN #1,4,0,"D:TEST.BIN"
20 I=0
30 GET #1,B
40 POKE 1536+I,B
50 I=I+1
60 IF I<120 THEN GOTO 30
70 CLOSE #1
80 X=USR(1536,0,33)

von robbifan » Do 18. Sep 2008, 19:46
Ah, danke.
Also kann ich auch BIn-Dateien Poken, die dann gestartet werden können, das wusste ich nicht.


mfg
peter