TD4Simulator

td4simulator.jpg

「CPUの創り方」のTD4のSqueak版シミュレータを作成しました。

書籍で触れられているシミュレータと比べたときのメリットとしては、

  • Squeak上が動くマシン上ならどこでも動く。(Macで動かしたかった…)
  • プログラムのソースコードを読める。
  • 自分で改造が可能。

が考えられます。逆にデメリットとしては、

  • Squeakをインストールしてなければインストールが面倒
  • ソースコードが汚い。設計もずさん。
  • きっと改造する気になれない。
  • 多分バグがある。

が考えられます。
伊藤ゼミ学生向けのものなので、それ以外の方は上記のデメリットをご理解の上、心してお使いください。
なお、機能等一切の保証はありません。

続きを読む TD4Simulator

機械語ワークショップ

dscn5427.jpg
夏季合宿2006で行った機械語ワークショップの内容です。

配布資料

td4-workshop1.pdf — 説明資料
td4-sample.pdf — サンプルプログラム
— TD4シミュレータ本体

参加人数

5名参加。機械語プログラミング経験なし。Defart経験あり。

ワークショップ前半

dscn5062.jpg

  • これ(↑)は何でしょう?
  • 基本的な動作原理の説明。資料を見ながら。
  • 機械語命令の説明
  • サンプルプログラムの解説

dscn5445.jpg

ワークショップ後半

課題のプログラムを作る。

  • 課題1:入力ポートが■□□■の時だけ出力ポートを■□□■とし、それ以外では常に□■■□としなさい。
  • 課題2:slowクロックで、1分で□□□■、2分で□□■■、3分で□■■■とするプログラムを作りなさい。

結果

課題1のプログラムは1名完成。課題2については途中までを数名が完成。

記名式アンケート

  • 機械語の入力のしかたの説明が欲しかった。理解するのが難しかった。
  • 考えている時間は楽しかったので、時間をかけてやれば面白いと思う。ごはんに行く時間が惜しい。
  • はじめはとっつきづらい印象があったが、実際にやってみると自分でプログラミングしているという実感があった。もうちょっと初歩の例題があれば、もっととっつきやすくなると思った。
  • もっとサンプルがあったほうがいい。もう少し時間があったらよい。やっとわかってきたときに終わりになったのは残念。簡単なプログラミングから始めた方が良い。
  • もう少し簡単でやりやすい問題からやりたい。できないのはくやしい。でも考えるのは楽しいので時間を多く欲しい。

自由討論

  • どの内容も難しかった。
  • 授業として繰り返しやるとしたら3回が限度じゃない?
  • シミュレータがないとできない。
  • 実機を最初に見るとイメージがわく。後はシミュレータがあれば充分。
  • ゼミでやるのは許容できる、新入生研修だったら多分嫌になる。
  • 五大装置の理解には結びついた。実感を持って理解できた。

反省・課題

  • 説明の順番に工夫が必要。動作原理の説明がわかりにくかった。
  • シミュレータの使い方に関する説明がもっと必要。
  • 実機に役割を示したラベルを貼るべきだった。
  • 難しいと思われたキャリーや条件付きジャンプは理解可能なことがわかた。
  • モチベーションをどのように向上できるか?

TD4 転送命令

MOV A, Imm

概要

値をAレジスタに格納します。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 0 0 1 1 x x x x

説明

xxxxで指定した4ビットの値がAレジスタに格納されます。Aレジスタに元々入っていた値は失われます。

MOV B, Imm

概要

値をBレジスタに格納します。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 0 1 1 1 x x x x

説明

xxxxで指定した4ビットの値がBレジスタに格納されます。Bレジスタに元々入っていた値は失われます。

MOV A, B

概要

Bレジスタの内容をAレジスタに格納します。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 0 0 0 1 0 0 0 0

MOV B, A

概要

Aレジスタの内容をBレジスタに格納します。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 0 1 0 0 0 0 0 0

MOV B,Aの命令が間違っていました。

最終更新時間:2006年09月14日 18時15分41秒

TD4の説明

TD4の概要

  • TD4は、2つのレジスタ、出力ポート、入力ポート、全加算器、プログラムカウンタを持つ4ビットCPUです。
  • 全てのデータは4ビットで構成されています。
  • ROMには16語の命令語からなるプログラムを格納でき、1語あたり8ビットで構成されています。
  • クロックには、手動、低速(1Hz)、高速(10Hz)の3モードがあります。
  • リセットボタンを押すとプログラムカウンタが0000となります。

TD4の動作サイクル

  1. ROMから、プログラムカウンタ(PC)が示す番地の命令語が取り出されます。
  2. 命令語の上位4ビットは命令として解釈され、下位4ビットは全加算器に送られます。
  3. 解釈された命令に従って、レジスタA,B・入力ポート・ゼロ値のいずれかが全加算器に送られます。
  4. 全加算器の結果が、(解釈された命令に従って)レジスタA,B・出力ポート・PCのいずれかに格納されます。
  5. 上記でPCにデータが格納されなかった場合は、PCの値を1増します。
  6. 最初に戻ります。

TD4の命令

TD4 ジャンプ命令

JMP Imm

概要

指定した番地にジャンプします。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 1 1 1 1 x x x x

説明

xxxxで指定した4ビットの値がプログラムカウンタ(PC)に格納され、次の命令がxxxx番地から読み取られるようになります。

JNC Imm

概要

桁あふれのないときだけ指定した番地にジャンプします。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 1 1 1 0 x x x x

説明

Cフラグが0のとき(つまり、直前の命令で桁があふれなかったとき)、xxxxで指定した4ビットの値がプログラムカウンタ(PC)に格納され、次の命令がxxxx番地から読み取られるようになります。

TD4 入出力命令

IN A

概要

入力ポートの値がAレジスタに格納されます。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 0 0 1 0 0 0 0 0

IN B

概要

入力ポートの値がBレジスタに格納されます。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 0 1 1 0 0 0 0 0

OUT Imm

概要

指定した4ビットの値が出力ポートに送られます。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 1 0 1 1 0 0 0 0

OUT B

概要

Bレジスタの内容が出力ポートに送られます。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 1 0 0 1 0 0 0 0

TD4 加算命令

ADD A, Imm

概要

Aレジスタに値を加えます。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 0 0 0 0 x x x x

説明

xxxxで指定した4ビットの値がAレジスタに加算されます。
加算して桁があふれた場合、Cフラグがセットされます(1になります)。

ADD B, Imm

概要

Bレジスタに値を加えます。

命令フォーマット

bit位置 7 6 5 4 3 2 1 0
データ 0 1 0 1 x x x x

説明

xxxxで指定した4ビットの値がBレジスタに加算されます。
加算して桁があふれた場合、Cフラグがセットされます(1になります)。