ラベル SBC の投稿を表示しています。 すべての投稿を表示
ラベル SBC の投稿を表示しています。 すべての投稿を表示

2019年1月22日火曜日

Z80 SBCへの CPM 搭載(3)

 より理解を容易にするために、CP/MControl Program for Microcomputer) が作動しているときのメモリ・マップを左図に示します。

 メモリは、8080、Z80が直接アクセスできる、0000H番地からFFFFH番地までのいわゆる64kバイトのRAM(Random access memory) 領域が必要です。

 今回搭載した62k CP/MではDC00H~F1FFH番地に CCP (Console Command Processor) と BDOSBasic Disk Operating System)が入り、次いでF200H~F430H番地に BIOSBasic Input and Output System)が入ります。

 そしてこの状態で、F200H番地からプログラムをスタートさせればCP/Mがスタートするのです。(もちろん前回までに述べたDISK(CFCard)などが作動する環境で、、、、)


 ところがCP/Mを移植するに際して、大変ありがたいことに、CCPとBDOSを合体させたファイルが、CPM22.sys 62kCPM.sys など呼ばれて存在します。
 既述のCPUVille のサイトのCP/Mの項目( http://cpuville.com/Code/CPM-on-a-new-computer.html )でのべられているように、「The Nonofficial CP / M Web Site」にある http://www.cpm.z80.de/binary.html の CP/M 2.2 BINARY ファイル(左下図)がそれに相当します。


 このファイルをダウンロードすると cpm22-b というフォルダーが得られ、目的とした CPM.SYSのほか、CP/M80のアプリケーション・ソフトが沢山入っていて有益です。(またこれらのソフトは個人が趣味で使うかぎり問題はないようです。)

 このCPM.SYSは62kCP/M用で、かつハードに依存しないので、そのまま使うことが出来ますが、今回の場合あらかじめ、バイナリ・エディタを使って、0000H~15FFHにファイルの長さをそろえておく必要があります。(下図の下部にある青色の部分を消去)


 一方、個々のハードウェア依存部分はBIOSに集中されているので、この部分さえ修正すれば自作のボードでCP/M80を走らせることが出来るわけです。

 BIOSはオリジナルに雛形があり(A Skeletal CBIOS)、これにひとつひとつパラメータを入れていってもいいのですが、今回は
CPUVille のサイトで使われている z80_cbios.bin を使わせていただくことにしました。そうは言っても修正部分はありますが、ほんのわずかです。

Z80 SBC(シングルボード・コンピュータ)の製作 (6) モニタープログラムの搭載」で述べたように、このz80_cbios.bin中にある82C51
 Data Register address   を 02H -> 30H
 Control Register address を 03H -> 31H へ変更します。


 さらにz80_cbios.binファイルの先頭に、左図のように 00 00 00 00 とNOPをアドレスを整合させるため、4個挿入しておきます。

 このようにして出来た、新しいCPM.SYSz80_cbios.binをそれぞれCPM.SYSをDC00H~F1FFHに、z80_cbios.binをF200H~にメモリに置き、F200Hからプログラムをスタートさせれば a> とプロンプトが表示されるはずで、動作の確認が出来ます。(この段階では Copyright のクレジットは出ませんし、プロンプトも A> ではなく小文字です。DISKへのアクセスも出来ません)

さらにシステム全体を理解するために下図を示します。


 中央が前述した、メモリ領域をすべてRAMにしたメモリマップで、CP/Mはこの状態で走ります。

 ついでながらTPA(Transient Program Area)トランジェントコマンドがロードされるメモリ上の領域で0100H番地から始まりますし、0000H~00FFH番地はCP/Mのワークエリアです。


 そして、左側が0000H~3FFFHのROM領域(16kbyte)を表したもので、右に拡大したものを掲げました。

 Z80システムのスタート番地(0000H番地)にはZ80 SBC(シングルボード・コンピュータ)の製作 (6) モニタープログラムの搭載」で述べたモニタープログラムがあります。
 1C00H~3430H番地にはCCP+BDOS+BIOSが一体化して収めてありますので、Z80の便利なメモリ転送機能を利用してCP/Mをスタートさせることが出来ます。
 すなわち、

MOUNT_CPM:
   LD   HL, 1C00H  ;Start addrs cp/m on ROM
   LD   BC, 1380H  ;Program Length
   LD   DE,0DC00H  ;Addrs to transfer
   LDIR
;
   3E   01H       ;Memory Bank Change
   D3   38H
;
   JP   0F200H    ;Jp to CP/M Start Addrs


 しかしながら通常のCP/MスタートはDISK(CFCARD)から実行されます。

 左図はその説明図です。複数あるディスクの最初のディスク(DISK0またはDISK A)の最初のトラック(TRACK0)の最初のセクター(SECTOR0)の部分を示しています。

TRACK0、SECTOR0 には
  IPL( Initial Program Loader )

TRACK0、SECTOR2から26
および TRACK1、SECTOR1から25 には
  CCP+BDOS+BIOS

がそれぞれ記録してあります。

実施例で、この場合のCP/Mスタートを説明すると、
・ モニタープログラムからDISKのIPLを8000Hにロード
・ このIPL8000Hからスタートさせると、DISKにあるCCP+BDOS+BIOSDC00Hへロードし、
・ 次いで、メモリバンクをオールRAMに切り替え、F200HからCP/Mをスタート
となります。

 以上から分かるように、CP/Mを構成するためのファイルは、前述の
 CPM.SYS(修正版)z80_cbios.bin(修正版)にくわえて、
 IPL:プログラムの役割については既述
 PUTSYSDISK0の最初の部分にCPM.SYS(修正版)z80_cbios.bin(修正版)およびIPLを書き込む
 FORMATDISKの使用セクターのすべてにE5を書き込む
などがあり、それらを組み合わせて構築します。
 詳細は CPUVille http://cpuville.com/Code/CPM-on-a-new-computer.html を参照ください。


 以上はZ80 SBCへの CPM 搭載についての全体像の備忘記録で、マニュアルではありませんので整合性や誤解などについてはご容赦ください。

 とはいうもののこのCPUVilleの記事「 Setting up CP/M 2.2 on a New Z80 Computer」は本当に役に立ちました改めて Donn Stewart さんに感謝です。

 現在は自作のZ80 SBCでCP/M‐80が軽快に動いています。
 強いて気になる点は、DISKの1セクターが512バイトもある中で、128バイトしか使われていないので、128GBのCFカードでも243kバイトのDISK4台構成である点です。

 またZ80 SBCもAKI-80ボードを使えばよりシンプルになることを思いつき、これに Grant Searle さんのシステムを載せてみたいと考えています。

2018年12月17日月曜日

Z80 SBCへの CPM 搭載(2)

 先回の予告とは異なって、もう少しCFカード搭載の話を続けたいと思います。

 CFカードはIDEのコネクタに接続可能だと言いましたが、正確には左写真のように、CFカードをアダプターに挿し、そのアダプターがIDEと同じ配列の40ピンコネクタを持っていると言うことです。

 ちなみにこの写真にあるアダプターはebayで安価に入手(国内でCFカードソケットのみを購入すると同じくらい)できますが、オーダーしてから4週間ほど待たねばならないのが毎度のことながら難点です。

 参考までに、GRANTさんの図をリファインした、CFカードのピン配置を以下に示します。


 これは正面からの図ですが、左右両端のガイド溝(細い楕円で囲まれた部分)の大きさで左右を判定します。

 ピンは50ピンありますが、必要なのは、前回お話したように、このうち18ピンのみです。もちろんGNDなど共通なものは1ピンとします。


 左写真は、今回製作した Z80 SBC にCP/M-80を搭載した際に設置したCFカードソケットの様子(写真上部)です。

 こうして見ると結構大きく、場所をとりますので、CFカード・ソケットが手元にあったのを幸い、カードアダプターも自作してみました。












 ベースは秋月のユニバーサル基板で、これにCFカード・ソケットと18ピンを載せただけのものです。

 ただピンが微細にこみいっていますので、ハンダ付けには細心の注意が必要です。

 左写真に詳細を示しましたが、プル・アップ用1kΩの表面実装用がうまく半田付けされています。

 そして右写真は、AKI-80を用いた、CP/Mボードですが、前述の Z80 SBC よりも一回りコンパクトに収まっています。


 と言うことでいよいよ本題に入っていきます。

 CP/Mでは、ディスク上の任意の1セクターのREAD、WRITEが必須ですが、逆にディスクへのアクセスはこれしかありません。

 したがって、モニタープログラムで、この操作が出来ることをあらかじめしっかりと確認しておくことが必要です。



 上図は、前回も紹介した、 CPUVille のサイトのCP/Mの項目( http://cpuville.com/Code/CPM-on-a-new-computer.html )にある、セクター・リードのプログラムを私流にアレンジして、 Z80 SBC のモニターとして使っているものです。(同様のセクター・ライトのプログラムもあります)

 このプログラムは上側に赤く囲ってあるように、HL:DMAアドレス、E:DRIVE番号、B:TRACK番号、C:SECTOR番号 に、あらかじめそれぞれの数値をいれてコールすれば、目指すSECTORのデータをDMAアドレスから始まる512バイトに読み出してくれます。(今回のCP/Mでは、このうち128バイトしか使いませんが、、、、)

 このプログラムは、CFカードのLBA( Logical block addressing 論理ブロックアドレス指定)方式をつかっています。


すなわち、CFカード上では、左図のようにSECTR番号が右端の0から順に番号付けされていますので、これをLBA2:DRIVE番号、LBA1:TRACK番号、LBA0:SECTOR番号 に割り振ってあるのです。


 今回移植するCP/M-80は標準に近く、DRIVE 4、TRACK 77、SECTOR 26というIBM仕様?になっています。

 LBAを使用するために、プログラム上では中ほどの緑で囲った部分の記述があります。
 E0HをCFカードのポート0FHに出力することでLBAモードにしています。

 CFカードのポートは左図のようにA0~A2のアドレスで設定されますが、アドレス・コーダ74HC138と組み合わせることで今回は08H~0FHの8個のI/Oアドレスを設定しました。

 今回のケースは、LBAモードの図から037F1F Hと読み取れます。229151個のSECTORを使うと言うことで、229151 X 512 = 117325312 となりますので、最低限128MBのCFカードが必要と言うことでしょうか。

 なおこのままだとCFカードは16bitモードのままです。普通に使うには何の支障もありませんが、私は気持ちが悪いので、下記のプログラムをシステム立ち上がりのときに走らせて、8bitモードにして使っています。



 これまでに入手した、CFカードはほとんどが支障なく使えましたが、なかにはダメなものもありました。何故だかは分かりませんが配線を最短に、とかバッファーを入れるとよい、、、、ナドト言われています。(私は試していませんが)

 CFカードについては参考に出来る資料があまり多くはありません。今回述べたことは、たまたまの成功体験を自己流に解釈しているだけですので、いい加減な説明をご容赦ください。

 以下は次回です。

2018年11月27日火曜日

Z80 SBCへの CP/M 搭載(1)

 今年の秋はことのほか多忙で、なかなかブログ作成に割く時間がとれず、しばらく間が空いてしまいました。


 私のブログ、Z80 SBC(シングルボード・コンピュータ)の製作 (1~6でとりあえず、Z80 シングルボード・コンピュータがモニター・ベースで走るところまで紹介しました。

 今回からは稿を改め、Z80 SBCへの CP/M 搭載 として話を続けたいと思います。



 CP/MControl Program for Microcomputer)とは1970年代にデジタルリサーチ社 (Digital Research Inc.) の創業者ゲイリー・キルドールによって開発、1976年に発売された、パソコン用のシングルユーザー・シングルタスクのオペレーティングシステム (OS) です。

 CP/Mは①8080マイクロプロセッサおよびそのZ80などの上位互換CPU、②0番地から配置されたメモリ、③フロッピーディスク、そして④シリアル端末があれば動作させることが出来ました。

 同時代に出現したフロッピーディスク(発明は中松氏でなくIBM?)を利用して、ファイルの管理が出来るこのCP/Mシステムはそれこそ最先端の技術であり、垂涎の的で、個人が所有するなどは夢のまた夢でした。

 今の時代にこのCP/Mシステムを再現することは、我々老人のノスタルジーには違いはないものの、当時の最先端の膨大なソフト・ウエア(BASIC,FORTRAN,COBOL,ALGOL,Cなどなど)が商用に供さない限り自由に使うことが出来、興味はつきません。 冒頭の写真は Z80 SBC で CP/M をスタートさせたところですが、「 62K CP/M 2.2 Copyright 1979 (c) by Digital Research 」の記述は何度見ても飽きません。

 さて、Z80 SBCCP/Mを搭載するに当たって、前述の必要項目①~④のうち欠けているのは、③のフロッピーディスクのみです。
 いまさら入手困難な絶滅種のフロッピーディスクでもありませんので、ここはSDカードといきたいところですが、Z80に接続するには、インターフェースおよびソフトウエアの面で煩雑さが伴います。

 ということで、残された選択肢はCFカードと言うことになります。CFカードも絶滅危惧種ではありますが、このような用途に使用する1Gb以下のもの(かつて産業用に使われた?)はネットで安価に入手できます。







 CFカードは少し前にHDDなどで使われたIDEバスの規格に準じていますので、そのままZ80のバスに接続できますし、興味があるならIDEバスを持ったHDD(シリコンドライブが良いかも)やFDDも接続できそうです。









 その後確認したことですが、SD-CFカード・アダプターを使えば、左写真のように、SDカードも、マイクロSDカードも使うことが出来ました。

 右に配線図を示します。IDEコネクタは差し込まれる端子を上から見たものです(要注意!)。/CS0 はアドレス・デコーダ(74HC138)の14ピン(08H) へ接続です。


 また、40ピンIDEコネクタはVCC(+5V)がありませんのでこれも注意です。

 40ピンIDEコネクタはあまりにも場所をとりすぎますので、私は独自に18ピンのコネクターを作り使っています。(左)


 ということで過日述べたように、 CPUville 」という Donn Stewart さんのサイトをお手本にして、Z80 SBCへの CP/M 搭載の準備ができました。

では、次回、、、、

2018年10月19日金曜日

Z80-MBC を Z80-MBC2 に改造

 このブログで現在連載中の「Z80 SBC(シングルボード・コンピュータ)の製作」がしばらく滞っているのは、「Z80-MBC Z80-MBC2 に改造」に注力していたからです。

 過日ブログで紹介した、HACKADAY.IO のホームページに掲載されている「 A 4$, 4ICs, Z80 homemade computer on breadboar はまさに秀逸であり私も早々に組み上げてそのすばらしさを享受しました。

 さらに、かねての予告どうり、その改良版である Z80-MBC2  がこの夏発表されたのですが、ソフト類の完成が少し遅れていて、10月になってようやく全体像がはっきりして来ました。

 ハード・ウエアについては、早い時期に回路図がKICadデータも併せて発表されていましたので、 Z80-MBC2 基板はすでに入手してありました。

 ということでさっそく製作にかかろうとしたのですが、 Z80-MBC2 の基板が Z80-MBC の基板に比べてなんとなくチープで二の足を踏んでいました、、、、が、思い立ってZ80-MBC の基板を改造して Z80-MBC2 を構築してみることにしました。
 結果、完成したのが冒頭の写真です。

 ちょっと見にはほとんど分かりません、左上のSDカードと左側中ごろのトランジスタ2本が目に付く程度です。

 改造に先立って、 Z80-MBC と Z80-MBC2 の違いを Z80-MBC の回路図上に書込み、修正していきました。
 ありがたいことに新規部品はほとんど使っておらず(前述のトランジスタ2本くらいのもの)、 何とかいけそうな気がしてきました。

 改造点はあまり多くなく、以下にその概要を挙げておきます。

・アドレス・バスの A1~A14 を10kΩでプルアップする。(データ・バスはそのままでよい)

・従来LED点燈に使用していた74HC00のNANDロジック2個をメモリ・バンク切り替えに使うため、トランジスタ(2SA1015)2個と置き換え。

・アドレス・バスA1、A2、A3、A4、A5、A6、A7からATMEGA32AのPIN25,26,27,28,29,16,17,18へのそれぞれの配線をカット。

・コントロール・バス/WR、/RD、/MREQ、/RESETからATMEGA32AのPIN5,6,7,8へ行っている、それぞれの配線をカットし、PIN25,26,27,28へ接続する。

・自由になったATMEGA32AのPIN5,6,7,8はSDカード用の/CS、MOSI、MISO、SCKとして使う。(/CS、MISO、SCKは10kΩでプルアップ)

・その他いくつかについても同様に回路図を比較して修正する。
  
 パターン・カットは左写真のようにルーターを使うときれいに、速く、確実にできます。

 また、データ・バスのプルアップには小さな表面実装用の抵抗を使いましたが、右写真のようにポリイミド・テープを使ってうまくいきました。


 左写真に完成して、作動中の基板裏を示します。思ったより簡単で、すっきりできました。
 中央に左下から右上に伸びている4本撚り線はSDカードアダプターソケットへの配線ですが、配置の関係でやむなくこうなってしまいましたが、無事動いています。

 この Z80-MBC 基板は自由に使える蛇の目部分があっていろいろな応用が可能なようで、つくりもよく、今後も少しストックを持っていようか、、、、とも思いました。
 ただ、この蛇の目は隣同士つながっている部分が多く、十分なチェックとパターンカットが必要なので要注意。

 SDカードアダプターはebayできわめて安く入手できますが、この実験に間に合わせるために自作しました。

 SDカード・ソケットとレベルシフト用のCMOS Buffer MSM4050RS、および5V→3.3V降圧3端子レギュレータをかき集めて、右の回路図に従って作り上げました。



 ソフトは、最新版のS220718-R190918_IOS-Z80-MBC2.hex ( arduino で .ino ファイルをコンパイルすればpreference.txt で指定したフォルダーにできる)をTL866AプログラマーでATMEGA32Aに書き込みました。
 フューズ・ビットはCF、D9を指定します。

 SDカードはFAT32でフォーマットしておき、これに SD-S220718-R191018-v1 フォルダーの中身をそのままコピーしました。

 右に Z80-MBC2 がスタートして CP/M2.2 が立ち上がり、DIRコマンドで Disk A の内容を見たものを示します。

 コマンドの切り替えで、CP/M 3 なども使用可能で、ディスク・ドライブはA~Pまでの16ドライブが使用可能で、各容量は8Mバイトもありますのでいろいろ試してみたいものと思います。

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月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プログラマで焼くことができ好都合です。

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