ちょっとTea Time!? CPM80の「MZ80化」を構想する!の巻き(本編)。 2025.9.6
ことはじめ
昔々、京都の寺町といえば大きな電気街でした。場所は四条寺町の寺町通の南側の約2ブロック。
二宮無線、谷山無線、ヒエン堂やその他一杯。電子パーツを扱う店も結構ありました。
嗚呼、懐かしの寺町電器街 - Kyoto Love. Kyoto 伝えたい京都、知りたい京都。
寺町へは中学生のときは、家から自転車でよくいきました。
(小学生のときは、一人で学校区からでることはできませんでしたから)。
距離的にも15分くらいかなあ〜。
駐輪場はないので、いつもはヒエン堂の横の道に止めていました。
当時はマイコンの黎明期。TK-80BS(TK80にBASIC基板が接続)や
MZ80(SHARPのマイコン)などのBASICが使えるものが置いてあり、
興味深く触っていました。当時のBASICの雑誌には
10 LET A=2
と代入にLETがつかわれていました。
それらに忠実に
10 LET A=2
20 LET B=3
30 LET C=A+B
40 PRINT C
50 END
などと、打ってみて実行して、モニターに結果が表示されると嬉しかったりしたことを覚えています。
これらのことが、マイコンに興味をもった原体験です。
MZ80のように、CRTとキーボード、そしてカセットテープ(記録装置)
が一体となったようなマイコンは憧れをもつには十分です。
それらのマイコンは当時の価格でも10万円は軽く超えるものでしたから、
お小遣いを貯めて買うようなレベルのものではありません。
ちなみに、MZ80やその後継機のMZ2000などを詳しく記述したHPがありました。
機能は低いが、夢が詰まっているという、記述に共感しました。
Nibbles lab: http://cwaweb.bai.ne.jp/~ohishi/index.htm シャープ博物館
引用:MZ-80K
こういった記事を読んでいて、無性に一体型の(昔風の)パソコンを作ってみたくなりました。
私の原体験が疼きます(笑。
最後に作ったCPM80をベースに改造
最後に作ったCPM80は「高速」を意識して、基本的な機能を充実させました。
ただし、あくまでもCPU部分のみであり、WindowsのTeraTermというターミナルと接続して動かしています。
今回は、この基板をベースにモニターやキーボードも取り付けようと思います。
最後に作ったCPM80。Z8S18033(Z80相当,最大33MHz品)を60MHzオーバクロックで動作させ、
3MBのハードウエア転送のメモリーディススク内蔵。制御PIC(最大64MHz)も80MHzオーバクロック動作。
現状の構成です。CPU周辺しかありません。
キーボードについては、先日にUSB接続のメカニカルキーボードを改造して、UART(RS232)出力が可能にしました。
モニターについて、7インチのWVGA(800x480)の動作を確認しているので、それらを接続するようにする予定です。
モニターはZ80からもアクセスできるように(但し亀のように遅いだろうけど)、Z80のバスに接続します。
ただし、Z80だけからのコントロールでは、速度の問題がのこるので、アクセラレターとしてRP2040マイコンも
バスに接続して、画面表示の手伝いをさせるように考えます。
考えている構想です。WVGAはZ80のバスに接続しますが、アクセラレータとしてRP2040マイコンも接続します。
まずはバックプレーンを準備しよう!
基板が複数枚追加できるようにバックプレーンを作成です。
前につくった、バックプレーンを使います。ユニバーサル基板の裏側に配置したので、
穴ピッチの関係からコネクタは3個のみになります。まあ、3個あれば色々と遊べるでしょう。
CPM80と同じサイズの秋月のユニバーサル基板にカードエッジのコネクタを取り付けです。
穴ピッチの関係から3個だけです。
基板の裏面側にバックプレーン基板をとりつけています。
CPM80基板を下側にして、バックプレーン基板を追加です。
次は、RP2040アクセラレータとWVGA接続基板を作ろう!
Z80のI/Oに接続するだけなので、本来はそれほどややこしくないはずなのですが、
RO2040とWVGAが3.3Vロジックに対して、Z80が5Vロジックなので、どうしてもレベル変換を入れる必要があります。
そのため、すこし部品点数が多くなりそうです。
RP2040からもZ80のバスをアクセスするようにしているので、画面表示だけじゃなくてZ80のお手伝いもできるかもです。
浮動小数点の計算なんかを手伝わせられたら面白いかなあ〜。
回路図のPDFファイル。
夜な夜な作成です。
ポリウレタン被覆銅線をつかって配線しています。
とりあえず、配線は完了。あとで、配線チェックしなくっちゃ!
現実逃避? 2025.9.7
配線チェックって、もの凄く面倒な作業なので、おもわず現実逃避してしまいました。
まだ、動いてもいないのに、あたらしいI/O基板を作成です。
PSG(音源)ICのAY-3-8910Aを4個搭載した、基板を作成です。
音源用の基板です。PSGを4個搭載しています。
半田面です。配線はあまり多くはありません。
スピーカアンプはDAISOの300円スピーカについていた基板のICを活用です。
残しておいてよかったあ〜。
スピーカアンプとしてLTK8002を使いました。
psg_card.pdf へのリンク
まずは準備体操 2025.9.8
RP2040アクセラレター基板の配線チェックです。
すこし電源周りで抜けていたところがありましたが、確認完了です。
RP2040アクセラレータ基板の配線チェックが終わりました。
まあ、配線チェックが完了したからといって、動作するとは限りません。
回路自体が間違っている可能性もありすからね。
さて、この基板をCPM80に差し込んで動かそうとすると
RP2040基板のプログラム作成(VT100シミュレータ機能など)
CPM80のBIOS改造
PICの制御ソフト変更
などなど、多くの作業が必要です。
一気におこなうと、どこかでトラブルとどこが原因かわからなくなってしまうので、
地道に調査から始めます。まあ、準備体操みたいなものです。
VT100のコマンドは?
CPM80のターミナル機能をもたせるにはVT100をシミュレーションしなくてはなりません。
単に垂れ流しで表示するだけならまだしも、最低でもスクリーンエディタであるWORDMASTERを動かせる環境にはしたいものです。
となると、VT100のエスケープシーケンスを実装しなくてはいけません。
しかし、このエスケープシーケンスが、また無茶苦茶多いです。
ANSI/VT100 Terminal Control
こんなもの、まともに実装する気になりません。
そこで、現状のCPM80基板のシリアルポートの信号を横取りして、
WORDMASTERでどのようなエスケープシーケンスが使われているかを調べてみました。
シリアルポートの信号を横取りして、どのようなコードがでているかを調べてみました。
意外と少ない?
色々と動かしてみましたが、どうやら使っているエスケープシーケンスは3つ程度のようです。
ESC[n;mH カーソル位置をn,mに移動する
ESC[2J 全画面クリアーしてカーソルはホーム位置へ
ESC[K カーソルから行末までを削除
と、この程度です。これなら実装は簡単そうです。
WORDMASTERで使われているエスケープシーケンスの種類は少なそう。
あ、面倒だなあ〜。
カーソルの移動といえば、一言で済みますが、カーソルにある位置の文字を反転させるのが面倒です。
というのも、WVGAは書き込みONLYにしているので、書き込まれた内容を読み出すことはできません。
それができれば、カーソル位置の文字画像を読み出して、反転させたものを再度書き込めばいいだけですが、
それができません。
キャラクターベース(80x24)のバッファーでよいので、何の文字を書き込んでいるかのイメージを持たせないと
いけない感じです。となると、スクロールなどしたときに、そちらも更新しなければなりません。
ああ、結構面倒だなあ〜。
まあ、ぼちぼち進めましょう。
作ってみると、意外とあっさり 2025.9.9
プログラム作成が面倒そうだなあ〜と思っていましたが、
風呂に入りながら、プログラム構造について頭の中にめぐらせ、
なんとなくあっさり出来そうなので、一気に書いてみました。
エスケープシーケンスは必要最小限のみです。
で、正常に動いているかどうかを確かめながら、
具体的にはWORDMASTERでファイル編集をしたときに、
PC上のTeraTermの表示と、WVGAの表示が一致しているかを確認しながら、デバッグです。
こちらはWORDMASTERを動かした場合のPC上(VT100)の表示です。
こちらはWORDMASTERを動かした場合のWVGAの表示です。上と、一致しています。
うん!大丈夫そうだなあ〜。
キーボードの改造は終わっていることだから、それとまとめてVT100ターミナルを一つ作っておくのもいいかもです。
ちょっと長くなるかもしれないので、番外編にまとめましょう。
#しかし、ネットは便利です。PICOのUARTの受信割り込みって、どうやればいいか知らなかったのですが、
#ネットでくぐればでてきました。そっくり使わせてもらいました。
RaspberryPiPicoのUARTでエコーバック #RaspberryPiPico - Qiita
ソースサンプル
作業再開 2025.9.13
キーボードの準備もできたことだし、作業再開です。
まずは、本体用のWVGAモニターの固定台を作成です。
アクリルの端材を使ってCNCで切り出しです。
最近、ようやくアクリルの切削条件がわかりかけて来た気がします。
いままでは、よく切れるようにと4枚刃で高速回転としていましたが、
直ぐにアクリルが溶融して刃先にこびり付いて、切削不可にになります。
そのため、切削油なので冷却していましたが、まわりが油でべとべとです。
その代わり、切断面は綺麗です。
できるだけ刃先の温度を上げないようにと、低速で回すとアクリルのこびり付きも
ありません。そしてエンドミルも樹脂用のものを使用です。
切削面は4枚刃のものに比べると、すこし粗いですが接着するには支障のないレベルです。
さてさて、アクリル板の切り出しが終わりました。接着も完了です。
さっそく支持台にWVGAを取り付けです。
キーボードとの接続に既存のUSB-Cコネクタをつかいましたが、ちょっと出っ張るのがやはり
すこし気になりますが、まあ完成してから色々と調整していきましょう!
アクリルの切削に、シングルエッジエンドの工具を使います。
回転数は6000rpmくらいがいいようです。
WVGAパネルの支持台ができました。
パネルが取りつくと、こんな感じです。
なにも考えずに、USBコネクタ接続としたものだから、ちょっと出っ張ります。
モニタとキーボードをぴったりと引っ付けるのは現時点では難しそうです。
完成してから、修正していきましょう。
そろそろWVGA接続基板を動かしましょう?あれ?
WVGAの取り付けが終わったので、そろそろ、先につくったRP2040アクセラレータ&WVGA接続基板の
動作確認に移行しましょう。WVGAとの接続には40PINのケーブルが必要ですが、
普通のフラットケーブルでは硬いので、個別に製作です。
作るのは面倒そうに見えますが、何かの箱にグルグルと巻きつけたポリエステル被覆銅線を、
一か所でぶち切れば同じ長さの銅線が揃います。それの予備半田をしておけば、
割りとストレスなく作ることができます。
40Pinのストレート接続コネクタを作成です。
違うところでストレスがあ〜
いざ、接続しようとしてピンを確認したところ、なにか違和感を感じます。
あ、接続基板側のピン配置の偶数と奇数間違えているぞ!!!
あ〜、これを事前に知っていたら、接続ケーブルを作るときに入れ替えたのになあ〜。
なんか、違うとことでストレスがかかります(笑。
2つの基板をストレートケーブルで接続しようとしましたが、接続基板(下側)のピン配置を間違えていました。
まあ、こういったことも長い半田付け人生ではあるものでしょう〜。
ということで、偶数と奇数ピンの入れ替えアダプタを作成です。
ちょうど、基板間を結合するための小型のバックプレーンが作ってあったので、
これを切り出して、変換コネクタを作成です。
そして、ようやく接続基板とWVGAの接続ができました。
基板間の接続のために作ってあった小型のバックプレーンです。これが役に立ちました。
偶数と奇数ピンの入れ替え変換基板を作成です。
ようやく、接続基板とWVGAが接続できました。
動作確認開始
いままではRP2040のGPIOをWVGAに直結で動かしていましたが、今回はZ80のバス経由での動作になります。
そのため、レベル変換のゲートを2回通ることになり信号の遅延が懸念されます。
さらには、アドレスデコーダでのCS(Chip Select)信号なども新たに加わります。
まずは、Z80のバスとは切り離して状態での動作確認です。
ただ、これで動いたとしても、Z80のバスにつなげると信号線の負荷が増えるので遅延が発生して、
動かなくなるかもしれまんが、そのときはその時で考えましょう。
RP2040とWVGAとはバス経由で信号を送るので、
信号遅延の影響が懸念材料です。
なお実際には、RP2040が勝手にバスを使うことはできないので、
コントロールセンターのPICからバス使用のリクエストを受けとってから
動くことになります..
RP2040からWVGAにアクセスするためには、PICからのバス利用の許可が必要ですので、
そのためのタイミングです。この部分は結構オーバヘッドがでそうですが、まあZ80が動くよりかは
随分速いでしょう..
まずは、バスを切り離しているので、基板内で常にバス利用可の状態をつくりだして、
WVGAの動作確認からです.。
おや?動いた?
ソフトを作成し、恐る恐る電源ONです。
WVGAに文字が表示されました。
あれ?動いた?
絶対に回路の1つや2つ、ソフトに3つや4つの間違いがあるかと思いましたが、
なぜか一発で動いてしまいました。
こりゃあ、順風満帆というか、あとあと怖いというか(罠が待っている?)。
まずは単体での動作が確認できました。
次は、Z80のバスに接続して動かしていきましょう。
その前に、ホスト(CPM80基板)もすこし手を加える必要があります。
(つづく)