してログ

タイトル通りなのですが、私の ESXi6.0u1 の環境では Windows10 が Windows Update や更新アシスタンスによるアップデート、インストールメディアから起動、いずれも "KMODE EXCEPTION NOT HANDLED" のブルースクリーンになりロールバックされてしまいます。そんな訳で Windows7 を使い続けて来たのですが、そろそろ Windows10 の環境も無いと困るので重い腰を上げて調査しています。最初に断っておきますが、まだ解決できておらず何の参考にもならない記事になります。

状況について整理

  • Windows 10 1511 からアップグレードすると、再起動時に "KMODE EXCEPTION NOT HANDLED" のブルースクリーンが表示されロールバック
  • Windows Update、更新アシスタンス、インストール CD、何れの方法でも失敗
  • 「PC を初期状態に戻す」を実行し、Windows 10 のみにしてもアップグレードに失敗
  • 非標準サポートの RTL8168 の NIC を使っていたので、デバイスマネージャで削除&仮想マシンのデバイスからも削除、この状態でも失敗
  • 仮想マシンのバージョンを8~11の間で変更してもダメ
  • 新しい仮想マシンで上記ひととおり確認してもダメ
  • BIOS、EFI、ハードディスクのタイプ、SCSIアダプタ、考えられる組み合わせすべてダメ
  • いっぽうハード構成が違う ESXi5.5 では最新の 1803 まで動作を確認
  • 6.0u1 固有の問題かも?と検索してみるが解決に繋がる情報は得られず(同様の症状の書き込みは見つかるが…)

ESXi のアップデートを検討

あまり面倒なことはしたくないので、今まではクリーンインストールしかしていませんでした。しかし、iSCSI や特殊デバイスをパススルーしていたり、あまりダウンさせたくない VM も動いているのでアップグレードを検討しています。手順はそれほど難しいものでは無さそうですが、いろいろと不安材料があります。

  • 手動で入れた NIC Realtek RTL8168 は消えないのか(そのまま動くのか)
  • 仮想マシンの設定はそのまま保持されるのか
  • 問題があった場合はどうやって戻すのか(または戻せないのか)

NIC についてはクリーンインストールでもバージョンによって入らなかったりするので、非常に不安です。そもそも Windows 10 1511 のときも突然ネットに繋がらなくなったりして、不安定だったので Windows7 を使っていた経緯があります。今回、真っ先に NIC を疑ったわけですが、デバイスを外してもダメなので無関係と思われ、その検証をする前は Intel の NIC を増設しようとしていました。

仮想マシンはすべて iSCSI に入っているので、最悪クリーンインストールしても消えることは無いはずですが、オペミスや再設定が不安(めったにやらない手順なので)です。また、特殊デバイスのパススルー設定もやりたくない作業ですので、アップグレードを選択します。

問題があった場合はたぶん戻せないので、そうなったらクリーンインストールやむなし、ということで。今回、互換性とWebベースの管理画面を避けたいという点を考慮して、6.0u3 へアップグレードしようと思っています。これが成功して Windows 10 1803 が動けば良し、ダメなら 6.5 へ更に上げ、それに失敗したらクリーンインストールということにします。Webベースになったのは 6.0u2 からでしたので、いっきに 6.5u2 にアップグレードすることにしました。

とりあえず作業手順を調査中

中途半端ですみません。作業したらまた記事にします。

エリアマップ編集用に描いた下書きが出てきたので記事に残しておきます。

左右繋がったマップにしました

オリジナルのゼビウスは左右ループしたエリアはありません(そういうデザインになっていない)が、プログラム上はループしてても問題が無いような作りになっています。そこで、新16エリアは左右ループしたマップデザインに変更しようと思いました。オリジナルマップを半分シフトして、左右がうまく繋がるよう編集していくのですが、その前に手書きイメージを作成しています。なお、基本としたマップはオリジナルを左右反転したものです。

編集作業

ハチドリの砂漠をうまく閉じるのに、2面や16面の道路(右半分)を潰して自然にしています。ストーンサークルのような地形が欲しいので、それを真ん中あたりに作り、川は上に蛇行&合流させて森へ消えるよう処理します。他は、湖に島を作る、森に砲台サイトを作る、反転した影を修正などを行っていきます。

その他

今回左右繋げた結果、同じような背景のエリアが多くなるのを少し改善できますが、なくせる訳ではありません。16エリア切り出すには圧倒的に足りませんし、使い勝手の面で同じような背景マップを使わざるを得ないのが実情です。マップチップのグラフィックは2段階で反転が可能にしているように、マップ自体も左右・上下反転したものも使えるようプログラムしてあったら良かったのにと思います。

アシスタンスという名の役立たず
アシスタンスという名の役立たず

長期間使用していなかった Windows10(仮想マシン)を起動したところ、予想どおり延々と Windows アップデートになりました。あいかわらずユーザーの意思を無視して、問答無用にアップデートを始めてしまうのも予想通り。しかし、今回違ったのは Windows Update では無く「Windows 10 更新アシスタンス」というものが現れたという点。

前にも書いたけど、Windows 10 の何がダメかって同じような機能やメニューが複数ある点であると思います。なんでまた Windows Update ではだめなんだと思いつつ、待てば更新終わるだろうとこの時は思っていました。ところが、何回アップデートしても再起動のときにブルースクリーンになってやり直し。Windows Update では最新版と出ますが、更新アシスタンスでは 10586 から 16299 に更新する必要があると出る。どっちが正しいのか知りませんが、今のところ解決方法が無いし、ネットで調べる気力も無いので封印しようと思います。

どうやら、Windows 10 というのはこまめにアップデートして最新版を追っかけておかないとだめな OS らしいです。一回のアップデートに数時間かかるようなアップデートを勝手に初めてしまう酷さ、そのアップデートもまともに終了しない検証不足のまま平気でリリースする質の低さ、糞 OS にも程があります。史上最低な Windows の称号を 10 に送ろう。

追記1

1日置いて気力が回復したので解決方法を調査してみました。マイクロソフトから「Windows Update トラブルシューティングツール」というものが提供されているのでこちらを実行してみました。更新アシスタンス実行後の再起動でエラーになる現象は解消したのですが、再起動後も 10586 のままです。更新アシスタンスをアンインストールし、しばらく待っているとゾンビと言われているように復活、また問答無用でアップデートが始まりました。つづく。

追記2

だめでした~。再起動時に停止しなくなっただけで、ブルースクリーンになってもログオン画面まで行くみたいです(ようは気づかなかっただけ)。アップデート失敗しているので 10586 のままなのか。こんな糞 OS 使うの嫌だな~。

追記3

それからいろいろ試してみましたが、何をやっても「KMODE EXCEPTION NOT HANDLED」となって更新に失敗してしまいます。このエラー、デバイスドライバ関係らしいので VMware Tools などの MS 以外のサービスをすべて停止した、クリーンブートを試してみたりしても改善できませんでした。

もうクリーンインストールしか道は残されていないと思いますので、ここでアップデート作業は断念します。

付けたし

ほぼ同じ環境で随時アップデートしていた仮想マシンでは最新の 16299 になっていることから、大型アップデートを順次行っていれば問題なかった可能性があります。そうであれば非常にデキの悪い OS だと思います。

安かったので大量購入
安かったので大量購入

探していた UVEPROM 2732 / 2764 ですが、若松通商というところで見つけました。新品で367円と安く、在庫も1000以上あるようで、同じように探している人はお勧めです。他のところで700円以上も出して買わなくても良かったし、もう少し早く見つけていればと残念至極です。

これでゼビウスの基板上の ROM を総とっかえできる分揃いました。今作っている敵配置をゼロから作り直した新16エリア版も作れそうです。もう一枚ゼビウス買って、オリジナル版、デバッグ版、新16エリア版にしとこうか激しく悩みます。

実機でも出た!
実機でも出た!

やっぱり実機で出ている姿は格別なものがあります。いくらアプコンの絵がヘロヘロでも、なんとなく格式の高さを感じてしまいます。EPROM が足りなくて、スプライトのドット絵は修正できていませんが、なんとか確保してこれからプレイするデバッグ版基板にしたいですね。

動画はキャプチャー機材を持っていないのでスマホ撮影ですみません。しかし、昨日アップしたんですが、あいかわらずゼビウス動画の再生数は少ないですね。ニコニコはしばらく後にまた削除することになると思います(アップロード数に制限があるので)。

ようやくこのときが来ました(当初の目標はこれだったはず)。

出現テーブルの解析から始めて、バグの原因と解決方法が分かってエミュレータ上や、ナムコヒストリーの改造では確認できていたものの、本物の基板上で出すというのは非常に感慨深いものがあるはずです。今回は作業に使った機材とか、確認に使った基板などをご紹介します。なお、直接録画できる環境が無いので、動作している様子は後日公開します。

これがゼビウスの基板だ

これが私の所有するゼビウスの基板で、2枚持っているうちの最近買ったほうかな(改造するから保存用と別に揃えたのだよ)。昔は1万以下で手に入れられたけど、最近は3~4万に値段が上がってるっぽい。

ご覧のようにシールが破損して読みにくくなっているので、写真を撮って分かるようにしておきました。作業前に一度通電させて遊んだら、いつの間にか1周していました(やはり本物はいいですネ)。ちなみにこの基板、電源投入直後は背景が時おりフラッシュするような不具合があるみたいですが、時間が経つと安定するようです。

表側?プログラムと出現テーブルの ROM が乗っています
表側?プログラムと出現テーブルの ROM が乗っています
裏側?こちらはスプライトのデータとかの ROM です
裏側?こちらはスプライトのデータとかの ROM です
左はシールが破れたのか補修してある XVI 1 の ROM
左はシールが破れたのか補修してある XVI 1 の ROM
XVI 2 以外の 4KB はこの三菱の M5L2732K です
XVI 2 以外の 4KB はこの三菱の M5L2732K です
右側の XVI 6 が出現テーブルを格納しています
右側の XVI 6 が出現テーブルを格納しています
表側は XVI 7 でラスト(なぜか 8 は欠番)
表側は XVI 7 でラスト(なぜか 8 は欠番)
ここから裏側で、背景マップとかスプライトとかです
ここから裏側で、背景マップとかスプライトとかです
文字データや背景キャラクタの ROM
文字データや背景キャラクタの ROM
この辺がスプライト(容量の大きい ROM がいくつか)
この辺がスプライト(容量の大きい ROM がいくつか)
小さいのはパレットなどの ROM です
小さいのはパレットなどの ROM です
発熱するのか焦げた色になっています
発熱するのか焦げた色になっています
この辺は文字も読み取れないほどシールが痛んでいます
この辺は文字も読み取れないほどシールが痛んでいます

差し替え ROM の調達

これがなかなか厄介でした。ゼビウスで使われているものは、UVEPROM で 2732 と 2764 なのですが、もう希少パーツになっています。最初、ヤフオクでウォッチしていたんですが、所有の安いプログラマで書き込める型番のがなかなかありません。オリジナルが使っている三菱の M5L2732K は結構出てるのですが、サポートリストにないしダメ元で1個買ってみましたが、やっぱりダメでした。この三菱のやつは、吸い出しはできるのですけどね、うまく行かないもんです。

ずっとこんな状態でしたので諦めかけてたわけですが、最近少ないながら新品在庫を持っている会社を発見します。そこでサポートリストにある富士通の MBM2732A-25 というのをどうにか4個ゲットできました(ちなみに、そこの最終在庫でした)。これだと数が足りなくて、スプライトやマップの書き換えまでは無理ですが、幻のソルを出すだけなら2個あればできる状態になりました。ちなみに1個700円くらいで割高&希少、消去する機材も無いので失敗は許されません。

ようやく見つけた 2732
ようやく見つけた 2732

まずはオリジナルデータのバックアップ

この作業は過去やっておりますが、念のため全 ROM のバックアップを取りました。取り外すときのパキパキっていう音が心臓に悪い、基板にあまりストレスかけると半田クラックしそうで心配です。ちなみに、これらのチップはプログラマのデバイスリストに無いものでしたが、問題なく読み込めました。

プログラマにセットして読み取っている様子
プログラマにセットして読み取っている様子

データの書き込み

まず届いた EPROM をプログラマに乗せ、とりあえずブランクチェックをしてみました。ここまでは問題なし、次に書き換えたデータを読み込み、プログラム(書き込み)をしたところ問題発生です。なんか開始した途端にエラーで中止されてしまいます。型番は合っているし、認識もできている、しばらく悩んでしまいました。結局、データシートを確認し書き込み時のボルテージが低いためだと気づきました。データシートどおりの設定に変更し、再プログラムを行ったところうまく行きました。

デフォルトの VPP Voltage だとエラーになる
デフォルトの VPP Voltage だとエラーになる

そして乗せ換え

この辺はアーケード基板を触ったことある人ならやったことあると思います。ドライバーなんかでもできますが、IC の脚を折らないように引き抜き器具を使ったほうがいいです。今回は新しい ROM なので脚を少し曲げてあげないとダメなのですが、こちらは専用器具を使わず定規と机のカドを使って曲げました。ソケットの幅に合ったら、向きを間違えずに差し込めば交換完了です。

今回は用意できた EPROM の数が揃わなかったので、出現テーブルとプログラムの2つを交換しました。プログラムの方は ROM チェックのバイパスと、エリア表示と残機表示の改善も含んでいます。写真で黄色いマルで囲った ROM がそれで、取り外したオリジナルは脇に置いてあります。後はデータが消えないようにシールを貼れば OK ですが、適当なのが無いのでしばらくここままでいいでしょう。

黄色のマルが交換した ROM
黄色のマルが交換した ROM

緊張の動作確認

接続確認を入念に行い電源投入、安いアプコンのロゴの後、おなじみのキャラモザイク、ROM, RAM チェック、デデーンっとタイトル画面が。クレジット、スタート、ファンファーレ、おお、ここまで問題無ければほぼ間違いなくうまく行っています。それではエリア6まで軽くフライトと行きましょう。。。。次回に続く。

さあてどうなるか。。。
さあてどうなるか。。。

今回はマップテーブルの解析から分かった、ドモグラムの移動指定テーブルについて情報提供します。ご存じのようにドモグラムは移動砲台なため、出現位置だけではなく移動パターンの記述があります。

移動テーブルの例

08 30 00 A0 04 A0 10 80 0C 40 10 80 18 A0 18 20 00

全体的なテーブル構成

まず最初のバイトがテーブルの長さを表しており、長さ×2バイトの移動指定が続きます。上の例では、出現位置から8回(最初を除けば7回)方向転換しており、全体で1+8×2バイトで構成されています。

方向転換の記述は2バイトで表され、最初が移動距離(単位は不明)、後ろが移動方向です。これが先頭バイトで指定された数分、繰り返されています。

移動距離の指定

移動距離は移動を継続するフレーム数で指定する(らしい)です。ただし、8フレーム単位(恐らく)でしか指定できず、細かい動きは表現できないようです。これは移動プログラムのロジックが、整数の足し算引き算のパターンで実装されているためだと思われます。

なお、ドモグラムの水平垂直方向の速度はスクロールと同一です。従って、上方向に移動するドモグラムは画面に対して静止して見えます(上方向にフレームアウトすることは絶対にありません)。

方向の指定

方向は図のような番号が割り振られており、32方向へ進行することができます。なお、ドモグラムは方向によって移動速度が違います。この頃のゲームによくあるように、斜め45度は1.4(√2)倍の速度になります。プログラム上は方向によって、1フレーム毎に1ずつ進む、2フレーム毎に1ずつ進む、またはその方向には進まない、といった具合のX,Yの組み合わせで表現されているのだと思います。

移動方向番号(16進数)
移動方向番号(16進数)

ちなみに「エリア15では高速ドモグラムが出現する」という情報を見たことがあるかも知れませんが、これは半分合っていますが、全体的に見れば間違っています。ロジックの関係で斜め45度の移動が最も速いため、その角度のみで移動するドモグラムは速く見えますし、事実速いのです。しかし、他の場所でも斜めに移動するドモグラムはまったく同じ速度であり、エリア15だけが特別な訳ではありません。その証拠に、エリア10のドモグラムは水平または垂直に移動するものと、斜めに移動するもののタイミングが完全に合っています。

また、エリア7は斜めに動くとき速くなり、水平あるいは垂直に動くときは遅くなります(盆踊りと呼ばれる所以のひとつ)。それから良く見ていると、スクロールアウト直前に草地の方へ離脱していく姿が見えます。最後の方向転換をプログラムしていないためなのですが、なんとなく幕が下りた後に気を抜いてフライング解散しているように見えて笑えます。

仕様上はかなり滑な動きができる

このようにドモグラムの移動方向はかなり細かく設定できるのですが、エリア7の盆踊りは45度で多角形を描くように動かしています。これは実際に自分で設定してみれば分かりますが、出現開始がスクロールと同期させるしかなく、最初にスクロールインするドモグラムとそれに続くドモグラムでは出現位置をずらして設定しなければならない(32フレーム後に出現するほうは、そのフレーム分動いた後の場所から動きをプログラムする)ため、複数のドモグラムの動きを同期させるのが難しいのです。そういった制約もあり、盆踊りを手打ちでプログラムするのが当時としては大変だったんだろうと推察します。もし適切にプログラムできれば、非常に滑らかな曲線を運動するドモグラムを作ることも可能です。

また、この部分は解析しておりませんが、角度毎の動きパターンはテーブル化されていると思います。角度は32ありますが、1バイトなため物理的には33~255まで設定でき、それらを設定すると奇妙な動きをします。これには法則性が無いことから、パターン定義の領域を超えて他のメモリを参照していると思われます。中には、スクロールスピードを超えた超速になる値もあるので、うまく活用すると面白い動きをプログラムできそうです。

設定する上での注意点

まず、必ず画面の上からしか出現させられないことです。出現のタイミングは他の固定地上物と同様にスクロール位置で取ってる関係で、画面横や下からは出現させることはできません。このため複数の機体で同調して動かしたいときに、かなり面倒なことになります。当時としては、方眼紙や手計算で行ったはずですから、盆踊りやマイムマイムの動きには苦労したはずです。

先ほど、画面横からは出現させられないと言いましたが、画面外を走らせて横から出現したっぽい演出ができます。具体的には、横位置を0x00にして画面の1キャラ右を下方向に走らせ、出現させたい位置で画面内へ転進させるようにします。ただし、画面外の走行中も弾を撃って来ますので、攻撃頻度を最低にしておいたほうがいいでしょう(途中で頻度は変更できないので、ほとんど攻撃してこない機体にはなってしまいますが)。

また、地上物の管理テーブルは14個しかありませんので、北上させてずっと画面内に出しておく場合、14個目の地上物が現れる前に画面外へ行かせましょう。そうしないと、突然消えたりワープしたりしてしまいます。また、斜め上方向で画面外へ出す場合は、画面外で下方向へ転進させておくと安心です。

品川 2-10 の消印
品川 2-10 の消印

読んでいて微妙に日本語の違和感を感じますが、やっぱりアチラの方なんでしょうか。この「内容の旨」(「旨」が内容って意味だから、内容の内容?)とか明らかに日本人じゃないよね。ニュースでやってたけど、同じ“内容の旨”のハガキが、ここ最近多く届いているらしい。

ちなみに、住所は墨田区役所まんまだけど、電話番号(0120-959-346)で検索すると「太陽光発電」の勧誘もやってるらしい。消費者トラブル総合センターも多角経営してるんですね、立派なもんです。