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


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

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

[第21回]



●/LD(2) プログラムミスがありました

前回は/LDコマンドの説明をするなかでそれ以前に/CMコマンドを使って作成したのと同じプログラムをソースプログラムとして作成しそれをもとにW65C02アセンブラでバイナリファイルを生成して/LDコマンドでRAMに書き込みました。
その後で結果を/DMコマンドで確認しました。
/LDでメモリに書き込んだプログラムは/CMコマンドで作成したプログラムと同じなのであらためて/RUNで実行して確かめることまではしないで終りました。
やっぱり念には念を入れて確認するべきでした。
同じプログラムですと書きましたが同じプログラムではありませんでした。
その後に/RUNで確認したところどうも結果がおかしいのです。
それでよくよく確かめてみたところプログラムミスをしていたことに気が付きました。
前回お見せしたソースプログラムです。
         ;w65c02test 26.7.21
        ;
        org $8000
;
        lda $bb
        sta $12
        stp
;end

下はW65C02アセンブラでアセンブルした結果作成されたリストファイルです。
0000           ;w65c02test 26.7.21
0000            ;
8000            org $8000
8000        ;
8000 A5BB       lda $bb
8002 8512       sta $12
8004 DB         stp
8005        ;end

それ以前に/CMコマンドで作成したマシン語プログラムと違っているところがあります。
お気付きでしょうか?
/CMコマンドで作成したマシン語プログラムの最初のコードはA9でした。
上のリストではそこがA5になっています。
W65C02アセンブラは何しろにわか仕込みですからついうっかりミスをしてしまいました。
こちらが正しいソースプログラムです。
        ;w65c02test 26.7.23
        ;
        org $8000
;
        lda #$bb
        sta $12
        stp
;end

下はW65C02アセンブラでアセンブルした結果作成されたリストファイルです。
0000            ;w65c02test 26.7.23
0000            ;
8000            org $8000
8000        ;
8000 A9BB       lda #$bb
8002 8512       sta $12
8004 DB         stp
8005        ;end

今度はA9になりました。
そういうことだったのでした。
LDA $BBはゼロページアドレス00bbの値をアキュムレータにロードする命令になってしまいます。
もともとのプログラムでは定数の$BBをアキュムレータにロードするつもりでしたからそこはLDA #$BBにしなければいけなかったのでした。
うーん。
つい先入観で当然期待した通りになっていると思い込んでしまっていましたからA9がA5になっていても全く気が付きませんでした。
考えてみればこれは恐いことです。
日常生活でこういう思い違いをすると時に大惨事を招いてしまいます。
思い違いによるミスを防ぐためにも念には念をいれて確認すべきであるとあらためて自戒いたしました。
ということで。
念のため確認をいたしました。
上でアセンブルして生成されたバイナリファイル65c02test4.binをロードしました。

/DMコマンドで確認をしました。
アドレス8000は間違いなくA9になっています。
/CMコマンドで0012の値を確認してから/RUNコマンドを実行しました。

その後でもう一度/CMコマンドを実行して0012の値がBBに変わったことを確認しました。

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

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