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