RETURN TO Z80

いまさら8bitマイコンを作るのだ!

PC-9801 VZ EDITORにはまる

ちっとも進んでいないまま思いっきり横道に逸れてます。

フロッピードライブに興味を持って、どうせならば5インチが面白いなあ

           ↓

5インチFDDといえば入手しやすいのがPC-9801

           ↓

          本体入手

           ↓

本体も壊れていない。だったらいじってみよう

           ↓

       なつかしいDOSの世界

 

ってわけで、ついつい。

VZ EDITORをインストしたところまではよかったが、ATOK7を入れたらはまりました。

手持ちのVZが1.57aしかなく(1.6はとっくの昔に処分している)、1.57aはATOK7に未対応で、常駐時にコマンドプロンプトに戻ってFEPをオンオフすると落ちるという現象に悩まされた。はじめは何が悪いのかわからずに悩みまくり、メモリエラーかなどハード面を疑ったが、結局、ビレッジセンターのアーカイブを掘って対応パッチをみつけ、犯人を特定したのだった。

 

パッチを当てれば問題はなくなるのだが、ここで問題が起こる。

 

わたしは30行BIOS を使っており、VZ EDITORへは30行BIOSのパッチを既に当てている。ご承知の通り、バイナリのパッチはオリジナルのファイルに対しての差分だから、両方のパッチを同時に当てることは出来ないのだ。

 

ありがたいことにどちらのパッチもソースがある。

てわけで、あきらめてセルフビルドすることになった。

アセンブラはMASM5.1。EXE2BINはなかったので、互換のEXE2COMを使った。

 

Z80ブレッドボードマイコン

f:id:z80cpu:20140212222656p:plain

 

かなり月日が経ってしまったが、Z80マイコン製作の続きについて書いておこう。
実は11月の時点で現状の段階までは出来ていたのだが、もろもろ忙しくしていてブログの更新も出来ず、また製作自体も進んでいない。

 

写真のように、ブレッドボード上に組んでいる。
見事なスパゲッティ配線で、石の姿を拝むことさえ叶わない。

 

下段中央がZ80CMOSも持っているが、ここではNMOS版であるシャープのLH0080を使っている。バージョンはZ80A。4MHZで動作するのだから4MHZで動かす。クロックはZ80の右に見える水晶発振器(発振子ではなく)を使い、楽をしている。

ブレッドボード中段の中央にはSRAMがある。NECのD43100ACZという128KBのメモリだ。あまり有名ではないメモリのように思われるかもしれないが、なんのことはない、先人が使っているのを真似ただけ。


最低限、CPUにクロックとメモリがあれば一応動作させることは出来るのだけれど、命令を書き込む手段がなければ、プログラムカウンタを進めて偶発的なメモリの内容を読み込む無意味なマシンにしかならない。かといっていきなりROMを焼いたりするのも面倒だ。

というわけで旧式の8bitマイコン製作には反則的かもしれないが、AVRを加えてDMAでメモリの読み書きが出来るようにした。しかもAVRにはArduinoブートローダを書き込んである。使ったAtmega328はメモリアクセスするにはピン数が少ないから、本来ならもっと足の多い奴を使った方がいいのだけれど、最初にブレッドボードに挿してしまったらもう取り替えるのが面倒になってそのまま使っている。当然、ダイレクトにアドレスバスやデータバスに接続することは出来ないから、アドレスは74HC595を2個使ってシリアル=パラレル変換させている。この処理のせいでスピードが出ない。やはり多ピンのAVRを使った方がよかったと少し(いや結構)後悔してる。でもやり直すのも面倒だからそのまま。

AVRはシリアル通信でPC(Windows)と繋いでいて、AVRに書き込んだ簡易的なメモリ読み書きプログラムによって、PCから自由にメモリにアクセス出来る。むろん、その間はZ80に対してBUSREQを要求し、バスを礼儀正しく独占している。

AVRのコマンドとして実装しているのは次の6種類。
D    ダンプ    Dに続くアドレス以降のメモリの内容をダンプ
W    ライト    Wに続くアドレスの内容を表示し、必要ならば書き換える
C    クリア    Cに続くアドレスから256バイトの内容を0フィル
L    ロード    シリアルかSDカードからロード
S    セーブ    シリアルかSDカードにメモリ内容をセーブ
Z    Z80    BUSREQを非アクティブにしてZ80をリセット

SDカードは上段に見えている青い小基板に載っている。その左にはPIOがあり、現在は動作確認用のLEDが繋がる。ロードおよびセーブのファイル形式は、単純なバイナリとインテルHEXをサポートした。バイナリの場合はロード先アドレスを指定しなければならないデメリットがあるが、それはそのままどこにでもロード出来るというメリットでもある。一方、HEX形式では自動的にロード先アドレスが再現されるものの、たとえ相対ジャンプのみで書いたプログラムであってもセーブ時と異なるアドレスに読み込むことは出来ない。

AVRは単にメモリの読み書きだけに留まらず、Z80からI/Oアクセス出来るようにして、PCのシリアル端末を入出力として利用可能にしている。SIOを兼ねさせようということなのだが、これが面倒の始まりだった。

躓いたのはAVRとZ80の調停だ。
AVRはZ80の倍速である8MHZで動作させているが、それでは全然遅くてZ80からのIOREQを簡単に見落とす。なのでWAITを入れることしたものの、単純に数クロック入れても間に合わない時は間に合わない。結局、ロジアナで解析し、あれやこれやと試した結果、AVRから完了の信号を出してやることにした。この調停にはGALを使っている。

f:id:z80cpu:20140212221340p:plain


ここまで終わったのが昨年11月。現在、Z80の最低限のモニタを作り始めたところだ。
実装済みなのは3つのコマンド。
DUMP    ダンプ    スペースに続くアドレス以降のメモリの内容をダンプ
WRITE    ライト    スペースに続くアドレスの内容を表示し、必要ならば書き換える
GO    ゴー    スペースに続くアドレスにジャンプ

早くセーブとロードを書かなくては。
そこまで出来ればとりあえず何かしらBASICを移植したいなあと思っている。
さらにその先には、CRTCとキー入力回路をでっちあげて、PCとは独立しても動作するようにする予定。

Arduinoから320X240 GLCDを制御する

マイコンを作ろう、というのがこのブログの本題なのだけれど、今回はいきなり寄り道系。マイコンはマイコンでもArduinoの話だ。このところ、Arduinoで小型液晶をハンドルしてみている。ebayなどで売られているもので、HY-TFT240_262kという型番がついている。「2.4 inch TFT LCD Module Screen 240 x 320 Pixels ILI9325 Arduino Compatible」と検索すれば出品ページが見つかる。

f:id:z80cpu:20131110124410j:plain

 

Arduinoはかなりお気楽にコーディング出来る。ライブラリーも結構揃っていて、なくても化粧を剥げばAVRのgccだから自分でなんとかすることも可能だ。

 

ただしひとつ問題があって、カラーの液晶をハンドルするにはAVRのプログラムメモリが不足しがちだ。UTFT - Electronics - Henning Karlsenは複数フォントを搭載するなどよく出来たライブラリだが、残念なことに容量が大きくて、ATMega328Pの32KBでも表示するだけでいっぱいいっぱい。それでは有意義に使えない。

 

一方、ライブラリとしての充実度は低いものの、軽量なライブラリとして、adafruit/TFTLCD-Library · GitHubがある。ただしこちらにも問題があって、当初、手元のLCDモジュールではうまく動作してくれなかった。Henning Karlsenのライブラリでは動くので、表示が出来ないわけはないのだろうとコードを覗いてみる。

 

すぐに原因は分かった。モジュールのリードがうまく出来ないようだ。

モジュールの回路図等詳細な仕様が不明なため原因探求は難しいのだが、ともかくモジュールへのライトは通るがリードが通らない。

であれば、書きっぱなしにすればいいわけで、リードでモジュール名をチェックしている部分を無視して問題なく動作した。

 

2.4インチという大きさは小さいものの、320X240の解像度を持ち、表示の質は高い。色数も、80年代にありがちだった8色なんてせこいもんじゃなく、262K色。もっとも、使っているうちにいくつか気になる点が出てきてしまった。

 

ひとつは、モジュールに搭載されているILI9325というドライバチップがハード的にはスクロール機能があるようなのだが、ライブラリでは未サポートなこと。もうひとつはライブラリのフォントが欧文のみなこと。さすがに漢字フォントまで積もうとは思わないが(SDカードやシリアルROMに書き込んで、表示の都度に読み込むという方法はあるけれど)、カタカナぐらいは欲しい。このふたつは自分でなんとかすることにしよう。

 

そうだ、マイコンを作ろう

子供だった80年代初頭を思い起こすと、NECPC-8001やシャープのMZ-80シリーズや富士通のFM-7、それに忘れちゃいけないApple ][なんかも含めて、パソコンではなくマイコンと呼ばれていた。

 

あれから30年。

 

いまや8bitのデスクトップなぞ、実用性はない。まずない。

けれども、どうしても作ってみたくなった。かつて作れなかった手作りマイコンを。調べてみると、世界にはいまでもレトロなマイコンを作っている人がいるではないか。昔作ったマシンがまだ動くという話ならいざ知らず、ハードオフあたりに捨て値で売られていそうなもはやお役ご免のがらくたを、わざわざこれからこさえようというのだから、これはもうロマンだ。そうだ。実用性がないものに情熱を注ぐことこそロマンなのだ。