Grafik-Screendump in Datei speichern?

Software-Entwicklung, Compiler, Interpreter, ...
Antworten
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Grafik-Screendump in Datei speichern?

Beitrag von bbock »

Hallo Joyce-Freunde,

nachdem ich mein Apfelmännchen auf dem Bildschirm hatte (siehe hier), konnte ich es zwar ansehen und mit etwas Mühe auch abfotografieren, aber nach stundenlanger Rechenzeit hätte ich das Ergebnis gern in eine Datei gespeichert.

Wie kann ich den Inhalt des Grafikbildschirms in eine Datei speichern? Das Zurückschreiben aus der Datei in den Grafikspeicher wäre natürlich auch sehr nützlich. ;)

Viele Grüße
Bernd
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Re: Grafik-Screendump in Datei speichern?

Beitrag von bbock »

PCWerner hat geschrieben:... mit Brille wäre das nicht passiert :oops:

Die folgenden Zeilen sind nun in allen Listings korrigiert:

54540 DATA E6, F8, CB, 27, CB, 12, 47, 7B, 46F
54550 DATA E6, 07, B0, 5F, C9, 00, 00, 00, 2C5

Ohne Brille habe ich statt "E6" "B6" gelesen.

Jetzt müsste alles funktionieren...

Gruß,
Werner
Hmm - wenn du mich fragst, dann war das "B6" schon richtig, denn das entspricht OR (HL). Der Assembler hat jedenfalls auch "B6" ausgespuckt und nicht "E6".

Mit folgendem Testprogramm konnte ich eine Screenshot-Datei erzeugen:

Code: Alles auswählen

10 GOSUB 50000: REM Init Graphics and load PLOT Machine Code
15 GOSUB 54000: REM Load SCRNSAVE/SCRNLOAD Machine Code
20 GOSUB 51250: REM Clear Screen
30 X%=360: REM X POS
50 Y%=128: REM Y POS
70 F%=1: REM BRUSH STATE (INK/ERASE)
75 REM test line
80 x1%=10:y1%=10:x2%=200:y2%=200
90 GOSUB 51300: REM Draw Line
100 REM test ellipse
110 xCenter%=400: yCenter%=100
120 radiusX%=100: radiusY%=100
130 F%=1:aspectRatio=0.45
140 GOSUB 52000: REM Ellipse
200 a$="SCRN01.DAT" + CHR$(0)
210 CALL SCRNSAVE(a$,e%)
220 IF e%<>0 THEN PRINT "screen save error"
990 GOSUB 51230: REM Show Cursor
1000 STOP
49999 REM Init Graphics
50000 MEMORY &HBFFF:PLOT=&HC000:A=PLOT:E=0
50010 RESTORE 50120
50020 FOR f%=0 TO 14
50030 s%=0
50040 FOR G%=0 TO 7
50050 READ X$:X%=VAL("&H"+X$)
50060 S%=S%+X%:POKE A,X%:A=A+1:NEXT
50070 READ X$:IF S%<>VAL("&H"+X$) THEN E%=E%+1:PRINT "ERROR IN LINE ";10*(F%+5012)
50080 NEXT
50090 IF E%=0 THEN RETURN
50100 PRINT E%;"ERROR";:IF E%=1 THEN PRINT ELSE PRINT "S"
50110 STOP
50120 DATA 0A,32,7C,C0,4E,23,46,21,250
50130 DATA CF,02,A7,ED,42,D8,ED,43,4AF
50140 DATA 78,C0,EB,5E,23,56,7A,A7,41B
50150 DATA C0,93,3D,5F,ED,53,7A,C0,469
50160 DATA F3,ED,73,7D,C0,31,9D,C0,51E
50170 DATA 01,36,C0,CD,5A,FC,E9,00,403
50180 DATA ED,7B,7D,C0,FB,C9,2A,7A,50D
50190 DATA C0,29,11,00,B6,19,5E,23,24A
50200 DATA 56,7B,E6,F8,CB,27,CB,12,47E
50210 DATA 47,7B,E6,07,B0,5F,2A,78,360
50220 DATA C0,45,7D,E6,F8,6F,EB,19,4D3
50230 DATA 78,E6,07,3C,47,AF,37,1F,2ED
50240 DATA 10,FD,47,3A,7C,C0,A7,20,391
50250 DATA 05,78,2F,A6,77,C9,3D,78,347
50260 DATA 20,03,B6,77,C9,AE,77,C9,407
50999 REM Screen On
51000 OUT 248,8
51010 RETURN
51099 REM Screen Off
51100 OUT 248,8
51110 RETURN
51199 REM Hide Cursor
51200 PRINT CHR$(27);"f";
51210 RETURN
51219 REM Show Cursor
51230 PRINT CHR$(27);"e";
51240 RETURN
51249 REM Clear Screen
51250 PRINT CHR$(27)+"H";CHR$(27)+"E";CHR$(27)+"f";
51260 RETURN
51299 REM Line
51300 z%=1
51310 dx%=ABS(x1%-x2%)
51320 dy%=ABS(y1%-y2%)
51330 IF x1%<x2% THEN GOTO 51400
51340 x%=x2%
51350 y%=y2%
51360 IF y2%>y1% THEN z%=-1
51370 GOTO 51430
51400 x%=x1%
51410 y%=y1%
51420 IF y1%>y2% THEN z%=-1
51430 CALL PLOT (x%,y%,F%)
51440 IF dx%+dy%=0 THEN RETURN
51450 IF dx%>dy% THEN GOTO 51610
51470 IF dx%=0 THEN GOTO 51570
51480 REM Steigung >= 1
51490 diff%=dy%/2
51500 FOR i%=1 TO dy%
51510 diff%=diff%+dx%
51520 IF diff%>=dy% THEN diff%=diff%-dy% : x%=x%+1
51530 y%=y%+z%
51540 CALL PLOT (x%,y%,F%)
51550 NEXT i%
51555 GOTO 51790
51560 REM vertikale Linie
51570 FOR i%=1 TO dy%
51580 y%=y%+z%
51590 CALL PLOT (x%,y%,F%)
51600 NEXT i%
51605 GOTO 51790
51610 IF dy%=0 THEN GOTO 51710
51620 REM Steigung < 1
51630 diff%=dx%/2
51640 FOR i%=1 TO dx%
51650 diff%=diff%+dy%
51660 IF diff%>=dx% THEN diff%=diff%-dx% : y%=y%+z%
51670 x%=x%+1
51680 CALL PLOT (x%,y%,F%)
51690 NEXT i%
51700 GOTO 51790
51710 REM horizontale Linie
51720 FOR i%=1 TO dx%
51730 x%=x%+1
51740 CALL PLOT (x%,y%,F%)
51750 NEXT i%
51790 RETURN
51999 REM ellipse(xCenter%, yCenter%, radiusX%, radiusY%, F%)
52000 x%=0: y%=radiusX%: diff%=radiusX%-1
52010 axRatio=aspectRatio*radiusY%/radiusX%
52020 IF diff%<0 THEN y%=y%-1: diff%=diff%+y%+y%
52030 AspRX%=axRatio*x%
52040 AspRY%=axRatio*y%
52041 xcpx%=xCenter%+x%
52042 xcmx%=xCenter%-x%
52043 xcpy%=xCenter%+y%
52044 xcmy%=xCenter%-y%
52045 ycpy%=yCenter%+AspRY%
52046 ycmy%=yCenter%-AspRY%
52047 ycpx%=yCenter%+AspRX%
52048 ycmx%=yCenter%-AspRX%
52050 CALL PLOT (xcpx%,ycpy%,F%)
52060 CALL PLOT (xcmx%,ycpy%,F%)
52070 CALL PLOT (xcpx%,ycmy%,F%)
52080 CALL PLOT (xcmx%,ycmy%,F%)
52090 CALL PLOT (xcpy%,ycpx%,F%)
52100 CALL PLOT (xcmy%,ycpx%,F%)
52110 CALL PLOT (xcpy%,ycmx%,F%)
52120 CALL PLOT (xcmy%,ycmx%,F%)
52130 diff%=diff%-x%-x%-1
52140 x%=x%+1
52150 IF x%<=y% THEN GOTO 52020
52160 RETURN
52999 REM Load Machine Code
53000 RESTORE 53090
53010 A=PLOT
53020 READ X$
53030 IF X$="XX" THEN 53080
53040 X=VAL("&H"+X$)
53050 POKE A,X
53060 A=A+1
53070 GOTO 53020
53080 RETURN
54000 REM Set up SCRNSAVE & SCRNLOAD machine-code routines
54010 MEMORY &HBFFF
54020 SCRNSAVE=&HC400:SCRNLOAD=&HC46D:A=SCRNSAVE:E%=0
54030 RESTORE 54150
54040 FOR F%=0 TO 100
54045 PRINT "Line";10*(F%+5415);" - ";
54050 S%=0
54060 FOR G%=0 TO 15
54070 READ X$
54073 IF X$="$$" THEN GOTO 54120
54075 PRINT X$;" ";
54078 X%=VAL("&H"+X$)
54080 S%=S%+X%:POKE A,X%:A=A+1
54090 NEXT G%
54095 PRINT
54110 NEXT F%
54120 RETURN
54140 END
54150 DATA ED,73,4D,C5,31,6D,C5,D5,CD,DF,C4,CD,2C,C4,CD,04
54160 DATA C5,AF,F5,01,5C,C4,CD,5A,FC,E9,00,CD,3C,C4,F1,3C
54170 DATA FE,20,38,EE,CD,4C,C4,11,00,00,18,6A,0E,16,11,5C
54180 DATA 00,CD,05,00,3C,C0,D1,11,02,00,18,5A,0E,15,11,5C
54190 DATA 00,CD,05,00,A7,C8,D1,11,03,00,18,4A,0E,10,11,5C
54200 DATA 00,CD,05,00,3C,C0,D1,11,04,00,18,3A,CD,29,C5,EB
54210 DATA 11,6D,C5,01,D0,02,ED,B0,C9,3C,00,4A,00,ED,73,4D
54220 DATA C5,31,6D,C5,D5,CD,DF,C4,CD,B3,C4,CD,04,C5,AF,F5
54230 DATA CD,C3,C4,F1,F5,01,D3,C4,CD,5A,FC,E9,00,F1,3C,FE
54240 DATA 20,38,EC,11,00,00,D5,0E,1A,ED,5B,49,C5,CD,05,00
54250 DATA 0E,2C,3A,4B,C5,5F,CD,05,00,D1,E1,73,23,72,ED,7B
54260 DATA 4D,C5,C9,0E,0F,11,5C,00,CD,05,00,3C,C0,D1,11,02
54270 DATA 00,18,D3,0E,14,11,5C,00,CD,05,00,A7,C8,D1,11,03
54280 DATA 00,18,C3,CD,29,C5,21,6D,C5,01,D0,02,ED,B0,C9,7E
54290 DATA A7,28,1B,23,5E,23,56,21,45,C5,73,23,72,23,36,5C
54300 DATA 23,36,00,0E,98,11,45,C5,CD,05,00,7C,B5,C8,D1,11
54310 DATA 01,00,18,A6,0E,31,11,69,C4,CD,05,00,22,49,C5,0E
54320 DATA 1A,11,6D,C5,CD,05,00,0E,31,11,6B,C4,CD,05,00,32
54330 DATA 4B,C5,0E,2C,1E,06,C3,05,00,6F,26,00,29,29,29,29
54340 DATA 11,00,B6,19,5E,23,56,7B,B6,F8,CB,27,CB,12,47,7B
54350 DATA B6,07,B0,5F,C9,00,00,00,00,$$
Das Programm zeichnet eine Gerade und einen Kreis und speichert das Bild als "SCRN01.DAT" auf der Diskette. Jedenfalls wird irgend etwas gespeichert - den Inhalt der Datei konnte ich noch nicht prüfen.
Ab Zeile 54000 steht der modifizierte Code zum Laden der SCRNSAVE & SCRNLOAD Routinen. Auf die Prüfsummen habe ich verzichtet; die DATA-Zeilen wurden aus dem Assembler-Output generiert und nicht manuell eingetippt.
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Re: Grafik-Screendump in Datei speichern?

Beitrag von bbock »

Mit folgendem Programm habe ich versucht den Screenshot wieder zu laden:

Code: Alles auswählen

10 REM Load screendump
15 GOSUB 54000: REM Load SCRNSAVE/SCRNLOAD Machine Code
200 a$="SCRN01.DAT" + CHR$(0)
210 CALL SCRNLOAD(a$,e%)
220 IF e%<>0 THEN PRINT "file load error"
990 GOSUB 51230: REM Show Cursor
1000 STOP
50999 REM Screen On
51000 OUT 248,8
51010 RETURN
51099 REM Screen Off
51100 OUT 248,8
51110 RETURN
51199 REM Hide Cursor
51200 PRINT CHR$(27);"f";
51210 RETURN
51219 REM Show Cursor
51230 PRINT CHR$(27);"e";
51240 RETURN
51249 REM Clear Screen
51250 PRINT CHR$(27)+"H";CHR$(27)+"E";CHR$(27)+"f";
51260 RETURN
54000 REM Set up SCRNSAVE & SCRNLOAD machine-code routines
54010 MEMORY &HBFFF
54020 SCRNSAVE=&HC400:SCRNLOAD=&HC46D:A=SCRNSAVE:E%=0
54030 RESTORE 54150
54040 FOR F%=0 TO 100
54045 PRINT "Line";10*(F%+5415);" - ";
54050 S%=0
54060 FOR G%=0 TO 15
54070 READ X$
54073 IF X$="$$" THEN GOTO 54120
54075 PRINT X$;" ";
54078 X%=VAL("&H"+X$)
54080 S%=S%+X%:POKE A,X%:A=A+1
54090 NEXT G%
54095 PRINT
54110 NEXT F%
54120 RETURN
54140 END
54150 DATA ED,73,4D,C5,31,6D,C5,D5,CD,DF,C4,CD,2C,C4,CD,04
54160 DATA C5,AF,F5,01,5C,C4,CD,5A,FC,E9,00,CD,3C,C4,F1,3C
54170 DATA FE,20,38,EE,CD,4C,C4,11,00,00,18,6A,0E,16,11,5C
54180 DATA 00,CD,05,00,3C,C0,D1,11,02,00,18,5A,0E,15,11,5C
54190 DATA 00,CD,05,00,A7,C8,D1,11,03,00,18,4A,0E,10,11,5C
54200 DATA 00,CD,05,00,3C,C0,D1,11,04,00,18,3A,CD,29,C5,EB
54210 DATA 11,6D,C5,01,D0,02,ED,B0,C9,3C,00,4A,00,ED,73,4D
54220 DATA C5,31,6D,C5,D5,CD,DF,C4,CD,B3,C4,CD,04,C5,AF,F5
54230 DATA CD,C3,C4,F1,F5,01,D3,C4,CD,5A,FC,E9,00,F1,3C,FE
54240 DATA 20,38,EC,11,00,00,D5,0E,1A,ED,5B,49,C5,CD,05,00
54250 DATA 0E,2C,3A,4B,C5,5F,CD,05,00,D1,E1,73,23,72,ED,7B
54260 DATA 4D,C5,C9,0E,0F,11,5C,00,CD,05,00,3C,C0,D1,11,02
54270 DATA 00,18,D3,0E,14,11,5C,00,CD,05,00,A7,C8,D1,11,03
54280 DATA 00,18,C3,CD,29,C5,21,6D,C5,01,D0,02,ED,B0,C9,7E
54290 DATA A7,28,1B,23,5E,23,56,21,45,C5,73,23,72,23,36,5C
54300 DATA 23,36,00,0E,98,11,45,C5,CD,05,00,7C,B5,C8,D1,11
54310 DATA 01,00,18,A6,0E,31,11,69,C4,CD,05,00,22,49,C5,0E
54320 DATA 1A,11,6D,C5,CD,05,00,0E,31,11,6B,C4,CD,05,00,32
54330 DATA 4B,C5,0E,2C,1E,06,C3,05,00,6F,26,00,29,29,29,29
54340 DATA 11,00,B6,19,5E,23,56,7B,B6,F8,CB,27,CB,12,47,7B
54350 DATA B6,07,B0,5F,C9,00,00,00,00,$$
Ab Zeile 54000 steht wieder das Ladeprogramm für SCRNSAVE & SCRNLOAD. In Zeile 210 wird die Datei "SCRN01.DAT" geladen. Allerdings erscheint auf dem Bildschirm nicht die erwartete Grafik, sondern wirre "Pixelsuppe", immer eine Textzeile "Pixelsuppe", dann werden eine oder zwei Zeilen übersprungen, dann wieder "Pixelsuppe" usw.

Da ist noch was faul...

Gruß
Bernd
Benutzeravatar
PCWerner
Beiträge: 7
Registriert: 10.02.2015, 15:25

Re: Grafik-Screendump in Datei speichern?

Beitrag von PCWerner »

... Mist, ich habe vergesen, im Artikel "MANDELBROT PLOT" die entsprechenden Zeilen zu ändern :oops:

Es stimmt, dass der Assembler keinen Syntaxfehler liefert für die Folge "B6 ..". Der Assemblercode ist entstanden aus dem Abtippen der Zeilen von Hand und da hat sich ein Fehler bei der OCR ergeben.

Der Assemblercode

or (hl)
ret m
sla a
rl d
ld b,a
ld a,e
or (hl)
rlca

ist flasch, es muss tatsächlich heißen

and 11111000b
sla a
rl d
ld b,a
ld a,e
and 00000111b

Sonst ist die Adressberechnung im Bildschirmspeicher völlig falsch!!! Das erklärt vielleicht das beschriebene Verhalten...

Gruß,
Werner

PS: Ich werde die restlichen Fehler schnellstens korrigieren :D
Benutzeravatar
bbock
Beiträge: 242
Registriert: 08.02.2015, 15:31

Re: Grafik-Screendump in Datei speichern?

Beitrag von bbock »

Nun habe ich in meinen beiden Testprogrammen wieder die beiden "B6" durch "E6" ersetzt und siehe da: alles funktioniert jetzt bestens! So eine Brille wirkt doch Wunder. :lol:

Hier sind die korrigierten Testprogramme:

Code: Alles auswählen

10 GOSUB 50000: REM Init Graphics and load PLOT Machine Code
15 GOSUB 54000: REM Load SCRNSAVE/SCRNLOAD Machine Code
20 GOSUB 51250: REM Clear Screen
30 X%=360: REM X POS
50 Y%=128: REM Y POS
70 F%=1: REM BRUSH STATE (INK/ERASE)
75 REM test line
80 x1%=10:y1%=10:x2%=200:y2%=200
90 GOSUB 51300: REM Draw Line
100 REM test ellipse
110 xCenter%=400: yCenter%=100
120 radiusX%=100: radiusY%=100
130 F%=1:aspectRatio=0.45
140 GOSUB 52000: REM Ellipse
200 a$="SCRN01.DAT" + CHR$(0)
210 CALL SCRNSAVE(a$,e%)
220 IF e%<>0 THEN PRINT "screen save error"
990 GOSUB 51230: REM Show Cursor
1000 STOP
49999 REM Init Graphics
50000 MEMORY &HBFFF:PLOT=&HC000:A=PLOT:E=0
50010 RESTORE 50120
50020 FOR f%=0 TO 14
50030 s%=0
50040 FOR G%=0 TO 7
50050 READ X$:X%=VAL("&H"+X$)
50060 S%=S%+X%:POKE A,X%:A=A+1:NEXT
50070 READ X$:IF S%<>VAL("&H"+X$) THEN E%=E%+1:PRINT "ERROR IN LINE ";10*(F%+5012)
50080 NEXT
50090 IF E%=0 THEN RETURN
50100 PRINT E%;"ERROR";:IF E%=1 THEN PRINT ELSE PRINT "S"
50110 STOP
50120 DATA 0A,32,7C,C0,4E,23,46,21,250
50130 DATA CF,02,A7,ED,42,D8,ED,43,4AF
50140 DATA 78,C0,EB,5E,23,56,7A,A7,41B
50150 DATA C0,93,3D,5F,ED,53,7A,C0,469
50160 DATA F3,ED,73,7D,C0,31,9D,C0,51E
50170 DATA 01,36,C0,CD,5A,FC,E9,00,403
50180 DATA ED,7B,7D,C0,FB,C9,2A,7A,50D
50190 DATA C0,29,11,00,B6,19,5E,23,24A
50200 DATA 56,7B,E6,F8,CB,27,CB,12,47E
50210 DATA 47,7B,E6,07,B0,5F,2A,78,360
50220 DATA C0,45,7D,E6,F8,6F,EB,19,4D3
50230 DATA 78,E6,07,3C,47,AF,37,1F,2ED
50240 DATA 10,FD,47,3A,7C,C0,A7,20,391
50250 DATA 05,78,2F,A6,77,C9,3D,78,347
50260 DATA 20,03,B6,77,C9,AE,77,C9,407
50999 REM Screen On
51000 OUT 248,8
51010 RETURN
51099 REM Screen Off
51100 OUT 248,8
51110 RETURN
51199 REM Hide Cursor
51200 PRINT CHR$(27);"f";
51210 RETURN
51219 REM Show Cursor
51230 PRINT CHR$(27);"e";
51240 RETURN
51249 REM Clear Screen
51250 PRINT CHR$(27)+"H";CHR$(27)+"E";CHR$(27)+"f";
51260 RETURN
51299 REM Line
51300 z%=1
51310 dx%=ABS(x1%-x2%)
51320 dy%=ABS(y1%-y2%)
51330 IF x1%<x2% THEN GOTO 51400
51340 x%=x2%
51350 y%=y2%
51360 IF y2%>y1% THEN z%=-1
51370 GOTO 51430
51400 x%=x1%
51410 y%=y1%
51420 IF y1%>y2% THEN z%=-1
51430 CALL PLOT (x%,y%,F%)
51440 IF dx%+dy%=0 THEN RETURN
51450 IF dx%>dy% THEN GOTO 51610
51470 IF dx%=0 THEN GOTO 51570
51480 REM Steigung >= 1
51490 diff%=dy%/2
51500 FOR i%=1 TO dy%
51510 diff%=diff%+dx%
51520 IF diff%>=dy% THEN diff%=diff%-dy% : x%=x%+1
51530 y%=y%+z%
51540 CALL PLOT (x%,y%,F%)
51550 NEXT i%
51555 GOTO 51790
51560 REM vertikale Linie
51570 FOR i%=1 TO dy%
51580 y%=y%+z%
51590 CALL PLOT (x%,y%,F%)
51600 NEXT i%
51605 GOTO 51790
51610 IF dy%=0 THEN GOTO 51710
51620 REM Steigung < 1
51630 diff%=dx%/2
51640 FOR i%=1 TO dx%
51650 diff%=diff%+dy%
51660 IF diff%>=dx% THEN diff%=diff%-dx% : y%=y%+z%
51670 x%=x%+1
51680 CALL PLOT (x%,y%,F%)
51690 NEXT i%
51700 GOTO 51790
51710 REM horizontale Linie
51720 FOR i%=1 TO dx%
51730 x%=x%+1
51740 CALL PLOT (x%,y%,F%)
51750 NEXT i%
51790 RETURN
51999 REM ellipse(xCenter%, yCenter%, radiusX%, radiusY%, F%)
52000 x%=0: y%=radiusX%: diff%=radiusX%-1
52010 axRatio=aspectRatio*radiusY%/radiusX%
52020 IF diff%<0 THEN y%=y%-1: diff%=diff%+y%+y%
52030 AspRX%=axRatio*x%
52040 AspRY%=axRatio*y%
52041 xcpx%=xCenter%+x%
52042 xcmx%=xCenter%-x%
52043 xcpy%=xCenter%+y%
52044 xcmy%=xCenter%-y%
52045 ycpy%=yCenter%+AspRY%
52046 ycmy%=yCenter%-AspRY%
52047 ycpx%=yCenter%+AspRX%
52048 ycmx%=yCenter%-AspRX%
52050 CALL PLOT (xcpx%,ycpy%,F%)
52060 CALL PLOT (xcmx%,ycpy%,F%)
52070 CALL PLOT (xcpx%,ycmy%,F%)
52080 CALL PLOT (xcmx%,ycmy%,F%)
52090 CALL PLOT (xcpy%,ycpx%,F%)
52100 CALL PLOT (xcmy%,ycpx%,F%)
52110 CALL PLOT (xcpy%,ycmx%,F%)
52120 CALL PLOT (xcmy%,ycmx%,F%)
52130 diff%=diff%-x%-x%-1
52140 x%=x%+1
52150 IF x%<=y% THEN GOTO 52020
52160 RETURN
52999 REM Load Machine Code
53000 RESTORE 53090
53010 A=PLOT
53020 READ X$
53030 IF X$="XX" THEN 53080
53040 X=VAL("&H"+X$)
53050 POKE A,X
53060 A=A+1
53070 GOTO 53020
53080 RETURN
54000 REM Set up SCRNSAVE & SCRNLOAD machine-code routines
54010 MEMORY &HBFFF
54020 SCRNSAVE=&HC400:SCRNLOAD=&HC46D:A=SCRNSAVE:E%=0
54030 RESTORE 54150
54040 FOR F%=0 TO 100
54045 PRINT "Line";10*(F%+5415);" - ";
54050 S%=0
54060 FOR G%=0 TO 15
54070 READ X$
54073 IF X$="$$" THEN GOTO 54120
54075 PRINT X$;" ";
54078 X%=VAL("&H"+X$)
54080 S%=S%+X%:POKE A,X%:A=A+1
54090 NEXT G%
54095 PRINT
54110 NEXT F%
54120 RETURN
54140 END
54150 DATA ED,73,4D,C5,31,6D,C5,D5,CD,DF,C4,CD,2C,C4,CD,04
54160 DATA C5,AF,F5,01,5C,C4,CD,5A,FC,E9,00,CD,3C,C4,F1,3C
54170 DATA FE,20,38,EE,CD,4C,C4,11,00,00,18,6A,0E,16,11,5C
54180 DATA 00,CD,05,00,3C,C0,D1,11,02,00,18,5A,0E,15,11,5C
54190 DATA 00,CD,05,00,A7,C8,D1,11,03,00,18,4A,0E,10,11,5C
54200 DATA 00,CD,05,00,3C,C0,D1,11,04,00,18,3A,CD,29,C5,EB
54210 DATA 11,6D,C5,01,D0,02,ED,B0,C9,3C,00,4A,00,ED,73,4D
54220 DATA C5,31,6D,C5,D5,CD,DF,C4,CD,B3,C4,CD,04,C5,AF,F5
54230 DATA CD,C3,C4,F1,F5,01,D3,C4,CD,5A,FC,E9,00,F1,3C,FE
54240 DATA 20,38,EC,11,00,00,D5,0E,1A,ED,5B,49,C5,CD,05,00
54250 DATA 0E,2C,3A,4B,C5,5F,CD,05,00,D1,E1,73,23,72,ED,7B
54260 DATA 4D,C5,C9,0E,0F,11,5C,00,CD,05,00,3C,C0,D1,11,02
54270 DATA 00,18,D3,0E,14,11,5C,00,CD,05,00,A7,C8,D1,11,03
54280 DATA 00,18,C3,CD,29,C5,21,6D,C5,01,D0,02,ED,B0,C9,7E
54290 DATA A7,28,1B,23,5E,23,56,21,45,C5,73,23,72,23,36,5C
54300 DATA 23,36,00,0E,98,11,45,C5,CD,05,00,7C,B5,C8,D1,11
54310 DATA 01,00,18,A6,0E,31,11,69,C4,CD,05,00,22,49,C5,0E
54320 DATA 1A,11,6D,C5,CD,05,00,0E,31,11,6B,C4,CD,05,00,32
54330 DATA 4B,C5,0E,2C,1E,06,C3,05,00,6F,26,00,29,29,29,29
54340 DATA 11,00,B6,19,5E,23,56,7B,E6,F8,CB,27,CB,12,47,7B
54350 DATA E6,07,B0,5F,C9,00,00,00,00,$$

Code: Alles auswählen

10 REM Load screendump
15 GOSUB 54000: REM Load SCRNSAVE/SCRNLOAD Machine Code
200 a$="SCRN01.DAT" + CHR$(0)
210 CALL SCRNLOAD(a$,e%)
220 IF e%<>0 THEN PRINT "file load error"
990 GOSUB 51230: REM Show Cursor
1000 STOP
50999 REM Screen On
51000 OUT 248,8
51010 RETURN
51099 REM Screen Off
51100 OUT 248,8
51110 RETURN
51199 REM Hide Cursor
51200 PRINT CHR$(27);"f";
51210 RETURN
51219 REM Show Cursor
51230 PRINT CHR$(27);"e";
51240 RETURN
51249 REM Clear Screen
51250 PRINT CHR$(27)+"H";CHR$(27)+"E";CHR$(27)+"f";
51260 RETURN
54000 REM Set up SCRNSAVE & SCRNLOAD machine-code routines
54010 MEMORY &HBFFF
54020 SCRNSAVE=&HC400:SCRNLOAD=&HC46D:A=SCRNSAVE:E%=0
54030 RESTORE 54150
54040 FOR F%=0 TO 100
54045 PRINT "Line";10*(F%+5415);" - ";
54050 S%=0
54060 FOR G%=0 TO 15
54070 READ X$
54073 IF X$="$$" THEN GOTO 54120
54075 PRINT X$;" ";
54078 X%=VAL("&H"+X$)
54080 S%=S%+X%:POKE A,X%:A=A+1
54090 NEXT G%
54095 PRINT
54110 NEXT F%
54120 RETURN
54140 END
54150 DATA ED,73,4D,C5,31,6D,C5,D5,CD,DF,C4,CD,2C,C4,CD,04
54160 DATA C5,AF,F5,01,5C,C4,CD,5A,FC,E9,00,CD,3C,C4,F1,3C
54170 DATA FE,20,38,EE,CD,4C,C4,11,00,00,18,6A,0E,16,11,5C
54180 DATA 00,CD,05,00,3C,C0,D1,11,02,00,18,5A,0E,15,11,5C
54190 DATA 00,CD,05,00,A7,C8,D1,11,03,00,18,4A,0E,10,11,5C
54200 DATA 00,CD,05,00,3C,C0,D1,11,04,00,18,3A,CD,29,C5,EB
54210 DATA 11,6D,C5,01,D0,02,ED,B0,C9,3C,00,4A,00,ED,73,4D
54220 DATA C5,31,6D,C5,D5,CD,DF,C4,CD,B3,C4,CD,04,C5,AF,F5
54230 DATA CD,C3,C4,F1,F5,01,D3,C4,CD,5A,FC,E9,00,F1,3C,FE
54240 DATA 20,38,EC,11,00,00,D5,0E,1A,ED,5B,49,C5,CD,05,00
54250 DATA 0E,2C,3A,4B,C5,5F,CD,05,00,D1,E1,73,23,72,ED,7B
54260 DATA 4D,C5,C9,0E,0F,11,5C,00,CD,05,00,3C,C0,D1,11,02
54270 DATA 00,18,D3,0E,14,11,5C,00,CD,05,00,A7,C8,D1,11,03
54280 DATA 00,18,C3,CD,29,C5,21,6D,C5,01,D0,02,ED,B0,C9,7E
54290 DATA A7,28,1B,23,5E,23,56,21,45,C5,73,23,72,23,36,5C
54300 DATA 23,36,00,0E,98,11,45,C5,CD,05,00,7C,B5,C8,D1,11
54310 DATA 01,00,18,A6,0E,31,11,69,C4,CD,05,00,22,49,C5,0E
54320 DATA 1A,11,6D,C5,CD,05,00,0E,31,11,6B,C4,CD,05,00,32
54330 DATA 4B,C5,0E,2C,1E,06,C3,05,00,6F,26,00,29,29,29,29
54340 DATA 11,00,B6,19,5E,23,56,7B,E6,F8,CB,27,CB,12,47,7B
54350 DATA E6,07,B0,5F,C9,00,00,00,00,$$
Vielen Dank für deine Hilfe, Werner! :idea:

Jetzt kann ich mein Apfelmännchen nochmal berechnen und das Ergebnis auch speichern. Vielleicht stricke ich noch ein Programm um die Screenshot-Datei in ein gängiges Grafikformat umzuwandeln (BMP z.B.).

Viele Grüße
Bernd
Antworten