SBC6303ルーズキットを作る

ここのところの電子工作熱を再燃させていただいた 書籍 モトローラ6800伝説 のスピンオフ企画である SBC6800ルーズキットSBC6809ルーズキットにつづいて、SBC6303ルーズキットが発売されました。
☆下の画像はスイッチサイエンスさんに直リンク…


モトローラ6800伝説

いままで作ったMC6800系のCPU(バイナリ互換&拡張あり)ですが、RAMを128バイト内蔵していたり、シリアルやパラレルI/Fまで内蔵するワンチップマイコンって感じの石です。

SBC6303 ボード作成準備

さっそく部品を集めて作ってみました。部品はVintagechips氏作成の技術資料にもあるとおり各部品店に通販で申し込みをしました。あとは技術資料を見ながら作成開始です。
今回は以前のボードのようにPICでクロック作成等は無いため部品さえ揃えば(ROMライタがなければスイッチサイエンスでLILBUG ROMが販売されていますので…)はんだ付けを確実に実施すれば動くはず。

https://vintagechips.wordpress.com/
電脳伝説

部品集めで苦労?したもの

CPUは技術資料にもありますが若松通商で売ってました。
Twitterでも最近流れてますが 「40ピンL型ボックスヘッダ 」が意外と扱っているところがなくて、千石電商に通販を頼みました。あまり売れ筋じゃないのかなぁ。
秋月電子に40ピンフラットケーブル(短いの)はあるんですけどね。

ボード作成&テスト

今回のボード本体にはSRAM ICは載ってません。ROMからLILBUGをブートするとCPU内蔵の128バイトのRAMを使って動作します。
作成にあたってはさほど注意するところはありません。水晶発振子をクロックとして動作するのでPICの焼き込み等も不要です。水晶発振子の周波数がシリアル端末の速度に関係すると思うので半端な周波数ですが…
機械語モニタ LILBUGのROMについては、私は手元にUSB ROMライタのTL866CSがありましたので EEPROM AT28C256 (オレンジピコでかいました)にデータパックのHEXファイルを焼き込んでおきました。若干EPROMとはピン配置は違いますが今回は8kB分しか使わないので、SBC6800同様問題ないはず。

はんだ付けして Vcc/GNDのあたりの電圧が正しく来ていることを確認後、各ICを挿入。
技術資料にも出てるHELLO.Sを実施しました。LILBUGのLコマンドでモトローラS形式ファイルを流し込んでGコマンドで実行。動作OKです。

つづいてLEDチカチカさせる BLINK.SをLILBUGのLコマンドで流し込んで実行してみます。
注意点はLEDの向きを間違えないことです。ブレッドボードとメス-オスのケーブルと抵抗器があればOK。

32kバイト拡張メモリ

さて、128バイトではRAMが心もとないので、CY62256NLL-70PXC (32kB SRAM)をユニバーサルボードに組んで40pinフラットケーブルでつないでみたいと思います。
技術資料の作例通りで配線はZ80ユニバーサルマイコンを作ったときと一緒でポリウレタン被覆線を使用しました。いちいち被覆を剥かなくて良いので楽ちんです。
データシートでは他の同型SRAM(HM62256とか)とアドレスバスのピン配置が違いますが、気にせず技術資料の作例通りで配線しまして…..

RAMチェックのMEMCHK.SをLILBUGのLコマンドで流し込んで実行….$7FFFと応答があったので32kB分正しく認識されていることが確認できました。

次は??…

機械語モニタLILBUGへアセンブラでプログラムを書いて投入すれば何でも?できる環境にはなりましたが、ぜひバイナリ互換なので電大版TinyBASICを動かしてみたいと思いました…..が、ちょっと難航しています。
MIKBUGとLILBUGの文字入出力ルーチンあたりの調整だけでイケルかと甘いことを考えていましたが…..$0000〜$001FまでLILBUGのレジスタ領域として取られていたり、$00FFから若干のメモリがLILBUGのスタックとか変数領域で取られていて電大版TinyBASICのワーク領域とぶつかるのです。(32kB RAMにしたのに先頭から256バイトの範囲で取り合いが…)

$0100以降にメモリ領域へ電大版TinyBASICのワーク領域を移動させると、今度はBASICのオブジェクトコードがあちこちで長くなって2バイト命令が3バイト命令になり相対ジャンプが届かなくなったり….
ちょっと工夫が必要の模様で頓挫中です。(←根性なし…)

シングルボードマイコンシリーズの中では最大容量のSRAMを装備したものの、有効活用できないでいます。^^)

広告

Z80ブレッドボードマイコンで8255A(2)

8255Aは生きているか?

前回の投稿で 生死が不明wの8255Aをテストしてみたいと思います。

こちらのページで、Arduinoを使って8255Aの各信号線をコントロールしてLEDをチカチカさせてました。
真似してみました。

Increasing Digital I/O Pins of Arduino uno Using 8255 Peripheral Programmable Interface with Arduino

Z80マイコンとは別のブレッドボードで回路を作って、会社の人からもらったArduino互換機で動かしてみると、無事うごきました!! 8255Aは生きているみたいです。

LEDを1つずつ点灯させてみよう

LEDを1つづつ点灯させてみようと 一時点では 1つのピンだけ “1”を出力するようにしてみました。
すると、全点灯した後1つづつ消灯するのです…あれれ?? 8255Aの該当ピンの出力がLになったところが光っていてHレベルのところは消えてます。
試しに、「1つのピンだけ “1”を出力」と「1つのピンだけ “0”を出力」を交互にやってみました。

もとのArduinoのスケッチをもとに、ちょっとだけ修正して動かしたときのソースはこちら。

ををを、L (つまり”0″) になったポートが光っとる〜♪

はい…Twitterで教えていただいたとおり、8255Aの出力がLとなったときに電位差が生じてLEDが光るのでHにしたら同電位だから光らないのです。あああ、考えてみたらそのとおりでした。LEDは 8255A -> LED -> Vcc(+5v)という接続なので…..
思い込みはイカンです。^^)>

Z80マイコンでも8255AでLチカ

8255Aの動きは会得 ^^) しましたので、Z80マイコン側でもBASICプログラムを以下のように変更して実行してみました。
(光らせたいビットを0にした数字へ変更です…)

無事LEDが交互に光りました!! うれしい!!

Z80ブレッドボードマイコンで8255A(1)

前回の投稿の回路図にも描いた通り、Z80ブレッドボードマイコンに8255AをつけてLEDチカチカ(Lチカ)をさせてみました。
いろいろと基本がなってなかったのでハマりましたが無事可動しました!

8255Aを2つ持っていた

ちょっとまえに作ったZ80マイコンにI/Oがつけられないものかなぁと思っていたところ、数十年前に購入してPC-8001へFDドライブを接続できないかと買ってあった8255Aが2つ部品箱に転がっていたのを思いだしました。
静電対策をして無かったので生きているかどうかが不安….

8255A を接続するための検討

ひとまず以下の方の回路図などを参考にさせていただき配線してみました。

デカ回路図(B/W gif image, 43KBytes)

自分のZ80ブレッドボードマイコンの接続では以下のようにしました。

  • Grant氏の32k版回路図ではROMが8kBのため74HCT32でアドレスデコードしていましたが、ROMもRAMも今回の私の場合は32kBなのでアドレスバスのA15(8000h)のH/Lでコントロールで良いと思い回路を簡略化しました。
  • ROMのアドレスデコードで使っていた74HCT32のロジックが2つ浮いたので、IOREQRDWRをあわせた信号線を作って8255AのRDWRへつなぎました。これでZ80がIO要求をしているときにREAD/WRITEがされるはず。
  • 8255AのCEのために74HCT138を1つ追加してアドレスデコードすることにしました。もともとの回路ではリアルチップの6850はI/Oの80h番地に配備されているため そちらも合わせて74HCT138でデコードするかたちにしてみました。

接続イメージのブロック図はこんな感じ。

ちなみに回路図は、前回の投稿にも添付した こちらのイメージです。(たぶん)

なんか動かない….

ブレッドボード上の配線を変更した後、BASICのOUT命令を数十年ぶりに使って動かしてみます。
8255AはI/Oの0番地に配備したので、初期設定は3番地へ 80hを出力すると8255AのA/B/Cポート全部が「出力」になるはず。
あとはLEDをPA0とPA1に接続したので….プログラムはこんな感じ…

交互にLEDが点滅するかと思ったんですがウンともスンとも言わないので、8255Aのリセットピンの接続を手動(w)でVcc (+5V)につないだりGNDにつないだりしていると何故か点灯!! やったと思って動画をとったのがこちら….

交互にLEDが点灯せず同時に点いたりと謎の動きをしています。
また電源再投入すると消灯しっぱなしだったりとなにか安定しません….
8255Aが数十年の時を経て壊れているのか? とおもい、チップ自体のテストをしてみようと思いました。
(Z80のときといっしょの展開….w)

というわけで続く…

Z80ブレッドボードマイコンの回路図をKiCADで

回路図を描いてみたい

最近は 数千円で小さい基板を製造できるという話を聞いていて、KiCADを覚えたいと思い本を数冊かいました。


一人で始めるプリント基板作り[完全フリーKiCad付き]


プリント基板作りの基礎と実例集(トランジスタ技術SPECIAL for フレッシャーズ )

どちらもちょっと発売された年度は古いんですけど、感じをつかむのにはよいかなぁと思います。
練習の題材として、Z80ブレッドボードでいろいろと回路をいじってi8255Aなどをつなげてみていたりしたので、整理する意味で回路図を作って見たいと思いました。

書き始めた図がこちら….

Z80の部品が標準のライブラリには無かったので自作してみました。ベースをA4横のレイアウトにしたせいもありますが、このあとどんどんBusyになってしまってA3とかでスタートすれば良かったと後悔しました。
また全部の部品をとりあえず配置してみてから配線をするのが良かったと思います。今回は作図の練習のつもりだったので、いきあたりばったりで進めてしまいました….

ちなみにスライドシェアにKiCADについて、わかりやすくまとまった資料があります。

KiCadで雑に基板を作る チュートリアル

回路図エディタはDrawソフトとは違う

回路図エディタの見た目が一般的なDrawソフトっぽいので、Excelの図形やVisioノリで操作しようとしてしまったんですけど、全く操作性が違ってました。

  • 配置した部品どうしを配線したあとに移動すると線を整理するのがたいへん
    • 部品を配置したあとに「移動」や「ドラグ」で部品の場所を調整できます。ただしすでに接続した配線が外れたり、斜めになったりしますので、部品の大まかな位置を決めるため全部の部品を図上に置いて調整してから配線するのが良いと思いました。
  • 配線のラベルなどはキーボードの方が楽です。
    • KiCADはマウスでの操作もできますが、キーボード操作のほうがストレスないかもしれません。バス配線の各ラベル(アドレスバスのA0、A1…など)を追加していく場合マウス操作ではストレスがたまりますが、カーソルキーとLコマンドを連打するとあまり頭を使わなくて良いので楽でした。

こんな感じの回路図をつくってみた

いまのブレッドボードZ80マイコンの回路図(こうしたい! というのも含んでますが…)を作ってみたのが以下の図です。
みようみまねで作ったのですが、かなりきれいに描けてちょっとうれしいです。

このままプリント基板を起こすと大きなものになりそうなので、また小分けにした回路図にしてみたいと思いますが…^^)

Z80でマイコンをつくる (6)残りの配線〜動かない〜動いた!!

電源ラインはスズメッキ線で配線

ブレッドボードで稼働したZ80マイコン を秋月電子の片面ユニバーサル基板で作ってみよう作戦。
電源ラインは、古式ゆかしく0.5mmぐらいのスズメッキ線でVcc側、GND側を配線しました。
ここはGrant氏の回路図には出ていません。(一言、電源などはちゃんと配線やっといてね、みたいな記載があります)
シリアルICのHD63A50やZ80 CPUは普通のICと違う電源ピンなので配線もちょっと違いますが….

残りの配線を実施

各IC間の配線ですが、ポリウレタン被覆線によるデータバスx8本の一筆書き配線につづいて、アドレスバスx16本の配線・ハンダ付けを実施しました。念のため1本づつ各ICソケットの該当ポートが疎通しているか地味にチェックを実施。大丈夫そうです。ハンダ付けしてあちこち間違うと直すのが大変そうだったので(途中のICに線材を巻きつけたりしてましたし…) 地味にチェックしつつ進みました。

続いてシリアルチップ HD63A50のあたりの配線と、RAM/ROMのCE(Chip Enable)、OE(OutputEnable)、WE(WriteEnable)、あたりの配線を実施。
ROMのCE(Chip Enable)について元の回路図(32kB RAM版)ではROMが8kBなので真面目にA13〜15のアドレス線をOR回路でデコードしてましたが、今回はATC28C256 (256kbit / 32kB)にしたのでA15をCEに直接入れるように回路を変更しました。(アドレス0000h〜7FFFhはROMで、8000h〜FFFFhはRAMという感じでアドレスの頭1ビットで判定です。)

リセット回路と水晶発振子回路、ロジックICの未使用入力

ちょっと忘れていたのがリセットボタンで タクトスイッチを装備する場所をあまり真面目に検討していませんでした。
今回はCPUクロックとシリアルクロックはちゃんと水晶発振子+74HCT04で発振回路を組もうと思っていたので、そちらも抵抗器やらセラミックコンデンサやらけっこう場所をとります。頑張って部品を配置したので、ちょっと窮屈な配置&配線になっちゃいました。

またリセット回路はちゃんと電解コンデンサ+抵抗器でジワジワと電圧が立ち上がるようにした方が本当は良いのですが、ここはGrant氏の回路図のままです。電源のACアダプタを接続したあとリセットスイッチを押すと起動する仕組みです。
ロジックICの未使用入力端子は、ユニバーサル基板版ではすべてGNDへ落とすことにしました。

配線が終わってスイッチON 〜 動かず

配線終了してテスターで各所の配線を再確認した後、74HCT04だけ装着してクロック発振の確認を実施。テスターの周波数カウンターでちゃんと7.3728MHzあたりで発振していることが確認できました。
一つ深呼吸して Z80 CPU、ROM、RAM、シリアルチップ、ロジックICを装着してスイッチON! してみましたがシリアル端末には無応答でした。
Z80 CPUは追加購入したものだっので、例の 1Hzフリーランボードで動作確認したところ正常稼働することが確認できました。

作業後 寝る直前まで 虫めがねで基板裏の配線をチェックしたところ、1箇所配線漏れをみつけました。
EEPROMの27番ピン(WE)です。元回路図でVcc(+5V)へ接続しています。データシートを確認しても、この端子がHレベルであることが前提のようです。

基板裏写真をよーーーく見ると、EEPROMの27番ピンが未結線です….(と自分だけわかるコメント….)

この日はタイムアップということで対応は翌日に…..

ROMの配線漏れとバイパスコンデンサ追加で稼働!!

翌日に、EEPROMの27番ピン(WE)を隣の28番ピン(Vcc)と結線して動作確認しましたがやはりシリアル端末には無応答です。基板を良く見てみるとバイパスコンデンサの接続が不十分でした。

写真ではCPUの陰で見えませんがZ80 CPUのバイパスコンデンサ(0.1μF)はICソケット内に配置しています。動かない!と言っている時点ではRAMとROMのVcc近傍にバイパスコンデンサ(0.1μF)を配置していました。
追加でシリアルチップ HD63A50のVcc近く(12番ピン近く)と ロジックIC x2個のVcc近くにバイパスコンデンサ(0.1μF)を接続して試したところ無事稼働しました!! うれしい!! バイパスコンデンサは重要なんだなぁ。

下の図は無事稼働したZ80機械語モニターです。実はブレッドボード版マイコン〜ユニバーサル基板版の製作途中で 知人から教えてもらったZ80機械語モニターを移植(というほどではなく、変数をRAM配置したりしただけ…)していたのでした。

まとめ….仕上げ

完成写真はこちらです。
もうちょとだけ部品が追加してありまして、知人から電源のところにコンデンサがいるのでは?と指摘をいただきまして、100μFの電解コンデンサをDCジャックの近傍に接続しています。(SBC6800/SBC6809でもDCジャックの近傍に電解コンデンサが…^^);;)

最初に所有したマイコン PC-8001と同じZ80で….クロックがほぼ倍、RAMもSRAMですけど同じ32kBということで、グラフィックは出ないものの自分の手で組み上げることが出来て たいへん感慨深いものがありました。
うれしいです。

Z80でマイコンをつくる (5)使った部品一覧〜ユニバーサル基板 作成開始

使った部品

ブレッドボードの試作で使った部品を整理してみると以下になります。

部品 型番
CPU Z84C0020PEC (CMOS Z80)
ロジックIC 74HCT04,74HCT32
シリアルIC HD63A50P
スタティックRAM CY62256NLL-70PXC (256kbit / 32kB)
EEPROM ATC28C256 (256kbit / 32kB)
コンデンサ バイパスコンデンサ(0.1μF セラミック) x6
水晶発振用(22pF セラミック) x2
電源部分に接続(100μF電解)x1
抵抗器 プルアップ用(2.2kΩ) x2
水晶発振用(1kΩ、1MΩ) 各1個
その他 リセットSW(タクトSW) x1
細足DCジャック
L型6ピンヘッダ
5V AVアダプタ
USB-シリアル変換
  • EEPROMへは以前も使用したmini Pro(TL866CS)を使用してインテルHEX形式のファイルを書き込みました。
  • 元の回路図ではWEOECEの信号線を作り出すのに TTL 74LS32を使用していますが74HCT32で稼働しました。
  • Grant氏の説明では68B50が推奨でしたが、いまのところ63A50でも動いてます。

ユニバーサル基板へ

ブレッドボードで稼働したので、いろいろと配線をいじって動きの確認ができるようになりましたが、やはりブレッドボードだと配線が抜ける恐怖と戦いながらということとなります。
やはりハンダ付けした基板にしてみたいと考えました。まだ当時は発売されていなかったSBC6303の拡張基板のために秋月電子からユニバーサル基板(蛇の目基板)を買っていたので、今回使ったICなどがちょっと手狭ですけど載せられそうです。

また以前MC6802を載せる下駄を作成した際に使用したポリウレタン線の細いもの(0.26mm)を購入したので、基本は部品面で配線してハンダ付けする際の熱で自然と被覆も溶けてくれるので配線がしやすそうと考えました。

まずはこんな感じで、データバスから配線開始してみました。
ポリウレタン線をCPUのデータバス D0端子から始めて、ROM〜RAM〜HD63C50と途中でICソケットの足に巻きつけつつ一筆書きで配線し、ハンダ付けしていきました。
なかなか快調なスタートとなりました。

Z80でマイコンをつくる (4)ケーブルを短く→動いた!

今年のゴールデンウィークの自由研究^^)として始めたZ80ブレッドマイコンづくりですが….

クリスタル到着 ….しかし無応答

ひとまず、スタティックRAM 32kB(CY62256NLL-70PXC)といっしょに7.3728MHzの水晶振動子も届いていましたので、74HCT04(インバータ)で発振回路を組んでみました。ちゃんとテスターの周波数カウンター(しか測定器がないのですが…(X_X) )で発振していることは確認できました。
いったんPICで作った発振器から、クリスタルでの発振へ配線変更してみましたが状況は変わりません。

バラックで抵抗器NOP ROMwでZ80 CPUをフリーランした経験から、CPUが生きていれば M1 とか RD とかWRになにがしかの周波数が現れるはず。
テスターの周波数カウンターで計測してみたらちゃんと動いていそう。

やはり配線長か?!?

IC同士をつなぐケーブルを短めに

Z80 CPUとかRAM/ROM、シリアルチップをつなぐケーブルをできるだけ短い距離で繋いでみたいと思います。
実は最初からそのつもりで単芯リード線を買ってあったのですが、最短距離でつなぐためにビニル被覆を加工したりするのが億劫でやっていなかったのでした。(←手抜き)
ワイヤストリッパを持ってないので、ニッパで最短距離で切ってはカッターで切れ目を入れて、繋いで….慣れてくると短い距離でつなぐのが楽しくなってきます。
しかも、このプロジェクトは2018年ゴールデンウィークになんか作ってみよう企画のつもりでしたが、この時点ですでにGWは明けて平日ですw

なんとか、アドレスバス(赤色)、データバス(青色)をつないで、隠れちゃってますけどZ80 CPU、RAM、ROM、手前にシリアルチップのHD63A09をつないでいます。残るは、ロジックICのアドレスデコードとかのあたりの結線です。
ここまでの結線について念のためテスターで導通確認を実施。このあとバイパスコンデンサもチップごとに配置してみました。平日の晩だったので一旦ここで作業中断。

ロジックICの未使用端子の処理

翌日….
ブレッドボードなのでどこまでちゃんとヤルかという話だとは思うんですけど、CMOSロジックIC 74HCT04と74HCT32は全部のロジックを使い切っていません。余った入力端子はGNDに落とすなり抵抗器つけてプルアップしておくなりしないと、CMOSロジックICはノイズとか静電気でヤられてしまうことがあるらしいというのをどこかで読みました。

先日またもや国会図書館からとりよせた 2007年ごろのトランジスタ技術誌 の6502CPUのマイコン作成連載記事でも、余ったロジックの入力端子はマメにGNDに落としている模様。(出力端子はそのまま放置みたいでしたが….)

使わなかった入力端子は、ちゃんと抵抗器を通してプルアップしてみることに…(GNDでよかった気が….)

配線完了、テスターで導通チェック…

配線完了しました。
念のためテスターで導通チェックしてみると、シリアルチップ HD63A50のピンが一つ導通しませんでした。
ブレッドボードから外してみると、ピンの足が内側に折れ曲がってうまく刺さっていませんでした。
ラジオペンチで整形して再挿入。

電源5VのACアダプタを挿入して、リセットSW代わりのケーブルをGNDに落としてみると…..無事 BASICの起動メッセージが!!
嬉しい!!
つづいてGrant氏がホームページで紹介しているBASICプログラムを入力して実行してみました。

ちゃんとキャラクタでグラフっぽいのが出ました!!