tunozemichanの日記 / tunozemichan's diary

SORD社のコンピューターM68やM68MXの解析についての備忘録です。This blog is a memorandum about the analysis of SORD's computers M68 and M68MX.

浮動小数点演算ユニット Am9511 を調べる(その1)

SORD社はAm9511が大好きです。様々な機種に搭載しています。SORDを楽しむためには、Am9511の知識が必要と考え調べました。

AMD Am9511(Intel i8231)について

Am9511は8ビット時代の高速浮動小数点演算ユニットです。詳しい解説は、他の方が一杯書いているのでそちらを参照ください。

Am9511の浮動小数点数内部表現

Am9511の浮動小数点数内部表現はIEEE754とは異なっています。
ちなみに、IEEE754では、指数部は127のゲタ付きの8ビットで、仮数部はケチ表現の23ビットとなっています。具体的にはどんな表現なのか試したい人は、こちらを参照してください。

一方、Am9511は指数部はゲタ無し7ビットで仮数部は24ビットとなっています。

 

例えば、3.1415925は、2進数では

 

11.0010010000111111011010

 

となり、小数点をずらして、以下のように書きます。

 

0.1100 1001 0000 1111 1101 1010 * 2^2

 

これは、Am9511の内部表現では以下のようになります。正の数、指数部も正の数で、で2、仮数部は上記記載の通り。

 

2進数表現 : 0000 0010 1100 1001 0000 1111 1101 1010
16進数表現: 0    2    C    9    0    F    D    A

 

ちなみに、2進数の小数点表現のやり方については情報技術者試験で出るらしく、たくさんヒットします。私はここを参考にしました。

Am9511のエミュレータ

Am9511は著名なユニットなので、エミュレータが存在します。

このエミュレータC言語で記述されており、CP/Mエミュレータに組み込んで使用します。ZXCCとRunCPMの二つがターゲットのようです。

簡単そうなRunCPMを使用しました。環境はWSL2です。ビルドの具体的なやり方は、RunCPMのhowto.txtに書いてありますが、いくつか注意点がありました。

まず、追加ファイルにtypes.hが抜けています(ZXCCの説明には入っている)。こちらも、RunCPMディレクトリにコピーする必要があります。

また、makeファイル(WSL2の場合はMakefile.posix)も修正する必要があると思います。makefileの書き方に自信がないですが、要するに、am9511.o、floatcnv.o、ova.oを生成するように書けばOKです。

make posix build

でRunCPMがビルドされます。CP/Mのファイルはイメージ管理ではなく、ディレクトリ管理です。DISKディレクトリのA.ZIPを解凍して、RunCPMのディレクトリに置きます。面倒なことにユーザー番号0でログインする設定なので、Aディレクトリに入って、0という名前のディレクトリを掘ります。つまり、./RunCPM/A/0にファイルを配置します。Aディレクトリの全てのファイルをムーブすれば準備完了です。

./RunCPM

エミュレータが動きます。

Am9511エミュレータには、検証用のファイルが複数あります。その中のAM9511.BASは、MBASIC用の検証プログラムです。簡単に言えば、π=3.14159をAm9511のスタックにプッシュして、ポップしているだけです。

先ほどの内部表現通り、02C90FDAが出てきます。