ユーザー操作
目次
6502基本
こちらは、テーブルを使って少し高速化しています。
LDA GAMEPAD ; 4
TAY ; 2
AND #3 ; 2
BEQ UD ; 3 / 2
TAX ; 2
LDA TABLE-1,X ;4
CLC ; 2
ADC MX ; 4
STA MX ; 4
UD:
TYA ;2
AND #$0C ; 2
BEQ TRGA ; 3 / 2
TAX ; 2
LDA TABLE-4,X ;4
CLC ; 2
ADC MY ; 4
STA MY ; 4
TRGA:
LDA PAD_NEW ; 4
ROL A ; 2
BCC TRGB ; 3 / 2
INC TR ; 6
TRGB:
ROL A ; 2
BCC END ; 3 / 2
LDA #0 ; 2
STA TR ; 3
END:
TABLE:
DB -2,2,0,0,2
テーブルは読出しアドレスをうまく細工して、5バイトに納めています。
実は、これを Z80 に移植しようとしたのだけど、逆に遅くなってしまうのであきらめました。
うまくやれば出来ると思うのだけど、どうも Z80 は苦手…
6502 でアセンブラを覚え、インデックスを使うと遅い Z80 で挫折し、再びインデックスが普通に使える 68000 で再勉強したもので…
こちらも、クロックはひたすら数えるしかありません。
何も押されていない時、 32 クロック
右下と A が押されたとき、67 クロック。
左上と B が押されたとき、66 クロック
総計で 165 クロックです。
速度判定
6502 は 165クロック。周波数を考慮して倍にすると、MSX での 330クロック相当の実時間になります。
Z80 は 638クロックなので、差は308クロック。ファミコンが倍速です。
これは多分、僕が Z80 が苦手なせい。多分 Z80 側でもテーブル化するとかして高速に出来ると思うのだけど…