1 bit CPU
2007年7月18日
1 bit のアキュムレータでも、CPU として機能する設計が出来そうだ。これを採用するかどうかは分からないけれど、とりあえずメモ。
レジスタは、1ビットのアキュムレータが、a0 と a1 の2つ。フラグは例によって、キャリーとゼロの2つ。メモリ読み書き用の b レジスタが6ビットである。メモリ空間は、1ワードが6ビットで、アドレスラインが12ビット。4096ワードで、これは24kビットの3kバイトに相当する。
6ビットのbレジスタは機能として、インクリメント・デクリメント・右ローテート及びメモリへの読み書きだけなので、アキュムレータとは言いがたい。
1ビットの a0, a1レジスタには、加算・減算・ビット演算機能を持たせた。演算は、a0, a1 レジスタ経由で、1ビットずつ行う。
インデックスポインタ(ip)、データポインタ(dp)、スタックポインタ(sp)は6ビットである。インデックスポインタとデータポインタはそれぞれ、コードセグメント(cs)、データセグメント(ds)と共に用いる。スタックのセグメントは固定の仕様。64ワードのスタック領域が使えるので、十分だろう。dpとspは、インクリメント・デクリメントの両方が、ip はインクリメントが出来る。
ip と cs には、もう一つのペア(ip', cs')があり、ジャンプ命令やユーザー定義命令の際に、ip と cs のコピーがこれらのレジスタに渡される。インクリメントが可能で、メモリ内容をbレジスタに渡すことが可能。
なお、ゼロフラグは、インクリメント・デクリメントのときのみ影響を受ける仕様。
ニーモニックの052-056と060-077の部分はユーザ定義命令で、ジャンプ命令などもここに含まれている。アドレスの00020-00277の部分に、これら用のプログラムを書き込む。00300-00377の部分も、ユーザ定義命令のサブルーチンとして使用予定なので、実際にプログラムが書き込めるのは00400-00677 の部分だけである(容量が足りないか?)。00700-00777にはRAMを持たせて、データの保持及びスタック領域に用いる。
ニーモニック表(8進法表記)
ジャンプ命令・及びユーザ定義命令案
1 bit registers and flags: a0, a1, z, c 6 bit registers: b, ip, cs, ip', cs', dp, ds, sp
レジスタは、1ビットのアキュムレータが、a0 と a1 の2つ。フラグは例によって、キャリーとゼロの2つ。メモリ読み書き用の b レジスタが6ビットである。メモリ空間は、1ワードが6ビットで、アドレスラインが12ビット。4096ワードで、これは24kビットの3kバイトに相当する。
6ビットのbレジスタは機能として、インクリメント・デクリメント・右ローテート及びメモリへの読み書きだけなので、アキュムレータとは言いがたい。
1ビットの a0, a1レジスタには、加算・減算・ビット演算機能を持たせた。演算は、a0, a1 レジスタ経由で、1ビットずつ行う。
インデックスポインタ(ip)、データポインタ(dp)、スタックポインタ(sp)は6ビットである。インデックスポインタとデータポインタはそれぞれ、コードセグメント(cs)、データセグメント(ds)と共に用いる。スタックのセグメントは固定の仕様。64ワードのスタック領域が使えるので、十分だろう。dpとspは、インクリメント・デクリメントの両方が、ip はインクリメントが出来る。
ip と cs には、もう一つのペア(ip', cs')があり、ジャンプ命令やユーザー定義命令の際に、ip と cs のコピーがこれらのレジスタに渡される。インクリメントが可能で、メモリ内容をbレジスタに渡すことが可能。
なお、ゼロフラグは、インクリメント・デクリメントのときのみ影響を受ける仕様。
ニーモニックの052-056と060-077の部分はユーザ定義命令で、ジャンプ命令などもここに含まれている。アドレスの00020-00277の部分に、これら用のプログラムを書き込む。00300-00377の部分も、ユーザ定義命令のサブルーチンとして使用予定なので、実際にプログラムが書き込めるのは00400-00677 の部分だけである(容量が足りないか?)。00700-00777にはRAMを持たせて、データの保持及びスタック領域に用いる。
ニーモニック表(8進法表記)
/* 000-007 */ a0=0 a0=1 a1=0 a1=1 z=0 z=1 c=0 c=1 /* 010-017 */ a0=!a0 a0=a0+a1+c a0=a0-a1-c a0=a0&a1 a0=a0|a1 rol b b++ b-- /* 020-027 */ b<->dp b<->ip b<->ds b<->cs ip'++ b=[ip'] [dp]=b b=[dp] /* 030-037 */ a0<->c a0<->a1 a1<->c nop if nc if c if nz if z /* 040-047 */ pop b pop a0 pop a1 pop a0a1 pop f pop a0f pop a1f pop a0a1f /* 050-057 */ push b sp-- jmp 0xx ret call 0xxxx cs:ip<->cs jmp 0xxxx push a0a1f /* 060-077 */ user defined commands
ジャンプ命令・及びユーザ定義命令案
00000: nop c=1 rol b c=1 rol b c=1 rol b c=1 rol b c=1 rol b rol b b<->sp jmp 00400 00020: 'jmp 0xx': push b b=[ip'] b<->ip' pop b cs:ip<->cs':ip' nop nop 00030: 'ret': b<->ip' pop b b<->cs' pop b b<->ip' cs:ip<->cs':ip' nop nop 00040: 'call 0xxxx': push f b<->ip' b++ push f b++ push b b<->ip' b<->cs' if c b++ pop f if c b++ push b b<->cs' pop f 00060: 'jmp 0xxxx': push f push b b=[ip'] ip'++ push b b=[ip'] b<->cs' pop b b<->ip' pop b pop f cs:ip<->cs':ip' nop nop nop nop 00100: user-defined commands 00200: user-defined commands 00100: 'b=0xx': push f b=[ip'] ip'++ pop f cs:ip<->cs':ip' nop nop nop 00110: 'ror b': rol b rol b rol b rol b rol b cs:ip<->cs':ip' nop nop 00120: 'dp++': b<->dp b++ b<->dp b<->ds if c b++ b<->ds cs:ip<->cs':ip' 00130: 'dp--': b<->dp b++ b<->dp b<->ds if c b++ b<->ds cs:ip<->cs':ip' 00140: '[dp]++' push b b=[dp] b++ pop b cs:ip<->cs':ip' 00145: jmp 00300 00150: '[dp]--' push b b=[dp] b-- pop b cs:ip<->cs':ip' 00155: jmp 00300 00160: '[dp]=[dp]+b': b<->ip' push b b<->ip' b<->cs' push cs' b<->cs' jmp 045 00170: '[dp]=[dp]-b': b<->ip' push b b<->ip' b<->cs' push cs' b<->cs' jmp 055 00200: 'b<->[dp]': push b b=[dp] pop b [dp]=b cs:ip<->cs':ip' nop nop nop 00210: 'skip 2': ip'++ ip'++ cs:ip<->cs':ip' nop nop nop nop nop 00220: 'ror b,[dp]' a1<->c a0<->c ror b a0<->c b<->[dp] ror b b<->[dp] cs:ip<->cs':ip' // a0>>b>>a0, a1>>[dp]>>c>>a1 // 00300: sub-routine for user-defined commands 00300: //[dp]=[dp]+b ror b,[dp] a0=a0+a1+c ror b,[dp] a0=a0+a1+c ror b,[dp] a0=a0+a1+c ror b,[dp] a0=a0+a1+c ror b,[dp] a0=a0+a1+c ror b,[dp] a0=a0+a1+c ror b,[dp] a1<->c ret 00317: //[dp]=[dp]-b ror b,[dp] a0=a0-a1-c ror b,[dp] a0=a0-a1-c ror b,[dp] a0=a0-a1-c ror b,[dp] a0=a0-a1-c ror b,[dp] a0=a0-a1-c ror b,[dp] a0=a0-a1-c ror b,[dp] a1<->c ret 00336: 00400: program start address
コメント
Nike KD (2019年5月28日 15:22:30)
Kate Spade Bags http://www.katespade-purses.us.com/
Suicoke Shoes http://www.suicoke.us/
Golden Goose Shoes http://www.goldengoosesneakers.ca/
Ralph Lauren http://www.ralphlauren-polo.us/
Mizuno http://www.mizunoshoes.org/
Yeezy Trainers http://www.yeezytrainers.co.uk/
Karen Millen Outlet http://www.karenmillendresses.co.uk/
Supreme T Shirt http://www.supremeshirt.us/
North Face Outlet http://www.northfacejacket.us.org/
みました
Suicoke Shoes http://www.suicoke.us/
Golden Goose Shoes http://www.goldengoosesneakers.ca/
Ralph Lauren http://www.ralphlauren-polo.us/
Mizuno http://www.mizunoshoes.org/
Yeezy Trainers http://www.yeezytrainers.co.uk/
Karen Millen Outlet http://www.karenmillendresses.co.uk/
Supreme T Shirt http://www.supremeshirt.us/
North Face Outlet http://www.northfacejacket.us.org/
みました