SSブログ

6809でオリジナルモニタ(1) [6809]

色々手を出して全てが中途半端になってしまっているが、今回は6809。
前回の6800と6809の話の続きでもある。

新しく6809ボード。

syc8-6809_1.jpg

ACIA(MC6850)とUSB-COM変換のPICといういつもの構成。6802ボードのCPUを6809に変えただけでもある。
ここでは初見ながら既にリビジョンがC(苦笑)。新しくと言いながらも製作したのは約1年前だし色々ポカやって、実はこれもジャンパ飛ばしていてリビジョンDに進むのが決定している。

まずはオリジナルモニタを移植。
MC6802ボード用につくったモニタをベースにMC6801(HD6303)向けに修正したので、今度はMC6801のモニタをMC6809用に修正。

6303用モニタがベースなので、まずは内蔵ペリフェラル関係のものをごっそり削る。
かわりにACIA関係をMC6802モニタからコピー。
追加された割込(FIRQ,SWI2,SW#)を念のため実装。ただしRTIするだけ。
メモリマップはほぼ変更なし。

この状態でとりあえずアセンブルしてみる。
そしてエラーを修正していく。

(1)スタック関連
まず、6809になって大きく変わったのがスタック関係。
ユーザスタックポインタが追加されただけでなく、命令も大きく変わっている。
6800はpsha,pshb,pula,pulbと、個々のレジスタ(アキュムレータ)に対して個々の命令を割り当てている。インデックスレジスタに対するモノがないのが、個人的に感じる6800の一番の問題点。これは6801になって追加されている。
6809はシステムスタックポインタ、ユーザスタックポインタに対してそれぞれpshs,puls,pshu,puluとなっている。
どのレジスタを退避/復帰するかはオペランドで指定する。これは
pshs a,b,x,y
とまとめて指定できるのは非常に便利。
したがってスタックに関する命令は全て変更。

変更前変更後
PSHAPSHS A
PSHBPSHS B
PULAPULS A
PULBPULS B
PSHXPSHS X
PULXPULS X



(2)コンディションコードレジスタ関連
コンディションコード関係は6800/1ではビット毎に個別のセット/リセット命令があったが、6809ではORとANDで一括でセット/リセット。ニーモニックはORCC、ANDCC。
つまり、OR,ANDの論理演算命令がアキュムレータに対してだけでなく、コンディションコードレジスタにまで拡張されているという解釈。ただしイミディエイトアドレッシングしか使えない。
割込マスクのセット/リセットはシステム関係をやらない限りあまり使う事はないが、キャリーのセット/リセットぐらいはよく使うので要変更。

変更前変更後
SEIORCC #$10
CLIANDCC #$EF
SECORCC #$01
CLCANDCC #$FE


(3)インデックスレジスタのインクリメント/デクリメント
6809ではなくなっている。
INX,DEXは特定レジスタ向けの特定命令だったという解釈なのだろうか?アキュムレータに対するINC,DECはなくなったわけではない。
INC,DECは簡潔で便利なんだが、
LEAX 1,X
に変更。
まぁ+3したいときは
LEAX 3,X
とできるのでこれも便利といえば便利。

変更前変更後
INXLEAX #1,X
DEXLEAX #-1,X


(4)ニーモニック変更
6800/1 →6809変更に伴う命令の変更は以上だが、
大量にでたアセンブルエラーは

LDAALDABSTAASTAA

本来6800/1、6809どちらにもある命令なのだがニーモニック表記が変更されている。
LDAA等は確かにくどいとは思うが、同じ命令で大半はマシンコードも同じ、さらにCPU別になっているとはいえソースも共有されている同じモトローラのアセンブラなんだから通してくれても良いと思う。

変更前変更後
LDAALDA
LDABLDB
STAASTA
STABSTB


以上、もろもろ修正しただけでとりあえず動くことは動く。
レジスタ増えてスタックが変わってしまっているので、ブレークポイントコマンドなんかはたぶんおかしくなるだろうが。

では次に6809固有の命令を使って修正していき、モニタを完成させたい。

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。