Seite 1 von 1
MID$ Anweisung im Atari BASIC
Verfasst: 23.03.2022 17:48
von Andars
Hallo,
ich möchte ein Basic Programm ins Atari Basic portieren.
Das enthält aber MID$-Anweisungen. Wie kann ich so eine Anweisung ins
Atari Basic übersetzen?
Beispiel:
Das ist mir zu undurchsichtig...
Re: MID$ Anweisung im Atari BASIC
Verfasst: 23.03.2022 17:56
von pps
Ich denke da benötigen wir etwas mehr Quellcode drumherum und die Info welcher Basic Dialekt der Ursprung ist.
Das j+1 deutet auf eine Schleife hin und das ,1 auf eine gesuchte Länge von einem Zeichen. Aber das kann auch komplett was anderes sein.
PS: Wenn es das ist, könnte man A$(LEN(A$)/2) ansprechen...
Re: MID$ Anweisung im Atari BASIC
Verfasst: 23.03.2022 18:00
von Andars
Der Code stammt aus dem BASICODE, einer minimal BASIC-Variante.
Hier etwas mehr Code:
Code: Alles auswählen
1000 A=50:GOTO20:REM GRAFIKIMPORT AUS ASCII-DATEI
1010 REM STARTBILDSCHIRM
1020 GOSUB100:HO=8:VE=1:GOSUB110:SR$="IMPORT VON GRAFIKEN":GOSUB150
1030 HO=8:VE=2:GOSUB110:SR$=" AUS ASCII-DATEIEN ":GOSUB150
1040 HO=2:VE=6:GOSUB110:PRINT"AUS WELCHER DATEI LADEN";:INPUTB$
2000 REM EINLESEN DER DATEN
2010 NF=4:NF$=B$:GOSUB 500
2020 GOSUB540:PRINTIN$
2030 IF IN$<>"SCREEN"THEN2900
2040 GOSUB540:PRINTIN$
2050 GOSUB540:PRINTIN$:IFIN$<>"H320"THEN2900
2060 GOSUB540:PRINTIN$:IFIN$<>"V200"THEN2900
2070 GOSUB540:PRINTIN$
2080 GOSUB540:PRINTIN$
2890 GOTO20000
2900 PRINT"KEINE PASSENDE DATEI"
3000 GOSUB 580
3010 STOP
20000 REM ERZEUGEN DER GRAFIK
20010 GOSUB 540:C$=IN$
20100 PRINT C$
20110 D$=MID$(C$,1,1)
20120 E=ASC(D$)-64:PRINTE
20130 D$=MID$(C$,2,1)
20140 F=ASC(D$)-64:PRINTF
20150 G=16*E+F:PRINTG:GOSUB210
20160 GOSUB600:POKE41296,255-G:GOSUB210
22000 GOTO3000
Re: MID$ Anweisung im Atari BASIC
Verfasst: 23.03.2022 18:03
von Andars
Re: MID$ Anweisung im Atari BASIC
Verfasst: 23.03.2022 18:05
von pps
Ich hatte oben auch noch was ergänzt...
A$/2 könnte bei ungeraden Zahlen Probleme bringen, also noch dort den Integer nehmen.
BASICCODE m8 das imho, wie ich ged8 habe.
Re: MID$ Anweisung im Atari BASIC
Verfasst: 24.03.2022 10:08
von Andars
Hier nochmal der Code, in dem das MID$ umgewandelt werden müsste:
Code: Alles auswählen
1000 A=50:GOTO20:REM GRAFIKIMPORT AUS ASCII-DATEI
1010 REM STARTBILDSCHIRM
1020 GOSUB100:HO=8:VE=1:GOSUB110:SR$="IMPORT VON GRAFIKEN":GOSUB150
1030 HO=8:VE=2:GOSUB110:SR$=" AUS ASCII-DATEIEN ":GOSUB150
1040 HO=2:VE=6:GOSUB110:PRINT"AUS WELCHER DATEI LADEN";:INPUTB$
2000 REM EINLESEN DER DATEN
2010 NF=4:NF$=B$:GOSUB 500
2020 GOSUB540:PRINTIN$
2030 IF IN$<>"SCREEN"THEN2900
2040 GOSUB540:PRINTIN$:Z$=IN$
2050 GOSUB540:PRINTIN$:IFIN$<>"H320"THEN2900
2060 GOSUB540:PRINTIN$:IFIN$<>"V200"THEN2900
2070 GOSUB540:PRINTIN$
2080 GOSUB540:PRINTIN$
2890 GOTO20000
2900 PRINT"KEINE PASSENDE DATEI"
3000 GOSUB 580
3010 REM STOP
20000 REM ERZEUGEN DER GRAFIK
20005 GOSUB600:SR$=Z$:HO=0 :VE=.9:GOSUB650
20010 H=41296:FORL=0TO199
20020 FORK=0TO 1:GOSUB540:A$=IN$
20030 FORJ=0TO38STEP2
20040 M=16*(ASC(MID$(A$,J+1,1))-64)+ASC(MID$(A$,J+2,1))-64:POKE H,M
20050 H=H+1:NEXTJ
20060 NEXTK:NEXTL:GOSUB210
22000 GOTO3000
Das ist für mich leider zu undurchsichtig...
Re: MID$ Anweisung im Atari BASIC
Verfasst: 24.03.2022 10:36
von rvetter
Hallo,
wie wäre es mit
Code: Alles auswählen
20040 M=16*(ASC(A$(J+1,J+1))-64)+ASC(A$(J+2,J+2))-64:POKE H,M
Ich hab selber nie mit BASIC programmiert aber ein Beispiel aus dem ATARI BASIC Reference Manual deutet darauf hin, daß
in etwa
bei ENDE=ANFANG+ANZAHL-1 entspricht.
Gruß, Rene
Re: MID$ Anweisung im Atari BASIC
Verfasst: 24.03.2022 12:01
von Andars
Der Code:
Code: Alles auswählen
20040 M=16*(ASC(A$(J+1,J+1))-64)+ASC(A$(J+2,J+2))-64:POKE H,M
funktioniert leider nicht...
Re: MID$ Anweisung im Atari BASIC
Verfasst: 24.03.2022 12:35
von rvetter
Vielleicht hilft es, 'M' an der Stelle mal mit einem Print ausgeben zu lassen. Das läßt dann Rückschlüsse zu, ob es dem erwarteten Wert entspricht. Bzw. A$, A$(J+1,J+2) und M ausgeben und dann so modifizieren, daß es am Ende funktioniert.
Re: MID$ Anweisung im Atari BASIC
Verfasst: 24.03.2022 18:19
von DjayBee
Hast du daran gedacht, dass im Atari BASIC alle Strings auf ihre maximal benötigte Länge DIMensioniert werden müssen?
Der Hinweis von rvetter ist für das eigentliche Problem genau richtig.
- MicrosoftBASIC.png (5.45 KiB) 3052 mal betrachtet
- AtariBASIC.png (3.75 KiB) 3052 mal betrachtet
Re: MID$ Anweisung im Atari BASIC
Verfasst: 25.03.2022 14:36
von Andars
Ja, an die DIM-Anweisung habe ich gedacht.
Ich suche noch immer einen Ersatz für folgenden Ausdruck:
,
also ohne MID$-Anweisung.
Re: MID$ Anweisung im Atari BASIC
Verfasst: 25.03.2022 14:51
von pps
Hatte Atari Basic nicht die Angewohnheit, dass String(0) das erste Element war? Dann muss das +1 einfach weg.
Re: MID$ Anweisung im Atari BASIC
Verfasst: 25.03.2022 15:14
von MichaG
Code: Alles auswählen
10 DIM A$(20)
20 A$="ABCDEFGHIJ"
30 J=5
40 ? A$(J+1,J+1)
50 M=16*ASC(A$(J+1,J+1))
60 ? M
READY
RUN
F
1120
Siehe Zeile 50
Re: MID$ Anweisung im Atari BASIC
Verfasst: 25.03.2022 23:02
von atarixle
Andars hat geschrieben: ↑23.03.2022 17:48
Hallo,
ich möchte ein Basic Programm ins Atari Basic portieren.
Das enthält aber MID$-Anweisungen. Wie kann ich so eine Anweisung ins
Atari Basic übersetzen?
Beispiel:
Das ist mir zu undurchsichtig...
Die Zeile sieht 1:1 in Atari-BASIC übersetzt so aus:
und kann auf
gekürzt werden, da es für die umklammernde ASC-Funktion keine Länge des String benötigt.
Zur Erklärung: MID$ ist eine in Atari ungebräuchliche Anweisung. J+1 ist die Stelle im String und 1 ist die Länge. In Atari BASIC wäre das von Stelle J+1 bis Stelle (J+1)-1+1. Da man für ASC keine Länge benötigt, weil der ASC-Wert nur einer Stelle, nämlich die ersten, als Wert zurückgegeben wird, kann man J+1 weglassen.
Andars hat geschrieben: ↑25.03.2022 14:36
Ja, an die DIM-Anweisung habe ich gedacht.
Ich suche noch immer einen Ersatz für folgenden Ausdruck:
,
also ohne MID$-Anweisung.
pps hat geschrieben: ↑25.03.2022 14:51
Hatte Atari Basic nicht die Angewohnheit, dass String(0) das erste Element war? Dann muss das +1 einfach weg.
Nein.
Weitere Äquivalente:
Re: MID$ Anweisung im Atari BASIC
Verfasst: 31.03.2022 21:42
von atarixle
Es könnte auch
heißen, je nach BASIC-Dialekt.