大森田不可止氏によるナムコのファミコン参入時の話
- Kenzoo6601
- 102826
- 509
- 169
- 213
↑上記ダウンロードページの「80年代・90年代のゲーム開発環境について」にも関連情報があります。
SF大会で使えるかどうか分からないけど、ファミコン時代のプログラムに関して思い出して書き留めようと思う。ナムコでファミコン解析チームだった私はまずはPascalでラベル付き逆アセンブラを作って他社のプログラムを解析してた。CPUは6502と分かったので意外と簡単に作れた。
2014-07-07 20:33:22ファミコンの他社のプログラムを(当時は任天堂とハドソンぐらいか)解析しつつ、プログラムテクニックを学んだ。当時発売されてたほとんどのゲームを解析した。逆アセンブラもテクニックの向上に合わせて進化した。未知のポートの使い方も分かったし、6502の全ての命令が使えないことも分かった。
2014-07-07 20:39:27当時はZ80が全盛の頃で、6502はアップルIIのCPUなので、アップルオタクくらいしか知らなかった。でも、テクニックを学ぶと6502は使い勝手が良かった。レジスタは3つしか無いけど、ゼロページっていうアドレスの最初の256バイトがレジスタ並に使いやすい。
2014-07-07 20:43:47ナムコがファミコンに参入したとき、新入社員のU君が解析担当になり、課長に「60Hがリターンコードっぽいんでけど・・・」と報告。アップルオタクの課長が「それは6502じゃないか?」と答えたところから、ナムコのファミコン参入が決まったんだよな。歴史的瞬間を目撃してるわけだ。
2014-07-07 20:47:22それ以前に、ファミコンの解析を進めたのは、Knightさんがファミコンを会社に持ち込み、昼休みに遊んでいて、それを見た課長が、出来の良さに興奮して、当時はMSXを作ってたんだが、「次はこれだ!」と決断したのだな。ファミコンはTVで表示した時の絵がダントツに綺麗だった。
2014-07-07 20:53:19ナムコのファミコン参入を決めてからは電光石火。ハード・ソフトの技術者が寄ってたかって解析。ハードのバグまでを炙り出してた。最初の担当のUくんがギャラクシアンを作って、任天堂に「これ発売しますんで」と挨拶に行った。任天堂は慌てた。ナムコは1本あたり百円払うからと譲歩をして発売。
2014-07-07 20:58:03ファミコン参入したナムコは過去のゲームを端から移植。プログラムは新人からベテランまで総出。最初の10本くらいは平均で百万売れてたんじゃないかな?ダントツはゼビウスだけど。粗利数千円で1千万本売れたんだから、利益は推して知るべし。
2014-07-07 21:03:07以下、その後の関連ツイートです。
ファミコンのCPU、6502は面白いCPU。大学生の時に仙台のマイコンショップで「エイリアンタイフーン」ってゲームを作ったトニー鈴木に会ったとき、「プログラムはベーシックと少しのアセンブラで作った」と聞いた。収入は月200万くらいと言ってたのを聞いてゲーム業界に興味をもった。
2014-07-07 21:10:33ファミコンの時代、スプライトは4つまでしか横並び出来無かった。私は優先順位を毎インタラプト逆転させることで、8個までは表示できるようにした。ギャラガはそれで良かった。だけど、コナミは上を行った。もっとランダムに優先順位を変えることで対応した。これは見習わせてもらったな。
2014-07-07 21:22:32ファミコン話。ファミコンは16x16のスプライトが真横に4個しか並ばない。ギャラガは優先順位を反転させて8個まで表示できるようにした。コナミは2つの素数A,Bを使って、優先順位先頭をA毎に選び、次のスプライトをB毎に選ぶシャッフルを行ってた。ファミコン、グラディウスでやってた。
2014-07-08 19:17:04ファミコン、スプライトの工夫。ギャラガでは、マイ・シップ、移動ギャラガ、弾がスプライト。そして背景で流れる星も。上空で膨張収縮するギャラガはBG。なので、忙しい局面で星が減ってるんだけど、誰も気付かなかったな。
2014-07-08 19:20:57ファミコン、スプライトの工夫。いただきストリートでもスプライト不足。主に、キャラクターの顔のアニメーションする時。実は下のマップで色数制限で表示できない色にスプライトを使ってた。アニメーションの時だけ、そのスプライトを借りてくることがあった。これは、気付いた人が結構いた。
2014-07-08 19:24:08ファミコンのCPU6502。インストラクションセットは今でもネットで見つかるんだな。 hp.vector.co.jp/authors/VA0423… 命令をプリフェッチして、RISCチップの元祖みたいな動きをしてた。なので、サイクルは短め。Z80より軽量、高速なイメージだったな。
2014-07-08 19:29:32ファミコンのRAMは2KB。000H-800Hって事だな。そのうち、000H-0FFHはゼロページ、レジスタ代わりに使える便利なRAM。100H-1FFHはスタック。私はスタックを複数持たせて、マルチスレッドでプログラムしてた。ナムコの頃は「ジョブコン」と呼んでたテクニック。
2014-07-08 19:34:13ファミコンのテクニック、画面分割。後にはカスタムチップを載せてハードウェア割り込みで画面分割してたけど、最初にやった時は0番スプライトがBGとのヒットチェックを行うことを利用した。縦画面を選択して、ヒットしそうなタイミングで待って、特定の画面を下画面にセットすることが出来た。
2014-07-08 19:48:18ファミコンのテクニック、画面分割。上画面は上下左右にスクロールするんだけど、一辺に書き換えるのは負荷が大きい。なので、固定画面の残りを2画面分として同時に書き換えて、画面の端にきた段階でもう一方の画面を表示するテクニックを使ってる。1回で書き換える量は常に一定なので、安定する。
2014-07-08 19:52:07ファミコン話。ナムコをスピンオフしてゲームスタジオを立ち上げた時、ナムコから業務用開発用のHP64000ってコンピュータを借りた。当然ファミコン開発環境は無いのだけど、HP64000のアセンブラの強力なマクロ機能で、ファミコン用のアセンブラを作っちゃったな。
2014-07-09 20:08:56ファミコン話。その頃になると、6502のインストラクションから16進表現、クロック数まで頭の中には入ってた。若いって素晴らしいwクロック数を数えてタイミングを測るのは、その後も組込系をやるときには役立った。まぁ、クロック数まで厳密なプログラムが要求されることはめったにないけど。
2014-07-09 20:13:29ファミコン話。いただきストリートを作った時は思考ルーチン作るのに掛け算が必要なんだけど、コストが高すぎて断念。8ビットの対数テーブルを導入した。扱う数を8ビットに丸めて対数表を引くから、2重に大雑把な計算になる。おかげで、大雑把な人間的思考ルーチンになったと思う。
2014-07-09 20:17:49(PC-6601に)夜な夜な無体なことを強要しては怪しい声をあげさせている人……らしい? 気まぐれアオスケなので他人へのツッコミが中心になりそうな気が。 http://tiny-p.cocolog-nifty.com/