IC・トランジスタで出来たコンピューターを設計・製作するためのブログ

Jeans & Development 電子ブロック工房 三日坊主 フロントページ

手作りコンピュータのシミュレータ [シミュレーション]

2007年6月11日

いよいよ、手作りのコンピューターをシミュレートするプログラムの製作を開始した。このプログラムが完成すれば、設計図の製作に取りかかれる。

7905とは? [一般的なこと]

2007年6月10日

この週末は、Sacramento の HSC Electronic Supplyに行ってきた。Fry's の店員さんに教わった、電子部品の店である。入ってみて、感動!あの、懐かしい、大阪日本橋のジャンク屋の雰囲気そのまま!

特に買い物リストもなかったので、とりあえず店内をぐるっと一回りして、どんな部品が仕入れられるかだけ見ておいた。店員さんも、見たところ強者揃いのようである(むろん、客も)。

工房の拡張 [一般的なこと]

2007年6月7日

この週末は、少し日曜大工。コンピューターを制作している部屋のクローゼットを改造し、棚を付けた。この棚はこれから、コンピューター関連の部品だの、工具だの、そういったものがギッシリ詰まることになる。
日曜大工

フリップフロップの製作 [デジタル回路]

2007年5月13日

次の回路をユニバーサル基盤の上に組んでみた。
フリップフロップ

CPUのスペック案2 [CPU]

2007年4月30日

 モトローラ型で設計すると、手作りのCPUとしては現実的な構造になることが分かった。

メモリ空間は、1ワード8ビットでアドレス16ビットの、合計65536バイト。

レジスタはすべて8ビット:

A1レジスタ 演算用
A2レジスタ 演算用
B1レジスタ メモリアクセス用
B2レジスタ スタック用
Z レジスタ 各種代入・演算結果保持・ジャンプ用
IPレジスタ 実行位置
CSレジスタ 実行セグメント指定
DSレジスタ データセグメント指定
SSレジスタ スタックセグメント指定

フラグ(FLレジスタ)は、ゼロフラグ(Z)およびキャリーフラグ(C)の二つ。

クロック信号と各種イベントのタイミング:
clock 1   clock 2   events
-----------------------------------------------------------------
   0         0      decrement b2 register (for push)
                    prepare environment for reading command
   1         0      read command from memory
   0         1      prepare environment for command
                    increment IP
                    increment b2 register (for pop)
   1         1      do the command
注)clock2が0の時はCS:IPがアドレスラインに、1の時はDS:B1もしくはSS:B2がアドレスラインに接続される。

アセンブラで円周率を求める [シミュレーション]

2007年4月30日

16ビット長の変数で円周率が 3.1416 まで求められることが分かったので、アセンブラで計算してみた。インテル 80386 系は、レジスタが32ビット。16ビットどうしの乗算を行っても、結果が32ビット内に収まるので、比較的容易にアセンブラで書ける。

円周率を求めるのに、何ビット長の変数が必要か [シミュレーション]

2007年4月29日

表題の問題を解くために、1ビット長から19ビット長までの整数型を仮定し、円周率を求めてみた。

モンテカルロシミュレーションで円周率を求める [シミュレーション]

2007年4月29日

矢は円の内側?

モンテカルロ法で円周率を求めるアルゴリズムはいたって簡単。-1 から 1 までの乱数を、x, y として用意し、図のように点(x,y)と座標の原点までの距離が1以下であれば円の内側だとみなされる。ピタゴラスの定理より、単に

x*x + y*y

の値が1より大きいか小さいかを求めればよい。これを何回も繰り返せば、円の内側に点が入る確率が求まる。その確率を p とすると、外側の正方形の面積が4であるから、円周率は次のように得られる。

π = 4 * p

とりあえずの目標:どんな計算をさせるか [一般的なこと]

2007年4月28日

さて、自作コンピューターが完成すればどのような計算をやらせるかを考えておく必要があるだろう。何をやらせるかを決めないと、設計図が仕上がらない。

 簡単すぎてもいけないし、難しすぎてもいけない。例えば、2進数一桁の足し算をやらせるだけならば、簡単なデジタル回路を制作するだけでよい。逆に、今作ろうとしている自作コンピューターでインターネットに接続することは、ほとんど不可能である。絶対に不可能であるとは言わないが、最初の目標としては高すぎる。

 その中間として、円周率を求めることを目標にしたい。アルゴリズムとしては、モンテカルロシミュレーションを用いる予定である。これには、精度の良い乱数と、乗算を求めるプログラムが必要である。

ニーモニック表 案2 [CPU]

2007年4月28日

代入命令について、すべてZレジスタを介するようにしてみた。
<<前の記事   後の記事>>