Die Suche ergab 233 Treffer

von bbock
26.12.2015, 20:11
Forum: Spiele
Thema: Käsekästchen für Joyce / PCW
Antworten: 13
Zugriffe: 109156

Re: Käsekästchen für Joyce / PCW

Hallo sucram,

endlich habe ich mal wieder ein bisschen Zeit für mein Hobby gefunden. Dein Spiel finde ich sehr gelungen. Ich hatte etwas zu tun um es auf meiner Joyce zum Laufen zu bringen, weil ich es auf einer 3,5"-Diskette speichern musste. Ich bin folgendermaßen vorgegangen:

- 3,5"-Diskette in der Joyce mit disckit formatiert
- Datei GSXKK.DSK mit ManageDsk v0.20g geöffnet (READ DSK button)
- Export: Without header (wichtig!)
- Alle Dateien markiert, dann Export file(s) button
- Zielverzeichnis gewählt und alle Dateien gespeichert (man muss jede Datei einzeln bestätigen)
- Exportierte Dateien via TotalCommander und cpmwfx-Plugin auf die Diskette kopiert
- An der Joyce auf Laufwerk B: gewechselt und mit GSXKK gestartet

Vielleicht nützt die Schritt-für-Schritt-Beschreibung jemandem.

Viele Grüße
Bernd
von bbock
02.09.2015, 16:43
Forum: Verschiedenes
Thema: Joyce Treffen 2015 in Wolfhagen
Antworten: 11
Zugriffe: 66575

Re: Joyce Treffen 2015 in Wolfhagen

Hallo schombi,

Platz gibt's reichlich; das sollte gar kein Problem sein. Ich kann diesmal leider nicht kommen ("muss" zu einer Feier, runder Geburtstag).

Gruß
Bernd
von bbock
12.08.2015, 22:15
Forum: Programmierung
Thema: Ports mit Turbo Pascal abfragen
Antworten: 2
Zugriffe: 27977

Re: Ports mit Turbo Pascal abfragen

Hallo Marcus,

die bios-Funktion ruft meines Wissens eine Funktionsnummer mit einem Parameter auf, also bios(FNr, Param); das hat nichts mit einem Assembler-OUT zu tun. Wie man einen OUT-Befehl via Turbo Pascal erzeugen kann, habe ich gerade nicht parat. Ich werde aber nochmal recherchieren.

Viele Grüße
Bernd
von bbock
17.05.2015, 19:05
Forum: Programmierung
Thema: Wann habt ihr zuletzt ein Apfelmännchen programmiert?
Antworten: 21
Zugriffe: 86543

Re: Wann habt ihr zuletzt ein Apfelmännchen programmiert?

Hier ist ein Screenshot des Apfelmännchens:
apfelm01.zip
(6.28 KiB) 1794-mal heruntergeladen
Die ZIP-Datei enthält den Screenshot APFELM01.DAT, der mit folgendem Programm eingelesen und betrachtet werden kann:

Code: Alles auswählen

10 REM Load screendump
15 GOSUB 54000: REM Load SCRNSAVE/SCRNLOAD Machine Code
200 a$="APFELM01.DAT" + CHR$(0)
210 CALL SCRNLOAD(a$,e%)
220 IF e%<>0 THEN PRINT "file load error"
230 IF INKEY$="" THEN 230
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
54050 S%=0
54060 FOR G%=0 TO 15
54070 READ X$
54073 IF X$="$$" THEN GOTO 54120
54078 X%=VAL("&H"+X$)
54080 S%=S%+X%:POKE A,X%:A=A+1
54090 NEXT G%
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,$$
Danke nochmal an Werner; ohne dich wäre es sehr viel komplizierter gewesen dieses Projekt zu realisieren.

Viele Grüße
Bernd
von bbock
17.05.2015, 18:55
Forum: Programmierung
Thema: Wann habt ihr zuletzt ein Apfelmännchen programmiert?
Antworten: 21
Zugriffe: 86543

Re: Wann habt ihr zuletzt ein Apfelmännchen programmiert?

Hier ist nun das Apfelmännchen-Programm, das die Mandelbrotmenge nicht nur berechnet, sondern auch den Screenshot als "APFELM01.DAT" speichert:

Code: Alles auswählen

10 REM Apfelmaennchen
20 GOSUB 50000:REM Load graphics machine code
25 GOSUB 54000:REM Load SCRNSAVE & SCRNLOAD mc
30 GOSUB 50280:REM Init graphics
40 f%=1
50 GOSUB 50430:REM Clear screen
60 GOTO 310
70 REM iter(cx,cy)
80 cnt%=0
90 zx=0: zy=0
100 zxq=0: zyq=0
110 cxq=cx*cx: cyq=cy*cy
120 r=cxq+cyq
130 s=SQR(r-0.5*cx+0.0625)
140 IF (16*r*s>5*s-4*cx+1) AND ((cx+1)*(cx+1)+cyq>0.0625) THEN 240
150 cnt%=maxIt%
160 RETURN
170 REM zeichne Punkt
180 GOSUB 80
190 cnt2=cnt%/2
200 IF cnt2<>INT(cnt2) THEN RETURN
210 CALL plot(x%,y%,f%)
215 y2%=hoehe%-y%
220 CALL plot(x%,y2%,f%)
230 RETURN
240 zy=2*zx*zy+cy
250 zx=zxq-zyq+cx
260 zxq=zx*zx
270 zyq=zy*zy
280 cnt%=cnt%+1
290 IF (zxq+zyq<4) AND (cnt%<maxIt%) THEN 240
300 RETURN
310 REM zeichne
320 breite%=720:hoehe%=256
330 maxIt%=100
340 xa=-2.05:xe=0.75
350 ya=-0.9625:ye=0.9625
360 y0Pkt%=INT(ye/(ye-ya)*hoehe%)
370 dx=(xe-xa)/breite%
380 dy=(ye-ya)/hoehe%
390 cx=xa
400 FOR x%=0 TO breite%-1
410 cy=0
420 FOR y%=y0Pkt% TO hoehe%-1
430 GOSUB 180
440 cy=cy-dy
450 NEXT y%
460 cx=cx+dx
470 NEXT x%
480 REM Save screenshot
490 a$="APFELM01.DAT" + CHR$(0)
500 CALL SCRNSAVE(a$,e%)
510 IF e%<>0 THEN PRINT "screen save error"
520 IF INKEY$="" THEN 520
999 STOP
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 PRIMT 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
50270 REM Init Graphics
50280 aspectRatio=0.45
50290 RETURN
50300 REM Screen On
50310 OUT 248,8
50320 RETURN
50330 REM Screen Off
50340 OUT 248,8
50350 RETURN
50360 REM Hide Cursor
50370 PRINT CHR$(27);"f";
50380 RETURN
50390 REM Show Cursor
50400 PRINT CHR$(27);"e";
50410 RETURN
50420 REM Clear Screen
50430 PRINT CHR$(27)+"H";CHR$(27)+"E";CHR$(27)+"f"
50440 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
54050 S%=0
54060 FOR G%=0 TO 15
54070 READ X$
54073 IF X$="$$" THEN GOTO 54120
54078 X%=VAL("&H"+X$)
54080 S%=S%+X%:POKE A,X%:A=A+1
54090 NEXT G%
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,$$
Das Programm hat noch Raum für Verbesserungen wie z.B. die freie Wahl des zu berechnenden Ausschnitts (z.Z. hard coded in Zeilen 340 und 350), der maximalen Iterationstiefe (z.Z. hard coded in Zeile 330) oder einer Zeitmessung der Berechnungsdauer. Außerdem sind momentan zwei Maschinencode-Laderoutinen vorhanden; das könnte man auch mit einer erledigen.
von bbock
21.04.2015, 08:41
Forum: Verschiedenes
Thema: Joyce Treffen 2015 in Wolfhagen
Antworten: 11
Zugriffe: 66575

Re: Joyce Treffen 2015 in Wolfhagen

Ich bin für's gemeinsame Abendessen im Restaurant. :)

Gruß
Bernd
von bbock
13.04.2015, 19:58
Forum: Programmierung
Thema: Grafik-Screendump in Datei speichern?
Antworten: 4
Zugriffe: 37204

Re: Grafik-Screendump in Datei speichern?

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
von bbock
12.04.2015, 13:43
Forum: Programmierung
Thema: Grafik-Screendump in Datei speichern?
Antworten: 4
Zugriffe: 37204

Re: Grafik-Screendump in Datei speichern?

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
von bbock
12.04.2015, 13:38
Forum: Programmierung
Thema: Grafik-Screendump in Datei speichern?
Antworten: 4
Zugriffe: 37204

Re: Grafik-Screendump in Datei speichern?

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.
von bbock
12.04.2015, 13:32
Forum: Programmierung
Thema: Wann habt ihr zuletzt ein Apfelmännchen programmiert?
Antworten: 21
Zugriffe: 86543

Re: Wann habt ihr zuletzt ein Apfelmännchen programmiert?

Wir sollten die Diskussion bzgl. Laden / Speichern von Screenshots hier weiterführen.

Bernd