物 置


img
ひとやすみ ひとやすみ…



■ 物 置

メモ:chrome の場合、F12 で Web デベロッパーツールを出す→更新アイコンで右クリックして「キャッシュの消去とハード再読み込み」を行う→F12 で閉じる。


ネットはおろか PC も無い環境だったのでやることを忘れた。

P6mk2 の FDD 端子って 8255 そのままだったのか〜。
FDD だけでなく色々繋げそう(音源とかも?)だけどブートはどういう仕組みなんだろうか。
CPC 方面で IDE を繋いでいるようだけど、今ならラズパイ直結とかの方が簡単なのかな。

P6 の ROM カートリッジって何か書き込んで実行するよりも、ブートから即ジョイスティックポート経由のシリアル転送とか
テープからの圧縮ローダーとか開発環境的に面白い試みが出来そう。

腰がとても痛い。



写経の成果。



88 版も楽には動かせない。



P6 用の文字変換テーブル作成ツール。





タイトル。パレット効果は全画面書き換えなので遅い。
音楽は PSG。これだけはオリジナルよりクリアに聴こえて良い感じ。

P6 の課題はメモリ不足。3.2KB ほど空けないと入りきらない
MZ は VRAM がバンクメモリであるのに対し P6 はそうではないのがキツい。



ここから先はネタバレになるかしら。
最初のシーンに至るまでにも思った以上にバグ、見落としがあった…。
これから始まる全フロアのテストプレイで地獄を見そう。



PC88 は INS=HOME DEL=DEL にしている。移動もテンキーのみでカーソルはなし。
書き換えた方が良いだろうか。
4MHz だと文字入力ももたついてストレスが溜まる。
8MHz だと割と快適に遊べるのだが意図した移植と違う。



MZ 教団、SHARP や X1 には反応しないのか…。



プチロポコもニャッピーも苦手なタイプのパズルで時間を取られた。

バグ修正。無をセーブしていた。そらロードできんわ。

8MHz 快適は言い過ぎた。多少マシなレベル。
さすがに見かねて少しだけ高速化した。



80SR でドルアーガとな。

ROPOKO 本編がアップデートして 1.2.2 → 1.3.1 に。
チラっと考えないでもなかったが、解析しなおしか…。
えすびさんのようなオリジナルを生かしつつパッチでなんとかするような芸当は私には無理なのだった。

テープ A が終わった。B はまだ未着手。



写経が終わって(2回目)前回の進捗とほぼ同じ状況にまで追いついた。
キー入力周りに手が入っていたり、自己書き換えの増加、圧縮データの展開処理が加わったりで、
リリースノートに書いてある以上の変更があり、結局イチからやり直した。
ゲーム中のメッセージも色々と変わっている。
作者氏が遊んで欲しいのはこっちなのだろうから、なるべくそちらに合わせたい気持ち。

従来の QD に加えて SD カードに対する拡張も追加されており、I/O ポートを調べるのが手間だった(そして全く意味が無い)。

P6 の進捗も出しとくか…。



今回は P6 と 88 を並行してやっているので中々進まない.
そういえば、MZ と 88 は色番号が GRB 順で黒・青・赤・マゼンタ・緑・シアン・黄・白なんだけど
P6 は黒・赤・緑・黄・青・マゼンタ・シアン・白と BGR 順なのだよね。このために変換テーブルを置く羽目になってモヤっとする。

別バンクの絵文字もいっそのこと RAM にしてくれればよかったのに…。PCG でなく単色でいいから、使い出のあるキャラが欲しかった。


ここまで戻した。1.3 の文字は LDIR の独自実装なので色がついていない。



P6 は隙間の空いたドットパターンが無いので苦しいが仕方のない所。
25 行 → 20 行はずっと考え中。おそらく SHIFT+カーソル上下でずらす方式になりそう。
グラフィック解像度は 320x200 あるので 88 と同じ方式であれば 40x25 も可能(遅さに耐えられるわけもなく…)



メモリ不足は「ローマ字入力」をカットすることで解消している。実は最初からそのつもりだったのだが。
この作品の特徴的な部分の一つなので実現できないのは残念だが、P6 ユーザーならかな入力でも問題ないよね、ということで。

テスト中は FDD ベースで、最終的にテープ版にするつもり。ローダー部分が無駄に 8 セクタとかになってしまってメモリにも負担。
例の FDD ルーチンも少し改善したので fddtest の新版をあとで更新しておく。



ここまで来たが、まだ一歩も動かない。「マ」はデバッグ用。
オリジナル版は要所要所で割込みを禁止していて、キー入力が割込み駆動な P6 と相性が悪い。
正直、どうするれば良いのかわかっていない。





ROPOKO 始動。速度はそこそこ。
P6 はキー単位での押下検出ではなくてアスキーコードで返ってくるため、一つのキーで 4 種類くらい別々の値が返ってくる。
なので本当は Y/y/ん/ン みたいな判定をしないといけなくてかなり面倒(ゆえに今回は端折って y だけ判定にしている)。
さらに、単体で使うキーは A/B/S/L/Y/N/T と F1-F5 くらいなので、それ以外の判定(バッファリング)はしていない。



ここで P6 でキー取得をすると文字そのもので返ってくるので、画面にはそのまま表示すれば良いのだが、
一旦 P6 の文字コードを MZ の文字コードに変換した上で、表示する際には更に MZ 文字コードを P6 文字コードに変換して表示している。
これは内部で単語リストとの照合を MZ 文字コードで行うためだが、さすがにあまりに無駄すぎて笑ってしまった。

まだ入力周りに若干問題があるので先に進められない。



88 版(4MHz)がキレそうなほど遅いので何とかしたい。

オリジナルの「MZ-700」のような単語のハイフン記号「-」はハイフン($2A)ではなく長音符(伸ばし棒)($BF)になっている。
これは入力の都合上の仕様で - を入力すると自動的に長音符になるため、P6 版もこれに倣い、どちらも長音符に変換するようにした。



P6 版のプチロポコはこんな感じ。SHIFT+上下でスクロールするのでアイテム数などは一応分かるが、これが初見だとプレイし難いだろう。

P6/88 版共にテープ A を終えたのでテープ B に進む。





テープ B ようやく動きはじめた。
実は 88 版こそメモリが足りない。MZ と比べて VRAM が邪魔すぎる。
フォントデータ 4KB をテキスト VRAM に置いて、さらに未使用フォント部分を潰してテーブルで上書きしているくらいなので。
拡張メモリを使ってよければ高速化も容易なのだけれど…。

PCG-8200/8800 はアトリビュートがアレなので無理。




ちょうど良いタイミングで MZ-700 修理動画を見た。
これって日本版なのかしら。




P6 版、クリアまで確認。このシーンはマニュアルに載っているからセーフ・・・か?
オリジナルの公衆電話のキャラグラは秀逸。

ちゃんとマッピングしておいてよかった。
しかし音か何かでフロア移動を知らせて欲しかった。暗闇シーンで左右はともかく前後がね…。

最終盤のイベントと演出については移植版の速度ではやや無理があるので救済措置を入れた。
一応 P6 版は間に合うのだけれど、アレを 88 や P6 で再現しても意味合いが違うのでやむなし。

セーブデータに相違があった場合のエラー処理にバグがあったので修正。早めに気づいて良かった…。
CAPS ロックをすると BGM だけ OFF にするデバッグ仕様は残すことにした。
BS=DEL も独自実装。自分が BS 派なので。
P6 独自のスクロール処理のせいで遅くなっていた部分を若干高速化。
終盤のマップの BGM の音程がおかしい。シフトを間違っていた。

ここからテープ用の処理に置き換えてもう一度最初からプレイし直し。それから実機テスト。きちー。
とりあえず 88 版も終わらせるか。

そういえばまだ公式にバレてる気配は無い?
オリジナルに存在する、今のところ致命的ではないけれど危険なバグがいくつかあって、報告したものか悩む。


88 版の描画処理を改良。文字コードの $00=空白、$43=■、$EF=網掛の頻出キャラは専用処理で描画するようにした。
結果、許容できるくらいには速くなった。



88 版実機でクリアまで確認。4MHz では最終盤はやはりギリギリなので救済措置アリのままとする。

ePC-8801 と M88fmgen は I/O ポート $53 でテキストを消した際、文字は消えるがアトリビュートは反映される実機の動作が再現できていないようだ。
以前報告したようなしてなかったような…

テープの処理は MZ は BIOS 任せなので P6 版はイチから作らないといけない。
エラー周りのハンドルとか結構面倒。単純にスキルと経験が足りない。



光の反射が酷いので接写で勘弁して。



NOW PLAYING.
圧縮ローダーも用意してあるんだけど今回は見送り。

今後のことを考えてテープ関連は使いまわせるように、ある程度整理しておきたい…が、どうにも気持ち悪い。。
テープでロードするためには割込み設定しなければならないのに、割込みテーブル自体をこれからロードするとか。
あと、I/O ポート $B0 は読み出し可にしておいて欲しかった(絶叫)。

p6towav 等ツールに合わせて標準の $D3*10 にファイル名 6 文字の BASIC フォーマットが最善っぽい。
p6t フォーマットの方が良いのかもしれないが、バイナリから直接イメージに変換するツールを用意していない。

オリジナル MZ 版にあるファイル名チェック後の 'LOADING' 表示は、おそらく P6 の速度ではムリっぽいのでカット。
MZ のテープ書き込み時の Writing ファイル名も ROM 内ルーチンによるものらしい。



コピー機で Bad Apple!
一コマ一枚ずつ紙で印刷されて出てくる。

実機でのみ出る不具合っぽいのを見つけてしまった。回避策もあるので致命的ではないが…。

致命的で思い出したが、原作者氏の連絡先が分からないのだった。booth のお便り欄でいいのだろうか。

テープロードしてバグってリセットしてソースいじってコンパイルしてテープロードして…の繰り返し。辛い。
おまけに Windows の録音とかミキサー関係がイライラを募らせる。

P6 実機で終了。
テープは 0:16 + 05:14 + 04:03 + 04:17 だから大した長さでも無いが、いまだに祈るような気持ちでロードを待つのであった。

公開。
https://github.com/meltycode/ROPOKO88
https://github.com/meltycode/ROPOKO60



ここは雑記帳なので例によって程々で消す予定。

そもそも MZ についての勉強のつもりで弄っていたので完成も公開の予定も無かった。
宗派的()なものもあってお気楽に移植してしまうのはセンシティブ案件かなという気持ちもあり。

P6 版はテキストオンリーであれば速度の遅さが目立たないのでは、という目論見。
テキスト画面が 40x25 → 40x20 であることについては、間引き表示かスクロールか 2 択だったが、ヘルプ画面などが見苦しいのでスクロールに。
88 版については MZ フォントを使った見た目そのままな移植はこれまで例が無かった(?)だろうというアイデア先行での試み。

88/mk2(V1)で出来なかったか→当初描画ルーチンは ALU ナシの V1 互換でやっていたので速度面を抜きにすれば出来なくはない。
MZ は 320x200 相当で 88 は 640x200 なのでフォントは横倍角で表示しないといけない。
なので、理想を言えば最初から倍角でフォントを格納しておき、さらに反転したものも格納しておけば速度向上できる。
全てはメモリの問題。どうにか拡張なしの素の 64KB で動くようにしたかったので現状の通り。

MZ は 8253 が単一音源で、効果音が鳴っている間 BGM は消えるが、移植版は PSG 2ch に BGM/SE を振り分けているので同時に鳴る。

P6 版は ROOM25 で音が鳴りっぱなしになり操作できなくなる不具合があるが、これは実機でのみ起きる。
詳細は不明だが、おそらくキーバッファにある決定キーを延々読み続けてしまうのではないかと推測。
このあたりのタスクの流れは複雑でよく分からない。

移植してみてどうだったか、というと…
MZ は画面が 40x25 でアトリビュートで x2 しても 2000byte で全画面が埋まる。
対して 88 は全画面で 48KB。桁が違う。
88 は嫌でもデータにメモリリソースを割かないといけないのに MZ は一枚絵をオンメモリで持ちまくっても余裕。
そしてその余裕はひたすらコード量に振り分けられることになる。

普通解析をするときは、リソース部分を切り分けてコード部分だけ解析して楽しようとするのだけれど
MZ のコード量の多さはかなり暴力的であった。読んでも読んでも終わらない。

P6 もヨソのことは言えないが、MZ は文字コードの並びが変則的すぎる。
しかし、文字の種類はよく出来ていて、文字色・背景色の組み合わせでの表現力はうらやましく思った。
単色でショボい PCG はむしろ要らないのでは、とすら思ったが、そこは当時の事情を知らないと理解できないところ。
どうしてもラムちゃんを書きたい勢とか、単音オンチでもいいから YMO を鳴らしたい勢の飢餓感は現代からは想像できない。

P6 のスクロールは MZ 版にもあるバックバッファを開始位置をずらして再描画しているだけ。
普通ならこれで足りるのだけれど、MZ 版はバッファを介さず VRAM に直接書き込んでいる箇所がいくつかあり、
そういうのは P6 でスクロールさせると消えてしまう。たぶん致命的な奴はなかったと思うが。

今回は水平移植的なものを目指した。当時 MZ 版が出ていたら水平展開して 88 や 60 で移植されて出来たのがコレ、みたいな。
野球狂やドアドアのように多機種で出まくってた感じ。なので拡張機器などに頼らないことを当初から目標とした。
X1 などは楽に動かせそう。

▲ TOP