標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第381回]

ちょっと数日更新しておりませんでした。
バックヤードではこのところあれこれやりたいことやら、やらなくてはいけないことやら、あれやこれやで大忙しだったのです。
あ。過去形ではありませんでした。
今も大忙しです。

何をやっているのかについては、いずれのちほど。

●MYCPU80完成のメールをいただきました

京都府のKO様からメールをいただきました。
ずっとお仕事が忙しくて手がつけられなかったそうなのですが、やっと時間が取れたので、昨夜からぶっ通しで作業して、一気に完成してしまった!のだそうです。
おめでとうございます。
お疲れ様でした。

え!?昨夜からぶっ通しで…。まさか徹夜で…!?
設計製作した張本人の私自身でも、これを一気に組み立てる、というのはちょっとさすがに苦しいかと…。
恐れ入りました。

KO様からご連絡をいただきましたので、7人の方が完成されたことになります。
いやあ、なにか仲間が増えていくようで、楽しい気分です。
KO様。ご連絡有難うございました。
ごゆっくり休養をなさってください。

あ。まだ完成されていらっしゃらない方も、別に急ぐことはありませんので、ゆっくりマイペースで作業をなさってください。
もし何かお困りのことなどがありましたら、メールなどにてお問い合わせください。

●4ビットCPUの命令セット(アセンブラニーモニック)

前回、8ビットCPUの命令セットについて書きました。
今回は4ビット版です。

4ビットについては、機能をしぼって、どうしても必要なものに押さえることにしました。
入門(何の入門なのかいまいちよくわかりませんが)もしくは教材(これもなんの教材なのか、私は教育者ではありませんので正直なところわかりかねるのですけれど)としての位置付けから考えると、回路も機能もなるべくシンプルなほうがいい、ということになるかと思います。
そこで、8ビット案から、さらに機能を絞り込みました。
(ただし4ビット固有の事情から8ビットでは不要な機能ですけれど、付加しておきたいものもあります)

あ。今回ご紹介する4ビット版というのは、さきにお話しをしておりました、全回路を8ビットで配線しておいて、パーツのみ4ビットで供給するという案とは別の基板です。
この4ビットCPUは最初から4ビットとして設計します。8ビットへの拡張は考慮しません。

そのため、命令も純粋に4ビットCPUとして考えました(もっとも命令の仕組みや働きのほとんどは8ビット版と同じですが)。
こんなところでどうでしょうか?

RST    アドレスFDからrestartします
SCF    CF(キャリーフラグ)をセットします
MOV r,r’   レジスタr’からrへデータを転送します。r、r’は4ビットレジスタA、B、C、D。
MOV r,[SP]   SP(スタックポインタ)の値で示すメモリアドレスの値(下位4ビット)をrに転送します
MOV r,[im8]   im8(8ビットの即値)で示すメモリアドレスの値(下位4ビット)をrに転送します
MOV r,[SP]H   SP(スタックポインタ)の値で示すメモリアドレスの値(上位4ビット)をrに転送します
MOV r,[im8]H   im8(8ビットの即値)で示すメモリアドレスの値(上位4ビット)をrに転送します
MOV r,im8   im8(8ビットの即値、ただしその下位4ビットのみ)をrに転送します
MOV [SP],r   SP(スタックポインタ)の値で示すメモリアドレスにレジスタrを転送します
MOV [im8],r   im8(8ビットの即値)で示すメモリアドレスにレジスタrを転送します
MOV H,r   特殊レジスタHにレジスタrの値を転送します
ADC r   レジスタAとBとCF(キャリーフラグ)を加算し、結果をCまたはDに格納します。結果によってCF、ZF(ゼロフラグ)をセット、リセットします
SBB r   レジスタAからBとCF(キャリーフラグ)とを減算し、結果をCまたはDに格納します。結果によってCF、ZF(ゼロフラグ)をセット、リセットします
CMP   レジスタAとBとを比較し、結果によってCF(キャリーフラグ)、ZF(ゼロフラグ)をセット、リセットします
AND r   レジスタAとBのANDを計算し、結果をCまたはDに格納します。結果によってZF(ゼロフラグ)をセット、リセットします。CF(キャリーフラグ)はクリアされます
OR r   レジスタAとBのORを計算し、結果をCまたはDに格納します。結果によってZF(ゼロフラグ)をセット、リセットします。CF(キャリーフラグ)はクリアされます
XOR r   レジスタAとBのXOR(排他的論理和)を計算し、結果をCまたはDに格納します。結果によってZF(ゼロフラグ)をセット、リセットします。CF(キャリーフラグ)はクリアされます
INR r   レジスタA、B、C、Dの値を+1します。結果によってZF(ゼロフラグ)をセット、リセットします。CF(キャリーフラグ)は変化しません
DCR r   レジスタA、B、C、Dの値を−1します。結果によってZF(ゼロフラグ)をセット、リセットします。CF(キャリーフラグ)は変化しません
INV r   レジスタA、C、Dの値の各ビットの0と1を反転します。フラグは変化しません
RR r   レジスタA、B、C、Dの値をCFを含めて1ビット右に回転します。結果によってCF(キャリーフラグ)をセット、リセットします。ZF(ゼロフラグ)は変化しません
JMP im8   im8(8ビットの即値)で示すメモリアドレスに無条件でジャンプします
JNC im8   CF(キャリーフラグ)が立っていないとき、im8(8ビットの即値)で示すメモリアドレスにジャンプします
JC im8   CF(キャリーフラグ)が立っているとき、im8(8ビットの即値)で示すメモリアドレスにジャンプします
JNZ im8   ZF(ゼロフラグ)が立っていないとき、im8(8ビットの即値)で示すメモリアドレスにジャンプします
JZ im8   ZF(ゼロフラグ)が立っているとき、im8(8ビットの即値)で示すメモリアドレスにジャンプします
CALL im8   im8(8ビットの即値)で示すメモリアドレスにあるサブルーチンをCALLします
RET   サブルーチンからCALL元のアドレスにリターンします
MOV F,r   フラグレジスタFにレジスタrの値を転送します
MOV r,F   レジスタrにフラグレジスタFの値を転送します
OUT [im8],r   im8(8ビットの即値)で示すI/Oアドレスにレジスタrの値(4ビット)を出力します
IN r,[im8]   im8(8ビットの即値)で示すI/Oアドレスからレジスタrに値(4ビット)を入力します
MOV SP,[im8]   im8(8ビットの即値)で示すメモリアドレスの値をSP(スタックポインタ)に転送します
MOV [im8],SP   im8(8ビットの即値)で示すメモリアドレスにSP(スタックポインタ)の値を転送します
MOV SP,im8   im8(8ビットの即値)をSP(スタックポインタ)に転送します
INR SP   SP(スタックポインタ)の値を+1します
DCR SP   SP(スタックポインタ)の値を−1します
JMP [SP]   SP(スタックポインタ)が示すメモリアドレスにジャンプします。
NOP   何もしません(no operation)。実行時間(8μsec)だけ経過します

●補足説明

1)RSTは1バイトコードのサブルーチンです。8080では割込処理のための命令でしたが、今回のボードでは割込みは考えてはいません。RSTは主にデバッグ用です。

2)SCF(キャリーフラグをセットする)はありますが8080のCMC(キャリーフラグを反転する)に相当する命令はありません。
キャリーフラグをクリアするには、AND、OR命令を使います。キャリーフラグとともにレジスタもクリアするにはXOR命令を使います。

3)[SP]はSP(スタックポインタ)を利用したメモリの間接アドレス指定でのメモリを示します。
[im8]はその命令の次のアドレスに書かれた8ビットの値をアドレスとするメモリを示します。
SPの値が12であるとき、[SP]は[12]と同じで、メモリアドレス12を示します。
今回の4ビットCPUは、アドレスバスは8ビットです。アドレスラインはA0〜A7までですから、アドレスが00〜FFの256バイトのメモリしかアクセスできません。

4)内部データバスは4ビットですから、内部のデータラインはD0〜D3までしかありません。
ですからMOV r,[SP]、MOV r,[im8]は指定するアドレスのメモリの値のうち下位4ビットしかレジスタに入れられません。
MOV r,[SP]H、MOV r,[im8]Hは、上の欠点を補うため、上とは逆に、指定するアドレスのメモリの値の上位4ビットをレジスタに入れます。
しかし、MOV [SP],r、MOV [im8],rも同じルールだとすると、レジスタの値をメモリの下位4ビットに入れることはできても、上位4ビットに入れることはできません。もともとメモリは8ビットなので、レジスタのように上下4ビットずつに分けて書く、ことはできません。
そのため、8ビットにはない4ビットの特殊レジスタHを用意しました。
HレジスタにそのほかのA〜Dレジスタの値を転送するための命令、MOV H,rを用意しました。
しかしHレジスタから他のレジスタへの転送命令はありません。
実は、MOV [SP],r、MOV [im8],rを実行すると、指定したメモリの上位4ビットにはHレジスタの値が書き込まれるようにしてあります。これによって、メモリから上下4ビットに分割してレジスタに入れたデータは、加工したのちにまた上下を合成して(MOV H,rを使う)、メモリに格納することができます。

5)ADC、SBBはありますが、キャリーを含まないADD、SUBはありません。
ADD、SUBの機能はそれぞれその実行の前に、キャリーフラグをクリアするためのAND rかOR rを実行することで、代用できるからです。
なお今回の4ビットCPUはADC、SBB、CMP、AND、OR、XORの演算機能が8080と異なっています。
8080では、Aレジスタ(アキュムレータ)とrとの間で演算を行って、CMP以外は、結果をAレジスタに入れる、という動作をします。
今回の4ビットCPUでは、AレジスタとBレジスタとの間で演算を行って、その結果をr(ただしCレジスタかDレジスタ)に入れます。
AレジスタとBレジスタは変化せず、かつ、結果を格納することもできません。
これは奇異なことのように思えますが、このAレジスタとBレジスタは、MYCPU80では命令では制御できなかったALU”A”レジスタと”B”レジスタに相当しますから、今回の4ビットCPUの方が「進化」したとも言えます。
実際8080では演算の片方のレジスタはAレジスタに限られ、また結果の値もAレジスタにのみ入れられたことに比べれば(この点はZ80も同じ)、8080よりも8086に近い、ともいえます。

6)INR r、DCR rは、Aレジスタをワーキングレジスタとして使いますから、Aレジスタの値を破壊します。

7)INV rは8080ではCMA(Aレジスタの各ビットの1と0を反転する)と同じ機能です。8080では、Aレジスタに限られていましたが(Z80も同じ)、今回の4ビットCPUでは、AレジスタのほかCレジスタ、Dレジスタの値も反転することができます。
ただしBレジスタをワーキングレジスタとして使いますから、Bレジスタの値を破壊します。
Bレジスタの値を反転させることはできません。

8)RRはレジスタrをCFを含めた5ビットとして、右に1ビット回転させます。8080のRARに相当する命令ですが、B、C、Dレジスタを対象にできます(8080はAレジスタのみ)。
Aレジスタをワーキングレジスタに使いますから、Aレジスタの値を破壊します。
Aレジスタをローテイトすることはできません。
左ローテイト命令はありませんが、実は左に1ビットローテイト(シフト)することは、値を2倍することと同じなので、ADC rで代用できます。
CFを含まないローテイト命令はありませんが、使用頻度は少ないと思いますので割愛しました。

9)8080ではフラグを保存するために、PUSH PSW、POP PSWがありましたが、今回の4ビットCPUにはPUSH、POP命令はありません。その代わりに、MOV F,r、MOV r,Fを用意しました。この命令を使ってレジスタ経由でフラグをメモリに保存することができます。

10)OUT [im8],r、IN r,[im8]について。
8080ではOUT、IN命令はAレジスタについてのみ働きましたが、今回の4ビットCPUではA〜Dの全レジスタに対して使うことができます。

11)JMP [SP]は、SPを8ビットのインデックスレジスタとして用いたときに、8080で同様のことをHLレジスタを用いて行うPCHL命令に相当する働きです。SPを用いた間接ジャンプ命令です。
CPUの内部動作としては、MOV PC,SPを実行することと同じです。

12)NOP命令(no operation)について。
じつは今回は命令回路を工夫した結果、最長の命令でも16クロックになりました。CPUクロックはMYCPU80と同じ2MHzですから、8μsecです。最長でもその位で実行できるのなら、ということで命令の実行時間を全て8μsecにしてしまいました。
どういうことかといいますと、MYCPU80では各命令の終わりで実行していたマシンクロックカウンタへのリセットパルス(Mclr)を省いてしまったのです(Jx命令のみは例外)。
その結果、短いクロック数の命令でも16クロック経過するまでその命令のままでいて、16クロックが経過すると、カウンタが勝手に0に戻ってしまうため、結果として次の命令が実行されることになります。
未定義の命令コードの場合には、何もしないまま16クロックが経過するまで、待つことになりますから、NOPと同じことになります。
つまり、この4ビットCPUでは未定義コードは全てNOP命令になります。
[09.11.15追記]
機械語(16進コード)の場合にはそういうことでいいのですが、アセンブラではそうもいかないことに気がつきました。
回路としてはなにも用意しなくても、アセンブラとしてはNOPが必要でした。
未定義コードなら何を使っても良いのですが、8080ではNOPのコードは00ですから、今回の4ビットCPUでもNOPを00に割り当てておくようにします。[追記ここまで]

13)HLT命令はありません。
8080のHLT命令は、割込みがかかるまで、スタンバイして待つ、というのが本来の目的だったと思います。
今回の4ビットCPUでは割込みはありませんから、HLT命令を設ける意味はありません。
プログラムを実行して最後に停止する、という目的ならば、JMP命令で実現できます。
たとえば停止したいプログラムアドレスが6E番地だったとすれば、その6E番地にJMP $6Eと書けばよいのです。
アセンブラならば、
XYZ:JMP XYZ
のように書けばよいのです。

なお、上で示した命令リストのうち、この色で示した命令はもっとも基本的な命令です。
これさえ覚えてしまえば、機械語のプログラムは半ば理解できたと言ってもよいと思います。

おおお。そうでした。
機械語プログラムの入門としては、結構いけるのではありませんか。

PICなども最近はCで組んだりするようですけれど、ローエンドのPICのプログラムをCで組んだりするのは、なんだかなあという気がします。
しかしPICのアセンブラはちょいとクセがあって、機械語の経験がゼロでいきなりPICのアセンブラ、というのはちょっとハードルが高そうです。

今回の4ビットマシンはニーモニック表現をできるだけ理解しやすくて、かつインテル系のニーモニックに近い表現にしてありますから、これで基本を習得すれば、PICやそのほかの機械語(アセンブラ)にもきっと応用が利くと思います。
アセンブラに詳しい方ならばすでにお気づきのことと思いますが、アセンブラの表現は8080よりも、8086に近いものにしてあります。

DOSプロンプトでは、今でも(WindowsXPでも)8086の機械語プログラムを実行させることができます。
8086アセンブラで作ったプログラムは拡張子がexeではなくてcomになります。
64KBのセグメントの壁を意識するといきなり敷居が高くなりますが、アセンブラとかBASICとかといった、言語処理プログラムそのものを作ろうなどと考えたりしなければ、セグメントを意識する必要は、まずありませんから、それなら16ビットも8ビットも基本は変わりません。

そういえば、昔は情報処理技術者試験(今はなんというのか知りませんが)にも仮想機械語マシンのプログラムを書く、問題があったように記憶しています。

まあ、何でもかでも勉強と結びつけなくても、もっと気楽に電子工作として楽しんでもらえればよろしいのですけれど、供給する側の気持ちとしては、ついあれこれ用途を列挙してなるべく販路を広げたい、という不純な動機が見え隠れしてしまいます、です。

●閑暇休題

(ぜんぜん、ヒマじゃありませんけれど)

不純な動機といいますと、この連載について、暇人が趣味で工作を楽しんでいるらしいぞな、とお思いの方もいらっしゃるか、と思いますが、そんなことはありません、です。

不純と言えば不純そのもの、しっかり販売目的でやっております。
決してボランティアではありませんし、趣味悠々などでもありません。
純粋に趣味ならば、中日電工のサイトで公開したりなどいたしませぬ。
そんなことをしたりすると、公私混同ということで税務署から叱られてしまいます(まあ税務署から叱られるほどの売上はありませんから、それは無いのですけれど)。

だいたいこの歳になって純粋だったりしたら、そりゃあかえって気持ちが悪い。
ジジイやオバアは不純なものです。
なんたって俗世のアカに染まってここまで生き延びてきたのでありますから、したたかでなければとても生きてはこられませんです。

自分でも常々思うのですが、団塊の世代つうのは、生れ落ちたときから熾烈な生存競争にさらされて生きてきたのでありますよ。
東京や大阪の事情は知りませんけれど、私は名古屋でしたけれども、そのど真ん中、中区栄の近くで育ちましたから、小学校などスシ詰め教室の見本、でした。
確か1クラスに60人以上おりました。2人がけの机が横に4つ、つまり横に8人。縦に7つか8つ。
一番後ろは、椅子を引くと後ろの学級文庫の棚にくっついてしまうというすごいものでしたね。
それでも先生は一人。いまどきのような副担任などという贅沢なものはありませんから、いくら先生でも全部の面倒はとても見きれない(と思います)。

タケシがよくテレビで言っていますけれど、まったくその通りで、あの時代、DDTなんぞ大掃除のときには、しっかり頭からかぶってしまって、それでも平気でしたから、まあ、ゴキブリ並みの生命力だったのでしょうねぇ。
お菓子なども貴重品でしたから、地面に落ちて(今のように全面舗装ではありませんよぉ。しっかり土のまんま)ちょっと土がついたくらいなら、手でぱっぱと払ってそのまま口にポイ(アメなど口の中でしばらく砂がシャリシャリしてるけれど、これは最後に吐き出せばいい)。
そ、そんなことしたら、バイキンがぁ…。
って、バイキンに負けてしまうような子はとっくの昔にあの世へいっちゃってます、です。

食べ物を落とした、で思い出しましたが、昔は給食のパンをうっかり床に落としたりしたって、決して捨てたりはしませんでした。
なんたって、食い物は貴重品でしたから。

おお、給食と言えば、あのちょいと異な味の、コーヒー色(ココア色?)のミルク(牛乳じゃありませんよぉ)、こいつはさすがにわれらがガキどもも苦手で、みんな鼻をつまんで一気飲みをしておりました(たまにこいつをお代わりするヤツなどがいると、これはもうガキの風上にもおけぬとんでもないヤツだ、なんてみんなにいじめられたりしたものです)。
今から思うと、給食費も満足に払えないような家庭の子などもいて、そういう子にとっては給食は一番の楽しみだったかも知れません。
聞くところによると(本当かどうかは知りませんが)、あのミルクは、アメリカでバターなどをとったあとの脱脂粉乳を、緊急援助物資ということで、プレゼントしてもらったものだったとか。
まあおかげで、戦後の物資不足の中で、わたしらは栄養不良にもならずに生きてこられたわけです。

あ。つい脱線してしまいました(もとから脱線していますけれど)。
床に落としてしまったパンの話でした。

そいつをどうするか、と言いますと、そこはそれ、学校のことですから、さすがに「そのまま食え」とは言えません。
先生が「給食室(調理場)へ持っていきなさい」と言います。
で、そこへ持っていくと給食のおばさんが、そのパンをガスの火であぶってくれます。加熱殺菌ですなあ。

ところで、給食で時たまパンにマーガリンなどという、庶民ではなかなか味わえない贅沢なものがつくことがありました。
しかし、生のパンにマーガリンというのは余りおいしくない。
せっかくのマーガリンでありますから、できるだけおいしくいただきたい。
そこで。

われらがガキ大将が何を考えたか、もうおわかりでしょう。

パンをわざと床に落とすのですよ。
こいつは過失ではなくて故意です。知能犯つうか確信犯です。
衛生観念ゼロ。もうどーしようもないガキどもでした。

パンにマーガリンのつく日に限ってガキどもがぞろぞろと連れ立って、落としたパンをもって給食室を訪れるのでありました。
「また、あんたたちなのぉ」

いやあ。しっかりトム・ソーヤの時代のままでした。
子供たちの世界がトム・ソーヤやピーター・パンの世界から離れてしまったのは、いつの頃からなのでしょうか?

●有償か無償か

不純な動機、というお話しに戻りますと、よく世間では、個人がお金をもらって商売をすることが、なにやらよくないことで、無償で、いわばボランティアですることが、よいことだというような概念があるように思います(そりゃあ士農工商の名残かも)。
この連載につきましても、「なんだ、やっぱり販売目的か」などと一気に熱が冷めてしまわれる方もおいでかもしれません。
しかしながら、敢えて言いますけれど、有償だからいかん、というものではないと思いますよ。

無償ということになると、それを受ける側にとってはまことに好都合ではありますけれど、そこはそれ、不満の持って行き場が無い。
この説明は何だ?もっと丁寧に説明せんか、こら。
などと文句を言うことができません。

提供する側にしてみると。
アンタにそんなこと言われても、ねえ。
こっちはタダで提供してるんだからさぁ。ちっとは自分でも汗かいて、努力しなさいよぉ。
てなことになります。

いや。なかにはこれでも無償か?と、とても信じられないような丁寧な作りのものもありますが、機能はともかくとして、説明書とか、あとのフォローとかということになりますと、そこが有償と無償の一番の違いになるか、と思います。

供給する側としても、無償ということだと、つい、自分に甘くなります。
ま、こんなもんでいっか。どうせタダなんだし、趣味でやってんだから、よお。

なかでも説明書作りは一番面倒くさくて、じつに疲れる、面白くもなんともない、いやな作業です。
でも、おアシをいただくということになると、そこは避けては通れません。

ところが本当はやりたくない、その嫌な作業なのですけれど、お客様に理解してもらえるように、とか、あるいは喜んでもらえるように、とかという気持ちで作業をすることによって、そこをいい加減にしていたら得られなかった改善点とか欠陥とか、あるいは自分自身の技術、知識の向上ということまでも得ることができるように思います。

それに。
販売目的だものですから、こうやって書いたものは、可能な限り、商品にして世に送り出そうとするわけです。
その意味では、結果的にどのような商品になるかは別として、こんな長文に、長々おつきあいいただいていたとしても、最終的に裏切られたりはいたしません、です。安心してお読みいただくことができます。

これが、趣味、無償、ということになりますと、まあ、本人の気の赴くままということになりがちですから、半年待っても一向に更新されないとか、さわりを書いただけで、あとはいつか書くからね、で終わってしまうことにもなりかねません(Webには、そんなページもいっぱいあるのでは?)。

まあ、途中で冗談として、「この企画もこれで終わり」などと書いているところもあったかもしれませんが、それはあくまで冗談。
よく、顔は笑っているけれど、目は笑っていない、などということを言いますけれど、実際その通りで、私自身はまじめもまじめ、はなから真剣勝負なのですよ。

ものごとには何事でも、予測と異なる事態とか、思い違いということがありますけれど、でも無償と有償との相違はそこにもあって、商売ともなれば、ある程度の確かさがなければ、ただの見込みとか予定とかを軽々しく公表したりはしないもの、だと思っています。

MYCPU80の製作記事を、この中日電工のホームページで書き始めたのは、昨年の7月のことで、そのときには、まだ回路図だけがノートにエンピツ描きでできていただけだったのですが(その回路図は5月から2ヶ月ほどで描き上げたものです)、それを個人のブログなどではなく、中日電工の、商用のページで立ち上げた時点で、私自身は100%確実とまではいかないものの、過去の経験からして、「これは画餅ではない。多分実現できる」とほぼ確信していたのです(不安なら個人のブログで、しかもペンネームでスタートしますよぉ)。

いい加減なことを書いたりしましたら、まあ、たいした看板ではありませんけれど、それでも、過去30年の信用が全部パアになってしまいます。
この連載が始まった当初に、「こんなとてつもないものは、多分出来ないだろう」とか、「きっとまともには動くまい、完成するところまでは出来っこないが、万一完成したとしても、きっと誤動作するに違いない」とお思いになられた方もたくさんいらっしゃったかと、思います。
まあ、そういうお方などは、きっとここまで長々お読みにはならない、だろうと思いますから、ここまでずっとお読みいただいていらっしゃる方は、当方にとりましては、まことにありがたい読者様なのであります(ひょっとするとお客様になっていただけるかも♪)。

MYCPU80をご購入いただいた方、そして今もご予約していただいている方(お待たせして申し訳ありません!あともう少しです)、さらには、ずっとおつきあいいただいてお読みいただいている読者の方々、の名誉にかけまして、あえて申しますけれど、MYCPU80は決して、たまたま動いたとか、かろうじて結果的に成功した、とかというような、いい加減な、趣味の産物などではありません。

まあ、途中あれこれ試行錯誤もありましたけれど、当初からそれなりの実現性を確信して企画したものです。
もちろんご予約中の方を含めまして、13人もの方にご購入いただけるとは予想してもいませんでしたけれど、あくまで年寄りの趣味などという甘い気持ちで考えたものではなくて、それなりの価値あるものを作る、という気持ちで開発に臨んだものです。

ということで、現在進行中の8ビット、4ビットも、趣味などではなくて、商品として提供することを念頭においています。
もちろん、実際にご購入いただかなくても、何らかの知識なりなんなりを得ていただく、ということで、当連載記事をお読みいただくだけでも、有りがたい読者様でありますから、決してぞんざいに扱ったりはいたしません。
ご遠慮なさらず、ご意見、ご要望などをお寄せいただきますよう、お願いいたします。

商用にしては、ずいぶん激しく脱線するではないか、とお思いかも知れませんが、そこはそれ、この連載記事そのものは、有償ではありませぬので。あしからず。
最初にお断りしておりますように、ブログ風、なのであります。
2009.11.14upload
2009.11.15追記

前へ
次へ
ホームページトップへ戻る