IC・トランジスタで出来たコンピューターを設計・製作するためのブログ
Jeans & Development | 電子ブロック工房 | 三日坊主 | フロントページ |
手作りコンピュータのシミュレータ [シミュレーション]
2007年6月11日
いよいよ、手作りのコンピューターをシミュレートするプログラムの製作を開始した。このプログラムが完成すれば、設計図の製作に取りかかれる。
7905とは? [一般的なこと]
2007年6月10日
この週末は、Sacramento の HSC Electronic Supplyに行ってきた。Fry's の店員さんに教わった、電子部品の店である。入ってみて、感動!あの、懐かしい、大阪日本橋のジャンク屋の雰囲気そのまま!
特に買い物リストもなかったので、とりあえず店内をぐるっと一回りして、どんな部品が仕入れられるかだけ見ておいた。店員さんも、見たところ強者揃いのようである(むろん、客も)。
特に買い物リストもなかったので、とりあえず店内をぐるっと一回りして、どんな部品が仕入れられるかだけ見ておいた。店員さんも、見たところ強者揃いのようである(むろん、客も)。
工房の拡張 [一般的なこと]
2007年6月7日
この週末は、少し日曜大工。コンピューターを制作している部屋のクローゼットを改造し、棚を付けた。この棚はこれから、コンピューター関連の部品だの、工具だの、そういったものがギッシリ詰まることになる。


CPUのスペック案2 [CPU]
2007年4月30日
モトローラ型で設計すると、手作りのCPUとしては現実的な構造になることが分かった。
メモリ空間は、1ワード8ビットでアドレス16ビットの、合計65536バイト。
レジスタはすべて8ビット:
A1レジスタ 演算用
A2レジスタ 演算用
B1レジスタ メモリアクセス用
B2レジスタ スタック用
Z レジスタ 各種代入・演算結果保持・ジャンプ用
IPレジスタ 実行位置
CSレジスタ 実行セグメント指定
DSレジスタ データセグメント指定
SSレジスタ スタックセグメント指定
フラグ(FLレジスタ)は、ゼロフラグ(Z)およびキャリーフラグ(C)の二つ。
クロック信号と各種イベントのタイミング:
メモリ空間は、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 から 1 までの乱数を、x, y として用意し、図のように点(x,y)と座標の原点までの距離が1以下であれば円の内側だとみなされる。ピタゴラスの定理より、単に
x*x + y*y
の値が1より大きいか小さいかを求めればよい。これを何回も繰り返せば、円の内側に点が入る確率が求まる。その確率を p とすると、外側の正方形の面積が4であるから、円周率は次のように得られる。
π = 4 * p
とりあえずの目標:どんな計算をさせるか [一般的なこと]
2007年4月28日
さて、自作コンピューターが完成すればどのような計算をやらせるかを考えておく必要があるだろう。何をやらせるかを決めないと、設計図が仕上がらない。
簡単すぎてもいけないし、難しすぎてもいけない。例えば、2進数一桁の足し算をやらせるだけならば、簡単なデジタル回路を制作するだけでよい。逆に、今作ろうとしている自作コンピューターでインターネットに接続することは、ほとんど不可能である。絶対に不可能であるとは言わないが、最初の目標としては高すぎる。
その中間として、円周率を求めることを目標にしたい。アルゴリズムとしては、モンテカルロシミュレーションを用いる予定である。これには、精度の良い乱数と、乗算を求めるプログラムが必要である。
簡単すぎてもいけないし、難しすぎてもいけない。例えば、2進数一桁の足し算をやらせるだけならば、簡単なデジタル回路を制作するだけでよい。逆に、今作ろうとしている自作コンピューターでインターネットに接続することは、ほとんど不可能である。絶対に不可能であるとは言わないが、最初の目標としては高すぎる。
その中間として、円周率を求めることを目標にしたい。アルゴリズムとしては、モンテカルロシミュレーションを用いる予定である。これには、精度の良い乱数と、乗算を求めるプログラムが必要である。