SSブログ
  PC-98x1(補完計画) ブログトップ
前の30件 | -

PC-9821のデュアルブートが無効になった(11) [  PC-98x1(補完計画)]

前回のデュアルブート記事(2日前)の続き。

7. 以前にたった一度だけ、起動OS選択画面が出たことがある。たしかHELPキーで出る設定画面のどこかをいじった後だった。その時と同じことをすれば、また一度だけ起動OS選択画面が出てくれるのではないか?

boot98_01.JPG
電源投入時にHELPキーを押していると「システムセットアップメニュー」が出る。これは起動するOSを選ぶ画面を出すTABキーと違い、電源ボタンを押した直後に認識されるので最初からHELPも押していないと出ない。ディップスイッチ2の設定で、メモリスイッチが「初期化する」になっていた。確か以前にここをいじった時に1回だけTABキーの画面が出たと思う。

boot98_02.JPG
そこで、メモリスイッチを「保持する」に変更した。そしてシステムセットアップメニューを終了。

boot98_03.JPG
電源投入後にTABキーを押していると、今までどうしても出なかった「起動OSを選ぶ画面」が出た。内蔵ハードディスクのWindows95が選択されていた。

boot98_04.JPG
外付けハードディスクのほうを表示してみる。

boot98_05.JPG
私の記憶通りに、Windows98の横にアスタリスクが付いている。つまり自動起動の設定になっているじゃないか。(それなのに毎回Windows95が起動する。変だ。)

boot98_06.JPG
F1キーで自動起動を解除したら、毎回OSを選ぶ画面が出てくれるかな。

boot98_07.JPG
メニューを終了したら、N88-BASICが出ちゃった。リセットボタン。

boot98_08.JPG
さあ、OSを選ぶ画面が出るかな。ドキドキ。(TABキーは押していない。)

boot98_09.JPG
ありゃりゃっ!? 今までと同じようにWindows95が起動してしまったよ。起動可能なOSが2つあっても、TABキーを押していないと選択画面は出ないのか。

boot98_10.JPG
今度はTABキーを押していた。OSを選ぶ画面が出た。メモリスイッチを「保持する」にすると、TABキーが効くようだ。現在は自動起動の設定なし。手動でWindows98を選ぶ。

boot98_11.JPG
おおお! Windows98が起動した! つまりWindows98のシステムファイルや設定ファイルに問題はなかったんだな。問題があるのは起動OSを選択するほうだ。

boot98_12.JPG
自動起動を設定し直したらどうだろう。改めて設定したらまたWindows98が自動起動してくれるのではないか。

boot98_13.JPG
Windows98を自動起動にしたぞ。

boot98_14.JPG
自動でWindows98が起動してくれるかな。ドキドキ。(TABキーは押していない。)

boot98_15.JPG
ええーっ! 「Windows95を起動しています」って書いてあるよ。

boot98_16.JPG
変だよ。これ絶対に変だよ。

ここまでのまとめ。自動起動OSを設定するしくみが壊れている。外付けハードディスクのWindows98を起動したかったら、電源投入後にTABキーを押してOS選択メニューを出し、手動でWindows98を選ばなければならない。なお、TABキーでOS選択メニューを出すためには、「システムセットアップメニュー」のメモリスイッチが「保持する」に設定されていなければならない。

Windows98のシステムファイルや設定ファイルに問題がないとわかったので、前回のデュアルブート記事(2日前)で予定していた一部の作業は不要(中止)となった。まだ自動起動はできないので不完全だが、なんとかデュアルブートはできるようになった。今後自動起動を目指すか、現状に甘んじるかを、今はまだ決めていない。

コメント(0) 

PC-9821のデュアルブートが無効になった(10) [  PC-98x1(補完計画)]

前回と前々回のデュアルブート記事で、今後試すべきことをいくつも書いた。何を試すべきだったか忘れて試さないで終わるといけないので、全部書き出して整理する。そして先に試すべきことから試してゆく。

1. FDISKの他に、ハードディスクのパーティション情報を確認できるフリーソフトはないか。

2. 外付けハードディスクの付属フロッピーディスクの中身が残っている。その中に、パーティション情報を確認できるソフトはないか。

3. 起動可能なWindows95でデバイスマネージャからIFC-DPの稼働状態を見る。

4. HELPキーで出る設定画面に、内蔵ハードディスクを切り離すスイッチがあった。切り離したらWindows98のほうが起動するだろうか。

5. 起動できないWindows98のMsdos.sysのファイルサイズを、起動できるWindows95と同じにしたらWindows98は起動するだろうか。

6. 4連装CDドライブは、4つでなくひとつだけ使う設定になっているか。


これで全部だ。これらのうち6.は、昔の設定がリセットされている気がする、ひょっとしてWindows98の自動起動もリセットされたのか?という繋がりだから、デュアルブートの件とは関連が希薄だ。結局5.までがデュアルブート不可の現状にかんして気になる点だ。

まず
1. FDISKの他に、ハードディスクのパーティション情報を確認できるフリーソフトはないか。
については、スマホでネット検索したがまだ見つからない。そしてこの1.は、
2. 外付けハードディスクの付属フロッピーディスクの中身が残っている。その中に、パーティション情報を確認できるソフトはないか。
と関連している。外付けハードディスクの付属品で私がパーティションを設定した可能性は高く、それならばその付属品でパーティション情報が確認できるはずで、そうなれば1.は不要となる。

私は外付けハードディスクの付属品の中にMELFORM.EXEというのを見つけた。名前からしてMELCOのFORMATTERに違いない。フォーマットだけでなくパーティション分割もするかもしれない。そうだとするとパーティション情報の表示もできるはずだ。

では早速このMELFORM.EXEをPC-98に入れて試そうか。いや待て。なにしろマニュアルが現存しないフォーマッターだ。パーティション情報を見るだけのつもりが突然フォーマットが始まったら大変だ。そうだ、以前にWindows95を仮想環境で動かそうとしてゲームプレイに満足な動作が得られず放置したものがある。それにMELFORM.EXEを入れて動作を確認しよう。仮に突然フォーマットが始まっても、使っていない仮想環境ならば被害は無に等しい。

私はその仮想環境Windows95をMS-DOSモードで再起動し、MELFORMを実行した。

check98_01.jpg
FATAL ERRORだって? FDISKに続いてMELFORMも使えないのか?
私はこのMELFORM.EXEがDOSのコマンドプロンプトから実行するものだと思っているが、念のためにWindows95のGUI環境からも試そう。

check98_02.jpg
不正な処理を行ったそうだ。DOS窓が出たということは、やはりコマンドプロンプトから実行するプログラムだったな。とにかくこれは使えない。FDISK.EXEに代わるパーティション情報確認用ソフトの捜索は、暗礁に乗り上げた。

そもそもなんでパーティション情報確認用ソフトを探しているかといえば、TABキーを押しても起動OS選択画面が出ないからだ。ブート可能なパーティションがひとつだから選択画面が出ないのか、起動可能なパーティションは複数あるが何かが壊れているから選択画面が出ないのか、それすらわからない。もしも起動OS選択画面が出れば、パーティション情報確認用ソフトは不要で、つまり1.と2.は不要となる。

この時点で私の頭に、上記1.から6.以外の試すべきことが浮かんだ。
7. 以前にたった一度だけ、起動OS選択画面が出たことがある。たしかHELPキーで出る設定画面のどこかをいじった後だった。その時と同じことをすれば、また一度だけ起動OS選択画面が出てくれるのではないか?

とにかく次を試そう。1.と2.は結果が恐かったから仮想環境で試したが、3.以降は実機で試す。

3. 起動可能なWindows95でデバイスマネージャからIFC-DPの稼働状態を見る。

check98_03.JPG
check98_04.JPG
ご覧の通り、SCSIコントローラーは問題なく動いている。これで3.は終了。SCSIボード付属のプログラムには問題がないらしい。

次は順番としては4.だが、先ほど頭に浮かんだ7.を先に試したくなった。

話が長くなったので、今回はここまで。後半の記事は明日書く予定。

コメント(0) 

PC-9821のデュアルブートが無効になった(9) [  PC-98x1(補完計画)]

作業に行き詰まりを感じた私は、昔のファイルの保存庫を覗いた。そこに、IFC-DP(SCSIボード)の付属フロッピーの中身が保存してあった。偉いぞ私! でもマニュアルを保存してないから、フロッピーの中身の使い方がわからない。前言撤回、全然偉くないぞ私! 次に私はネット検索した。すると、メルコ(BUFFALO)のホームページにIFC-DPの取扱説明書があった。偉いぞメルコ!

なぜ私がSCSIボードにこだわるのか。私の考えは、次のとおりだ。ネット上の記述によると、PC-98は本来デュアルブート向けに出来ていないらしい。でも実際には、外付けハードディスクを増設したらデュアルブートできた。ということは、外付けハードディスクまたはSCSIボードのどちらかにデュアルブートを可能にする何かが含まれていたに違いない。PCの電源投入後の早い時期に外付けハードディスクやMOドライブのチェックが画面で見て取れ、その画面表示から、チェックしているのがNECのプログラムではなくMELCOつまりSCSIボードのプログラムだとわかる。デュアルブートを可能にしているのがこいつの可能性が高い。さて、いま私のPC-98はデュアルブートができなくなった。どこにその原因があるのかと推測するに、私は2つの可能性を見いだす。その1。デュアルブートを可能にしている物にトラブルがある。その2。デュアルブートのうち、ブートできないほうのOSにトラブルがある。その1の場合、SCSIボード付属のプログラムが怪しい。SCSIボード関係のソフトウェアを再インストールしてみてはどうか。

私はIFC-DPの取扱説明書を読んだ。電源投入後に外付けハードディスク等のチェックができるのでドライバは動いているらしい。正確なことは次回PC-98起動時にデバイスマネージャで調べる。少なくともSCSI機器をすべて認識するのは確かだ。それと、取扱説明書にデュアルブートという文字がない。まさか、デュアルブートを可能にしているのはSCSIボード付属のプログラムではないのか? 外付けハードディスク付属のプログラムなのか?

外付けハードディスクはDSC2000というBUFFALOのハードディスクだ。これの取扱説明書はメルコのホームページになかった。

私はだんだん冷静さを欠いてきて、FDISK.EXEを実行してみようと思った。状態の確認をするだけで書き込みをしなければ良いのではないか。内蔵ハードディスクのWin95を起動してからMS-DODモードに移行し、FDISKとタイプしてEnterを押したらフリーズした。どうしたんだ? 私ははるか昔、このFDISK以外の何かを使って外付けハードディスクを使えるようにしたことになる。外付けハードディスク付属のソフトで使えるようにしたのかもしれないが、説明書がないのでわからない。

今日も五里霧中か。一般的には、PC-98の電源投入時にTABキーを押していてもOS選択画面が出ないのは、ブート可能なパーティションがひとつしかないからだと言われる。私は外付けハードディスクのパーティションもブート可能だと思っている。外付けハードディスクのパーティションがブート可能だというのは、ソフトウェアディップスイッチのどこかを変更した後でただ1回表示されたOS選択画面で見た記憶による。再度はっきり確認したいが、あれ以来TABキーを押してもOS選択画面が出ない。FDISKで状態の確認ができるはずだと思ったのだが、FDISKはフリーズした。私がとるべき行動は何だろう。

電源投入時にHELPキーを押して出るBIOS設定画面に、内蔵ハードディスクを切り離すというスイッチを見つけた。今は内蔵ハードディスクが使えるから、そこにあるWin95が常に起動する。内蔵ハードディスクが使えなかったら、どうなるだろう。もしも外付けハードディスクのWin98を試してくれるなら、Win98が起動可能かどうかがわかるのだが、そんな都合の良い話はないか。

FDISKの他に、ハードディスクのパーティションの状態を確認できるフリーソフトはないか。

気になることがある。私のPC-9821はCt16で、これはCDドライブが4連装になっている。私はその必要がないので、CDドライブをQのひとつだけにした。(その方法はマニュアルのどこかに書いてあった。)ところが画面を見たら、CDドライブがQRSTの4つあるではないか。
20190114_154203.jpg
MS-DOSモードで再起動した後も、CDドライブは4つあるようだ。
20190114_153922.jpg
まさか、設定がリセットされたのか? それとも私はWin98のほうだけCDドライブをひとつにしたのだろうか。確認すべきことが増えてしまった。

コメント(0) 

PC-9821のデュアルブートが無効になった(8) [  PC-98x1(補完計画)]

PC-9821のデュアルブートを修復するために、簡単に出来ることは今までに試し尽くしたと思う。それで、いよいよFDISK /MBRを試す時が来た。FDISK /MBRについては、ネット上の複数のサイトに記述がある。たとえば

http://8thway.cool.coocan.jp/os/osjn210.htm
「MBRのブートコードを修復するには、fdisk /mbrとして実行します。」


今日は電気屋が4年に一度の定期検査に来るので、検査の時点で漏電テストをしてまたPC-9821の停電お知らせLEDがチカチカしてしまうかもしれない。だからPC-9821を起動するのは電気屋が帰った後だ。電気屋を待っている間に私はネット上の記事を読み直した。すると、気になる記述を見つけた。

http://infoseek_rip.g.ribbon.to/ultraforce.hp.infoseek.co.jp/hdd_data/format/fdisk_mbr.htm
「FDISKコマンドの制限
MS-DOSやWindowsのFDISKコマンドには、パーティション作成に幾つかの制限があります。
(中略)
1.一台のハードディスクに作成できる基本領域の数は1つだけ 
2.アクティブに設定できるのは基本領域だけ(拡張・論理領域は不可) 
3.アクティブ領域は一台目のハードディスクに一箇所だけ 
3.の1台目のハードディスクとは、起動時にBIOSがドライブサーチを行なった際に最初に認識されたハードディスクのことです。※ドライブ認識順参照
以上を考え合わせると、FDISKコマンドだけでアクティブ領域を設定したとき、普通はプライマリマスターに接続されたハードディスクの唯一の基本領域が起動ドライブ(C:)として固定されます。MS-DOSやWindows単独でマルチブートの環境が作りにくいのは、多分にこの制限があるためだと言えます。」


この記述から考えるに、FDISK /MBRを実行するということは、私のPC-9821を内臓ハードディスクのWindows95から起動するように固定してしまうことではないのか?

なぜ昔外付けハードディスクのWindows98を起動できたかというと、私の想像ではSCSIボードを取り付けた時点で何らかの変更がなされてMBRからSCSIボード付属のソフトへ処理が移るようになり、そこでデュアルブートが可能になったのではないか。(電源投入後の外付けハードディスクやMOドライブのチェックをNECでなくMELCOのソフトが行っているので、そう思う。)もしもFDISK /MBRを実行したら、MBRからSCSIボード付属のソフトへ処理が移らなくなるかもしれない。そうなったら大変だ。

いつ電気屋が来るかわからないので、この記事はひとまずここまででUPしておく。



追伸
あれから1時間が経った。電気屋は来た。意外なことに電気は止まらず、PC-9821の停電お知らせLEDは点かなかった。でもここまで来たら何かしなくては。ただしFDISK /MBRには大きな不安が生じたので、他を試す。HDDのブート領域以外では、Win98のシステムファイルまたはそのシステムが初期に読み込むファイルの破損が怪しい。つまり、Win98を起動しようとして出来なかったから内蔵ハードディスクのWin95に切り替えた可能性がある。もしもDOSからWin98の起動を試せれば、Win98の起動不可が原因かどうかがわかる。ネット上の情報によると、まずio.sysがメモリに読みまれるらしい。DOSでWin98のio.sysのあるディレクトリに移動し、io.sysとタイプしてEnterキーを押したら何が起きるだろう。無知な私の考えることゆえにかなり危ないが試してみた。結果は、ファイルが見つからなかった。隠しファイルか。見えていないと、io.sysとタイプしても無効だった。もともとかなり危ないことを試しているのだから、この辺で休憩して頭を冷やすのが賢明だ。



(個人的記録)
今後私が何を試すかが後日わからなくならないように、今日すでに試したことをここに記しておく。
外付HDD内のWin98のmsdos.sysの中身を確認した。windowsのmsdos.sysはテキストファイルなのでメモ帳で読める。(もちろん起動不可であるWin98のメモ帳は使えないが、内蔵HDD内のWin95から読んだ。)起動にかんするいくつかのドライブレターが変になっているから起動できないのではと気になっていたが、Bなので、きっとこれで良いのだと思う。(内蔵HDDのWin95はA。)ただしその時に気になることがひとつあった。windowsのmsdos.sysは情報としては少ないバイト数で事足りるが、その後に何行もダミーらしきデータが入っている。これはmsdos.sysのファイルサイズを何か既定のものにするために必要らしい。そこまでは良いが、Win95のmsdos.sysはダミー文字で終わっているのにたいして、Win98のmsdos.sysはダミー文字のさらに後に数行、意味のありそうな行があった。msdos.sysのファイルサイズもWin95のものより大きかった。これは正しいのか? ひょっとして、はるか昔に私自身が何かを実現する目的でmsdos.sysを改変したということは、ないのか? それともこれで正しいのか。もうひとつmsdos.sysがあれば、さらに比較して、ファイルサイズが同じ必要があるかどうかを推測できるのに。そう思ってWin10のmsdos.sysを見ようとしたら、Win10にはmsdos.sysがない。いや、ひょっとすると隠しているだけで存在するかもしれない。以前にそんなことに遭遇した記憶がある。(Win10のルートディレクトリに置いた特定のファイルは見えなくなる、のではなかったか。)試しにコマンドプロンプトからdir /a:hとしてみたが、hiberfil.sysやpagefile.sysは出てきたがio.sysやmsdos.sysはなかった。Win10には本当にio.sysもmsdos.sysもないのか? とにかく、起動できないWin98のmsdos.sysのファイルサイズは気になる。次回の実験では、Win98のmsdos.sysをWin95のmsdos.sysと同じファイルサイズにしてみようか。
その他にやるべきことは、PC-98のハードディスクのブート領域について私が学ぶことと、そのブート領域を読み取って確認できるフリーソフトはないか探すこと。私は今まで、外付けを含む各ハードディスクの先頭領域にブート関係の情報があると思い込んでいた。でもネット上の記述を読むうちに、最初に認識されるハードディスク(私の場合は内蔵ハードディスクのほう)にだけ先頭にブート関係の情報が書き込まれている気がしてきた。PC/AT互換機ではハードディスク領域の先頭に「最初に実行すべきプログラムを読み込むためのコード」があり、それに続いて最大4つまでのパーティションの情報があるらしい。(私は当該ハードディスク内のパーティションの情報だけがあるのだと思っていたが、MBRがただひとつのハードディスクにあるのなら、外付けを含む全てのハードディスクのパーティション情報が書き込まれることになる。実際には、どうなんだ?)そして大事なのは、これがPC/AT互換機の仕様でありPC-98シリーズ上のWindowsが同じとは限らないということだ。ああ、ややこしい。PC-98がすでに過去のものとなった今、正確な情報を得ることは果たして可能なのだろうか。

コメント(0) 

PC-9821のデュアルブートが無効になった(7) [  PC-98x1(補完計画)]

私が次に思いつくのは3つの可能性。
1.外付けハードディスクのブート領域破損か、
2.デュアルブート用プログラムの破損か、
3.Windows98起動用ファイルの破損か。

これらのうち
2.デュアルブート用プログラムの破損
というのは、ネット検索しても誰も書いていないし、もしもこれが原因なら直せそうにないし、私がやるテストではいちばん最後に回していいだろう。

残る2つのうち、
1.外付けハードディスクのブート領域破損
は、ネット上で「MBRの修復」と書いているのがそれだろう。内蔵HDDから起動したWindows95から外付けHDD内のフォルダにアクセスできるが、外付けHDDのWindows98を起動することができない。この症状がMBR破損の結果として考えられるかどうかをはっきりさせるのが先決だ。もう一度ブート設定も確認するべきか。(今までに確認したつもりではあるが。)それから、FDISK.EXEで現在の状態を確認しなければならない。MBRが破損するような原因が私には思い当たらない。修復のつもりで正常なMBRを壊す結果になってはいけない。

3.Windows98起動用ファイルの破損
があるかどうかは、ブート用プログラムからでなくDOSからWindows98を起動してみればわかるのではないか。ただし、内蔵HDDのWindows95を一度起動してそれを終了する時にDOSへ移行することになる。そのDOS上から外付けHDDのWindows98 を起動。この方法で、Windowsのドライブはどれになるのか。Windows95のあるドライブになってしまい、Windows95のファイルが上書きされてしまうとWindows95まで動かなくなってしまう。しっかり調べてからでないと、大変なことになりかねない。

そしてまだある可能性4.

長年の間に私が何かを忘れ、間違えていただけで、実は何も壊れていなかった
という可能性。これが恐い。実際ありうるから恐い。

4の可能性まで考えると、私がまず試すべきは、デュアルブートWindows構築の手順をもう一度最初から調べ直す。その調べた結果に基づき現在の状態をチェックしてゆく。その過程でFDISK.EXEを使うことになるから、必要に応じてMBRを再設定する。つまり
4 -> 1
の順番は、どうだろう。

と、私は考えて行動を起こした。ところが、実際にネット検索して参った。デュアルブートWindows構築の手順と言ったって、ネットにあるのは今時のWin10やWin8.1の話だったり、古くてもXPだったり、WinとLinuxだったっけ、とにかく他OSが絡んできたりと、なかなか目的のWin95/98にたどり着かない。Win95/98では特別なことをしないと無理と書かれていたり。でも私は若い頃に普通にWin95とWin98をデュアルブートしていた。私の知り合いは日本語版Win95と英語版Win95をデュアルブートで使っていた。通常は無理と書いた人は、きっと前提条件が違うんだろう。同じハードディスク、ひょっとしたら同じパーティションに両方同居させるとか考えているのかもしれない。とにかくWin95/98のデュアルブートの記事がなかなか見つからず、これは当たり前すぎて記事にならないのか、あるいは話題が古すぎて記事がないのか。疲れた私は検索対象をFDISKに変更した。そうしたら、LinuxのFDISK、PC/AT互換機のFDISK、やっと「pc98用」という文字を見つけて読んで行ったらBSDって、あ、これ違う。助けてくれ。

やっとひとつ記事を見つけたかもしれない。今日はもうこれでご勘弁を。

https://weblabo.griffonworks.net/dorlog/2nddorcom/pc-98/1904.html

まななん・さん・・・2000-01-24 01:49:40
基本的に「外付HDDにシステム転送」->「TABキーで外付HDDから起動」->「Win98のセットアップ」で良いと思います。

KO1・さん・・・2000-01-24 06:16:13
gooさんの場合起動メニューが出ていない状態のようなので、起動時にTABキーを押して起動選択メニューを表示させて内蔵HDDに付いているチェックを外すと、次回起動時より起動選択メニューで起動するHDDを選択できるようになるはずです。
起動メニューから外付けHDDを選択しているのに内蔵HDDから立ち上がってしまう場合は外付けHDDを内蔵HDDと同じドライブとして(例、内蔵A:外付けもA:)Winをインストールしてしまっているので

(以下略)

まりも・さん・・・2000-01-24 10:28:49
「ブート可」の領域が一つしかないと、起動メニューが出ませんが、その可能性が高いような?(^^;。



私が上記のグロッキーになる前に、3の可能性についても調べておいた。

http://8thway.cool.coocan.jp/os/osjn210.htm

Win95/98/Meの場合
io.sys(先頭クラスタにある必要なし)が起動し、msdos.sys(テキストファイル)を読み込んでWindowsを起動。
(私による要約)

これを読むと、DOSでカレントドライブをWin98のドライブにしてからWin98が起動できそうに思える。しかし、気になる記述もあり、

http://nobusan.jp/computer/multi_boot/windows.html

これらのファイル群は全てブートパーティション上(Cドライブ)に存在する必要がある。



ただしこの記述は通常の起動、MBRのブートストラップローダーから始まる起動を記述している。

Win95/98のブートについては、それが必要だった時代が古いので情報も古く、情報の裏を取ることがもはや困難だ。なにしろ、上の1番目の著者様(http://8thway.cool.coocan.jp/os/osjn210.htm
)が記してくれた参考資料(マイクロソフトのサイト)のページがすでに404になっている。
私の正常に動くWin95が「PC-9821でデフォルトのシステム入りドライブと認識されがちな」Cドライブにある以上、DドライブにあるWin98を通常でない方法で起動させようという試みはリスクが伴う。この試みは後回しにすべきかもしれない。

危なくない、簡単に試せることとして、Safeモードがあるのを忘れていた。もしもブート用プログラムがまずWin98を起動しようとして失敗しWin95を起動しているなら、Safeモードでなら起動する可能性があるか? いや、Safeモードでも無理っぽいが、簡単で危なくないから試しておくべきだ。電源ボタンを押したらF8キー押しっぱなし。

http://www.jca.apc.org/~teramako/documents/trouble_case_0001.html

WINDOWSの起動については、SAFEモードでの起動ができれば、あとはWINDOWS内 での各種ドライバの設定の問題になる。起動できないという場合でもまずSAFE モードによるブートが可能かを確認すること。SAFEモードでの強制立ち上げは WINDOWS起動中にF8を押してメニューを表示させ、そこから3を選択することで 可能。

コメント(0) 

PC-9821のデュアルブートが無効になった(6) [  PC-98x1(補完計画)]

昨日、久しぶりに停電があった。停電といっても我が家だけの停電だ。東京電力のブレーカーをスマートなんとかに変えて以来我が家で頻発している停電だ。停電のせいでWOWOWのスター・ウォーズ最後のジェダイの録画は失敗した。でも今日書きたいのはそれではない。停電があったからPC-9821の停電通知ランプがまたチカチカしはじめ、これを止めるために一回起動しなければならない。となれば、あれだ。うちのPC-9821が外付けハードディスクのWindows98から起動できなくなったのは、SCSI接続の末端にあるMOドライブの電源スイッチを入れていなかったせいなのか。つまりターミネーターが働かずにSCSI接続が不安定になったせいなのか。それを実験して試す時が来た。

私はMOドライブの電源スイッチを入れてからPC-9821の電源スイッチを入れた。結果は、今までと同じく内蔵ハードディスクのWindows95が起動した。MOドライブの電源スイッチのせいではなかった。

これでいよいよ次は、外付けハードディスクのブート領域破損か、デュアルブート用プログラムの破損か、Windows98起動用ファイルの破損を考えなければならない。ここからは素人には荷が重い作業だな。

コメント(0) 

PC-9821のデュアルブートが無効になった(5) [  PC-98x1(補完計画)]

私はWindows10 PCのハードディスク内を探すうちに、PC-9821の起動シーンをビデオカメラで撮影したものを見つけた。家を出されると脅されたから、私は自室のあらゆるものをデジタル化しようと必死だった。それでPC-9821の起動シーンも撮影した。なんか懐かしかったので見ることにした。
pc9821boot.png
メモリチェックの後にあるSCSI機器のチェックは、記憶のとおりにNECのソフトではなくMELCOのソフトが行っていた。なんでそうなるのかを私は知らない。動画を見るうちに、私は妙なことに気づいた。SCSI機器のチェック結果が、この画面では2行。HDDとMO。なるほどSCSI機器はHDDとMOの2つを接続している。でも私はこの時ハッとした。最近外付けハードディスクからブートできなくなってからの画面を見て、私は1行しかなかったような気もする。はっきりは覚えていない。今度PC-9821を起動する時に確認しなくては。ひょっとすると、外付けHDDからの起動ができなくなったことと関係あるかもしれないのだから。

それと、最近表示される蜂のキャラクターが飛ぶグラフィックスは、昔はやはり表示されなかった。以前とは電源投入直後の内部動作が明らかに違うという証拠だ。MELCOのソフトが起動時に表示されるかどうかも次回確認しよう。

あとひとつ、今までどうでもいいと思って書かなかったことがあるが、今「ひょっとして?」と思った。PC-9821に接続しているMOドライブが半壊れで、挿入するMOディスクを片っ端からオシャカにして行った。(これは半壊れでなく全壊れか?)FDISK.EXEはもう見つけてWindows10のPCの中に入っているので、これを次回MOディスク経由でPC-9821に入れる予定だが、MOドライブがまたディスクをオシャカにするんじゃないかと心配していた。ところが少し前にPC-98周りを掃除した時に、MOドライブの形が昔と違うことに気づいた。そんな馬鹿なと思いつつ、やがて思い出した。MOドライブは入手できなくなる前に中古を買った。それだけなら「偉いぞ俺」と自分を褒めて終わりだが、今思い出したことがある。たしか新しいMOドライブはPCの電源と連動して自動的に電源が入る仕組みがなかったと記憶している。ということは、電源スイッチがOFFになっているはずだ。このことと、上に書いた「PC-98起動時の画面でSCSI機器の表示が1行しかなかったような気がする」ということが符合する。SCSIは、接続している複数の機器のうちのひとつが電源OFFだった場合、どんな動作をするんだろう。電源が入る外付けハードディスクを認識はしているが、ひょっとして、その外付けハードディスク内のパーティションからブートできないのはSCSIの接続が不完全なことと関係があったのか。

コメント(0) 

PC-9821のデュアルブートが無効になった(4) [  PC-98x1(補完計画)]

今日は年に1、2回の、PC-98に掛けてある埃よけ風呂敷を洗う日だった。マシン本体、ディスプレイ、付属スピーカーの掛け布を洗濯して干し、それが乾くまでの間にマシン周りの掃除をする。少し前にそれが終わった所だが、せっかくの機会だからブートしなくなった外付けハードディスクの診断を進めようと思った。

この外付けハードディスクにはWin98と昔のゲームがインストールしてある。これがブートしてくれないと、内蔵ハードディスクのWin95がゲームインストールなしの状態で使えるだけになってしまう。

症状は、ブートできない以外は正常だ。電源が入り、SCSI接続で認識され、内蔵ハードディスクから起動したWin95のエクスプローラに外付けハードディスク内のファイルが表示され、試しにtxtファイルを開いてみたら表示された。ただブートだけができなくなった。電源投入後にTABキーを押し続けても固定ディスク起動メニューは出ずにWin95が起動してしまう。以前のテスト時に1回だけ固定ディスク起動メニューが出たことがあって、その時に外付けハードディスクのWin98用パーティションにアスタリスクが付いていることを確認した。それでもWin95が起動してしまう。

私はハードディスクのさらなるテストのためにFDISKが必要かと思い探したが、小さな壁に突き当たった。この手のファイルはまとめてアーカイブファイルになっていることを忘れていた。Win95のディスクを見つけたまでは良かったが、どのアーカイブファイルにFDISKが入っているのだろう。片っ端から試すのだろうか。それで片っ端から試すのが正しかったのだろうが、私は怠け者なもので、まだその面倒な作業をやっていない。

では今日は何をやったかというと、FDISKよりももっとずっと基本的な診断方法があることを忘れていたのでそれを済ませた。マシンはPC-98だがOSはWin95/98を使っていたのでスキャンディスクがあるではないか。これでエラーが出れば、改善するなり諦めるなり、とにかく先へ進める。Win95から外付けハードディスクのドライブにスキャンディスクを実行した。結果は、エラーが出なかった。(下の画像はスマホのカメラでPC-98のディスプレイを撮ったものだが、ピンボケになってしまった。この記事が作り話でなく実際にスキャンディスクを実行した証拠としていちおう出しておく。)
20181003_144857.jpg

この外付けハードディスクがオシャカになっていないことははっきりしたが、依然としてブートだけができない。こういう症状の対処法は、ネット検索しても見つからない。

仮にFDISKが見つかったとして、私はどうすべきなんだ。変なことをしたら、逆にハードディスクを壊してしまうのではないか。


追記
WIN95_03.CABにFDISK.EXEが入っているという情報を見つけたので、この記事の続き「PC-9821のデュアルブートが無効になった(5)」では何か進展があるだろう。

コメント(0) 

PC-9821のデュアルブートが無効になった(3) [  PC-98x1(補完計画)]

また停電があった。東電のスマートなんとかという機械の動作で、我が家だけの数秒間の停電だ。今回はエアコンもパソコンもテレビも掃除機も使っておらず、暑くなかったので冷蔵庫がフル稼働したとも思えず、なんで電気を遮断されたのか全然わからない。

私は以前の記事にFDISKを探しておくと書いたし、またきっと停電があるだろうとも書いたが、暑い夏が終わったので実は気を抜いていた。そのうちにまた停電があるといってもそんなにすぐじゃないだろう、と。やることが沢山あったのでFDISK探しは後回しになっていた。そうしたら思いのほか早くまた停電。PC-9821の赤ランプはチカチカしっぱなし。

そこで今回は、ネット検索して気になっていた事の確認を終わらせることにした。

1。
私は電源を入れたらすぐにTABキーを押しっぱなしにしていたが、ネット上の話では
メモリカウントかデバイスチェックが終わるあたりでTABキーをと書いてある。そこでメモリカウントかデバイスチェックが終わるあたりでTABキーを押し始める。
(ところが次の2で、この案に待ったがかかる。)

2。
ディップスイッチ2-5で初期化してから起動したらTABキーで固定ディスク起動メニューが出るようになったという記述あり。この人はメモリカウントを待たずに最初からTABキーを押しっぱなしにしている。それでも起動したらしい。(1はどうでもいいのか?)

3。
Switchでブート装置を固定ディスクに設定していると起動メニューが表示されなかったという報告あり。いやしかし、私がswitchコマンドを使っていない間に外付けHDDから起動できなくなったのだから、設定が勝手に変わったということになるぞ。
ということは、次の4かもしれない。

4。
充電池が完全に放電すると不揮発性メモリのデータが不定となり, 場合によってはFDD, HDD起動ができなくなる。その場合はディップスイッチの設定を変更してメモリスイッチを初期化するように設定すればよい。(これで話は2に戻った。)電源を入れている間は不揮発性メモリのデータは保たれるので、充電池が機能していない環境でもメモリスイッチの設定変更は可能。

5。
ネット上には、自分で充電池を交換したという報告が複数あり。ただし固定ディスク起動メニューが出なくなったからそうしたという人はまだ見ない。みんな、時刻が合わなくなったからと書いている。

結局私が次にやることは何か。起動時にHELPキーを押しっぱなしにしてソフトウェアディップスイッチ設定画面を出す。(ここまでは以前のテストで出来ている。)2-5で初期化する。PCを再起動しTABキーを押したままにする。果たして、固定ディスク起動メニューは出るか。


実験した。
電源を入れる時にHELPキーを押しておくとソフトウェアディップスイッチの設定画面が出た。
2-5の設定は、すでに「初期化する」になっていた。そもそも今回の実験は2-5を「初期化する」に設定することで症状が改善するかどうかを試すもの。初めから「初期化する」だったということは、症状は改善しないではないか。
ここから先の現象を(馬鹿なことに)はっきり覚えていないのだが、ソフトウェアディップスイッチの設定画面を終了したらhow many files?が出たと思う。これは懐かしのN88-BASICだ。でも今回必要ないのでリセットボタンを押した。
メモリカウントが始まり、終わりそうな頃にTABキーを押し続けたらしばらくして固定ディスク起動メニューが出た。おお、直ったのかと喜んだ。
固定ディスク起動メニューでは、ちゃんと外付けハードディスクのWin98用パーティションにアスタリスクが付いていた。(ここの記憶は間違いない。)起動メニューを終了した。
なぜか内蔵ハードディスクのWin95が起動しはじめた。なんでや!
再起動。(この時点で、ディップスイッチの2-5を「保持する」に設定したと思う。)TABキーを押し続けるが、固定ディスク起動メニューはもう出てくれず、Win95が起動した。

なんにも直らなかった。

外付けハードディスクのWin98でブートする設定なのにそれができずに内蔵ハードディスクのWin95が起動する原因は、どこにあるか。相変わらず、メモリスイッチあたりの不揮発性メモリに原因がある可能性と、外付けハードディスクのブート領域に原因がある可能性がどちらも残っている。でも、上の実験を見る限りでは、不揮発性メモリ関係の動作は少なくともディスプレイで視認できる範囲では正常に見える。どちらかといえば外付けハードディスクのブート領域に原因がある可能性のほうが高い。いずれにせよ、外付けHDDのWin98が起動可能な状態かどうかを何とかして調べなければならない。それって、どうやって調べたらいいんだろう。それをまず調べなければならない。


追記
メモリスイッチの2-5だけを変更しようとしたのがどうにも気になって、再度ソフトウェアディップスイッチの設定画面を出し、今度はHOME CLRキーで全部出荷時設定に戻した。結果は、起動前のTABキーを受け付けず、外付けHDDのWin98は無視されて内蔵HDDのWin95が起動した。どうしても外付けHDDのブート領域を調べなければならない。

コメント(0) 

PC-9821のデュアルブートが無効になった(続) [  PC-98x1(補完計画)]

なんの因果かまた停電になったので、赤いチカチカランプを消すためにPC-9821に電源を入れることになり、ついでにデュアルブート不調も調べることになった。

今まで起動時にESCキーを押し続けるのとTABキーを押し続けるのを試したので、今回はSTOPキーとHLPキーを試した。STOPキーは変化なし。HLPキーはソフトウェアディップスイッチ等の設定が出たが、今回これは必要ない。

起動ディスクとして認識されなくなった外付けHDDは、電源が入ることを確認。Win95起動後にエクスプローラに外付けHDDのドライブおよびファイルが表示されることを確認。そこまでは機能している。

次に、FDISKを使って外付けHDDのパーティションの状態を確認しようとした。するとなんと、FDISKがない!Win95のドライブだけでなくWin98のドライブも探したが、ない。

それで仕方なく、今回の調査はここまでとなった。次回の停電までに、Windows10で使っているHDDのどこかからWin95ディスクをイメージ化したものを見つけ出し、そこからFDISKを探しておかなければならない。

「次回の停電までに」というのも変な話だが、こう度々停電になる(我が家のスマートなんとかという装置が電気を遮断する)のでは、急がなくてもまた停電になるだろうという気になってくる。

余談だが、いろいろ調べるうちに脱線して、PC-9821のディスプレイ出力をWindows10でキャプチャして動画として保存する方法も調べてしまった。xcapture-1nという結構高価なキャプチャボードが適任だ。ただしWindows10対応ドライバは解像度640x400をサポートしてくれないらしいので、PC-9821上でWin95/Win98を動かす時に限ってキャプチャ出来るという事になるかもしれない。その気になって、買う気になりかけた。「カセットテープ補完計画さえ滞っているのにPC-98をいじっている暇は無いだろう」と自分に言い聞かせ、今回は何とか思いとどまった。

コメント(0) 

個人的記録・PC-9821のデュアルブートが無効になった [  PC-98x1(補完計画)]

最近、うちのPC-9821の起動が以前と違う。

起動といっても21世紀のいま、PC-9821を日常的に使っているのではない。電気の最大アンペアを変えたせいか、ウチはたまに停電するようになった。停電のたびにPC-9821は停電お知らせランプが赤く点滅して、一度起動するまでは消えない。だから何の因果か最近はPC-9821を使いもせずに起動することがある。

ここでちょっと本題から逸れて、東京電力への文句をついでに書かせてほしい。

使用電流が契約値を超えた時、少し前までならブレーカーが落ちた。そして自分でそのブレーカーを上げた。ところが、最大アンペアを変えた時にブレーカーを勝手にスマートなんとかという装置に変えられてしまった。このスマートなんとかは、家のどこかで電流が許容量を超えると家全体が停電になる。それが腹立たしい。なぜなら、今までならば家を拡張したり電子レンジ用のコンセントを増設するたびにその区画専用の小さなブレーカーが取り付けられ、どこかで許容量を超えてもその区画だけが停電になった。だから台所で停電になっても私の部屋のパソコンの電源が突然切れることはなかった。しかし今は違う。今日も、銀行の通帳を繰り越して新通帳にズラズラと印字された収支をパソコンの家計簿ソフトに打ち込んでいたら、その途中で突然停電だ。打ち込みは最初からやり直しだ!最大アンペア契約を元に戻すことも考えねばならないが、今までのブレーカーならば私の部屋には影響がなかったはずなのだ。

そろそろ本題に戻るべきだろう。その停電の際にPC-9821が停電お知らせランプを赤く点滅させるので、それを消す目的で一度起動する。その時、青い画面に蜂(CanBeのマスコットキャラクター)が飛ぶようになった。たぶん、初期状態でそのように蜂が飛ぶのだろうが、私は長年初期状態でない状態で使っていたのでこんな蜂は記憶になかった。蜂が飛ぶだけならばどうでも良いが、デュアルブートのWin95/98のうちWin95が起動するようになってしまった。私が昔行なった設定ではWin98が起動するはずなのに。これを直そうと、起動時にESCキーを押し続けたりTABキーを押し続けたりしてみたが、無視されてWin95が起動する。

どうしたら私が行なった設定に戻せるのだろう。たぶん、面倒がらずに、大昔に外付けハードディスクを増設してパーティションを設定した時と同じことを順に試すべきなんだろう。そうすれば、外付けハードディスクの起動部分が壊れている可能性から始まって、パーティションの確認、と順に済ませてゆき、どこで問題が生じているかがわかるはずだ。ただ、私は数十年の間に、設定時に自分が何をしたかを完全に忘れている。

PC-9821は私にとって大事なのでこの続きはいつか必ず書くが、何もかも忘れているので調べるのに日にちがかかりそうだ。記事の続きはゆっくりと作らせてほしい。

コメント(0) 

Neko Project21/W [  PC-98x1(補完計画)]

記事を3つ書いたが、消してしまった。その理由は、私がクリーンインストールをしなかったせいで、デバイスドライバのインストールが不確実になり、複数回試したら成功したり失敗したりしたから。たまたま最初に成功して自信満々に記事を書いたが、後から失敗することもあるとわかり、記事が出せなくなった。きっとWindows95をクリーンインストールすれば問題は起きないに違いない。

現在、とにかくNeko Project21/WでWindows95は動いている。T98NEXT用に作ったNHD(Windows95入り)を流用したのでディスプレイドライバとCD-ROMドライバを手作業で入れた。その代償として、もしも問題が起きた時に、その問題がWindows95またはNeko Project21/Wに起因するものなのか、それとも私がドライバを手作業で入れた際に不備があったのかを、特定できなくなってしまった。

そして問題は、起きてしまった。私は4つのゲームソフトA、C、M、Oをインストールしようとした。Aは問題なくインストールできて、ゲームの初期画面まで確認した。CとOはInstallShieldが起動してファイルの展開を始めたが、やがてInstallShieldのウィンドウが消え、その後何のウィンドウも現れない。スタートメニューにもゲームが登録されず、それ以前の段階で問題が起きている。それ以後シャットダウンまでの間、Windows95の動作がおかしくなる。アイコンの選択やウィンドウを閉じるのが、ものすごく遅い。でもフリーズではなく、気長に待っていればそのうちにアイコンが選択されたりウィンドウが閉じたりする。それにたいしてInstallShieldのウィンドウが消えた後現れるはずのゲーム画面は、1時間待っても現れない。

残るゲームソフトMは、そもそもCD-ROMの中身が認識されずに「0個のオブジェクト」となる。Mのディスクイメージを直接Neko Project21/Wに読み込んでも、MのディスクイメージをまずDaemon Tools Liteでホスト(Windows10)の仮想DVDドライブにマウントし、それをNeko Project21/Wに読み込んでも、結果は同じ。ちなみに、MのディスクイメージをDaemon Tools Liteで仮想DVDドライブにマウントすると、Windows10からはCD-ROMの中身が見える。

考察。ゲームソフトAがインストールできるということは、どのアプリケーションソフトも動かないのではなく、動くソフトもある。では動かなかったCやOは、動いたAと何が違うか。CもOも、インストール用ウィンドウにInstallShieldとはっきり書いてある。そのファイル展開の途中か直後に問題が起きる。Aのソフトハウスはプログラマーが強者(つわもの)で、インストールソフトもゲーム用ドライバーも全部自前で作っていた。InstallShieldを使うことで問題が起きている可能性は高い。ただし前述のように私がWindows95をクリーンインストールしなかったから、他の可能性(私のせいという可能性)まで考慮しなければならなくなった。

ゲームソフトMについても、私がドライバを手作業で入れた際に不備があった可能性も考慮しなければならない。






コメント(0) 

元気がないので元気を出したい [  PC-98x1(補完計画)]

ジョジョにスイッチングウィンバックというのが出てきた。私にそんなすごい技は使えない。私はちょっと元気が出たと思ったら何かの出来事にまた潰される。それはわかっている。が、だからといって、解決策を何も講じずに酒に溺れるとか、首を吊るとかいうのは正しくない。たとえ潰れても、じたばたするのが生き物としてまともだ。そういえばアバンという勇者も漫画の中で「じたばたしましょう」と言っていた気がする。だからじたばたするけれども、私にとっての困った点は、現実世界の何らかの要素によって私がウィンバックの手段を奪われた状態だということだ。ウィンバックの手段は人それぞれに違う。はるか昔、若者の頃の私は、好きな女の子のために何かをするのが人生のすべてだった。そこに太陽があったから、苦しみは乗り越えられた。さて、この歳で同じことをするかと言えば、それはもうない。まずひとつめの私のウィンバック手段は年齢が私から奪い去った。ふたつめ。同じく若いころ、何をやってもうまく行かなかった私はパソコンに出会い、コンピュータープログラミングに出会った。私は初めて、何かをやって成功するという体験をした。それ以来、プログラミングだけは壁に突き当たっても乗り越えられた。時間はかかるが、いつか必ず壁は越えられた。さて、今の私に同じことが出来るかというと、腰痛でPCの前に長時間座ることを禁じられ、出来なくなった。プログラミングにはたくさんの時間が要るが、デバッグにはさらにたくさんの時間が要る。PCの前に何十時間座るかわからない。私の腰は、もうそれに耐えられない。ふたつめの私のウィンバック手段は健康状態が私から奪い去った。私はさらに続けて、私が今でも出来るウィンバック手段を探し続けた。おそらく腰痛から来ると思われる歩行困難で、旅行やウォーキングをウィンバック手段には出来ない。DAWが機を逸したのは少し前の記事に書いた通り。たまたま、あるものを見つけた。Neko Projectをご自分で改造してWindows95を動かした方がいらっしゃる。私は以前にT98NEXTでWindows95を動かそうとしたが、画面解像度がうまく行かなかった。VirtualBoxだったか、他の何かも試したが、問題があった。何年も前のことだから詳細は忘れてしまった。最終的に私がしたかったのは、自分が持っているMYSTというゲームとOBSIDIANというゲームを動かすことだ。でも、Windows95が何とか動いても、その上でゲームソフトが完動するのは難しかった。とくに音関係が。私は以前に複数回チャレンジして完動しなかったから、今回はもう期待していない。そもそも私自身に元気とやる気がなくなってしまった。それでも、ちょっと試してみようと思う。それで1日でも元気が出れば、良い1日が得られたと言えるだろう。

そういうわけで、Neko Project 21/Wを使わせていただいてWindows95を動かし、無理を承知でMYSTとOBSIDIANを動かしてみる。失敗しちゃったら記事にもならないかもしれない。途中まででも何かの成果が出たら、記事にするかもしれない。人生の中で何かの出来事にまた潰されたら、ブログが沈黙するかもしれない。未来は霧の中。今回は、ここまで。







コメント(0) 

最後のブラウン管テレビ [  PC-98x1(補完計画)]

最後のブラウン管テレビ
(=パナソニック製品と格闘中(9))

前回の記事の後、私は仕事で使う動画をチェックしようと、新しく買ったテレビに映した。すると、動きが大きい部分だけ被写体がボヤーっと見える気がした。それを見た私の脳裏にまた後悔が蘇った。

その後悔とは、新しく買うテレビやディスプレイが、買うたびに満足度が上がるのでなく、買うたびに満足度が下がるという後悔だ。発端は昔、古い4:3ブラウン管テレビをイヤホンジャックが壊れたというだけで新しい16:9平面ブラウン管テレビに買い替えた時に後悔は始まった。その買い替えたテレビが初期状態では陰影が薄く人の顔が平面的に映るテレビだった。でも私は苦労して裏のつまみを調整し、ギリギリ「暗すぎて黒く潰れることなく、明るすぎて白飛びすることもない、人の髪の毛が一本一本認識できる状態」にすることができた。だからこのテレビは調整の結果、満足できる絵になった。唯一の不満は「物が発光する時に光っているというより白いという映り方をする」ことだが、他は満足し、私は末永くこのブラウン管テレビを使うつもりだった。ところが新しく買ったBDレコーダーにはアナログ出力がなく、せっかく満足していたブラウン管テレビを手放さなければならなくなった。新しく買った液晶テレビは、ダイナミックというプリセット画質だと明るすぎるほどで、陰影は薄く、私に平面ブラウン管テレビの初期状態の映り方を思い出させた。でもきっと、コントラストの調整で私の好みに調整できるだろう。これでうまく行ったと思ったが、最後にテストした画面下のテロップが右から左へ動くシーンで文字がボヤーっとして読みにくい。人間の目はそんなものかなと思いつつ試しにブラウン管テレビに映してみたら、なんだ見えるじゃん。そして、どこも壊れておらずそれどころか映り方に満足しているブラウン管テレビを捨てなければならない自分が辛くなった。

どうやら私の頭は疲れてきたようだ。もはや、複数の画面を比較して冷静に違いを認識しようという精神状態ではなくなった。テレビ画面を見るたびに動く物がボヤーっと見え、それを普通だと脳が誤認する事への嫌悪。このままブラウン管テレビを捨てる事への嫌悪。でも自分の部屋を見回すに、この大きなブラウン管テレビ(ブラウン管というのは液晶と違って奥行きがあるので大きい)を置いておく場所はない。今は、夜布団を敷く時にはそのスペースを確保するために、重いブラウン管テレビを載せたテーブルを押し遣る。そして翌朝布団を上げ、雨戸を開ける時にはそのままではテレビが邪魔で雨戸に近づけないので、またテーブルを引っ張って元の場所へ戻す。これを毎日繰り返している。もう少しわかりやすく書くと、自室の真ん中にブラウン管テレビを載せたテーブルが居座っている。このままでいいわけがない。でもブラウン管と永遠に別れて、動く物が永遠にボヤーっと見えるのは嫌だ。このテレビを捨ててしまったら、もうブラウン管はない・・・

いや、違う。ブラウン管はまだある。PC-9821のモニター。幸いにも私にとって大事なのは今どきの動画ではない。大昔のVHSビデオテープ時代のテレビ番組こそ私は大事で、それはPCのハードディスクに入っている。それがPC-9821で鑑賞できれば、ブラウン管テレビで鑑賞できることになる。

私が現在PCで使っている動画プレーヤーはGOM Playerだ。このプレーヤーについてはネット上で批判も見るが、ひとまず便利だという所までは事実だ。でも私のPC-9821に入っているOSはWindows98。古すぎてGOM Playerがサポートしていないのではないか。私はネット検索した。Windows98 Second Editionからサポートしているという。果たして私のPCに入っているのはSecond Editionだろうか。いや、そもそもそれでは駄目だ。たとえSecond Editionでも、当時のPCのスペックでは滑らかな動画再生はできない。それなら、ディスプレイだけ使えばいい。動画再生は現在使っているWindows10マシンで行い、その画面出力をPC-9821のディスプレイにつなぐ。これなら、PC-9821マシンのスペックに関係なく、Windows10マシンで再生できる動画は表示できる。以前に「PCの画面出力を今どきの液晶テレビにつなぐことはできるか」と調べた時に、Windows10マシンにアナログ出力端子がひとつあるのを確認していた。

私はPC-9821を出してきた。

pc98disp1.jpg
うーん、PCのディスプレイだからテレビと比べるとずいぶん小さい。でも上に書いた通り、今の私は複数の画面を比較して冷静に違いを認識しようという精神状態ではない。捨てたくないブラウン管を捨てなければならない。その理不尽さに、なんとか自分が納得できる理由を探している。

pc98disp2.jpg
私はPC-9821マシンから画面出力のコードを抜いた。このコードを抜いた事は、今までの人生でなかったと思う。これを買って、最初にコードをつないで、今に至っていたはずだ。こんな端子だった。

この端子が、Windows10マシンのアナログ出力端子と同じだと良いが。いや、たとえ端子が同じで接続できても、Window95時代(上にWindows98と書いたが、マシンにプリインストールされていたのはWindows95)のディスプレイが映るだろうか。今どきのディスプレイとは解像度がすごく違うと思うが。

pc98disp3.jpg
端子は接続できた。次は、映るかどうかだ。Windows10のデスクトップ画面を右クリックしてディスプレイ設定を選択。

pc98disp4.jpg
ディスプレイ「1」の隣にディスプレイ「2」があった。認識されている。

pc98disp5.jpg
表示するディスプレイを変更。おお、うまく行きそうだ。

この時点で私が興奮したからなのか、Windows10でGOM Playerを使って動画を再生した画面はデジカメ撮影がピンボケになってしまったのでUPできない。ひとつ上の画像でWindows10の画面設定が表示されているのだから、当然動画も表示されるというのはわかってもらえるはずだ。

実用的かどうかは別として、私は自分が所持する最後のブラウン管を使って動画を視聴できることがわかった。人生というのは100%成功する事がまずないものだ。その中で、これだけの成果を出せたのは、最高の出来といえる。

実は私はここ数カ月、PC-9821実機の処分を悩んでいた。今の家に永遠にいられるのなら、そんな悩みは不要なのだが。PC-98関係ではすでに優秀なエミュレータが複数あるからソフトはWindows10上で起動できる。キャノワードミニのフロッピーからデータを読み出すという使命も無事に終えた。これで、PC-9821で出来ることはすべて終わったのかもしれないと私は思っていた。ところが、ものすごい使命がPC-9821に与えられた。私にとって最後のブラウン管であるこのディスプレイに、必要とあらばいつでも動画を映し出すという使命が。

孤独へ向って突っ走れ (50) [  PC-98x1(補完計画)]

「テニス・テニス2」をT98NEXTでプレイしている方へ

はじめに
私が実験に使ったT98NEXTは "V1.00 build May 25 2010(17:39:40)" というものです。Windows上で普通にPC-9801用ソフトを動かすT98NEXTのバージョンとしては、この記事を書いている時点では最新のはずです。でも将来的にバージョンアップの結果、この記事の内容が当てはまらなくなることはありえます。




前回の記事で私は、「ゲーム内で2けたの半角数字を表示すると10の位の値のかわりに1の位の値が表示されるという問題は、エミュレータを変えなければ解決せず、エミュレータを変えれば解決する」と書きました。それが通常の結論だと思います。今日は、通常でない、あまり良くない方法を見つけたのでそれを報告します。

以下に記す方法を使うと、T98NEXTで「テニス・テニス2」をプレイしても文字化けがありません。ただし、大きな問題があります。一度この方法で「テニス・テニス2」のゲームを書き換えてしまうと、他のエミュレータや実機でそのデータを使った時に文字が変になります。
(もともとゲームソフトのほうに問題がなく、T98NEXTのほうに小さな問題があるのを、ゲームソフトのほうを改変することで修正するので、そういう良くないことになるのです。)

その他にも、そもそも他人が作ったソフトを勝手に改変するというのは、たとえそのソフトがすでに売られていない昔の物でも本当は良くありません。

そのへんをよく考えて、自己責任でご判断ください。




では始めます。
次のものを用意します。

「テニス・テニス2」のディスクイメージ。T98NEXTを使っているのが大前提なので、当然ありますね。おそらくはnfd。

そのディスクイメージからファイルを取り出してWindows上のフォルダにコピーできるソフト(Windows上で動くもの)。フリーソフトで存在します。私はDiskExplorerを使っています。DiskExplorerで直接nfdファイルは読み込めませんが、これは問題ありません。私は次のようにしています。T98NEXTに起動可能なハードディスクイメージをセットし、それを起ち上げ、その後でゲームのディスクを入れて、そこから必要なファイルをハードディスクへコピーし、T98NEXTを終了し、DiskExplorerを起動してハードディスクイメージを読み込んでファイルをWindows上へコピーします。

バイナリエディタ(Windows上で動くもの)。フリーソフトで存在します。私はたまたまBZというソフトを見つけて愛用していますが、バイナリエディタはきっとたくさん存在すると思います。大事なのはビューアではなくエディタだということです。見るだけでなく書き込みが必要です。

当たり前すぎて書くのを忘れていましたが、T98NEXTの起動に使っているWindowsマシン。当たり前ですね。

用意するものは、以上です。用意したものを使いこなす知識は必要ですが、プログラミングやデータ解析の知識は必要ありません。

作業を開始します。

ゲームのディスクイメージからT.EXEをWindows上のフォルダ内にコピーします。

後で元に戻せるように、書き換えるファイルとは別にT.EXEのバックアップを作成しておきます。

バイナリエディタにT.EXEを読み込み、ファイル先頭からオフセット196D0Hの場所を表示します。
tt78.png

ここでデータを確認します。196D0Hの場所(上の画像では左端の赤アンダーライン)が"17"になっていますか?そして1バイト前の場所(上の画像では右端の赤アンダーライン)が"74"になっていますか?もしもそうでなければ、この先へは絶対に進んではいけません。

バイナリエディタでオフセット196D0Hの値(上の画像では左端の赤アンダーライン)を"6F"に変更します。ここは慎重に、絶対に間違えないように。

バイナリエディタでT.EXEを上書き保存します。

この、Windows上にある改変したT.EXEをディスクイメージ内のT.EXEに上書きします。方法はわかりますね。先ほどディスクイメージ内のT.EXEをWindows上にコピーしたのと逆の手順です。

そのディスクイメージをT98NEXTにセットし、ゲームを開始してみてください。今までT98NEXTで "00月00日" と表示されていた所が "10月10日" になっています。バンザーイ!
tt79.png

でもこのディスクイメージはデータが改変されたので、T98NEXT以外(他のエミュや実機)では使えません。




++++ ++++ ++++ ++++ ++++
以下は、上に書いた記事が出来るまでの解析の記録です。どうして「T98NEXTのほうに小さな問題がある」なんてことが書けるのか、証拠があるのか、という時にだけ必要なものです。「テニス・テニス2」のゲームプレーヤーの方はお読みにならなくて良いです。
++++ ++++ ++++ ++++ ++++





追っかけ8-2
どうしてT98NEXTではキャラクタジェネレータからユーザー定義文字のフォントを読み出す命令を実行すると文字化けするのか。どのような文字化けかを思い返すに、2桁の半角文字を表すフォントが、10の位も1の位の値になった。これは、フォントの左半分も右半分のデータになったということだ。それにつけて思い出すことがある。PC-9801のキャラクタジェネレータでは、CGウィンドウを使ってフォントを読み出す時、2バイト文字のうち第1バイトが76H以上の文字のフォントはCGウィンドウの奇数アドレスからしか読み出せない。つまり全角文字の右半分と左半分を別々に読み出さなければならない。そしてユーザー定義文字の文字コードは第1バイトが76H以上だ。だから、テニス・テニス2のプログラムでは文字の右半分と左半分を別々に指定し、どちらもCGウィンドウの奇数アドレスから読み出している。上記のことを踏まえて考えると、T98NEXTがフォントの左半分も右半分のデータにしてしまうような、もっともありがちなミスとは何だろう。それは、2バイト文字のうち第1バイトが76H以上の文字のフォントはCGウィンドウの奇数アドレスからしか読み出せないというキャラクタジェネレータ(CGウィンドウ)の制約を考慮せずに、フォントの左半分が指定されても右半分が指定されてもCGウィンドウの偶数および奇数アドレスにフォントの全体を反映させてしまった場合ではないだろうか。私はそういう仮説を立てた。

この仮説が正しいかどうかは実験の結果で確認する。では、どういう実験をしようか。

T98NEXTの中身はブラックボックスであり、いじれない。T98NEXT上で実行するほうのプログラムを変更して実験するしかない。テニス・テニス2のプログラムのCS:9B71以降に、CGウィンドウから文字フォントを読み出すルーチンがある。その中に、文字コードの第1バイトが76Hならばフォントを左右半分ずつ読み出すルーチンへと行く条件分岐がある:
2C70:9B8C 80FC76 CMP AH,76
2C70:9B8F 7417 JZ 9BA8
いっぽう、第1バイトが76Hを含む特定の値でないならば、フォントを一度に全部読み出すルーチンへ行く:
2C70:9BA5 EB59 JMP Short 9C00
そこで、上記のJZ 9BA8をJZ 9C00に変えれば、プログラムはユーザー定義文字のフォントをCGウィンドウから読み出そうとする時に左右とも奇数アドレスから読まずに偶数と奇数のアドレスから読む。もしもその結果ゲームの2桁の半角数字が正しく表示されれば、上述の私の仮説は正しいことになる。

ジャンプ命令はアドレスを絶対アドレスではなく相対アドレスで指定するので、注意しなければならない。次のように考えた:

(このブロックに書かれている数値はすべて16進数)
jz 9ba8をjz 9c00に変えたい
jzは飛び先を1バイトの相対アドレスで指定する(short jump)
命令jz 9ba8の次のアドレスはcs:9b91
9ba8-9b91=17
このやり方で合っているかどうか確かめる
jz 9ba8のコードは7417
この計算でok
このjzの飛び先を9c00に変える
9c00-9b91=6f
従って、jz 9ba8をjz 9c00に変えるには
cs:9b90の値を17から6fに変更する

ここまでわかれば、後はT.EXEをバイナリエディタに読み込み、ロードモジュール内のCS:9B90に相当する1バイトを書き換えるだけだ。ではその1バイトはT.EXE全体の中のどこか。EXEファイルの構造を調べ直した。

MS-DOS時代のEXEファイルは、ヘッダとそれに後続するロードモジュールから成る。ヘッダ内のオフセット08Hからの2バイトにヘッダのサイズが入っている。これは同時にヘッダの直後から始まるロードモジュールの開始点でもある。ただし単位はバイトではなく16バイトのパラグラフ単位で入っているので、バイトに直すために10H倍してから計算する。ヘッダ内のオフセット16Hからの2バイトに、コードセグメントにロードする情報の先頭位置が、ロードモジュール内のオフセットとして入っている。ただしこれも、16バイトのパラグラフ単位で入っている。

T.EXEの場合、ファイル先頭からのオフセット08Hから2バイトの値は00C0H。これを10H倍してC00H。ファイル先頭からのオフセット16Hから2バイトの値は0EF4H。これを10倍してEF40H。C00HにEF40Hを足してFB40H。書き換えるのはCS:9B90だから、さらに9B90Hを足して196D0H。

実験開始。ゲームのディスクイメージからT.EXEをWindows上のフォルダ内にコピーする。後で元に戻せるように、書き換えるファイルとは別にT.EXEのバックアップを作成。バイナリエディタにT.EXEを読み込み、ファイル先頭からオフセット196D0Hの場所を表示する。その1バイト前からの値は74H,17H。上記JZ 9BA8のコードと一致する。間違いなし。
tt78.png
バイナリエディタでオフセット196D0Hの値を6FHに変更。上書き保存。このT.EXEをディスクイメージ内のT.EXEに上書きする。そのディスクイメージをT98NEXTにセットし、ゲームを開始する。2桁の半角数字は、T98NEXTでも正しく表示された(下図)。私の仮説は正しかった。

ただし、本当はこれは行うべきデータ改変ではない。なぜならゲームのプログラムは間違っていないからだ。それを改変する(あえて間違ったコードにする)のはプログラムの作者に失礼だし、ゲームがT98NEXT専用になってしまう。他のエミュレータや実機では表示が変になるはずだ。

とはいえ、ここまで出来れば私の大昔の劣等感は払拭された。若いころの私にはゲームのプロテクト外しもパラメータ変更もできなかった。でも今は、時間と努力を費やせばできる。私には認識力も知識も不足しているが、時間をかけて自分の間違いを見つけ出し、何度でも技術情報を調べれば、PC-98関係は何だってできる。もうPC-9801用ゲームを実際に解析することはないだろう。でもやろうと思えばできるという自信がついた。それで十分だ。

tt79.png
tt80.png
コメント(0) 

孤独へ向って突っ走れ (49) [  PC-98x1(補完計画)]

この記事は一度公開してから間違いに気づき、非公開とし、1日かけて間違いを直して公開したら、また間違っていた。だから記事が出て、消えて、また出て、しばらくしたら中身が書き換わったというとんでもない記事だ。やる気はまだまだあるんだが、脳ミソが疲れてバカになっているらしい。ちょうど「テニス・テニス2」の解析が終わったので、私はしばらくの間別の作業をして脳ミソをリフレッシュしたほうがいいのかもしれない。

この記事には、自分用の記録をそのまま出すことになった。その関係で、環境依存文字が使われている。ご勘弁いただきたい。



追っかけ8-1
「テニス・テニス2」の全PICファイルにパレットを適用してGIFファイルとして書き出す作業を終えた私は、「テニス・テニス2」と別れる前にもうひとつだけやっておきたいことがあった。
ゲーム内で2けたの半角数字を表示すると、10の位の値のかわりに1の位の値が表示されてしまう。たとえば下の画面の左上の場合、
tt66.png
この55日とは、実際には15日か25日のどちらかだ。ここだけでなく、ゲーム内で2けたの半角数字を表示する時はすべて同様の現象が起きる。この現象を直せないだろうか。

私はまず、画面に文字を表示するルーチンを見た。データセグメントにはゲームで使われる文字列がShiftJIS文字コードで格納されている。それを画面に表示するルーチンとして、追っかけ2-3aで、ShiftJIS文字コードをJIS文字コードに変換するルーチンと、キャラクタジェネレータからCGウィンドウ経由で文字フォントを取得するルーチンが解析済みだ。私は、この辺りに問題があるに違いないと考えた。追っかけ2-3aの文字フォント取得ルーチン(サブルーチン9B6EHの一部)が、2バイト文字にしか対応していないことを発見した。ここに問題があるのかもしれない。

次に私は、読み込む文字列のほうはどうなっているかと調べた。いったい2けたの半角数字部分はどういうデータになっているのか。普通の1バイトのASCII文字コードが2つ続いているのか、そうではないのか。Windowsの「メモ帳」にT.EXEを読み込んで中を見ると、ゲーム内のカレンダーをあらわす文字列がある。それをPrintScreenしたものが、下の画像だ。4月1日の大会開始セレモニーから10月10日の決勝戦までが見える。この部分の文字列では、1日をあらわすデータの最初に月(2バイトの全角数字)、続いて日(2バイトの全角数字)、続いて曜日(2バイトの全角文字)があることがわかる。ただし日は、1けたの数字ならば良いが、2けたの数字だと'・'になっている(緑下線と赤下線は、後の図と対応している):
tt67.png
tt68.png
この結果を出すには注意しなければならなかった。私ははじめ、T.EXEを直接バイナリエディタで開くと2バイト文字が表示されずこの部分を見つけるのが大変なので、「メモ帳」に読み込んでこの部分以外を削除し保存してからバイナリエディタで開いた。すると、上の'・'はどれも81H,45H、つまり中点の'・'の文字コードだった。私はこれのせいで遠回りをしてしまったが、どうやら「メモ帳」で保存するさいにコードが変わってしまったらしい。T.EXEをバイナリエディタで直接開いて同じ部分を見つけると、上の図のとおりに場所により'・'の文字コードは異なっていた。試行錯誤の途中で調査した他の場所の結果も出そう:
tt69.png
tt70.png
tt71.png

tt72.png
tt73.png

大会開始セレモニーのアナウンスの中に"10月10日"があり、これがゲームの表示では"00月00日"になる。そこはどうか。T.EXEをバイナリエディタに読み込み、他になさそうな文字として直前の'集'を検索することでたどり着いた:
tt74.png

これらの調査からわかるのは、
"10"がEBH,A8H
"11"がEBH,A9H
"12"がEBH,AAH
"13"がEBH,ABH
"14"がEBH,ACH
"15"がEBH,ADH
"28"がEBH,BAH
"29"がEBH,BBH
規則性があることはわかった。私が思いつく範囲で可能性を列挙し考えた。
①ShiftJIS文字コード表のこの場所に2けたの数字が登録されている可能性→そんなものは登録されていなかった。
②ShiftJIS文字コードをJIS文字コードに変換した時のこの場所に2けたの数字が登録されている可能性→JIS文字コード表にも、(○つき数字を除いて)2けたの数字というものはなかった。
③PC-9801のキャラクタジェネレータが、上記のコードに対応して2けたの数字フォントを出力する仕様になっている可能性→昔のワープロソフトがJIS文字コード表で空いている場所に独自のフォントを設定していたことから類推するに、その可能性はある。
④このソフトがユーザー定義文字として、この文字コードに2けた数字のフォントを登録した可能性→PC-9801のユーザー定義文字の文字コードは76H,20H以降。(テクニカルデータブックでは7620Hと書かれているが、これだとリトルエンディアンである8086系プロセッサでは20H,76Hの順と思われてしまう。でも実際には第1バイト76H,第2バイト20Hだから、私は7620Hというまぎらわしい記述をしたくない。)この76H,20HはJIS文字コードであり、これをShiftJIS文字コードに変換するとEBH,9EH。この可能性が正解らしい。
⑤このゲームの文字列表示ルーチンがEBHを見つけると、2バイト文字表示とは別処理に分岐して2けたの数字を表示する→上の④が正解とわかるまでは、この⑤も本気で考え、今までの解析結果を見直した。もちろん、文字列表示ルーチンを調べてもそのような分岐は見当たらなかった。

こうして、④、つまりユーザー定義文字の表示に問題があることがわかった。ではその問題点は、ゲームソフトの側にあるのか、それともエミュレータの側にあるのか。実はこの記述にたどり着くまでに色々と回り道をして調査したので、結論はもう出ている。

私は今まで、フロッピーディスクから作ったディスクイメージをT98NEXTで運用しゲームを起ち上げていた。これをNeko Project IIに変更してみた。すると2けたの数字が正しく表示されるではないか:
tt75.png
tt76.png
とはいえ、Neko Project II独自の問題点も見つかった。ストーリーモードの冒頭にあるスクロールが表示されない。
tt77.png

これではっきりしたことがある。2けたの数がおかしく表示されるのは、ゲームソフトの問題点ではなかった。エミュレータT98NEXTの問題だ。

このゲーム「テニス・テニス2」にかんしては、T98NEXTはユーザー定義文字の表示がうまく行かず、Neko Project IIはスクロールがうまく行かない。私は2つのエミュレータの動作の違いを見て、エミュレータはとても良く出来ているが実機とまったく同じではなくそれぞれに個性があるという現実を改めて思い出した。

これで、ゲーム内で2けたの半角数字を表示すると10の位の値のかわりに1の位の値が表示されるという問題は、エミュレータを変えなければ解決せず、エミュレータを変えれば解決するという(あまり喜ばしくない)結論に至った。ここから先は余談だが、私はNeko Project IIでスクロールが表示されない件がどうにかならないかと考えた。私が使っているNeko Project IIはver. 0.83で、以前に私がエミュレータについて色々調べた時にはこれが最新バージョンだった。しかし今ネット検索したら、現在の最新バージョンはver. 0.86と書いてある。ver. 0.86で試してみたが、結果は同じだった。実機から作ったBIOS.ROMをNeko Project IIの実行可能ファイルと同じ場所に置くと使用されるそうなので試してみた。メニューの[Other]-[About]でbios.romを確認。しかし結果は同じだった。これで、Neko Project IIでは「テニス・テニス2」のスクロールは表示できないという(これも喜ばしくない)結論に至った。

コメント(1) 

孤独へ向って突っ走れ (48) [  PC-98x1(補完計画)]

「テニス・テニス2」の全PICファイルにパレットを適用してGIFファイルとして書き出す作業は、きょう最大の難関を突破した。

テキストで書くよりも見てもらったほうが私以外の人にはわかりやすいので、例の小さなアイコンの形で見てほしい。(以前の記事を見てない方のために説明すると、パレットを適用して正しい色合いになった絵を全部出す時は、自分で努力してゲームを制覇したい人の意欲を削がないように、とても小さく縮小して出すことにしている。)
tt64.jpg
tt65.jpg

赤い絵が2つだけある。赤い絵は、まだそれ用のパレットファイルが指定されていない絵だ。そのうちのひとつTITLE3は、調べたところPICファイルはフロッピーにあるが、ゲーム内でそれが使われていない。だからそれのためのパレットは存在しない。「使われないファイルがフロッピー内にあるなんて、本当かなぁ」と思う方は、「テニス・テニス2」をお持ちの方ならば、次の方法で確認できる。このゲームのEXEファイルには、読み込むファイルごとに「ファイル読み込み用データ」が入っている。そのデータの中にファイルのパスも記されている。そこで、Aディスクの中にあるT.EXEをWindows上にコピーし、それをWindowsの「メモ帳」で開く。メニューの「編集」をクリックし、「検索」をクリックする。"TITLE3"を検索する。すると、EXEファイル内に"TITLE3"はひとつもない。他のPICファイルの名前を検索すると、それは出てくる。そういうわけで、TITLE3は赤い絵のままでいい。

残るはただひとつ。CCC.PICという絵だ。この絵は、スケジュール画面にキャラクターが表示されない時のための「透明データ」で、全面がパレット番号0で埋め尽くされている。だから適当にそのへんのパレットを適用しても結果は同じなのだが、そういういい加減なことはしたくないので、私は実際にCCC.PICに適用されるパレットを調べるつもりだ。これが、最後に残った作業だ。ここまで来たらチェックメイトと宣言しても良いかもしれない。

これで今日のご報告は終わりだ。この作業も残りわずかなので、記念に今日の解析記録を出しておきたい。でも、このゲームや解析に興味のない方にとってはただのチンプンカンプンな言葉の羅列だから、お読みになる必要はない。私が勝手に出したいと思っているだけなので。





追っかけ7-4
残っている解析は:
CCC.PIC
A07.PIC, B02.PIC, C12.PIC, T02.PIC

CCC.PICはキャラクターがいない時のための透明データなので全面パレット番号0で、適用するパレットはどれでも同じようなものだが、ここまで来たらしっかり解析したい。

A07.PIC, B02.PICは初日の大会セレモニーで表示され、その時のキャラクター絵がC12.PICであり、パットが話しかけてくるのがT02.PICなので、これらは初日のパレットがわかれば一気に全部解決するだろう。

初日のパレットを知るには、初日の分岐条件を知ることだ。初日はスケジュールが決まっていてゲームプレーヤーが変更できないから、データセグメントの初期状態で値が入っている可能性が高い。
分岐条件はDS:77B6から2バイトに入っている値をベースアドレスとして、それにDS:12DCから2バイトに入っている値を4倍してオフセットとして加算する。そのアドレスに入っている1バイトが分岐条件だ。
word ptr DS:[77B6]はA71CH。今回は初日を調べたいので、ゲーム内の日付をあらわすword ptr DS:[12DC]は0とする。byte ptr DS:[A71C]はFDH。
ちなみに、それ以後の4バイトごとの値はたいていFFH。ごくたまにFEHがある。FFHが"日程がありませんので今日は休みにします"だということは調査済み。つまりこれはゲームプレーヤーが選手のスケジュールを決める前の状態だ。FEHが初めて出るのは、初日を0として27、つまり28番目の日。ゲームを起動してカレンダーを28番目の日までスクロールすると、「藤井絵麻☆ 夏木 の試合」。つまりFEHは自分が試合の日だ。
FDHが分岐条件の時にサブルーチンBF96H(スケジュール画面右半分のキャラクター絵を読み込み、描画するサブルーチン)が読み込むファイルを調べてみよう。それが大会セレモニーの時の絵C12.PICならばすべて順調ということになる。追っかけ5-1cのサブルーチンBF96Hを見る。解析の
①ALがFDHならば、AXを10Hに変更。
が当てはまる。この条件分岐の先は
⑭ここに来るのは上記条件分岐のうち①②③④⑩⑪⑫⑬。これらの場合、ALはまだ最終的なものでない。DS:47CCからデータ配列がある。ALはその添え字として使い、そこから1バイトを読み出す。これをAXの値とする。
データ配列の内容は、追っかけ7-1にある。byte ptr DS:[47CC+10]は0BH。その先の処理は
⑮AXに1FHを掛け、それに31C2Hを足す。これが最終的なSI。
SI=3317H。DS:3317が「ファイル読み込み用データ」の先頭アドレス。調べてみると読み込むファイルはb:\tennis\pic4\c12.pic。すべて順調。
ここまで理解が深まればひとまず十分だろう。パレットファイル読み込み用サブルーチンBD57Hで、分岐条件がFDHの時にどのパレットを読み込むか調べよう。追っかけ5-1cのサブルーチンBD57Hを見る。解析の
①ALがFDHならば、AXは11Hに変更。
が当てはまる。この条件分岐の先はもう単純で
読み込むファイルのデータはAXを18H倍してそれに2049Hを足したアドレスにある。
パレットファイルはa:\pal\pa18.pal。

コメント(0) 

孤独へ向って突っ走れ (47) [  PC-98x1(補完計画)]

最近の記事で、本命と思われる巨大なサブルーチンに突き当たったと書いた。今日はそれの全体像がわかっただけでなく、私の固い頭を柔らかくしてくれる発想が出てきた。

解析を続けてさらにわかったことがある。現在解析中のものはサブルーチンではなかった。サブルーチンならばcallで呼び出され、retで呼び出し元に処理が戻るはずだ。ところがこのルーチンの先頭アドレスへ処理が移る時は、jmpで飛んでくる。サブルーチンとは呼べないからメインルーチンの一部というべきなのだろうが、アドレス的にはまるでサブルーチンのように、プログラム開始点から続くメインルーチンのアドレスとは離れている。これは特殊な事例だと思う。普通はこういうものをサブルーチンで実現する。一般には、サブルーチンへ処理を移したらいずれ呼び出し元に戻らなければならない。しかしこれはPC-98ゲームだ。当時のゲームは終了後にDOSに戻らないものが多かった。だからゲーム終了時には適当な場所で無限ループを作ってそこまでとできる。呼び出し元に戻る必要がない。戻る必要がないのだからcallする(IPの値をスタックに退避する)必要もない。retもない。私は今まで、コード内のretを目安にサブルーチンの始まりと終わりを探してきた。サブルーチン内に複数のretがある場合もあるが、それでもとにかくサブルーチンの終わりにはretがあり、始まりのひとつ前の命令は別のサブルーチンのretかiretだろう。しかし今回のルーチンはサブルーチンではないので終わりにretがなく、私はその後のアドレスに続く別のサブルーチンをこのルーチンの一部と思いretを探し続けた。さらに運が悪いことに、ルーチンの始まりのほうも同様の事情だった。つまり、アドレス的にひとつ前のルーチンが、これもまた同様にサブルーチンではなく終わりにretがなかったから、私はアドレスを遡ってルーチンの始まりを調べるさいも別のルーチンをこのルーチンの一部と思いさらに遡って調べた。その結果、このルーチンはたしかに巨大だが、それ以上に巨大に見えてしまった。私が誤りに気づくことができたのは、このルーチンのひとつ前のルーチンが「ゲームオーバー表示と無限ループ」だったからだ。無限ループまで来たらそのルーチンの処理は終わっているはず。でもretがない。よくよく考えてみたら処理を呼び出し元に戻さないのだからretはいらない。それで、これがサブルーチンではないと気づいた。
コメント(0) 

孤独へ向って突っ走れ (46) [  PC-98x1(補完計画)]

きのう、何の因果かマタンゴを思い出した。きのこのおばけが出てくるシーンは恐いが、それ以外の部分がやたらと長かったと記憶している。で、マタンゴを思い出した私は、今日になって「マ単語」を思い出した。たしかそんな言葉だったと思う。日高総帥のどれかの著書に出てきた。マだからマシン語の著書のうちのどれかだ。ネット検索してみたけど、だれも「マ単語」については書いていなかった。

マシン語は面白い。サッカーが面白いという人は多いし、野球が面白いという人も多い。ところがマシン語を面白いと言うと、たぶん99パーセントの人の反応は私の期待とは違う。「へえ、すごいですね。」すごい?たしかに世の中にはすごいマシン語使いがいらっしゃる。でも私は初心者だ。たいしたことはできない。でも面白いんだ。ところが、サッカーが面白いと言って人は理解してくれるが、マシン語が面白いと言ってもなかなか理解してくれない。たとえ「すごい」という言葉は返ってきても、「そうですね面白いですね」という言葉はまず返ってこない。サッカー好きの人が話の合う友達を作るのは比較的簡単だが、マシン語好きの人が話の合う友達を見つけるのは難しい。私はある意味不幸を感じる。

さて、例の巨大なルーチン。いずれはコードを遡ったり先へ辿ったりしてサブルーチンの全容を明らかにしなければならないが、手を広げすぎると自滅する恐れがあるから、私はすでに逆アセンブル済みの部分、Word文書にして30ページ分をとにかく解析することにした。今日は有難いことに、その30ページ分が大体わかった。データセグメントの特定の場所の意味が、少しずつわかり始めている。word ptr DS:[134C]の値を100倍すると所持金(円)になる。word ptr DS:[12DC]はゲーム内の日付を意味する。

でも、誤解しないでほしい。こうやってブラックボックスだったものの一部が自分の努力によって明らかになるのは私にとってたしかに楽しいが、でもこれは私の目的ではない。私の目的は全部のPICファイル(PC-9801用に作られたビットマップデータ)に対応するパレットファイルを知ることだ。所持金もゲーム内の日付も、そこに近づくための一歩にすぎない。このゲームでは特定のイベントに関係するパレットファイルはそれを読み込むためのデータのアドレスが即値で指定されているから簡単に解析できて、もうイベント関係のパレットはわかっている。問題は、イベントでも何でもない部分だ。それと、イベントでもたったひとつ、データのアドレスが即値で指定されないものがある。これらは、このプログラムの仕組みを根気強く解析しないと正しいパレットがわからない。

このへんで話を変えよう。この記事を読んでくださる方がどのような方かはわからないが、アセンブラ関係ではなく、解析中の「テニス・テニス2」が知りたくて読んでくださる方もいらっしゃるだろう。だからこの後は、ちょっと前にゲームをプレイした時のことを書こう。

私は病気見舞いのイベントを出して、パレットの判定が正しいかどうかを目で見て再確認したかった。でもこれは、私にとって辛いことだった。たかがゲーム内のこととはいえ、自分が育てている選手をわざと疲れさせ、病気にさせる。私はそんなとんでもないコーチに自分がなるのは嫌だ。この作業は嫌だった。でもしなければならない。

ちょっと選手が疲れると、「アホ顔」の絵になる。でもアホ顔程度では意外と影響が出ない。このゲームをテストプレイしてゲームバランスを調整した方々は、難しくしないようにと頑張って調整したらしい。相当体力を落とすと、この下の絵になる。
tt61.png

こうやって選手をわざと病気にしようという辛いゲームプレーの間にも、容赦なくテニスの大会は進行してゆく。つまり他選手との試合がやってくる。ああ、負けるのか?体力を落とした私の教え子は負けるのか?負けて嬉しいゲームプレーヤーがどこにいる!

ところが、試合の結果が予想外のことになった。選手を病気にさせるためにわざと体力を落とさせても3試合連続で勝ってしまったのだ!下の画像がその証拠。藤井絵麻が3試合連続で○になっている。
tt62.png

このゲームでは、最初のほうの対戦相手は各パラメータを低くして難易度を易しくしているのかもしれない。でもひょっとすると、休ませずに練習ばかりさせたから藤井絵麻の腕力が100になったせいだろうか?
tt63.png

コメント(0) 

孤独へ向って突っ走れ (45)  [  PC-98x1(補完計画)]

どこまでも続く巨大なルーチンに突き当たった。これが本命のラスボスかもしれない。

特定のコードを検索して出くわした場所から先へ行っても戻っても、どっちの方向にどこまで行ってもretがない。とてつもなく巨大なサブルーチンだ。シナリオモードで1日1回実行されるループだと思う。その中にいくつもの条件判定があり、メッセージ表示やイベント絵表示につながっている。現在、解析を記したドキュメントはWord文書で30ページ。これはまだ部分であり、ページ数はさらに増える。あまりにも巨大なので、まだサブルーチンの全体像が掴めない。何日もかけて解析するしかない。

コメント(0) 

孤独へ向って突っ走れ (44) [  PC-98x1(補完計画)]

貞子を見損ねた一件とシェーンの放送があった一件で、ちょっと逆アセンブラ結果の解析は滞ったが、それでも少しずつ進めている。

今やっているのは、純粋なコード解析とは少し違う。パレットファイルが判明しても、それを適用するpicファイルのほうが判定できない場合がある。ファイルを読み込む時点でのデータセグメントの特定の場所の値がわかれば判定できるが、それを知るためにはその場所に値を書き込むコードを探して長い長い解析をしなければならない。いずれはそれもする必要があるが、その「難物」は最後に回そうと思う。それ以外の楽に判定できるものを先に片付けて、いわば囲碁のように「難物」の周りを固め、それから攻略すれば、解析の上でも精神的にも苦労を軽減できるという考えだ。で、本来ならばそのpicファイルは判定できないのだが、それでも判定できる場合がある。なにもコード解析が唯一の方法ではない。ゲームをプレイするという方法を忘れてはいけない。

つまり、こうだ。コードを遡って見てゆくと、判定できないはずのpicファイルを表示する直前に別の絵を表示している。その絵はイベントの絵だ。そこで私はゲームをプレイした時のことを思い出した。このゲームではショッピング、レストラン、アルバイトなどのイベントは1枚の絵で表現される。
tt53.jpg

そしてそのイベントが終わるとスケジュール画面に戻るが、次の日へ移行するまではイベント絵と同様の絵が画面右半分に表示されたままになる。この画面の一部として表示されている絵のうち、先に表示されたイベント1枚絵と明らかに同種の内容を示すものが、判定すべきpicファイルだ。
tt54.jpg

つまりそれはtt55.jpgtt56.jpgtt57.jpgの3つだ。

こうして、判定できないはずのpicファイルは、ゲームをプレイした人間にとっては、コード解析としてでなく、ゲームの進行から判定できる。

でも、今日私はそれを書きたくて出てきたのではない。妙なものを見つけてしまったから、それを報告するために出てきた。

まずは、これを見てほしい。何か気づかれるだろうか。縮小するとわかりにくくなるので、わざと縮小しないで出した。マウスでクリックすると大きくなる。
tt58.jpg
きっとあなたは気づいただろう。ついに日本のカレンダーには、4月00日が出現したらしい。

tt59.jpg
4月44日だってある。私はプログラム解析の途中で何かやらかしてしまったかなと心配したが、ネット上のゲーム写真にも4月44日があったので、どうやらどのディスクを使ってプレイしてもこうなるようだ。

他にも、こういうのが見つかった。縮小したからわかりにくいが、この記事の同様の絵と比べるとひょっとしたらわかるかもしれない。画面左半分だ。
tt60.jpg
上のほうにトレーニングジムの建物が小さく表示されているが、地盤沈下を起こして下へ少し沈んでいる。つまり、画像領域の上辺が黒くなっているが、本来はここに建物を描いた絵の上辺が来なければいけない。でもこれは描画位置のバグではなく、そもそもpicファイルの内容がこういう絵として記録されているという間違いだ。

・・・あっと、睡眠薬が効いてきた。ちょうど書きたかったことは書けたので、今日はここまでにしたい。これからも記事の頻度は減ると思うが、それでも少しずつ解析を進めようと思っている。

コメント(0) 

孤独へ向って突っ走れ (43) [  PC-98x1(補完計画)]

過去の記事を調べてみたら、どうやらテニス・テニス2の解析を始めたのは、6月11日だったらしい。最初は、Windowsの「メモ帳」にEXEを読み込んでみるという「誰にでも出来てちょっと楽しい作業」から始まった。先がどうなるかは五里霧中だった。あれからちょうど2か月が経ち、私は残念ながら疲労を感じている。色々なファクターが作業に影響する。体力、気力、集中力、自由になる時間、ストレス、そして様々なことを考えなければならない人生で現在気持ちがどこに向いているか。

今日は、今までに解析や画像表示のために作った簡単な自作プログラムを確認して、作業開始から2か月の区切りとしたい。


teniteni2
テニス・テニス2の*.PICファイルと*.PALファイルを使って絵をGIFファイルに変換し、Windows上で見られるようにする。このプログラム自体はもう完成していて、後はそれぞれのPICに対応するPALを探し出す作業が残っているだけ。しかしこの最後に残った作業がいちばん大変だ。

call1
call3
EXEファイル内で特定のサブルーチンを呼び出している場所を見つけてテキストファイルに書き出す。
near callはcall命令直後からの相対アドレスで飛び先を指定するので、逆アセンブル結果でCALLの後に記されたアドレスをそのままEXEファイル内で探しても見つからない。このプログラムを使えば逆アセンブル結果でCALLの後に記されたアドレスを指定するだけでその呼び出し場所を見つけることができる。
call1は一度にひとつのサブルーチンを対象とし、call3は一度に3つのサブルーチンを対象とする。call1のほうはずいぶん使っている。これがなければコードの特定の部分から遡って追跡する作業は無理だろう。

mov
EXEファイル内で特定のaddressにたいしてmov word ptr [address],immediateを処理している場所を見つけてテキストファイルに書き出す。
逆アセンブル結果を見たところ、私が知りたいアドレスから値を読み取る時はいつもアドレスを即値で指定しているので、書き込む時もそうだろうと思い作ってみたが、残念ながら大抵は別の方法を使っているらしく、期待したほどの利用価値はなさそうだ。

sub98d0
「テニス・テニス2」のプログラムでは、画面に表示する文字列はEXEファイル内に格納されており、データセグメントにロードされる。これを表示するにはサブルーチン98D0を呼び出す。このサブルーチンではaxの値とそこから算出されるデータセグメント上の値をもとに、データセグメントに置かれた「ファイル読み取り情報」のアドレスにたどりつく。後はDOSのシステムコールでファイルから読む。この仕組みは早くからわかっていたが、今までは必要に応じて手作業で計算やデータセグメント上の値の参照をしていたので、画面に表示する文字列を知るのがとても面倒だった。そこで、プログラムを組んで作業を自動化した。

jmp
EXEファイル内で特定のアドレスへ無条件ジャンプしている場所を見つけてテキストファイルに書き出す。
これは必要に迫られて今日作ったばかり。いずれは、条件ジャンプも扱えるようにする必要が出るかもしれない。


上記の自作プログラムのほとんどは、Microsoft Visual Studioの環境内から実行するようになっている。その理由は簡単で、Windowsプログラム(少なくともC系)では、ただユーザーが数値を入力するというだけのために余計なコードをずいぶん書かなければならない。書くだけならいいが、書いたことに間違いがあればそれにたいするデバッグをしなければならない。私一人が使うとわかっているプログラムのために、そんなデバッグの手間をかける必要はない。

sub98d0だけは個人的な事情があって数値入力をMicrosoft Visual Studioのエディタからでなくプログラム起動後のダイアログボックスからするようにした。これのためにずいぶん時間を取られて私は後悔した。今後の作業が「先の見えない作業」になりつつあり、その焦りから、「表示されるテキストがわかれば少しでも手がかりになるんじゃないか」と短絡的思考に走りプログラムを組んだのだが、実際のところプログラム解析の基本は地道な作業であり、テキストに頼ってするのは解析というよりも推測になってしまうから、あまり利用価値がない。後で冷静になった時点で、私はさらに後悔した。

このまま利用価値がないのも残念すぎるので、ここで少しだけ遊ばせてほしい。すごくつまんない遊びだ!(やけっぱち)

今までに「テニス・テニス2」のEXEファイルから逆アセンブルしたコードは山のようにある。その中から任意にひとつのcall 98d0を選ぶ。(これがトランプマジックだったら今後の展開にドキドキなんだけど、今回はマジックじゃないよ。なんか "どうでもいい文字列" が出てくるだけだ。)

tt49.gif
選んだのは、こんなのだった。

tt50.jpg
次に、sub98d0.exeを起動するよ。そんでもって0026(ただの26でもいいけど)を打ち込んでOKだ。そうすると・・・何が出てくるかは私にもわかっちゃいない。でもどうせ「テニス・テニス2」のテキストのどれかだけどね。

tt51.jpg
すぐに結果が表示されるんじゃないのかよ!っていうか、これ作ったの私だろ!
あ、そうか、コピー&ペーストできるようにテキストファイルに書き込んだんだっけ。

tt52.jpg
そうですか。試合がありますか。試合といえば、いまちょうどオリンピックの最中です。日本の床の演技はド素人の私が見てもすごかったです。私も、なんとかしてもっと人生を頑張らねばなりません。ああ、いけない、急にテンション下がって話し方まで変わってしまった。私に元気がないのにはわけがあるんです。創味シャンタンの真実は白い缶の中に。私の真実は、このブログの中に。

コメント(0) 

孤独へ向って突っ走れ (42) [  PC-98x1(補完計画)]

仕事でも家庭でも個人でも、自分がやると決めたことはやらなきゃいけないのだろうなあ。

自分が逃げると決めたことは逃げればいい。他人とは反りが合わない。他人が求めることを全部やっていたら、こっちが潰れる。仮にそれでも苦心惨憺して全部やったら、その他人はどこ吹く風の当たり前という顔だ。人生は天国じゃないのだから、逃げる時には逃げるのが正しい。

その反面、やると決めたらやらねばならぬ。愛すると決めたら愛し抜かねばならぬ。そうでなければ、自分の生きざまがみじめになってしまうではないか。

そろそろ逆アセンブル解析の話へと収束させよう。

もう何週間も前に、あるルーチンを解析した。それが難物で、いまだに苦労している。解析は、通り一遍は終わった。でも「このコードはこういう動作をする」というのと、「この部分はゲームの中でこう動く」というのはまるで違う。とくに違うのが、メモリに格納されたデータの意味がわかっているかどうかだ。

話が細かすぎると読んでくださる方が退屈するから、おおまかに書こう。サブルーチンAは、パレットを読み込む。サブルーチンBは、絵のビットデータを読み込む。この2つのルーチンが続けて呼び出される場所がいくつもある。私はビットデータ(以下picと称す)のパレットデータ(以下pal)を特定するために、この2つのサブルーチンを解析している。

2つのサブルーチンには共通点がある。どちらも、データセグメントの特定のアドレスにある値をALに入れて、それを条件分岐して値を変更しつつ、読み込むファイルを決める。こうして共通点がわかれば、あるpicのためのpalを特定できそうだ。これが私の考えだ。

たしかにこれでうまく行った場所は多い。サブルーチンBで特定のpicに至るALの値は何かと調べ、次にサブルーチンAでそのALの値ならばpalはどれかと調べる。たとえばこのpicと、それに適用したpalは合っていると思う。
tt44.gif

picとpalが合っていることの確認として、以前にネット上で見つけた小さなゲーム画像と色を比べてみる。
tt45.jpg

でも、実は私のやっていることには穴がある。自分でわかっている。実は条件分岐が複雑で、ALの値だけで分岐するのではない。メモリ上の特定の場所が0かそうでないかでも分岐する。ところが、そのメモリにどこでどういう理由で書き込まれるのかがまだ解析できていない。サブルーチンの呼び出し元、さらにその呼び出し元まで遡って調査するのが、この場合「本腰を入れないと無理」だと予感したから。それで後回しにした。

もうお気づきだと思うが、上のpicだって、ひょっとしたらpalが違っているかもしれない。それがはっきりするのは、いつの日か、「メモリの特定の場所」とやらの解析を終わらせた時だ。いつか・・・いつか必ずやってやる・・・。今はまた息切れがしてきたから、今すぐは無理だが。

で、これがpicの適用を間違った例。
tt46.gif

こういうのを見てきた人ならピンとくる。わかるんじゃないだろうか、「これは違う」と。「こういうのを見てきた人」とは、パレットを必要とする画像データがパレットと無関係に置かれた時、似たようなパレットを適用した経験のある人だ。髪の色や肌の色はこれでいい。だから人によっては、「ああ、これでいいや」と思うかもしれない。でもちょっと待ってほしい。水着の色を見る。グリーンの水着、それ自体はありうる。でも水着の皺や縫い目を描いた線がピンクだ。こんな色遣いをするだろうか。私は、これと同じ絵がハードディスクのどこかにないかと探した。そうしたら
tt47.jpg

ガビーン!! 赤・・・水着は、赤だった・・・。

そういえば、このルーチンとは別にイベントの1枚絵を表示するルーチンがあって、こんなんだった。・・・すっかり忘れていた。
tt48.gif

とにかく、私は思った。上に書いた「メモリ上の特定の場所が0か」云々のコードを私は追っかけねばならない。

でもそれが成功した頃には、私はこのゲームの「シナリオモード」のしくみが全部理解できちゃうぞ。「どこのデータがいくら未満」なら女の子が病気になるとか。そんなこと私にはどうでもいいが、そこまで解析できなければ正しいパレットが見つけられない。

ああ、なんか声が聞こえる気がする。このソフトを作った人たちの声が。「僕たちは必死の思いでこのゲームソフトを作ったんだよ。本当に大変だったんだ。君がそれを解析するというのなら、君にはそれなりの根性を出してもらわないとね。そうでなければ成功なんてありえないよ。もしも僕たちの必死の努力と同じだけの体力と気力と知力と時間を費やして解析に成功したならば、その時『だけ』、僕たちは君を認めてあげるよ。」

・・・先は長い。でも最初に書いたとおり、やると決めたらやらねばならぬ。

コメント(0) 

孤独へ向って突っ走れ (41) [  PC-98x1(補完計画)]

(Kingsoft Officeで編集・上書きしたWord文書が本家のMS Wordで「壊れているようです」と出て拒まれるが実は全然壊れていないという話は、この記事の下のほうにあります。)


前回の記事から数日が経った。私は今までと同様の作業をしているが、まったく同じではない。今まではパレット実現のサブルーチンcallを検出してその前後を調べたから、パレット読み込みの場所はその近くにあった。でもその作業は全部終わり、今ではそれ以外の「何かのファイルを読み込むサブルーチン」の近くを調べている。このゲームソフトではファイルの大半はpicなので、読み込む「何かのファイル」はかなりの確率でpicだ。そこまではいい。問題はそこからだ。さっき書いたとおり、パレット実現のルーチンはその近くにない。つまり、"「何かのファイルを読み込むサブルーチン」の近く"というのは結局picだけを読み込むサブルーチンで、そのサブルーチン内にはパレット関係はなく、パレット関係はサブルーチンの呼び出し側にある。だから私は今度はサブルーチンの呼び出し側をEXEファイルから検索して探し出し、そこを解析する。サブルーチンの呼び出しは1回とは限らない。EXEファイルの複数個所で呼び出しているかもしれない。私はそれをいちいち調べる。それだけじゃない。その呼び出し側にもパレット関係がない場合がある。つまりその呼び出し側サブルーチンの、さらに呼び出し側でパレットが実現されている。私はそれも調べる。ようするに、今までと違ってパレットファイルの読み込み場所にたどり着くまでに大変な時間がかかる。

それでどうなったかというと、PCの前に座る私の足腰が微妙に不調を訴えはじめた。前から書いているように、私は長く座ることを禁じられた健康状態なのだ。

もはやPCで作業ができないから、私はデータをスマホにコピーして作業の続きをした。データとは、Microsoft Word文書だ。PCに入っているPC-98エミュやディスクイメージの中身を見るソフトはスマホで動かないので、逆アセンブル結果をWord文書にコピーしてそれをスマホに入れる。プレーンテキストだと解析結果を色分けできないしインデントも付けられないので、ちょっと機能的に不足だ。それでWord文書にした。私のスマホにはMicrosoft Wordは入っていないが、そのかわりにKingsoft Officeが入っている。このソフトが結構よく出来ていて、スマホのちまちました画面でもそれなりに作業ができる。私はスマホを使って解析を続けた。そして、ひとつの文書内の解析が終わった。解析結果をPCへ移して保存する時が来た。

私は、できあがった解析結果のWord文書をスマホからPCにコピーして開いた。すると、読み込んだ文書が「壊れているようです」と出た。念のためにスマホで同じ文書を(Kingsoft Officeで)開くと、ちゃんと表示される。Kingsoft OfficeはMicrosoft Wordと互換のようで実は互換でなかったのだろうかと思った。こういう時はネット検索だ。あるサイトの個人的な書き込みによると、Microsoft Word 2007あたりから、純正Wordで作った文書でないものは「壊れている」と表示されて開けないという。でも私はもうひとつ、古いPCを持っている。新しいのほうのPCのWordは2013だが、古いPCのWordは2007・・・あれ、なんか嫌な予感が。まずは試してみた。やっぱりKingsoft文書は「壊れて」いた。こういう時は、色々試すんだ。私はスマホのKingsoft Officeで文書を「別名保存」した。それを古いほうのPCに読み込んでWord 2007で開いたら、ちゃんと表示された。ここからは私の想像だが、Kingsoft Officeを使って文書の編集と上書き保存をする過程で、なんらかのKingsoft Office独自のデータが付加されたんじゃないだろうか。それが、いちど「別名保存」する時点で取り除かれたのではないか。これは私の勝手な想像だが。

私は駄目押しで、PC内のMicrosoft Wordで開いたその文書をMicrosoft Wordで別名保存した。これで、保存したソフトは純正Wordになり、どう間違っても「壊れている」とは表示されないだろう。

コメント(0) 

孤独へ向って突っ走れ (40) [  PC-98x1(補完計画)]

この一連の記事は、もうずいぶん長いこと孤独へ向かって突っ走っている。いまさら誰が見向くわけでもない大昔のゲームの、それもレビューではなくプログラムの解析を延々と。今日も私はヘロヘロしつつ、それでも頑張った。

同名で中身が異なるpicファイルがあるとわかったので、私はまず自作のpic展開プログラムを修正しなければならなかった。その修正が終わり、私以外に誰が使うわけでもないこの自作プログラムの使用説明書を書いた。まさに孤独へ向かってひたすら突っ走るわが人生。でも、この説明書は実は私自身のために必要だ。プログラムを組んでから1年も経つと、どんな動作をするプログラムだったか忘れてしまうんだ。後から自分のプログラムのコードをたどって動作を知るのも二度手間だから、今のうちに説明書を書いておくのは実は正しい。

ただし、その説明書をこのブログ記事に載せるのは、「いったい何のため?」と言われても仕方がない。社会に向かっての「私はまだ生きていて、頑張っているぞ」という自己主張だと理解していただけたら有り難い。

そういうわけで、今日はこの後に自作プログラムの動作説明が続く。




目的

PC-9801シリーズ用ゲーム「めざせトッププレイヤー テニス・テニス2」(以下「テニス・テニス2」と略記)のすべての絵をGIFファイルに変換し、Windows上で見られるようにする。実際には、このプログラムで変換する絵は*.PICファイルだけであり、メッセージウィンドウと試合中のボールを描くための*.Gファイルは変換しない。


使用法

(概略)まずこのプログラムと同じ場所に「テニス・テニス2」の3枚のフロッピーディスクから*.picファイルと*.palファイルをコピーするが、一部のファイルは同名で内容が異なるので全部を同じフォルダに入れられない。そこで次のようにする。

Windows上に、3つのフォルダ"1"、"2"、"PAL"を用意する。

「テニス・テニス2」のBディスクの"TENNIS\PIC4"ディレクトリ内の全ファイルを"1"にコピーする。

"1"の中の、ファイル名が"C??.PIC"のファイルだけを"2"へ移動する。

「テニス・テニス2」のBディスクの"TENNIS\PIC2"ディレクトリ内の全ファイルを"1"にコピーする。

"1"の中の"MAS1.PIC"だけを"2"へ移動する。

「テニス・テニス2」のAディスクの"PIC"ディレクトリ内の"*.PIC"を"1"にコピーする。

「テニス・テニス2」のAディスクの"TENNIS\PIC3"ディレクトリ内の"*.PIC"を"1"にコピーする。

「テニス・テニス2」のAディスクの"PAL"ディレクトリ内の全ファイルを"PAL"にコピーする。

「テニス・テニス2」のCディスクの"TENNIS\PIC1"ディレクトリ内の"*.PIC"を"1"にコピーする。この時、"TITLE2.PIC"だけはすでに"1"に存在しWindowsがメッセージを出すが、両方の"TITLE2.PIC"はまったく同じデータなので上書きまたは処理をスキップしてよい。

"1"、"2"、"PAL"を、このプログラムがあるフォルダに入れる。

このプログラムを実行する。

(プログラムの動作)プログラムは、すべての*.PICファイルを順に読み込み、画像データを展開し、対応する*.PALファイルを読み込んでパレットを実現し、*.gifのファイル名で同じフォルダに書き出す。

GIFファイルはプログラムのあるフォルダではなく、そのサブフォルダである"1"および"2"の中に書き出される。

対応するパレットが未調査の(プログラム内部のpic-pal対応テーブルでヌル文字列になっている)picファイルがあれば、警告の意味で赤色で出力する。ただしこのゲームでは妙なことにパレット番号0の色はパレットファイルのデータに関係なく黒にする仕様で、このプログラムでもそれを踏襲しているので、パレット番号0の部分だけは赤でなく黒になってしまう。




自作プログラムの動作説明は、ここまでだ。次に、現在までの解析結果を画像で見てほしい。赤い所は、まだパレットが見つかっていない絵だ。

"1"の絵
tt42.jpg

"2"の絵
tt43.jpg

これからの私は、この赤い所のパレットを見つけるべく、毎日少しずつ逆アセンブルしては解析する。何か特別なことがあったり、作業の区切りに到達したら、また記事を書きたい。

コメント(0) 

孤独へ向って突っ走れ (39) [  PC-98x1(補完計画)]

今回は作業が一区切りなので、個人的な感想・メモをご容赦いただきたい。

当初予定していた部分の解析は、なんと全部終わった。終わったのは当初の部分だ。後から出現した作業が残っているから、まだまだ先は長い。
以前は何年かかるかわからないと嘆いていた作業だったが、私が2つの意味で変わったので、まるで別人のように作業が進み始めた。
私の変化のひとつめは、アセンブラのニーモニックに慣れてきたことだ。最初のうちは私はPUSHやPOPが出てくるたびに次行に「スタックに退避」などとコメントを書いていた。書いていることは正しいかもしれないが、そんな些事はメモするまでもなく頭の中で瞬時に理解して先へ行かなければプログラムの流れは見えない。少し前から、PUSHやPOPの動作が私が記録するコメントに現れなくなった。いま解析しているコードでは、PUSHとPOPの大半は数値の退避だ。それ以外にはわずかに、PUSHとPOPに別のレジスタを使って数値の受け渡しをする。他にはたぶんない。だからPUSHとPOPは処理の大勢を掴みたい時は基本的に無視するようになった。1行や2行ごとに「ニーモニックの動作」をコメントせず、もっとまとまった行数について「結局何がしたいのか」をコメントするようになった。今日は、サブルーチンの逆アセンブル結果を初めからWindows上のWord文書に写して考えるのでなく、とにかくPC-98エミュ内のdias.exeで表示して読み、必要だと判断してからWindows上のWordに写そうとした。
私の変化の2つめは、いま解析中のプログラムに慣れてきたことだ。これを書いた人がどんな書き方をしているかがわかってきただけでなく、ファイルの読み込み、パレットの適用、圧縮ファイルの展開などの重要なサブルーチンが発見されたので、目が自然とそこを中心に動いて見るようになった。小説と違ってプログラムのコードを斜め読みして良いのかどうかは私にはわからないが、良くも悪くも私は今では斜め読みしている。
気分も時と共に変化した。解析を始めた頃の私は意欲が今よりもずっと満々の状態で、その気力で蒸気機関車のように驀進していた。慣れないニーモニックの解読で進みが遅かったが、有り余る気力がそれをカバーした。その後の私は、目の前に新たに出現する作業の膨大さに疲れを感じた。大海原の中にいて、目的地がどこにも見えない気分だった。でも私はプログラミング馬鹿なので、ちょっと気力が回復するとまたすぐに解析を始めた。そのうちにふと、目的地が見えそうな気がしてきた。目の前のコードが何をしているか、少なくとも自分が欲している関係のコードがどこにあってどういう意味かがわかるので、この調子で解析してゆけばどこまででも理解できるんじゃないかと思えてきた。
とはいえ、これが最終段階というわけではないだろう。この先どうなるのか。壁に突き当たるのか、それとも勢いづくのか。それは先に行くまでわからない。今は、健康をおろそかにせず、家事をおろそかにせず、仕事をおろそかにせず、やりすぎに注意しながら先へ進もう。
tt41.png
コメント(0) 

孤独へ向って突っ走れ (38) [  PC-98x1(補完計画)]

絵が足りない。いくつも足りない。観戦の絵がないことは前の記事に書いたが、だんだん思い出してきた。一日の始まりの絵もないし、練習中の絵もない。ところが、不気味なことに3枚のフロッピーディスク内のDOSで読めるファイルを再確認したが、それらしいものが見当たらない。

本当にそうだろうか。そんな怪談じみたことは普通ない。パレットを変更したら別の絵が浮き上がる?それは理論上は可能だが、私はわざとサイケなパレットで表示したのだから、そんな仕掛けがあったらその時に見えている。EXEファイル内に特定の画像だけデータとして持っている?そんなことは普通しない。私はしばらく調べて、ちょっと思い当たることがあった。そういえばフロッピーディスクからpicファイルを集める時、複数のディスクに同じファイル名のpicがあった。私が趣味でゲームソフトを作った時は、違うデータが同じファイル名だと自分自身が後で間違ってしまうので、必ず違う名前にした。だから私は他人もそうするだろうと思い込んでいた。ディスク入れ替えが頻繁になるので仕方なく複数のディスクに同じデータを入れたのだろうと思った。ただそれでも、心の隅に引っかかってはいた。データ圧縮にこだわらなければならないほどディスク容量が小さかった当時、いくつものファイルを異なるディスクに入れるなんて、と。今日は寝る前に、この疑問をはっきりさせたかった。自作プログラムを書き換えて、どのpicファイルも単一のパレットデータでgifにするように変更した。パレットデータはどれでもよかった。とにかく真っ黒にならないパレットならば。そして、同じファイル名のファイルを上書きしないように、ディスクのディレクトリごとにpicをgifに変換した。

結果がどうなったかは、もう書くまでもないだろう。今度こそ全部の絵が出てきたと思う。私は以前の記事で、パレットの発色はおかしいがゲーム内の全部の絵を出したと書いた。でもそれは間違いだった。だからこのブログを見に来てくれる方のために情報訂正しなければいけない。

最初は、前回と同じくらいの大きさで絵を出そうと思っていた。ところが絵を見てびっくり、適当に選んだパレットが意外にもかなり多くの絵にマッチしてしまった。私は以前の記事で、色がサイケなうちだから絵を全部出せると書いた。ちゃんとした色で絵を出しまくって、ゲームをこれから自分でプレイしたい方の意欲を削いではいけないからだ。ところが私の意に反して、ちゃんとした色になってしまった。こんなにまともな色になったら、出せないじゃないか。それで、アイコンのサイズを、かろうじて絵が見えるほどに小さくすることにした。

ディスクAのPICディレクトリのpic
tt36.png

ディスクAのPIC3ディレクトリのpic
tt40.png

ディスクBのPIC2ディレクトリのpic
tt37.png

ディスクBのPIC4ディレクトリのpic
tt38.png

ディスクCのpic
tt39.png
コメント(0) 

孤独へ向って突っ走れ (37) [  PC-98x1(補完計画)]

ビットデータであるpicファイルとパレットデータであるpalファイルを関連付ける作業は、ここまで来た。
tt31.gif

細かい文字が見えてもどうせサブルーチンの先頭アドレスばかりだから、むしろ何が言いたいのかが一目でわかるように縮小した。色でわかる。緑色の部分は、今までの解析ですでに出てきたcallだ。赤色の部分は、その解析によって判明したpicファイルまたはpalファイルの名前だ。ただしゲームオーバールーチンなど、複数の場所で同じpicやpalを呼び出している場合があるから、判明したpicやpalの数は赤色の数よりも少ない。マゼンタ色の部分は、これから解析しなければならないcallだ。画像左半分の短いマゼンタ色は、最初からわかっていた解析予定。右半分にある、数は少ないが長いマゼンタ色は、解析途中で新たに出てきた「難物」だ。

私のようなのを、きっとプログラミング馬鹿という。「駄目かもしれん」とか「足が悪くなった」とか「気力がない」とか言いながら、ほんの少しでも状態が良くなると、ふと気がつくとコード解析をやっている自分がいる。これを世間では馬鹿と呼ぶ。

いまさら、「めざせトッププレイヤー テニス・テニス2」と叫んだところで一体誰が振り向くだろう。でも、偶然が私に味方してくれたおかげで、私は面白い。どんな偶然かというと、私が解析しようと思い立ったこのゲームプログラムは間違いなくアセンブラで書かれている。高級言語だったら、もっと無駄なコードが出るはずだ。たとえばC系ならばスタックにまとわりつくようなコードになっているはずだ。もちろんスタックにまとわりついても悪いことはない。ただ私という人間が、アセンブラを十分に学ばないうちに終わってしまった人間で、しかも学んだ部分すら長い年月の間に忘れた人間だ。そういう私には無駄なコードがないほうが解析しやすいし、学びやすい。

さて、今までにおおよそどんな絵のパレットがわかったかというと、ストーリーモードでのイベント関連の絵だ。これにはたぶん理由がある。イベント以外の絵は、ゲームの動きと密接に関連している。たとえばテニス大会の対戦相手が決まった時点で、その相手を意味するデータがデータセグメントかコードセグメントのどこかに格納される。それ以後、選手の絵(初回)、試合中のちびキャラによる絵、勝った時の選手、負けた時の選手を表示する時には、その格納されたデータが参照されてそこから「絵のファイル名等を格納したアドレス」が算出される。この場合、ファイル読み出しルーチンには即値が渡されない。どっかのアドレスから値を取ってきて、しかも(実際に解析中だが)もうひとつ別のアドレスも参照し、それから条件分岐が始まり、分岐先で場合によってはまた別のアドレスも参照して、やっと目的のアドレスが決まる。早い話が、大変すぎてその先がまだわからない。それで、目的のアドレスが即値で記されているものから先に判明したというわけだ。

ストーリーモードのイベントの絵はどれも同じキャラクターが出てくるので、私は同じパレットを使っても何とかなるんじゃないかと思った。でも実際には使うパレットが違う。では何が違うのか。背景の色が違った。

tt32.gif
どうして大会で優勝を目指す選手に優勝前にコーチが酒を飲ませるのかは謎だが(ストイックな健康管理なしでは優勝できないだろうに)、とにかくこのイベントではこの背景。

tt33.gif
露天風呂ではこの背景。

tt34.gif
エアロビクス(ではなく、マニュアルを読むとどうやらこれはトレーニングジムらしい)の最中はこの背景。

tt35.gif
水泳での背景は、最初の旅館でお酒を飲んでる絵と似ている色だけど少し違う。

どうやらイベントそれぞれの雰囲気や色使いを考慮して、背景色を少し変えたらしい。

私が一番見たい絵は、実はイベントではない。理由は簡単、何度かプレイすればイベントの絵は全部見られるから。でも、キャラクターが総勢16人もいるこのゲームで、各キャラクターが勝った時のバストショットと負けた時のバストショットを全部見ようと思ったら、それは大変な作業だ。つまり私が一番見たいのは、試合前と試合後のキャラクターの絵だ。

最後にひとつ、気づいたことを書きたい。マニュアルを読んでいて思い出したが、このゲームには私が解析したもの以外にもイベント絵があった。ポップコーンを持って観戦している絵が。でもpicファイルの中にはそれがない。私は何か見落としている。作業がまた増えた。

コメント(0) 

孤独へ向って突っ走れ (36) [  PC-98x1(補完計画)]

不思議なプログラマー怪談+ついに出た。正念場は間近か


人の脳は時に不思議なことをする。夏は怪談の季節だが、私はいまだかつて自分で怪談話を作ったことがない。それが今日の明け方に見た夢で、私の脳は不思議な話を作った。

たぶんPC-9801シリーズ用のMS-DOSの話なのだと思う。一般に知られていないが、あるアドレスにEXEファイルの内容をロードした場合、そのメモリ内容はロードした内容とは異なる特定の値になってしまうというプログラマー怪談だ。普通はそのアドレスを使わないようになっているという話で目が覚めた。


さて、ようやく本題だ。ついに出た。ビットマップデータであるpicファイルの読み込みルーチンで、どのファイルを読み込むかが即値ではなく計算によって求められているという、その部分が。同様にパレットファイルであるpalファイルの読み込みにも、そういう部分が現れた。
tt30.gif
手ごわい。プログラムを最初から全部解析したら仕組みは理解できる。でもそれでは何年かかるかわからない。そろそろ私の足は恐い感じになってきているんだ。休まなきゃいけないんだ。そういう健康の危険を回避しつつ解析していたら本当に何年もかかる。でも、本当にそこまでする意義があるのか。大事な人生の余暇を全部使って、今後数年も?自作プログラムのライフワークを作ろうというのではないぞ。他人のプログラムの解析で、仕事でもなく、大昔のソフトだから他人は見向いてくれず、それを何年もか。

これで私が逆アセンブル解析をやめたら、アセンブラは私から永遠に遠ざかる。決断の時が近づいているのかもしれない。

ひとつ考えていることがある。「何のためのプログラマーだ」ということを考えている。つまり、ずらずらと数千行だか数万行だか表示されるニーモニックを最初から見てゆくだけの単純作業なら、パートで雇った人に指示を与えてもやってくれるんじゃないのか。頭を使うんだ。また自作プログラムを組んで、EXEファイル内の必要な部分を見つけ出し効率的に解析することはできないか。今回の必要な部分は、どのpicファイルを読み込むかを決定する元になっている数値だ。もしもpicとpalが同じ数値に基づいて読み込まれていれば、picに必要なpalを探し出すのは簡単だが、もしもpicとpalが別の数値に基づいて読み込まれ、両方の数値に何らかの関連性があるのだったら、これは大変な作業になる。

また作業は増えてしまったが、とにかくもう少し進めてみよう。

追伸
絵の色が暗かったのは、デバッグ完了した。あなたのご想像通り、下位4ビットにしか色値が入っていないというのを私が思い至らなかったせいだった。各色値を左へ4ビット シフトした。つまり16を掛けて最大値を255にした。

コメント(0) 

孤独へ向って突っ走れ (35) [  PC-98x1(補完計画)]

戦士にさえ休息は必要だ。ましてやヘロヘロのおじさんは。



EGC。懐かしい響きだ。GRCGそしてEGCと、グラフィック関係の拡張機能がPC-9801(のある時期以降の機種)にはあった。

おおまかな意味で、GRCGはGVRAMプレーン4面同時書き込み機能が特徴で、EGCはそれに加えてラスタオペレーション機能も備えている、という感じで良いだろうか?

悲しいかな、長年の間に私はその詳細を忘れてしまった。昔買って読み古したあの本が今あったらなあ、と思う。わずかに残っているのは、私が若いころに本を読んで書いたC用のライブラリのコードだ。数十年の人生の喜怒哀楽の間に、若いころの記憶は大波にさらわれるように消えてしまった。ハードディスクに保存しておいた昔のデータを見ると、まるで自分ではない知らない子がひょっこりと自分の目の前に現れてコードを見せているかのようだ。(以前の記事に書いた「ウルトラマンのように昔の自分が助けに来てくれた」というのは、誇張でも何でもない、私の本心だ。)



話は遡る。前回の記事に出した画像があのように暗かったので、それについてハッキリさせるべく、私はその画像のデータであるpicファイルを展開した後のコードを調べ始めた。

でもこのへんで正直に書いておこう。この作業を始めてから1か月あまりが経つ。好きな物には打ち込む性格の私は無茶苦茶にやってきた。それがここに来て、後遺症を出しつつある。平たく言えば、作業の大変さに息切れがしてきた。今後は作業のペースが落ちるだろうし、ある時期にピタリと何の記事も出なくなるかもしれない。それでも私は、いつの日か、この「自分でやり始めた作業」を完結させたいと思っている。

閑話休題、私がコードを調べ始めてどうなったかというと、OUT 04A0というものが出てきた。「なんじゃいこりゃあぁぁぁ!」と私は思った。この作業をやり始めた頃の私なら、何が出てきてもなんのその、ガンガン調べまくっただろうに。それができないほど息切れがしている自分に、私はハッと気づいた。休息をとる時期が来てしまった、と。

でもキリのいい所までは頑張ろう。私は調べた。これは懐かしいEGCのためのI/Oポートだった。その部分の逆アセンブル結果を少し出そう。でもこれは逆アセンブル結果だから、EGCの設定のうちの一部がサブルーチン化している場合はcallとなってしまい、コードは出てこない。

CALL 68C5
EGCの設定

MOV AX,FFF0
MOV DX,04A0
OUT DX,AX
EGC、4プレーンとも書き込み有効

MOV AX,0FFF
MOV DX,04A2
OUT DX,AX
EGC、パターンレジスタ使用

MOV AX,28F0
MOV DX,04A4
OUT DX,AX
EGC、コンペアリードしない、ラスタオペレーションの演算結果をライト、GVRAMのデータを入力、ライト・リードともパターンレジスタの変更なし

MOV AX,0000
MOV DX,04A6
OUT DX,AX
EGC、フォアグラウンドカラー設定

MOV AX,FFFF
MOV DX,04A8
OUT DX,AX
マスクレジスタ設定

ここでちょっと待った。ネット上に、
http://www.webtech.co.jp/company/doc/undocumented_mem/io_egc.txt
という有難い情報がある。こういう、非公開の部分を含む情報をテストしながら作るのに、どれほどの苦労があったことか。このサイトの情報を参考にさせてもらう時は、とにかく頭の中で感謝しようと私は思っている。

さて、その中に「ROPのP入力にパターンレジスタを割り当てる場合は、このポートに0000hを 指定しなくてはならない」と書いてある。可能性は2つだ。私はもう作業に息切れがしているから、パターンレジスタを実際には使わないのにコード解析時に使うと勘違いしてしまったかもしれない。(実際に私のミスは多すぎるんだ。)もしそうでなければ、このソフトのようにffffhとするのが推奨されることになる。

参考までに、大昔に私が作ったCライブラリからEGCの初期化部分を挙げておく。これはきっと合っている。当時出版されていた本を参考に書いただけでなく、これをコードの一部として趣味でゲームソフトも作り、それは動いたから。

void egc_enable( void )
{
unsigned char far *grcg_statusflg = (unsigned char far *)0x00000495L;

/* GRCGをON */
_disable(); /* マウス割り込み等が入らないように */
outp( 0x7c, 0x80 );
*grcg_statusflg = 0xc0; /* マウス割り込み等が参照できるように */
/* EGCモード変更許可 */
outp( 0x6a, 0x07 );
/* EGC拡張モード */
outp( 0x6a, 0x05 );
/* EGCモード変更禁止 */
outp( 0x6a, 0x06 );
_enable();

/* 初期設定:アクティブプレーン=全プレーン */
outpw( 0x04a0, 0xfff0 );
/* 初期設定:リードプレーン=パターンレジスタの全プレーン */
outpw( 0x04a2, 0x00ff );
/* 初期設定:マスクレジスタ=マスクなし */
outpw( 0x04a8, 0xffff );
/* 初期設定:ブロック転送 */
outpw( 0x04ac, 0 );
/* 初期設定:ビット長=15 */
outpw( 0x04ae, 15 );
}



MOV AX,0000
MOV DX,04AA
OUT DX,AX
EGC、バックグラウンドカラー設定

MOV AX,0000
MOV DX,04AC
OUT DX,AX
EGC、ビットシフトなし

MOV AX,013F
MOV DX,04AE
OUT DX,AX
転送のビット長



とっくに息切れしている私はそろそろ引っ込もう。この記事を見に来てくださった有難い方は間違いなくプログラミング関連で見に来てくださったのだが、最後にゲームの絵の色について、少しだけ書かせてほしい。昨夜、私は疲れて帰ってきた。人は疲れている時には地道な思考はできない。短絡的になる。それで寝る前に、私のWindowsに入れてある画像処理ソフトXn View for Windowsを起ち上げて、あの画像を読み込み、「暗いから明るくなってくれー」という呪文のつもりでメニューの「画像」から「画像データ値の変換」を選び、「自動コントラスト」を選んだ。そうしたら、あ・・・ええ?おお!!

私は「人」としては喜んだ。「プログラマー」としてはガックリと落胆した。だって考えてもみてくれ。毎日毎日努力して、まだ成功していないっていうのに、「このソフトを使うとチョチョイのチョイで成功ですよ」と言われたとしたら、一体どのプログラマーが喜ぶだろう。



追記
寝ていたら地震があって目が覚めました。そうしたらふと、パレット実現の件で思いついたことがありました。PC-98って1677万色中16色だっけ?と。なんかもっと少なかったみたいな。きっとこれでうまく行きます。今は布団の中で、スマホを使ってこの追記を書いていますが、どうせ眠れないからこれから起きてデバッグしようと思います。

コメント(0) 
前の30件 | -   PC-98x1(補完計画) ブログトップ