P6サンプルプログラムコーナー

DEEP! P6! へ戻る

汎用マシン語コピールーチン(2014.1.11)


P6mkIIは、グラフィック画面のGET/PUTがとにかく遅いので、マシン語で汎用コピールーチンを書いてみました。

グラフィック画面に描いてあるデータを、グラフィック画面の別の場所にコピーします。
別のページにコピーすることもできるので、裏画面に描いておいたアニメーションデータを連続で転送するような使い方もできます。

X座標はバイト単位なので、1ドット単位の細かいコピーはできませんが、BASICから使うには十分かと思います。
1000行以降がマシン語プログラムになっているので、ここだけを他のプログラムに持っていけば使えます。
サンプルプログラムはMODE5/PAGE4用でSCREEN3を使っていますが、マシン語部分はMODE5ならどんな場合でも大丈夫です。

使い方は、以下のアドレスにPOKE文でデータをセットして、EXEC&HD000してください。
10 CLEAR 300,&HD000
20 GOSUB 1000
100 REM アニメーションパターン サクセイ
110 SCREEN 3,3,3:CLS
120 LINE(  0+15,19)-(  0+ 16,20),15,B
130 LINE( 32+11,14)-( 32+ 20,25),15,B
140 LINE( 64+ 7, 9)-( 64+ 24,30),15,B
150 LINE( 96+ 3, 4)-( 96+ 28,35),15,B
160 LINE(128+ 0, 0)-(128+ 31,39),15,B
300 REM アニメーション サイセイ
310 SCREEN 3,2,2:CLS
320 POKE GP,&H40:REM PAGE3アドレス ジョウイ
330 POKE PP,&H80:REM PAGE2アドレス ジョウイ
340 POKE SX, 4:REM コピースル Xサイズ/8
350 POKE SY,40:REM コピースル Yサイズ
360 POKE PX,18:REM PUTスル Xザヒョウ/8
370 POKE PY,85:REM PUTスル Yザヒョウ
380 POKE GY, 0:REM GETスル Yザヒョウ
400 FOR I=0 TO 5
410 IF I=0 THEN POKE GX, 0:EXEC &HD000
420 IF I=1 THEN POKE GX, 4:EXEC &HD000
430 IF I=2 THEN POKE GX, 8:EXEC &HD000
440 IF I=3 THEN POKE GX,12:EXEC &HD000
450 IF I=4 THEN POKE GX,16:EXEC &HD000
460 IF I=5 THEN FOR J=0 TO 100:NEXT
470 NEXT
480 GOTO 400
1000 REM マシンゴ
1010 FOR I=&HD000 TO &HD055
1020 READ A$:POKE I,VAL("&H"+A$)
1030 NEXT
1040 GP=&HD00C:GX=&HD005:GY=&HD002
1050 PP=&HD01A:PX=&HD013:PY=&HD010
1060 SX=&HD025:SY=&HD023
1070 RETURN
1100 DATA F3,21,00,00,11,00,00,CD,4C,D0,01,00,40,09,E5,21
1110 DATA 00,00,11,00,00,CD,4C,D0,01,00,80,09,EB,E1,3E,DD
1120 DATA D3,F0,0E,14,06,02,E5,D5,7E,12,CB,EC,CB,EA,7E,12
1130 DATA CB,AC,CB,AA,23,13,10,F0,D1,E1,C5,01,28,00,EB,09
1140 DATA EB,09,C1,0D,20,DE,3E,11,D3,F0,FB,C9,29,29,29,4D
1150 DATA 44,29,29,09,19,C9