読者です 読者をやめる 読者になる 読者になる

プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

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の仕様を理解できた気がしない。
スクリーンモードそのものの仕様もわからなかった。

結果

残念ながら、自分の理解レベルで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部のあたり。

結果

MSXにはスクリーンモードがたくさんあって把握が大変だが、詳細に書かれたテクニカルハンドブックをそのまま参照することができたので、問題なく理解できた。
仕様はわかったが、MSX自体の仕様はスロット等があったりしてイメージとちがって結構ややこしい。

▼結論

MZ-700とする。
すぐにわかりやすい資料を見つけることができたのと、想像以上にマシンの仕様がシンプルなので、今回の目的には最も合う。
サンプルプログラムの入手性はMSXに劣るが、大きな問題はなさそう。
ビットマップが使えないのは少し残念だが。

次点はMSX
なんといってもテクニカルハンドブックをそのまんま(?)wiki化してるので、文化の継承の観点からいってもこれ以上はないだろう。(権利関係は心配だが)
MSXならば50年後でもプログラミング入門者を作り出せそう。
プログラムも、紙媒体・Webともに、軽いものから大作まで入手可能で他の2機種を大きく引き離している。
ただし、自分がイメージしたよりも仕様が複雑であり、今回はパスする。

最後はPC-6001
残念ながらスクリーンモードすら把握することができなかった。
がんばって互換モニタのソース(アセンブラ)を読むのにトライするも、Z80初心者かつスクリーンモードの内容すらわかっていない自分には難しかった。
PC-6001はウィザード達の領域になってしまっていて、それがゆえに基礎的な資料が少ないようだ。
これからPC-6001プログラミングに入門するには結構ハードルが高い。

ビットマップを使いたかったので、本当はMSXPC-6001がよかったのだが、自分の能力から考えると結果的にMZ-700のシンプルさが良さそうだ。