2026.8.8
前へ
次へ
ホームページトップへ戻る


[新連載開始]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

前へ
次へ
ホームページトップへ戻る