ロックマン2
サウンドドライバ$30000($8000) 詳細
メモリ用途



プログラム領域
$8000 : NMI毎に(jsrで)呼ばれるべきところ。引数特に無し。

$8003 : 曲や効果音を選択する時に(jsrで)呼ばれる。
        また、曲止め、効果音止め、フェードイン/フェードアウト、テンポアップの際も。
        引数 :
            Aレジスタ :曲番号($00-$42,$FC-$FF)
                       $FC : 曲のテンポを速める。
                       $FD : フェードイン/フェードアウト
                       $FE : 効果音止める
                       $FF : 曲止める
            Yレジスタ :曲番号が$FC,$FDの時に意味を持つ。
                       $FCのとき : Y>=$01以上だとテンポが速まる。その速める程度。
                       $FDのとき : bit : DSSS SSSS
                                         |||| ||||
                                         |+++-++++- $00-$7f  符号無し、効果の早さ。[単位フレーム]
                                         +--------- 0:フェードイン 1:フェードアウト


ワークメモリ領域
$E0     : 曲-効果音、属性-上書き優先順位。
$E1     : 効果音を鳴らす(処理する)チャンネル。bitごとのフラグ。(bit: XXXX NT21)
$E2 $E3 : トラック設定の時に使うポインタ。
$E4     : NMI避けの為のロック機構フラグ。
$E5     : 一時変数。
$E6     : 一時変数。
$E7     : 曲のテンポ速める変数。曲番号$FCに関わる。
$E8     : bit : DSSS SSSS       曲番号$FDに関わる。
                |||| ||||
                |+++-++++- $00-$7f  符号無し、効果の早さ。[単位フレーム]
                +--------- 0:フェードイン、 1:フェードアウト
$E9     : フェードイン、フェードアウトの進度/段階
$EA     : NMIでインクリメント。
$EB     : チャンネルベース[$4000+XX]のような使われ方。
$EC $ED : チャンネルベースポインタ[($EC),y]のような使われ方。値は $500,$51F,$53E,$55D。
$EE     : 今処理しているチャンネル、 4:SQ1, 3:SQ2, 2:TRI, 1:NOI。
$EF     : $E1からコピーされて使用される。

$F0 $F1 : 効果音ポインタ(全チャンネル共通)
$F2     : 効果音用、次の音長処理単位までの待ち時間。(効果音命令$00 XX)
$F3     : 効果音用、現在の繰り返し回数。(効果音命令$04 .. .. ..)
$F4 $F5 : 汎用一時変数/ポインタ。


    SQ1   ,     SQ2   ,     TRI   ,     NOI   属性     説明
$500 $501 , $51F $520 , $53E $53F , $55D $55E :曲 :曲ポインタ
$502 $503 , $521 $522 , $540 $541 , $55F $560 :曲 :音長(符号なし2byte)
$504      , $523      , $542      , $561      :曲 :テンポ(命令$00による)
$505      , $524      , $543      , $562      :曲 :bit7:連符フラグ(命令$30), bit6-0:今の繰り返し回数(命令$04)
$506      , $525      , $544      , $563      :曲 :bit7-5:タイの個数(命令$2X),bit4-0:使用するモジュレーション定義(命令$08)
$507 $508 , $526 $527 , $545 $546 , $564 $565 :曲 :キー値(命令$05)によって変動する、周波数テーブルへのベースポインタ。
$509      , $528      , $547      , $566      :曲 :ピッチエンベロープ変化値(命令$01のXX)。1byte符号あり数。
$50A $50B , $529 $52A , $548 $549 , $567 $568 :曲 :音高レジスタ値(変調前)
$50C      , $52B      , $54A      , $569      :曲 :(命令$02と$03)音量系レジスタへ入れる値。(for $4000,$4004,$4008,$400C)
$50D      , $52C      , $54B      , $56A      :曲 :命令$07のXX。
$50E      , $52D      , $54C      , $56B      :曲 :音量エンベロープ用カウンタ。
$50F      , $52E      , $54D      , $56C      :曲 :音量エンベロープでの現在の音量($0-$F)
$510      , $52F      , $54E      , $56D      :効 :ピッチエンベロープ変化値(命令$01のXX)。1byte符号あり数。
$511 $512 , $530 $531 , $54F $550 , $56E $56F :効 :音高レジスタ値。Reg値のこと。
$513      , $532      , $551      , $570      :効 :(命令$02と$03)音量系レジスタへ入れる値。(for $4000,$4004,$4008,$400C)
$514      , $533      , $552      , $571      :両 :現在使用しているモジュレーション定義のWW(+bit7:ピッチmodが変位0に向かう時のフラグ)
$515      , $534      , $553      , $572      :両 :現在使用しているモジュレーション定義のXX
$516      , $535      , $554      , $573      :両 :現在使用しているモジュレーション定義のYY
$517      , $536      , $555      , $574      :両 :現在使用しているモジュレーション定義のZZ
$518      , $537      , $556      , $575      :両 :ピッチモジュレーション用時刻カウンタ。
$519      , $538      , $557      , $576      :両 :ピッチの上下動情報。bit7:増減傾向。他bit:極小,極大,0,からの変位カウンタ
$51A $51B , $539 $53A , $558 $559 , $577 $578 :両 :ピッチの変位、音高レジスタ単位。2byte符号あり数。
$51C      , $53B      , $55A      , $579      :両 :$4003,$4007,$400B,$400Fの同じ値の二度書き防止用退避変数と思われ。
$51D      , $53C      , $55B      , $57A      :両 :音量モジュレーション用カウンタ。
$51E      , $53D      , $55C      , $57B      :両 :音量モジュレーションでの現在の音量。
                  $57C $57D                   :曲 :モジュレーション定義へのポインタ。
$57E : 未使用!?
$57F : 未使用!?
---------------------------------------------------------------------------------------------------------------------
他のバンクで
$580 : 多くの曲番号のやり取りに使われている。