Petit-Z80ちょっとだけ進捗
Petit-Z80がちょっとだけ進捗。
■ツール類を作ってみた
デバッグ作業を楽にするため、いくつかツール類を作りはじめた。
メモリの中を確認するZ80_Mem_Viewを作った。
まだ基本的な機能しかないが、これでメモリの確認が少しだけ楽に。
また、テキストファイルから16進データをメモリにロード/セーブする、
Z80_Mem_Load、Z80_Mem_Saveを作った。
これはまだテストもしていない。
■仮想マシンの対象を検討した
こちらが本題。
最初の仮想マシンはテスト用に適当に作ったもので、
テキストRAMに書きこまれたデータを、一定期間ごとに
全画面に書きだすだけのものだった。
現実のパソコンを実時間でエミュレートするつもりはないのだけど、
実際のプログラムを使わないとテストがしづらいのと、
それなりのものが動かないと達成感がないので、
現実のパソコンの仕様をすごく簡略化した仮想マシンを作って、
既存の実際のプログラムを動かしてみたいと考えた。
この「現実のパソコン」にはいくつか条件がある。
(1)既存のプログラムが入手可能である
これが目的なので、入手不可能な場合は意味がない。
プログラムとしては、リアルタイム性がなく、それなりの画面を備えたゲーム、というのがよさそうなところだろう。
(2)非力すぎない
作る意味がわからなくなるレベルものはやめておこう。
(3)プチコン3号で実現できる範囲
これは(2)とは逆になるが、解像度が高くて物理的仕様が1対1対応できないとか、
自分の実力で実現が難しいものとかはやめる。
この3つの条件で、かつ知名度や自分の勝手なイメージから、
「現実のパソコン」を3つに絞った。
・PC-6001
・MZ-700
・MSX
さて、上記の条件に加えて、さらに重要な前提条件がもう一つある。
(4)「現実のパソコン」の仕様を自分が理解可能なレベルで解説された資料を入手できる
上記の機種は、いずれも所有したことがなく、プログラミングの経験もない。
はじめてプログラミングするのにやさしい(資料が揃っている)機種はどれなのか?
この(4)の条件を満たすのがどれかを探すのが、今回のお題である。
▼PC-6001
調べた資料
自分がブックマークしたURLは以下。
http://homepage2.nifty.com/akikawa/basic.html
http://p6ers.net/hashi/index.html
http://www.tiny-yarou.com/asmdev/asmdev.html
http://homepage2.nifty.com/akikawa/sword/index.html
http://papicom.net/p6v/index.html
http://sbeach.seesaa.net/
http://www.geocities.jp/submarine600/html/p6/tate.html
しかし、私のレベルでは基礎知識が不足しているのか、PC-6001の仕様を理解できた気がしない。
スクリーンモードそのものの仕様もわからなかった。
▼MZ-700
調べた資料
MZ-700マシン語プログラミング入門
http://www.maroon.dti.ne.jp/youkan/mz700/pg/index.html
I/Oマップ
http://www.maroon.dti.ne.jp/youkan/mz700/mzioframe.html
に極めて簡潔に記載されており、必要にして十分な情報量。
結果
マシンのもともとの仕様がシンプルなことも幸いしてか、非常に分かりやすい資料をすぐに見つけることができた。
また、マシンの仕様そのものも、今回の実装には都合がよさそうである。
▼MSX
調べた資料
テクハンwiki化計画
http://ngs.no.coocan.jp/doc/wiki.cgi/TechHan
MSX2だが、紙のテクニカルハンドブックをそのままwiki化しようとしたものらしく、極めて貴重な資料。
図が非常に多いので、理解がしやすい。
画面の仕様は4部のあたり。
▼結論
MZ-700とする。
すぐにわかりやすい資料を見つけることができたのと、想像以上にマシンの仕様がシンプルなので、今回の目的には最も合う。
サンプルプログラムの入手性はMSXに劣るが、大きな問題はなさそう。
ビットマップが使えないのは少し残念だが。
次点はMSX。
なんといってもテクニカルハンドブックをそのまんま(?)wiki化してるので、文化の継承の観点からいってもこれ以上はないだろう。(権利関係は心配だが)
MSXならば50年後でもプログラミング入門者を作り出せそう。
プログラムも、紙媒体・Webともに、軽いものから大作まで入手可能で他の2機種を大きく引き離している。
ただし、自分がイメージしたよりも仕様が複雑であり、今回はパスする。
最後はPC-6001。
残念ながらスクリーンモードすら把握することができなかった。
がんばって互換モニタのソース(アセンブラ)を読むのにトライするも、Z80初心者かつスクリーンモードの内容すらわかっていない自分には難しかった。
PC-6001はウィザード達の領域になってしまっていて、それがゆえに基礎的な資料が少ないようだ。
これからPC-6001プログラミングに入門するには結構ハードルが高い。
ビットマップを使いたかったので、本当はMSXかPC-6001がよかったのだが、自分の能力から考えると結果的にMZ-700のシンプルさが良さそうだ。