Mit dem Rahmen von Bernds Programm als Grundlage habe ich mal ein Programm gebastelt, das einen Ausschnitt der Apfelmännchen-Grafik zeichnen und abspeichern kann:
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
1000 HG%=720:VG%=256:GOTO 1010:REM APFELMAENNCHEN ANDREA UND ULF KINDERMANN PRACTIC 2/88
1002 YC=YU+(M%+M1%+M2%+M3%)*DY:XC=XU+(N%+N1%+N2%+N3%)*DX:K=0:XZ=0:YZ=0:
1003 K=K+1:XX=XZ*XZ:YY=YZ*YZ:YZ=2*XZ*YZ-YC:XZ=XX-YY-XC:IF K=KX THEN GOTO 1005
1004 IF XX+YY<100 THEN GOTO 1003
1005 f%=CINT(K-INT(K/2)*2)
1006 IF f%<>0 THEN GOSUB 2500
1007 RETURN
1010 GOSUB 50430:REM Clear screen
2020 XU=1.43349:XO=1.43354
2030 YU=-0.00004:YO=0
2040 KX=70:REM Iterationstiefe
2050 DX=(XO-XU)/HG%:DY=(YO-YU)/VG%
2060 FOR N3%=0 TO 1 STEP 1:FOR M3%=0 TO 1 STEP 1:FOR N2%=0 TO 2 STEP 2:FOR M2%=0 TO 2 STEP 2
2070 FOR N1%=0 TO 4 STEP 4:FOR M1%=0 TO 4 STEP 4:FOR N%=0 TO HG%-1 STEP 8:FOR M%=0 TO VG%-1 STEP 8
2080 GOSUB 1002
2180 NEXT M%:NEXT N%:NEXT M1%:NEXT N1%
2190 NEXT M2%:NEXT N2%:NEXT M3%:NEXT N3%
2200 GOTO 49995
2500 REM UP-PSET(N,M)
2502 x%=N%+N1%+N2%+N3%:y%=M%+M1%+M2%+M3%:CC(0)=F:CALL plot(x%,y%,f%):RETURN
49994 REM Save screenshot
49995 a$="M:APFELM03.DAT" + CHR$(0)
49996 CALL SCRNSAVE(a$,e%)
49997 IF e%<>0 THEN PRINT "screen save error"
49998 IF INKEY$="" THEN 49998
49999 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,$$
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,
Die Grenzen des gewünschten Bereichs können in den Zeilen 2020 und 2030 eingestellt werden. allerdings dauert es um so länger, je tiefer man "hineinzoomt", auch mit dem Habisoft-Emulator und F11 Stunden.
Um schneller abschätzen zu können, ob der Bereich "ergiebig" ist, ist die Reihenfolge der Pixel so gestaffelt, dass man erst einmal einen groben Überblick bekommt. Besser ist, dieses Programm:
zu ziehen, anschließend zum Starten ins Monitor-Fenster klicken.
Hier läuft es wesentlich schneller (dafür im Fenster Settings den Regler Speed auf das Maximum ziehen) und man hat sogar acht statt zwei Farben. Als Website abgespeichert kann dieses Programm auch offline genutzt werden.
als SCR-Datei zum Laden mit dem Programm aus dem vorigen Beitrag.