こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ファミコン時代のプログラムについて

1985年ごろには既に多くの優秀なゲームが発売されていましたが、
たった2年くらいで当時のプログラマーは、ファミコンのプログラムを
マスターしていたのですか?

もちろんC言語のように複雑ではないでしょうが、
それにしてもドラクエのウインドウシステムをはじめとして
ああいった柔軟なプログラムを開発してしまうというのは
一般人の目からすると驚異的です。

それとも、今現在のプログラマの方からすれば、
当時のファミコンプログラムは全般的に容易だったのでしょうか?

蛇足ですが、FF3のナーシァ氏のプログラムは難解で
誰もわからなかった、という有名な伝説がありますが、
これは今で言うところの変数の使い方などにクセがあった、
というような解釈でいいのでしょうか?

投稿日時 - 2008-02-19 00:47:57

QNo.3789075

暇なときに回答ください

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

 ファミコンのCPUはMOS6502という種類のものなのですが、これはMC6800やMC6809とは近縁にあたるCPUで、アーキテクチュアが良く似ています。以下のようなものです。

 ◎レジスタ構成

 プログラムカウンタ:PC(16ビット)
 アキュームレータ:AccA(8ビット)
 インデックスレジスタ:X(8ビット)
 インデックスレジスタ:Y(8ビット)
 スタックポインタ:SP(8ビット)
 コンディションコードレジスタ:CCR(8ビット)

 6502はアドレスが16ビットで64KBまでアクセス可能なのは通常の8ビットCPUと同じなのですが、アキュームレータ(演算レジスタ)が1つしかなく、インデックスレジスタは2つありますが、使い方が違っていて、オフセット値として計算するもの、間接アドレッシングで使うものなど、様々な用途別の使い方がされるようで、ゼロページ(0000H~00FFH)にポインタを置いて使用するように設計されているようです。

 ファミコンに限らず、APPLEIIなどのパソコンも同じですが、6502を使用するコンピュータは8ビットコンピュータの常識とは多少違った設計になっている例が多いようです。

 6502のアーキテクチュアはMC6809で使われている多機能なアドレッシング方式を必要最低限のものだけに簡素化して作ったような方式のようで、その為に多少癖の多いプログラムを組まなければならないようです。

 ファミコンの開発環境がどうだったかは知る由もありませんが、当時のパソコンやゲーム機の開発環境はどこも同じで、アセンブラ開発か、ハンドアセンブルで直接機械語のプログラムを組むしかなく、現在のCコンパイラによる開発環境とは大きく違っていたと考えて良いでしょう。

 レジスタ数が少ないので、ほとんどの演算はゼロページ(256バイト)上でおこなっていたと考えられますし、6502は2段式の原始的なパイプライン処理をおこなっていたので、他のCPUに比べて計算速度が高速であり、ファミコンに使用されたのも、それが原因だろうと思われます。

 ファミコンはMSXパソコンでも使われたスプライト機能、PCG、ハードスクロール、カラーパレット、2画面表示などがあり、ドットカラーで表示出来るなど、当時としては先駆的な設計のゲーム機でしたが、Z80や6809のような16ビットレジスタの数が多いCPUを使ってプログラムを作っていた人が6502の少ない8ビットレジスタだけのプログラムを組むのは発想を大きく変えなければならないので大変だっただろうと思います。

 8ビットCPUのプログラムをいくつか作った後で、32ビットCPUのプログラムを作ると、命令が多機能なのに非常に無駄が多いプログラムしか作れないような気がしますが、それと類似したところがあります。

 メモリーが高価で節約しなければならなかった当時は、6502のような最小限で最高速のCPUが必要だったのでしょう。

 なお、ドラクエのウインドウシステムは現在のパソコンで使われている86系CPUでは命令が多機能化し、レジスタ数も多いので、ポインタの移動などが楽であり、比較的容易に作ることが出来ます。

投稿日時 - 2011-02-19 22:39:33

ANo.5

今と違って当時のユーザーは全員プログラマーでした
今のようにOAツールを使った程度ではコンピューターユーザーとは認められませんでした
アッセンブラなんて夢のまた夢、ハンドアッセンブルが当たり前の時代だったのです
今のプログラマーは幸せです
ハード構成を知らなくてもプログラムが組めるのですから
ということで当時のファミコンのプログラマーの多くはソフト開発会社の社長さんになっておられます

難解なプログラムというのは入り組んだプログラムで解析が困難なものを言うのです
ディスアッセンブラやソースゼネレーターを使っても何が何だか分からない
もつれたいとのようなプログラムです
俗にスパゲティープログラムと呼んでいます

投稿日時 - 2010-12-27 13:00:54

ANo.4

 昔は「パソコンが使える=プログラムが組める」といっていいぐらいでしたからね。アセンブリ言語どころか16進コードを直接打ち込んだ経験のある一般ユーザーが珍しくなかったってぐらいですから。そんな中での頂点となりゃそりゃスゴイものです。

投稿日時 - 2008-02-20 02:55:02

ANo.3

FCのゲームは、アセンブリ言語でプログラムされています。
CPUは、6502です。AppleIIも同じですね。CPUの元祖みたいなものです。
当時は、速度が要求されるものはほとんどアセンブリ言語です。
プログラマは、スキルの高い人が多かったようにも思います。
FCは、いい加減なプログラムを書くと、ハングアップしたりしました。
でも、一旦要領を得れば難しいところはそれほどないです。
それよりRAMが少ないのでそちらのほうが大変です。

C言語ならMSX-Cというものがありました。
80系です。
なかなか良くできたコンパイラでしたね。
コードを見ると、これを作った人は天才か?と思ったりしたものです。

投稿日時 - 2008-02-19 18:28:40

ANo.2

余談ですが、ゲーム機関連でC言語に移行したのは比較的最近だ、と聞いています。多分スーパーファミコン辺りまでアセンブリ言語でガリガリとコーディングしてたんだはないか、と。
転換期はCDドライヴ付きのゲーム機が標準になった辺りとRISPプロセッサが搭載されはじめた辺りじゃないでしょうか?特にCDドライヴの場合、汎用コンピュータと同じようにOSが搭載されはじめたから、です。
それ以前はゲーム同士で互換性の問題なんて考えなくて済んだ、と言う事もありますし、#1さんが仰るとおり、アセンブリ言語でガリガリコーディングするのが主流だったと聞いています。

投稿日時 - 2008-02-19 18:08:48

ANo.1

ファミコンのプログラムはC言語ではなく、アセンブリ言語という物で作成するのですが、C言語よりももっと複雑(というか面倒です)
変数という概念も無く、「メモリのどこそこに値を書き込め」とか「読み出せ」とかそういう細かい命令を組み合わせてプログラミングします。

ちなみにファミコンのハードウェア自体はわりと単純な作りですのでファミコンで動くプログラムはわりと早くマスターできるのではないかと思います。

ナーシア氏のプログラムが難解だったというのはおそらく限られた性能のファミコンでできるだけ処理速度を稼ぐために、人力で驚異的な最適化を行ったためにプログラムの可読性が低くなったのだと思います。

投稿日時 - 2008-02-19 13:54:25

あなたにオススメの質問