2018年9月15日土曜日

Z80 SBC(シングルボード・コンピュータ)の製作 (6) モニタープログラムの搭載

 さて、先回は左のようにパソコンのキーボードに打ち込んだ文字を Tera Term と言うターミナル・ソフトを使って、Z80 SBC(シングルボード・コンピュータ)へ送り、この文字を受け取った Z80 SBC が受け取った文字をそのままコンピュータへ送り返し、パソコンのモニタにディスプレイしました。

 ターミナル・ソフトの Tera Term はきわめて優秀で、使いやすく多く使われており、ネットでの情報も多く、詳細は省きますが、私の場合は上写真の設定(S)で右のような、端末およびシリアルポートの設定をしました。

 端末は VT100 、シリアルポートは、ボー・レート 19200 /データ 8 bit /パリティなし /ストップビット 1 bit /フロー制御なし、にしています。
 送信遅延はとりあえず 30 ミリ秒/行のみ設定しておきました。

 またパソコンと Z80 SBC を結ぶ RS232C ケーブルはストレート・ケーブルを使います。( Z80 SBC 上でクロスに配線がしてあるので)





 ということで、冒頭の何気ないパソコン・モニタへの文字ディスプレイは大きな意味を持ちます。すなわちこの状態になれば、あとはプログラムを作れば何だって出来てしまうからです。

 現状での Z80 SBC のメモリ・マップは左図のようになっています。

  Z80 SBC がスタートしてプログラムが始まる 0000 - 3FFF 番地までが ROM 、以降 4000 - FFFF 番地までが RAM となっています。
 ですからプログラムを作成して、 ROM に焼き、 Z80 SBC にセットしてスタートさせればよいわけです。

 こうした SBC (シングル・ボード・コンピュータ)では開発段階でいろいろな機能を持たせたモニタ・プログラムを搭載することが多く、今回お手本にしたCPUville 」(私のブログZ80 SBC(シングルボード・コンピュータ)の製作 (2) 構想と準備 参照)で紹介しているモニタを移植してみることにしました。

 インターネットでCPUville 」のホームページに行き、
上部にある「 Code 」タブから「 Code for Z80 kits and projects 」に入り、
その中段にある「 Z80 computer kit ROM archive 」にある、
「 ROM v. 8 binary file 」がお目当てのファイルですが、このファイルの文字をマウス・クリックすればそのままダウンロードできるようになっています。

 あわせて「 ROM v. 8 assembly language file 」、「 ROM v. 8 assembly list file 」も勉強のため入手しておくと良いと思います。

 しかしながら入手した「 ROM v. 8 binary file 」(ダウンロード・ファイルは 2K_ROM_8.bin となっている)をそのまま ROM に焼いても動きません、私の Z80 SBC とは 82C51のIOアドレスが異なっているからで、これを修正する必要があります。

 82C51 の
 Data Register address   を 02H -> 30H へ
 Control Register address を 03H -> 31H へ変更します。

 変更箇所を右表に示しました、16箇所ありますが、バイナリ・エディタの置換機能を使えばいとも簡単に変更できます。これを V_MON_8.bin として保存しておきます。

 さっそく ROM に焼いて Z80 SBC を起動します。



 おー、左のようになるのはあたりまえのことですが、やはりいささかな感動を伴いますし、この瞬間を求めてゴソゴソとやっているのですから、、、、

 最初にこのROMのタイトル ROM ver. 8 がディスプレイされ、続いてお定まりの(プロンプト)が出て入力待ちです。

 次いで、これも決まりもののコマンド、help を入力するとこのモニタは、dump,load,jump,run,?,help,bload,bdump,diskrd,diskwr,cpm のコマンドがあることが分かります、2kと小さな割には高機能です。

 さっそく dump を試してみました。
 0000 - 00FFH までの256バイトがきれいに表示されました。



 前に述べたように、「 ROM v. 8 assembly language file 」、「 ROM v. 8 assembly list file 」の2つのファイルはZ80のプログラム(アセンブラ)の勉強には最適です、というのも、これらのファイルには解説のためのコメントがビッシリト記述してあるからです。

  Ville のモニターもすばらしいものですが、やはり気に入ったものを自分で作ることにしました。

 右がそのモニターの HELP 画面です。
 いろいろ試した結果このようなものに落ち着いてはいますが、アイデアが出るたびにモニター・プログラムはどんどん大きくなっていきます。

 、、、、ということで、次回からは稿を改めてCP/M-80の搭載を考えていきます。

2018年9月7日金曜日

Z80 SBC(シングルボード・コンピュータ)の製作 (5) Z80のソフト開発環境

 今回のテーマに入る前に先回の続きです。

 回路を組み上げて最初にすることは、電源のショートチェックです。
 次いでIC類を、ピンの曲がり具合に注意しながら、慎重にソケットに挿します。

 この際、ICの逆挿しは致命的な結果になりがちですので、要注意です。
 左写真のボードに見られるように、私はICの向きをすべて一方向に統一していますし、ICの1番ピンのところにはすべて小さな白丸のマーキングをしています。(それでも時折間違えます)

 そして電流計を介して電源に繋ぎ、全神経(視覚、聴覚、臭覚、触覚、但し味覚は除いて)を全開にして電源をいれます。何事も無くLEDが点燈し、電流計が50mA程度(オールCMOSなので驚くほど少ない)を示せば一安心です。そうでない場合は直ちに電源を切り、再チエックです。

 これで一息つきましたが、古い言い方ですが、
「コンピュータ、ソフト無ければただの箱」とあります。今回の場合は「ただの板」でしょうか。

 というわけで、「Z80のソフト開発環境」の話にはいっていきたいと思いますが、あくまでも私のやり方なので、もっといいやり方があるかもしれません。

必要なハードウエア
   コンピュータ : わたしはまだ WINDOWS 7 、しかも RS232C 端子つきを使っています。RS232C 端子がない場合はお定まりのUSB変換ケーブルなどでOKです。
   ROMライタ : 私の場合は TL866 ユニバーサル・プログラマ ですがROMライタは必須です。

必要なソフトウエア
   アセンブラ  : お手本の CPUville がつかっている、TASM(Telemark Assembler)を使いました。ver3.1 と ver3.2 がありますが、使用したのは ver3.2 です。Vector からダウンロードできる ZASM も少し表記が異なる部分がありますが同様に使えました。
   エディタ   : これも好みですが、TeraPad です。
   バイナリ・エディタ : Stirling を使いました、バイナリ・ファイルを直接編集したり、左右に並べたファイルから、継ぎ接ぎをして好みのファイルを作るのに便利です。
   ターミナル・ソフト : やはり Tera Term がいいようです、あとで XMODEM で CP/M とのファイル転送をするときにはこれがいいです。ちなみに上記 TeraPad とは何の関係もないそうです。
   その他    : ファイル変換ソフトいろいろ


 最初に作成するのは、SBCとパソコン上のターミナルとのあいだで文字を送受信するソフトで、SBC上の82C51のチェックも兼ねています。

 今回のSBCでは82C51のIOアドレスは、データ・ポート30H、コントロール・ポート31H、になっています。

 82C51の初期化コントロール・ポート31Hに4EHと37Hを書き込むだけです。
 いろいろなおまじないやら何やらと長々と書き込む説もありますが、新しいICではたったこれだけでOK!!

 この設定で、このSBCでは19200bpsのボーレートとなっています。
 その下にある2つのサブルーチンはコンソールへの1文字入・出力の決まりモノです。


 上のプログラムを TraPad でつくり、8251T_01.ASM と言う名前で TASM と同じフォルダー( C: の真下にある)にセーブし、左のようにDOS窓でアセンブルすると、 8251T_01.HEX と 8251T_01.lst と言うファイルが生成されます。

 あとは TL866 ユニバーサル・プログラマを使用し 8251T_01.HEX を W27C512 に書き込みます。 
 このプログラム書込み済みの W27C512 をSBCのソケットに差し込み、電源SWを入れればプログラムが走ります。


 パソコンのキーボードから適当に入力すると右のように入力した文字が Tera Term 上にエコー・バックされます。

 このようになれば先ずは第1段階突破と言うことで、さらに次に進むことができます。

2018年9月5日水曜日

台風一過

 昨日の台風21号は、国際機関である「台風委員会」によってツバメ(韓国語でチェービー(Jebi))と名づけられただけあって、力強く、高速で日本列島を横断していきました。

 ゴルフ場は手回しよく、4日も前に「クローズ」を連絡して来ましたし、当日は6時間あまりの停電を経験したり、、、、など今までとは少し異なった経験をしました。

 そして明けて、今朝はご他聞にもれず、台風一過です。野分とくればもう秋のはずですが、この調子ではまたもどり残暑のありがたくない予感がします。




 左上写真は我家における台風被害の様子です。バラのアーチが根元から折れたり、曲がったりして散々な様子ですが、これでも家人が事前に剪定してくれたので何とか修理に取り掛かる元気が出て来ましたが、それまではとても手がつけられる状態ではありませんでした。

 もっともこのアーチは安価なものを特価で入手しましたので、取り壊してもよいとは思いましたが、そうは言っても、、、、さっそく作業開始です。

 今回の台風で一番心配していたのが、右写真のキウイでした。
 昨年は何故か実の数が少なく、もうかれこれ50歳のキウイもそろそろ寿命か? との懸念もはずれ、ことしは久しぶりの豊作でしたので、強風が最も脅威だったのです。

 結果、それほどでもなくホッとしましたが、実の重さに耐えかねて多くの房が垂れ下がってきてしまいました。採りいれまではまだ間がありますので、注意しながら上に持ち上げてやりました。

 台風は強い風雨をもたらしますが、草木にとっては好ましいものかもしれません。
 早朝、散歩に出かけた折、台風の影響を観察するなかで、たしかに櫻並木の大枝・小枝や、さらには根元から折れたものもありましたがどれも不健全なものばかりで、大半は生き生きとしているようにみえました。

 他の植物も新しい芽吹きが見られ、冬に備えてもうひと頑張りしてみよう、、、、としているようです。
 我家のオコギ(ウコギ(五加木)、春の山菜の一種で若芽をおひたしにして食べる。)が過日の猛暑で枯れてしまった、とおもっていましたが上写真に見られるように新芽を出していました、まるで春先のようです。

 花の少ない夏の庭で、サフランモドキが存在を主張しています。
 本来は中南米産で、江戸時代に渡来したそうです。


 少し気になって、何か他に咲いている花はないか、と探してみました。
 じつはこの猛暑の中、庭に出てみる機会がほとんど無かったのです。

 左写真はキャットミントの仲間だとおもいます、花の大きさは2~3mmと非常に小さいのですが、よくみるとなかなかかわいい花です。

 右は、わが庭では立ち入り禁止になっているタカサゴユリです。
 もう時節は終わったはずですが、木陰にあったので少し遅れて咲いたのでしょう。

 左は花ではなく実ですが、この色合いからコムラサキと名づけられています。
 コムラサキはムラサキシキブとよく似ていますが別種で、 葉の先端半分だけに鋸歯があることで見分けるのだとありました。

 そして最後はヤブランですが、この花の開花は夏から秋への季節の変化を象徴するのだそうです。
















 花ばかり探していたわけではありません。

 あれこれ手を尽くして、何とか復旧させました。
 先回のT-falのようにこのバラ・アーチも加齢に無理が重なっての骨折でしたが、なんとか立ち直ってさらにお役に立てそうです。 ガンバレ!!

2018年9月1日土曜日

Z80 SBC(シングルボード・コンピュータ)の製作 (4) 回路と組み立て

 さて、いよいよ組み立てにはいっていきます。
 とは言っても左写真は完成したSBC(シングルボード・コンピュータ)ですが、これも試作品を経ての第2作で、日々我家の標準器として、活躍しています。

 もちろんCP/Mも搭載されていて、そのためのCFカードインターフェースも組み込みました。

 でも話を簡単にするために、まず先にマシン語のモニターを走らせるところまでで区切り、そののちCFカードインターフェースの組み込みやCP/Mシステムの搭載へと進んで行きたいと思います。


 このようなSBCは最近ではKICADやEAGLEなどのプリント基板作成のソフトがかなり自由に使えるようになってきたことと、プリント基板も安価に発注できるところが増えてきたため、いまさら半田ごてによる手配線ははやりませんが、これは私の趣味の世界ですのでご容赦を、、、、

 とはいえ恥ずかしながら裏面を、右写真に示しますが、確かに私もプリント基板作成に挑戦したほうがいいかもしれません。

 上写真の部品配置はあまり自慢できたものではありません、性能や、配線の手間に大きくかかわりますので、慎重に考えるべきでしょうし、またその時間も楽しいものです。



 左に回路図(いや接続図かもしれません)を示します。  W27C512 と TC551001 の位置が冒頭写真と入れ替わっていますが問題ありません。

 配線と言っても所詮デジタル回路ですので、アナログ回路に比べれば調整箇所はほとんど無く、ずいぶん楽だと思います。

 配置が決まったら、最初に電源の配線です、図中にはありませんが、パワー・SWや+5Vの電源コネクターそして電源ONのLEDインジケーターも取り付けておくといいでしょう。

図中、赤で囲った+5V,黒で囲ったGNDを先に配線し、なおかつショートがないか確認が必要です。ムラサキのアドレス・バスとオレンジのデータ・バスはそれぞれの同じ記号の端子同士を結線しますが、実際にはアドレス・バスが16本、データ・バスが8本と、合計24本ありますので気長に配線することが必要です。

 82C51の17ピン(/CTS)は忘れないでGNDに結線して置いてください。

 つぎはクロック発生(Z80用と82C51のボーレート発生用およびクロック)、リセット、RS232Cインターフェース部分です。


 発振はどこにでもあるインバータを使ったものですが、クリスタルの片方についている100PFは少し値が大きいように見えますが、正確に4.9152MHzを発信させるために調整した値です。(通常は20p x2)
 この出力をインバータでバッファリングし、Z80と74HC4060(11ピン)に供給しています。

 74HC4060の12ピンはGNDに接続してください。

 クリスタルはソケットを用意しておくと後で差し替えができ便利です。

 リセットは、これも当たり前の回路ですが、Z80と82C51では極性が異なるため、インバータで反転出力を作っています。

 パソコンとの通信にRS232Cをつかうために、本来MAX232のようなチップを使いますが、私はインバータと抵抗2本だけで済ましていますが、制御なしでの通信のため特に問題はありません。

 そして最後はメモリー周りです。
 ここにはいろいろな制御のためのI/Oアドレス・デコーダ、メモリ・バンク切り替えのため(あとでのCP/M搭載には必須)のフリップ・フロップおよびこれらに必要ないくつかのロジックIC(すべて74HCタイプ)があります。

 メモリ・バンク切り替えとは右図に示すように、Z80のリセット後は BANK 0 の0000H番地からのROMからプログラムはスタートしますが、コンピュータ内のプログラムで、すべてのメモリー領域をRAMにする(BANK 1)ことができ、この状態がCP/Mでは必要なのです。

 ただこのメモリ・バンク切り替え回路は、BANK 0でROMを選択しているときでも0000H~3FFFHのRAMに書込みができるのが自慢です。

 いくつかあるロジックICはGALのようなチップにまとめてしまう事ができ、さらに回路の簡素化、小型化が可能なため、私も導入すべく、ほぼ準備ができました。GALは以前紹介した、TL866プログラマで焼くことができ好都合です。

 今回は以上ですが、回路図には誤記、抜けなど多くの間違いがある可能性がありますので、もしご利用になるならば十分に確認ください。