忍者ブログ
ホムペもみてね。 かにかにクラブ http://kani.no.coocan.jp/
上段メニュー開閉(JAVAスクリプト有効時のみ)
カレンダー
02 2024/03 04
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
最新記事
最新コメント
タイトル横の画像は管理人から返信ありマークです
無題  [10/29 AWJ]
無題  [10/29 AWJ]
無題  [10/28 AWJ]
無題  [10/28 AWJ]
無題  [10/27 AWJ]
無題  [10/25 yasu]
無題  [07/15 まい''ん]
無題  [04/17 まい'ん]
無題  [03/13 km]
無題  [03/13 km]
アーカイブ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

シューティングゲーム探究記
ギャプラス「アブノシップ変形完全解明」
http://d.hatena.ne.jp/replicorn/20090303

こちらの管理人のreplicornさんから
100点じゃなくても変身できることを教えていただいた。
そちらの内容への自分なりの考察だが、あんまり向こうに長々と書くと、
 他人の手柄を自分の手柄のように解説する痛々しい人
にしか見えない予感がするのでここに書いておく。

先に断っておくが、
自分は気に入ったゲームのプログラムの解読は絶対にやらない。
解読したと誤解されることも不快なくらいこだわりがある。
ここに書いていることは、見た目から逆にプログラムを想像しているだけである。
推理するのが楽しいのにいきなり解答を見てどうすんのよ、て感じ。
そこんとこよろしく。

そんではスタート

----------------

> 十万,一万,千,百の4つの桁の並びが
> 0001 0100 0101 はOKという法則性から
> 0000 もいけそうなのにそれはNGなのはなぜか

(1) 当時のプログラムは、
ゲームの点数のような桁数が多い十進数は、パックドBCDという考え方を使い、
2桁ずつを1バイトにセットしてメモリ上に連続して並べるのが普通でした。

(2) 当時のプログラムは、
実行命令数(厳密には実行サイクル数)を可能な限り節約して
全体的な処理速度をいかに上げるかを追求するのが当たり前でした。
(現在でもその追求は有益ですが)

(3) この件でプログラマが求めていたものは 「0001であること」だと思います。
しかし、どうしてもこの数字でなければならない、というほど厳密である必要はありません。

これをプログラマ視点で考えると

(1) 2バイトまとめて読む命令があるからそれで4桁の情報を読もう。
(2) 2バイトの上半と下半を分けて OR命令 でくっつけると 0001 0100 0101 の3パターンが 01 になるぞ。
(3) 0100 0101 が暴発するけど、9999通りの中のたった2つだからどうってことないよ。オマケってことにしよう。
(4) 01 かどうかの判定は DEC命令 を使うと超速いぞ。

高速化のためにOR命令やAND命令を使うのはアセンブリ言語プログラマからするとセオリーってやつです。
「100点でなく10100点でも可」を読んだ瞬間に「あ、ORしてんのか?」と思った程ポピュラーなセオリーです。
ついでに
00 かどうかの判定は ANDかOR
FF かどうかの判定は INC
を使うのもセオリー。

こんな感じで 0100 0101 はたまたまオマケでOKになったんじゃないでしょうか。
0000 は始めから眼中にないわけです。

----------以下 3月6日追記

アイマスのオーディション待ち中にボーっと考えてて気づいたけど

(1)上下をORで合成
(2)合成結果をDEC
(3)0001 0100 0101 ならBEQ成立

(1)下をDEC
(2)上下をANDまたはORで合成
(3)00001 なら BEQ成立

(1)上下をORで合成
(2)合成結果をDEC
(3)0000 0001 0100 0101 ならBLE成立

どれも同一クロックで検査できるわ。
せめて30分くらいは考えてから書けばよかったか。

でも、厳密である必要はないからおまけで採用、という説は撤回しない。
当時は開発ツールも未熟で、ちょっとした間違いを発見しても
それを修正するのに結構な手間がかかったと想像できるので。
PR
リンク
最新トラックバック
RSS
QRコード
プロフィール
HN:
かに凹・_・凹かに
下段メニュー開閉(JAVAスクリプト有効時のみ)
忍者ブログ [PR]