Schneider / Amstrad CPC Forum

Amstrad / Schneider CPC => Programmierung => Topic started by: Devilmarkus on 16. August 2020, 16:57:13

Title: Doppelt gepuffert zeichnen
Post by: Devilmarkus on 16. August 2020, 16:57:13
Vielleicht interessiert es ja Jemanden, wie man unter BASIC mit doppeltem Puffer arbeiten kann:

10 AD=&A000:L=&30
20 READ a:POKE AD+P,a
30 P=P+1:IF P=L THEN GOTO 80
40 GOTO 20
50 DATA &3E,&C0,&CD,&08,&BC,&01,&0C,&BC,&ED,&49,&01,&10,&BD,&ED,&49,&C9
60 DATA &3E,&40,&CD,&08,&BC,&01,&0C,&BC,&ED,&49,&01,&30,&BD,&ED,&49,&C9
70 DATA &3E,&C0,&CD,&08,&BC,&01,&0C,&BC,&ED,&49,&01,&30,&BD,&ED,&49,&C9
80 a=0:MODE 1:ON BREAK GOSUB 170:DEG:DEFINT a-Z:PAPER 0:GOSUB 150:CLS:GOSUB 150:CLS
81 WINDOW 11,30,7,22
90 FOR k=0 TO 360 STEP 10
100 GOSUB 150:CLS
110 MOVE 320+150*SIN(k),100+50*COS(k):g=90:FOR l=1 TO 4:DRAW 320+150*SIN(k+g),100+50*COS(k+g):g=g+90:NEXT
120 g=90:FOR l=1 TO 4:MOVE 320,300:DRAW 320+150*SIN(k+g),100+50*COS(k+g):g=g+90:NEXT
130 NEXT
140 GOTO 90
150 IF a=0 THEN CALL &A000:a=1 ELSE a=0:CALL &A010
160 RETURN
170 CALL &A020:END


Assemblercode: (Ohne geht es eben nur sehr umständlich)

; doublebuffer

org &a000
offset4000:
ld a,&c0
call &bc08
ld bc,&bc0c
out (c),c
ld bc,&bd10
out (c),c
ret
offsetC000:
ld a,&40
call &bc08
ld bc,&bc0c
out (c),c
ld bc,&bd30
out (c),c
ret
offsetoff:
ld a,&c0
call &bc08
ld bc,&bc0c
out (c),c
ld bc,&bd30
out (c),c
ret