2023/05/30(火)Z80-MBC2を組み立てて動作させてみた

Z80

2019/3に購入したZ80-MBC2の組み立て

購入したままで手付かずだったZ80-MBC2を組立てました。一部指定されている部品は有り合わせの物に勝手に変更しました。特にショットキーダイオードとして電源用の1N5817が使われていますが、ダイオードロジック回路で使うだけなので通常のスイッチングダイオードで良し。EBC配列のPNPトランジスタはこれしか家に無かった。LEDは4色必要なのと16MHzのクリスタルとICソケットを何時ものaitendoさんへ発注。aitendoさんの場合、例えばLEDは5色セット入りが139円で良いのですが本数が100本。クリスタルも16,12,8,6MHzのセットが299円ですが、各5本入りという事で通販するたびに家に大量のパーツ類が溜まって行きます。

続きを読む

2006/08/02(水)UART PC16550DNによるシリアルインターフェース

Z80

トランジスタ技術の2006年5月号から6502を使ったマイコンボードの連載が始まっていた。興味を引いたのはシリアルポートにナショセミの16550を使っている事だ。

PC16550DN

80系でUARTのチップといえば8251が定番であるが、ボーレートジェネレータを内蔵していないのでチップ数を減らす場合には不利だろう。この記事に触発されて最初にした事はこのチップの入手であるが、DIP品種となるとなかなか見つからない。

しかし鼻が利くのかこれまたスンナリと入手。さてこのチップの情報はマイコンで調べるよりもPC互換機には大量に使われているので、その上で走るオープンソース系のOSを調べたほうが早い。

その上、デバイスドライバーのソースコードだけではなく、貴重な説明資料も豊富に見つかる(その上日本語で)。

もちろんこのチップを扱うのは初めてだけれど、データシートも英語だけれどそんなに難しくはないし、実際の

FreeBSD2.8のドライバーのソースなんかも大変参考になるだろう。Cが得意でなくてもinb()とoutb()周りだけ読めればそれでも大抵理解できる。また、現在の物よりも古いソースの方が単純で明快だ。

さて、問題は何に繋ぐかだ。やっぱりここは8048の出番だろうか。PICやAVRではUARTのポートなんて当たり前の事なんだが。

2006/07/30(日)DRAMテスターその後

Z80

[Z80]なんとか成功にたどり着く

Z80では計算上、確かにREFRESHサイクルが間に合わず、テスト出来ないのですが、その後実はタイミングの出し方が悪かった事が判明。書き込み時にRASを出した後にデータを一旦セットしてからWEとCASを出さなければ書き込みが失敗する事が判明。またREFRESHタイミングが足りない部分は、1アドレスについて読み書きする度にREFRESH信号を加えてセルフリフレッシュさせる事で、ALL1,ALL0,ランダムデータ書き込みテストがパスするようになりました。

REFRESHサイクル

連続して読み書きするのならば、連続する下位アドレスをRAS側に出してやる事でセルフREFRESHさせる部分を取り除いてもテストが通る事が確認されました。実際計算すると2ms/128をかなりオーバーしているんですが・・・・こんななんちゃってでも動作するんだなぁ。凄いなぁ民生品のレベルは。

2006/07/29(土)TMS9918 VDP ビデオボード

Z80

TMS9918

既に1年以上経っているが心の隅につっかえている

TMS9918を使ってみたいという想いだが、これを扱うには2つの大きな課題がある。

1つ目は、TMS9918は16KのD-RAM 4116を8本も必要なのだが、このチップは3電源(-5V +5V +12V)も必要なのである。家にある1982年のメモリIC規格表にはピンコンパチで単一電源の4816という物が載っているが現在はとうにディスコンで入手は諦めていたが、

最近になってやっとHM4816AP-4というチップを8本入手できた(1本350円で8本で2800円もしました)

2つめは、8本ものDRAMをハンダ付けするのがイヤでたまらない。昔はサンハヤトからICB-015というD-RAM増設基板があったらしいのだが、これも既にディスコン。方々に探し回っていたが、こればっかりは見つからず、夏休みに全精力を投入してUEW配線を行うか、はたまた片面基板でバス配線だけでもしてしまおうかと悩んでいたが、サトー電気さんに在庫があるという知らせで、ギリギリ入手が出来た(現在は無いそうです)

さて、全ての問題がクリアしたので早速製作に取り掛かるとしよう。でも、直ぐに思い立った事があってそれは、実は昔からマイコンに携わってはいるがD-RAMを扱ったことは一度もないのである。

[Z80]DRAMテスター

このZ80ボードのI/Oポート経由でDRAMテスターを作ってみようと思い立ち、16PINのソケットをハンダ付け。そして8255のポートへとUEW線で接続して簡単なバラックを起こした。

最初に全ビットを0にして読み出しテストをするとOK。しかし、全ビットを1にして読み出しテストをすると最初のアドレスで既にNG。データシート片手に何度かRAS・CAS・WR信号のタイミングを変えてみるもやはり1が書き込めない。

そこで、各アドレスに0や1を書いては読み出しテストをすると全アドレスがOKとなる事が判った。これはREFRESHのタイミングが間に合わないのでは無いかという考察に(やっと)たどり着く。DRAMはREFRESHしなくても連続して読み出し・書き込みをすればREFRESHは不要なハズである。ではREFRESHに必要なサイクルとはどの位なのかと計算してみる。必要な時間は2msの間に128アドレスについて操作しなければならず、1アドレス当り15.6usである。え゛?この時間だと例えば2.5MHzのZ80ではIN/OUT命令だけでも4.4us掛かる訳でRAS・CAS・WRのタイミングで夫々OUT命令が必要でそれらをLOWにしてHIGHにするので最低でもOUT命令だけで6つは必要。これだけで26.4usとなる。当然間に合っていない訳です。

AVRとかではどうなんでしょうか。20MHzで1サイクルとすると1命令は50nsという計算で312命令が使える訳です。再びAVRを取り出すべきだろうか。

2006/06/25(日)16KbのPROM

小さなメモリー空間

X2816 NMC27C16 MB8516

8080AやZ-80そして8048/8035の外付けのROMとして広く使われた2KBのメモリー(P-ROM)。

今となっては2KBというのは猫の額より狭い空間かもしれないけれど、同時期のSRAMに至っては256x4bitや1024x1bitなんていうのもザラでした。

これら3つはintelの2716ピンコンパチブルなので置き換え可能な品種

Xicor X2816(2816 X2816 X2816B)

XicorのEE-PROM 2816 5V単一で書込み可能 書き込み時間の遅いSRAMと同等に扱える。バイト単位で再書き込み可能(5ms)、一万回保障。100年間のデータ保障。 DateCode 9020

NMC27C16(2716 C-MOS)

National Semiconductor C-MOSの為、消費電流が非常に少ない 80C35と組み合わせて電池駆動可能だろう。DateCode 8424。最近になって、若松通商にて購入した。今でも売っていたのが信じられなかったが。

MB8516(2716)

Fujitsu MB8516 DateCode i2716の富士通版 独特のパッケージです。ピンが折れやすいが金メッキ品です。 DateCode 8103 四半世紀前の物。現在でも問題なく消去・書き込み出来ています。

2005/06/28(火)PALO ALTO TINY BASIC

Z80

[Z80]TINY BASIC (2KB) 移植

PALO ALTO TINY BASIC

マイコンの歴史はこのBASICから開花したといっても過言ではないだろう。

PALO ALTO TINY BASICこいつに移植してみました。

1977年にLI-CHEN WANG博士がDr. DOBB's Journalに発表した小さなBASICインタープリタです。ROMサイズが2KB、RAMサイズが1KBでも走る優れものです。私がネットで入手した物はV3.0となっており上記雑誌に投稿したV1.0のバグFIXという記載がありました。

しかし、かれこれ30年前のソースが目の前で動作する姿はちょっと感動。

なんか、Z80じゃなくて、8080Aでワンボードマイコン作ろうかなぁ。という気持ちになったりして。


LICENSEについて記載が見つかりません

googleすると割と簡単に当時のソースが見つかりますが、はてさて、これは公開してよい物なのでしょうか?

JavaScriptでTinyBasic

googleしたらJavaScriptでTinyBasicというページを発見。すごいなぁ。

2005/06/06(月)Z80 MONITOR

Z80

[Z80]超簡単シリアル通信

このZ80ボードとのシリアル接続をどうしようかと思案したが結局、ELMさんのページから拝借して74HC04と抵抗だけでRS-232Cインターフェスを組んでみました。

Z80ですから、いまさらLEDをピカピカさせても面白くありませんからねぇ。カードエッジコネクタが手元にないので8255のI/O側からユニバーサルボードへ接続。接続には手元にあったPC用のIDEケーブルを流用。ユニバーサルボード側から電源を供給。+5の電源は定番の秋月アダプター

PCとのシリアル接続はSUNブレードサーバやCISCOのターミナル変換コネクタを流用です。RJ-45と基板への変換コネクタには、多分、大阪のディジットのジャンクであろうかドンピシャな物で仕上げてみました。

ソフトウェアだけのシリアル通信

マイコンの時代、プログラムはカセットテープに記録しました。今自分がやろうとしている事は既に知識としてあったし、8085には専用の命令と端子があります。しかし、実際アセンブラで組んでみると、送信ルーチンはともかく、受信ルーチンは結構シビアです。高々9600ボーだと何も考えずに1/9600とその半分の1/19200秒をWAITするサブルーチンを用意して8255のポートCから1と0を読み込んでシフトさせてみましたが、ボロボロと取りこぼしが発生。結局、最初のスタートビット後の1/19200やシフトルーチン内での1/9600とストップビット中の2/9600のディレイルーチンはそれぞれWAIT時間が異なるという(至極あたりまえな)結論に達しました。

しかし、1バイトのシリアル入出力ルーチンが出来上がってしまえば(とはいえ、かなりてこづった)あとは、簡単なモニタープログラムを書けば、Z80とはターミナルソフト(もちろんTera Term)で会話が可能となります。まるで、よちよち歩きの赤ちゃんが少しづつ話をする事が出来るかのように・・

簡易モニターがあれば

昔のモニターによくあるRAMへの書き込みコマンド'W'を実装した。W 3C00と入力すればあとはキーボードからプログラムを打ち込める。G 3C00と入力すればプログラムをコールしてまたモニタールーチンに帰ってくる。PC上でZ80のクロスコンパイラでプログラムを書き、最後に出来上がったHEXファイルをこの'W'コマンドに変換するプログラムhex2ttyも書いた。この時点で、この幼いZ80ボードとPCはモニターを通じてプログラムの書き込みと実行を自由自在に行えるのである。

TeraTerm万歳!

ソフトウェアでのループ待ちでシリアルデータを吐き出す訳でこの間はデータが全く受信できないのである。このモニターでは入力された文字をエコーバックするように作ったので、1文字入力後は1文字分(正確には11/9600秒)キー入力を受け付けない。手入力の時は気が付かなかったが、HEXファイルをモニターコマンドに変換して、TeraTermのSendFileコマンドで一気に書き込みを行うと、このエコーバック処理の為にボロボロになってしまった。やっぱりハンドシェイックは必要か?RTS/CTSのハードウェアフローを実装するしかないなぁ。と思いきや、なんとTeraTermのSerialPortのメニューにTransmit delayなる設定メニューを発見。恐る恐る30msec/charなどと設定して実行してみるとなんとこれが大成功。TeraTerm様万歳なのであった。

CでもOK?

Z80のフリーのCクロスコンパイラsdccでも開発は可能だ。試しにスタートアップルーチンを書けば、Cからputchar(),getchar()も使える。本当にオープンソースは素晴らしい。が、いい気になってちょっとprintf()とか使うと、一気にオブジェクトが1.5KBとかなってしまい、このボードのRAMサイズ1KBが恨めしい。

やっぱりZ80は楽しかった

この10日間は会社から帰ってきては、夜な夜なZ80のアセンブラをやった。Cも書いた。sdccのスタートアップルーチンではコンパイル後のリストファイルを見ながら、引数渡しの方法を試みた。楽しかった。モニター開発途中ではEE-PROM 2816がとっても役立った。ライターのTopMaxも大活躍だ。ありがとう昔のチップ達よ。充実した日々が送れた。ハンダテラピーは僅かだったがヤニの香りを楽しませてくれた。

Z80 MONITOR
Z80 MONITOR

  • monitor.lst

  • Intel HEXファイルをターミナルからの書き込みキー入力コマンドへ変換 hex2tty.c

  • sdcc用スタートアップルーチン crt0.s

  • 2005/05/22(日)Z-80 SINGLE BOARD COMPUTERと16KのEEPROMを入手

    Z80

    Z-80 SINGLE BOARD COMPUTER

    Z-80 SINGLE BOARD COMPUTER

    XICOR 2816 (X2816BP)

    長らく 16KのEEPROM(2716の代用品)を探していましが、ひょんな事からXicorのX2816BPをまたまた大量に入手できました。

    これで死蔵していた古いZ80ボードが活用できます。このボードはネットで知り合ったOBさんから頂いたもので、その方は仕事で組み込み関係をやっておられた方です。その方曰く「最近は目がショボショボして自分ではもう使わないから」という事で手持ちのパーツを私に譲っていただきました。私も久しぶりにハンダテラピーしていますが、ユニバーサルボードにウレタン線(UEW)による配線がとてもシンドイのです。私もいつかは大量の在庫を抱えてしまうのでしょうか。

    でも、このボード殆どの部品が「セラミック品」なんですよ。74LS04,7430,74LS02,74LS138,2114 凄いなぁ。TTLのセラミック品なんて高校時代でも使ったことないと思うなぁ。

    Z80ボードは本当に久しぶりです。懐かしいです。Z80,8255,2114・・この辺りのチップって結構電源を食うのですよね。指で触ると暖かいです。Z80にいたっては「熱い」のです。あー懐かしい。昭和の感触だぁ。1980年代だ。あの頃が懐かしい。

    2816も結構「暖かいです」ROMソケットが2個付いているので、用もないのに2個指しています。

    でも、今使うならやっぱりPCとコミュニケーションが取れないとつまらないので8255のポートからソフトウェアでシリアルデータを出力するテスト中。レベル変換はどうしようか。まぁ手を動かそうよ。今日は雨だから、家に引きこもるのには都合がいい。

    2005/03/04(金)念ずれば通づる-その2

    Z80

    VDPがやってきた!

    TMS9918ANL

    まさか、まさかの出会いがありました。今日は大阪の日本橋へ何気なく出かけたのでした。休みだった事と、家でくすぶっていても仕方ないし・・

    さてさて、黒門市場でラーメンを食し、デジットでパーツ類を見て回った。最近のロボット人気を博してか、サーボモータとかメカ物、そしてマイコン(PICやらH8やら)のコーナーが充実。液晶キャラクタディスプレイ(よくあるやつ)の出物が600円でGET

    TMS9918ANLを発見

    さて、次は共立電子であるが、3F入り口にてレール物で古いDIPのチップが投売り。よせばいいのに座り込んで物色。すっすると・・・

    でたぁー大当たりぃTMS9918が9 本でたったの200円!

    まさか、まさかのVDP。usbid.comで何度発注しようかと思っていた物が目の前に。

    あまりの衝撃に、これだけを持ってレジに並んでしまったのであった。帰りの電車の中で、あれ?VRAMの4416は?と思い出したが、そんな物はまた、念ずれば通づるのである。8748といい9918といい、2005年を迎えた現代では既にマイコンでなく、過去の遺産ではないか?

    一体何を作ればいいんだ。

    データシートはGoogleで直ぐに見つかりますね。