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


[新連載開始]W65C02マイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
私としてはW65C02をさわるのは全く初めてです。何から何まで未経験です。さてどうなりますでしょうか。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第36回]



●STZ

初めてさわるCPUということもあって新しく学ぶことが沢山出てきます。
忘れないうちに書いておかなければと思っているのですがなかなかはかどりません。
ここしばらく書いてきましたクロックの問題の裏ではW65C02の命令について検証作業を始めています。
自作したW65C02アセンブラのバグ取りをする一方でW65C02マシン語命令説明書の作成の下書きをするとともに私自身がW65C02のマシン語命令を理解する一助としようという思惑もあってのことです。
実は3回目のW65C02テスト基板を発注しました。
ちょっと悩んでおりましたRAMについてはM68AF127Bを使うという方針が決りました。
それで不要な回路が出てきましたし新たに思いついた機能を確認するための回路変更も必要になったためです。
基板が出来てくるまでの間に進めておきたいこともいろいろあります。
相変わらずホットな毎日です。
しばらくはW65C02アセンブラの検証作業について整理しながら書いていきたいと思います。
まずはLDA、STAについて検証用のプログラムを書いて動作テストをしました(それについては後日書きます)。
その過程で今回のテーマでありますSTZなる命令があることに気が付きました。
なかなかに面白い命令です。
メモリクリアを想定した機能なのでしょうか。
ターゲットのメモリアドレスに00を書き込みます。
STZはフラグは変化しません。
以下の4命令があります。
 ニーモニック  マシン語コード  アセンブラ書式 バイト数 クロック数
 STZ a  9C  STZ $1234  3  4
 STZ a,x  9E  STZ $1234,x   3  5
 STZ zp  64  STZ $12  2  3
 STZ zp,x  74  STZ $12,x  2  4

a a,x zp zp,x はアドレッシングモードです。
aは絶対アドレスでzpはゼロページです。
,xはxの値で修飾することを示します。
W65C02のアドレッシングモードについては[第4回]で説明していますので適宜参照してください。
下はW65C02アセンブラのSTZを検証するために作ったテストプログラム65c02test11b.asmです。
        ;w65c02test11 26.7.28 8/7
        ;
        ;STZ
        ;
        org $8000
        ;
        ldx #$10
        stz $1000
        stz $1001
        stz $1002
        stz $1003
        stz $1000,x
        stz $1001,x
        stz $1002,x
        stz $1003,x
        stz $00
        stz $01
        stz $02
        stz $03
        stz $00,x
        stz $01,x
        stz $02,x
        stz $03,x
        stp
        ;
        ;end

W65C02アセンブラでアセンブルしました。

下はW65C02アセンブラでアセンブルして生成されたアセンブルリストです。
0000            ;w65c02test11 26.7.28 8/7
0000            ;
0000            ;STZ
0000            ;
8000            org $8000
8000            ;
8000 A210       ldx #$10
8002 9C0010     stz $1000
8005 9C0110     stz $1001
8008 9C0210     stz $1002
800B 9C0310     stz $1003
800E 9E0010     stz $1000,x
8011 9E0110     stz $1001,x
8014 9E0210     stz $1002,x
8017 9E0310     stz $1003,x
801A 6400       stz $00
801C 6401       stz $01
801E 6402       stz $02
8020 6403       stz $03
8022 7400       stz $00,x
8024 7401       stz $01,x
8026 7402       stz $02,x
8028 7403       stz $03,x
802A DB         stp
802B            ;
802B            ;end

正しいマシン語コードが生成されていますが念のためそれが正しく実行されるかどうか確認をしてみます。
65c02test11b.binをロードしました。

念のために実行前にターゲットとなるメモリアドレスの中身を確認しておきます。
プログラムの実行によって1000〜1003と1010〜1013および0000〜0003と0010〜0013が00になるはずです。
/DMコマンドで1000〜の中身を確認しました。
/DMコマンドはページ単位(下位アドレスが00〜FF)を表示しますからパラメータは上位8ビットを指定します。
ここではうっかりして4桁のアドレスを入力してしまいましたがその場合下位2桁の入力は無視されます。

0000〜00FFの内容も確認しておきます。

0000の値が00になっています。
動作確認の正確を期すため/CMコマンドでFFに書き換えました。
/CMコマンドは1バイト単位で処理しますから4桁のアドレスを入力します。

/RUNを実行しました。

0000〜0003と0010〜0013が00になりました。

1000〜1003と1010〜1013も00になりました。


W65C02マイコンボードの製作[第36回]
2026.8.7 upload

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