GRATRA02: Austausch von Grafiken mit anderen Computern

Moderator: Rockford

Antworten
Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

GRATRA02: Austausch von Grafiken mit anderen Computern

Beitrag von BC-Tom »

Dieses Thema setzt sowohl
viewtopic.php?f=7&t=576
als auch
viewtopic.php?f=7&t=576&p=5316&hilit=BasiCode#p5316
fort.

Als Nutzer mit sehr wenig Erfahrung auf 8-bit-Ataris nahm ich 2022 am ABBUC-Softwarewettbewerb teil. Mein Programm schaffte es nur knapp, den letzten Platz zu verfehlen. ;-)
https://abbuc.de/2022/11/ergebnis-abbuc ... werb-2022/

Nun habe ich eine neue Version in Arbeit und hoffe auf rege Mitarbeit, sicher noch vorhandene Schwachstellen auszumerzen. Hierbei war mir bisher Andars eine große Hilfe, dem ich dafür großen Dank aussprechen möchte.
ABOUT.jpg
ABOUT.jpg (53.91 KiB) 422 mal betrachtet
Von cas und Holger gab es schon Anregungen, die ich zum Teil bereits umgesetzt habe. So wies cas auf das Portable BitMap-Format hin, das ich nun einbeziehe. Holger vermisste einen kurzen Weg zur Directory-Anzeige - check! Bei einem Fehler wird jetzt, vorerst ohne weitere Auswertung, zum Menü zurückgekehrt.

In der ZIP-Datei
GRATRA02.zip
(439.02 KiB) 20-mal heruntergeladen
sind zwei ATR-Dateien, die erste (bootfähig) mit Turbo Basic, dem Programm und Beispieldateien, die zweite mit weiteren Beispielen, außerdem eine PDF mit einer ausführlichen Beschreibung. Das Programm in lesbarer Form zum Vorinformieren ist hier (zugunsten der besseren Lesbarkeit hier noch recht ausschweifend):

Code: Alles auswählen

0 REM Atari BasiCode V. 1,1 08-18-89  by Andreas Graf
1 REM Anpassung Turbo-BASIC Thomas Rademacher  Mai 2022
2 CLR :DIM OX$(3):GOSUB 100:HO=39:VE=23:HG=256:VG=192:DIM SR$(41):DIM O$(41):DIM IN$(41):DIM NF$(41)
10 POKE 82,0:GOTO 1000
18 ------------------------------
19 REM *** EINSCHALTEN TEXTMODUS ***
20 CLR :DIM OX$(3):GOSUB 100:HO=39:VE=23:HG=256:VG=192:DIM SR$(41):DIM O$(41):DIM IN$(41):DIM NF$(41):GOTO 1010
100 PRINT "}";:POKE 752,1:RETURN 
108 ------------------------------
109 REM *** TEXT-CURSOR POSITIONIEREN ***
110 OE=INT(VE):OO=INT(HO):IF OE<0 THEN OE=0
111 IF OO<0 THEN OO=0
112 IF OE>23 THEN OE=23
113 IF OO>39 THEN OO=39
115 POKE 84,OE:POKE 85,OO:POKE 86,0:RETURN 
118 ------------------------------
119 REM *** POSITION DES TEXT-CURSORS ERMITTELN ***
120 HO=PEEK(85):VE=PEEK(84):RETURN 
148 ------------------------------
149 REM *** HERVORGEHOBENE TEXT-ANZEIGE ***
150 PRINT " ";CHR$(160);CHR$(160);:IF LEN(SR$)=0 THEN 170
160 FOR O=1 TO LEN(SR$):PRINT CHR$(ASC(SR$(O,O))+128);:NEXT O
170 PRINT CHR$(160);CHR$(160);" ";:RETURN 
180 ------------------------------
195 IF IN=28 THEN IN=31:RETURN 
196 IF IN>95 THEN IN=IN-32:GOTO 196
197 RETURN 
198 ------------------------------
199 REM *** INKEY$-FUNKTION ***
200 IN=0:IN$="":IF PEEK(764)=255 THEN RETURN 
201 IN=PEEK(64337+PEEK(764)):POKE 764,255:IN$=CHR$(IN)
202 IF IN=155 THEN IN=13:RETURN 
203 IF IN=126 THEN IN=127:RETURN 
204 IF IN=30 THEN IN=28:RETURN 
205 IF IN=31 THEN IN=29:RETURN 
206 IF IN=29 THEN IN=30:RETURN 
207 GOTO 195
208 ------------------------------
209 REM *** WARTEN AUF TASTENDRUCK ***
210 GOSUB 216:GOSUB 200:IF IN=0 THEN 210
211 IF OG THEN PRINT " ";CHR$(30);
212 RETURN 
216 OG=(PEEK(88)+256*PEEK(89))>48000:IF OG THEN PRINT CHR$(160);CHR$(30);
217 RETURN 
218 ------------------------------
219 REM *** ZEICHEN VON BILDSCHIRM LESEN ***
220 IN=0:IF HO>39 OR HO<0 OR VE>23 OR VE<0 THEN RETURN 
230 IN=PEEK(PEEK(88)+256*PEEK(89)+VE*40+HO) AND 127
231 IF IN<64 THEN IN=IN+32:RETURN 
232 IF IN<96 THEN IN=32:RETURN 
240 GOTO 196
248 ------------------------------
249 REM *** BEEP ***
250 SOUND 0,80,10,40:FOR O=0 TO 199:NEXT O:SOUND :RETURN 
258 ------------------------------
259 REM *** ZUFALLSVARIABLE ***
260 O=PEEK(20)*PEEK(53770)/17.359:RV=O-INT(O):RETURN 
268 ------------------------------
269 REM *** FREIER SPEICHERPLATZ? ***
270 FR=FRE(0):RETURN 
278 ------------------------------
279 REM *** BREAK SPERREN/FREIGEBEN ***
280 O=192:IF FRTHENO=64
290   POKE 16,O:POKE 53774,O:RETURN 
298   ------------------------------
299   REM *** UMWANDLUNG IN STRINGVARIABLE ***
300   SR$=STR$(SR)
301   IF ASC(SR$)=32 THEN SR$=SR$(2,LEN(SR$)):GOTO 301
302   IF ASC(SR$)<>45 OR LEN(SR$)<3 THEN 305
303   IF SR$(2,2)<>"." THEN 305
304   O$="-0":SR$=SR$(2,LEN(SR$)):O$(LEN(O$)+1)=SR$:SR$=O$
305   IF ASC(SR$)<>46 THEN 307
306   O$="-0":SR$=SR$(2,LEN(SR$)):O$(LEN(O$)+1)=SR$:SR$=O$
307   RETURN 
308   ------------------------------
309   REM *** PRINT USING ***
310   O2=0:O1=SR:SR=INT(ABS(SR)*10^CN+0.5)
312   IF SR>=1000000000 THEN SR=INT(SR/10+0.5):O2=O2+1:GOTO 312
315   GOSUB 300:IF O2=0 THEN 319
317   FOR O=1 TO O2:SR$(LEN(SR$)+1)="0":NEXT O
319   GOSUB 320:SR=O1:RETURN 
320   O=LEN(SR$):IF O<=CN THEN FOR O2=1 TO CN-O+1:O$="0":O$(LEN(O$)+1)=SR$:SR$=O$:NEXT O2
321   O=LEN(SR$):IF CN>0 THEN O$=SR$:SR$=O$(1,O-CN):SR$(LEN(SR$)+1)=".":SR$(LEN(SR$)+1)=O$(LEN(O$)-CN+1,LEN(O$)):O=O+1
322   IF O1*SR<0 THEN O=O+1:O$="-":O$(LEN(O$)+1)=SR$:SR$=O$
323   IF O>CT THEN SR$="":FOR O=1 TO CT:SR$(LEN(SR$)+1)="*":NEXT O:RETURN 
324   IF O=CT THEN RETURN 
326   O=CT-O:O$="":FOR O2=1 TO O:O$(LEN(O$)+1)=" ":NEXT O2:O$(LEN(O$)+1)=SR$:SR$=O$
328   ------------------------------
329   REM *** ZEICHENKETTE NUR IN GROSSBUCHSTABEN ***
330   IF LEN(SR$)=0 THEN RETURN 
340   O$="":FOR O=1 TO LEN(SR$):O1=ASC(SR$(O,O))&127
341     IF O1>95 THEN O1=O1-32
342     O$(LEN(O$)+1)=CHR$(O1):NEXT O
344   SR$=O$:RETURN 
348   ------------------------------
349   REM *** ZEILE AN DRUCKER ***
350   LPRINT SR$;:RETURN 
358   ------------------------------
359   REM *** ZEILENVORSCHUB DRUCKER ***
360   LPRINT :RETURN 
398   ------------------------------
399   REM *** TON-ERZEUGUNG ***
400   SOUND 0,121*EXP(((60-SP)/12)*LOG(2)),10,SV
401   FOR O=0 TO 200*SD:NEXT O:SOUND :RETURN 
448   ------------------------------
449   REM *** BEGRENZTE ZEIT WARTEN AUF TASTENDRUCK ***
450   O=5*SD:POKE 20,0:POKE 19,0:GOSUB 217
460   IF PEEK(764)=255 THEN 480
470   SD=(O-256*PEEK(19)-PEEK(20))/5:GOTO 210
480   IF PEEK(19)*256+PEEK(20)<O THEN 460
490   SD=0:IN$="":IN=0:GOTO 211
498   ------------------------------
499   REM *** DATEI OEFFNEN ***
500   REM O=4:IF NF&1 THEN O=8
505   IF NF<0 OR NF>7 THEN IN=-1:RETURN 
510   O$="B":IF NF<2 THEN 530
515   O$="C":IF NF<4 THEN 530
518   O$="D1:":IF NF<6 THEN 530
520   O$="D2:"
530   O$(LEN(O$)+1)=NF$:NF$=O$
531   OPEN #2,NF+3*(NF=5)-2*(NF=6)+(NF=7),0,NF$:RETURN 
532   IF O=8 THEN 590
535   GOSUB 545:IF IN=1 THEN IN=0
537   RETURN 
538   ------------------------------
539   REM *** AUS DATEI LESEN ***
540   O=INT(NF/2) AND 3:REM IN$=OX$(O)
545   O=INT(NF/2)&3:IF NF&1 THEN 555
550   IN$=""
551   GET #2,O
552   IF O=10 THEN 551
553   IF O<>13 AND O<>155 THEN IN$(LEN(IN$)+1)=CHR$(O):GOTO 551
555   IN=-1:RETURN 
558   ------------------------------
559   REM *** IN DATEI SCHREIBEN ***
560   IF (NF&1)=0 THEN IN=-1:RETURN 
570   FOR OE=1 TO LEN(SR$):O=ASC(SR$(OE,OE)):PUT #2,O:NEXT OE:PUT #2,13:GOTO 590
578   ------------------------------
579   REM *** DATEI SCHLIESSEN ***
580   CLOSE #2
590   IF IN THEN IN=-1
595   RETURN 
598   ------------------------------
599   REM *** EINSCHALTEN GRAFIK-MODUS ***
600   GRAPHICS 24:SETCOLOR 1,3,15:SETCOLOR 2,1,0:RETURN 
618   ------------------------------
619   REM *** PLOT ***
620   GOSUB 621:PLOT O1,O2:RETURN 
621   O1=HO:IF O1<0 THEN O1=0
622   O2=VE:IF O2<0 THEN O2=0
623   O1=INT(O1*256)+32:IF O1>287 THEN O1=287
625   O2=INT(O2*192):IF O2>191 THEN O2=191
626   O=1:IF CN THEN O=0
627   RETURN 
628   ------------------------------
629   REM *** DRAWTO ***
630   GOSUB 621:DRAWTO O1,O2:RETURN 
648   ------------------------------
649   REM *** TEXT IN GRAFIK SCHREIBEN ***
650   GOSUB 621:IF O2>184 THEN O2=184
660   O1=INT(O1/8):IF O1>35 THEN O1=35
670   O=255:IF CN THEN O=0
680   REM T.PEEK(88)+256*PEEK(89)+40*O2+O1¬O,SR$:RETURN
949   REM *** BEENDEN BASICODE-BETRIEB ***
950   GOSUB 100:END 
997   ------------------------------
998   ------------------------------
999   REM *** NACHFOLGEND BASICODE-PROGRAMM ***
1000   A=200:DIM A$(1):GOTO 20:REM *** GRAFIK AUS TEXTDATEI ***
1010   DIM A$(1):DIM NA$(8):DIM N2$(40):REM GOSUB 24000
1020   GOSUB 24400
1028   ------------------------------
1029   REM *** HAUPTSCHLEIFE IM TEXT-MODUS ***
1030   HO=17:VE=20:GOSUB 110
1040   INPUT A$:IF A$="E" OR A$="e" THEN 19800
1050   IF A$="M" OR A$="m" THEN 1020
1060   IF A$="A" OR A$="a" THEN GOSUB 24700:GOTO 1020
1070   IF A$="H" OR A$="h" THEN GOSUB 20000
1080   IF ASC(A$)>47 AND ASC(A$)<57 THEN V=ASC(A$)-48:HO=33:VE=4:GOSUB 110:PRINT ": ";V
1090   IF A$="G" OR A$="g" THEN GOSUB 23000
1100   IF A$="N" OR A$="n" THEN GOSUB 20300
1110   IF A$="X" OR A$="X" THEN GOSUB 20400
1120   IF A$="Z" OR A$="z" THEN GOSUB 20600
1130   IF A$="C" OR A$="c" THEN GOSUB 20800
1140   IF A$="B" OR A$="b" THEN GOSUB 21200
1150   IF A$="P" OR A$="p" THEN GOSUB 22000
1160   IF A$<>"D" AND A$<>"d" THEN 1030
1168   ------------------------------
1169   REM DIRECTORY ANZEIGEN ***
1170   GOSUB 100:INPUT " Directory von D1 / D2 ... ";IN$
1180   IN$(LEN(IN$)+1)=":*.*":DIR IN$:POKE 764,255
1190   I=PEEK(764):IF I=255 THEN 1190
1200   GOTO 1020
19799   ------------------------------
19800   REM *** Ende des Programms ***
19808   ------------------------------
19809   REM *** ANZEIGE VON WEBLINKS ***
19810   GOSUB 100:SR$="GRAFIK AUS TEXTDATEI":HO=9:VE=0:GOSUB 110:GOSUB 150:PRINT :PRINT 
19820   PRINT " úõí ×åéôåòìåóå":PRINT :PRINT 
19830   PRINT "joyce.de/basicode/atari/atari.htm"
19835   PRINT "                   ... /atariHRG.htm":PRINT 
19840   PRINT "joyce.de/basicode/download/Man_BC3C.pdf":PRINT 
19850   PRINT "joyce.de/basicode/info/kurs.htm":PRINT 
19860   PRINT "joyce.de/software/grafik/import.htm"
19870   PRINT "                    ... /import2.htm":PRINT 
19880   PRINT "robhagemans.github.io/basicode/":PRINT 
19890   PRINT "robhagemans.github.io/basicode/basicode/Verzamelcassette_9/B04_Videodat.bc3":PRINT 
19900   PRINT "robhagemans.github.io/basicode/basicode/Verzamelcassette_9/B05_Alf-2.bc3"
19910   HO=29:VE=24:GOSUB 110:PRINT " > Ôáóôå <";
19920   IF PEEK(764)=255 THEN 19920
19930   PRINT :PRINT :PRINT :PRINT :PRINT :PRINT :LIST 30000,30100:POKE 764,255:HO=29:VE=24:GOSUB 110:PRINT " > Ôáóôå <";
19940   IF PEEK(764)=255 THEN 19940
19990   TRAP 32768:GOTO 950
19999   ------------------------------
20000   REM *** HRT-DATEI LADEN ***
20010   IN$=""
20020   IN$(LEN(IN$)+1)=NA$
20030   IN$(LEN(IN$)+1)=".HRT"
20040   NF=4:NF$=IN$:GOSUB 500
20050   A$=""
20060   GOSUB 540:IF IN$<>"SCREEN" THEN 20180
20070   GOSUB 540:GOSUB 540:IF IN$<>"H320" THEN 20180
20080   GOSUB 540:IF IN$="V192" THEN V=0
20090   GOSUB 540
20100   GOSUB 540:GOSUB 600
20110   K=DPEEK(88)
20120   IF V<>0 THEN FOR I=1 TO V:GOSUB 540:GOSUB 540:NEXT I
20130   FOR I=0 TO 383
20140     GOSUB 540:FOR J=0 TO 19
20150       L=16*(ASC(IN$(1+2*J,1+2*J))-64)+ASC(IN$(2+2*J,2+2*J))-64:POKE K+J,L
20160     NEXT J
20170     K=K+20:NEXT I
20180   GOSUB 580
20188   ------------------------------
20189   REM *** HAUPTSCHLEIFE IM GRAFIK-MODUS ***
20190   I=PEEK(764):IF I=255 THEN 20190
20200   IF I=13 OR I=77 THEN 21400:REM FOR H=DPEEK(88) TO DPEEK(88)+7679:POKE H,255-PEEK(H):NEXT H
20210   IF I=61 OR I=125 THEN 23200
20220   IF I=57 OR I=121 THEN 23400
20230   IF I=10 OR I=74 THEN 22200
20240   IF I=37 OR I=101 THEN 20290
20250   IF I=63 OR I=127 THEN 20290
20260   IF I=42 OR I=106 THEN 20290
20270   POKE 764,255:GOTO 20190
20290   RETURN 
20299   ------------------------------
20300   REM *** EINGABE DES NAMENS ***
20310   HO=21:VE=20:GOSUB 110:INPUT "Name: ",NA$,
20320   HO=3:VE=19:GOSUB 110:PRINT "Beschreibung (bis 40 Buchstaben)";
20330   HO=1:VE=21:GOSUB 110:INPUT " ",N2$:RETURN 
20399   ------------------------------
20400   REM *** ZX81-BILD LADEN  ***
20410   GOSUB 21000:SR$(LEN(SR$)+1)=NA$:SR$(LEN(SR$)+1)=".B"
20420   GOSUB 600
20430   OPEN #1,4,0,SR$
20440   K=DPEEK(88)
20450   FOR J=0 TO 191
20460     FOR I=0 TO 3
20470       POKE K+I+J*40,0
20480     NEXT I
20490     FOR I=4 TO 35
20500       GET #1,O:POKE K+I+J*40,255-O
20510     NEXT I
20520     FOR I=36 TO 39
20530       POKE K+I+J*40,0
20540     NEXT I
20550   NEXT J
20560   CLOSE #1
20590   POKE 764,255:GOTO 20190
20599   ------------------------------
20600   REM *** ZX SPECTRUM-BILD LADEN ***
20610   GOSUB 21000:SR$(LEN(SR$)+1)=NA$:SR$(LEN(SR$)+1)=".SCR"
20620   GOSUB 600
20630   OPEN #1,4,0,SR$
20640   K=DPEEK(88)
20650   FOR M=0 TO 5120 STEP 2560
20660     FOR L=0 TO 280 STEP 40
20670       FOR J=0 TO 2240 STEP 320
20680         FOR I=4 TO 35
20690           GET #1,O:POKE K+I+J+L+M,255-O
20700         NEXT I
20710       NEXT J
20720     NEXT L
20730   NEXT M
20740   CLOSE #1
20790   POKE 764,255:GOTO 20190
20799   ------------------------------
20800   REM *** COMMODORE-BILD LADEN ***
20810   GOSUB 21000:SR$(LEN(SR$)+1)=NA$:SR$(LEN(SR$)+1)=".PRG"
20820   GOSUB 600
20830   OPEN #1,4,0,SR$
20840   K=DPEEK(88)
20850   GET #1,O:GET #1,O
20860   IF V<>0 THEN FOR I=0 TO 319:GET #1,O:NEXT I
20870   FOR L=0 TO 7360 STEP 320
20880     FOR J=0 TO 39
20890       FOR I=0 TO 280 STEP 40
20900         GET #1,O:POKE K+I+J+L,255-O
20910       NEXT I
20920     NEXT J
20930   NEXT L
20940   CLOSE #1
20990   POKE 764,255:GOTO 20190
20999   ------------------------------
21000   REM *** LESELAUFWERK WAEHLEN ***
21010   SR$="D1:":RETURN 
21099   ------------------------------
21100   REM *** SCHREIBLAUFWERK WAEHLEN ***
21110   SR$="D2:":RETURN 
21199   ------------------------------
21200   REM *** MS-PAINT-BILD LADEN ***
21210   GOSUB 21000:SR$(LEN(SR$)+1)=NA$:SR$(LEN(SR$)+1)=".BMP"
21220   GOSUB 600
21230   OPEN #1,4,0,SR$
21240   K=DPEEK(88)
21250   FOR I=0 TO 61:GET #1,O:NEXT I
21260   FOR J=191 TO 0 STEP -1
21270     FOR I=0 TO 39
21280       GET #1,O:POKE K+I+J*40,O
21290     NEXT I
21300   NEXT J
21310   CLOSE #1
21390   POKE 764,255:GOTO 20190
21399   ------------------------------
21400   REM *** FARBEN TAUSCHEN ***
21410   K=DPEEK(88)
21420   FOR Q=0 TO 5760 STEP 1920
21430     FOR P=0 TO 1440 STEP 480
21440       FOR N=0 TO 80 STEP 40
21450         FOR M=0 TO 360 STEP 120
21460           FOR L=0 TO 31
21470             J=K+L+M+N+P+Q:POKE J,255-PEEK(J)
21480           NEXT L
21490         NEXT M
21500       NEXT N
21510     NEXT P
21520   NEXT Q
21530   FOR Q=0 TO 5760 STEP 1920
21540     FOR P=0 TO 80 STEP 40
21550       FOR N=0 TO 360 STEP 120
21560         FOR M=0 TO 1440 STEP 480
21570           FOR L=32 TO 39
21580             J=K+L+M+N+P+Q:POKE J,255-PEEK(J)
21590           NEXT L
21600         NEXT M
21610       NEXT N
21620     NEXT P
21630   NEXT Q
21790   POKE 764,255:GOTO 20190
21999   ------------------------------
22000   REM *** PBM-DATEI LADEN ***
22010   SR$="D1:":SR$(LEN(SR$)+1)=NA$:SR$(LEN(SR$)+1)=".PBM"
22011   OPEN #1,4,0,SR$
22012   GET #1,L:IF CHR$(L)<>"P" THEN 22015
22013   GET #1,L:IF CHR$(L)="4" THEN 22015
22014   PRINT "Dateikennung falsch":CLOSE #1:GOTO 22190
22015   GET #1,L:GET #1,L
22016   IF CHR$(L)<>"#" THEN 22021
22017   GET #1,L
22018   IF L=10 THEN 22020
22019   PRINT CHR$(L);:GOTO 22017
22020   GET #1,L
22021   IF CHR$(L)<>"3" THEN 22026
22022   GET #1,L
22023   IF CHR$(L)<>"2" THEN 22026
22024   GET #1,L
22025   IF CHR$(L)="0" THEN 22027
22026   PRINT "falsche Breite":CLOSE #1:GOTO 22190
22027   GET #1,L:GET #1,L
22028   IF CHR$(L)<>"1" THEN 22033
22029   GET #1,L
22030   IF CHR$(L)<>"9" THEN 22033
22031   GET #1,L
22032   IF CHR$(L)="2" THEN 22034
22033   PRINT "falsche Hehe":CLOSE #1:GOTO 22190
22034   GET #1,L
22039   GOSUB 600
22040   BGET #1,DPEEK(88),7680
22050   CLOSE #1:GOSUB 21400
22190   POKE 764,255:GOTO 20190
22199   ------------------------------
22200   REM *** SPEICHERN ALS PBM-DATEI ***
22210   GOSUB 21100:SR$(LEN(SR$)+1)=NA$:SR$(LEN(SR$)+1)=".PBM"
22220   OPEN #2,8,0,SR$
22221   PUT #2,80:PUT #2,52:PUT #2,10:PUT #2,35
22222   FOR L=1 TO LEN(N2$)
22223     PUT #2,ASC(N2$(L,L))
22224   NEXT L:PUT #2,10
22225   PUT #2,51:PUT #2,50:PUT #2,48:PUT #2,10
22226   PUT #2,49:PUT #2,57:PUT #2,50:PUT #2,10
22227   L=DPEEK(88)
22228   FOR M=0 TO 7679
22229     PUT #2,255-PEEK(L+M)
22230   NEXT M
22240   CLOSE #2
22390   POKE 764,255:GOTO 20190
22999   ------------------------------
23000   REM *** GR8-DATEI LADEN ***
23010   GOSUB 21000:SR$(LEN(SR$)+1)=NA$:SR$(LEN(SR$)+1)=".GR8"
23020   GOSUB 600
23030   OPEN #1,4,0,SR$
23040   BGET #1,DPEEK(88),7680
23050   CLOSE #1
23190   POKE 764,255:GOTO 20190
23199   ------------------------------
23200   REM *** SPEICHERN ALS GR8-DATEI ***
23210   GOSUB 21100:SR$(LEN(SR$)+1)=NA$:SR$(LEN(SR$)+1)=".GR8"
23220   OPEN #2,8,0,SR$
23230   BPUT #2,DPEEK(88),7680
23240   CLOSE #2
23390   POKE 764,255:GOTO 20190
23399   ------------------------------
23400   REM *** HRT-DATEI ERZEUGEN ***
23410   NF$=NA$:NF$(LEN(NF$)+1)=".HRT":NF=7:GOSUB 500
23420   SR$="SCREEN":GOSUB 560
23430   SR$=N2$:GOSUB 560
23440   SR$="H320":GOSUB 560
23450   SR$="V192":GOSUB 560
23460   SR$=" ":GOSUB 560
23470   SR$=" ":GOSUB 560
23480   L=DPEEK(88)
23490   FOR K=0 TO 191
23500     FOR J=0 TO 1
23510       SR$=""
23520       FOR I=0 TO 19
23530         M=PEEK(L+K*40+J*20+I):P=INT(M/16):Q=M-16*P+64:P=P+64
23540         SR$(LEN(SR$)+1)=CHR$(P):SR$(LEN(SR$)+1)=CHR$(Q)
23550       NEXT I
23560       GOSUB 560
23570     NEXT J
23580   NEXT K
23590   GOSUB 580:POKE 764,255:GOTO 20190
23999   ------------------------------
24000   REM *** INTRO ***
24010   GOSUB 100:HO=11:VE=1:SR$="              ":GOSUB 110:GOSUB 150
24020   HO=11:VE=2:SR$="HRG - Transfer":GOSUB 110:GOSUB 150
24030   HO=11:VE=3:SR$="              ":GOSUB 110:GOSUB 150
24040   HO=3:VE=12:GOSUB 110:PRINT "                 "
24050   HO=3:VE=13:GOSUB 110:PRINT "                 "
24060   HO=3:VE=14:GOSUB 110:PRINT "                                "
24070   HO=3:VE=15:GOSUB 110:PRINT "                             "
24080   HO=3:VE=16:GOSUB 110:PRINT "                             "
24090   HO=3:VE=17:GOSUB 110:PRINT "                             "
24100   HO=3:VE=18:GOSUB 110:PRINT "                                 "
24110   HO=3:VE=20:GOSUB 110:PRINT "       eingereicht für den"
24120   HO=3:VE=22:GOSUB 110:PRINT "      Software Contest 2022"
24130   HO=1:VE=6:GOSUB 110:PRINT "Grafikaustausch mit fremden Computern"
24140   HO=1:VE=8:GOSUB 110:PRINT "Thomas Rademacher   JOYCE-User-AG e.V.";
24150   HO=6:VE=10:GOSUB 110:PRINT " Šâåòáòâåéôåô  Æåâòõáò ²°²³ "
24160   HO=19:VE=8:GOSUB 110:PRINT " ";:POKE 752,1
24170   SD=50:GOSUB 450
24190   GOSUB 100:RETURN 
24399   ------------------------------
24400   REM *** Menue ***
24410   GOSUB 100:SR$="GRAFIK AUS TEXTDATEI":HO=7:VE=0:GOSUB 110:GOSUB 150:PRINT :PRINT 
24420   PRINT "   I.  Î ame (bis 8 Buchstaben)    Ä IR":PRINT 
24430   PRINT "       °®®®¸  Pixelzeilen Versatz":PRINT 
24440   PRINT "  II.   È RT-Datei laden":PRINT :TRAP 1020
24450   PRINT "        Ã 64-Bild laden   Z Ø 81":PRINT 
24460   PRINT "        Â MP-Datei laden   Ú X Spectrum":PRINT 
24470   PRINT "        Ç R8- /  Ð BM-Datei laden"
24480   PRINT " --------------------------------------"
24510   PRINT " III.    É nvertieren":PRINT 
24520   PRINT "         È RT-Datei erzeugen":PRINT 
24530   PRINT "        Speichern als  Ç R8 /  Ð BM":PRINT :PRINT 
24540   PRINT :PRINT "      Í enue     Á bout...     Å nde  ";
24550   RETURN 
24560   IF PEEK(764)=255 THEN 24560
24699   ------------------------------
24700   REM *** About... ***
24710   GOSUB 100:SR$="Was zum Geier ist":HO=12:VE=15:GOSUB 110:PRINT SR$:TEXT 9,17,"HRT":HO=7:VE=24
24720   GOSUB 110:PRINT :PRINT :PRINT :PRINT :PRINT :PRINT :PRINT :PRINT :TEXT 17,16,"?"
24730   PRINT :PRINT :PRINT :PRINT :SD=20:GOSUB 450:POKE 756,204
24740   POKE 764,255:PRINT :SR$="GRAFIK AUS TEXTDATEI":HO=7:VE=24:GOSUB 110:GOSUB 150:PRINT :PRINT 
24750   PRINT "Èigh-Òesolution-Ôransfer-Dateien lehnen"
24760   PRINT "sich an das Öéäåïäáô-Verfahren des WDR"
24770   PRINT "aus den 1980er Jahren an, das íïîïãèòïíå";
24780   PRINT "Grafiken als ASCII-Dateien codiert, weil";
24790   PRINT "diese sich unproblematischer auf unter-"
24800   PRINT "schiedliche Computer übertragen lassen"
24810   PRINT "als Binärdateien. Dieses Programm kann"
24820   PRINT "aus so einer Datei ein Bild erzeugen und";
24830   PRINT "als ÇÒ¸-Datei abspeichern - auch der um-";
24840   PRINT "gekehrte Weg ist möglich. Auch Grafiken"
24850   PRINT "des Sinclair Úظ± und ÚØ Óðåãôòõí, ÂÍÐ-"
24860   PRINT "Dateien aus MS Paint sowie PRG-Dateien"
24870   PRINT "vom Ãïííïäïòå ¶´ können geladen werden."
24875   PRINT "Weiterhin können ";CHR$(34);"Ðortable ÂitÍap";CHR$(34);"-"
24880   PRINT "Dateien gelesen und geschrieben werden."
24885   PRINT "  Äéå Âåäéåîõîç åòæïìçô íéô äåî èåòöïò­ ";
24890   PRINT "  çåèïâåîåî Âõãèóôáâåî äåó ÍåîŠó®       ";
24900   PRINT "Die Programmzeilen von 0 bis 999 stellen";
24910   PRINT "den noch in Entwicklung befindlichen"
24920   PRINT "Âáóãïäåò f
r Turbo-BASIC dar, der wie"
24930   PRINT "auch das Programm gern von jedermann"
24940   PRINT "weiterentwickelt werden darf.";
24950   HO=30:VE=24:GOSUB 110:PRINT "> Ôáóôå <";
24960   IF PEEK(764)=255 THEN 24960
24970   RETURN 
29998   ------------------------------
29999   REM *** INFO ANZEIGEN BEI BEENDEN ***
30000   REM Mit dem Programm knnen                 hochauflösende
30010   REM monochrome Grafiken angezeigt           werden, die
30020   REM von Computern anderen Typs              stammen.
30030   REM Ausserdem können solche                 Grafiken als
30040   REM Textdateien codiert werden              sowie aus solchen
30050   REM wiederhergestellt werden.
30060   REM Das Laden von Text- und Bild-           Dateien
30070   REM erfolgt von Laufwerk D1:
30080   REM ¨ ‹îäåòâáò éî äåî Úåéìåî µ±¸            õîä ²±°±° ©,
30090   REM das Speichern auf D2:
30100   REM ¨ ‹îäåòâáò éî äåî Úåéìåî µ²°            õîä ²±±±° ©.
31998   ------------------------------
31999   REM *** AUTOREN-INFO ***
32000   REM *********************************************
32010   REM *                                           *
32020   REM *              HRG - Transfer               *
32030   REM *                                           *
32040   REM *   Thomas Rademacher  JOYCE-User-AG e.V.   *
32050   REM *                                           *
32060   REM *        Andreas Tartz   ABBUC e.V.         *
32070   REM *                                           *
32080   REM *               Februar 2023                *
32090   REM *                                           *
32100   REM *********************************************
Ich stelle mir vor, dass aufkommende Probleme hier jeweils mit einer eigenen Überschrift (also kein neuer Thread, sondern beim Antworten den vorgegebenen Betreff ändern) verfolgt werden, so sollte es halbwegs übersichtlich bleiben.

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

BasiCode auf Ataris

Beitrag von BC-Tom »

... ist nicht neu, aber (leider) in Vergessenheit geraten - die Entwicklung von Hard- und Software schritt zu rasant voran.

BasiCode kann so beschrieben werden: Ein hypothetischer (nicht tatsächlich als Hardware existierender) Computer wird definiert. Für einen realen Rechner (C64, ZX Spectrum, ein MSX-Computer ...) wird nun ein Programm geschrieben, das diese hypothetische Maschine in allen Details emuliert. Zu den Vorgaben zählt ein genau definiertes (damals noch Kassetten-)Aufzeichnungsformat. Deswegen kann nun ein Atari, auf dem dessen spezifischer Emulator läuft, problemlos ein Programm einlesen, das auf einem Amiga unter dessen individuellem Emulator geschrieben wurde. Das gleiche Prinzip griff später JavaScript auf: der Code ist plattformunabhängig und kann auf jeder Maschine genutzt werden, auf der eine (plattformspezifische) Java Virtual Machine läuft.

Für Omikron-Basic schrieb Thomas Mäurer aus Oberhausen 1988 einen solchen Bascoder (so wird dieser Emulator genannt) für Omikron-Basic, er ist hier http://downloads.atari-home.de/Public_D ... /V_245.ZIP zu finden und auch diese http://downloads.atari-home.de/Public_D ... /V_276.ZIP Diskette ist diesem Thema gewidmet. Er stellte das Thema auch in der Zeitschrift ST Vision (Heft 6/88 Seiten 54/55) vor.
STVision.jpg
STVision.jpg (36.52 KiB) 394 mal betrachtet
1989 zog Andreas Graf aus (Ost-)Berlin nach und präsentierte BasiCode auch für 8-bit-Ataris - Andreas (Tartz)
stellt es hier https://atariwiki.org/wiki/Wiki.jsp?page=BASICODE bereit.
A_Graf.jpg
A_Graf.jpg (19.26 KiB) 394 mal betrachtet
Wer ein bisschen in das Thema hineinschnuppern möchte, findet hier https://joyce.de/basicode/info/kurs.htm einen Einführungslehrgang mit Beispielen und hier https://www.8bit-wiki.de/fileadmin/8bit ... SICODE.pdf ein Handbuch.

Es gibt einen online-Interpreter: http://robhagemans.github.io/basicode/ .
Dort warten auch etliche Programme zum sofortigen und unkomplizierten Ausprobieren.

Zwei gute Nachrichten: BasiCode ist Public Domain und Kassettenarbeit (damals Stand der privat bezahlbaren Technik), die heute eher abschreckt, ist nicht mehr zwingend erforderlich. Jeder andere heutige verfügbare Übertragungsweg (serielle Kopplung, Diskette, SD-Karte, Fujinet ...) ist nutzbar, denn es geht lediglich um ASCII-Files. Wie bei CP/M, das auf zahllosen unterschiedlich gearteten Computern läuft, steht auch hier plötzlich ein riesiger Pool an Software zur Nutzung bereit. Mehr Atari-spezifische Informationen gibt es hier: https://joyce.de/basicode/links/a-z.htm#index_a .
Zuletzt geändert von BC-Tom am 10.02.2023 19:55, insgesamt 1-mal geändert.

Benutzeravatar
BC-Tom
Beiträge: 34
Registriert: 06.02.2023 16:47
Been thanked: 6 times
Kontaktdaten:

High-Resolution-Transfer

Beitrag von BC-Tom »

2001 besuchte ich in Erlangen mein allererstes Computertreffen. Dort gefiel einem KC85-Nutzer eine Grafik des Commodore-plus/4-Clubs,
CI_53.jpg
CI_53.jpg (35.78 KiB) 384 mal betrachtet
die ich im CPC-Format hatte, so gut, dass wir auf die Schnelle einen Weg ausknobelten, sie in ein für ihn nutzbares Format umzuwandeln. Hierzu nahmen wir, soweit ich mich erinnere, ein großes A für ein gesetztes Pixel und ein kleines für ein nicht gesetztes - die Datei wurde natürlich riesig!

Nach Hause zurückgekehrt optimierte ich die Codierung (halbe Bytes, in den ASCII-Bereich 64 bis 96 geshiftet) und entdeckte eines Tages in einer Zeitschrift, dass jemand anders so etwas auch schon erfunden hatte.
WDR_Vid.jpg
WDR_Vid.jpg (49.12 KiB) 384 mal betrachtet
Nun arbeitete ich mein Programm auf eine leicht variierte Version dieses Verfahrens vom WDR-Computerclub um und habe es inzwischen auch auf andere Computer angepasst.

Es stellt gewissermaßen eine Ergänzung zu BasiCode dar, denn BasiCode kann nur ASCII-Daten übertragen, somit keine Maschinencode-Files (Speicherabzüge des Grafik-RAMs), weil bei diesen alle Werte von 0 bis 255 auftreten können. Drucksteuerzeichen würden möglicherweise auf einer anderen Maschine anders interpretiert werden und die Übertragung scheitern lassen.

Mit dem Programm für die 8-bit-Ataris verbinde ich zum ersten Mal diese beiden Themen miteinander, immerhin liegt ihnen das gleiche Konzept zugrunde.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast