SuperSimpleController(その4)ALUの検討 [OriginalCPU]
前回の記事で今回検討中のオリジナルCPUのブロック図を書いてALUの機能指定ビット数を3bitから4bitに増やしたことを書きましたが、この状態でも今回使うUV-EPROM(M27C322:2M x 16bit)の半分しか使っていません。
もったいないので加減算とシフト命令にキャリーフラグ付きのものを加えることにしました。
手法としては至って簡単でIR(インストラクションレジスタ)からALUに渡している4bitの機能指定ビットの上位にキャリーフラグを追加して機能指定ビットを5bitにするだけです。回路図の抜粋が下図になります。
機能指定ビットに対する機能も下表のように見直しました。キャリーが0の場合と1の場合の2面必要になるのでM27C322の容量すべてを使用することになります。下表の2項演算子の演算順序はインテル系のアセンブラと同じです(ex. OR R0,R1 : R0=R0 OR R1)。
CP(コンペア)ではレジスタを変更する必要が無いのでALUの出力はゼロとし、レジスタをゼロクリアする時に利用することにしました。
★変更 2021/02/13
マシン語構成の検討からの反映で機能指定ビットのアサインを変更
UV-EPROMの書込みはTL866II Plusを使用しています。
このROMライタはM27C4096の容量までしか対応していない(これより大きいものは40ピンソケットでは足りない)のでM27C322まで対応しているM27C4096変換アダプタを使って書き込んでいます。
書き込み中の画面キャプチャを参考に貼っておきます。
今回使用しているROMはST社のもので、TL866でのROMタイプはuPD27C4096を選択しています(他のいくつかのメーカーのM27C4096でも試しましたがNECのuPDタイプで書込みができました)
赤のワーニングマーカー?が表示されますがライト及びリード操作で問題は発生しませんでした。
今回使用しているM27C322はM27C4096の8倍の容量なので、8回に分けて書込み操作をする必要があります。下図が書込み終了後の画面表示例で各処理の所要時間が表示れさており、書込みには138秒かかっています。
書込み操作は8回必要になるので全体で20分程度の時間がかかります。
肝心のALU内に格納するデータについてですが、作成するのが面倒かもと思っていましたが、割合簡単にサクッとできました。
TL866はHEXファイルの他にバイナリファイルも読込めるので、1回の書込みサイズに分割したバイナリファイルを生成するツールを作成しました。
機能と生成ファイルとの関係は関数テーブルで保持することで管理しています。ソースファイルも貼っておきます。
★変更 2021/03/13
R1()でCFをセットするように変更
★変更 2021/02/13
機能指定ビットのアサインの変更に伴いソースをアップデート
[TOP] [ 前へ ] 連載記事 [ 次へ ]
もったいないので加減算とシフト命令にキャリーフラグ付きのものを加えることにしました。
手法としては至って簡単でIR(インストラクションレジスタ)からALUに渡している4bitの機能指定ビットの上位にキャリーフラグを追加して機能指定ビットを5bitにするだけです。回路図の抜粋が下図になります。
オリジナルCPU回路のALU部抜粋 |
|
機能指定ビットに対する機能も下表のように見直しました。キャリーが0の場合と1の場合の2面必要になるのでM27C322の容量すべてを使用することになります。下表の2項演算子の演算順序はインテル系のアセンブラと同じです(ex. OR R0,R1 : R0=R0 OR R1)。
CP(コンペア)ではレジスタを変更する必要が無いのでALUの出力はゼロとし、レジスタをゼロクリアする時に利用することにしました。
No. | address | contents |
---|---|---|
0 | 00000h - 0FFFFh | R0 |
1 | 10000h - 1FFFFh | AND R0,R1 |
2 | 20000h - 2FFFFh | OR R0,R1 |
3 | 30000h - 3FFFFh | XOR R0,R1 |
4 | 40000h - 4FFFFh | ADD R0,R1 |
5 | 50000h - 5FFFFh | ADC R0,R1 |
6 | 60000h - 6FFFFh | SUB R0,R1 |
7 | 70000h - 7FFFFh | SBC R0,R1 |
8 | 80000h - 8FFFFh | SHL R0 (shift left) |
9 | 90000h - 9FFFFh | SHLC R0 (shift left with carry) |
A | A0000h - AFFFFh | SHR R0 (shift right) |
B | B0000h - BFFFFh | SHRC R0 (shift right with carry) |
C | C0000h - CFFFFh | DEC R0 |
D | D0000h - DFFFFh | INC R0 |
E | E0000h - EFFFFh | CP R0,R1 (output is zero) |
F | F0000h - FFFFFh | R1 |
マシン語構成の検討からの反映で機能指定ビットのアサインを変更
UV-EPROMの書込みはTL866II Plusを使用しています。
このROMライタはM27C4096の容量までしか対応していない(これより大きいものは40ピンソケットでは足りない)のでM27C322まで対応しているM27C4096変換アダプタを使って書き込んでいます。
TL866II Plusでの書込み状況 |
|
書き込み中の画面キャプチャを参考に貼っておきます。
今回使用しているROMはST社のもので、TL866でのROMタイプはuPD27C4096を選択しています(他のいくつかのメーカーのM27C4096でも試しましたがNECのuPDタイプで書込みができました)
赤のワーニングマーカー?が表示されますがライト及びリード操作で問題は発生しませんでした。
TL866II Plusでの書込み画面(書き込み中) |
|
今回使用しているM27C322はM27C4096の8倍の容量なので、8回に分けて書込み操作をする必要があります。下図が書込み終了後の画面表示例で各処理の所要時間が表示れさており、書込みには138秒かかっています。
書込み操作は8回必要になるので全体で20分程度の時間がかかります。
TL866II Plusでの書込み画面(書き込み完了時) |
|
肝心のALU内に格納するデータについてですが、作成するのが面倒かもと思っていましたが、割合簡単にサクッとできました。
TL866はHEXファイルの他にバイナリファイルも読込めるので、1回の書込みサイズに分割したバイナリファイルを生成するツールを作成しました。
機能と生成ファイルとの関係は関数テーブルで保持することで管理しています。ソースファイルも貼っておきます。
Simple8Z ALUデータ生成プログラム(C言語) |
|
R1()でCFをセットするように変更
★変更 2021/02/13
機能指定ビットのアサインの変更に伴いソースをアップデート
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コメント 0