Z80

MZ80Kレプリカを製作中

2012年4月3日

少し前に、PIC18F14K50を使った、キャラクターディスプレイの記事を書いたが、この記事をお読みになった方の中には、この事を予想なさっていた方がいらっしゃるかもしれない。現在、MZ80Kのレプリカを製作中である。

なぜMZ80Kかというと、色々理由がある。

  1. 一つは私が生まれて2番目に触ったコンピューターであること。本来なら、初めて触ったコンピューター(日立ベーシックマスター)のレプリカを作ってみたいのだが、残念ながら、以下の条件に当てはまらない。
  2. ユーザー数が多かったせいか、web上に情報がたくさん見つかる。
  3. モニターROMと呼ばれる、現在のPCのBIOSに相当するようなものを、入手することが可能。これは、著作権の問題をクリアーするような形でできる。
  4. 同じく、CG-ROMと呼ばれる、フォントデーターを入手することが可能。

構想は半年ほど前からあって、どんな形で実現しようかと色々考えていた。それが実際に目に見える形になり始めたのは、前の週末からである。現在の姿は、こんな感じ。

2012-04-03-kmz80.jpg

2012-04-03-cpuram.jpg
ブレッドボード左側。CPUには、ザイログ社のDIP-40パッケージのZ80(Z84C00)を用いている。読み書き可能メモリーは、スタティックRAMで32Kバイト(DIP-28パッケージ)のものを用いているが、そのうち4KバイトはモニターROMとして用い、4Kバイトをキャラクターディスプレイに用いているので、実際にRAMとして使うことができるのは、24Kバイトである。これは、MZ80Kのデフォルトである16Kバイトに、8Kバイトを追加している状態に相当する。


2012-04-03-clock.jpg
ブレッドボード上部には、クロックジェネレーターとして、PIC12F683が配置されている。このPICには16 MHz の水晶発振子が接続されていて、16 MHz, 2 MHz, 31 KHz, 30 Hz のクロックを発生している。16 MHz はもう一つのPICのクロックに、2 MHz は、Z80のクロックに用いている。 31 KHzと 30 Hz はそれぞれ、オーディオの周波数とテンポ用に用いられる。始め、シュミットトリガーのインバーター(74HC14; DIP-14)を用いてクロックを作成し、CPLD内部で多数のクロックを作成する予定であったが、最終的にDIP-8のPICを使ってクロック作成部分を一つのチップに収めることが出来て、すっきりした。

2012-04-03-cd.jpg
ブレッドボード右側には、PIC18F25K22が一つある。これは、主にキャラクターディスプレイ用に用いている。以前紹介した、PIC18F14K50を用いたものをほんの少し改変した物で、40x25文字の表示が可能で、10 bit のアドレスラインで文字の表示位置を指定できるという、MZ80Kの仕様に従ったものになっている。写真の下の方は、NTSC信号を作成するためのN-MOSトランジスタと抵抗器があり、さらにビデオケーブルが接続されている。このPICにはもう一つ重要な役割が在る。このコンピューターは、ROMを独立したチップとして持っていない。webのパーツ販売店を色々さがしたが、どれも帯に短しタスキに長しといった感じでちょうどよい大きさのEEPROMが見つからなかった。そこで、リセット時に、このPICがRAMの最初の4 Kバイトの領域にモニターROMを書きむような形にした。おかげで、チップの数を一つ減せたのと、PICkitを用いてモニターROM部分を書き込みできるのでデバッグが楽になるのとで、一石二鳥である。

2012-04-03-cpld.jpg
ブレッドボードの中央にでんと居座っているのはCPLD(プログラマブルロジックデバイス)で、アルテラ社のMAX3000Aシリーズのものを用いている。これの扱い方については、先週記事を書いたとおり。現在、EPM3064ALC44-10Nを用いているが、半分の容量のEPM3032ALC44-10N(ほぼ半額)でもスペック的には十分のようだから、後で差し替える予定。主な仕事は、アドレスデコーダー。Z-80の創出する 16 bit のアドレスラインを解析して、他のチップの役割分担を指令する。汎用ロジックで同様の回路を作ると、多分20-30個になる。

まだ、MZ80Kの全体が出来上がったわけではなく、8255というキーボードなどのI/Oに使われている部分と、8253という音楽関連用のタイマーに使われている部分が実装されていない。8255相当部分はPIC18F14K22を用い、8253相当部分はアッパーコンパチブルの82C54を用いる予定にしている。

それでも、キャラクターディスプレイ部分と、モニターROM部分が完成しているので、ある程度のテストを行わせることが可能。そのテストの結果は、以下のとおり。

2012-04-03-hello.jpg

例によって、"HELLO WORLD!"を表示させてみた。表示用のプログラムはマシン語で書かれていて、PIC18F25K22のソースコードに埋め込まれており、以下のとおりである。
rom unsigned char monitorrom[]={
0x21,0x00,0xd0,0x11,0x17,0x00,0x06,0x0c,0x1a,0x13,0x77,0x23,0x10,0xfa,
0x06,0xe4,0x3e,0x00,0x77,0x23,0x10,0xfc,0x76,
0x08,0x05,0x0c,0x0c,0x0f,0x00,0x17,0x0f,0x12,0x0c,0x04,0x61
};

とりあえず、キャラクターディスプレイ部分が動くこと、モニターROMの書き込みが正常なこと、Z80が予想した様に動作することは確認できた。なお、回路図やPICのソースコード、CPLD内部の回路図の公開は、完成してから行うことにしたい。

コメント

カンタベリー (2012年8月21日 07:00:59)

おお、なつかしきMZ80K
高校合格祝いに買ってもらって散々遊びたおしたなあ。

QuickDiskがもっと早く実用化してて、白黒グラフィックディスプレイ拡張ボードが販売されていたら、PC-88MKIIには負けなかったろうになあ。

Katsumi (2012年8月28日 01:30:55)

カンタベリーさん、こんにちは。

>散々遊びたおしたなあ
良いですね~。私は買わせてもらえなかったので、電気屋にあるもので遊んでいました。

レプリカは完成しています。動画もありますので、よろしければどうぞご覧になってください。
http://www.rad51.net/blog/mycom/index.php?itemid=845

コメント送信