[新連載開始]W65C02マイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
私としてはW65C02をさわるのは全く初めてです。何から何まで未経験です。さてどうなりますでしょうか。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第37回]
●STZ(2)FILL00プログラム
W65C02のSTZ命令はなかなかに面白い命令だと思います。
この命令を使えばメモリの指定範囲を簡単にゼロクリアすることができます。
プログラムの応用としては00に限らずたとえばFFとかE5とかでクリアすることもできるわけですがその場合にはSTZ命令ではなくて普通のSTA命令を使うことになります。
するとSTZなんて命令は不要なのではないかとも思われますがSTZを使うメリットは貴重なアキュムレータを使わなくても良いという点にあると思います。
何はともあれW65C02プログラムの演習サンプルとしてゼロページクリアプログラムとそうではない普通のメモリのクリアプログラム(サンプルとして1000〜10FFを00クリアするプログラム)を作ってみました。
下はゼロページエリア0000〜00FFを00クリアするプログラムです。
;w65c02program 26.7.29 8.7
;
;fill zero $00-$ff
;
org $8000
;
ldx #$00
loop:
stz $00,x
dex
bne loop
stp
;
;end
|
たったこれだけのめちゃめちゃ簡単なプログラムです。
W65C02アセンブラでアセンブルしました。

下ははW65C02アセンブラでアセンブルして生成されたアセンブルリストです。
0000 ;w65c02program 26.7.29 8.7 0000 ; 0000 ;fill zero $00-$ff 0000 ; 8000 org $8000 8000 ; 8000 A200 ldx #$00 8002 loop: 8002 7400 stz $00,x 8004 CA dex 8005 D0FB bne loop 8007 DB stp 8008 ; 8008 ;end |
DEX命令とBNE命令の動作確認というおまけ付きのプログラムになりました。
DEXはXレジスタを−1(decrement)する命令です。
BNEはZフラグが立っていなければ相対ジャンプする命令です。
アセンブラニーモニックとしてはNZ(not zero)ではなくてNE(not equal)から来ているようですが結果がZEROでもEQUALでもZフラグが立ちますから同じことです。
STPはプログラムをストップする命令です。
STPはオリジナルの6502にはない命令です。
W65C02で追加されました。
内部クロックが停止しローパワーモードになります。
ハードウェアリセットのみによって通常モードに復帰します。
fillz00d.binをロードして実行しました。

0000〜00FFが全て00になりました。
もうひとつ類似のプログラムを作りました。
同じSTZ命令を使いますがゼロページではなくてその他のメモリエリアの256バイトを00で埋めます。
サンプルとして1000〜10FFを00で埋めるプログラムfillz10b.asmを作りました。
下はソースプログラムです。
;w65c02program 26.7.28 8.7
;
;fill zero $1000-$10ff
;
org $8000
;
ldx #$00
loop:
stz $1000,x
dex
bne loop
stp
;
;end
|
W65C02アセンブラでアセンブルしました。

下はW65C02アセンブラでアセンブルして生成されたアセンブルリストです。
0000 ;w65c02program 26.7.28 8.7 0000 ; 0000 ;fill zero $1000-$10ff 0000 ; 8000 org $8000 8000 ; 8000 A200 ldx #$00 8002 loop: 8002 9E0010 stz $1000,x 8005 CA dex 8006 D0FA bne loop 8008 DB stp 8009 ; 8009 ;end |
プログラムの実行結果です。

W65C02マイコンボードの製作[第37回]
2026.8.8 upload
前へ
次へ
ホームページトップへ戻る