リッパーを目指すスレ

このエントリーをはてなブックマークに追加
1NAME OVER
リッパーとは、ゲームプログラムからサウンド部分を抜き出して
一つのファイルにする職人さんのこと。

NSF、HES、GBRのデータを作成したい人はここに集合!
単なる「このゲームよろしく」というのは却下ね。

ただし、あっしはNSFしか知りませぬので他の人よろしく(w。
2NAME OVER:2001/08/14(火) 01:22
プログラム板向きではないの?
3NAME OVER:2001/08/14(火) 01:22
メタルスレイダーグローリーってまだ無いよね?
解析して〜
41:2001/08/14(火) 01:23
>>2

そんな気もしましたけど、ネタ的には古い物なので(汗。
5NAME OVER:2001/08/14(火) 01:24
「目指すスレ」とか言われてもなあ(ワラ
6NAME OVER:2001/08/14(火) 01:26
>>1
っていうか有名な立派ーじゃない? あなた。
71:2001/08/14(火) 01:26
>>3
最中。だけど他の人もやっていそう。
81:2001/08/14(火) 01:33
ん〜、とりあえずスレ立てたけど、ネタは明日以降ですな…。スマソ。
9NAME OVER:2001/08/14(火) 01:34
>>1
Izumiさんのリファランスを以前読んだけど、
6502アッセンブラの知識がないんで、さっぱりでしたわ。
どこから着手したらよいとか、そういう情報を書いて
貰えると参考になります。
10NAME OVER:2001/08/14(火) 01:35
まずは
sei
cld
11NAME OVER:2001/08/14(火) 01:41
リップしたらどこへ提出するんですか?
121:2001/08/14(火) 01:44
>>9

うい、了解。

というか、Izumi.さんの所って結構直感ですすめてますので、
とりあえず書いてある通りにすすめていくのも一つの案。

理屈から攻めたいというのであれば、やっぱりアセンブラ
以外の知識も必要っす。

とりあえず、NESDEV http://nesdev.parodius.com から
ファミコン(NES)に関する情報を取得してくださいまし。
最低限、ハードウェアに関するドキュメントは必須なり。
13NAME OVER:2001/08/14(火) 01:45
>>11
解析情報でよいと思われ

load/init/play のアドレスとバンク関係の情報
それだけ有れば自分で作れるでしょ

BEST GAME MUSICは更新止まってるしな
あそこは終わってんのかな?
141:2001/08/14(火) 01:45
>>11

提出というか、パッチ情報はココに書き込んでもらえれば
それでいいっすよ。
15NAME OVER:2001/08/14(火) 01:51
パッチってどんなものですか?
161:2001/08/14(火) 01:59
>>15
どんな形でもいいっす。
例えば、「xxxx番地をnnにかえてnsfヘッダをくっつけるよろし」でもいいし、
ヘッダ情報とパッチ当て用のバッチファイルの内容を載せてもらってもいいです。
17NAME OVER:2001/08/14(火) 02:45
また随分とマニアックなスレが立ったね。
一時期目指したけど、サパーリ分からんかった。
あそこにあるバッチ使ってHESを作れたので満足。
まぁ頑張って。
18NAME OVER:2001/08/14(火) 03:37
カプコン物とかなら既にある同じドライバ使ってるnsfに音楽データを上書き貼り付けするだけで聞けちゃったりするねえ
ripとは違うと思うけどいい感じ
ドラクエなんかは毎回ドライバ違うわね
19NAME OVER:2001/08/14(火) 03:56
これって、「エミュロム作ろう」と同レベルのことだな。削除依頼っと
20NAME OVER:2001/08/14(火) 04:04
>>19
「エミュロム作ろう」??わけわからんぞ。
ロムに例えるなら、吸い出しのノウハウとかについて
語るスレみたいなもんじゃねえの?

もちろん、NSF化したデータを公開したりしたら
そのレスは速攻で削除だけどな。
21NAME OVER:2001/08/14(火) 04:05
>>19
なんもわかってないね
っていうか表現悪すぎ
ripと「エミュロム作り」ではむしろロム自作の方が健全なくらいだ
なんでエミュロム自作が削除対象なのか説明してよ

話がそれた
君ripて知ってる?
2219(偽):2001/08/14(火) 04:08
くちびるに塗るやつ?
23NAME OVER:2001/08/14(火) 04:08
10分で2匹釣れました〜(w
24NAME OVER:2001/08/14(火) 04:09
お、あと外道も1匹釣れた。
25NAME OVER:2001/08/14(火) 04:10
ウンコのことだよ、ウンコ。
26NAME OVER:2001/08/14(火) 04:13
>>23-24
その誤魔化し方って既に古典の領域だな
27NAME OVER:2001/08/14(火) 04:14
>>26 悔しかったんだね。
28NAME OVER:2001/08/14(火) 04:15
>>19
「知らない」って言っちゃえYO!(藁
29NAME OVER:2001/08/14(火) 04:19
やっと2chらしくなってきたな

このスレ期待してたけど正直nesでripされてないのはもう少なくなってきたな
今漏れ程度の奴にできるのは他人の解析情報見て頷くくらいのこと
一日経つとサパーリ忘れるけど
30名無しさん@お腹いっぱい。:2001/08/14(火) 04:19
わはは、見事にクソスレになったね。合掌。
31NAME OVER:2001/08/14(火) 04:31
じゃぁマジレスしてみる。
とりあえず例を挙げないと...菅野よう子で攻めてみる。

三国志2(光栄)Mapper5

16kbyte毎に分割(EMU用にイメージ作成してるならヘッダーは取り外してね
んで????????.000から始まるのなら
????????.014
????????.015
を連結。ヘッダーは、

load $8000
init $FD95
play $FE54($8000)

サウンドドライバ自体は$8000からなんだけど、
ループ処理が絡むので$FE54を指定しとくほうが無難。

何曲目を鳴らすかってのは$0052番地を見ているので、
そこにAレジの値をそのまま書き込んでやる。

んでその曲がループするかどーかってのは$07B3に1が
立つかどーかで判別しているので、曲ごとにループす
るしないの設定をinitに組み込んでやった方が良いね。
(そのルーチンを見つけられなかったからとも言う)

具体的には、
load $8000
init $FFA0(適当にあいてるアドレス
play $FE54

initルーチンは、例えばオレなら
85 52 48 20 BA F5 20 95 FD 68 AA BD C0 FF 8D B3
07 60 B4 07 60 00 00 00 00 00 00 00 00 00 00 00
00 01 01 01 01 01 01 01 01 01 01 01 00 00 00 00
を$FFA0 から置いてみた。

これで鳴るはず(NEZplugで確認)
大航海時代もこれの応用で無限ループで聴けるよ。

>>1
あんた、バレバレだって。

>>9
いきなり全部把握するのも辛いから、
とりあえずバイナリいじったり簡単に作れるヤツで
徐々に慣れていくのがいいかも。オレはそうだった。

>>19
ゲーム改造が違法ならこのスレも消えるね。ってオレも釣られたのか...
あ、あとオリジナルドライバで作成したNSFも有るから、それは全く違法じゃないよ。
そのうち公開するけどね。MMLコンパイラが出来てからの予定...予定は未定。
一応期待しといてくれ。

つーかこれじゃ長いね。ゴメン。
3231:2001/08/14(火) 05:14
あ、ちなみに大航海時代のループ判定アドレスは$00B3
ループ判定処理ルーチンは$855Dからですな。大元を探すのがよいかも。

オレ的には一つのゲームに解析を絞って、それを参考に理解を深めていく
ってのが面白いかと思う。
もうムリかな...
33nmi:2001/08/14(火) 06:08
昨日もNSFのスレが立って荒れて終わってたぞ
削除依頼出す奴が居るから気をつけてくれい
341改めminachun:2001/08/14(火) 09:14
バレバレっすか(汗。んじゃ素直に(w。

>>31
ナイス情報サンクス!!
お、MMLコンパイラ+オリジナルドライバっすか。チョイ期待しときます。

一つのゲームに絞ってですか。んじゃネタ探してみます。あと、一応
「目指す」を掲げてみましたので、ファミコンの解説でもマターリと書いて
みようかとも思います。

>>33
ご忠告感謝。
昨日のスレって、1の騙りが沢山出てきて終わった奴でしたっけ?
削除されたら別の方法で盛り上げてみるまで(笑。

とりあえず手始めに >>31 さんの init ルーチンを解説してみる(w。

FFA0 : 85 52     sta   $52     ;曲番号のセット
FFA2 : 48       pha          ;とりあえず保存
FFA3 : 20 BA F5   jsr   $F5BA   ;初期化ルーチン1
FFA6 : 20 95 FD   jsr   $FD95   ;初期化ルーチン2
FFA9 : 68       pla          ;A = 曲番号
FFAA : AA       tax          ;X = 曲番号
FFAB : BD C0 FF  lda   $FFC0,x  ;曲のループフラグ情報を拾って
FFAE : 8D B3 07  sta   $07B3   ;セット
FFB1 : 60       rts          ;初期化おしまい
FFB2 : B4 07     ldy  $07,x    ;多分
FFB4 : 60       rts         ;残骸(w

一応補足しておくと、init ルーチンはNSFプレイヤーが曲を再生
する最初の1回目に呼ぶルーチンの事。Aレジスタには曲番号
が入っているので、それを元にサウンドドライバを初期化する
ルーチンを上のように作る必要があります。
35minachun:2001/08/14(火) 13:45
おおぼけ。KSSを忘れておりました。スマソ。
36NAME OVER:2001/08/14(火) 13:59
晒しage!
37NAME OVER:2001/08/14(火) 14:14
音ヲタうぜえな。
38NAME OVER:2001/08/14(火) 14:52
音ヲタうぜえな。
39NAME OVER:2001/08/14(火) 14:53
音ヲタうぜえな。
40NAME OVER:2001/08/14(火) 14:55
リッパーとか言って何様のつもり?
41NAME OVER:2001/08/14(火) 15:57
>>40
なんか凄いコンプレックス持ってない?なぜゆえ?
もっとマターリいこうよ
42NAME OVER:2001/08/14(火) 17:33

宗教団体と同じ手口だな。

ヤバいことを専門用語で表現し、さもまともな事のように嘘ぶく。

恥ずかしくないのか?
こんなやり方してよ。
43NAME OVER:2001/08/14(火) 19:35
>>42
31が言ってるけど、ゲームの改造ってヤバイの?
だとしたら俺も知らないうちに洗脳されてたのかな。
44NAME OVER:2001/08/14(火) 19:42
そもそも逆アセの時点でまずいんでないの?
45NAME OVER:2001/08/14(火) 19:52
ここも終わりか…
46minachun:2001/08/14(火) 19:53
ありゃあ、正義感溢れる人が出てきちゃった?

>>43

洗脳なの?自分の頭で考えりゃ済むことじゃん。

>>44

>>34 に載せたのは >>31 が作った部分の逆汗。それでもまずい?
47NAME OVER:2001/08/14(火) 20:03
ゲームと言う一つの完成した作品を、サウンドだけしか
見ないような偏った奴等は逝ってよし。
48minachun:2001/08/14(火) 20:43
>>47
そりゃそうだ。同意。
49pAPU:2001/08/15(水) 00:04
>>1
やぱりm氏だったか。
ラブンセア 使わせてもらってます。たまーに。

おにゃんこタウン
ちょっとだけ解析したけどやる気なくした。すんげー面倒だから。


リッパーになるのはあきらめて、
自作物やヘボプレーヤー作りでもやるか…
50NAME OVER:2001/08/15(水) 00:42
>>37-40,42-44
「逆アセしてもわからない」って言っちゃえYO!(藁
51minachun:2001/08/15(水) 02:56
ということでギャラクシアン(不完全)をば。リセット繰り返しで
聞けるものしかまだわかっておりませぬ。正直、面倒なのでパス気味だったり(ぉ。

とりあえず、PRG部分(16KB)とPPU部分(8KB)に分けて、PRG部分の最後の4KB
だけを作る。アドレスでいうなら $F000 - $FFFF の部分。して、その部分に
以下のパッチを当てる。

$FF0F : 69 2D 8D 15 01
$FF34 : EB
$FF3C : E8
$FF44 : D6
$FF4C : E6
$FF54 : EA
$FF63 : A5 00 85 01 A2 00 A1 01 E6 00 4C 78 FF EE 04 01 4C 5C FF
$FFA6 : 60

そんでもって、init : $FF0F , play : $FF70 , load : $D000
として、nsfヘッダ+PPU部分(8KB)+パッチを当てたプログラム部分(4KB)
を copy /b とかでくっつけて NSF 化終了。

手抜きしていて、曲番号=リセット回数-46 になってます(w。

で、要所は、$0115 がリセット回数、$0104 が VBlank単位でインクリメント
されるカウンタ、$02 と $00 が曲データアドレスです。
リセット回数=曲番号とするためのパッチが $FF0Fから、PPU側に曲データ
が存在するので、そのためのパッチが $FF34 - $FF6F 、$0104 を更新する
為のパッチが $FF70 - $FF76、つじつま合わせに $FFA6 のパッチを当ててます。

ということで。
52minachun:2001/08/15(水) 03:06
>>49
「自作物」期待しております。っていうか、サウンドドライバとか
御存じなんですか?
53NAME OVER:2001/08/15(水) 03:38
>>1
ワラタ
これ、ナウシカ聞けるじゃねーかよ。懐かしい裏技だ。
当時のナムコは何を考えてこれを入れたのやら。
というよりプログラマーの暴走か(藁

しかしこのチープな音で奏でられるとどうしても笑ってしまう。
逆にそれが味に聞こえてしまうおいらは音ヲタ。
54NAME OVER:2001/08/15(水) 05:05
minachunさん、ナウシカが聞けるそうです(w
なんだこの誤爆は。
55NAME OVER:2001/08/15(水) 05:29
minachun?
おお大物じゃねーか…

お世話様です(w
56NAME OVER:2001/08/15(水) 05:32
>>49
おにゃんこタウンはZopherで出てる…ってこれ禁句?
57NAME OVER:2001/08/15(水) 05:40
例の6バイトの順番間違えた。(汗
ナウシカ聞けましたヨ
58NAME OVER:2001/08/15(水) 06:28
>>56
ぐふっ。
あまりやる気出さなくってよかった。
エレベーターアクション出たのは知ってたのに。

>>52
サウンドドライバって
つまり
サウンドのサブルーチンのこと?
59NAME OVER:2001/08/15(水) 06:47
>>57
ナウシカって言葉に脊髄反射してしまった(;´Д`)
ギャラクシアンに入っていたの失念してましたぁ(恥
>>53さんごめんなさい。
60minachun:2001/08/15(水) 14:08
む〜、大物かぁ。そういう扱いになっちゃうとは心外だなぁ。
つーことで、あとは NAME OVER さんになります。

そんなわけで、質問があったら遠慮なく。少なくともここには
リッパーは二人はいるようですし>お〜る

>>58
そそそ、サウンドに関するサブルーチンの事っす。
っていうか聞き方がまずかったっすね。訂正。

著作権的にヤバくないドライバってご存じです?
海外の連中がいくつかオリジナルを発表している
ので、そっちも当たってみますけど。

>>53
暴走だね、きっと(w。
61NAME OVER:2001/08/16(木) 15:44
ダウボーイできんぞゴルァ!
62NAME OVER:2001/08/16(木) 16:09
>>61
漏れも以前やったけどノイズしか鳴らんかったな
リクエストの場所が特定できない…それらしいルーチンは
あちこちで見られるんだけどね
外部から入ってきた値をオフセットに変換して…って感じのやつ
6361:2001/08/16(木) 17:33
>>62
それじゃ俺がわかったところを書いておく。見解が違う所があったら教えて。

ルーチンアドレス
$8F15 : BGMサウンドの初期化 Aレジスタに曲の番号
$8B6A : BGMサウンドのメイン

ワークエリア
$0031,2 : 矩形波1のMMLアドレス
$0033,4 : 矩形波2のMMLアドレス
$0035,5 : 三角波1のMMLアドレス

だと思って、INITを$8F15、PLAYを$8B6Aにしたけれど、初期化はできてる
っぽいけど、MMLアドレスが進まずに音がでない。G-NESで見る限り、
ワークは正しいっぽいけどな。
6462:2001/08/16(木) 19:53
>>63
鳴りましたぞ!
そのメインと、nmi内で呼ばれている$8D08を一緒に呼べばいいようです。
でもループしませんな…上に出てる光栄物同様フラグ扱いでしょうか。
たしかBest Game MusicのBBSで投稿されているスパイvsスパイでも
同じような不具合が出てたような気がするんですが…もう少し見てみます。
6562:2001/08/16(木) 20:55
このゲームのループってよく聞くと不自然ですな。
曲が止まってるのを確認して、リクエストし直してるような感じがします。
ルーチンを自作した方が早そうです。
6662:2001/08/16(木) 21:17
連続レスでスマソ

とりあえずこんな感じでどうでしょうか。
FF90 : 20 6A 8B jsr $8B6A ;
FF93 : 20 08 8D jsr $8D08 ;
FF96 : 48 pha ;
FF97 : A5 37 lda $37 ;
FF99 : C9 7F cmp #$7F ;
FF9B : D0 0C bne $FFA9 ;
FF9D : A5 38 lda $38 ;
FF9F : C9 7F cmp #$7F ;
FFA1 : D0 06 bne $FFA9 ;
FFA3 : AD 00 05 lda $0500 ;
FFA6 : 20 15 8F jsr $8F15 ;
FFA9 : 68 pla ;
FFAA : 60 rts ;
$37と$38はおそらく1チャンネル目の矩形波用MMLデータのアドレス
が入っているのですが、この辺は曲が止まると値が"7F"に固定されます。
このルーチンではこれを判定して、もし当てはまればリクエストを再実行
するようにしました。2つ判定しているのは$37はアドレス下位に使用
されているので、途中で"7F"が来てしまう場合があるためです。

コピペ用にバイナリ形式で張っておきますぞ
20 6a 8b 20 08 8d 48 a5 37 c9 7f d0 0c a5 38 c9
7f d0 06 ad 00 05 20 15 8f 68 60
6761:2001/08/16(木) 21:38
>>66
わんだほー!すげえYO!
おなか満腹です。もしや名のある立派ーさん?(藁

INITに sta $0500 が必要?

#$7Fかどうかの判定て、
FF97 : lda $37
FF99 : and $38
FF9B : cmp #$7F
FF9D : bne $FFA9
の方が少なくていいですぞ
6862:2001/08/16(木) 22:00
>INITに sta $0500 が必要?
そうです。肝心なところが抜けてましたな…スマソ

判定はその手がありましたか…ってそこまで6502を
知ってるということはまさかw
ところで、ループする曲としない曲でテーブル組んだ方
がいいでしょうか?SEも探さないといけませんし、まだ
課題は残ってますな。
69NAME OVER:2001/08/16(木) 22:53
>>68
>そこまで6502を知ってるということはまさかw
スレが育たないから耐え切れずに出てきたってところ?(w
そういうことにしておこう(謎。

ループはテーブル作るほうがベターやね。お願いします。
効果音って $8C13 からがそれっぽいけど違うのかな?
7061:2001/08/16(木) 23:08
・・・ゴ、ゴルァ
7131:2001/08/16(木) 23:26
てかこれじゃスレタイトルと内容が違うな。
リッパー目指さなきゃな(w
72NAME OVER:2001/08/17(金) 00:18
                           (《 )
                           .ヽ.|       _________
                    ∧_∧   丿.|     /
                ( 》ノ ( ´∀`) /. 丿   <   拡張音源マンセー!
                | (   ヽ -⊥⌒ ノ      \
                .| )─⌒ |( 丿/          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                 |__) ノヽ 丿
                   \  ヘ /
                    .| ( ) ノヽ-ーヽ
                    丿 \ /    丿      __
                    |   U_┬ .丿   _,─' _-\
                   |  /  . |  ノ_,─' '_─::::::::::::.|
                  / /  _,─⌒' _ '─::::::::::::::::_ ノ
                 / /'_─'  _ ─::::::::::::::::::_,-'
                 / /  __─'::::::::::::::::::::_, -'
             _, ─_, ─'::::::::::::::_,:::::::-'
          ,─' _─::::::::::_,::::::::-'
          \─:::::_::::: -
            ゝ/
73NAME OVER:2001/08/17(金) 10:29
筋肉質モナーのご声援感謝!(笑)
74NAME OVER:2001/08/17(金) 11:27
>>1=61=69=73
(・∀・)ジサクジエソカコワルイ!!
75NAME OVER:2001/08/17(金) 11:35
晒しage!
7662:2001/08/17(金) 21:16
何かいろいろあったようですがw
テーブル&SE追加完了しましたぞ

逆アセしたリストはうまく張れないので、
バイナリをそのまま張っときます。
まずinit部($FF00から)
48,a9,1f,8d,15,40,a9,00,8d,00,05,8d,01,05,68,c9
0e,b0,14,aa,bd,a0,ff,8d,00,05,bd,c0,ff,8d,01,05
ad,00,05,20,15,8f,60,38,e9,0e,8d,00,05,a9,00,8d
01,05,ad,00,05,20,13,8c,60

play部($FF50から)
20,6a,8b,20,08,8d,48,a5,37,25,38,c9,7f,d0,0b,ad
01,05,f0,06,ad,00,05,20,15,8f,68,60

リクエスト用のテーブル($FFA0から)
00,01,03,05,07,09,0a,0b,0c,0d,0e,0f,10,13

ループ処理有無判定のフラグテーブル($FFC0から)
01,01,01,01,01,00,01,00,00,00,00,00,00,01

判定部の処理を取り込ませてもらいましたぞ。
で、$0501をフラグに割り当てました。
$01を入れるとループするようにしました。
SEのリクエストは>>69の情報で間違いないです。
ありがとう>>69

これで問題なければBAT化でもしましょうか。
プレイリストがあれば尚良いのですが…誰かやってくれんかな
誰もやらないようなら漏れが書くけどw
7762:2001/08/17(金) 21:26
カンマ取り忘れた…スマソ
では改めて

init
48 a9 1f 8d 15 40 a9 00 8d 00 05 8d 01 05 68 c9
0e b0 14 aa bd a0 ff 8d 00 05 bd c0 ff 8d 01 05
ad 00 05 20 15 8f 60 38 e9 0e 8d 00 05 a9 00 8d
01 05 ad 00 05 20 13 8c 60

play
20 6a 8b 20 08 8d 48 a5 37 25 38 c9 7f d0 0b ad
01 05 f0 06 ad 00 05 20 15 8f 68 60

req-table
00 01 03 05 07 09 0a 0b 0c 0d 0e 0f 10 13

flg-table
01 01 01 01 01 00 01 00 00 00 00 00 00 01
78NAME OVER:2001/08/17(金) 23:54
6502アセンブラ講座のスレです。
7962:2001/08/18(土) 11:07
ダウボーイの作成BATとプレイリスト完成しました。
Best Game MusicのUP板を見てくだされ。

激しくスレ違いなので、これで漏れは退散します。
陰ながら応援してますぞ>1
80NAME OVER:2001/08/18(土) 19:46
んじゃ、命令の解説でもマターリと書きますか。ターゲットは、なんらかな形で
プログラムを書いたことある人で NSF 作成に興味のある人。他のファイル
に関してはきっとどなたかがやってくれるはず(ぉ。NSF作成に関係ないところ
はざっくり飛ばします。

…その前に軽くCPUの説明をば。

ファミコンで使われているCPUは 6502 と呼ばれるものとほぼ同じです。
んで、CPUが持っているレジスタ(変数のことと考えて)は6つあり、それぞれ
「A」「X」「Y」「S」「PC」「SP」という名前がついてます。レジスタのサイズは、
PCが16bit、SPが9bit、他は8bitです。

Aレジスタは「アキュムレータレジスタ」。つまり計算用。加減算、論理演算を
使えるのはこのレジスタだけ。しょっちゅう使います。

Xレジスタは「X インデックスレジスタ」。使い方は後述するとして、Aレジスタ
程ではないけど使います。メモリに対して値を読み書きするさいのインデックス
として使われますけど、インクリメント(値を+1すること)、デクリメント(値をー1
すること)ができるので、ループのカウンタなんかにも使います。

YレジスタはXレジスタと目的は同じ。インデックスとしての使い方が微妙に違い
ます。

Sレジスタは「ステータスレジスタ」。主に、計算結果の内容が入るレジスタです。
Sレジスタのビットそれぞれに意味があります。このレジスタに直接アクセスする
命令はありませんが、条件分岐等で参照することは多々あります。
中身は、
bit0 はキャリーフラグ。加減算命令やシフト命令で変化します。
bit1 はゼロフラグ。計算結果が0、およびAレジスタに0を入れた場合に1となります。
bit2 は割り込みフラグ。これを0にすると割込み許可、1にすると割り込み禁止になります。
bit3 は10進数演算フラグ。BCD演算の時に意味がありますが、NSF作成では気にすることなし(ぉ。
bit4 はBRK実行フラグ。BRKというソフトウェア割り込み命令が実行された時に1となります。
bit5 は未使用。
bit6 はオーバーフローフラグ。演算結果で桁上がり、桁下がりが起きた時に1とないrます。
bit7 は符号フラグ。演算結果の正負の結果が反映されます。

PCレジスタは「プログラムカウンタレジスタ」。CPUが実行しているアドレスが入ってます。
直接触ることはできません。

SPレジスタは「スタックポインタレジスタ」。値の一時退避などに使われるスタック領域の
先頭アドレスを指します。ただ、bit8 は常に1であるため、いわゆるスタック領域は
$0100 - $01FF に限られます。これも直接触ることはできません。

てな感じで。残りは後日。
81NAME OVER:2001/08/19(日) 00:34
SPが9bit って本当かよヲイ。
bit8が常に1で、どうして$0100-$01FF になるんだよ。
だいたい、スタック領域の上のほう使用してるゲームだってあるだろ?
直接触れるんじゃ?

bit3 は10進数演算はファミコンではサポートされてないんじゃ?
8280:2001/08/19(日) 01:31
>>81
ツッコミサンクス。いや、まじでありがとう。

SPは、俺が参照した資料にそうやって書いてあったから。
bit8が1で、残りのアドレス線(bit15-9)までが0なら一応
つじつま合うでしょ。って書くなら 16bit でもいいね、確かに。
っていうか、今、すごく妙な表現というのに気づいた(汗。

なので、SPは8bitの大きさで、上位8bitは1で固定、という
言い方が正解かも。

SPは、間接的に値を代入できる(TXS/TSX命令)ということで、
直接値を代入する命令はない、という意味です。

bit3 は知らなかった。いや、そんなような話を目にしたことが
あるようなないような、というのを思い出した。勉強になった。
83NAME OVER:2001/08/19(日) 05:54
>>81
>bit8が常に1で、どうして$0100-$01FF になるんだよ
bit15〜9が0ならなると思うんですが?
後ここで言っているのはスタック”領域”ではなくてスタック”ポインタ”だと思われ。

にしてもスタックの説明の9bit云々は俺も変だなーとは思った。
スタックポインタは8bitでスタック領域は常に$01xxになると書いたほうがいいかと。
というか、いきなり初心者ぶっちぎりの説明ですわな(藁
84NAME OVER:2001/08/19(日) 08:29
ためになるのは大いに歓迎。
んでシロート質問。
プログラム追っていきたいんだけど、各マッパーの初期配置がいまいち分かりません。
電源入れた直後の状態ってどこのバンクから読み込まれるんでしょ?

動作の概要だけでも答えてもらえると助かります。
G-NESで確認しろって言わないで〜
ネスデブの資料読めって言わないで〜
85NAME OVER:2001/08/19(日) 09:23
uonesterのソース読め(w
86NAME OVER:2001/08/19(日) 10:34
寂しいBGMが哀愁を誘う これからの季節にぴったりと思われる
ちょっぴり蓋 ことチョップリフターに挑戦してるんだけど
BGMがなりません BGMのリクエストがみつからない.....
$F9A7 = 初期化
$F9C1 = PLAY
$FC96 = 効果音リクエスト
どなたかタフケテください
87NAME OVER:2001/08/19(日) 12:58
>>84
大抵一番後ろのバンクが読み込まれる。
割り込みベクターの関係から、後ろの16KBは固定というのが多い。
燃えプロみたいに変なマッパーもあるけど。
ところで、燃えプロの音声データは、SMYNESの対応の仕方を見ると
音声データは6502から見えないのか、データの吸い出し不可か?
詳細求む
88NAME OVER:2001/08/19(日) 13:02
訂正
>後ろの16KB
$8000-$FFFF
と読んでくれ。いずれにせよマッパーによりけり。
詳しくは資料を見てちょ(W
89NAME OVER:2001/08/19(日) 13:13
>$8000-$FFFF
$C000-$FFFFだった..........鬱
90NAME OVER:2001/08/19(日) 14:05
>>89
マッパーのバンクサイズによるな。
8KB単位なら $E000-$FFFF、32KB単位なら $8000-$FFFF。
固定である理由は、$FFFA-から割り込みベクトルがあるから
な。別に各バンクに同じルーチンを入れておくという方法もあ
るが。

>>87
燃えプロの音声データはチップの中に埋めこまれていて、
再生方法は「何番を再生」しかできない。つまり、
データがマッピングされていないので CPU 側から見える
はずもなく、またデータはD/Aを通った後のアナログ信号
としてしか出てこない。

>>83
>いきなり初心者ぶっちぎりの説明ですわな(藁
そんなもんやろ。そのうちわかるようになればいいと思われ。
わからね所は一時的に放っておくのも技量のウチ。
91NAME OVER:2001/08/19(日) 14:49
>>86
推測だけど、$FC96(yregに曲番号でしょ?) ってBGMと効果音の
初期化ルーチンで、このルーチンから $F9A7 が呼ばれているよ。
だからあえて $F9A7 を呼ばなくてもいいかも。

でもって、BGMデータのアドレスが $05B4 だから(詳しくは初期化
ルーチンの$FCA9以降を追っかけて頂戴)、例によって VRAM から
データをロードしているっぽいね。PPU Bank1 の $0730 からと
タイトル表示時のRAM の $0500 からが同じだし。

データの演奏カウンタが $0724 + チャンネル数*$10 だから、それを
軸に追っかけてみればデータの位置がわかるかもね。
9291:2001/08/19(日) 15:04
追加。
$FCE1 からがデータの転送部分っぽいですね。ご健闘祈ります。
93NAME OVER:2001/08/19(日) 15:14
>>90

>そのうちわかるようになればいいと思われ。

つーか、アレは表現が変だったからだろ?ぶっちぎっているのは
初心者だけじゃないと思われ(藁
9487:2001/08/19(日) 15:28
>90
やはり......感謝。
95NAME OVER:2001/08/19(日) 17:04
>>84
tp://www.geocities.co.jp/SiliconValley/2368/
知ってるかも知れんが俺はここを良く見てる。
有名どころのマッパーは説明されているので良。
とりあえず、そのソフトがどのマッパーを使っているかを確認して
そのマッパーのバンクサイズにぶった切る。そしたら
あとはファイルの007とか015とか031とか(区切りのいい所)を逆汗すりゃ
ベクター位は見つかるはずなのでそこから追っていく。リセットのルーチンの
最初のほうでスタック操作でもしていたら当りだ。俺はそんな感じ。
9686:2001/08/20(月) 00:35
>91
ご教授ご声援に感謝します

$F9A7は、リセットベクタの後呼ばれてるので一応入れました
実際は曲番号 ≧ 5 の場合に呼ばれるみたいですね

$FC96~$FCD6を追ってみました 参照テーブル、確かに0番目が
$05B4...VRAMですか で、曲データの演奏ポインタは
$0726+チャンネル*$10の気が...
$0725+略がまだ謎 演奏ポインタをセットする度に
$0724+略を0にしてるのも謎

引き続き$FCE1から追ってみます
...これは今の漏れスキルではあっさりripとはいきそうに無いかも
地道にマイペースでやってみます
97スレ違いですまんが:2001/08/20(月) 08:30
バンク切り替え用のMMCは本体のリセットスイッチが押されたかどうかの検出はしているのですか。
98NAME OVER:2001/08/20(月) 19:04
>>97
MMC5みたいに$E000〜$FFFF切りかえられる奴は
リセット信号受け取らないとベクタが確定しないので
いきなりハングアップ確定かと。
一つ一つのMMCの動作は数が多すぎて漏れは判らん。
99NAME OVER:2001/08/21(火) 00:56
age
100NAME OVER:2001/08/21(火) 01:21
100
sage
10197:2001/08/21(火) 01:30
>>98
goroh氏の資料を参考にしていますが、カートリッジコネクタにそれらしい信号が見当たらないのですが。どうやって検出しているのでしょう?
102NAME OVER:2001/08/21(火) 01:50
NSFって、曲再生中にバンク切り替えってしませんよね?

ちょっとスレ違いかもしれないけど、
スプライト#0ヒット と
IRQ/brk
ってどんな目的でやってるんですか?
103NAME OVER:2001/08/21(火) 02:21
>>102
曲再生中っていうか、Playルーチン内でのバンク切り替えは
あるよ。

スプライト#0ヒットは主にPPU側のバンクを切り替える時とか
に使うかな?あとはラスタースクロールとか。
IRQ/brkは色々。マッパーによってはタイマーに使ったりとか。
10498:2001/08/21(火) 10:32
>>101
今見たら確かに無いね。どうすんだろ?
ハードは詳しくないので判る方後はヨロ

推測でしか無いけどCPUの動作として最初にベクタから
pcを読み込もうとするから$fffeか$ffffをリードしたらリセット
と見なすとか、クロック入力後最初のリード信号でリセットとか
(できるのか?)が思いつくけど。ダメカネ?
105NAME OVER:2001/08/21(火) 14:23
>MMC
推測だけど、どのバンクでもリセット用のルーチン書いとくって事じゃダメ?
リセット掛かったらバンク切り替えて、元々のリセットルーチンへジャンプとか。
....ヘタレな推測でスマ
106NAME OVER:2001/08/24(金) 23:38
へけ
107NAME OVER:2001/08/25(土) 00:52
でちゅわっ? >106
10831:01/08/26 21:22 ID:OaUpn0Gk
ネタをもう一つ二つ

某ヘタレが解析した影の伝説。
メインBGMが一ループで終わってしまう件の修正。
実はループカウンタ処理が$8000からの方のバンクにあって
それを参考にルーチンを組めば簡単にループします。

playアドレスをどっか空いてるところにして
例は$D700から置いてみた。
20 BB C7 AD E0 06 2D D0 06 C9 FF D0 03 20 30 CB 60

$06D0,$06E0両方(共にカウンタ)がFFだったら初期化〜を組み込む。
実際には一曲目だけこのルーチンを通すように組む必要があるけど。
個人的にはアーケード版よりファミコン版の方がスキ。
イカスぅ!

あと桃太郎電鉄が
効果音play:$8000
曲play:$8006
初期化:$8003
効果音req:$00FB
曲req:$00FA
だったので参考にしてみて。え?HESがあるって?う〜ん。
バンクは〜、えっと〜、16k毎に分割して試してみて(忘れた
SUPER桃鉄も同じ構造じゃないかなぁ。

それと、オリジナルサウンドドライバの件はチョット汎用性がないのでダメそうです。
期待してた人ゴメンね(いる?

>>105
>推測だけど、どのバンクでもリセット用のルーチン書いとくって事じゃダメ?
そんなゲームもありました。どのバンクでもってワケじゃないけど。
ベクタとして使われるバンクだけだったけど、複数記述があったのは覚えてます。
でも詳細は忘れました。だから間違ってるかもね(なら書くなよ
109NAME OVER:01/08/26 21:26 ID:OaUpn0Gk
そういや水晶のドラゴン、
RAMなのをいいことにベクタ書き換えてたな。
混乱するっちゅーねん。
関係なくてスマ
110NAME OVER:01/08/26 22:43 ID:pVeEWKb.
漏れもネタ。ドナルドランド。

これは非常にわかりやすくて、16KB単位で分割した2番目の
先頭アドレス($8000)がドライバ初期化ルーチンへのジャンプ、
$8003 が曲番号を A レジスタにセットして呼ぶデータ初期化
ルーチンへのジャンプ、$8006 がサウンドドライバ本体ナリ。
なんで、初期化ルーチンを
pha
jsr $8000
pla
clc
adc #$01
jmp $8003
というのを $BFC0 辺りにでも作って、
Load:$8000(上記抜き出し部分をそのまま配置)
Init:$BFC0(上記初期化ルーチンを置いた場所)
Play:$8006
とすればいけるはず。曲数は51個。もっとNSFそのものを
短くできるみたいだけどね。
111NAME OVER:01/08/27 08:46 ID:IvG7VQ7A
age
112コーヒーライター:01/08/30 01:31 ID:r/ySyIs6
oman
113ラッキーマン:01/08/30 03:33 ID:ii9q9hTA
                           (《 )
                           .ヽ.|       _________
                    ∧_∧   丿.|     /
                ( 》ノ ( ´∀`) /. 丿   <   睾丸エミュレーターって言うなYO!
                | (   ヽ -⊥⌒ ノ      \
                .| )─⌒ |( 丿/          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                 |__) ノヽ 丿
                   \  ヘ /
                    .| ( ) ノヽ-ーヽ
                    丿 \ /    丿      __
                    |   U_┬ .丿   _,─' _-\
                   |  /  . |  ノ_,─' '_─::::::::::::.|
                  / /  _,─⌒' _ '─::::::::::::::::_ ノ
                 / /'_─'  _ ─::::::::::::::::::_,-'
                 / /  __─'::::::::::::::::::::_, -'
             _, ─_, ─'::::::::::::::_,:::::::-'
          ,─' _─::::::::::_,::::::::-'
          \─:::::_::::: -
            ゝ/
114SHITMAN:01/08/30 23:31 ID:YaNReIf.
TESticle
115NAME OVER:01/09/02 23:26 ID:Ukq6o.qI
sei
cld
lda #$02
sex
116NAME OVER:01/09/04 01:22 ID:8g7n/rX6
lだ
sた
おら
117 :01/09/04 08:46 ID:G5FaG362
ジサクジエンデシタ
118NAME OVER:01/09/09 15:10
マターリ解析中
119NAME OVER:01/09/10 03:10
1 = m = 足
120NAME OVER:01/09/10 13:55
こんばんわ です。よろしくおねがいします。
121NAME OVER:01/09/10 13:58
私もラッパーを目指してます。
122黒のぽ:01/09/10 14:29
プ
123ひよこ愛好会:01/09/13 00:04
lda #$0F
sta $4015
sta $4000
lda #$FE
sta $4002
124NAME OVER:01/09/13 00:25
>>120
出だしが違うと思われ。

>>123
状態にもよると思うが、にぎやかだね。
125NAME OVER:01/09/20 01:29
(vv
126NAME OVER:01/09/25 23:46
リパー メザシ
127NAME OVER:01/09/26 23:02
あげ
128NAME OVER:01/09/26 23:27
「立派なリッパーを目指すスレ」と命名する勇気はなかったのか。

・・・マダマダだな。

ps. グローリー、私は何時までもまっています〜
129NAME OVER:01/09/26 23:33
なるほど(^-^)
130NAME OVER:01/09/26 23:35
age
131NAME OVER:01/09/26 23:45
>>129
(^^;;;
132NAME OVER:01/09/27 03:57
オデ的には 実機で鳴らす為の情報とか興味あるな〜
ガイジンサンがそういうハード作って売ってるんだっけ?
どうせカードはvisa(vesaだっけ?)なんだろうなぁ・・

ドライバはそんなに難しいか? 鳴らす事だけが目的だから1/60に縛られる必要もないんだよな。
FCってv-synce以外にタイマってあったっけ・・Hが使えるのかな。
あ、スプライトhitなんてのがあるみたいだからそれで任意のラスターにフックできるのか。
でも帰線期間中は割り込まないから妙なジッタがでるなぁ・・
うーむ、やっぱcpu-cycleを見ながら空ループで全力演奏か、v-synceか、の2択になるのね。

コンパイラは delphiがフリーで出たし GUI込みでもかなり実現しやすくなったな。
ちょっとpascal弄りのネタとしてtryしようかと思ったら いきなりhddが死んで萎え。クソ。

あ、エロ画像のダウンロードがオワタ。 じゃ バイバイ。
133NAME OVER:01/09/27 04:04
>>128
近いうちにウプします。
ボイスSEガマダミツカラナイ
134sage:01/09/27 10:27
>>132
オデが知っているのはDrPCJr.か。全然違うな。
実機で鳴らす為には、まずはNSFをやめないとな(w。もしくは
NSFマッパーを実現する回路組まなくちゃ。

CPUサイクル見ながらのドライバは相当面土井ぞ。素直に
VSync使うか外部からの割り込みに頼るのがいいと思われ。

あとエロ画像よろしくな(プ
135NAME OVER:01/09/28 01:56
> 実機で鳴らす為には、まずはNSFをやめないとな(w。もしくは
> NSFマッパーを実現する回路組まなくちゃ。

"NSFがそのまま"鳴ることに意味があ理想だから、やぱしここは回路組むしかないんかな・・
ハードはさっぱりだからなぁ・・

> CPUサイクル見ながらのドライバは相当面土井ぞ。素直に
> VSync使うか外部からの割り込みに頼るのがいいと思われ。

ドライバのエントリは不変なんだから呼び元で埋め込まれたwait(コンパイル時に作成される空ループルーチン)と
交互にcallするだけで実現出来るとおもってたんだけど FCだと他になにか問題があるのかな・・?

> あとエロ画像よろしくな(プ

東に向かって10分祈れ〜

> 近いうちにウプします。
> ボイスSEガマダミツカラナイ

マジですか?
ドキドキ・・
136NAME OVER:01/09/28 03:23
パソファミのやつ使ってNSF実機で鳴らしたって人居ないんですかね?
一応、RAMカセットにデータ転送して実機で鳴らせるような事が書いて
あるんですけど・・・。電子工作駄目駄目なんで誰か試して(ぉ
レジストしなくてもそこらへんの機能は使える・・・ハズ。

と、情報だけ書き逃げしてみる。
137NAME OVER:01/09/28 06:32
>135
素直に元のカートリッジに音だけ鳴らすルーチンを書いて焼いたプログラム
ROMを刺せば,面倒な回路なんざ組まんでも鳴るよ(藁

NSFは聴きたい時に曲が聴ける事に意義があると思われ。
138NAME OVER:01/09/28 11:51
なるほど(^-^)
139NAME OVER:01/09/28 13:07
>>135
つーか、技術的な問題はともかくクロック計算なんぞが面土井と思うが。
どのルーチンを通ったからこれだけクロックが消費、だから残りこれだけ
のウェイトを入れる、なんつーのは日が暮れると思われ。ま、手間はデータ
の形式によるとは思うがやりたいなら止めはせぬ。

オデも>>137と同じくNSFは聴きたい時に曲が聴けるのが魅力だと思う。
なのであえて実機でやるよか、携帯できるプレイヤーの方が欲しいな。
140NAME OVER:01/09/28 19:56
そうそう、やるとしてもせいぜいサンプリング再生くらいでしょ
つーか、ファイナルミッションがソレでおどろいた
141140:01/09/28 20:00
補足 サウンドドライバは処理が多岐に渡るからいちいちクロック数えて
ウエイトなんてやってらんないってこと
サンプリング再生くらいなら、処理自体単一なのでまあやれる範囲かと
142NAME OVER:01/09/29 02:33
確かに込み入った事をするとクロック計算は面倒だねぇ。

60Hz以上で割り込みを使うと鳴るとあとは帰線期間の時間を計ってそれを最小単位とする方法。
表示期間で割って、あまりが出なければ理想だけどたぶん無理だから あまる部分はコンパイラが
補間する(n回に一回の割り込みが 少し長めになることを見越してwaitを生成する)
この"あまり"によるジッタがどの程度になるかなぁ・・

実機演奏を視野に入れないんなら割り込み云々は関係ないね。何でも有り。
でも誰かもいってたGAME音楽に代表されるチープな音源の魅力は”制限における表現”にあるわけで
エミュでなんでもありになったら収集つかないし最終的には"modでいいじゃん"つーことになるな。
携帯して聞きたいんならCE機でも買ってろと言いたい。NSF程度ならパワーにも問題ないだろ。
便利だろうけど実機で鳴らすロマンとは別次元の話。


(あ、松本零次全部入りも最終回かぁ・・短い命だったな)
143NAME OVER:01/09/29 02:50
>>142
ロマンがあるなら「さっぱり」なんて言ってちゃだめだと思われ。
てかがんばれ。
144NAME OVER:01/09/29 04:02
いやぁ、夢見がちな年頃なのよ(笑)

だれか ガイジンサン作のやつ買った人いない?
(パソファミのはレジストしないと作り方わかんないんだよね?)
145136:01/09/29 05:20
>>144
いや、作り方とか吸い出し書き出し機能を使うだけならレジストは
要らないはず。ただ、レジストユーザーじゃないのでどうにも(^^;;;
ダウンして解凍するだけなら取って食われたりしないから、試しに
ファイルをダウンして覗いてみると良いかも・・・。

携帯とかでNSFプレイヤーが付いたのが発売すればな〜(ありえない)
146NAME OVER:01/09/29 06:05
>>145
そうかなぁ?
GAME音楽って,音色を含めた曲全体に魅力があると思うんだけどな。
そーゆー風に考えると似てるってのはある意味重要じゃないかと思う。
媒体は何だとしてもね。

ロマンについては人それぞれだからどうでもいいんだけど。
147146:01/09/29 06:11
>>142
だった。すま。
148NAME OVER:01/09/29 18:33
いくら似ていても偽物はどこまで行っても偽物。
突き詰めていくと、結局実機で演奏するしかなくなるわけで。
そーゆー方向へのこだわり(ロマン)は当然あるでしょう。

エミュプレイヤーのおかげで実機演奏の可能性が広がって
単純に嬉しいよ、オレは。
149133:01/09/30 03:52
グローリウプシタ
実機とエミュのどっちが良いというのは不毛でしょ。
実機には実機の良さがあるし、エミュにはエミュの良さがある。
150NAME OVER:01/09/30 14:21
>>149
グローリーごくろうさんでした。
148の言い方には多少トゲがあるけど、要は

再現性という点では、エミュレータは永遠に実機には及ばない。

と言うことを言いたかったんでしょう。音の再現性とか。
実機を元に再現しようとしているから、当たり前だけど.....

ただ、そういった所を含めた不完全性や付加機能に、
エミュレータの真の面白さがあると思う。
NSFなんてエミュレータが無ければ存在しなかっただろうしね。
エミュマンセー!!実機マンセー!!
151148:01/09/30 14:57
いやいや
エミュ関係のものを貶めるつもりなんて全く無かったんですけどね
誤解を招いたようで申し訳ないです。

思い入れのあるタイトルほど些細な違いが気になったりするもんでね。
そんだけのことです。

つーかsage進行っぽいのに上げてスマン。
152150:01/09/30 23:12
>>151
いや、こっちこそ、配慮に欠ける書き込みで、
余計な気を遣わせてしまったようで....スマ

> 思い入れのあるタイトルほど些細な違いが気になったりするもんでね。
同意。でも、ある程度は仕方がない事なんじゃないのかな....
音源のエミュレータの調整なんて、考えただけで気が遠くなりそうだし。
がんばってください。としか言えんのです....
153NAME OVER:01/10/01 00:50
本物を鳴らすことがロマンであるのと同じ位
それに似せることにもロマンがあるよなー。
と思ったり。
154NAME OVER:01/10/01 01:34
うーん・・「気になる」って文句言うだけならタダだけど、
どのゲームのどの曲のどの部分の再現性がどんなふうに違うのか&
どうすれば改善されるのかを具体的にレポートするとかして
作者様にフィードバックしようとは思わないんだろうか・・
155154:01/10/01 01:34
あ、>>154>>151へのレスね。
156NAME OVER:01/10/01 07:28
FCってなにげに色々種類あるから再現するにも報告するにも色面倒があるかもね。

一応リプライしておくと 言ってる事はオデも同意。 > 146
ただ話の流れでああいう発言になったという事で。
制限あっての(魅力ある)表現なのに、
「わざわざ苦労して制限を再現するのはバカバカしい。この程度まで再現できたら
注力を他のベクトルに変更すべき」
という空気を勝手に感じたもので。

グローリー、最高でっす!
5曲目とか聞きまくってます。もし完全版?が出来たらまたアプして下さい〜
157NAME OVER:01/10/01 20:46
aclなページ某所で晒されてるね…ハァ
158NAME OVER:01/10/02 02:06
やっとルイージマンション終わったよ。
んでドライバ制作の続きやるー。

オレが今作ってるのってNSF専用ポイけど、ベクタやら$2000辺りちゃんと書けば
NESロムとして扱えるよーになる。マッパーはゼロで十分だろう。
だから実機演奏もそう遠い夢ではないと思うのね。
需要無さそうだからやってないけど。すぐ出来るけど。

ファミコンで曲作りたいヤツってそんな居なさそうだけどねー
FDS扱えれば結構ウハウハな気がするのはヲタなだけなんだろうか?
まぁいいや。あのFM音源早くいじりてぇ〜よぅ。

その前に誰かLFO実装してくれ〜。ヒントややり方でも良い。おせーて。
159NAME OVER:01/10/02 10:25
>>158
私の場合ならこうやって作ります。

要は、ドライバ一回通る度に音程を動かしてやればいいのです。
例えば三角波なLFOを作ろうと思ったら、与えられるパラメータと
して、
・一回で動かす量(数値)
・波形が反転するまでの動かす回数
を用意して、

発音開始部分に、

もしKeyOnであるなら、
  REM LFO開始の処理
  LFO変更カウンタ = 0
  LFO方向フラグ=下降中
ここまで。

を、ドライバ一回に付き、

もしLFOが有効であるなら、
  もし LFO方向フラグ = 下降中 なら、
    現在の値 = 現在の値 - 一回で動かす値
  そうでないなら(LFO方向フラグ = 上昇中であるなら)、
    現在の値 = 現在の値 + 一回で動かす値
  ここまで。
  LFO変更カウンタ = LFO変更カウンタ + 1
  もし、LFO変更カウンタ >= 波形が反転するまでの動かす回数 なら、
    LFO変更カウンタ = - 波形が反転するまでの動かす回数
    もし、LFO方向フラグ = 上昇中なら、
      LFO方向フラグ = 下降中
    そうでないなら(LFO方向フラグ = 下降中)なら、
      LFO方向フラグ = 上昇中
    ここまで。
  ここまで。
  現在値をレジスタにセット
ここまで。

というルーチンを入れる、ってのが基本部分ですか。
160159:01/10/02 10:28
補足。この場合、LFOの振幅は、
一回で動かす値 * 波形が反転するまでの動かす回数 * 2
になります。
161158:01/10/02 13:21
>>159
ぐぁぁ
すっごく親切で丁寧な解説ありがとう!

てかその説明文が、まんまルーチンなんのが笑う。
パクらせていただきます。
振幅の波形にこだわらんでコレでよいんだなぁ...コレなら何とか...
162NAME OVER:01/10/03 07:04
6502で掛け算(8bit*8bit)、割り算(16/8bit)ってどうやったっけ?
163162:01/10/03 07:10
ビット毎に演算しかねえっす…紙に書いて計算する方法と同じ。
164NAME OVER:01/10/03 07:55
LFOってなによ?
165NAME OVER:01/10/03 10:35
>>164
LowFrequencyModulation 低周波発信。
音楽用語のビブラート。
ぷーーーーーー が ぷ〜〜〜〜〜〜ってなる感じ(藁
166NAME OVER:01/10/04 01:04
キーに依存しない(つーか追従する)LFOでも書いてageてやるかと思ったんだけど
掛け算ルーチンでアボーン(笑)
Z80のそういうルーチンを集めた本を持ってたんだけど見つかんないんだよなぁ・・

要するに鳴ってる音階に対しての振り幅の調節方法でこまってたんでしょ?
(そういう話じゃないのか?)


ps. つーか なんで今になってパトレイバーなのよ?
167164:01/10/04 02:38
ありがとう。

じゃあ指数関数実装してね(藁
168NAME OVER:01/10/04 03:04
LFOなんて足し算で十分でしょ。周波数高いところで音痴になるかもしれんが無視。
毎回掛け算するんじゃ処理的にも辛いし。

>>159さんの処理の流れの中の現在の値を算出するところを

累積値 = 累積値 + 1回ごとに足す値
現在の値 = 音階(周波数) + 累積値

に変更すれば掛け算やってるのと同じことだし。

で、1フレームごとに±1じゃ荒すぎるていう時は

現在の値 = 音階(周波数) + (累積値 >> 4)

とかやればいいわけだし。
169NAME OVER
なるほど(^-^)