ファミコン時代のプログラムに関して思い出

元ナムコプログラマーさんによるファミコンプログラミングの思い出話
19
大森田不可止 @omorita

SF大会で使えるかどうか分からないけど、ファミコン時代のプログラムに関して思い出して書き留めようと思う。ナムコでファミコン解析チームだった私はまずはPascalでラベル付き逆アセンブラを作って他社のプログラムを解析してた。CPUは6502と分かったので意外と簡単に作れた。

2014-07-07 20:33:22
大森田不可止 @omorita

ファミコンの他社のプログラムを(当時は任天堂とハドソンぐらいか)解析しつつ、プログラムテクニックを学んだ。当時発売されてたほとんどのゲームを解析した。逆アセンブラもテクニックの向上に合わせて進化した。未知のポートの使い方も分かったし、6502の全ての命令が使えないことも分かった。

2014-07-07 20:39:27
大森田不可止 @omorita

当時はZ80が全盛の頃で、6502はアップルIIのCPUなので、アップルオタクくらいしか知らなかった。でも、テクニックを学ぶと6502は使い勝手が良かった。レジスタは3つしか無いけど、ゼロページっていうアドレスの最初の256バイトがレジスタ並に使いやすい。

2014-07-07 20:43:47
大森田不可止 @omorita

ナムコがファミコンに参入したとき、新入社員のU君が解析担当になり、課長に「60Hがリターンコードっぽいんでけど・・・」と報告。アップルオタクの課長が「それは6502じゃないか?」と答えたところから、ナムコのファミコン参入が決まったんだよな。歴史的瞬間を目撃してるわけだ。

2014-07-07 20:47:22
大森田不可止 @omorita

それ以前に、ファミコンの解析を進めたのは、Knightさんがファミコンを会社に持ち込み、昼休みに遊んでいて、それを見た課長が、出来の良さに興奮して、当時はMSXを作ってたんだが、「次はこれだ!」と決断したのだな。ファミコンはTVで表示した時の絵がダントツに綺麗だった。

2014-07-07 20:53:19
大森田不可止 @omorita

ナムコのファミコン参入を決めてからは電光石火。ハード・ソフトの技術者が寄ってたかって解析。ハードのバグまでを炙り出してた。最初の担当のUくんがギャラクシアンを作って、任天堂に「これ発売しますんで」と挨拶に行った。任天堂は慌てた。ナムコは1本あたり百円払うからと譲歩をして発売。

2014-07-07 20:58:03
大森田不可止 @omorita

ファミコン参入したナムコは過去のゲームを端から移植。プログラムは新人からベテランまで総出。最初の10本くらいは平均で百万売れてたんじゃないかな?ダントツはゼビウスだけど。粗利数千円で1千万本売れたんだから、利益は推して知るべし。

2014-07-07 21:03:07
大森田不可止 @omorita

ファミコンのCPU、6502は面白いCPU。大学生の時に仙台のマイコンショップで「エイリアンタイフーン」ってゲームを作ったトニー鈴木に会ったとき、「プログラムはベーシックと少しのアセンブラで作った」と聞いた。収入は月200万くらいと言ってたのを聞いてゲーム業界に興味をもった。

2014-07-07 21:10:33
大森田不可止 @omorita

ファミコンの時代、スプライトは4つまでしか横並び出来無かった。私は優先順位を毎インタラプト逆転させることで、8個までは表示できるようにした。ギャラガはそれで良かった。だけど、コナミは上を行った。もっとランダムに優先順位を変えることで対応した。これは見習わせてもらったな。

2014-07-07 21:22:32
大森田不可止 @omorita

ファミコン話。ファミコンは16x16のスプライトが真横に4個しか並ばない。ギャラガは優先順位を反転させて8個まで表示できるようにした。コナミは2つの素数A,Bを使って、優先順位先頭をA毎に選び、次のスプライトをB毎に選ぶシャッフルを行ってた。ファミコン、グラディウスでやってた。

2014-07-08 19:17:04
大森田不可止 @omorita

ファミコン、スプライトの工夫。ギャラガでは、マイ・シップ、移動ギャラガ、弾がスプライト。そして背景で流れる星も。上空で膨張収縮するギャラガはBG。なので、忙しい局面で星が減ってるんだけど、誰も気付かなかったな。

2014-07-08 19:20:57
大森田不可止 @omorita

ファミコン、スプライトの工夫。いただきストリートでもスプライト不足。主に、キャラクターの顔のアニメーションする時。実は下のマップで色数制限で表示できない色にスプライトを使ってた。アニメーションの時だけ、そのスプライトを借りてくることがあった。これは、気付いた人が結構いた。

2014-07-08 19:24:08
大森田不可止 @omorita

ファミコンのCPU6502。インストラクションセットは今でもネットで見つかるんだな。 hp.vector.co.jp/authors/VA0423… 命令をプリフェッチして、RISCチップの元祖みたいな動きをしてた。なので、サイクルは短め。Z80より軽量、高速なイメージだったな。

2014-07-08 19:29:32
大森田不可止 @omorita

ファミコンのRAMは2KB。000H-800Hって事だな。そのうち、000H-0FFHはゼロページ、レジスタ代わりに使える便利なRAM。100H-1FFHはスタック。私はスタックを複数持たせて、マルチスレッドでプログラムしてた。ナムコの頃は「ジョブコン」と呼んでたテクニック。

2014-07-08 19:34:13
大森田不可止 @omorita

ファミコンのテクニック、画面分割。後にはカスタムチップを載せてハードウェア割り込みで画面分割してたけど、最初にやった時は0番スプライトがBGとのヒットチェックを行うことを利用した。縦画面を選択して、ヒットしそうなタイミングで待って、特定の画面を下画面にセットすることが出来た。

2014-07-08 19:48:18
大森田不可止 @omorita

ファミコンのテクニック、画面分割。上画面は上下左右にスクロールするんだけど、一辺に書き換えるのは負荷が大きい。なので、固定画面の残りを2画面分として同時に書き換えて、画面の端にきた段階でもう一方の画面を表示するテクニックを使ってる。1回で書き換える量は常に一定なので、安定する。

2014-07-08 19:52:07