#RETROF-16 部品実装(その4)
液晶モニタへの画像信号の生成回路(画像左上部分)以外はほぼ実装を終えた所
⇒ 本記事に対応する最新回路図はこちらです
⇒ RETROF-16 部品実装(その1)はこちらです
⇒ RETROF-16 部品実装(その2)はこちらです
⇒ RETROF-16 部品実装(その3)はこちらです
##各種アドレッシングモードの実装/試験
本機RETROF-16は全機械語命令共通の4つのアドレッシングモードを有します。以下がその概略です。Xが命令種別、Aがアドレッシングモード、そして nはアドレッシングモードにより意味が変わるビットです。
本機の機械語命令コードの一般形
|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|0|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|X|X|X|X|X|X|A|A|n|n|n|n|n|n|n|n|
AA | アドレッシングモード |
---|---|
00 | nで示す値(0~255)がそのまま実効値(もしくは実効アドレス)となる |
01 | nで示すレジスタ(0番レジスタ~255番レジスタのいずれか)の値が実効値(もしくは実効アドレス)となる |
10 | nで示すレジスタが示すの主メモリの値(0~65535)が実効値(もしくは実効アドレス)となる |
11 | nは無視され、この命令語の次の語の値(0~65535)が実効値(もしくは実効アドレス)となる。本モードは2ワード命令となる。 |
ここでは、このアドレッシングモードを一つずつ試験します。この試験には**74LS155(U31)**と、F5~F11の実装が必要です。(本記事冒頭の画像はこれらの実装をした後のものです)
アドレッシングモードは全機械語命令で共通ですので、その試験は最も単純な機械語命令である「無条件HALT命令」にて行います。この命令は停止時にアドレッシングモードとオペランドで決定する値をアドレスバスに放出しますので、結果の視認も簡単です。
####(1) 8bit即値アドレッシングモードによる無条件HALT命令の動作確認
命令コード0CXXを与えます。XXは任意の8bit値であり、この値(0~255)をアドレスバスに放出した状態で停止します。ここでは命令コードを0C55とし、それを0番地に書込み、0番地から実行します。
Φ | アドレス バスの値 |
データ バスの値 |
IRの値 | 補足説明 |
---|---|---|---|---|
0 | 不定 | 0000 | 不定 | PCの値がデータバスに放出される |
1 | 0000 | 0000 | 不定 | PCの値がWRに転写される |
2 | 0000 | 0C55 | 不定 | 実行すべき命令のコードが データバスに放出される |
3 | 0055 | 0055番地の メモリの値 |
0C | 命令コードの上位8bitがIRに、 下位8bitがWRに転写される (WRの上位8bitはゼロクリア) |
4~7 | 同上 | 同上 | 同上 | |
8~9 | 同上 | 0001 | 同上 | データバスには次の命令の アドレスが表示される |
10 | 同上 | アドレスバスの ビット反転値 |
同上 | アドレスバスに0055を放出し停止。 これ以上STEPボタンを押しても Φの値は変化しない |
####(2) レジスタアドレッシングモードによる無条件HALT命令の動作確認
命令コード0DXXを与えます。XXは任意の8bit値であり、この値(十進で0~255)をレジスタ番号として、そのレジスタに格納されている値をアドレスバスに放出して停止します。ここでは命令コードを0D55とし、それを0番地に書込み、0番地から実行します。
本機の汎用レジスタは全て仮想レジスタであり、その実態は主メモリの0000~00FF番地にマッピングされています。従ってレジスタ番号として55Hを指定する本試験は予め0055番地に特定の値(ここでは1111とした)を書き込んでおく必要があります。
Φ | アドレス バスの値 |
データ バスの値 |
IRの値 | 補足説明 |
---|---|---|---|---|
0 | 不定 | 0000 | 不定 | PCの値がデータバスに放出される |
1 | 0000 | 0000 | 不定 | PCの値がWRに転写される |
2 | 0000 | 0D55 | 不定 | 実行すべき命令のコードが データバスに放出される |
3 | 0055 |
1111 0055番地の メモリの値 |
0D | 命令コードの上位8bitがIRに、 下位8bitがWRに転写される (WRの上位8bitはゼロクリア) |
4~6 | 同上 | 同上 | 同上 | |
7 | 1111 | 1111番地の メモリの値 |
同上 | データバスの値がWRに複写される |
8~9 | 同上 | 0001 | 同上 | データバスには次の命令の アドレスが表示される |
10 | 同上 | アドレスバスの ビット反転値 |
同上 | アドレスバスに1111を放出し停止。 これ以上STEPボタンを押しても Φの値は変化しない |
####(3) レジスタ間接アドレッシングモードによる無条件HALT命令の動作確認
命令コード0EXXを与えます。XXは任意の8bit値であり、この値(十進で0~255)をレジスタ番号として、そのレジスタが示す主メモリの値をアドレスバスに放出して停止します。ここでは命令コードを0E55とし、それを0番地に書込み、0番地から実行します。
本試験は予め0055番地に特定の値(ここでは1111とした)を、更に1111番地に特定の値(ここでは3333とした)書き込んでおく必要があります。
Φ | アドレス バスの値 |
データ バスの値 |
IRの値 | 補足説明 |
---|---|---|---|---|
0 | 不定 | 0000 | 不定 | PCの値がデータバスに放出される |
1 | 0000 | 0000 | 不定 | PCの値がWRに転写される |
2 | 0000 | 0E55 | 不定 | 実行すべき命令のコードが データバスに放出される |
3 | 0055 |
1111 0055番地の メモリの値 |
**0E | |
** | 命令コードの上位8bitがIRに、 下位8bitがWRに転写される (WRの上位8bitはゼロクリア) |
|||
4 | 同上 | 同上 | 同上 | |
5~6 | 1111 |
3333 1111番地の メモリの値 |
同上 | データバスの値がWRに複写される |
7 | 3333 | 3333番地の メモリの値 |
同上 | データバスの値がWRに複写される |
8~9 | 同上 | 0001 | 同上 | データバスには次の命令の アドレスが表示される |
10 | 同上 | アドレスバスの ビット反転値 |
同上 | アドレスバスに3333を放出し停止。 これ以上STEPボタンを押しても Φの値は変化しない |
####(4) 16bit即値アドレッシングモードによる無条件HALT命令の動作確認
このアドレッシングモードは2ワード命令となります。
は命令コード0FXX、YYYYを与えます。XXはこのモードでは意味を持ちません。YYYYは任意の16bit値であり、この値をアドレスバスに放出して停止します。
ここでは命令コードを0F00、1234とし、それを0番地と1番地に書込み、0番地から実行します。
Φ | アドレス バスの値 |
データ バスの値 |
IRの値 | 補足説明 |
---|---|---|---|---|
0 | 不定 | 0000 | 不定 | PCの値がデータバスに放出される |
1 | 0000 | 0000 | 不定 | PCの値がWRに転写される |
2 | 0000 | 0F00 | 不定 | 実行すべき命令の第1ワードが データバスに放出される |
3 | 0000 |
0F00 0000番地の メモリの値 |
0F | 命令コードの上位8bitがIRに、 下位8bitがWRに転写される (WRの上位8bitはゼロクリア) |
4 | 0000 | 0001 | 同上 | インクリメントされたPCの値が データバスに放出される |
5 | 0001 | 0001 | 同上 | PCの値がWRに転写される |
6 | 0001 |
1234 00001番地の メモリの値 |
同上 | データバスの値がWRに複写される |
7 | 1234 | 1234番地の メモリの値 |
同上 | データバスの値がWRに複写される |
8~9 | 同上 | 0002 | 同上 | データバスには次の命令の アドレスが表示される |
10 | 同上 | アドレスバスの ビット反転値 |
同上 | アドレスバスに1234を放出し停止。 これ以上STEPボタンを押しても Φの値は変化しない |