してログ

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

長期間使用していなかった 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)で検索すると「太陽光発電」の勧誘もやってるらしい。消費者トラブル総合センターも多角経営してるんですね、立派なもんです。

テレビの録画をニコニコ実況入れて保存するようにしてから、地上波見るの結構楽しくなってきました。つまらない番組でも実況あると、なんとなく面白く見えてくるので不思議です。もしかしたら地上波が生き残るチャンスかもしれませんよ~。

ただ、どの番組にも必ず荒らすバカはいるものです。そういったユーザーのコメントを消すのに NG ユーザ設定があるのですが、これが XML に出力するとき効いてないんですよね。XML って言ってもテキストファイルなので、今回はエディタなどを使って除去してみようと思います。

せっかくコメント入りの動画を作っても、しつこい卑猥なコメント野郎や意味不明な連投をするユーザがいると台無しです。そういったコメントに毎回反応する「○○○消えろ」とかいったコメントも迷惑。まとめて排除してしまいましょう。

正規表現を考えてみる

いきなりですが、特定のユーザ ID のコメントにヒットする正規表現を紹介します。正規表現が何なのか知らない人は申し訳ありませんがググってください(ここからはプログラミングの知識が必要です)。"NG-USER-ID-HERE" には消去したい NG ユーザの ID を調べて入れてください。また、正規表現は PHP の PCRE 用に書いたものですので、他の処理系では変更が必要かも知れません。

/<chat[^>]+?user_id="NG-USER-ID-HERE".+?<\/chat>/s

実際に除去してみる

正規表現が使えて UTF-8 が扱えるテキストエディタがあれば、上記正規表現を空文字に置き換えれば良いだけです。ただし、エディタによっては絵文字などが化けてしまうのでご注意ください(私が愛用している TeraPad は化けてしまうんですよね)。

プログラムができる人は、シェルスクリプトや PHP などを使ってバッチコマンドを作ると便利です。NG ユーザリストを外部ファイルで供給したり、キーワードによるフィルタなんかも作れば不快なコメントの問題はほぼ解決でしょう。

サンプルコード

私が作った PHP のコードを下記に示します。$xml にコメントデータを読み込み、$nguid にユーザーの ID が入っているものとします。

$reg = '/<chat[^>]+?user_id="'.$nguid.'".+?<\/chat>/s';
$xml = preg_replace($reg,'',$xml);

Font Awesome がメジャーバージョンアップしていたので、当サイトも Font Awesome 4 → 5 へ上げてみました。単に CSS の入れ替えだけではダメだったので、アップグレードのポイントを整理しておきます。

変更要点

  • 導入は on-server を配置し、fontawesome-all.min.css を読み込めば OK です
  • アイコンは系列クラスに分けられて、ソリッド系("fas" 塗りつぶしスタイル)、レギュラー系("far" 線画系)、ブランド系("fab" 各種サービスロゴ)、そしてプロ版のライト系("fal" 細い線画系)があります
  • Font Awesome 4 の "fa" クラスはソリッド系 "fas" に互換割り当てされているようです(従って、アイコン名が変更されているものを除き、後ろに "-o" が付かないものは変更なしで表示されます)
  • Font Awesome 4 でアイコン名の後ろが "-o" になっているものは、Font Awesome 5 ではレキュラー系列 "far" に変更します(例:"fa newspaper-o" → "far newspaper")
  • それでも表示されないものは、アイコン名が変更されているので個別に調べて変更します

ソリッド系(fas)

レギュラー系(far)

ブランド系(fab)

Font Awesome の利点と課題

Font Awesome は 4 の頃から使っていますが、アイコンに関してほぼ困ることが無くなりました。ウェブ制作のみに限らず、開発における様々なシーンで適用可能で、アイコン制作にかける時間はかなり短縮できています。特にウェブシステム開発では、アイコン画像を無くすことができ、サイズ変更も容易なためメンテナンス性の向上は計り知れません。

いっぽう少なからず課題もあります。まず、日本でメジャーなブランド系、規格などの日本にマッチしたアイコンの不足です。個人的に欲しいと思ったのは、オリヅル、サクラ、モミジ、オニギリ、熨斗、日本列島、などです。系列を拡張できるなら、ジャパン系 "faj" とか作ったらいいかも知れません。

もう一点は、小さめのアイコンの系列です。リストのリーダとして利用する場合、標準のサイズでは大きいと思います。アイコンサイズを "fa-xs" などで小さくできるのは知っていますが、真ん中に来ないし位置合わせ等気にするのが嫌ですね。文字と同じサイズ指定で小さめのアイコンがあれば、もっと使い易くなると思います。

また、丸付き数字や四角付き数字はベタで30ぐらいまで欲しいかなと思います。これらは一個も無いので、シェイプ系のベースアイコンと他のアイコンや文字を組み合わせたいのだと思います。しかし、サクッと使いたい場面が結構あり、組み合わせるのに神経を使うのでは意味が無いです。

追記

アイコンの組み合わせですが、前あった fa-stack が効かないので調べたら fa-layers + JavaScript になったっぽい。そもそも Font-Awesome 5 自体が SVG + JavaScript を推奨してるようなので、<i> は互換性のため基本的な部分を残しているのかも知れません。

この fa-stack や fa-layers は自由な半面コードを複雑にするだけだと思うんですよね。もう少し使い方を制限してもいいので、簡潔な書き方で利用できるようになるといいですね。

いいえ
いいえ

今さっきのこと、動作が非常に重くなってフォント関係が表示されないようになったんです。タスクマネージャひらいでも、文字のとこが何も表示されてなくて、タブなんかも文字が表示されてないから薄ペラく左に寄って崩れた表示になるんですね。昔のOSでリソース不足を起こして正常に表示されなくなったような感じにです。

しょうがないので、再起動をしたんですがこれがエラく待たされるんです。シャットダウンのぐるぐるがなかなか出てこない。出てきたと思ったら「えっ」。「Windowsを構成しています○%」…。再起動するとき「更新して再起動」とか書いてなかったし、更新するんだったらやらなかったし。

えらく重かったのも、裏でアップデートしてたんだろ。結構集中して仕事してたのに、ユーザーに断りも無く作業に支障をきたすほど重くしておいて、挙句の果てに勝手に更新し始める(始めていた)とか。本当にバカにしてるとしか思えません。

こんな予期せずアップデートが始まるんだったら、仕事になんか使えないっつうの。この記事を書き始まるまでに、10分いやそれ以上待ってやっとです。もう、再起動前にやってた仕事なんか止めてコレ書いてるよ。

書き始めてもまだなんかやってるらしく、変換が遅かったり、デスクトップやタスクバーのアイコンが再描画されたりで、もうなんなの。前は Windows アップデートで3時間もかかったことあったし、いつの時代ですかね、ねー、マイクソソフト。こんなんなら Windows 2000 や XP のほうがまだ安心して使ってられるじゃねーか。

今まで、BOM 付き UTF-8 のテキストデータを扱う時、substr($str,3) とかで BOM を取り除いていたのですが、これだと BOM 無しの UTF-8N ではデータまで削ってしまいます。どちらでもうまく処理できるように、正規表現で書き直してみましたので今度からはこちらで行きます。

$str = preg_replace('/^\xEF\xBB\xBF/','',$str);

なお、PHP コード自体は BOM 無しの UTF-8N で書く必要があります。普段 UTF-8N で保存できるエディタを使用していても、本番環境などでうっかり Windows のメモ帳なんかで編集してしまうと、予期せぬエラーを招くので要注意です。

これめんどくさいから言語のほうで吸収してくれんかなと、ときどき思います。それか、UTF-8 と UTF-8N をはっきり区別して扱えるようにしてほしい。せっかく文字コードで悩まなくて済むようになったはずなのに、こういう混乱を招く仕様をなぜ入れてしまったのだろうか。