標準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で送った原稿をもとに写植するだけ、みたいな感じでした。
私は、いつ寝ていたのでしょうね。
(次回に続きます)

☆☆☆TK80回路の操作説明です☆☆☆

●MYCPU80(TK80回路)操作説明書 2章  基本操作

 電源を入れる前に、MYCPU組立説明書43ページ〜45ページ(13−14.〜13−17.)の準備が完了していることを確認してください。

●1. 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されるだけですから、普通は無視しても構いません。( レジスタ内容の表示やその他特別の場合には、データ表示部も4桁全部を使うことがあります)

●2. キーボード

モニタプログラムに色々な指示を与えたり、メモリの中身を読んだり書いたりする場合に、それらの作業は全てキーボードからの入力によって行われます。
TK80回路のキーは、5×5配列のキー25個です。
この25個のキーは、その働きによって、次の3つのグループに分けられます。

@データキー

Aファンクションキー

Bリセットキー


MYCPU基板のわずかな空きスペースを利用してパーツを配置したため、5×5キーも小型のタクトスイッチを使うしかありませんでした。
そのためキートップに文字が入れられません。
各キーの下側位置に小さな文字でマーキングしてあります。
キーとキーとの間も狭いため、ちょっと見にくいのですが、がまんしてください。

●2.1 データキー

メモリアドレスを指定して、データを書き込んだり、プログラムを入力するときの、16進数のキーです。

●2.2 ファンクションキー

メモリにプログラムを書き込んだり、そのプログラムを実行させたりするのに、都合のよい機能がモニタプログラムに入れてあります。
このキーはそのうちの最も基本的な動作をさせるためのものです。
具体的な使い方については、「3. プログラムの入力」の項で例をあげて説明します。ここでは各キーの役割を一通り簡単に説明します。

●2.2.2 RDINC(RDREAD INCRIMENT、リード インクリメント)

RDINCキーを押すと、LEDのアドレス表示部に表示されているアドレスが+1進められて表示され、データ表示部にはその新しいメモリアドレスの中身が表示されます。
アドレス表示部に表示されているアドレスから順に(アドレスを+1しながら)、データを読み出したいときに使います。

●2.2.3 RDDEC(READ DECRIMENT、リード デクリメント)

上のRDINCと動作はよく似ていますが、アドレスが+1されるのではなく、−1されます。
アドレス表示部に表示されているアドレスから順に(アドレスを−1しながら)、データを読み出したいときに使います。

●2.2.4 WRINC(WRITE INCRIMENT、ライト インクリメント)

WRINCキーを押すと、LEDのアドレス表示部に表示されているメモリアドレスにデータ表示部の下2桁の内容が書き込まれます。そして書き込み後、アドレス表示部のアドレスは+1進められて表示され、データ表示部にはその新しいメモリアドレスの中味が表示されます。
メモリアドレスにデータや命令コードを書き込みたいときに使います。

●2.2.5 RUN(ラン)

RUNキーを押すと、LEDのアドレス表示部に表示されているメモリアドレスに書かれているプログラムが実行されます。
もう少し正確に表現すると、CPUはそのアドレスにプログラムが書いてあるものとして実行します(たとえでたらめのデータが並んでいても、命令コードと判断して実行してしまいます。その結果は勿論でたらめの動作になるのですが) 。
このキーはプログラムを実行するときに使います。

●2.2.6 RET(RETURN、リターン)

ブレイク動作で中断されたプログラムの実行を再開したいときに使います(ブレイクについては3章で説明します) 。
このキーを押すと、強制的に一時停止させられていたプログラムが、その続きから再び実行されます。
モニタプログラムからユーザープログラムに戻るので「RETURN」です。

●2.3 RESET(リセット)

このキーは、実行中のプログラムを強制的に打ち切るときに使います。
なお電源を入れた直後は、リセットキーが押されたのと同じ状態からスタートします。
このキーを押すとCPUは何を実行していても、あるいはどういう状態であっても、モニタプログラムの先頭(0000H番地)に戻って再スタートします。
LED表示はオール0になって、モニタプログラムのワークエリアはクリアされますが、ユーザープログラムは消えないで残ります。
いま実行中のプログラムを打ち切りたいときなどに使います。
プログラムミスなどによって、CPUが暴走してもとに戻らないときにも使います。

●3. プログラムの入力

●3.1 アドレス

プログラムはRAMに1バイトずつ書き込んで行きます。
RAM(ラム)はRANDOM ACCESS MEMORYの略称です。どこのアドレス(番地)からでも自由に読んだり書いたりできるメモリで、TK80回路ではでIC261の62256がそのRAMです。
TK80回路ではRAMのアドレスは8000〜FFFFの32KB(キロ・バイト、1KB=1024バイト)になっています。
このうちFFC8〜FFFFはモニタプログラムのためのワークエリアなのでユーザーが使うことはできませんが残りの部分はどこにプログラムを書いても構いません。
しかしできれば8000から書きはじめるようにして下さい。
サブルーチンやPUSH命令を使うと、FFC7から前のRAMエリアがユーザープログラムのためのスタックとして使用され、若いアドレスに向かって消費されていきます。
ですから余りFFC7に近いアドレスにサブルーチンやPUSH命令を含むプログラムを書くとプログラムがスタックによって破壊されてしまいますから注意してください。

●3.2 キー入力とLED表示

まず図のように順番にキーを押していって下さい。

@必ずしも始めにリセットしなくてもよいのですが、慣れるまでのあいだは、このようにリセットしてから始めた方が確実です。
Aキー入力されたデータ(16進数)はLEDの一番右に表示されます。
BC続いて入力していくと、先に表示されていたデータはキー入力の度に左に送られ、つねに入力データは右端に表示されます。
Dこのようにしてどんどん入力していくと、LEDのデータ表示部(下4桁)がいっぱいになってしまいます。
EFさらに続けて入力すると、先にデータ表示部の一番左に表示されていたデータはその右には行かないで、消えてしまいます。
このように、データ入力はつねに今LEDのデータ表示部に表示されている、最後の4回分が有効で、それ以前の入力は無視されてしまいます。例えば図2-3 Fではあとから入力した3456が有効で、さきに入力した1と2は無視されます。
このキー入力とLED表示の関係をまず覚えておいて下さい。

●3.3 サンプルプログラムの入力

アドレス8000から次のプログラムを入力してみます。

8000 3E00      MVI A,00
8002 3C        INR A
8003 C30280    JMP $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は電池でバックアップされているため、通常は前に書かれていたデータがそのまま読み出されます。


●データ(プログラム)を入れます(図2−5)

D 3 E と押します。このとき入れ間違いをしたら、気にしないでもう一度 3 Eと入れ直します。データ入力の場合はアドレス入力とは違って、データ表示部の下2桁が有効になります。
E次にWRINCキーを押します。
すると今入力したデータ3Eが左に移動してアドレスが+1され、データ表示部の下2桁には新しいアドレス(8001番地)の内容が表示されます。

この図では2Aが表示されていますがこれも何が表示されても気にしないで下さい(F〜Jではデータ部の下2桁を空白にしてあります。ここは何が表示されていても気にしないでください)。
以上のようにメモリにデータを書き込むにはデータ表示部の下2桁に、書き込みたいデータを表示させたあとWRINCキーを押します。
データが書き込まれると同時にアドレスが+1されますから、つぎつきにデータを書き込んで行くことができます。
このようにしてこのあと8005番地までデータ(プログラム)を入力します。F〜J


●これであとは実行させれば良いのですが、念のため正しくメモリに書き込まれているか、チェックしてみます。(図2-6)

@8000と入力します。
A続いてADRSSETキーを押すと、データ表示部の下2桁に8000番地の内容が表示されます。
BここでRDINCキーを押すと、アドレスの表示が8001になって、データ表示部の下2桁には8001番地の内容が表示されます。
Cもう一度RDINCキーを押すとアドレス8002とそのメモリ内容が表示されます。
このようにRDINCキーは押す度にアドレスが+1されて、順にそのメモリ内容を見ていくことができます。
Dこれに対してRDDECキーを押すと、アドレスが逆に−1されていきます。
EFチェックしているときにミスを発見したら、正しいデータをその場で入れ直してWRINCキーを押せば新しい内容に書き換えることができます(8001は00でよいのですがここでは練習のために12に書き換えています)。


●3.4 プログラムの実行

プログラムを入力したときと同じようにしてプログラムの開始番地(この例では8000番地)をセットします(図2-7@A)。
 これで準備完了です。このあとRUNキーを押せば8000番地から書かれているプログラムが実行されます(図2-7B)。


しかしCPUはこのプログラムを非常に速いスピードで実行しているので、このままではどうなっているのか確かめることはできません。
TK80回路には、そのような場合にCPUの動作が確認できる便利な機能が備わっています。
その機能については次章で説明します。
2009.10.11upload
2009.10.12一部修正

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