TTLでCPUを作ろう!標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)(ホントは74HC、CMOSなんだけど...)[第359回]●もう完成間近のようです何回か紹介させていただいているYT様のブログです。FIAT500と洗車の日々・・・(http://plaza.rakuten.co.jp/flyback/)ほとんど完成!あと残るは[13]TK80回路のみ、なんだそうです。私も最後の追い込みでがんばっています。説明書は全部!やっと完成しました。8080アセンブラとかUSB送受信プログラムも完成しました。CDROMに焼くまえに、図版の確認をしなければいけません。シルク図と回路図は修正作業完了しました。ああ、タイミングチャートがまだ未確認でした(これはちょっときついです)。ほんとにもうあと少しです。●前回の昔話の続きです前回は、創業間も無いころの雑誌広告をお見せしました。今回はその後の展開です。●9ヶ月後の広告です81年1月号とメモしています。前回お見せした広告が80年4月号でしたから、わずか9ヶ月後です。BASICに首をつっこんでいます。当時のパソコン(MZ80など)なみのボードを組立キットで供給するという、なんとも非常識なことをやっています。BASICレベル�Uキットの部分を大きくしてみます。MZ80(シャープ)ソフトコンパチブルと書いています。シャープのMZ80は今のパソコンと同じ発想で作られていました。NECのPC8001が、BASICをROMに入れていた(今のパソコンで言えばWindowsXPのOSがハードディスクにではなくてROMに入っているというイメージです)のに対して、MZ80はBASICをカセットテープで供給していました。MZ80本体にはプログラムローダーしかなかったのです。私はそこに目をつけました。それなら、ソフトから見て、MZ80のハードと同じものを作れば、MZ80のBASICテープを読み込んで実行できるはずではないか。この当時のBASICは現在のOSと同等の意味を持っていました。当時は本当にいい時代で、雑誌I/Oだかマイコンだったかに、「MZ80を解剖する」みたいな記事が載ったりしていて、そこにはなんとMZ80の回路図!まで載っていたのです。私自身はMZ80を購入したこともありませんし、中を開けてみたこともありません。その雑誌記事とその回路図をもとに、MZ80のBASICテープが実行できるハードを作り上げてしまいました。シャープの販売代理店からMZ80のBASICテープを仕入れて、それをつけて販売した記憶があります。●さらに1年2ヶ月後の広告です82年3月号です。ND80Z(CPUがZ80A)も、BASICボードもタッチキーだったのがメカニカルキーになっています。基板も作り変えて、いろいろ周辺ボードが増えています。MZ80コンパチブルのほかにオリジナルのBASICボードも供給を開始しています。●さらに11ヶ月後の広告です一年足らずで内容がどんどん変わっています。新製品の写真が無いのは、広告に載せる写真が間に合わなかったからだと思います。そりゃあ間に合わなかっただろうと思います。当時はCADなんてありませんから、設計から作図まで全部手書きです。方眼が切ってあるトレーシングペーパーに赤と青の鉛筆で両面基板の配線を下書きして、その上にマイラーフィルムを置いて、黒い遮光テープで線を貼り付けていくという大変な作業をして、基板の原図を作っていました。当時はコストがもったいないので、ジャノ目基板に手配線で試作をしてから本番用の図面を作ったりしていました。いまよりめちゃめちゃ手間がかかっていたのです。それを、全部、一人でこなしていたのです。キットの部品をそろえたり、出荷する作業などは、妻が受け持っていましたし、時には私の父や母まで動員して家族総出でこなしていましたけれど、設計や作図などは全部私が自分でするしかありません。それだけではなくて、オリジナルのBASICまで作って売り出しています。パソコンもありませんから、最初はマシン語でソフトを書いて、それから自作のアセンブラを作って自作のハード上で動くようにして...。やっていたんでしょうね。全部ゼロから手作りだったことに間違いはありません。TK80も、MZ80も、PC8001も、購入していませんから、全てオリジナルのハードとソフトを駆使して、ソフトウェア開発をしていたことに間違いはありません。雑誌広告の原稿もレイアウトも全部私がやっていました。広告代理店は私が書いてFAXで送った原稿をもとに写植するだけ、みたいな感じでした。私は、いつ寝ていたのでしょうね。電源を入れる前に、MYCPU組立説明書43ページ〜45ページ(13−14.〜13−17.)の準備が完了していることを確認してください。LED表示まず電源を入れて下さい。図2-1のようにLEDには8個のゼロが表示されます。●アドレス表示、データ表示この8桁のLEDは、キーボードからの入力データや、メモリ内容の表示などに使われます。上位4桁はメモリなどのアドレスを主に表示します。下位4桁はデータ表示部です。キーボードからの入力データは、まずこのデータ表示部に表示されます。(図2-2)アドレスは16進4桁ですから、4桁のアドレス表示部にそのまま表示されますが、データは16進2桁なので、メモリ内容の表示などの場合には、データ部の下2桁に表示が行われます(TK80回路のCPUは8ビットなので、データは16進2桁になる)。その場合のデータ部の上2桁には、この表示前のデータ部の下2桁の表示がCOPYされるだけですから、普通は無視しても構いません。キーボードモニタプログラムに色々な指示を与えたり、メモリの中身を読んだり書いたりする場合に、それらの作業は全てキーボードからの入力によって行われます。TK80回路のキーは、5×5配列のキー25個です。この25個のキーは、その働きによって、次の3つのグループに分けられます。�BリセットキーMYCPU基板のわずかな空きスペースを利用してパーツを配置したため、5×5キーも小型のタクトスイッチを使うしかありませんでした。そのためキートップに文字が入れられません。各キーの下側位置に小さな文字でマーキングしてあります。キーとキーとの間も狭いため、ちょっと見にくいのですが、がまんしてください。データキーメモリアドレスを指定して、データを書き込んだり、プログラムを入力するときの、16進数のキーです。ファンクションキーメモリにプログラムを書き込んだり、そのプログラムを実行させたりするのに、都合のよい機能がモニタプログラムに入れてあります。このキーはそのうちの最も基本的な動作をさせるためのものです。プログラムの入力」の項で例をあげて説明します。ここでは各キーの役割を一通り簡単に説明します。インクリメント)RDINCキーを押すと、LEDのアドレス表示部に表示されているアドレスが+1進められて表示され、データ表示部にはその新しいメモリアドレスの中身が表示されます。アドレス表示部に表示されているアドレスから順に(アドレスを+1しながら)、データを読み出したいときに使います。デクリメント)上のRDINCと動作はよく似ていますが、アドレスが+1されるのではなく、−1されます。アドレス表示部に表示されているアドレスから順に(アドレスを−1しながら)、データを読み出したいときに使います。インクリメント)WRINCキーを押すと、LEDのアドレス表示部に表示されているメモリアドレスにデータ表示部の下2桁の内容が書き込まれます。書き込み後、アドレス表示部のアドレスは+1進められて表示され、データ表示部にはその新しいメモリアドレスの中味が表示されます。メモリアドレスにデータや命令コードを書き込みたいときに使います。RUN(ラン)RUNキーを押すと、LEDのアドレス表示部に表示されているメモリアドレスに書かれているプログラムが実行されます。正確に表現すると、CPUはそのアドレスにプログラムが書いてあるものとして実行します(たとえでたらめのデータが並んでいても、命令コードと判断して実行してしまいます。その結果は勿論でたらめの動作になるのですが)。このキーはプログラムを実行するときに使います。RET(RETURN、リターン)ブレイク動作で中断されたプログラムの実行を再開したいときに使います(ブレイクについては3章で説明します)。このキーを押すと、強制的に一時停止させられていたプログラムが、その続きから再び実行されます。モニタプログラムからユーザープログラムに戻るので「RETURN」です。RESET(リセット)このキーは、実行中のプログラムを強制的に打ち切るときに使います。電源を入れた直後は、リセットキーが押されたのと同じ状態からスタートします。このキーを押すとCPUは何を実行していても、あるいはどういう状態であっても、モニタプログラムの先頭(0000H番地)に戻って再スタートします。LED表示はオール0になって、モニタプログラムのワークエリアはクリアされますが、ユーザープログラムは消えないで残ります。いま実行中のプログラムを打ち切りたいときなどに使います。プログラムミスなどによって、CPUが暴走してもとに戻らないときにも使います。アドレスプログラムはRAMに1バイトずつ書き込んで行きます。MEMORYの略称です。どこのアドレス(番地)からでも自由に読んだり書いたりできるメモリで、TK80回路ではでIC261の62256がそのRAMです。TK80回路ではRAMのアドレスは8000〜FFFFの32KB(キロ・バイト、1KB=1024バイト)になっています。このうちFFC8〜FFFFはモニタプログラムのためのワークエリアなのでユーザーが使うことはできませんが残りの部分はどこにプログラムを書いても構いません。できれば8000から書きはじめるようにして下さい。サブルーチンやPUSH命令を使うと、FFC7から前のRAMエリアがユーザープログラムのためのスタックとして使用され、若いアドレスに向かって消費されていきます。FFC7に近いアドレスにサブルーチンやPUSH命令を含むプログラムを書くとプログラムがスタックによって破壊されてしまいますから注意してください。キー入力とLED表示まず図のように順番にキーを押していって下さい。�@必ずしも始めにリセットしなくてもよいのですが、慣れるまでのあいだは、このようにリセットしてから始めた方が確実です。�Aキー入力されたデータ(16進数)はLEDの一番右に表示されます。�B�C続いて入力していくと、先に表示されていたデータはキー入力の度に左に送られ、つねに入力データは右端に表示されます。�Dこのようにしてどんどん入力していくと、LEDのデータ表示部(下4桁)がいっぱいになってしまいます。�E�Fさらに続けて入力すると、先にデータ表示部の一番左に表示されていたデータはその右には行かないで、消えてしまいます。このように、データ入力はつねに今LEDのデータ表示部に表示されている、最後の4回分が有効で、それ以前の入力は無視されてしまいます。�Fではあとから入力した3456が有効で、さきに入力した1と2は無視されます。このキー入力とLED表示の関係をまず覚えておいて下さい。サンプルプログラムの入力アドレス8000から次のプログラムを入力してみます。$8002(リスト2−1)このプログラムははじめにAレジスタをゼロクリアしたあと、そのAレジスタの中味を+1加算することを繰り返すものです。レジスタについては後程説明しますので、今はプログラムの入力方法と実行の仕方を覚えるため、以下の説明に従ってキー入力して下さい。●アドレス(8000)をセットします(図2−4)�@RESETキーを押します。�Aデータキーの8を押して下さい。LEDの右端に8が表示されます。�B続いて0を3回押して下さい。LEDの下4桁に8000と表示されます。入れ間違えたら、気にしないでもう一度8から入れ直して下さい。(このときリセットする必要はありません)とにかくLEDの下4桁に8000が表示されるようにします。�CつぎにADRSSETキーを押します。するといままで下4桁(データ表示部)にあった8000が、上4桁(アドレス表示部)に移動します。このとき、データ表示部の下2桁が、8000番地のメモリの内容を表示しています。ここでは58が表示されていますが、これは例であってこのときどういう数が表示されるかは状況によります。TK80回路のRAMは電池でバックアップされているため、通常は前に書かれていたデータがそのまま読み出されます。