約 3,035,948 件
https://w.atwiki.jp/live2ch/pages/596.html
/ 2022年10月27日 (木) 01時35分14秒 ◆質問時に書いてほしいこと 説明 OS・アプリ・周辺機器 どのような環境なのか、なにを使用しているのか 具体的な状況 なにをしたのか、どう設定したのか、どうしたいのか ◆質問時に避けたい表現 説明 エラーが出ました どのようなエラーが出たのか正確に書く 解説のとおりにやりました なにをやったのか、念のため書く いろいろやりました なにをやったのか具体的に書く それはもうやりました 自分がやったことは最初に書く ※URLを含むコメントを投稿したい場合は、「http」ではなく、「ttp」と記述していただくようお願いいたします。スパム対策で「http」を含むコメントは投稿できないようにしています。 ※コメントの投稿に失敗する場合があります。そこで、念のためコメントをコピーしてから投稿することをお勧めします。やり方は、Ctrl + Aを押したあとCtrl + Cを押します。投稿に失敗した場合は、Ctrl + Vでコメントを貼り付けて再度投稿してください。 2020年 名前 コメント 管理人さん、3DSのキャプチャーはどうすれば出来ますか? -- 名無し (2022-10-27 01 35 14) 2極でも無理ですよね 4極のマイクを買うしかないですか? -- いがりん (2021-04-10 17 05 33) ↓TVのイヤホンジャックにイヤホンスプリッタを繋げて イヤホンスプリッタに2個のイヤホンを繋げて各々着用すれば TVの音を全指向性マイクで拾ってしまうことは防げます。 イヤホンスプリッタはAmazonとかで売っています。 -- 名無しさん (2020-10-10 16 15 48) 動画配信を画策している初心者です。 この製品を利用して、動画を撮影したいと考えています。 教えて欲しいのですが、マイクのつなぎ方に関してです。 二人の声を入れたいのですが、据置の指向性マイクを置くと TVの音も拾ってしまいそうで、不安です。 ミキサーなどを使用した方が良いというのは解りますが、 どういう繋ぎ方になるのか、わかりません。 ご教授願いたいです。 -- レナス (2020-10-09 11 52 47) USBメモリーで動画を撮って、すぐUSBメモリーを抜いても問題ないですか? 時間を少しおいてから抜いた方がいいでしょうか? それとUSBメモリーを抜くときこちらの商品の電源を落としてから抜いた方がいいですか? -- まめ (2020-06-01 23 47 45) こちらの商品のご購入を考えているのですが、Androidスマホでデータ移行などできるのでしょうか -- 名無しさん (2020-05-27 22 03 28) これで録画したHDDをPCにつなげてファイルを見るのは無理っぽい?どちらかで フォーマットしてもう片方につなぐと認識しないので不便で仕方ない、んなところ テレビ用レコーダーと同じでどうすんのよ…本当に無理なんでしょうか。 あとPS4接続時はパススルー出力できない(すると確実に映らなくなる)のは仕様ですかね。 -- 名無しさん (2020-03-28 16 22 30) あのーSDカードを差し込んでもフォーマットをしてください というのがでてexFATというのを押したら失敗しました。って なりますどうしてですか?一様これ使ってますSDカード I-O DATA microSDカード 64GB UHS-I(スピードクラス1)/Class10対応 Nintendo Switch動作確認済 耐X線 変換アダプター付 EX-MSDU1/64G -- 名無し (2020-02-02 19 57 50) ↓コンポジット端子の仕様です。 この端子はSD映像までしか対応していません。 ttps //ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%9D%E3%82%B8%E3%83%83%E3%83%88%E6%98%A0%E5%83%8F%E4%BF%A1%E5%8F%B7 -- 名無しさん (2020-01-04 14 08 27) スーファミなどのコンポジット端子で入力すると録画モードがSD画質しか選べないのは仕様でしょうか? 家電製品店でHDMI変換アダプタを購入し、入力をHDMIにしたらフルHD高画質が選べるようになり、自己解決しましたが。 他の方もコンポジット端子で入力したら、SD画質しか選べない事が起きた方いるでしょうか? コンポジット端子で録画ならHDMI変換アダプタもあるといいんでしょうか? -- 名無しさん (2020-01-03 18 56 17) 2019年 ↓プロセッサーユニット(小さな箱型の)とモニターを HDMIで繋げてますよね。 そのモニター側のHDMIケーブルを取り外してGV-HDRECに 繋げればOKです。 イラストだと公式サイトのモニターの部分をGV-HDRECに 置き換えるだけです。 ttps //www.jp.playstation.com/psvr/features/setup/ -- 名無しさん (2019-10-06 22 28 04) PlayStationVRでも利用可能なのですが配線の仕方がわかりません。 もしよろしければイラストで教えていただけないでしょうか? -- 名無しさん (2019-10-06 02 51 19) カット編集の際に、動画の音が聞こえないのですが仕様でしょうか? 実況動画でカットしたい時に、かなり使い難いです。 -- 名無しさん (2019-08-30 21 37 52) ↓MP4(H.264+AAC)になります。 PCに動画をコピーすればそのまま再生・編集できます。 -- 名無しさん (2019-03-30 23 51 11) 管理人さんの勧めをみて、今購入のを検討しています 一つ伺いしたいですが、USBHDDに保存したファイルどんな型式ですか? *.avi? *.mp4?ですか? パソコンでそのまま再生や編集できますか? ありがとうございます -- ふらんく (2019-03-30 19 24 58) 2018年 ↓本文にも書いてありますが、フォーマット形式がFAT32で 4GB制限に引っかかっているとかではなく、ということですか? -- 名無しさん (2018-12-27 00 57 54) 管理人さん、wiiuでゲームを録画してるのですが、録画を続けていると、 20分で録画が終了してしまいます。 使っている物は、32GBのsdカードと、設定は、最高画質の1080/60pです。 -- アパ社長 (2018-12-26 18 44 43) >管理人様 回答ありがとうございます。 この方法で私も無事に録画することができました。 本当にありがとうございました。 -- XYZ (2018-07-24 14 21 24) XYZさん こちらでもPSP-3000で確認したところ、 コピーガードのエラーが表示されました。 対処法ですが、(1)ゲーム画面を起動してから (2)PSPのディスプレイボタンを長押ししてください。 この方法であればエラーは出ません。実際に録画もできました。 コピーガードのエラーが出るのは、ゲームを起動する前の、 ホーム画面の段階でPSPのディスプレイボタンを長押しして 映像を出力したときです。 おそらくGV-HDRECがコピーガードを誤検知しているのだと思います。 -- 管理人 (2018-07-23 20 01 25) はじめまして。どうしても解消されないことがありますので質問させてください。 主にGV-HDRECを使用しています。 PSP3000でのゲームを録画したいのですが、音声は問題ないのですが、画像が 「コピーガードの信号が出ているので録画できません」となってしまいます。 こちらのサイトを拝見すると、コンポジット端子でならば録画可能となっています。 コピーガード対策はどのように行えばよいのでしょうか? よろしくお願い致します。 -- XYZ (2018-07-22 17 23 28) ライブ配信って出来るんですか? -- 名無し (2018-06-17 22 59 46) / 2022年10月27日 (木) 01時35分14秒
https://w.atwiki.jp/swing-ewi/pages/12.html
EWI3000 EWI3000m 特記事項 EWI3000mの音色は電池でバックアップされています。電池が無くなると音色は吹っ飛んで演奏できなくなります。 EWI3000mを現状で運用するには電池の部分を改造する必要があります。 ファクトリーリセット [MIDI]ボタンと[UP]ボタンを押しながら電源を投入します。
https://w.atwiki.jp/windsynth/pages/68.html
EWI3020と同等品? 関連 EWI3000m, CV-MIDIコンバーター
https://w.atwiki.jp/wiki-inspiron/pages/133.html
HDMIケーブルでTVと接続しても音声が出ない コンピュータとテレビをHDMI接続しても、音声は自動的には切り替わらない タスクバーの[スピーカー]アイコンを右クリックして[再生デバイス]をクリック または、[スタート] → [コントロールパネル] → [ハードウェアとサウンド] → [サウンド]の順にクリック [再生]タブのデジタル出力デバイス(HDMI)と表示されているデバイスを右クリックし、 [既定のデバイスとして設定]をクリック 音声関係ソフト(Windows Media Player等)が立ち上がっていると切り替わらないため、 全て終了させてから設定変更すること
https://w.atwiki.jp/hisako/pages/12.html
海問屋は、スマホ録画に対応したHDMIビデオキャプチャーを販売開始した。価格は9,499円(税込)。 本製品は、ゲーム機やビデオカメラなどのHDMI機器から出力される映像を、PC不要で直接、簡単にAndroid系スマホ・タブレットに録画できるHDMIビデオキャプチャー。 解像度1080pのフルHD録画対応で、クオリティの高い動画を録ることができるDVD-R 録画用。コンポジットケーブル、S端子ケーブルにも対応で、ビデオデッキなどの映像も録画が可能だ。TDK DVD-Rゲーム動画や思い出の映像をスマホ、タブレットに録画して持ち歩けば、場所を選ばず楽しめる。 機器の接続は、下図のように簡単につなぐだけでOK。ブルーレイディスク 録画用準備の手間なくすぐに録画できる。スマホ、タブレットに録画する場合は、USB充電器などで給電する必要があるので、microUSBとUSB分岐しているコードを使用する。 PCに録画する場合は、そのPCから同時に給電もできる。なお本製品には、映像出力用のHDMIケーブル、コンポジットケーブル、S端子ケーブルは付属していないので注意しよう。
https://w.atwiki.jp/sm4wiki/pages/19.html
ここは? 資料が英語ばかりの鬼門「HDMA」の説明らしき物です。 しかしHDMAはおろかWikiの編集も付け焼刃なのでグダグダです。 墓場のうんちくが来るまでの間に合わせってことでよろしく。 目次 ここは? [#h9022c01] 目次 [#m117020a] ?描画あれこれ [#qe5799a9] 走査線/Scanline、H-blank、V-blank [#s7ad179f] 実際に描画するには [#zee7eb24] ?まず何をすればいい? [#o1443331] ?PPU[#jff40a94] ?チャンネルとテーブル [#r8718413] テーブル [#j3bdbd92] チャンネル [#c977e4fd] 補足 チャンネルとテーブルの関係 [#b19b7240] ?実践1:サイズの異なるモザイク [#bc6548fb] チャンネルの設定 [#se5733dc] 転送内容と効果 [#n2307603] ?スクリーンあれこれ [#z4e04003] メインスクリーン、サブスクリーン [#g3bb16ac] 通常のLevelでの描画構成 [#mfc136d2] ?実践2:固定色層の応用を考える [#e9a40961] ?実践3:固定色層の応用を考える? [#g0553344] ?実践3:マルチレイヤースクロール [#q09f9eb3] 目的 [#y6f40c3f] RAM $210F [#ib0461ea] 極めて遠くにあるもの [#i86da7f5] それほど遠くないもの [#nd3b86ce] 補足 簡易説明 [#affb0983] ?ウィンドウあれこれ [#j74c93ce] コメント [#j4f3b79e] ?描画あれこれ 走査線/Scanline、H-blank、V-blank SFCでは画面が1秒間に60フレームほど描かれている気がします。 そのうちの1回を取り上げて考えてみましょう。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (a.png) まずは左上の1ドットから描画がスタートし、右上に向かいます。 こうして一番上の1行が描かれます。 こういった横方向の行を「走査線 Scanline」と言います。 一番上の行がScanline 0です。 二番目の行がScanline 1です。 一行目が右まで描かれると、次は二行目の左端を描くことになりますが、 それまでに僅かな休み時間があります。これがH-blankです。 同様に、各Scanlineの描画が終わるたびにH-blankが来ます。 ゲーム画面の一番下の行はScanline 225 です。 ここまで描ききった後のScanline 226〜261にあたる期間は もうずっと休み時間です。これをV-blankと言います。 H-blankが土日だとしたら、V-blankは長期休暇みたいなものなので長いです。 その後はScanline 0に戻り、次のフレームの描画が始まります。 実際に描画するには さて、なぜこんなblankの話をしてるかというと、 描画情報の変更はこのblank中でやらなければならないからです。 だからLevelASMとかで直接描画情報を変えようとしても、 その瞬間が奇跡的にblank中だった場合しかうまく行かないことになります。 ただしいくつかのエミュではこういうのを考慮してないので blank無視しても正常に動作してしまう罠。 実機で動かなくてもエミュで動けばいいじゃんと見るかどうかは人によるけど… 最新のエミュでは、ちゃんと(?)blank無視した変更は反映されないようになってます。 じゃあblankのタイミングを狙うにはどうすればいいのか? 1つは、NMIという割り込みを利用する方法です。 画面下、Scanline 225を描いてV-blankに突入した瞬間、 流れているプログラムは一旦ストップ。 Snes $00816Aから始まるNMIルーチンが割り込んできます。 この中でblank中でなければならない処理を まとめてやってしまうというのです。 しかしblankはV-blankだけではありません。 H-blank中に描画設定を変えるとどうなるでしょう。 たとえば、Scanline0の前で明るい画面に設定し、 Scanline112の後のH-blankで暗い画面に設定すれば、 画面上半分(0〜112)は明るく、画面下半分(113〜225)は暗くなります。 このようにScanlineとScanlineの間で描画設定を変えることができます。 こういった、指定したH-blankで描画設定を変えるという処理を 自動的にやってくれる装置があります。 これがHDMAです。 ?まず何をすればいい? まずはHDMAを実装しましょう。いくつか方法があります。 ・CからBMF98567氏のHDMAを持ってきてインストール ・自作物展示場や、あっぷろだXのASM_Supporter 余計な機能がつきすぎるのが嫌でなければ、 ASM_Supporterをオススメします。 後先考えるとインスタントNMIがあった方が便利っちゃあ便利。 xkasの使い方は、あっぷろだXを参照。 いや、CMのつもりでは… 要望があれば、HDMAだけを入れるバージョンも作りますが。 ?PPU さんざん「描画設定を変える」とかいう表現を使ってきたわけですが、 とりあえずそれがどういうことかを知らなければなりません。 SFCにはPPUというユニットがあり、 こちらのプログラムとは独立して、描画処理を行ってます。 このPPUにこちらから働きかけます。 難しそうですが、結局は$21xxへのストアです。 $21xxに値をストアするというのがPPUとの手動通信です。 とりあえずすずめ愛好会のこのページを見てみましょう。 対してHDMAは自動通信です。 HDMAは「Scanline毎に$21xxの値を自動で変えてくれる物」 だということになります。 ?チャンネルとテーブル ついに実際に簡単なHDMA効果を作ってみます。 しかし、いきなりLevelASMから作るのは大変なので、 チートで作ることにしましょう。 テストもしやすいですし。 というわけで、代入可能なメモリビューアがついているエミュを用意しましょう。 ちなみに私が使っているのは音楽再現度的な意味でSNESGTです。 最新のβ版ではblankも考慮されている上、 指定アドレスにジャンプができるので旧版より使いやすいです。 テーブル まずHDMAをインストールしたROMを起動して好きなLevelに行き、ポーズ。 メモリビューアを開いて、HDMAテーブルのある位置を見ましょう。 初期設定ではテーブルの位置は、BMF98567氏のHDMAでは$7FFF00 ASM_Supporterでは$7FFE00と決められています。(現在の設定では$7F8190ですが変更可能) この先は後者として話を進めていきますので、 前者の場合は、各アドレスの3桁目をE⇒Fと脳内変換してください。 これからこのテーブルという領域に、 HDMAに必要な手続きを行っていきます。 そしたら先ほどインストールしたHDMA内部機構が 手続きに従い、自動的にHDMAを実行してくれるのです。 チャンネル HDMAには0〜7の8つのチャンネルがあります。 各チャンネルに「Scanline毎に$21xxの値を変える」という 一まとまりの仕事を割り振ることができます。 つまり最大同時に8種類の仕事をさせることができるのです。 ただ本家でもHDMAが使われている箇所があるので、 本家HDMAの使用チャンネルとかぶるとキャンセルされてしまうかも。 チャンネル3辺りを使えば心配無いでしょう。 本家HDMAの使用状況を知りたければ、 ここにあるデバッグ用Snes9xでHDMAをトレースしてみましょう。 補足 チャンネルとテーブルの関係 自分が理解するのに詰まったところなので勝手に補足。 さて、上記のようにHDMAには8つのチャンネルがあり、同時に最大8種類の効果を出すことができます。 色々弄れば色々効果が出せるわけですが難しい。そこで「必要事項を指定の場所に入れてくれれば後はやってやんよ」 というのがBMF98567氏の作ったものです。 まず「チャンネルの設定パラメータを入れるRAMアドレス」(=チャンネルごとのテーブル)がチャンネルごとに6つずつあります。 ここに転送方法とか弄る対象とか、設定を適宜入れていきます。 ここで設定した「転送したいデータを入れるRAMアドレス」(=転送内容のテーブル)に、弄る走査線の数などを入れていきます。 前者はxkasなどでプログラムを挿入するときに決めるもので、後から変更はできず、 後者は毎回自分の好きなところに指定する必要があります。 次項からその実践です。 ?実践1:サイズの異なるモザイク チャンネルの設定 まずはシンプルな1バイト入力系をやりましょう。 モザイク設定は$2106ですね。 テーブル周辺ははじめは全部00になっています。 ここにメモリビューアから入力していきます。 結論を言うと、下のスクショですね。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (b.png) ここまで行く過程を説明しましょう。 まず「チャンネル3」を使うことに決めました。 図のチャンネル3テーブルに基本設定パラメータを書いていきます。 まずはチャンネルON宣言です。 テーブルの1バイト目には、下の表に従って値を入れましょう。 今回はチャンネル3なので、08ですね。 チャンネル 0 1 2 3 4 5 6 7 1バイト目の値 01 02 04 08 10 20 40 80 ただし、今すぐ入力するのはやめてください。 まだ設定が終わってないのにスイッチONにするのは自殺行為ですね。 軽くバグります。 2バイト目は、転送方式の設定です。 一番難しいところです。下の表を見ましょう。 2バイト目の値 1回分の処理の挙動 使用例 使用例で何が起こるか 00 1アドレスへ1byte書き $2106にXXを代入 モザイク設定がXXに 01 2アドレスへ1byte書き $2126にXX⇒$2127にYY ウィンドウ1左端XX、右端YY 02 1アドレスへ2byte書き $210FにXX、ついでYY レイヤー2 x座標がYYXXに 03 2アドレスへ2byte書き 拡大縮小回転マトリクス 2chに分けて画面に濃淡の演出使用してるゲーム例 アダムスファミリー 04 4アドレスへ1byte書き 思いつかん $2106は単純に1バイトを入力するものなので 00を入力します。 3バイト目は、弄る対象です。$21xxのxxを入力します。 今回は$2106モザイクなので、06です。 4〜6バイト目に、転送内容テーブルのありかを入力します。 空き場所ならどこでもいいですが、 今回は近くの$7FFE40に「転送内容」を書いていくことにします。 よって40 FE 7F 転送内容と効果 さて、ついに基礎設定が完了しました。 次はいよいよ「転送内容」を書いていきます。 さっき$7FFE40に指定したので、そこに書いていきましょう。 基本は「上から数えるScanline数⇒代入値」の繰り返しです。 こっからは好きなようにしていいですが… とりあえず上から40行分にサイズAの大モザイクをかけてみましょう。 $2106の設定はAFです。 よってまず「40 AF」と書いていきます。 画面全体にモザイクがかかるでしょうが、無視して次行きましょう。 次の40行分はモザイクをサイズ6と、少し小さくしてみます。 続きに「40 6F」と書きます。 次第に小さくして、最終的に「40 AF 40 6F 40 2F 40 00 (00)」としました。 その結果がスクショです。そのとおりになってますね。 ちなみに(00)は終了宣言です。 こうして、チートでHDMAを作ることができました。 あとは今回のチート入力を再現するLevelASMを組むだけです。 組み方は65C816プログラミングの方を見ましょう。 ?スクリーンあれこれ メインスクリーン、サブスクリーン このへんからだいぶ怪しい説明になります。 変なこと言ってたら直しちゃってください。 次のステップに進む前に メインスクリーン、サブスクリーンとかを知っておくといいです。 もう一度すずめ愛好会を見ましょう。 今回見るべきは、 $212C(メインスクリーン構成) $212D(サブスクリーン構成) $2131(カラー演算対象設定 $40から転記) $2132(固定色層の色) ただし、$2131に関しては、 毎フレームのNMIで$40からコピーされているで、 $2131を弄ってもすぐ潰されてしまいます。 かわりに$40を弄ればOKです。 描画される画面は、 スプライト・固定色・BG1・BG2・BG3・BG4といった層の 重ね合わせで構成されているのですが、 細かく言うともう少し複雑です。 これらの層をメインスクリーン・サブスクリーンにグループ分け。 私たちにはメインスクリーンだけが見えます。 内部でサブスクリーンというのを別に構成しておきます。 この結果を、「メインスクリーンのうちの背景層」に足し加える。(カラー演算) そういう足し算の結果、メインスクリーンの後ろにサブスクリーンがあるように見えます。 足し算というとわかりにくいですね。 サブスクリーンの内容を、プロジェクターで映し出すような感じです。 $40に関してはここでも説明しておきましょう。 $40の8つのbitを と表すとすれば、それぞれ スクリーン構成は メイン…BG1,SP サブ …BG2,BG3 $40 = 20 (+OB....)なので、加算対象は背景層のみ。 図示すると下のよう。#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (c.png) さて、ここで一つ考えてみましょう。 サブスクリーンが背景層に加算されていますが、 これをやめたらどうなるでしょう? $40の値を20⇒00にしてみましょう。 「BG2、BG3、固定色」が見えなくなります。 では、背景層だけでなく、BG1にも加算するとどうなるでしょう。 $40の値を、20⇒21にしてみましょう。 プロジェクターが背景層だけでなく、レイヤー1にも照射をするという感じで、 レイヤー1にサブスクリーンの内容が映ってしまいます。 つまり、レイヤー1が透けているように見えます。 同様に、スプライトにも照射して透けさせることができますが、 スプライトのうち「前面に表示」設定のタイルは どういうわけか特別扱いを受けているようです。 こういった加算の影響を受けません。 お化け屋敷ではこれを利用して、 透けたテレサ・透けないテレサを区別しているようです。 さて、これを見ていると、 別にBG1,2,3,スプライト全てをメインスクリーンに設定してもいい気がします。 何故こんな回りくどいことをしているのか。 それは、スプライトのうち「背面に表示」設定のタイルのためです。 こう設定すると、タイルはメインスクリーンの一番後ろに行きます。 BG2をメインスクリーンに設定すると、タイルがBG2背景の後ろに表示されます。 要するに、ピーパックンとかが背景の後ろに消えてしまうのです。 一方、レイヤー2を使ったマップでは、 別にスプライトがレイヤー2に隠れても問題ありません。 なのでここではBG2はメインスクリーンに設定されています。 ?実践2:固定色層の応用を考える さて、上の図の中に、固定色層というのがありますね。 これについて考えてみましょう。 こいつは$2132での色設定に従った単色層です。 見ての通りSMWの通常Levelでは、これはBGカラーとして使われています。 LMで設定された背景色は、RAM $0701-$0702 に保存されていて、 ここの値が毎フレーム$2132に代入されています。 ですから$0701を弄れば固定色層の色を変えることができ、 結果背景の色が変わります。 $2132を弄るHDMAをつけてみましょう。 Scanline毎に固定色層の色を変えるって事です。 こうなると固定色層はもはや単色ではなく、 グラデーションのかかったきれいな層となります。 やり方は前回とほとんど同じです。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (d.png) ▲ウホッ、いい空… 1バイト目はスイッチ。 2バイト目は転送設定。「00」 3バイト目は弄る対象が$2132だから「32」 そして転送内容データの置き場所を設定して、 そこに「走査線数」⇒「値」⇒「走査線数」⇒「値」… HDMA自体の基本は全く同じ。 今回注意したいことは、$2132の使い方が少し変則的なことです。 $2132に入力するのは、「固定色層の色」という値ではなく、 「PPUよ、R/G/Bの値をxxに変えよ!」という命令なのです。 PPUの内部で固定色層の色が(R 12)(G 02)(B 0F)となっていたとします。 図にも書いてある通り、 20 + xx の値を$2132に入力すると、 PPUはRの値をxxにしろという命令を受け、 (R xx)(G 02)(B 0F)というふうに変えます。 60 + xx の値を$2132に入力すると、 PPUはRとGの値をxxにしろという命令を受け、 (R xx)(G xx)(B 0F)というふうに変えます。 もう気づいたでしょうが、$2132への入力一発では、 RGBに同時に異なる値を設定することはできません。 転送設定「00」では、1スキャンラインで入力できるのは一回だけ。 これが不自由だと思うなら、転送設定「02」を使えばいいかも。 その場合、転送内容のところには 「Scanline数」⇒「値(1byte目)」⇒「値(2byte目)」⇒「Scanline数」… となるので、3バイト1グループになることに注意。 さて、図のグラデーションの組み方ですが、 まずScanline0の描画開始前に「LMで設定した背景色$0701」の値が (R)(G)(B)に代入されています。今回は淡い青です。 Scanline 0 …「60」RとGを00にして深い青にする Scanline 2 …「9F」Bを1F(max)にして濃い青にする Scanline 5 …「62」RとGを02にして少し明るくする Scanline 9 …「63」RとGを03にしてもう少し明るくする : : とまあ、こんな感じでグラデーションをやっていってます。 狙い通りの色合いを出すなら、やはり見ながら調整できるチートが便利。 完成したらLevelASMを組みましょう。 ?実践3:固定色層の応用を考える? しかしCとかで流行っているグラデーション演出は、 さっきのとは少し違ったはずです。 なんていうか、背景ではなく画面全体に色が映っているかのような。 ?での知識を活かして、こちらをやってみましょう。 まずBG1-3、SPといったレイヤーを全てメインスクリーンに移してしまいます。 こうするとサブスクリーンにあるのは固定色層のみになります。 ここでこのサブスクリーンを、メインスクリーンの全ての層、 レイヤー123・スプライト・背景に映し出せばOKです。 $40に37を代入しましょう。 この時ピーパックンなどがレイヤー2の後ろに行ってしまう問題は、 どうしようもありません。副作用だと思ってください。 この場合はピーパックンを使わないか、 ピーパックンのグラフィックルーチンを弄って フラグによっては前面に出るようにするか。 インスタントNMIを使って$0303,xにしらみつぶしにTSB #$30しまくるか。 どのみちこの設定ではレイヤー1と2の間にスプライトを挟むことはできないので まあ使わないのが一番でしょう。 さて、今回はHDMAチートの前に準備が必要です。 まずメイン/サブスクリーンの設定をしなくてはなりません。 これらはSMWでは『$2131←$40』のようにサポートされていないので、 自作のLevelASMでやる必要があります。 まずはそこから作ってみましょう。 $212C(メインスクリーン構成)に17を代入し、 $212D(サブスクリーン構成)に00を代入します。 エミュでは普通にLevelASMから直接代入してもできるんですが、 本家SMWでPPUアクセスは全てNMIに回されているのを見るに、 恐らく実機では動かないのでしょう。 従って、インスタントNMIでやります。(CMじゃry) 講座も来たことだし、xkas用でいいよね! !NMI = インスタントNMIのJSLのありかとします。 CodeStart LDA $06B6;処理は開始1回だけで十分 BEQ INIT;ステージ開始時は00になっているからINITへ RTL INIT INC $06B6;2回は行わないようにする ;INCすることで、2回目以降は ;BEQ INITされない STZ $24;ステータスバー特別扱い解除 LDA #$01; TSB $06AD; LDA #$37;固定色層を、全レイヤーに投射 STA $40 JSL !NMI;次のV-blankのときに JSL NMIset;JSL NMIsetが行われるよう予約 RTL NMIset LDA #$17;予約内容 STA $212C;メインスクリーン:全部 STZ $212D;サブスクリーン :固定色のみ RTL このLevelASMを入れたステージに行ってみましょう。 画面全体が背景色を帯びていることだと思います。(マリオは無事) $701-2を弄って、色が変わることを確認しましょう。 本来背景色だったものを前面に持ってくるギミックなので、 もともと背景色があまり使われていないスイッチ宮殿や、城等でやると映えます。 さて、単色では物足りないなら、ここでHDMAです。 背景グラデーションの時と全く同じなので、図だけを投下しておきます。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (e.png) LevelASMコードも投下しておきます。 ただし、CONTENTの内容がとても長いので、 外部ファイルGRAD.binとして入れるようにしています。 自信のある人は解読してみてください。 ?実践3:マルチレイヤースクロール 目的 今回のテーマは「『転送内容データ』を動的に変化させる」です。 「背景としてのレイヤー2」を3D的にスクロールさせることが目的です。 今回は下の背景を3Dスクロールさせてみましょう。 (既にHDMAグラデーションをかけてあります。) #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (f.PNG) そうそう、前回言い忘れてましたが、 加算グラデーションをかける時は、元の色を暗めにしておきましょう。 加算なので、RGB各成分を元の色より下げることはできませんし。 さて、普通の設定では、 雲も海のどの部分も、同じ分だけスクロールしてしまいます。 これは奇妙。 近景は速く、遠景は遅く動いて見えるようにしたいものです。 RAM $210F $210Fはレイヤー2スクロールのx座標。 むしろレイヤー2を映すカメラのx座標と言ったほうが分かりやすいかも。 LunarMagicで見るような、レイヤー2の一枚絵を 正面から映しているカメラを想像しましょう。 xが大きいほど、カメラは右にあることになります。 xを増やすと、カメラは右に進み、 すると映像ではレイヤー2が左に流れていくことになります。 図も載せときます。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (g.png) 普段はRAMの$1466から転記されているこの値。 これをScanlineごとに変えればいいのですが、 変える値は前回までと違って、リアルタイムに変化します。 「転送内容データ」は、今までどおり 「走査線数」⇒「転送内容(2byte)」⇒ の繰り返しです。 RAMに置いてあるこいつを、 ASMによって「転送内容(2byte)」の部分を 絶えず書き換えることが必要になります。 で、どういう値に書き換えればいいのか。 極めて遠くにあるもの 太陽・星・雲などがそうです。ここまで遠くにあると、 マリオがどこにいても同じように見えるはずです。 よって観測者の位置(レイヤー1座標)とは関係無く動くはずです。 今回は画面上の雲がそれにあたります。 この背景では雲が上中下3列あるので、 試しに各列が違う速度で左に流れるようにしてみましょう。 左に流すにはカメラを右に動かせばいいので、 「$210Fの値がどんどん増える。」ようにします。 各列の幅を計ったら、1F,20,20でうまくいったので、 「転送内容データ」のはじめの部分は 1F xxxx 20 yyyy 20 zzzz。 xxxx、yyyy、zzzzそれぞれに「違う速度で増えていく値」 がストアされるようにすればいいのです。 組み方わかる人は次の見出しまで飛ばしましょう。 まずはASMの側でカウンターを用意しましょう。 空きRAMならどこでもいいのですが… 今回は$7FFEF0を使ってみます。 毎フレームこれに1を足す。 これで$7FFEF0は「毎フレーム1増える値」として機能します。 次に$7FFEF0を使って雲をスクロールさせます。 「毎フレーム1増える」というのはマリオの歩行速度並なので 雲にしては速すぎです。 では、『$7FFEF0の1/2倍』という数字はどうでしょうか。 これは「2フレームに1増える値」として機能します。 スピードが半分になりました。 同様に、$7FFEF0の1/4倍、3/8倍という数字を使えば、 流れるスピードは1/4倍、3/8倍になります。 そこで今回は、 「上段の雲…スピード1/2」 「中段の雲…スピード3/8」 「下段の雲…スピード1/4」 としてみます。 1/2とか1/4をやるなら、ASLやLSR命令を覚えましょう。 12345という数字の各桁を右に動かすと、1234.5。1/10になってしまいます。 各桁を左に動かすと、123450。10倍になってしまいます。 これは10進法だからです。 2進法の世界では、桁を右に動かすと1/2、左に動かすと2倍になります。 LSR(右)、ASL(左)という命令がそれにあたります。 $7FFEF0にLSRした値を「上段の雲があるScanlineでの$210F値」に設定。 もう一度LSRした値を「下段の雲があるScanlineでの$210F値」に設定。 さて、中段の3/8倍という処理ですが、 $7FFEF0を『3倍してから8で割る』ことによって可能です。 注意すべきは、『8で割ってから3倍する』ではダメなこと。 なぜなら、『8で割った』値は、「8フレームに1回1増える」。 それを3倍すると、「8フレームに1回3増える」。 こういうカックカクな動きになってしまうからです。 前者をやれば「8フレームに3回1増える」ので、滑らかです。 $7FFEF0をLDA ⇒ ASL ⇒ $7FFEF0をADC ⇒ LSR3回 によって中段の値が得られます。 それほど遠くないもの 星や雲ほど遠くにある物でないならば、 こちらの動きによって見え方がかわります。 今回は海がそうです。 視点を動かしていくと、 近くのものほど速く動き、遠くのものほど遅く動きます。 視点からの遠さが同じものは、同じ速さで動くはずです。 背景の物体がもし、マリオやレイヤー1と同じ遠さにあるならば、 レイヤー1と同じ速さで(視点の動きに対し)スクロールするはずです。 このとき、$210F = レイヤー1x座標 これで視点の動きに対するスクロールが再現できます。 次に、その背景物体自体が動いてた場合。 視点の動きに加え、さらに物体自体の動きも反映させるには、 $210F = レイヤー1 x座 - 物体の移動値 なぜ引き算かというと、雲の時と同じです。 レイヤー2の静止した一枚絵が右に動く様子を再現するには、 逆にカメラを左に動かすことになるからです。 さて、以上は物体がマリオのそば、レイヤー1と同じ層にいた時の話です。 もっと遠くにあれば、視点に対してもっとゆっくりスクロールするはず。 $210F =(レイヤー1 x座 − もしレイヤー1の距離にいた場合の物体の移動値)× 距離補正 ~ これが一応最終公式となります。 今回の海に適用するとどうなるでしょう。 レイヤー1座標は$1462から得られます。 次にもし海がレイヤー1の距離、つまりマリオの足元にあった場合の移動値を考えます。 今回は波が左にマリオの歩行距離程度の速度で流れるという風にしてみましょう。 波の移動値は毎フレーム-1です。これを引くということは、 「毎フレーム+1する値を足す」のと同じです。 雲の時のカウンタ$7FFEF0を流用しましょう。 また、波なので、左に流れながらも多少ゆらゆらさせてもいいかもしれません。 「ゆらゆらする値」をさらに足しこめばOKです。 「ゆらゆらする値」の取り方の一例 LDA $14 (タイマ) AND #$0F TAX LDA WAVE,x : : WAVE db $00,$00,$00,$01,$01,$02,$03,$03 db $04,$04,$04,$03,$03,$02,$01,$01 こうして、$1462 + $7FFEF0 + WAVE,x という 『波がマリオのそばにあったときの値』を得ました。 とりあえずこれを$7FFEF2に保存しておきます。 その後最後に、距離補正を加えるために数字を掛け、 各Scanlineの$210F値としてストアします。 この掛ける数をScanline毎に色々変えることで、 視点からの距離の奥行きを表現することができます。 これがHDMAで3Dを擬似的に再現できる仕組みです。 (Scanline毎にしか奥行きを変えれないので、 同じScanlineに異なる遠さの物が置けない制限はあるが) さて、海という大変なテーマを選んでしまいました。 どのScanlineも遠さが違います。 かなり多くの段階に分けて距離補正値を変えなくてはなりません。 めんどくさいので20段階くらいに留めます。十分でしょう。 一番近い所でも、マリオよりは遠くにあるので、1倍よりは小さい。 一番遠い所、つまり水平線付近は相当遠いので、1/32倍くらいでOKしょう。 その間を20段階くらいにわけて設定する。 計算方法は自由ですが、自分が思いつく中で一番早いやり方を紹介します。 7/8, 3/4, 5/8, 1/2 7/16, 3/8, 5/16, 1/4 7/32, 3/16, 5/32, 1/8 7/64, 3/32, 5/64, 1/16 7/128,3/64, 5/128,1/32 ラインナップは上の通り。右に読んでいけば大きい(近い)順です。 分子が同じものをひとまとめに計算していきます。 まず$7FFEF2(元の値)から、 元の値の2倍⇒$7FFEF4 (ASL) 元の値の3倍⇒$7FFEF6 (更に$7FFEF2を足す) 元の値の5倍⇒$7FFEF8 (更に$7FFEF4を足す) 元の値の7倍⇒A (更に$7FFEF4を足す) と計算します。 あとはLSRLSR...で分子7のものを全部計算しつつストア。 $7FFEF8をLDAしてLSRLSR...で分子5のものを全部計算しつつストア。 同様に分子3、分子1も全部計算ストアしてミッションコンプリート。 完成品と、LevelASMコードを http //mario.ellize.com/up/src/smw_2022.zipにおいておきます。 紛失したようです。持ってる人居たら、WikiにUPお願いします。 もっといい計算法があったら言ってね。 補足 簡易説明 いきなりハードな内容で、うわぁああああとなった人が多そうなので、 まとめ兼1番簡単な多重スクロールの説明を勝手に補足。 まず雲のような、マリオとは関係なく画面を流れていくものについて。 レイヤー2の位置を毎フレーム1増やせばOK、と考える。(増やすと左に流れますね。) さて、「? 弄る走査線の本数」「? $210Fに入れたい値」をテーブルに書き込んでいくわけですが、 要するに?に毎フレーム1足せばいいだけです。 REP #$20;2byte扱うんで必要ですね。 LDA ? INC A STA ? SEP #$20;元に戻す。 これだけですね。とっても簡単。 INCの数を増やせば馬鹿みたいに早くなるし、 上を参考に何フレームに何回、という風にすればスピードも自由自在です。 次にマリオと関係して動くもの。 上の例では独立して動きつつ、マリオと関係しても動く海なので難しいですね。 ここでは地面でも山でもいいから、勝手には動かないもので練習。 レイヤー1と関係させて動かすことにしましょう。 $1462(レイヤー1の位置)の値をそのまま?に入れれば、レイヤー1とまったく同じ動きをします。 その走査線の部分だけ「レイヤー2スクロール固定」とおんなじことですね。 半分の速度で動かすには… REP #$20;2byte(ry LDA $1462 LSR A;この辺を変えることで、スクロールの早さが変わります。 STA ? SEP #$20;元に(ry これだけです。LSRの回数を増やしたりして、スクロールスピードを変えることができますね。 ちなみに$1462でなく$1466(レイヤー2位置)でもOK。 その場合LMで設定したレイヤー2のスピードに影響を受けます。 以上を理解してもう一回上を内容を読めば、理解しやすいかも? ?ウィンドウあれこれ 工事中 いよいよ講義1単位分程度のボリュームになってきた(笑)。 コメント
https://w.atwiki.jp/osx86/pages/17.html
■XC mini GP7A-HD (2010/02/11) 1. はじめに 1.1. 背景 Mac miniにおいて、メモリは増量(最大8GBまで)、HDDは容量アップやSSDへの変更とアップグレードパスが幾つか存在するが、CPUはマザーボードに直付で後からアップグレードできない為、CPUの違いがモデル間のパフォーマンス差異へ大きく影響する。 Mac miniはCPUの動作クロック周波数により複数のモデルが存在する。 動作周波数 プロセッサ・ナンバ コア数 FSB 2次キャッシュ 64bit対応 VT-x対応 TDP コードネーム 採用モデル 2.00 GHz (266x7.5) P7350 2 1066MHz 3MB ◯ ◯ 25W Penryn(45nm) MB463J/A、MB464J/A 2.26 GHz (266x8.5) P8400 MC238J/A、Early 2009 CTO 2.53 GHz (266x9.5) P8700 MC239J/A、MC408J/A 2.66 GHz (266x10) P8800 Late 2009 CTO しかしながら、CPUの違いがどれだけ各モデル間のパフォーマンスの違いに影響を及ぼすのか容易に把握することはできない。 そこで、Mac miniと構成がよく似たAOpenのIONプラットホームべアボーンキットXC mini GP7A-HDを用いて、CPU及びメモリを変更し、ベンチマークを取得した。本項では、その結果からMac miniのモデル間のパフォーマンス差異を推測し、自分の用途にあったモデルを購入する為の指標となることを目指す。 なお、XC miniはベンチマーク実施にあたり、Mac miniを自作するで実行環境を構築している。 1.2. 注意 本検証結果は、あくまで管理人環境によるもので内容を保証するものではない。また、各検証の結果については営利目的の雑誌メディア(特に、ASCII MEDIA WORKS社Mac People及びMainichi Communications社Mac Fanの2誌)への無断転載、転用、転記は禁止とする。 ■2. Mac miniとXC miniベンチマーク対決 2.1. ベンチマーク実施環境 デバイスリストの結果(Mini PCI ExpressにAirMac互換のBroadcom BCM4328を追加) 00 00.0 Host bridge [0600] nVidia Corporation Unknown device [10de 0a82] (rev b1)00 00.1 RAM memory [0500] nVidia Corporation Unknown device [10de 0a88] (rev b1)00 03.0 ISA bridge [0601] nVidia Corporation Unknown device [10de 0aae] (rev b2)00 03.1 RAM memory [0500] nVidia Corporation Unknown device [10de 0aa4] (rev b1)00 03.2 SMBus [0c05] nVidia Corporation Unknown device [10de 0aa2] (rev b1)00 03.3 RAM memory [0500] nVidia Corporation Unknown device [10de 0a89] (rev b1)00 03.5 Co-processor [0b40] nVidia Corporation Unknown device [10de 0aa3] (rev b1)00 04.0 USB Controller [0c03] nVidia Corporation Unknown device [10de 0aa5] (rev b1)00 04.1 USB Controller [0c03] nVidia Corporation Unknown device [10de 0aa6] (rev b1)00 06.0 USB Controller [0c03] nVidia Corporation Unknown device [10de 0aa7] (rev b1)00 06.1 USB Controller [0c03] nVidia Corporation Unknown device [10de 0aa9] (rev b1)00 08.0 Audio device [0403] nVidia Corporation Unknown device [10de 0ac0] (rev b1)00 09.0 PCI bridge [0604] nVidia Corporation Unknown device [10de 0aab] (rev b1)00 0b.0 SATA controller [0106] nVidia Corporation Unknown device [10de 0ab9] (rev b1)00 10.0 PCI bridge [0604] nVidia Corporation Unknown device [10de 0aa0] (rev b1)00 15.0 PCI bridge [0604] nVidia Corporation Unknown device [10de 0ac6] (rev b1)00 16.0 PCI bridge [0604] nVidia Corporation Unknown device [10de 0ac7] (rev b1)02 00.0 VGA compatible controller [0300] nVidia Corporation Unknown device [10de 0874] (rev b1)03 00.0 Network controller [0280] Broadcom Corporation BCM4328 802.11a/b/g/n [14e4 4328] (rev 03)06 00.0 Ethernet controller [0200] Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller [10ec 8168] (rev 03) 2.2. ベンチマーク結果 (10.6.2) (参考). 比較データ Mac mini Late 2009 CTOカスタムモデル 2.66GHz + HDD 500GB(Hitachi HTS545050B9A300) XBENCHの結果(抜粋): CPU Test 189.24 GCD Loop 311.67 16.43 Mops/sec Floating Point Basic 150.57 3.58 Gflop/sec vecLib FFT 125.92 4.15 Gflop/sec Floating Point Library 298.90 52.05 Mops/sec Disk Test 52.48 Sequential 111.13 Uncached Write 138.35 84.95 MB/sec [4K blocks] Uncached Write 115.27 65.22 MB/sec [256K blocks] Uncached Read 72.57 21.24 MB/sec [4K blocks] Uncached Read 158.43 79.63 MB/sec [256K blocks] Random 34.35 Uncached Write 12.37 1.31 MB/sec [4K blocks] Uncached Write 81.48 26.09 MB/sec [256K blocks] Uncached Read 67.01 0.47 MB/sec [4K blocks] Uncached Read 119.05 22.09 MB/sec [256K blocks] 2.3. ベンチマーク考察 Mac miniとXC miniのGPUは仕様ではそれぞれ9400M、9300Mだが、GPU-Zで確認すると双方とも全く同一のクロックで動作しているのが確認できる。そこで、XC miniにP7350を載せるとMac miniとハードウエアスペック的には全く同一になる為、これを性能比較のベースラインとする。 CPUによる変化をみると、4Thread演算のThread Testを除き、CPUクロックが一番高いT9900がもっとも良い値を出した。Thread Testでは、T9900の3.06GHzと比較するとQ9000のクロック2.00GHzは低速だが、4コアによるマルチスレッド処理は高く、Q9000がT9900の倍の値を計測した。iBenchは動作クロックが最高のT9900が一番高い値を計測したが、これはベンチマークがマルチスレッド処理に対応しておらず、CPUの動作クロックがそのまま反映される為である。 また、CPUの動作クロックが上がるとグラフィックス処理も高速化され、QE/CI/OpenGLともに高い値を出す。これは、Intel Atomを搭載したION PCとの比較からもわかることで、CPUの処理性能が低いとGPU処理が足を引っ張られグラフィックス処理にも影響を及ぼすということである。 メモリについては、2GB(1GBx2)、8GB(4GBx2)ともにDual Channelでの結果であるが、メモリ量が増えるとCPUクロックが同一でも若干ベンチマークの結果が良くなった。測定誤差とも言えなくないが、この点は気に留めていくと良い。 ディスクについては、CPUクロック及びメモリ量による変化はない。ベンチマーク環境は64bit CPU/64bit カーネルで全て揃えている為、CPU内では64bitレジスタアクセス、IO/Kitも64bitで動作と違いがない為である。 2.4. まとめ 1. CPU CPUの演算能力を計測するCPU Testでは、CPUクロック比に応じた結果が出ているのはもちろだが、グラフィックス処理のQuartz Graphics Test、OpenGL Graphics Test、User Interfase Testについても、CPUクロックに応じて高い結果出ている。したがって、高速なCPUを選択すれば、グラフィックス処理もクロック比に応じて高い結果が得られると言える。 XC mini P7350 T9900 P8800(参考データ) CPUクロック (比率) 2.00GHz 3.06GHz(1.53) 2.66GHz(1.33) CPU Test (比率) 144 218(1.51) 189(1.31) Quartz Graphics Test (比率) 179 281(1.57) ー(No DATA) OpenGL Graphics Test (比率) 68 111(1.63) User Interfase Test (比率) 234 395(1.68) *比率はP7350の値を1とした場合の比 2. メモリ 本検証では、メモリを増量することによりCPUを変更せずとも処理速度が若干向上することが見られたが、使用用途に応じて十分なメモリを確保しておき、極力ディスクスワップを発生させないことが何よりも重要である。 2GB(1GBx2)でも文書作成処理やWebブラウジング程度あれば十分であるが、写真加工などメモリを必要とする作業を頻繁に行うのであれば、4GB(2GBx2)に増量した方がよい。また、VMwareなど仮想化ソフトウエアを使用するのであれば、仮想マシンに多くのメモリを割当て、かつホスト側の処理速度の落ちを防止できる為、より多くのメモリに増量すると効果が高い。 3. ディスク ディスク処理にCPUの動作クロック及び搭載メモリ量は影響を与えない。 容量を必要とするのであば500GBのHDDが選択しやすい。性能的にはシーケンシャルリード・ライト共に80MB/s程度になり、標準のHDD(シーケンシャルリード・ライト40MB/s)の倍となるが、日常で頻繁に使用されるランダムアクセスが高速化される訳ではない為、特別速くなったとは感じない。全体的なパフォーマンスの向上を狙うのであれば、大容量のものを選択すると非常に高価となるが、ランダムアクセスが高速化されるSSDが最適であり体感できる程レスポンスが良くなる。 ■3. ベンチマーク詳細 3.1. CPU一覧 CPU Core2 Duo P7350 Core2 Quad Q9000 Core2 Duo T9900 コア sSpec SLG8E(C0 Stepping) SLGEJ(E0 Stepping) SLGEE(E0 Stepping) CPUクロック 2.0GHz(266x7.5) 2.0GHz(266x7.5) 3.06GHz(266x11.5) FSB 1066MHz 倍率 7.5 7.5 11.5 L2キャッシュサイズ 3MB 6MB(3MBx2) 6MB コア数 2 4(2x2) 2 EIST ◎ EMT64 ◎ Intel VT ◎ TDP 25W 45W 35W 補足 OEM向けのFCBGA版をFCPGA化したものでIntel製品ラインナップにはない。本来IntelVT(VT-x)はサポートされていないが、Mac miniに採用されたものと同様にIntel VTが有効になった特別版。 稀少なモバイル版Core2 Quadプロセッサ。MCMパッケージにより2つのCPUコアを1チップにしたもの。 モバイル版Core2 Duoプロセッサとして最速のCPU。IBM LenovoのFRU(補修部品) 42W8197 IBM Lenovo Laptop ProcessorsCPU。L2キャッシュが6MBと大容量なのも特徴。 3.2. メモリ一覧 メモリ SODIMM 204pin 1GB DDR3 SODIMM 204pin 4GB DDR3 モジュール判別表(参考) モジュール 補足 ベンチマークにおけるメモリの組み合わせは2GB(1GBx2)、8GB(4GBx2)で行った。メモリの組み合わせとしては、1GB(1GB+0)、2GB(1GB+1GB or 2GB+0)、3GB(2GB+1GB)、4GB(2GB+2GB or 4GB+0)、5GB(4GB+1GB)、6GB(4GB+2GB)、8GB(4GB+4GB)が取れるが、Mac miniにおいてメモリ構成は変更できる為、本項では他のメモリ容量の組み合わせ及び、シングルチャネル、デュアルチャネル構成の違いについては計測しない。 3.3. OSX 10.6.2での各動作結果 一目するとMac miniと区別がつかないがXC miniでP7350を動作させたもの Mac miniでは存在しないQuadコア動作 iMac Late 2009(C2D 3.06GHz+GeForce 9400M)以上のCPUスペックのXC mini ■4. 12.5mm 2.5inch 1TB HDDを増設 Mac mini同様、光学式スロットインドライブのスペースを利用して12.5mm 2.5inch 1TB HDDを内蔵可能。 XC miniの光学式ドライブはフロントベゼル付きのスロットインドライブの為、HDD変換ベイ付属のフロントベゼルを装着した状態で内蔵可能。 ■5. Windowsの動作結果(not Bootcamp) 5.1. XC mini/Windows XP x64 Edition SP2/HDCP有効 ■6. XC mini専用Chameleon PreBoot CD for Snow Leopard 10.6 6.1. Chameleon PreBoot CD PCでのSnow Leopard起動に必要となるEFIエミュレーション及びkextの追加、DSDTの修正をメモリ上で行うChameleon Pre Boot CDを用い、リテールSnow Leopard 10.6 DVDを起動させる。 ・XCmini_PBCD4SL.zip (experimental release) ・Chameleon-2.0-RC4-r684ベース独自ビルドパッケージ(Windows 7スリープ修正/USB LegacyエミュレーションOFF/IONプラットフォームのグラフィックス名追加) (追記:2010/06/26) DSDT.amlなど一部のファイルがコピーされない不具合を修正。インストールされるDSDT.amlは、環境の構築のし易さを考慮し、メインメモリは2GB(VRAM 256MB)時のもの。メモリを増やした場合、スリープ、シャットダウンが行われない為、各自の環境でDSDTを再作成し、SystemMemoryの値を修正すること。 なお、本PreBoot CDにはChameleon 2.0RC4-r684に、Windows 7スリープ修正/USB LegacyエミュレーションOFF/IONプラットフォームのグラフィックス名追加のパッチを適用した独自ビルドChameleonを使用した。 <試用条件> 1. AOpen XC Mini ベアボーン GP7A-HDを所有していること 2. Apple Mac OS X 10.6 Snow Leopard (Retail)を所有していること 3. zipファイルパスワードについて質問/公開をしないこと(XC mini専用につき他機種では正常動作しない為、所有者以外には配布しない) 4. 本CDの使い方について作者に問い合わせをしない、また、発生した不具合についてサポートが無いことを了承すること 5. 個人利用のみに限った実験公開であることを理解し、Appleの著作権侵害及びメディア等への無断での2次配布は禁止していることを理解すること 条件を遵守できないことが見られた場合は公開を中止する <試用方法> 1. 製品箱に記載されているXC mini GP7A-HDのPart Noを入力し、zipファイルを解凍する xcmini Downloads $ unzip XCmini_PBCD4SL.zip Archive XCmini_PBCD4SL.zip[XCmini_PBCD4SL.zip] XCmini_PBCD4SL.iso password inflating XCmini_PBCD4SL.iso 2. ISOイメージをCD-Rに焼く (Windows/Mac OS Xどちらでも可) 3. 付属のreadme.txtを熟読し手順に従う ・readme.txtからの抜粋 Step 1. intstall OSx86 10.61. insert "XCmini PreBoot CD for SL"2. reboot3. press F11, boot from CD4. after chameleon boot up, eject "XCmini PreBoot CD for SL" CD media5. set retail "OS X Snow Leopard 10.6" DVD media6. press F5 (rescan)7. select "Mac OS X Install DVD"8. press enter9. install Mac OS X10. rebootStep 2. install Chameleon for boot up from hdd partition1. insert "XCmini PreBoot CD for SL"2. reboot3. press F11, boot from CD4. after chameleon boot up, select installed Mac OS X partion (eg. Macintosh HD)5. press enter6. open Finder to "XCmini PreBoot CD for SL" media7. click "Chameleon-2.0-RC4-r684+.pkg"8. install Chameleon to installed Mac OS X partition9. reboot 6.2. OSアップデート 実機同様アップデートできる。ただし、10.6.3からオーディオを動作させる為には、AppleHDA.kextで定義されているCodec IDを使用している音源チップのCodec IDで置き換える必要がある。 ・例. Mac miniの音源チップALC885のCodec ID(0x10ec 0x0885)をXC miniの音源チップALC662の Codec ID(0x10ec 0x0662)で置き換える sudo perl -pi -e 's|\x85\x08\xec\x10|\x62\x06\xec\x10|g' /System/Library/Extensions/AppleHDA.kext/Contents/MacOS/AppleHDA なお、ChameleonのオプションでVBIOS=yesを設定し、VIDEO BIOSのインジェクションを有効にしていると、起動後画面が点滅して切り替わらなくなったり、画面が真っ黒のまま停止してしまう。本来VIDEO BIOSの情報を取得するもので、10.6.2までは正常に機能していたのだが、10.6.3以降にアップデートした場合、不具合の原因となるのではずしておくと良い。 6.3. FakeSMCの更新 (2010/07/12) こちらにある通り、FakeSMCの機能拡張モジュールを用いることで、XC miniのシステム情報を表示できるようになる。 ただし、標準ではXC miniで使用されているSuper IOチップのFintek F71808に対応していないのでProbe処理でKPしてしまう。そこで最新モジュール(r314)をチェックアウトし、下記の通りソースを修正した。 1. Super IOチップのProbe処理にF71808(0x0901)を追加 2. グラフィックスチップのバックエンド処理にION 9300M(0x0874)を追加 3. CPUの温度処理でMobile Core 2 Duo(CPU ID 0x10676)のTj.Maxが105℃となっていたので、P7350用に90℃を追加 本修正により、従来のCPU温度の他、GPU温度やブロア情報など、実機同様に情報が取得できるようになった(内蔵SSDの温度情報が無いがこれはSSDのS.M.A.R.Tに項目が無い為で正しい。温度項目があるe-SATA接続の外付けHDDからは情報が取得できている)。 (ブート時のログ抜粋) FakeSMC Opensource SMC device emulator by netkas (C) 2009FakeSMC Monitoring plugins support by mozodojo (C) 2010FakeSMC Original idea of plugins and code sample by usr-sse2 (C) 2010IntelThermal CPU family 0x6, model 0x17, stepping 0x6IntelThermal Found 2 cores 0 threadsIntelThermal CPU Tjmax 90SuperIO Probing ITESuperIO Probing FintekSuperIO Detected Fintek F71808 on 0x290PTKawainVi startedVendor ID 10de, Device ID 874Architecture 80000nVidia ION 9300MSuperIO Binding key Th0HSuperIO Binding key TN0PSuperIO Binding key VC0CSuperIO Fan 0 name is associated with hardware Fan0SuperIO Binding key F0Ac (追記. 2010/07/17) 本家の方へ動作結果を連絡し、修正内容をソースにマージしてもらよう依頼。 (追記. 2010/07/28) 対応コードがr391にマージされた。 (追記. 2010/09/11) Fintekにおける電圧表示の不具合が修正されたものがr400にマージされた。 6.4. ネットワークドライバの更新 (2010/07/30) 10.6に同梱されるRealtek RTL8168ドライバ(AppleRTL8169Ethernet.kext)はRTL8168Cまでの対応で、リビジョンの新しいRTL8168D/RTL8168Eなどには対応していなかった。 32bitのみの対応であるが、XC miniに採用されているRTL8168Dに対応したドライバ(RTGMac_v2.0.4)がベンダからリリースされている。従来はチップのリビジョンが異なるためDSDTでインジェクトさせても弾かれてしまったが、ドライバが更新された為、そのまま利用することが可能になる。 (追記. 2010/09/21) Realtekから64bitもサポートした新しいRTL8168ドライバ(RTGMac_v2.0.5)がリリースされた。サポートされるチップは以下の通りである。 RTL8111B/RTL8168B/RTL8111/RTL8168 RTL8111C/RTL8111CP/RTL8111D(L) RTL8168C/RTL8111DP/RTL8111E バイナリの中身を確認すると、i386、x86_64だけでなく、ppc用のバイナリも含まれている。 bash-3.2# file AppleRTL8169Ethernet AppleRTL8169Ethernet Mach-O universal binary with 3 architecturesAppleRTL8169Ethernet (for architecture x86_64) Mach-O 64-bit kext bundle x86_64AppleRTL8169Ethernet (for architecture i386) Mach-O object i386AppleRTL8169Ethernet (for architecture ppc) Mach-O object ppc 動作に支障は無いが、ppcバイナリは10.6では不要なので、気になる場合はファイルサイズの縮小にもなるので、lipoコマンドで削除すると良い。 bash-3.2# ls -latotal 1312drwxr-xr-x 3 root wheel 102 9 13 16 55 .drwxr-xr-x 4 root wheel 136 9 13 16 55 ..-rw-r--r-- 1 root wheel 669048 9 13 16 55 AppleRTL8169Ethernetbash-3.2# lipo AppleRTL8169Ethernet -remove ppc -output AppleRTL8169Ethernet.intelbash-3.2# ls -latotal 2120drwxr-xr-x 4 root wheel 136 9 21 19 39 .drwxr-xr-x 4 root wheel 136 9 13 16 55 ..-rw-r--r-- 1 root wheel 669048 9 13 16 55 AppleRTL8169Ethernet-rw-r--r-- 1 root wheel 411972 9 21 19 39 AppleRTL8169Ethernet.intelbash-3.2# file AppleRTL8169Ethernet.intel AppleRTL8169Ethernet.intel Mach-O universal binary with 2 architecturesAppleRTL8169Ethernet.intel (for architecture x86_64) Mach-O 64-bit kext bundle x86_64AppleRTL8169Ethernet.intel (for architecture i386) Mach-O object i386bash-3.2# mv AppleRTL8169Ethernet.intel AppleRTL8169Ethernetbash-3.2# ls -latotal 808drwxr-xr-x 4 root wheel 136 9 21 19 39 .drwxr-xr-x 4 root wheel 136 9 13 16 55 ..-rw-r--r-- 1 root wheel 411972 9 21 19 39 AppleRTL8169Ethernet また、RTL8111Eのサポートを主として、RealtekR1000SL.kextに代わるオープンソースのドライバプロジェクトも開始されている。 ・Lnx2Mac's Realtek RTL81xx Driver Project Page (追記. 2010/09/23) RTGMac_v2.0.5(Realtek)、 RealtekRTL81xx v0.0.67(Lnx2Mac)の機能、安定性、パフォーマンスの違いなどについて、こちらで詳細がまとめられている。 (追記. 2011/03/18) RTGMac_v2.0.6がリリースされている。なお、10.7 Lion Previewに同梱されるRealtek RTL8168ドライバ(AppleRTL8169Ethernet.kext)は、従来同様RTL8168Cまでの対応に留まっていた。 (追記. 2011/10/09) OS X 10.7 Lion用にビルドし直された、RTGNICv2.0.6For10.7.zipがリリースされている。機能的に違いはないと思われるが、従来から不要であったppcバイナリが含まれなくなった。 なお、Realtek RTL8168のドライバ(AppleRTL8169Ethernet.kext)は10.7からAppleのサポート対象外となってしまったので、チップベンダのRealtekから提供されるドライバか、もしくはオープンソースのRTL81xx Driver(最新のRTL8111E、RTL8111E-VL、RTL8111Fにも対応)が必要になる。 6.5. 内蔵SDカードリーダーを認識させる (2010/11/15) USB接続のSDカードリーダーは標準のドライバで認識できるが、10.6.5からシステムプロファイラの項目でカードリーダーの項目、及びexFATフォーマットのサポートが追加された。システムプロファイラで、カードリーダーとして認識されるものは実機内蔵のものに限られるが、USB接続であることには変わりない(Macmini4,1は例外で内部PCIex1接続)。そこで、Product IDとVender IDを追記しAppleStorageDrivers.kextのプラグインであるAppleUSBCardReaer.kextに認識させれば、サードパーティのSDカードリーダーも表示されるようになる。 AppleUSBCardReader.kextのInfo.listを書き換えることで認識させても良いが、アップデートする度に修正が必要となるので、ここでは、/Extra/Extensionsにデバイスインジェクト用のLegacyUSBCardReader.kextを追加し、そのInfo.plistに使用したいカードリーダーのエントリを登録することで認識させる。 <手順> 1. 自分が使っているカードリーダーのProduct ID、Vender IDをシステムプロファイラのUSBで確認 2. 16進数で表示された値を10進数に変換 3. LegacyUSBCardReader.kextのInfo.plistにidProduct、idVendorを登録 4. LegacyUSBCardReader.kextを/Extra/Extensionsに置く 例えば、XC miniに内蔵されているカードリーダーはRealtek製で、Product ID 0x0158、Vender ID 0x0bdaなので、それぞれ10進数に変換し、Product ID 344、Vender ID 3034を登録する。 /Extra/Extensions/LegacyUSBCardReader.kext/Contents/Info.plist key idProduct /key integer 344 /integer key idVendor /key integer 3034 /integer 参考:How-To “Native” Card Reader driver for OSX86 なお、AppleUSBCardReaer.kextを使うと、アイコンリソースとしてSD.icnsが使用される為、SDカードのアイコン表示も変更される。 (追記. 2010/11/16) フォーラムでも同じ試みがなされているのを確認。こちらでは、Apple製のカードリーダとしても認識される。 6.6. TRIMサポートを有効にする (2011/03/28) MacBookPro Early2011に付属する10.6.6からSSDのTRIMサポートが有効になったが、TRIMコマンドが有効になるのはApple製のSSDのみ(ファームウエアの文字列が"APPLE SSD"で始まるもの)である。 しかしながら、こちらのHow to activate TRIM on any SSDにある通り、IOAHCIBlockStorage(MacBookPro Early 2011にプレインストールされた10.6.6に含まれる)にハードコードディングされている文字列の"APPLE SSD"を使用しているSSDの機種名の頭9文字で書き換えることでその制限を回避できるようになる。 例えば、SAMSUNGの128GB SSDの場合、機種名の頭9文字は"SAMSUNG M"となるので、下記コマンドで"APPLE SSD"を"SAMSUNG M"で書き換えることで、TRIMサポートを有効にできる。 sudo perl -pi -e 's/\x41\x50\x50\x4c\x45\x20\x53\x53\x44/\x53\x41\x4d\x53\x55\x4e\x47\x20\x4d/g' /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage (追記. 2010/07/04) 10.6.8アップデートから、MBP Early2011、iMac Mid2011以外の機種でもApple純正のSSDを使用している場合に限り、TRIMサポートが行えるようになった。 IOAHCIBlockStorageの処理ルーチンで純正SSDかどうかを判別する為の文字列"APPLE SSD"を使用しているSSDの機種名の頭9文字で置き換えてもよいが、下記の通り判別箇所をヌル(0x00)で置き換えることで、任意のSSDでTRIMサポートを有効にすることができる。 sudo perl -pi -e 's/\x41\x50\x50\x4c\x45\x20\x53\x53\x44/\x00\x00\x00\x00\x00\x00\x00\x00\x00/g' /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage TRIMコマンドの効果(追記. 2011/04/01) SamsungのSSDは書き込み速度の落ち込みが激しいが、fsckでTRIMを実行することにより書き込み速度の落ち込みが初期状態(Read 220MB/s、Write 200MB/s)の85%まで改善された。SecureEraseを使えば、ほぼ初期状態まで回復することを確認しているが、fsckでTRIMコマンドを実行し、手軽に書き込み速度の回復を行えるのは非常に効果がある。 1. シングルユーザモードで起動 2. /sbin/fsck -ffy TRIM実行前 Results196.41System InfoXbench Version1.3System Version10.6.7 (10J869)Physical RAM8192 MBModelMacmini3,1Drive TypeSAMSUNG MMCRE28G5MXP-0VBDisk Test196.41Sequential154.29Uncached Write101.2062.13 MB/sec [4K blocks]Uncached Write149.2484.44 MB/sec [256K blocks]Uncached Read145.4342.56 MB/sec [4K blocks]Uncached Read405.34203.72 MB/sec [256K blocks]Random270.18Uncached Write126.5413.40 MB/sec [4K blocks]Uncached Write206.4266.08 MB/sec [256K blocks]Uncached Read2556.0918.11 MB/sec [4K blocks]Uncached Read600.01111.34 MB/sec [256K blocks] TRIM実行後 Results277.38System InfoXbench Version1.3System Version10.6.7 (10J869)Physical RAM8192 MBModelMacmini3,1Drive TypeSAMSUNG MMCRE28G5MXP-0VBDisk Test277.38Sequential249.64Uncached Write283.54174.09 MB/sec [4K blocks]Uncached Write298.84169.08 MB/sec [256K blocks]Uncached Read147.5643.19 MB/sec [4K blocks]Uncached Read421.31211.75 MB/sec [256K blocks]Random312.05Uncached Write124.7513.21 MB/sec [4K blocks]Uncached Write361.41115.70 MB/sec [256K blocks]Uncached Read2564.0318.17 MB/sec [4K blocks]Uncached Read607.79112.78 MB/sec [256K blocks] 6.7. 10.6.8にアップデートする (2011/07/04) 10.6.8にアップデートすると、IOPCIFamily.kextの処理において起動時にコンソール切り替えが発生し、Single User Mode(-s)やVerbose(-v)での起動ができなくなった。10.6.7のものに戻したり、ソースの該当ロジックを無効にするなどで暫定的な回避策を取ることができるが、Kernel Flagsにnpci=0x2000を追記することで、本症状を回避することができる。 また、AppleHDA.kextも大幅に変更されているので、ALC885/889a以外ではサウンドが有効にならない。こちらも、同様に10.6.7のものに戻すか、従来同様バイナリパッチを適用した上、コーデックとプラットフォームを表す定義ファイルを修正する必要がある。 参考:ALC662 Asus P5QL SE, test for all asus (with alc662) boards ■7. BIOSアップデート(2010/06/29) カテゴリがDriverとなっているが、BIOSアップデートファイル(*)が公開(2010/06/29)された。バージョンはR1.05で、変更内容は下記の通りである。 Descriptions 1. Remove the item "Disabled" from "iGPU Frame Buffer Size".2. Display the BIOS version string in BIOS setting main menu.3. Correct the BIOS setting "ACPI Suspend Type" to "Auto". 4. Set the default of "SATA Mode Select" to "AHCI Mode".5. Display all boot devices in BBS menu6. Add the eSATA port device removable attribute7. Update the audio verb table for WHQL verification8. Update thermal profileNote For ready system, please keep same setting of BIOS 'SATA mode select' before upgrade BIOS (*) カテゴリがDriverからBIOSに修正された(2010/07/05) 本BIOSの5の修正により、起動時にF11を押すことで、ブート可能な全てのデバイスの一覧が表示されるようになった。従来、各デバイスのブートリストの一番最初にあるもののみが、ブートデバイスの一覧に表示されていた為、USBメモリやSDカードからブートする場合は、BIOS設定でブートリストの一番最初におく必要があった。本修正により、ブートリストを変更することなく、USBメモリやSDカードからのブートができるようになる。更に、従来のBIOSでは、OSx86を用いた時、スリープ後SDカードを認識しなかったが、本バージョンからSDカードを認識するようになった。 また、8でthermal profileが更新されたが、一部のCPUではBIOS読みでCPU温度が高く表示されてしまう。本来、正しい値に表示するための修正と思われるが、確認した所、P7350においてTj.Maxが90℃である所が、105℃と更新されている。 CPU温度はコア内にあるDTS(Digital Thermal Sensor)が示す値を、Tj.Max(CPUが稼働できる最高温度を示すもので、強制的に停止がかかる温度の目安)から引いたもので、温度=Tj.Max-DTSから求められる(なぜこのような計算式を使うのかは少し考えればわかるはず)。したがって、Tj.Maxの値が高くなると、実際の温度よりも高い温度を表示してしまう。また、Tj.Maxが高いということは、CPUの稼働上限温度があがるということで、CPUの温度が上がっても問題ないと判断され、FANの回転数を上げる閾値が高いということである。 P7350に限っては旧BIOSで設定されていた90℃の方が正しい(P8400などは105℃だが、P7350はP8400よりも低く90℃が正しい。CPUIDの値010676hで判別しているようで、他のC2Dと同列に扱われてしまっているようである)。 なお、SATAモードがデフォルトでAHCIとなった為、サポートOSからXPがはずれている点に注意が必要である。 OS Support Vista x64,Vista x86,Windows 7,Windows 7_64 ただし、これはXPをサポートしないというではなく、XPで使用するには、SATA(IDE)モードに変更するか、自己責任でOSセットアップ時にACHIドライバの追加を行う必要があるということを示唆している。この点については、当初記載がなかったが、FAQに回避策Q5-Q7が追記がされているので目を通しておくと良い。 (追記. 2010/07/10) 8のthermal profileの変更が原因と思われるが、BIOSアップデート後、温度があがってもFANがなかなか回らず、MCPがハングしてしまう現象がみられるようになった。 P7350では、従来Tj.Maxが90℃扱いだったのだが、BIOS更新で105℃と上がっており、CPUの温度が高くても問題ない→FANの回転数を上げる閾値が高い(結果、CPUが高温になるまでなかなかFANを回さない)となっているようで、温度が上昇してもFANの回転数が上がらない為、ヒートパイプでCPUと一緒に冷却されているMCPが先に熱暴走してしまい、その結果、MCPがハングするようである。 (追記. 2010/10/19) 10/19付けでBIOSアップデートファイルが公開されたが、バージョンはR1.05のままで、アップデートツールがAMI製の汎用ツールに変更となったのみで、アップデートファイルそのものには変更点はなかった。 戻る
https://w.atwiki.jp/swing-ewi/pages/13.html
EWI3020 EWI3020はEWI3000のマイナーチェンジ版(?)です。 音源はアナログ音源のEWI3020mとPCM音源のEWI3030mと二つあります。 INSTケーブルで相互を接続すれば音色作りに幅が増えるんじゃないかと思います。 EWI3020mを2台でINSTケーブルで接続する事も出来る・・・と思います。 EWI3020m ファクトリーリセット [UP]ボタンと[DOWN]ボタンと[WRITE]ボタンを全て押しながら電源を投入します。 EWI3030m ファクトリーリセット [SOUND LEVEL]ボタンと[LABEL]ボタンの全て押しながら電源を投入します。
https://w.atwiki.jp/sm4wiki_mix/pages/54.html
ここは? 資料が英語ばかりの鬼門「HDMA」の説明らしき物です。 しかしHDMAはおろかWikiの編集も付け焼刃なのでグダグダです。 墓場のうんちくが来るまでの間に合わせってことでよろしく。 目次 ここは? 目次 描画あれこれ 走査線/Scanline、H-blank、V-blank 実際に描画するには まず何をすればいい? PPU チャンネルとテーブル テーブル チャンネル 補足 チャンネルとテーブルの関係 実践1:サイズの異なるモザイク チャンネルの設定 転送内容と効果 スクリーンあれこれ メインスクリーン、サブスクリーン 通常のLevelでの描画構成 実践2:固定色層の応用を考える 実践3:固定色層の応用を考える? 実践3:マルチレイヤースクロール 目的 RAM $210F 極めて遠くにあるもの それほど遠くないもの 補足 簡易説明 ウィンドウあれこれ コメント欄 描画あれこれ 走査線/Scanline、H-blank、V-blank SFCでは画面が1秒間に60フレームほど描かれている気がします。 そのうちの1回を取り上げて考えてみましょう。 まずは左上の1ドットから描画がスタートし、右上に向かいます。 こうして一番上の1行が描かれます。 こういった横方向の行を「走査線 Scanline」と言います。 一番上の行がScanline 0です。 二番目の行がScanline 1です。 一行目が右まで描かれると、次は二行目の左端を描くことになりますが、 それまでに僅かな休み時間があります。これがH-blankです。 同様に、各Scanlineの描画が終わるたびにH-blankが来ます。 ゲーム画面の一番下の行はScanline 225 です。 ここまで描ききった後のScanline 226〜261にあたる期間は もうずっと休み時間です。これをV-blankと言います。 H-blankが土日だとしたら、V-blankは長期休暇みたいなものなので長いです。 その後はScanline 0に戻り、次のフレームの描画が始まります。 実際に描画するには さて、なぜこんなblankの話をしてるかというと、 描画情報の変更はこのblank中でやらなければならないからです。 だからLevelASMとかで直接描画情報を変えようとしても、 その瞬間が奇跡的にblank中だった場合しかうまく行かないことになります。 ただしいくつかのエミュではこういうのを考慮してないので blank無視しても正常に動作してしまう罠。 実機で動かなくてもエミュで動けばいいじゃんと見るかどうかは人によるけど… 最新のエミュでは、ちゃんと(?)blank無視した変更は反映されないようになってます。 じゃあblankのタイミングを狙うにはどうすればいいのか? 1つは、NMIという割り込みを利用する方法です。 画面下、Scanline 225を描いてV-blankに突入した瞬間、 流れているプログラムは一旦ストップ。 Snes $00816Aから始まるNMIルーチンが割り込んできます。 この中でblank中でなければならない処理を まとめてやってしまうというのです。 しかしblankはV-blankだけではありません。 H-blank中に描画設定を変えるとどうなるでしょう。 たとえば、Scanline0の前で明るい画面に設定し、 Scanline112の後のH-blankで暗い画面に設定すれば、 画面上半分(0〜112)は明るく、画面下半分(113〜225)は暗くなります。 このようにScanlineとScanlineの間で描画設定を変えることができます。 こういった、指定したH-blankで描画設定を変えるという処理を 自動的にやってくれる装置があります。 これがHDMAです。 まず何をすればいい? まずはHDMAを実装しましょう。いくつか方法があります。 ・CからBMF98567氏のHDMAを持ってきてインストール ・自作物展示場や、あっぷろだXのASM_Supporter 余計な機能がつきすぎるのが嫌でなければ、 ASM_Supporterをオススメします。 後先考えるとインスタントNMIがあった方が便利っちゃあ便利。 xkasの使い方は、あっぷろだXを参照。 いや、CMのつもりでは… 要望があれば、HDMAだけを入れるバージョンも作りますが。 PPU さんざん「描画設定を変える」とかいう表現を使ってきたわけですが、 とりあえずそれがどういうことかを知らなければなりません。 SFCにはPPUというユニットがあり、 こちらのプログラムとは独立して、描画処理を行ってます。 このPPUにこちらから働きかけます。 難しそうですが、結局は$21xxへのストアです。 $21xxに値をストアするというのがPPUとの手動通信です。 とりあえずすずめ愛好会のこのページを見てみましょう。 対してHDMAは自動通信です。 HDMAは「Scanline毎に$21xxの値を自動で変えてくれる物」 だということになります。 チャンネルとテーブル ついに実際に簡単なHDMA効果を作ってみます。 しかし、いきなりLevelASMから作るのは大変なので、 チートで作ることにしましょう。 テストもしやすいですし。 というわけで、代入可能なメモリビューアがついているエミュを用意しましょう。 ちなみに私が使っているのは音楽再現度的な意味でSNESGTです。 最新のβ版ではblankも考慮されている上、 指定アドレスにジャンプができるので旧版より使いやすいです。 テーブル まずHDMAをインストールしたROMを起動して好きなLevelに行き、ポーズ。 メモリビューアを開いて、HDMAテーブルのある位置を見ましょう。 初期設定ではテーブルの位置は、BMF98567氏のHDMAでは$7FFF00 ASM_Supporterでは$7FFE00と決められています。(現在の設定では$7F8190ですが変更可能) この先は後者として話を進めていきますので、 前者の場合は、各アドレスの3桁目をE⇒Fと脳内変換してください。 これからこのテーブルという領域に、 HDMAに必要な手続きを行っていきます。 そしたら先ほどインストールしたHDMA内部機構が 手続きに従い、自動的にHDMAを実行してくれるのです。 チャンネル HDMAには0〜7の8つのチャンネルがあります。 各チャンネルに「Scanline毎に$21xxの値を変える」という 一まとまりの仕事を割り振ることができます。 つまり最大同時に8種類の仕事をさせることができるのです。 ただ本家でもHDMAが使われている箇所があるので、 本家HDMAの使用チャンネルとかぶるとキャンセルされてしまうかも。 チャンネル3辺りを使えば心配無いでしょう。 本家HDMAの使用状況を知りたければ、 ここにあるデバッグ用Snes9xでHDMAをトレースしてみましょう。 補足 チャンネルとテーブルの関係 自分が理解するのに詰まったところなので勝手に補足。 さて、上記のようにHDMAには8つのチャンネルがあり、同時に最大8種類の効果を出すことができます。 色々弄れば色々効果が出せるわけですが難しい。そこで「必要事項を指定の場所に入れてくれれば後はやってやんよ」 というのがBMF98567氏の作ったものです。 まず「チャンネルの設定パラメータを入れるRAMアドレス」(=チャンネルごとのテーブル)がチャンネルごとに6つずつあります。 ここに転送方法とか弄る対象とか、設定を適宜入れていきます。 ここで設定した「転送したいデータを入れるRAMアドレス」(=転送内容のテーブル)に、弄る走査線の数などを入れていきます。 前者はxkasなどでプログラムを挿入するときに決めるもので、後から変更はできず、 後者は毎回自分の好きなところに指定する必要があります。 次項からその実践です。 実践1:サイズの異なるモザイク チャンネルの設定 まずはシンプルな1バイト入力系をやりましょう。 モザイク設定は$2106ですね。 テーブル周辺ははじめは全部00になっています。 ここにメモリビューアから入力していきます。 結論を言うと、下のスクショですね。 ここまで行く過程を説明しましょう。 まず「チャンネル3」を使うことに決めました。 図のチャンネル3テーブルに基本設定パラメータを書いていきます。 まずはチャンネルON宣言です。 テーブルの1バイト目には、下の表に従って値を入れましょう。 今回はチャンネル3なので、08ですね。 チャンネル 0 1 2 3 4 5 6 7 1バイト目の値 01 02 04 08 10 20 40 80 ただし、今すぐ入力するのはやめてください。 まだ設定が終わってないのにスイッチONにするのは自殺行為ですね。 軽くバグります。 2バイト目は、転送方式の設定です。 一番難しいところです。下の表を見ましょう。 2バイト目の値 1回分の処理の挙動 使用例 使用例で何が起こるか 00 1アドレスへ1byte書き $2106にXXを代入 モザイク設定がXXに 01 2アドレスへ1byte書き $2126にXX⇒$2127にYY ウィンドウ1左端XX、右端YY 02 1アドレスへ2byte書き $210FにXX、ついでYY レイヤー2 x座標がYYXXに 03 2アドレスへ2byte書き 拡大縮小回転マトリクス 2chに分けて画面に濃淡の演出使用してるゲーム例 アダムスファミリー 04 4アドレスへ1byte書き 思いつかん $2106は単純に1バイトを入力するものなので 00を入力します。 3バイト目は、弄る対象です。$21xxのxxを入力します。 今回は$2106モザイクなので、06です。 4〜6バイト目に、転送内容テーブルのありかを入力します。 空き場所ならどこでもいいですが、 今回は近くの$7FFE40に「転送内容」を書いていくことにします。 よって40 FE 7F 転送内容と効果 さて、ついに基礎設定が完了しました。 次はいよいよ「転送内容」を書いていきます。 さっき$7FFE40に指定したので、そこに書いていきましょう。 基本は「上から数えるScanline数⇒代入値」の繰り返しです。 こっからは好きなようにしていいですが… とりあえず上から40行分にサイズAの大モザイクをかけてみましょう。 $2106の設定はAFです。 よってまず「40 AF」と書いていきます。 画面全体にモザイクがかかるでしょうが、無視して次行きましょう。 次の40行分はモザイクをサイズ6と、少し小さくしてみます。 続きに「40 6F」と書きます。 次第に小さくして、最終的に「40 AF 40 6F 40 2F 40 00 (00)」としました。 その結果がスクショです。そのとおりになってますね。 ちなみに(00)は終了宣言です。 こうして、チートでHDMAを作ることができました。 あとは今回のチート入力を再現するLevelASMを組むだけです。 組み方は65C816プログラミングの方を見ましょう。 スクリーンあれこれ メインスクリーン、サブスクリーン このへんからだいぶ怪しい説明になります。 変なこと言ってたら直しちゃってください。 次のステップに進む前に メインスクリーン、サブスクリーンとかを知っておくといいです。 もう一度すずめ愛好会を見ましょう。 今回見るべきは、 $212C(メインスクリーン構成) $212D(サブスクリーン構成) $2131(カラー演算対象設定 $40から転記) $2132(固定色層の色) ただし、$2131に関しては、 毎フレームのNMIで$40からコピーされているで、 $2131を弄ってもすぐ潰されてしまいます。 かわりに$40を弄ればOKです。 描画される画面は、 スプライト・固定色・BG1・BG2・BG3・BG4といった層の 重ね合わせで構成されているのですが、 細かく言うともう少し複雑です。 これらの層をメインスクリーン・サブスクリーンにグループ分け。 私たちにはメインスクリーンだけが見えます。 内部でサブスクリーンというのを別に構成しておきます。 この結果を、「メインスクリーンのうちの背景層」に足し加える。(カラー演算) そういう足し算の結果、メインスクリーンの後ろにサブスクリーンがあるように見えます。 足し算というとわかりにくいですね。 サブスクリーンの内容を、プロジェクターで映し出すような感じです。 $40に関してはここでも説明しておきましょう。 $40の8つのbitを I全BS4321 と表すとすれば、それぞれ I/D…カラー演算 加or減 全/半 …カラー演算 1倍or半分(プロジェクターの威力半減) BS4321…それぞれ背景層/スプライト/BG4321。 1としたbitに対応する層へ演算する。(プロジェクターを照射する) 口頭ではわかりにくいので、実例を見ましょう。 通常のLevelでの描画構成 スクリーン構成は メイン…BG1,SP サブ …BG2,BG3 $40 = 20 (+OB....)なので、加算対象は背景層のみ。 図示すると下のよう。 さて、ここで一つ考えてみましょう。 サブスクリーンが背景層に加算されていますが、 これをやめたらどうなるでしょう? $40の値を20⇒00にしてみましょう。 「BG2、BG3、固定色」が見えなくなります。 では、背景層だけでなく、BG1にも加算するとどうなるでしょう。 $40の値を、20⇒21にしてみましょう。 プロジェクターが背景層だけでなく、レイヤー1にも照射をするという感じで、 レイヤー1にサブスクリーンの内容が映ってしまいます。 つまり、レイヤー1が透けているように見えます。 同様に、スプライトにも照射して透けさせることができますが、 スプライトのうち「前面に表示」設定のタイルは どういうわけか特別扱いを受けているようです。 こういった加算の影響を受けません。 お化け屋敷ではこれを利用して、 透けたテレサ・透けないテレサを区別しているようです。 さて、これを見ていると、 別にBG1,2,3,スプライト全てをメインスクリーンに設定してもいい気がします。 何故こんな回りくどいことをしているのか。 それは、スプライトのうち「背面に表示」設定のタイルのためです。 こう設定すると、タイルはメインスクリーンの一番後ろに行きます。 BG2をメインスクリーンに設定すると、タイルがBG2背景の後ろに表示されます。 要するに、ピーパックンとかが背景の後ろに消えてしまうのです。 一方、レイヤー2を使ったマップでは、 別にスプライトがレイヤー2に隠れても問題ありません。 なのでここではBG2はメインスクリーンに設定されています。 実践2:固定色層の応用を考える さて、上の図の中に、固定色層というのがありますね。 これについて考えてみましょう。 こいつは$2132での色設定に従った単色層です。 見ての通りSMWの通常Levelでは、これはBGカラーとして使われています。 LMで設定された背景色は、RAM $0701-$0702 に保存されていて、 ここの値が毎フレーム$2132に代入されています。 ですから$0701を弄れば固定色層の色を変えることができ、 結果背景の色が変わります。 $2132を弄るHDMAをつけてみましょう。 Scanline毎に固定色層の色を変えるって事です。 こうなると固定色層はもはや単色ではなく、 グラデーションのかかったきれいな層となります。 やり方は前回とほとんど同じです。 ▲ウホッ、いい空… 1バイト目はスイッチ。 2バイト目は転送設定。「00」 3バイト目は弄る対象が$2132だから「32」 そして転送内容データの置き場所を設定して、 そこに「走査線数」⇒「値」⇒「走査線数」⇒「値」… HDMA自体の基本は全く同じ。 今回注意したいことは、$2132の使い方が少し変則的なことです。 $2132に入力するのは、「固定色層の色」という値ではなく、 「PPUよ、R/G/Bの値をxxに変えよ!」という命令なのです。 PPUの内部で固定色層の色が(R 12)(G 02)(B 0F)となっていたとします。 図にも書いてある通り、 20 + xx の値を$2132に入力すると、 PPUはRの値をxxにしろという命令を受け、 (R xx)(G 02)(B 0F)というふうに変えます。 60 + xx の値を$2132に入力すると、 PPUはRとGの値をxxにしろという命令を受け、 (R xx)(G xx)(B 0F)というふうに変えます。 もう気づいたでしょうが、$2132への入力一発では、 RGBに同時に異なる値を設定することはできません。 転送設定「00」では、1スキャンラインで入力できるのは一回だけ。 これが不自由だと思うなら、転送設定「02」を使えばいいかも。 その場合、転送内容のところには 「Scanline数」⇒「値(1byte目)」⇒「値(2byte目)」⇒「Scanline数」… となるので、3バイト1グループになることに注意。 さて、図のグラデーションの組み方ですが、 まずScanline0の描画開始前に「LMで設定した背景色$0701」の値が (R)(G)(B)に代入されています。今回は淡い青です。 Scanline 0 …「60」RとGを00にして深い青にする Scanline 2 …「9F」Bを1F(max)にして濃い青にする Scanline 5 …「62」RとGを02にして少し明るくする Scanline 9 …「63」RとGを03にしてもう少し明るくする : : とまあ、こんな感じでグラデーションをやっていってます。 狙い通りの色合いを出すなら、やはり見ながら調整できるチートが便利。 完成したらLevelASMを組みましょう。 実践3:固定色層の応用を考える? しかしCとかで流行っているグラデーション演出は、 さっきのとは少し違ったはずです。 なんていうか、背景ではなく画面全体に色が映っているかのような。 ?での知識を活かして、こちらをやってみましょう。 まずBG1-3、SPといったレイヤーを全てメインスクリーンに移してしまいます。 こうするとサブスクリーンにあるのは固定色層のみになります。 ここでこのサブスクリーンを、メインスクリーンの全ての層、 レイヤー123・スプライト・背景に映し出せばOKです。 $40に37を代入しましょう。 この時ピーパックンなどがレイヤー2の後ろに行ってしまう問題は、 どうしようもありません。副作用だと思ってください。 この場合はピーパックンを使わないか、 ピーパックンのグラフィックルーチンを弄って フラグによっては前面に出るようにするか。 インスタントNMIを使って$0303,xにしらみつぶしにTSB #$30しまくるか。 どのみちこの設定ではレイヤー1と2の間にスプライトを挟むことはできないので まあ使わないのが一番でしょう。 さて、今回はHDMAチートの前に準備が必要です。 まずメイン/サブスクリーンの設定をしなくてはなりません。 これらはSMWでは『$2131←$40』のようにサポートされていないので、 自作のLevelASMでやる必要があります。 まずはそこから作ってみましょう。 $212C(メインスクリーン構成)に17を代入し、 $212D(サブスクリーン構成)に00を代入します。 エミュでは普通にLevelASMから直接代入してもできるんですが、 本家SMWでPPUアクセスは全てNMIに回されているのを見るに、 恐らく実機では動かないのでしょう。 従って、インスタントNMIでやります。(CMじゃry) 講座も来たことだし、xkas用でいいよね! !NMI = インスタントNMIのJSLのありかとします。 CodeStart LDA $06B6;処理は開始1回だけで十分 BEQ INIT;ステージ開始時は00になっているからINITへ RTL INIT INC $06B6;2回は行わないようにする ;INCすることで、2回目以降は ;BEQ INITされない STZ $24;ステータスバー特別扱い解除 LDA #$01; TSB $06AD; LDA #$37;固定色層を、全レイヤーに投射 STA $40 JSL !NMI;次のV-blankのときに JSL NMIset;JSL NMIsetが行われるよう予約 RTL NMIset LDA #$17;予約内容 STA $212C;メインスクリーン:全部 STZ $212D;サブスクリーン :固定色のみ RTL このLevelASMを入れたステージに行ってみましょう。 画面全体が背景色を帯びていることだと思います。(マリオは無事) $701-2を弄って、色が変わることを確認しましょう。 本来背景色だったものを前面に持ってくるギミックなので、 もともと背景色があまり使われていないスイッチ宮殿や、城等でやると映えます。 さて、単色では物足りないなら、ここでHDMAです。 背景グラデーションの時と全く同じなので、図だけを投下しておきます。 LevelASMコードも投下しておきます。 ただし、CONTENTの内容がとても長いので、 外部ファイルGRAD.binとして入れるようにしています。 自信のある人は解読してみてください。 実践3:マルチレイヤースクロール 目的 今回のテーマは「『転送内容データ』を動的に変化させる」です。 「背景としてのレイヤー2」を3D的にスクロールさせることが目的です。 今回は下の背景を3Dスクロールさせてみましょう。 (既にHDMAグラデーションをかけてあります。) そうそう、前回言い忘れてましたが、 加算グラデーションをかける時は、元の色を暗めにしておきましょう。 加算なので、RGB各成分を元の色より下げることはできませんし。 さて、普通の設定では、 雲も海のどの部分も、同じ分だけスクロールしてしまいます。 これは奇妙。 近景は速く、遠景は遅く動いて見えるようにしたいものです。 RAM $210F $210Fはレイヤー2スクロールのx座標。 むしろレイヤー2を映すカメラのx座標と言ったほうが分かりやすいかも。 LunarMagicで見るような、レイヤー2の一枚絵を 正面から映しているカメラを想像しましょう。 xが大きいほど、カメラは右にあることになります。 xを増やすと、カメラは右に進み、 すると映像ではレイヤー2が左に流れていくことになります。 図も載せときます。 普段はRAMの$1466から転記されているこの値。 これをScanlineごとに変えればいいのですが、 変える値は前回までと違って、リアルタイムに変化します。 「転送内容データ」は、今までどおり 「走査線数」⇒「転送内容(2byte)」⇒ の繰り返しです。 RAMに置いてあるこいつを、 ASMによって「転送内容(2byte)」の部分を 絶えず書き換えることが必要になります。 で、どういう値に書き換えればいいのか。 極めて遠くにあるもの 太陽・星・雲などがそうです。ここまで遠くにあると、 マリオがどこにいても同じように見えるはずです。 よって観測者の位置(レイヤー1座標)とは関係無く動くはずです。 今回は画面上の雲がそれにあたります。 この背景では雲が上中下3列あるので、 試しに各列が違う速度で左に流れるようにしてみましょう。 左に流すにはカメラを右に動かせばいいので、 「$210Fの値がどんどん増える。」ようにします。 各列の幅を計ったら、1F,20,20でうまくいったので、 「転送内容データ」のはじめの部分は 1F xxxx 20 yyyy 20 zzzz。 xxxx、yyyy、zzzzそれぞれに「違う速度で増えていく値」 がストアされるようにすればいいのです。 組み方わかる人は次の見出しまで飛ばしましょう。 まずはASMの側でカウンターを用意しましょう。 空きRAMならどこでもいいのですが… 今回は$7FFEF0を使ってみます。 毎フレームこれに1を足す。 これで$7FFEF0は「毎フレーム1増える値」として機能します。 次に$7FFEF0を使って雲をスクロールさせます。 「毎フレーム1増える」というのはマリオの歩行速度並なので 雲にしては速すぎです。 では、『$7FFEF0の1/2倍』という数字はどうでしょうか。 これは「2フレームに1増える値」として機能します。 スピードが半分になりました。 同様に、$7FFEF0の1/4倍、3/8倍という数字を使えば、 流れるスピードは1/4倍、3/8倍になります。 そこで今回は、 「上段の雲…スピード1/2」 「中段の雲…スピード3/8」 「下段の雲…スピード1/4」 としてみます。 1/2とか1/4をやるなら、ASLやLSR命令を覚えましょう。 12345という数字の各桁を右に動かすと、1234.5。1/10になってしまいます。 各桁を左に動かすと、123450。10倍になってしまいます。 これは10進法だからです。 2進法の世界では、桁を右に動かすと1/2、左に動かすと2倍になります。 LSR(右)、ASL(左)という命令がそれにあたります。 $7FFEF0にLSRした値を「上段の雲があるScanlineでの$210F値」に設定。 もう一度LSRした値を「下段の雲があるScanlineでの$210F値」に設定。 さて、中段の3/8倍という処理ですが、 $7FFEF0を『3倍してから8で割る』ことによって可能です。 注意すべきは、『8で割ってから3倍する』ではダメなこと。 なぜなら、『8で割った』値は、「8フレームに1回1増える」。 それを3倍すると、「8フレームに1回3増える」。 こういうカックカクな動きになってしまうからです。 前者をやれば「8フレームに3回1増える」ので、滑らかです。 $7FFEF0をLDA ⇒ ASL ⇒ $7FFEF0をADC ⇒ LSR3回 によって中段の値が得られます。 それほど遠くないもの 星や雲ほど遠くにある物でないならば、 こちらの動きによって見え方がかわります。 今回は海がそうです。 視点を動かしていくと、 近くのものほど速く動き、遠くのものほど遅く動きます。 視点からの遠さが同じものは、同じ速さで動くはずです。 背景の物体がもし、マリオやレイヤー1と同じ遠さにあるならば、 レイヤー1と同じ速さで(視点の動きに対し)スクロールするはずです。 このとき、$210F = レイヤー1x座標 これで視点の動きに対するスクロールが再現できます。 次に、その背景物体自体が動いてた場合。 視点の動きに加え、さらに物体自体の動きも反映させるには、 $210F = レイヤー1 x座 - 物体の移動値 なぜ引き算かというと、雲の時と同じです。 レイヤー2の静止した一枚絵が右に動く様子を再現するには、 逆にカメラを左に動かすことになるからです。 さて、以上は物体がマリオのそば、レイヤー1と同じ層にいた時の話です。 もっと遠くにあれば、視点に対してもっとゆっくりスクロールするはず。 $210F =(レイヤー1 x座 − もしレイヤー1の距離にいた場合の物体の移動値)× 距離補正 ~ これが一応最終公式となります。 今回の海に適用するとどうなるでしょう。 レイヤー1座標は$1462から得られます。 次にもし海がレイヤー1の距離、つまりマリオの足元にあった場合の移動値を考えます。 今回は波が左にマリオの歩行距離程度の速度で流れるという風にしてみましょう。 波の移動値は毎フレーム-1です。これを引くということは、 「毎フレーム+1する値を足す」のと同じです。 雲の時のカウンタ$7FFEF0を流用しましょう。 また、波なので、左に流れながらも多少ゆらゆらさせてもいいかもしれません。 「ゆらゆらする値」をさらに足しこめばOKです。 「ゆらゆらする値」の取り方の一例 LDA $14 (タイマ) AND #$0F TAX LDA WAVE,x : : WAVE db $00,$00,$00,$01,$01,$02,$03,$03 db $04,$04,$04,$03,$03,$02,$01,$01 こうして、$1462 + $7FFEF0 + WAVE,x という 『波がマリオのそばにあったときの値』を得ました。 とりあえずこれを$7FFEF2に保存しておきます。 その後最後に、距離補正を加えるために数字を掛け、 各Scanlineの$210F値としてストアします。 この掛ける数をScanline毎に色々変えることで、 視点からの距離の奥行きを表現することができます。 これがHDMAで3Dを擬似的に再現できる仕組みです。 (Scanline毎にしか奥行きを変えれないので、 同じScanlineに異なる遠さの物が置けない制限はあるが) さて、海という大変なテーマを選んでしまいました。 どのScanlineも遠さが違います。 かなり多くの段階に分けて距離補正値を変えなくてはなりません。 めんどくさいので20段階くらいに留めます。十分でしょう。 一番近い所でも、マリオよりは遠くにあるので、1倍よりは小さい。 一番遠い所、つまり水平線付近は相当遠いので、1/32倍くらいでOKしょう。 その間を20段階くらいにわけて設定する。 計算方法は自由ですが、自分が思いつく中で一番早いやり方を紹介します。 7/8, 3/4, 5/8, 1/2 7/16, 3/8, 5/16, 1/4 7/32, 3/16, 5/32, 1/8 7/64, 3/32, 5/64, 1/16 7/128,3/64, 5/128,1/32 ラインナップは上の通り。右に読んでいけば大きい(近い)順です。 分子が同じものをひとまとめに計算していきます。 まず$7FFEF2(元の値)から、 元の値の2倍⇒$7FFEF4 (ASL) 元の値の3倍⇒$7FFEF6 (更に$7FFEF2を足す) 元の値の5倍⇒$7FFEF8 (更に$7FFEF4を足す) 元の値の7倍⇒A (更に$7FFEF4を足す) と計算します。 あとはLSRLSR...で分子7のものを全部計算しつつストア。 $7FFEF8をLDAしてLSRLSR...で分子5のものを全部計算しつつストア。 同様に分子3、分子1も全部計算ストアしてミッションコンプリート。 完成品と、LevelASMコードを http //mario.ellize.com/up/src/smw_2022.zipにおいておきます。 紛失したようです。持ってる人居たら、WikiにUPお願いします。 もっといい計算法があったら言ってね。 補足 簡易説明 いきなりハードな内容で、うわぁああああとなった人が多そうなので、 まとめ兼1番簡単な多重スクロールの説明を勝手に補足。 まず雲のような、マリオとは関係なく画面を流れていくものについて。 レイヤー2の位置を毎フレーム1増やせばOK、と考える。(増やすと左に流れますね。) さて、「? 弄る走査線の本数」「? $210Fに入れたい値」をテーブルに書き込んでいくわけですが、 要するに?に毎フレーム1足せばいいだけです。 REP #$20;2byte扱うんで必要ですね。 LDA ? INC A STA ? SEP #$20;元に戻す。 これだけですね。とっても簡単。 INCの数を増やせば馬鹿みたいに早くなるし、 上を参考に何フレームに何回、という風にすればスピードも自由自在です。 次にマリオと関係して動くもの。 上の例では独立して動きつつ、マリオと関係しても動く海なので難しいですね。 ここでは地面でも山でもいいから、勝手には動かないもので練習。 レイヤー1と関係させて動かすことにしましょう。 $1462(レイヤー1の位置)の値をそのまま?に入れれば、レイヤー1とまったく同じ動きをします。 その走査線の部分だけ「レイヤー2スクロール固定」とおんなじことですね。 半分の速度で動かすには… REP #$20;2byte(ry LDA $1462 LSR A;この辺を変えることで、スクロールの早さが変わります。 STA ? SEP #$20;元に(ry これだけです。LSRの回数を増やしたりして、スクロールスピードを変えることができますね。 ちなみに$1462でなく$1466(レイヤー2位置)でもOK。 その場合LMで設定したレイヤー2のスピードに影響を受けます。 以上を理解してもう一回上を内容を読めば、理解しやすいかも? ウィンドウあれこれ 工事中 いよいよ講義1単位分程度のボリュームになってきた(笑)。 コメント欄 コメントログ 名前
https://w.atwiki.jp/itb-100hd/pages/17.html
そろそろ熱くなるので熱対策をしてみた。 DR400はほぼ密閉されているので筐体から放熱させるしかない とりあえず PC用の〔まず貼る一番〕で筐体裏、放熱板に貼ってみた |#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (P5140374.jpg) マイクロSDスロット裏の基盤も結構熱い、放熱板もなし、おまけにブラケットの内側になるので熱もたまる そこで(株)タイカのλ GEL DP100を使ってみた。DP100>http //www.taica.co.jp/gel/search/product/geldp.html |#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (P5140380.jpg) 電気絶縁体なので電子機器に使用できる。 そのまま塗って見た。 |#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (P5140377.jpg) 元に戻し、撮影を1時間ほどしてSDカードを頬に当ててみたら アッチからやや熱いになった 次は筐体からの放熱をどうするか これは 下記の写真の左上にある タミヤのモーター用のヒートシンクを使用する |#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (P1060261.jpg) と小型FAN |#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (P5150383.jpg)