カテゴリー別アーカイブ: MUTIF09

Am9511A 算術演算プロセッサボードの作成

続いて同じ MUTIF09 シリーズの Am9511A 算術演算プロセッサボードを作成します。

設計者様が頒布されているドキュメントによると Am9511A は 6809 に接続するにはタイミングが厳しいチップのようですが、このボードではすでに様々な対策が施されています。基本このドキュメントの説明通りに作っていけばいいはずです。

am9511a-jumper

しかしそそっかしい私は上図のジャンパを内部断線させてしまい、なかなか安定動作させることができませんでした。いくつか問題点を潰していき、最後に残ったトラブルが Am9511A のデータスタック読み出しが 1 バイトずれる問題。正確には、最後に書き込んだ  1 バイトがスタックトップを読み出す前に挿入されてしまいます。

ss-copy-fail

幸いにもこれが MRDY 絡みの問題であることがドキュメントに明記されていたので、関係する箇所を順にあたっていき、断線を発見。再発防止のためポリウレタン線を直接はんだ付けする方法でジャンパをやり直しました。

これで大方の問題は解決したので、sqrt(2) を求めるサンプルプログラムを実行します。

sqrt_test 2

スタックトップに整数値 2 を積んで SQRT 演算命令を発行するサンプルプログラムを実行。計算結果は 32 ビット浮動小数点データとしてメモリに読み出されます。この値を読みやすい 10 進数に変換して結果を確認したいところ。設計者の @yKasumi 様はこのための変換ツールまで提供されています。ありがたや…

sqrt_result

計算結果は正しいようです。下の方の桁が「…ひとみごろ」からずれていますが、32 ビット浮動小数点値は元々これくらいの精度なので問題ありません。

ちなみに 6809 Basic の浮動小数点値は 40 ビットの「拡張単精度」なので、こちらで計算するともう少し精度が上がります。

BASIC_sqrt

ただし完全にソフトウェア演算であるため速度は落ちます。

計算速度の差を体感できるのが asciiart デモです。これも Github リポジトリにサンプルプログラムが用意されていますが、私のソフトウェア環境に合わせて若干手を入れました。ここでも設計者様提供のツール hex2data.py が役に立ちます。(変更したプログラムはこちら

ss-asciiart-success

実行速度データは次の通りです。

MUTIF09 6809SBC MC68B09 2MHz /
Am9511A-4DC 2.048MHz
Basic+
ハードウェア  FP
1′ 49″
(うちマシン語展開時間が 0′ 03″)

さすがに速い。ちなみに以前アセンブラで高速化しようとした結果は次の通りです。

SBC6809 MC68B09 1MHz アセンブラ+
Basic FP ルーチン
3′ 29″

特に工夫せず Basic だけで計算すると次の通りでした。

SBC6809 MC68B09 1MHz Extended Basic 9’12”

6809 のクロックスピードが違うため正確な比較はできません。参考程度に見てください。

ところで Am9511A が極端に発熱することは MUTIF09 Am9511A ボードドキュメントにも説明されているのですが、asciiart デモは反復計算中に浮動小数点演算が多数含まれるので、あっという間にチップが加熱します。この影響で、チップの動作が計算途中で止まってしまいます。下図の例では、熱暴走後は何を計算しても “0” が印字されます。

ss-asciiart-fail

チップに取り付けるヒートシンクや冷却ファンが手元になかったので、はんだ作業用に使っている卓上ファンを回しつつプログラムを実行させることでしのぎました。「もしかして放熱フィンの代わりになるかも?」と Am9511A の上にビールの空き缶を乗せてみましたが(乱暴)、こちらは目立った効果がなかったようです。

mutif-cooling

MUTIF09 作成

Mercury 日本橋さん(@yKasumi 様)の MUTIF09 ボード rev3 を作りました。回路図やテストプログラムなど必要な情報は Github にまとめられていますが、別途頒布の技術メモを読んでから作成に取り掛かることをおすすめします。設計意図から機能面の特徴、部品入手方法、製作上の要点まで懇切丁寧に解説されていて、これを読むだけで製作意欲がかき立てられます。

このボードの特徴である 8254 と 8255A は、技術メモの案内に従って Jameco から入手しました。インテルのデートコードの読み方がわからないのですが、下の画像の通りの刻印です。

mutif-i8254-55a

 

mutif-i8254-55b

それぞれ 1978 年、1998 年の (m)(c) 表記がありますが、マスクワーク・コピーライト年が即製造年になるというのも辻褄が合わないので製造年はこれとは別と思われます。あとで Twitter で聞いてみよう。

とりあえず ROM に Assist09 を載せました。

mutif-assist09

8254、8255A 機能のテストプログラム(Github に含まれています)を Assist09 用に手直しして実行し、無事動作を確認しました。このボードに標準装備されている出力装置はオーディオアンプなので、動作確認は L チカではなくブザーを使います。8254 や 8255 の出力ピンをアンプ入力に接続し(ちゃんとジャンパピンが出ています)、1kHz ブザーが鳴れば成功となります。

また夢七Leo 様が検証された方法を参考に、8254 タイマによる Assist09 トレース実行を確認しました。

mutif-assist09step

SBC6809 のときは PTM 未実装だったので Assist09 のトレース実行を動作させたのはこれが初めて、感慨もひとしおです。

Mercury 日本橋さんでは MUTIF09 ドーターボードとして AM9511A 数値演算プロセッサボードを、また MUTIF09 メインバスにつなぐ拡張ボードとしてメモリ、I/O、ビデオボードなどを開発されており、今後どれに手を出そうか思案中です。などと言いながら数値演算ドーターボードは入手済みなので、多分これが次の作成物になりそうです。