ブレッドボードZ80マイコンにシリアルLSI 8251をつなぐ

ことしのGWあたりから作って実験していたブレッドボードZ80マイコンですが、Gran’s氏のマイコン回路を参考に作ったのでシリアルチップが68系のMC6850です。
SBC8080で8251を使っていたので、やっぱりZ80に80系のシリアルをつなげてみたくなりました。

ブレッドボードZ80マイコン 再配線

8255Aをつないだりして実験していた関係もあり、ジャングル配線になって なにやら不安定っぽかったブレッドボードZ80マイコンですが、秋月電子から通販で買ったブレッドボードx3構成に作り直してみました。

GWごろに作ったときより、だいぶ短いケーブルでつなぐことができた気がします…^^);;
ワイヤストリッパーも手に入れたので配線スピードがだいぶ上がりました。

シリアルLSIを8251へ

やっぱりZ80なので80系のシリアルチップで動かしてみたい!ということで、SBC8080の部品を買う時に買ってあった8251をつないでみます。

回路はほぼSBC8080のサブ基板といっしょです。

  • データバスをD0-D7を接続しました。
  • チップ選択信号 CSはいつもの74HC138でA13〜15をデコード。
  • 読み/書き(RDWR)は8255AのときといっしょでZ80のI/O要求(IORQ)信号と74HC32でORをとります。
  • 8251の送受信クロックはSBC8080の回路といっしょです。(SBC6800のPIC12F1822でも良かったかも)
  • Z80の主クロックは7.23728MHzでしたが、8251がμPD8251AFCのため最大周波数は5MHzでしたので、4.9152MHzの水晶振動子へ差し替えました。
  • RxRDY端子によるZ80への割り込みは負論理へ変換するため74HC04のNOT回路を通しました。

SBC8080用 機械語モニタで動作確認

SBC8080のデータパックに入っている機械語モニタのHEXファイル “MON80SA.HEX” をEEPROMへ焼いて起動してみました。

起動すると、機械語モニターの初期メッセージと共に入力待ちになります。
起動は成功ですが入力をうけつけてくれませんでした。

Z80の割り込みモード設定が必要

Z80マイコンはシンプル構成で、割り込みコントローラはついてません。

Z80は割り込みモードを3種類持っているみたいで 割り込みモード0は8080互換で割り込みコントローラ接続が前提の模様。
割り込みモード1にすると割り込み時に0038hが呼ばれてソフトコントロールできるとのこと。
幸い機械語モニタの割り込みルーチンは0038hから記述されているのでZ80を割り込みモード1にすると良さげです。

問題は機械語モニタのソースは8080ASMで書かれているため、Z80で拡張された割り込みモード設定はアセンブリできません。
そこでZ80の “IM 1″(割り込みモード1へ設定)のコードを 16進数で定義する作戦としました。
変更箇所は以下の初期化部分です。(画像ですいません…)

この変更で無事 受信割り込みが動くようになりモニターが使えるようになりました!!

広告

SBC6809ルーズキットへPIA(MC68B21P)

32kB SRAM増設はしてみたものの、そのままになっていたSBC6809へPIAを追加してみました。
究極の8bit CPU MC6809を搭載した基板です。(といいつつ、いちばん最後までつくったままでしたが…)

子基板 で 32kB RAM化

32kB RAM化はSBC6800のときといっしょで2F建て基板作戦で成功しました。
40pinと28pinのラッピング用ICソケットで嵩上げして、アドレスバスのA13〜15をRAMへ結線して32kB化しました。
一番苦労したのは、下のTweetでも書いてますが300mil 28pin丸ピンICソケットを外して板バネソケットへ付け替える作業でした….

ちなみにメモリーチェックプログラムもSBC6303用のものを参考に6809ASMでつくりました。
アドレス $50と$52にメモリーチェックの開始/終了アドレスを入れてから実行です。(スタートアドレスは$0100推奨…..)

子基板に PIAの搭載

SBC6800同様 パラレルI/OのMC68B21Pを搭載してみたいと思います。
アドレスのデコードは同じ$8004〜8007です。(当初は$Axxxにデコードしないとシリアルチップ ACIAとバッティングして起動しないと思いこんでましたが、どうも動かない原因は 2F建て子基板と1Fのコンデンサが接触してショートしていた模様…(X_X);;;)

回路図はこんな感じです。ちなみに根性が続かなくてSBC6303相当の外部コネクタは未配線です。(^^);;

無事LEDチカチカができました。

今回もGrant’sBASICですがZ80とは違ってメモリーと同じところにPIAが配置されているのでOUT文ではなくPOKE文を使用しています。

SBC8080ルーズキットにパラレルI/O 8255Aをつなぐ

SBC8080にパラレルI/OとFM音源用コネクタを増設する計画です。まずはパラレルI/O LSI 8255Aから…

パラレルI/O 8255Aの回路図

SBC8080は拡張コネクタに8080CPUや8228/8224などの周辺チップからの制御信号線や+5V/GNDなどがでています。
Z80のときよりもさらに楽チンで、IOWIORなどのI/Oチップ用読み書き信号も出ていますし、Z80マイコンのときには手を抜いて作らなかったRESET信号も、ちゃんと拡張コネクタにでています。
よってI/Oポートのアドレスデコード(A7〜A5)を74HC138でおこなってあげれば、あとは拡張コネクタへパラレルI/O 8255Aを接続するだけです。超簡単です。
(8080CPUのファミリーLSIだから、あたりまえですか….)

ちなみに動作確認はいつものLEDを使用します。
LEDチカチカ専用基板wとは14pinフラットケーブルで接続します。

8255A用基板配線実施

8255Aを載せる基板の配線を実施します。
そのうちFM音源も接続したいのでそのためのピンソケットもいっしょに….
外部機器とは14pin フラットケーブルで接続することにしたいのでボックスヘッダもつけます。

SBC8080はSBC6303同様 40pin フラットケーブルで他ボードと接続されています。
先日 フラットケーブルの圧着工具を買いましたので秋月フラットケーブルに1つコネクタを追加して3つ口にしておいたケーブルを使用します。

EEPROMの下駄がサブ基板にあって 高さあるため、今回作ったボードを固定するスペーサーが無いので バラック状態で確認します。
とほほ…

BASICでLチカ

8080のニーモニックは忘却の彼方なので、Z80マイコンでも使ったGrant’s BASICのOUT命令で試してみます。

  • 83hが制御ポートで OUT 命令で80hを出力するとAポートもBポートも出力に設定。
  • 81hがBポートの制御です。データの16進数のビットがOFFとなったポートのLEDが点きます。
OUT &h83,&h80
OUT &h81,&hAA
OUT &h81,&h55

うまくLEDがつきました!!

SBC8080ルーズキットを組み立てる

満を持して登場した「世界初のマイクロプロセッサ8080 CPU用ルーズキット SBC8080」を組み立てました。
部品点数は多いですが着実に部品を組み付ければ確実に動く…はずでした…^^)

実は並行してSBC6303BL(ブートローダ)も作ってまして、そちらはマイクロSDに保存するブートイメージファイル名の先頭にブランクを入れて悩むという恥ずかしい状態で…さほどネタはありませんです。そのうち記事書きます。

部材到着

スイッチサイエンスさんから、SBC8080基板などなどが届きました。
今回は”SBC(シングルボードコンピューター)”といいながら、CPUボード+サブボード(ROM/RAM+シリアル)という構成です。最初から40pinフラットケーブルが活躍します。

SBC6303を作ったときに40pinボックスヘッダやフラットケーブルはゲット済み。
8080CPUや周辺チップは基板とは別に若松通商へお願いしてました。

作成開始~動かず

技術資料に沿ってCPUボード、サブボードの作成を実施します。
それほどはまりどころは無いはずですが、いつもどおりウッカリものなので40pin ICソケットを上下さかさまにつけてしまい、無理に外してハマってりしていました。(一度外すとスルーホールにハンダが残って、板バネICソケットだとピンが上に抜けてきまして…(>_<) )
次からはちゃんと丸ピンのICソケットにしようと心に誓いました。

記念写真を撮って、起動してみましたがシリアルコンソールには何も出ません。
以下を確認してみました。

  • 電源として+5V、-5V、+12Vは出ているか
    • 8080CPUは5V単一電源のZ80と違って3電源となっています。+5Vと+12Vはまぁまぁいい感じ。サブボードにもちゃんと供給されていました。ただ-5Vが-3.7Vぐらいとちょっと低め。でもTK-80もそのぐらいだったという情報をいただいてちょっと安心したり…(あやうくダイオードを張替るところでした)

  • 8224につながったクロックが発振しているか。
    • テスターの周波数カウンターで計測したところ2MHzぐらいが出てました。
  • 8251シリアルチップのクロックは出ているか?
    • ちゃんと発振して153.6kHzが出ている感じです。
  • 写真をよく見るとわかりますがパイロットランプのLEDをつけ忘れていますw このあたりはご愛嬌。

EEPROMが?

起動用のROMですが、データパックの “PTBEXSA.HEX”(機械語モニタつきBASIC)をEEPROMに焼きました。
68系と違ってROMは0000h番地から配置なのでその点だけ注意でした。

実はTwitterで先達の方がEEPROMでハマっていたのは見ていたのですがピンときてませんでした。

動かないSBC8080の回路図をみながら地道に1本づつテスターであたっていて、ハタと気づいたんですが…
私が今回使ったのも 28C256型のEEPROM。技術資料で使用しているのはUV-EPROM(紫外線消去型)の27C256型。
そういえば 、EEPROMとUV-EPROMでは一部のピンアサインが異なっています。

ピン UV-EPROM
27C256型
EEPROM
28C256型
ピン:1 Vpp(+5V) アドレスバス A14
ピン:27 アドレスバス A14 WE (書き込み許可)

アドレスバスA14のピンが違っています。これだとアドレスが正しく指定できません。また、EEPROMのWE (書き込み許可)はライターでの書き込み時に使用するピンなので+5VにつないであげればOKのはず。

手元に27C256型 UV-EPROMはあるのですが 紫外線ランプなどのEPROM消去機材がないので…..以下写真のような下駄を急遽作成しました。1番ピンと27番ピンを逆に接続して残りのピンは同じピンへ接続すれば良いはず。ユニバーサル基板を切って細ピンヘッダとICソケットを装着して作成してみました。

下駄を装着して1回目は起動しませんでしたが、どうもWE (書き込み許可)ピンがフラフラしたせいか中身が壊れてしまっていたようで、再度 PROMライタで機械語モニタ+BASICのHEXファイルを書き込みなおしたところ無事に起動しました!!

むかし雑誌に載っていたNEC TK-80(トレーニングキット)を見ながら指をくわえていた組なので、手元で8080CPUが動いて感激です!!

今後…

今後はFM音源チップを鳴らしてみたいとか8255AをつないでLチカしてみたいとか色々と野望は膨らみますが….
まずは機械語モニタにLコマンドを実装してIntel HEX形式をメモリロードできる機能を追加しないとダメかもです。

Z80自作マイコン用PPI(8255A)ボード

SBC6800用パラレルI/F(PIA)ボードが徐々に出来てきましたので、同じような2階建て手法でZ80自作マイコンボード用にもパラレルI/O(PPI)ボードを作ってみたいと思います。

2階建て作戦はラッピングソケット

以前も紹介したとおり、ラッピング用ICソケット作戦での2階建てはZ80マイコン用PPI(8255A)ボードの着手が先でした。

なんとなくできそうというところで満足して配線は放置してましたので、配線を実施したいと思います。

回路図と配線について

Z80自作マイコン用PPIボードの回路図は以下のような感じです。

パラレルI/O LSI 8255Aは3ポートありますが、ポートCは制御用のイメージだったので ポートA、Bそれぞれに4bitづつわりふって14pin フラットケーブル用ボックスヘッダへ配線する予定です。

また、先日のArduino FM音源ボード用アダプタも積みたいので 間に板バネ40pin ICソケットを挟んで3階建てにする感じです。

確認用のLEDチカチカ

とりあえずZ80 CPU8255Aとアドレスデコード用の74HC128、ポートAの分のボックスヘッダへの配線を実施してLチカで確認してみました。

プログラムはZ80 ASMでかいたものをgistへUPしています。

フラットケーブルで接続

いちいち確認用にブレッドボード用ワイヤでつないでいるとたいへんなので、14pinフラットケーブルで接続できるようにしてみました。
(そんなにLチカばかりするのか?という疑問は置いておいて….)

ちなみに先日作ったSBC6303+PIA(MC68B21P)ボードも14pinボックスヘッダの配線を合わせておいたので フラットケーブルでLチカ可能です。
便利w

今後は Lチカだけではなくて、なにかを制御してみたいと思います。
SRAMをたくさん並べて、バンクメモリーを作るとFM音源の楽曲データがたくさん保持できるなぁとか….