[新連載開始]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
前へ
次へ
ホームページトップへ戻る