SSブログ
English Version

SuperSimpleController(その7)マシン語の実装検討 [OriginalCPU]

 前回の記事でジャンプ命令が動くようになったのでマシン語の実装検討を進めています。
 今回のオリジナルCPUはROM内に制御信号を格納する方式でALU自体もROMで実現しているので自由度は高いのですが、例えばALUの入力をビットフィールドで指定するなどのような機構がないので、一般的なCPUのマシン語にあるディスティネーションレジスタを指定するビットフィールド等のようなものがありません。
 そのため、対称性とか直行性とは無縁(チップ数を倹約しないのであればできなくもないですが)です。

 RAMはまだ未結線状態でRAM関連のマシン語は検討中なのですが、ALU関連のマシン語等について暫定版ができたので下図に示します。
 ALUの検討の記事で書いたように4bitで機能指定しますが、この4bitはマシン語コードの下位4bitで指定するようにしました。

マシン語コード表(作成中)
★変更 2021/02/16
 マシン語構成検討からの反映でジャンプ命令のコードを変更

 下のリストは今回使用した試験用のプログラムです。uCODE内のそれぞれのコードを実行するようしています。
 コメント中の「x数字」はそこまでの命令実行に必要なクロック数で、このクロック数分だけ実行して確認するようにしています。
 始めはuCODEを記述するのが大変でしたが、次第に慣れてきたので思惑通りに動くようになってきました。

uCODE試験用プログラム(アセンブリ言語)
;++++++++++++++++++++++++++++++++++++++++ ; Simle8Z test program ; by skyriver ; V0.01 2021/02/08 ;++++++++++++++++++++++++++++++++++++++++ .list 0000' ASEG ORG 0 CLR_R0 ; x6 R0:00 0000 2E + DB 2EH LD_R0 0FFH ; x10 R0:FF 0001 10 + DB 10H 0002 FF + DB 0FFH INC_R0 ; x13 R0:00 ZF:0 CF:1 0003 3D + DB 3DH LD_R1 00FH ; x17 R0:00 R1:0F ZF:0 CF:1 0004 18 + DB 18H 0005 0F + DB 00FH ADC_R0_R1 ; x20 R0:10 R1:0F ZF:0 CF:0 0006 35 + DB 35H SHL_R0 ; x23 R0:20 R1:0F ZF:0 CF:0 0007 38 + DB 38H XOR_R1_R0 ; x26 R0:20 R1:2F ZF:0 CF:0 0008 43 + DB 43H LD_R1_R0 ; x29 R0:20 R1:20 ZF:0 CF:0 0009 20 + DB 20H CP_R0_R1 ; x32 R0:20 R1:20 ZF:1 CF:0 000A 4E + DB 4EH HALT ; x34 000B FF + DB 0FFH END Macros: ADC_R0_R1 ADC_R1_R0 ADD_R0_R1 ADD_R1_R0 AND_R0_R1 AND_R1_R0 CKDECR0 CKINCR0 CKLSBR0 CKMSBR0 CKZR0 CKZR1 CLR_R0 CP_R0_R1 DEC_R0 HALT INC_R0 JC JNC JNZ JP JZ LDF_R0_R1 LDF_R1_R0 LD_R0 LD_R0_R1 LD_R1 LD_R1_R0 NOP OR_R0_R1 OR_R1_R0 RST SBC_R0_R1 SHLC_R0 SHL_R0 SHRC_R0 SHR_R0 SUB_R0_R1 XOR_R0_R1 XOR_R1_R0 Symbols: No Fatal error(s)


 途中まで実行してはロジアナで確認し、問題あれば修正する作業を繰り返して、最後まで動くようになりました。
 図中のA1カーソルが先頭のCLR_R0でA2カーソルが最後のHALT実行後のタイミングになります(HALTは以降繰り返します)

試験プログラム実行時のロジアナ画面


 まだ途中ではありますが、レジスタ操作と条件ジャンプのマシン語ができたのでナイトライダーのようなデモを作ってみました。
 クロックは試験用に50Hzにしていますが、高速動作時にボトルネックになるのはメモリアクセス時間(100ns程度)なので10MHzくらいまでは動作するのではないかと思います。

 ROM式ALUから派生したコマンドであるMSBとLSBのチェックという少し変わったコードを下記のリストで使用しています。

Simple8Z 初めてのデモプログラム(アセンブリ言語)
;++++++++++++++++++++++++++++++++++++++++ ; Simle8Z demo program (Night Rider) ; by skyriver ; V0.01 2021/02/14 ;++++++++++++++++++++++++++++++++++++++++ .list 0000' ASEG ORG 0 LD_R1 00H 0000 18 + DB 18H 0001 00 + DB 00H LD_R0 01H 0002 10 + DB 10H 0003 01 + DB 01H 0004 LEFT: SHL_R0 0004 38 + DB 38H CKMSBR0 0005 48 + DB 48H JNC LEFT 0006 C3 + DB 0C3H 0007 0003 + DW LEFT - 1 0009 RIGHT: SHR_R0 0009 3A + DB 3AH CKLSBR0 000A 4A + DB 4AH JNC RIGHT 000B C3 + DB 0C3H 000C 0008 + DW RIGHT - 1 JP LEFT 000E C4 + DB 0C4H 000F 0003 + DW LEFT - 1 END Macros: ADC_R0_R1 ADC_R1_R0 ADD_R0_R1 ADD_R1_R0 AND_R0_R1 AND_R1_R0 CKDECR0 CKINCR0 CKLSBR0 CKMSBR0 CKZR0 CKZR1 CLR_R0 CP_R0_R1 DEC_R0 HALT INC_R0 JC JNC JNZ JP JZ LDF_R0_R1 LDF_R1_R0 LD_R0 LD_R0_R1 LD_R1 LD_R1_R0 NOP OR_R0_R1 OR_R1_R0 RST SBC_R0_R1 SHLC_R0 SHL_R0 SHRC_R0 SHR_R0 SUB_R0_R1 XOR_R0_R1 XOR_R1_R0 Symbols: 0004 LEFT 0009 RIGHT No Fatal error(s)


 twitterにポストした動画付きメッセージを貼っておきます。




[TOP] [ 前へ ] 連載記事 [ 次へ ]

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