今日はスーパーファミコンの発売日(1990年)。
スーファミね…持ってなかったし、ほとんど遊んでもいないのでよくわかりません (^^;;
ファミコンほどには売れなかった、と言っても当時かなり売れたはずなのですけど、全然遊んでいない。
まぁ遊んでない理由もわかっていて、当時の僕は MSX2 ~ X68000 に夢中だったのです。
でも、大学時代にバイトさせてもらったゲーム作成会社では、当然ながらスーファミのゲームを作っていました。
6502 のプログラムは出来たので、非常に小さなルーチンを頼まれて(というか、どの程度プログラムできるかのテストで)作りました。
非常に簡単なものだったので30分程度でちょいちょいと作りましたが、与えられたマシンにはアセンブラ環境がなかったので頭の中で動作テスト、シンタックスエラーがないか再度確認して、1時間程度で提出。
プログラムに組み込むと、一発で動作したので「すごい」と認めてもらいました。
このプログラム、そのまま製品版にも入っていて、このプログラムを作っただけなのに「サブプログラマー」として名前をスタッフロールに入れてくれました。
(「将来有望な逸材だから囲い込みたい」とう思惑もあった模様。あとで大学辞めて就職しないか、と誘われたのですがお断りしました。)
まぁ、使われたプログラムがそれだけだった、というだけで、ゲーム作成時に必要になった開発用の周辺ツールをずいぶん作ったのですけどね。
その関係で、1バイトもプログラムしていないゲームにまで(ツール作成したので)サブプログラマーで載っていたり…
その会社では当初はデータ整理などの雑用をやっていたのですが、「プログラムができる」とわかったときから、社外秘の仕様書などにもアクセスが認められました。
ゲームボーイの CPU 資料などを見たのもその時ですし、スーファミの仕様書も見させてもらいました。
追加仕様書…というか、任天堂の開発中機材の事前説明なんてのもあった。もちろん社外秘。
スーファミに CD-ROM くっつけて、ベクトル演算可能な DSP 載せてポリゴンゲームを作れるようにする、なんて説明も読みましたよ。後のプレステとして有名な、ソニーと開発していたというハードですね。
「きみなら、このハードでどんなゲーム作る?」なんて聞かれました。CD-ROM のアクセスは遅いので、大容量よりもポリゴン表示を中心に考えたほうがいいんでしょうねぇ、なんて答えで、具体的アイディアは出せなかったと思います。
その会社では CD-i のゲームも作っていて、CD-i 用タイトルの移植を考えていたようで、「CD-ROM は遅い」に苦笑していました。
ソニー開発の CD-ROM 部分は後にプレステに、任天堂開発のポリゴン DSP 部分は後に FX チップとしてカートリッジ内蔵で使われましたね。
以下、当時仕様書などを読んでいて仕入れた豆知識。
スーファミのゲームなどを作ったことがないため、豆知識レベルでとどまっていて、それを使って何ができる、とか具体例がありません (^^;
また、頭で覚えているだけなので勘違いなどもあるかも。
スーファミは非常に高速な乗算器を搭載しています。
2つのレジスタに乗数と被乗数をセットすると、次の命令で結果を取り出せます。なんと1クロック!
…じつは、計算中は CPU が停止する、というだけなんですけどね。
#今調べたら、乗算で 8clock 、除算で 16clock の待ち時間が必要とある。
記憶違いだったか、「すぐに読むと CPU が停止する」だったのかもしれない。
スーファミは、スプライトの優先順位を「スライド」させる指定を持ちます。
何に使うのかと言うと、同じようにスプライトを表示させていても、自動で「ちらついて」くれます。
すごい便利!
あ、この便利さは説明しないとわかって貰えないか。
ファミコンのゲームなどで、横に並ぶとスプライトが「ちらつく」現象がありましたが、あれはソフトで頑張っています。
スプライトと言うのは、横に並びすぎると「消える」もので、さすがに見えなくなっちゃうとゲームに支障が出るのね。
そこで、消えないで「ちらつく」ようにプログラムするの。見た目は悪いけど、ゲームへの影響は少なくなる。
スーファミは、この「ちらつき」機能をハードウェアでサポートしたのね。
でも、ソフトなら「主人公だけはちらつかないように」とかできるのだけど、ハードだと一律にちらつく。
ちらつくプログラムを作ることは全然難しくないので、この機能が活用されたのかは不明。
スーファミの ROM カートリッジは、同じ内容を別々のメモリアドレスで読み出せるようになっています。
そして、読み出すアドレスにより、CPU の速度が変わります。
何故そんなことに? と思うのだけど、これはわざと。
ROM というのは遅いもので、アクセスに待ち時間が必要でした。でも、高級な ROM になると高いけど速度が速くなる。
そこで、別々のアドレスでも物理的には同じメモリを参照するように作っておき、どのアドレスを使うかで CPU 速度を変えるようになっているのです。
製造コストとの兼ね合いで、高速アクセスしたいなら高い ROM を使えばいいし、安くしたいならアクセスを遅くすればいい。
将来も見越して、当時としては最高速の ROM でも出せない速度指定もあったと思います。
スーファミの CPU は 16bit で、アドレスは 24bit です。
8bit モードと 16bit モードが分離していて、命令で切り替えられます。8bit 時はファミコンの 6502 と互換になります。
16bit モードでは 16bit アクセスしかできないのですが、モード切替は遅いので、8bit アクセスが欲しいときは or や and で工夫するほうがずっと早かったはず。
24bit アドレスは、8bit のバンクと 16bit のアドレスで構成されます。
この各バンクのうち、下位 32Kbyte は常に「スーファミの内部 RAM」などが見え、上位 32KByte に「ROM の各バンク」が見えます。
これ、ファミコンで「内部 RAM などは下位 32KByte、ROM は上位 32KByte」だった名残ですね。
(スーファミは、途中までファミコンとの上位互換として開発されていました。)
でも、どのバンクにアクセス中でも内部 I/O などにはアクセスできるので、便利な構成でした。
メモリマップを書くと、不連続で妙なことになっていますが、もともと「バンク切り替え」なメモリマップだから、連続していることにあまり意味はないですね。
…って、当時は「社外秘」情報だったからネタになったけど、いまでは解析/リークなどで、ちょっと情報探すともっと詳細な記述がいくらでも見つかります。
ここでは自分の思い出として語った程度なので、詳細が知りたい人はいろいろ調べてみてください。
同じテーマの日記(最近の一覧)
別年同日の日記
申し訳ありませんが、現在意見投稿をできない状態にしています。 |