アカウント名:
パスワード:
元サードパーティーのプログラマのチラ裏です。記憶にたよってるので細かい間違いはご容赦を。
ネオジオは、グラフィックが16×512ドットサイズのスプライト(LSP Line SPlite)しかないという変態ハードでした。このスプライトを敷き詰めて背景にしたり、いくつか横にくっつけてキャラにしたりするわけです。(画面は320×240(NTSC)で仮想画面512×512、LSPの上下はループ)
しかもスプライトに置くキャラクタの書き換えはI/O経由(MMI/Oだったかも)で、キャラROMの単位である16×16のキャラクタを一つ書き込んだら次のキャラを書き込むまで12clockの待ちが要る…という素敵仕様でした。まともにやったら縦スクロールは厳しいです。(その代わり、キャラROM上で隣接する4キャラをハードウエアで順番に表示するアニメーション機能があった。背景で4コマでアニメしているものはたいていこの機能を使っている)
当時は、仮想画面をバッファに使って、V-Syncと非同期に画面からはみ出した部分を書き換える、という方法で、高速に対応した縦スクロールを実装しました。(当時SDに載ってた非同期I/O実装の記事を参考にした)実際のゲームでは処理落ちに合わせてストップしたり…というブレーキを追加することになりましたが…orz
#当時在籍した会社で教材がわりにソースを読んだ8方向スクロールのレースゲーは、HーSyncのタイミングも使って背景用スプライトを動かしつつ書き換える…という方法を取っている、ここまでしか理解できませんでしたorz
#NEOGEOの話で出てくる奴で特定されそうだからIDでいいや
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生unstable -- あるハッカー
ゲームのプログラムをのぞくと・・・ (スコア:3, 興味深い)
あと派手なゲームほど、かなり内部では高度なリソース管理をしていてびっくり。
NEOGEOの表現力の半分は当時のプログラマ等の努力と言えるんではないでしょうか。
Re:ゲームのプログラムをのぞくと・・・ (スコア:4, 興味深い)
元サードパーティーのプログラマのチラ裏です。
記憶にたよってるので細かい間違いはご容赦を。
ネオジオは、グラフィックが16×512ドットサイズの
スプライト(LSP Line SPlite)しかないという変態ハードでした。
このスプライトを敷き詰めて背景にしたり、いくつか横にくっつけて
キャラにしたりするわけです。
(画面は320×240(NTSC)で仮想画面512×512、LSPの上下はループ)
しかもスプライトに置くキャラクタの書き換えは
I/O経由(MMI/Oだったかも)で、キャラROMの単位である16×16の
キャラクタを一つ書き込んだら次のキャラを書き込むまで12clockの
待ちが要る…という素敵仕様でした。
まともにやったら縦スクロールは厳しいです。
(その代わり、キャラROM上で隣接する4キャラをハードウエアで
順番に表示するアニメーション機能があった。背景で4コマでアニメ
しているものはたいていこの機能を使っている)
当時は、仮想画面をバッファに使って、V-Syncと非同期に画面から
はみ出した部分を書き換える、という方法で、高速に対応した縦スクロールを
実装しました。
(当時SDに載ってた非同期I/O実装の記事を参考にした)
実際のゲームでは処理落ちに合わせてストップしたり…というブレーキを
追加することになりましたが…orz
#当時在籍した会社で教材がわりにソースを読んだ8方向スクロールのレースゲーは、
HーSyncのタイミングも使って背景用スプライトを動かしつつ書き換える…という方法を
取っている、ここまでしか理解できませんでしたorz
#NEOGEOの話で出てくる奴で特定されそうだからIDでいいや
Re:ゲームのプログラムをのぞくと・・・ (スコア:2)
MMI/OでのVDPへのアクセスですね。
>キャラクタを一つ書き込んだら次のキャラを書き込むまで12clockの待ちが要る…という素敵仕様でした。
物によっては、LSPがGROMの何処を参照するかを先に必要なだけ先にVRAMに書き込んでおいて
それらのLSPをパラパラマンガ方式で、ダブルバッファリングみたいな感じで切り替えてましたね。
(位置を書き換えるだけなら書き換え量が少ないので)
ライン割り込みでのスプライトダブラーみたいなのは、まだ見た事は無いですが
速度的に相当厳しそうに思いました。
Re: (スコア:0)
処理遅れ時には vsync 非同期にして
処理遅れをあまり感じさせない作りにしたよ~