SSブログ

HD6303で電大版TINY BASIC(2) [6801]

HD6303で電大版Tiny BASICの続きです。
MC6801系にちょっとオプティマイズしてみます。

MC6800は8080に比べてきれいなアーキテクチャだと言われ、確かにそうだとは思うが、当時のモトローラは8bitマイコンなんてこの程度で充分と思ったのか、それとも当時の半導体技術ではこれが精一杯なのか、機能が絞り込まれていて使いにくい。
具体的には8bitCPUだからというわけだろうが、8bit単位でしか演算できない。これはまだ個人的には許容できるが、インデックスレジスタをスタックに操作できないというのは結構使いにくいところに感じる。
MC6801になってその辺が解消され、ACCAとACCBを連結して16bitのACCDとして扱えたり、インデックスレジスタXをスタックへPUSH/PULできるようになり、扱いやすさがぐんとあがり、その後6809につながっていく事になる。

そういうわけで電大版Tiny BASICをMC6801向けにカスタマイズしていく。
(1)16bit演算に変更
BASICの扱う数値データは16bitの整数なので、MC6800ではACCAとACCBを下位、上位としてそれぞれ演算しているのはACCDで可能な限りまとめて行うようにする。
(2)16bitデータ転送の変更
これも(1)と基本的に同じで、アキュムレータに対するロード/ストアも可能ならDレジスタとして一括で転送
(3)インデックスレジスタのスタック退避
これも一応変更を考えたが、単純に退避するだけの目的の場合退避先がゼロページの場合はPULで同ステータス数、PUSHで+1となってしまい、パフォーマンス的な効果が薄いのでそのままにする。

参考までに加算命令のダイレクトアドレッシングとインデックスアドレッシングのクロック数を記しておく。

DIRECTINDEX
ADDA(B)
3
4
ADDD
4
5

これだけみれば1クロックの差しかないが、16bit計算だと8bit計算を2回することになるので、ある程度のパフォーマンスアップを期待できるのでは?と思う。

さて、(1)(2)の変更で特に(1)に関して問題となることがあり、TinyBasicはACCAを下位バイト、ACCBを上位バイトとしているが、MC6801のDレジスタはACCAが上位バイト、ACCBが下位バイトと逆であること。下位バイトだけ、上位バイトだけというケースや、80系がそうであるようにアキュムレータというばAということで、とりあえずAで処理しそれをそのまま下位バイトにという処理もあり、とにかくDにしてしまえ!というわけにいかず、ソースのいたるところでACCAとACCBを入れ替えて行く必要がある。
さらに、一見Dレジスタは16bitのアキュムレータとしてACCA(B)と同様に扱えそうで、ローテート命令がないなど一部制約があり、そういう場合は処理はそのままだが上位下位の扱いが逆になっているので、それだけは入れ替えとなる。
ちなみに加算処理の場合だと、

ADDJSRPOP
INX
INX
ADD3ADDA1,X
ADCB0,X
STAXSTAA1,X
STAB0,X
E7RTS

これが

ADDJSRPOP
INX
INX
ADD3ADDD0,X
STAXSTD0,X
E7RTS

こうなる。
加減算は単純に置き換えるだけですむが、乗除算はそうはいかない。
以上を踏まえて変更していき、なんとかそれっぽく動作したので簡単なベンチマークをとってみた。

CPUHD6303
動作クロック0.8MHz


同じ基板、同じCPU、クロック発生用のPICも同じでROMだけ入れ替え。
前回書いたとおり、このシステムは内蔵タイマを使って10ms間隔で割込を掛け、TinyBASICの変数Tをカウントアップさせている。
ベンチマークソフトは最初にT=0で初期化しておき、主要処理終了後にTの値を表示させる単純なもの。
ベンチマーク用のBASICプログラムソースはこれです。

bench_src_20181111_1.jpg

単純な四則演算を繰り返すだけ。
10msが3301カウントなので、約33秒です。
MC6800版と移植したものの結果がこれです。

bench_result_20181111_1.jpg

MC6801向けにDレジスタを使用したバージョンの結果がこれです。

bench_result_20181111_2.jpg

3292カウントだから約32.9秒。
何回か繰り返し実行してだいたい同じで、その差約0.1秒。
若干速くなっているが、インタープリタはソースを読んで解析していくのがやはりメインなのか、処理中の演算処理の割合が低いのだろうな?という事でしょう。

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

nice! 0

コメント 0

コメントを書く

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

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