SSブログ

Z80でGUPPYボード [Z80]

製作しているボードはGUPPYシリーズに規格をある程度あわせているのだが
そのGUPPYボードの紹介。

(1)GPY-01

GPY-01.jpg

4MHzのZ80Aと8255AがのったCPUボード。
64Kbitのメモリを2個載せることができてオプション。

(2)GPY-13

GPY-13.jpg

キーボード/ディスプレイIF、8279ボード。
これを使って昔ながらの16進キー、7Seg.LEDのシステムでも作ろうかと思うが
こちらで作っているCPUボードはアドレスデコードを端折ってCSにA7をつっこんでるだけ。
それに対してこのボードは20H~3FHの範囲で選択。
完全に被ってそのままでは使えない。

(3)GPY-07

GPY-07.jpg

64K×4のDRAM2個で64KBメモリボード。
この手の制御基板システムは、1枚でCPU+メモリ+αとスタンドアローンで動かしオプションI/Oを別ボードで、というのが普通だと思うので8bitのアドレス空間を占有してしまうボードも珍しいかな。
一応バンクメモリ方式にもできるので、データ保存用のメモリ拡張がが主目的か?

(4)GPY-45

GPY-45.jpg

AD75004のDAコンバータボード。
オプションでもう一つAD75004を搭載できる。
これは取説がないので詳細は不明。

今回はGUPPYバスにある程度あわせたので、GUPPYも使うことができるという検証で

(5)GPY-06
ROM/RAMボード

GPY-06.jpg

を使ってみる。写真は既にROM/RAM搭載済みだが製品はオプション。
これは64KbitのROM、あるいはSRAMを4個搭載できるメモリボード。
74LS138で64KBのメモリ空間8等分したチップセレクト信号を生成しているが
デフォルトでは
    2000H~
    4000H~
    6000H~
    A000H~
となっているので、パターンカットして
1個目のメモリを0000H~1FFFFHとなるようにジャンパを切り替える。

動作確認用ソフトはTinyBasic。
RAMはA000H~BFFFHにするのでメモリロケーションを変更してアセンブル。
ROMは2764。中華製の安価なROMライタTL866Aで書き込むのだが、このライタ用書き込みソフト、メーカ名、ROMの型番と選択させるのだけど各個の正確な情報は持っていない模様。
どれを選んでも書き込み電圧は12.5Vになっている。2764タイプが12.5VになったのはCMOS品からだったように思うのだが…
書き込み電圧を21Vに設定してROM焼き。問題なく動作。
そのうち、いずれかのI/Oでも動作検証してみたいと思う。

nice!(1)  コメント(0) 
共通テーマ:趣味・カルチャー

Z80基板動作確認(2) [Z80]

Z80の続きです。

Z80SIOを使ったTinyBasicを拝借させてもらった古典電脳伝説の著者さんのブログで「電脳伝説」というのがあって、GranzBasicなるものを動かしていらっしゃるのでまたまた倣ってみました。
GranzBasicは、こんなおもちゃにはもったいないぐらいなものです。
せっかくというわけでもないが、少々手をいれてみた。

(1)アドレス配置を多少変更する
(2)送受信とも割り込みで処理する

(1)はまぁ、個人的な好みの問題にすぎないが、メイン処理、共通ルーチン、ドライバ関連をそれぞれまとめてマッピングを分ける。という事を完全ではないが少しだけ修正。
コードとデータは分離するというのもあるが、これもほんの少しだけ。三角関数のテーブル等細々あって全部やるのは手間暇かかるため。
関連するデータがコードのすぐそばにあると、エディタの1画面内に収まったりしてみやすいとか、相対アドレッシングを使用しているので近くにないとダメとか、そういった理由だろうが個人的にはなるべくわけたい。
あとは、8080系は最初の256バイトがベクタエリアでもあるし、CP/M等特別な領域として使われることが多々あるので、そこにコードを入れるのはなるべく避ける。

(2)は昔の遅い8bitのシングルタスクのシステムで送信を割り込みで行う意味はあまりないかもしれないが、これもまぁ趣味みたいなもの。
同時にリングバッファの処理をなるべく簡略化したいので送受信ともバッファを256バイトにする。
これでメモリをフルに使うようなプログラムを書くことはまずないだろうから、バッファを大きくとっても問題なし。
あとはバッファの配置を256バイト境界にしておけばベース+オフセットの計算をすることなく、ベースの上位バイトをHに、Lにオフセットを入れればすむので簡単。

送信割り込みに関してだが、
送信割り込みを使ったシリアル送信のポイントは通常時は送信割り込み禁止、送信開始時に許可して送信完了で送信割り込み禁止に戻すというのが普通(?)だと思うが、実際Z80SIOのデータシートをみるとトランスミッタバッファエンプティ時に割り込みがかかるとなっていて、つまりエンプティになった時に割り込みがかかるエッジ判定ではない。
これは多くのシリアルIC、あるいはマイコン内蔵シリアルがそうなっているような気がするが、MC6801がエンプティになった時に、とエッジ判定となっている。
割り込みがレベル判定なので

・送信データがなかろうとエンプティフラグがたっているので送信割り込みがかかる
    ↓
・送信データがないので何もせず割り込みを抜ける
    ↓
・エンプティフラグがたったままなのですぐに送信割り込みがかかる

と延々繰り返す事になり通常動作に入らなくなると思われる。
でいつもやっているように、つまり

・送信バッファに送信待ちデータがなくSIOも送信バッファエンプティなら
 SIOに直接データを書き込み送信割り込みを許可する
・送信割り込みがかかったが送信待ちデータがなければ送信割り込みを禁止にする

と組んでみて動作確認もしたのだが
Z80SIOには「保留中の送信割り込みをリセットする」という機能があって、なんのこっちゃ??と思っていたが後でそういうことか!?と気付いて、

・常に送信割り込み許可にしておく
・送信割り込みがかかり送信データがなければ「保留中の送信割り込みリセット」

に変更してみたがこちらで問題なかった。
データシートの説明は時々???となる言葉や表現がよくあり、特に海外のものは日本語訳が???だったりするし、Z80SIOのような高機能なものは文の量も多く解読に時間がかかってしまうことも多々ある。読解力がないだけかもしれないが(笑)

動作検証として、これまたasciiart.basをそのまま使わせてもらいました。

asciiart_screenshot.png

問題なく動作していると思われる。

一応、Z80ボードは修正なくほぼフィクスなので回路図です。

Z80CPU-Board.jpg

PICには3.3Vの電源出力があって何もせず解放ピンにしているが、データシートにはパスコンつけろ的な事書いてあるので再度基板つくる事があれば追加するかな?
USB給電なのでPCとつなげば即立ち上がります。
PC側の接続認証に多少時間がかかるので、ものによってはブートメッセージが表示されない事があります。
ねんのためスマフォのACアダプタ(micro-Bタイプ)が使えるようにしている。ただし自動認証ではなくジャンパ切替。
今時は2.1ΦジャックのACアダプタよりこっちの方が手に入れやすいと思われるので。
ただ、今後はType-Cが主流になるのかな?Type-Cの給電専用コネクタはまだみたことないが。

メモリボードの回路図はこれです。

memory-board.jpg

色々想定を盛り込みすぎていて

・ストローブとして80系はMREQ、68系はEを想定していて論理が逆なので切替
・アドレスの下位ROM上位RAM(主に80系)、下位RAM上位ROM(主に68系)の切替
・ROM側をRAMと切替て全RAM可能なように

それぞれジャンパで切り替えられるようにしている。
それぞれの基板をおこしてもよかったのかもしれないが…
全RAMは先を考えてで、ようするに別の手段でCPUリセット中あるいはHALT中にブートローダをRAMに仕込んで、というやつです。
UV-EPROMは消去に手間暇がかかるので。
ただ、その仕込みはもっと時間がかかるので本当にするかどうかは…
nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

Z80基板動作確認 [Z80]

さて、できあがった基板だが8085の基板は8251のフットプリントを32pin DIPにしてしまうという大ボケをやらかして使うことはできない(笑)。
6303の方もいくつかミスがあり、パターンカットしてジャンパ飛ばししてデバッグ中。

1発オッケーだったのがZ80基板。
部品実装したのがこれ。

SYC-Z80CPU_1.jpg

何しろ主要な部品はZ80CPU、Z80SIO、PICのみのシンプルな構成。
Z80SIOのアドレスデコードを手抜きしているのでTTLもなし。

同じく部品実装したメモリボード。

SYC-Mem_1.jpg

このメモリボードは使い回すことを考えすぎて、色々ジャンパが付いているがこの基板はワイヤを半田付けしてしまって80系のROM(0000H~)とRAM(8000H~)専用に。

この2枚の基板の接続はフラットケーブルでもいいけれど、今回はこれ。

Guppy-mother_1.jpg

実はこれらのボード、昔日本コムネットというところからでていた、GUPPYシリーズのマイコンボードに規格を合わせている。
GUPPYバスはZ80の信号がほぼそのままでていて、M1とかRFSHまででているが、Z80専用システムにするつもりはないし、そうだとしても実際使わないだろうから別の信号にわりあてた。
68系のボードもでていたのだが、どういった割り当てになっていたのかは不明。
GUPPYボードが使えるかどうかはまた別の機会にと思っているが、やるかどうかは…

上の写真のボードはGUPPYのボードを5枚入れられるラックのマザー部分を取り出した物。
今回のZ80ボードとメモリボードを搭載するとこんな感じになる。

SYC-Z80-MEM_1.jpg

動作確認だが、「古典電脳物語」という本で使われていたAKI-80版のTinyBASICを使わせてもらいました。
変更点はAKI-80版のものは、シリアルのボーレートをCTCで生成しているがこちらはPICで。
あとはZ80SIOのアドレスが違うぐらいだが、SIOはチップセレクトにA7を入れてるだけだし、CTCの設定も存在しないI/OにOUTするだけなので、これが16bit以上のCPUなら無効なアドレスをアクセスすると例外が発生したりするが、単純な昔の8bitCPUはそこまでしないのでたぶん無修正でも動作するはずだが、一応修正しておいた。
そしてすんなりと動作しました。

使用したCPUは東芝のTMPZ84C000AP-6。
CPUクロックはPICで生成しているが約6MHzなので、BバージョンのZ80でC-MOS版。
実際は6.3MHzほどでていてオーバークロック気味だが、特に問題なし。
実はこの回路、クロックを特に何も処理していなくてGUPPYマザーが全信号を10Kでプルアップしているのでクロックもそうなってしまっているが、N-MOS版のZ80はクロックに対する要求がシビアなのでたぶん動かないだろうなぁとザイログとSHARPのN-MOS6MHzのものを用意したが、案の定かなり不安定。
C-MOS版のZ80は確かTTLレベルでよかったはず。
したがってこのボード、C-MOSのZ80しか動かないことになる(笑)
試したCPUがこの3つ。

Z80-CPU_1.jpg

CPUを入れ替えて電源を入れた(USB接続)しただけの動作結果がこれ

tb_test01.jpg

最初の起動メッセージがC-MOS版のもの。次のやつがN-MOS版でまともに表示せず暴走気味に。
nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

8ビットマイコン基板 [8bitマイコン]

MC6801関係でぼちぼち遊んでる間も、別のものに浮気してたりしてその成果物を。

1.8085CPUボード

SYC8085-1.jpg

既に基板はできあがってきてます。
主要な石は8085とシリアル通信用の8251、USB変換のPIC1454。
あとはTTLが3個程度。
メモリを搭載すれば動かせますが、メモリは別ボードで。
このPICはMC6801の時に使った物と基本的に同じ。
CPUクロックとボーレート用クロックとリセット。

実はこの基板だけ電源用USBコネクタは搭載していない。
部品点数的にすかすかの基板だけど、
そのコネクタ一つ追加するだけで配線に苦労するようになったので。
縦横、ICの向きがかわっているのもその影響。
6801の時と同じで、基本的にKiCadの全自動配線を利用。
全部自動で配線させてみては、その結果をみて配置を変更を繰り返し
残未配線が数本で、手動で通せそうなら残りを手動でやり完成。

2.Z80CPUボード

SYCZ80-1.jpg

こちらはZ80版。Z80は同じZ80ファミリで作ると非常にシンプルになり
Z80CPU、Z80SIO、PICのみとなりTTLはなし。
そのおかげもあって、こちらはUSB電源コネクタを搭載。
Z80SIOは2チャンネルあるので片方も使えるようにだけはしておいた。

3.メモリボード

SYCROMRAM-1.jpg

64KBのメモリボード。
基本的に32KBのSRAMと32KBのROMを搭載するようになっている。
このメモリボードは使い回しできるように、色々よけいな回路を組み入れていて

(1)CPUボードと接続するためのメモリストローブ信号として80系ではMREQを想定しているが
68系ではEを割り当てストローブ代わりに。
MREQは負論理だけどEは正論理なのでジャンパで切り替えられるように。

(2)80系はリセットが0スタートなのに対して、68系は$FFFEがリセットベクタなので
ROM、RAMの配置をアドレス逆転できるように。こちらは6Pスイッチを想定。

(3)ROMをRAMに変更して全RAMにできるように。これは後々を考えて。
そのため28pinのメモリを3個搭載できるようになってるが同時使用は2個。
これもジャンパ設定での切替で昔のパソコンみたいにI/Oをたたいてきりかえる
なんてことはできません。

できあがってから思ったけど、貫通ビアを入れすぎかな?
なんか気持ち悪い(笑)

4.HD6303ボード

SYC6303-1.jpg

メモリボードを68系でも使えるようにしたのでその確認用に。
64pin SDIPタイプのHD6303X、HD6303Y。
最初は6802でやろうとしたけど、部品点数の少ない基板でも配線に苦労したので
部品点数を減らせる6303で。主要なものは6303とPICのみです。
ワンチップマイコンらしく、I/Oコネクタを搭載し、6303のポートをだしています。

実はこれのみ全部手動で配線しました。
KiCadの自動配線は結構おバカで、時々基板外形の外側に配線してしまうことがあって
特にバス出し用の2列ピンヘッダパターンを基板端に配置するとよくなり、
この基板の時のみどうやっても外に配線してしまって困り果てました。
で、部品点数も少ないすかすか基板なので自分でやる事に。
結果的にはこれが一番時間はかかってるかも?

ちなみに裏側がこれ。

SYC6303-2.jpg

自動配線ではアドレスバス、あるいはデータバスといったバス配線をきれいに並べてくれないけど
自分でやればこの通り。
それ以外も、スカスカ基板のおかげもあって無理なく。
自動配線だとこの程度のすかすか配置でも、
どこ飛ばしてるんだ!?といった感じにこねくり廻してくれます。

4枚とも2列ピンヘッダの横に1列ハーフピッチのピンヘッダを配置してるがこれも配線対策。
とにかくヘッダのまわりと回り込むように配線しようとするので、
いったん横にまっすぐださせてバスを横一列に並べるような感じに。
こうしておくと手動配線するときも楽です。
それだけのためのパターン。
ハードでバッグ用にテストピン立てたりするには便利かな?

さて、あとは組み立てて動作検証を。
修正することなく1発で動いてくれるかな?
nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。