IC・トランジスタで出来たコンピューターを設計・製作するためのブログ
| Jeans & Development | 電子ブロック工房 | 三日坊主 | フロントページ |
CPU ver 0.0.7.1 [CPU]
2009年10月7日
CPUの規格を、変更。
data line: 8 bits address line: 14 bits (8 bits + 6 bits; 256 x 64; 16K bytes) registors A(8), F(8), PC(12), SP(8) F: Z, C, S5, S4, S3, S2, S1, S0 (Z, C: zero and carry flags; S: segment registor) stack segment is always 0x3f program can be written from 0x0000 to 0x0fff (total 4K bytes) All 2 byte commands 0x00, 0x01, ... , 0x0f: goto, operand: 12 bits. 0x10, 0x11, ... , 0x1f: call, operand: 12 bits. 0x20, 0x21, ... , 0x27: A=A+XX, A=A-XX, A=(XX), [A]=(XX), A=A&XX, A=A|XX, (XX)=A, (XX)=[A] 0x2800 - 0x28ff: A=XX 0x2900 - 0x29ff: stack-using processes bit 0-1: A, reserved, F, or none bit 2: use also c7 for read/write bit 3: SP++ or SP-- at c4 bit 4: SP++ or SP-- at c6 bit 5: SP++ or SP-- at c8 bit 6: 0: SP++, 1: SP-- bit 7: 0: read, 1: write (c5) 0x2900 - 0x2907: A=[SP], reserved, F=[SP], reserved 0x2908 - 0x290f: [SP]=A, reserved, [SP]=F, reserved 0x2910 - 0x2917: pop A, reserved, pop F, SP++ 0x2918 - 0x291f: [++SP]=A, reserved, [++SP]=F, 0x2920 - 0x2927: A=[SP++], reserved, F=[SP++], 0x2928 - 0x292f: [SP++]=A, reserved, [SP++]=F, 0x2930 - 0x2937: A=[++SP++], reserved, F=[++SP++], SP+=2, , , , return 0x2938 - 0x293f: [++SP++]=A, reserved, [++SP++]=F, 0x2960 - 0x2967: A=[SP++++], reserved, F=[SP++++], 0x2968 - 0x296f: [SP++++]=A, reserved, [SP++++]=F, 0x2970 - 0x2977: A=[++SP++++], reserved, F=[++SP++++], SP+=3 0x2978 - 0x2978: [++SP++++]=A, reserved, [++SP++++]=F, 0x2990 - 0x2997: A=[--SP], reserved, F=[--SP], SP-- 0x2998 - 0x299f: [--SP]=A, reserved, [--SP]=F, 0x29a0 - 0x29a7: A=[SP--], reserved, F=[SP--], 0x29a8 - 0x29af: push A, reserved, push F, 0x29b0 - 0x29b7: A=[--SP--], reserved, F=[--SP--], SP-=2 0x29b8 - 0x29bf: [--SP--]=A, reserved, [--SP--]=F, 0x29e0 - 0x29e7: A=[SP----], reserved, F=[SP----], 0x29e8 - 0x29ef: [SP----]=A, reserved, [SP----]=F, 0x29f0 - 0x29f7: A=[--SP----], reserved, F=[--SP----], SP-=3 0x29f8 - 0x29ff: [--SP----]=A, reserved, [--SP----]=F, 0x2a00 - 0x2a03: A=A (NOP), reserved, A=F, A=SP 0x2a04 - 0x2a07: reserved 0x2a08 - 0x2a0b: F=A, reserved, resreved, F=SP 0x2a0c - 0x2a0f: SP=A, reserved, SP=F, reserved 0x2a10 - 0x2aff: reserved 0x2b00 - 0x2dff: reserved 0x2e00 - 0x2eff: (XX)++ 0x2f00 - 0x2fff: (XX)-- 0x30, 0x31, ... , 0x38: A=A+(XX), A=A-(XX), A=A+(XX)+C, A=A-(XX)-C, A=A&(XX), A=A|(XX), A=A^(XX), A=~(XX) 0x39, 0x3a, ... , 0x3f: (XX)=(XX)+A, (XX)=(XX)-A, (XX)=(XX)+A+C, (XX)=(XX)-A-C, (XX)=(XX)&A, (XX)=(XX)|A, (XX)=(XX)^A, (XX)=~A 0x40, 0x41, ... , 0x4f: jz, operand: 12 bits. 0x50, 0x51, ... , 0x5f: jc, operand: 12 bits. 0x60, 0x61, ... , 0x6f: jnz, operand: 12 bits. 0x70, 0x71, ... , 0x7f: jnc, operand: 12 bits. 0x80, 0x81, ... , 0x8f: reserved 0x90, 0x91, ... , 0x9f: reserved 0xa0, 0xa1, ... , 0xaf: reserved 0xb0, 0xb1, ... , 0xbf: reserved 0xc0, 0xc1, ... , 0xcf: reserved 0xd0, 0xd1, ... , 0xdf: reserved 0xe0, 0xe1, ... , 0xef: reserved 0xf0, 0xf1, ... , 0xff: reserved (XX) = [3Fh:XX]; used as registors; genelary, F8-FF (8 registors) are used.
PIC16f690とMAX232でシリアル通信 [PIC]
2009年9月27日
PCとPICとの間で通信ができれば、マイクロコントローラを用いた回路の可能性が広がる。今時のコンピューターでは外部回路との通信にはUSBがメインだが、PIC18f14k50などを用いれば、これができるらしい。他には、FT232Rなどを用いた方法があるようだ。これらの方法は、USB用のドライバを用意する必要があるという点で、少し敷居が高い。少し勉強して、後ほどトライすることにしたい。
今やろうとしているのは、MAX232を用いてRS232Cで通信する方法。今使っているノートパソコンにはRS232Cの端子は無いのだが、USB→RS232C変換機を用いてRS232Cのシリアル通信を行うことができる。

今やろうとしているのは、MAX232を用いてRS232Cで通信する方法。今使っているノートパソコンにはRS232Cの端子は無いのだが、USB→RS232C変換機を用いてRS232Cのシリアル通信を行うことができる。

PIC16f690を使った周波数測定器と発振回路 [PIC]
2009年9月19日
色々と考えるところ有って、PIC16f690を用いて、1 Hzから50 MHzまで測定できる簡易周波数測定器と、その動作検証のための発振回路を作成した。


回路進捗 [シミュレーション]
2009年9月18日
現在の回路は源内CADで書かれており、次のとおり。

(<%media(20090919-main_0063_06.zip|ここからダウンロード)%>)
シミュレーションの結果は、次のとおり。


(<%media(20090919-main_0063_06.zip|ここからダウンロード)%>)
シミュレーションの結果は、次のとおり。

設計進捗 [CPU]
2009年9月18日
ジャンプ・コール・リターンの3つの命令が実行できるようになった。とりあえず、バックアップの意味もかねて、記事を上げる。
現在設計中のコンピューターの特徴は、次のとおり。
・データラインは8ビット、アドレスラインは14ビット(16384 bytes)。
・2つの8ビット汎用レジスター、X, Y。
・フラグは、ゼロとキャリーの2つ。これらを含むFレジスターは、データ読み書きのセグメントアドレスを含む。
・ プログラムカウンタは、12ビット。従って、全アドレスのうち4分の1の、4096バイトのみがプログラミングに利用できる。
・スタックポインタは、8ビット。全アドレスの最後の256バイトのみが、スタック領域として利用できる部分。
・すべての命令が2バイトで記述される。
現在設計中のコンピューターの特徴は、次のとおり。
・データラインは8ビット、アドレスラインは14ビット(16384 bytes)。
・2つの8ビット汎用レジスター、X, Y。
・フラグは、ゼロとキャリーの2つ。これらを含むFレジスターは、データ読み書きのセグメントアドレスを含む。
・ プログラムカウンタは、12ビット。従って、全アドレスのうち4分の1の、4096バイトのみがプログラミングに利用できる。
・スタックポインタは、8ビット。全アドレスの最後の256バイトのみが、スタック領域として利用できる部分。
・すべての命令が2バイトで記述される。
源内CADでオープンコレクタ [一般的なこと]
2009年9月18日
源内CADには、標準ではオープンコレクタ(オープンドレイン)の回路をシミュレートする機能が無い。自作コンピューターでは、回路簡略化のため、オープンコレクタ(+プルアップ)を多用する可能性が高い。これを源内CADでシミュレートするための仕組みを考えた。
JK-FF [シミュレーション]
2009年8月9日
JKタイプのフリップフロップの勉強。これを今まであまりよく理解していなかった。もしかしたら便利な場面が出てくるかもしれないので…。
まず、Wikipediaに載っている最も簡単な回路を再現してみた。

回路図中でNANDゲートにHやLが有るのは、シミュレーション開始時にデフォルトでHやLを出力するように改変した特殊なもの。これを入れることで、無事にシミュレーションが開始する。
ところが、どうもうまくいかない。j=Hのときにクロックを与えると(この回路では、短い幅のクロックを与えないといけないらしい)ちゃんと設定される。しかし、k=Hのときだと、どんな形のクロックを与えても、必ず発振してしまう。
まず、Wikipediaに載っている最も簡単な回路を再現してみた。

回路図中でNANDゲートにHやLが有るのは、シミュレーション開始時にデフォルトでHやLを出力するように改変した特殊なもの。これを入れることで、無事にシミュレーションが開始する。
ところが、どうもうまくいかない。j=Hのときにクロックを与えると(この回路では、短い幅のクロックを与えないといけないらしい)ちゃんと設定される。しかし、k=Hのときだと、どんな形のクロックを与えても、必ず発振してしまう。
タイミング回路、再び [デジタル回路]
2009年7月23日
8 bit CPU への移行に伴って、クロック周りの回路を大幅に書き換えた。
まずできたのは、<%media(20090724-clock4.zip|以下のもの)%>。

まずできたのは、<%media(20090724-clock4.zip|以下のもの)%>。



