■0式CPU
 ○略式説明
  命令がなくアドレス指定だけですみます。
  基本が簡単なので簡単にCPUの設計がすみます。
  (学生のころ簡単なCPUを考えようとして基本設計しました。)
  並列処理が簡単に出来ます。
  説明を見たほうが良いでしょう。

 ○説明

  基本的に32ビットです。8ビットでも動きますが、32ビット、64ビット以上でも良いです。
  レジスターとメモリーは同じです。
  リセットされると0000に実効命令のプログラムのアドレス(H10000)が書き込まれます。
  (ここではH000000000を0000とします。)

  実行系、メモリー操作(アドレス指定)(命令)

  書き込みアドレス  書き込みデータ
  H00000000 H00000000
  32ビットの場合、この64ビットが一命令になります。
  (並列処理とキャッシュとでスピードを補います。また、演算待ちがありません。)
  (基本的にマイクロプログラムが入りません。ワイヤーで出来ます。)
  実行されると自動的に実行命令アドレスが2加算され、次が実行されます。

  メモリー体系

  アドレス  レジスター 説明
  0000  □□□□  実行命令アドレスが入ります。ここを書き込めば固定ジャンプします。
  0001  □□□□  間接ジャンプします。
  0002  □□□□  ここに書き込みがあると0003に間接書き込みします。
  0003  □□□□  0002に書き込みがあると、間接アドレスに書き込みします。
  0004  □□□□  分岐、演算指定レジスターです。ここに書き込みがあると演算します。
  0005  □□□□  第1項が入ります。
  0006  □□□□  第2項が入ります。
  0007  □□□□  答えが入ります。0004の内容によってはジャンプします。
  0008  □□□□  次のプロセスと実効命令アドレスが入ります。
  0009  □□□□  繰り返しです。このため最大32つのプロセスが同時に動かせます。
  000A  □□□□


  0100  □□□□  これ以上は、設計者が自由にできます。実行系を創っても良いし。
  0101  □□□□  演算系3DやHSV→RGB等にも使えます。
  0102  □□□□  間接アドレス系や64ビットにも簡単に拡張出来ます。
  0103  □□□□

  演算中に「答え」にはアクセスできません。その間、他の演算ができます。(平行処理が可能。)

  こんな事も出来ます。

  0200  □□□□  3DのXYZの回転データがあるアドレスを指定
  0201  □□□□  書き込み側の指定。これは0200と同じでも良い
  0202  □□□□  0200と同じ事、待ち時間、こちらにアクセスする。
  0203  □□□□  
  この場合、1回アクセスするだけで計算してくれます。
  どんどん次にアクセスすれば演算が行われて行く。
  平行処理が上手くいくようにするのはコンパイラでコントロールする。

  64ビット命令形にも簡単に移行できます。
  32ビット系のメモリーアドレスの後に直接メモリーアドレスが続きます。

  0400 □□□□ 64ビット実行アドレス上位。ここにアクセスする事によって動き始める。
  0401 □□□□ 64ビット実行アドレス下位。
  0402 □□□□ 64ビット間接ジャンプアドレス上位。ここにアクセスよって実行される。
  0403 □□□□ 64ビット間接ジャンプアドレス下位。ここにアクセスしても実行はない。
  0404 □□□□ 64ビット上位書き込みアドレス。
  0405 □□□□ 64ビット下位書き込みアドレス。
  0406 □□□□ 64ビット上位データ
  0407 □□□□ 64ビット下位データ
  0408 □□□□ 64ビット系読み込みアドレス指定、64ビット上位
  0409 □□□□ 64ビット系読み込みアドレス指定、64ビット下位
  040A □□□□ 64ビット系書き込みアドレス指定、64ビット上位
  040B □□□□ 64ビット系書き込みアドレス指定、64ビット下位
  以下同じ

  いったん動き出すと割り込みがあるまで動きつづけます。


 ○16ビットCPUの場合のメモリーマップ

  0000 0000 実行アドレス。
  0001 0000 常に0。
  0002 0000 間接アドレス。
  0003 0000 間接アドレス内容
  0004 0000 ブロック転送量
  0005 0000 転送アドレス
  0006 0000 転送アドレス先
  0007 0000 内容を1足す
  0008 0000 内容を2足す
  0009 0000 内容を1引く
  000A 0000 内容を2引く
  000B 0000 OUT アドレス
  000C 0000 OUT データ
  000D 0000 IN  アドレス
  000E 0000 IN  データ
  000F 0000 0内容のときのアトレスジャンプ
  0000 0000 アドレスジャンプ先
  0011 0000 ゼロ以上の場合のアドレスジャンプ
  0012 0000 アドレスジャンプ先
  0013 0000 ゼロ以下の場合のアドレスジャンプ
  0014 0000 1のときアドレスジャンプ
  0015 0000 アドレスジャンプ先
  0016 0000 シフトビット数、ここへアドレスジャンプするとシフトする。
  0017 0000 シフト内容1 移動されるビット
  0018 0000 シフト内容2 
  0019 0000 シフト内容3 移動する残りのビット
  001A 0000 足し算 左辺
  001B 0000 足し算 右辺
  001C 0000 足し算 答え
  001D 0000 足し算 答え上
  001E 0000 引き算 左辺下位
  001F 0000 引き算 左辺上位
  0020 0000 引き算 右辺
  0021 0000 引き算 答え
  0022 0000 掛け算 左辺
  0023 0000 掛け算 右辺
  0024 0000 掛け算 答え下位
  0025 0000 掛け算 答え上位
  0026 0000 割り算 左辺
  0027 0000 割り算 右辺
  0028 0000 割り算 答え
  0029 0000 割り算 余り
  002A 0000 AND
  002B 0000 AND入力、答え
  002C 0000 OR
  002D 0000 OR入力、答え
  002E 0000 XOR
  002F 0000 XOR入力、答え
  0030 0000 NOT 入力答え
  0031 0000 ビット取り出しビット位置
  0032 0000 ビット取り出しビット数
  0033 0000 ビット取り出し入力答え

  8000 0000 E000 実行アドレス、この場合、E000から命令を実行する。

  詳しく知りたいひとはメールください。
  taisuke2000@do7.enjoy.ne.jp