パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

NEOGEO、誕生から20周年 」記事へのコメント

  • PS3/PSPにNEOGEOアーカイブスができて、過去のNEOGEOソフトを遊べるっていう噂が出てますね
    本当だとうれしい

    • Re: (スコア:1, 参考になる)

      by Anonymous Coward

      Wiiだと既にバーチャルコンソール化 [snkplaymore.co.jp]されていますね。
      流石にプログラムそのままではないでしょうが、Xbox 360のXbox Live ArcadeでもいくつかNEO GEO用ソフトを見かけますし、PS3の性能だったら完全再現も難しくないんじゃないですかね。

      • by Anonymous Coward
        フレームバッファを採用したアーキテクチャのPS3で完全再現はけっこう難しいと思います。
        • ああいうのは内部で仮想VRAMを持っていて、フレームの最後にVRAM内容を転送するだけですね。
          だからむしろグラフィック的には負荷は低いと思います。
          • by Anonymous Coward
            表示の遅延はどうやって解消するんですか?
            • 遅延が発生するのですか?

              実機 V-Blank-In
                VM 処理開始
                VM V-Blank-Out
                VM V-Blank-In
                  描画処理>BLT
                VM 処理終了
              実機 V-Blank-Out

              特に発生する要因は無いと思いますが・・・
              • by Anonymous Coward on 2010年03月04日 21時19分 (#1727671)

                遅延は発生しますよ。
                ビデオゲームの多くは表示期間と垂直帰線期間を合わせたフレームという単位で動かしているものが一般的ですが、そのフレームのなかでのプロセッサの処理は、大よそ以下の通りとなります。

                ----------------------------------------
                フレーム1表示期間
                ・プレイヤー操作入力
                ・ゲームロジック演算(自キャラ敵キャラの動き、当たり判定など)
                ・ラスター処理(スクロール、パレット書き換えなど)
                ----------------------------------------
                フレーム1垂直帰線期間
                ・スプライトテーブル書き換え
                ・BG書き換え
                ・パレット書き換え
                ----------------------------------------
                フレーム2表示期間
                ・フレーム1と同じ
                ----------------------------------------
                フレーム2垂直帰線期間
                ・フレーム1と同じ
                ----------------------------------------
                フレーム3表示期間
                ・フレーム1と同じ
                ----------------------------------------
                フレーム3垂直帰線期間
                ・フレーム1と同じ
                ----------------------------------------
                以下略

                ネオジオ当時のラインバッファベースのスプライトとBGを使ったアーキテクチャでは、フレーム1でのプレイヤー操作入力の結果は、フレーム2の表示期間に表示されます。ラスター処理は、前のフレームで生成したイメージへの操作であるため、フレーム2の表示期間に行うラスター処理はフレーム1のプレイヤー操作入力に対してのものです。
                対して、これをフレームバッファ式のアーキテクチャで実現しようとすると、フレーム1でのプレイヤー操作入力に対して表示する ビットマップの内容を決定できるのはフレーム2のラスター処理を終えた時点です。それからイメージをレンダリングし、テクスチャとしてVRAMに転送し、描画したあとページをフリップすることとなるため、プレイヤー操作入力の結果としての表示の遅延はラインバッファのものに比べて大きいものなります。解決する方法はありますが、「内部で仮想VRAMを持っていて、フレームの最後にVRAM内容を転送するだけ」というレベルの仕事では済みません。

                親コメント
              • by Anonymous Coward

                エミュレータの動作はこうです

                ----------------------------------------
                フレーム1表示期間
                ・プレイヤー操作入力
                ・ゲームロジック演算(自キャラ敵キャラの動き、当たり判定など)
                ×ラスター処理(スクロール、パレット書き換えなど)
                ----------------------------------------
                フレーム1垂直帰線期間
                ・スプライトテーブル書き換え
                ・BG書き換え
                ・パレット書き換え
                ○フレーム2ラスター処理(スクロール、パレット書き換えなど)
                ----------------------------------------

                > ラスター処理は、前のフレームで生成したイメージへの操作であるため、

                違います。実機ではH-Blank

              • by Anonymous Coward

                > ○フレーム2ラスター処理(スクロール、パレット書き換えなど)

                どうもこのへんに誤解の源泉があるようですから、もう少し正確に書きますと

                ----------------------------------------
                フレーム1表示期間および垂直帰線期間(リアルタイム)
                ・プレイヤー操作入力
                ・ゲームロジック演算(自キャラ敵キャラの動き、当たり判定など)
                ・スプライトテーブル書き換え
                ・BG書き換え
                ・パレット書き換え
                ・フレーム2レンダリング
                ・フレーム2ラスター処理(スクロール、パレット書き換えなど)
                ----------------------------------------

                リアルタイムの1フレームの間にエミュレータは必要な処理をこなせばよく、1/60秒以上の精度の正確な動作は求められていません。
                むしろ垂直帰線期間の始まりで同期していると考えればいいかもしれません。

              • by Anonymous Coward
                > 対して、これをフレームバッファ式のアーキテクチャで実現しようとすると、フレーム1でのプレイヤー操作入力に対して表示するビットマップの内容を決定できるのはフレーム2のラスター処理を終えた時点です。それからイメージをレンダリングし、テクスチャとしてVRAMに転送し、描画したあとページをフリップすることとなるため、プレイヤー操作入力の結果としての表示の遅延はラインバッファのものに比べて大きいものなります。解決する方法はありますが、「内部で仮想VRAMを持っていて、フレームの最後にVRAM内容を転送するだけ」というレベルの仕事では済みません。
              • by Anonymous Coward

                エミュレータの動作はこうです

                ----------------------------------------
                フレーム1表示期間
                ・プレイヤー操作入力
                ・ゲームロジック演算(自キャラ敵キャラの動き、当たり判定など)
                ×ラスター処理(スクロール、パレット書き換えなど)
                ----------------------------------------
                フレーム1垂直帰線期間
                ・スプライトテーブル書き換え
                ・BG書き換え
                ・パレット書き換え
                ○フレーム2ラスター処理(スクロール、パレット書き換えなど)
                ----------------------------------------

                ラスター処理のシーケンスを変更するにはオリジナルのプログラムの変更が必要になると思いますが、エミュレータでそんなことやっているのですか?

              • by Anonymous Coward
                > ラスター処理のシーケンスを変更するにはオリジナルのプログラムの変更が必要になると思いますが、エミュレータでそんなことやっているのですか?

                シーケンスではないので。
                ラスター処理はH-SYNC割り込み駆動ですから、それをエミュレートしているだけです。
              • by Anonymous Coward
                H-SYNC割り込みの初期化や割り込みルーチンに渡す値等、割り込み処理の外で行うものだしシーケンスは存在するのではないですか?
              • by Anonymous Coward
                > H-SYNC割り込みの初期化や割り込みルーチンに渡す値等、割り込み処理の外で行うものだしシーケンスは存在するのではないですか?

                通常のプログラムシーケンスはありますが、それはそのままエミュレートします。
                ただし、実機が画面のリアルタイムのフレームの描画中にやる処理を、エミュレータはそれより前、つまりリアルタイムの直前のフレームのH-BLANK中にやってしまいます。
                実機がリアルタイムのH-BLANK中にやる処理は、エミュレータでもリアルタイムのH-BLANK中にやりますので、シンプルに実装すれば、全処理をリアルタイムのH-BLANK中に押し込めることになります。(勘の鋭い方が指摘なさったとおりです)
              • by Anonymous Coward
                NEOGEOに搭載されてた12MHzの68KでH-BLANK中にそれほどあれこれ処理できる訳はないし、H-BLANK中に処理する値などは大凡割り込み処理の前に生成していると思いますが、その生成処理がオリジナルのプログラムでどのタイミングで行われているか特定できない限り、安易に割り込みのタイミングなど変更できないと思いますが。
              • by Anonymous Coward
                > その生成処理がオリジナルのプログラムでどのタイミングで行われているか特定できない限り、

                タイミングではなく依存関係がわかれば十分です。
              • by Anonymous Coward
                依存関係というのは各アプリケーション個別のものではないですか? それか、アプリケーション毎に応じた個別対応という話ですか?
              • by Anonymous Coward
                > 依存関係というのは各アプリケーション個別のものではないですか?

                個別ではなく、ゲームの超基本的な作法で決まりますから、すべてのゲームで共通です。

                あるフレームのラスター処理に必要なデータ(ラスタースクロールオフセットやカラーパレットなど)は、そのフレームのリアルタイム開始時刻Tにはすべて揃っています。
                エミュレータのCPUエミュレーションは実機より必ず高速ですから、データが揃うリアルタイム時刻T'はTより前になります。
                T'からTの間に、エミュレータは1画面をフレームバッファにレンダー(+ラスター処理)しVRAMに転送すればよいです。
              • by Anonymous Coward

                >個別ではなく、ゲームの超基本的な作法で決まりますから、すべてのゲームで共通です。

                んなワケねーよ。特に昔のゲームなんか、いまどきのOSやらフレームワークやらが揃ってない
                ところで素人に毛の生えたようなのが各人バラバラな作り方してたぞ。

                >エミュレータのCPUエミュレーションは実機より必ず高速ですから、

                バカなこと言うな。

              • by Anonymous Coward
                具体例を挙げていただきたいのですが……

                > んなワケねーよ。特に昔のゲームなんか、いまどきのOSやらフレームワークやらが揃ってないところで素人に毛の生えたようなのが各人バラバラな作り方してたぞ。

                いつごろの話をしているのかわかりませんが、ファミコン時代にはすでに必ずV-SYNCで同期をとっていました。(そうしないと画面がちらつきます)

                > >エミュレータのCPUエミュレーションは実機より必ず高速ですから、
                > バカなこと言うな。

                実機より遅ければエミュレーションが間に合いませんが。
              • by Anonymous Coward

                >いつごろの話をしているのかわかりませんが、ファミコン時代にはすでに必ずV-SYNCで同期をとっていました。(そうしないと画面がちらつきます)

                なんでV-SYNC同期に話を限定するのか分からんが、V-SYNCの同期取ってない具体的な例ならSNKのVANGUARDがそうだな。

                >実機より遅ければエミュレーションが間に合いませんが。

                以前自分が担当した製品では間に合わない分に応じて小細工して帳尻合わせたが何か?

              • by Anonymous Coward

                >個別ではなく、ゲームの超基本的な作法で決まりますから、すべてのゲームで共通です。

                業務用ビデオゲームでBGとOBJの動きが1フレームずれてるのなんてざらだったけどな。知らないの?

              • by Anonymous Coward

                ストーリーをはじめから読んでいただきたいのですが。

                > なんでV-SYNC同期に話を限定するのか分からんが、V-SYNCの同期取ってない具体的な例ならSNKのVANGUARDがそうだな。

                VANGUARDは派手に波打っていましたが、かなり古いゲームですね。

                > 以前自分が担当した製品では間に合わない分に応じて小細工して帳尻合わせたが何か?

                誰かが「フレームバッファ式のマシンでラインバッファ方式をエミュレートすると必ず1フレーム以上遅れる」と言ったので、必ずしもそうではない、正確に再現することもできるという話をしているわけです。
                正確さにこだわないエミュレータの実装もあると、かなり前のほうで断ったはずですが。

                ついでにこっちも

                > 業務用ビデオゲームでBGとOBJの動きが1フレームずれてるのなんてざらだったけどな。知らないの?

                実機とエミュレータの動作の違いについての話ですから、実機の動作がどうであるかは対象外です。

              • by Anonymous Coward

                > > > 個別ではなく、ゲームの超基本的な作法で決まりますから、すべてのゲームで共通です。

                > > 業務用ビデオゲームでBGとOBJの動きが1フレームずれてるのなんてざらだったけどな。知らないの?

                > 実機とエミュレータの動作の違いについての話ですから、実機の動作がどうであるかは対象外です。

                超基本的な作法が守られてないタイトルなんてざらにあるって話ですが、日本語通じない人?

              • by Anonymous Coward
                > > 業務用ビデオゲームでBGとOBJの動きが1フレームずれてるのなんてざらだったけどな。知らないの?
                > 超基本的な作法が守られてないタイトルなんてざらにあるって話ですが、日本語通じない人?

                一般論として超基本的な作法はいくつかありますが、わたしが話題にしているものは、やはり前のほうで明らかにしています。
                一体あなたの相手は誰なんですか?
              • by Anonymous Coward

                > 誰かが「フレームバッファ式のマシンでラインバッファ方式をエミュレートすると必ず1フレーム以上遅れる」と言ったので、必ずしもそうではない、正確に再現することもできるという話をしているわけです。

                「ああいうのは内部で仮想VRAMを持っていて、フレームの最後にVRAM内容を転送するだけですね。
                  だからむしろグラフィック的には負荷は低いと思います。」

                ↑こんなことやってりゃフレームの遅延も当たり前に発生するでしょ。

              • by Anonymous Coward

                > > > エミュレータのCPUエミュレーションは実機より必ず高速ですから、

                > > バカなこと言うな。

                > 実機より遅ければエミュレーションが間に合いませんが。

                > 正確さにこだわないエミュレータの実装もあると、かなり前のほうで断ったはずですが ←New!

              • by Anonymous Coward
                めんどうなのでまとめます。

                > 「ああいうのは内部で仮想VRAMを持っていて、フレームの最後にVRAM内容を転送するだけですね。 だからむしろグラフィック的には負荷は低いと思います。」

                > ↑こんなことやってりゃフレームの遅延も当たり前に発生するでしょ。

                フレームの内容をVRAMに転送するのはきわめて高速です。
                一昔前のPCでも、1フレームに対して1msかかりません。

                > > 正確さにこだわないエミュレータの実装もあると、かなり前のほうで断ったはずですが ←New!

                実機の動作をリアルタイムに正確に再現するには、ある程度の性能をもったPCが必要です。ということを解説するところからはじめないといけませんか?(といってもネオジオ程度であれば10年前のもので十分です)
              • by Anonymous Coward

                >フレームの内容をVRAMに転送するのはきわめて高速です。
                >一昔前のPCでも、1フレームに対して1msかかりません。

                PS3でフルHDのフレームバッファ消去してゲームの画面イメージ他額縁等描画すると平気で数m秒掛かるよ。

                >実機の動作をリアルタイムに正確に再現するには、ある程度の性能をもったPCが必要です。ということを解説するところからはじめないといけませんか?(といってもネオジオ程度であれば10年前のもので十分です)

                可能であればどうぞ。

              • by Anonymous Coward
                > PS3でフルHDのフレームバッファ消去してゲームの画面イメージ他額縁等描画すると平気で数m秒掛かるよ。

                5年前のPS3でさえフルHDでそんな性能がでるのなら、ネオジオ程度であれば一昔どころか10年前のPCでも楽勝そうですね。
              • by Anonymous Coward
                > 可能であればどうぞ。

                プライドを傷つけるようで申し訳ないのですが、初歩の初歩からはじめますのでお付き合いください。

                ネオジオは12MHzの68000と4MHzのZ80、VDP、サウンド、I/Oといったハードウェアを持ちます。
                エミュレータはおのおののデバイスのエミュレーションを行います。
                次回以降では、ホストPCの単一スレッドが上記すべてのエミュレーションを行うことを前提にします。

                ここまでは理解できましたか?
                「はい・いいえ」

                次回は、ネオジオのCPUエミュレーションの説明です。
              • by Anonymous Coward

                >プライドを傷つけるようで申し訳ないのですが、初歩の初歩からはじめますのでお付き合いください。

                実際何度かエミュレータを使用してのオールドタイトルの再現は業務でやっておりますのでプライドが傷つくとかはないですよ。勉強になれば幸いだと思っています。

                >次回以降では、ホストPCの単一スレッドが上記すべてのエミュレーションを行うことを前提にします。

                なんでPCなんですか? 可能であればPS3でお願いします。
                あと、サウンドについても言及されるのであれば、可能であればそちらの遅延の解消方法についても解説していただけると幸いです。

              • by Anonymous Coward

                > 5年前のPS3でさえフルHDでそんな性能がでるのなら、ネオジオ程度であれば一昔どころか10年前のPCでも楽勝そうですね

                画面の描画だけで数m秒ですよ。ネオジオの実機ならラインバッファ単位の描画なので60μ秒程度ですね。
                描画に関してはPS3は実機に完全に負けているのでそれだけ他の部分を早く実行しなければいけないのですが、理解されてますか?
                10年前のPCで楽勝? 正気ですか?

              • by Anonymous Coward
                > ネオジオの実機ならラインバッファ単位の描画なので60μ秒程度ですね。

                数字だけをぽーんと出してこられても困ります。

                あなたは、60μ秒というのが何の時間か、まず説明すべきです。
                次に、エミュレータがその60μ秒の間に何をしているのか、説明すべきです。
                (わたしも説明しますが先ほどの講座で順序だてて説明したいので、かなり後のほうになります)

                > 描画に関してはPS3は実機に完全に負けているので

                まだ描画(レンダリング)の話はまだ出てきていないわけですが。
                先ほど言及したのは、仮想VRAM(フレームバッファ)をエミュレーションホストのVRAMに転送する話です。文脈はこ
              • by Anonymous Coward

                > > ネオジオの実機ならラインバッファ単位の描画なので60μ秒程度ですね。

                > 数字だけをぽーんと出してこられても困ります。

                > あなたは、60μ秒というのが何の時間か、まず説明すべきです。

                1走査線のおおよその期間ですが説明しないと分からないもんですか? ちょっとびっくりしました。

                > 次に、エミュレータがその60μ秒の間に何をしているのか、説明すべきです。

                ???
                エミュレータが60μ秒の間に何をしているなどという話は私は一切しておりませんが?

                > > 描画に関してはPS3は実機に完全に負けているので

                >まだ描画(レンダリング)の話はまだ

              • by Anonymous Coward

                > 1走査線のおおよその期間ですが説明しないと分からないもんですか? ちょっとびっくりしました。

                あなたが妙な誤解をなさっているようなので確認してみましたが、その通りだったようですね。

                > あなたが「描画(レンダリング)」という言葉をエミュレータ上でCPUが画像イメージを生成する意味で言っているのか、

                このストーリーの前のほうで、前者すなわち「CPU(実機ならVPU)が画像イメージを生成する」ことをレンダリングだと断っていますが、読んでないのですか?

                > 後者の意味ならば

                ではありませせん。

              • by Anonymous Coward

                >このストーリーの前のほうで、前者すなわち「CPU(実機ならVPU)が画像イメージを生成する」ことをレンダリングだと断っていますが、読んでないのですか?

                正確な用語の定義のある話題ではないし、ACのどなたが言った言わないというのも意味のある話とも思いません。その辺を主張されたければIDをお使い下さい。

              • by Anonymous Coward

                このストーリーの前のほうで、前者すなわち「CPU(実機ならVPU)が画像イメージを生成する」ことをレンダリングだと断っていますが、読んでないのですか?

                #1731695 [srad.jp]の以下の部分は何の話か?ってことですよね??

                フレームの内容をVRAMに転送するのはきわめて高速です。
                一昔前のPCでも、1フレームに対して1msかかりません。

              • by Anonymous Coward
                > #1731695の以下の部分は何の話か?ってことですよね??

                この部分はレンダリングとは直接関係ありません。
                エミュレータがCPUでゲーム機のVDPの動作を模倣してメモリ上にレンダリングした結果を、エミュが動いているハードのVRAMへ転送する話です。

                エミュレータの話題でレンダリングと言えば、BGやスプライトを合成して画面イメージを生成することです。
                ソースが公開されているものも多いので、目を通せば納得できるとおもいます。
              • by Anonymous Coward

                > エミュレータの話題でレンダリングと言えば、BGやスプライトを合成して画面イメージを生成することです。

                あなたの狭い認識ではそうだということですね。ところで「メモリ上にレンダリングした結果を、エミュが動いているハードのVRAMへ転送する」話はどこ行ったのですか?

                > ソースが公開されているものも多いので、目を通せば納得できるとおもいます。

                どこかの誰かさんがある動作をどう呼んでいるかはさほど重要な話とも思いません。解釈の分かれる話であれば、その都度はっきりと明示すればよいだけのことではありませんか?

Stay hungry, Stay foolish. -- Steven Paul Jobs

処理中...