【原创】FamiStudio引擎应用

NES(主要)分成两条运行脉胳,即Main与NMI。那么本引擎在这两部分都分配代码。
 
之前说过FS的音乐数据文件是asm,例程喜欢命名为"song_xxx_asm6.asm",如果其包含DPCM,即会多一个文件"song_xxx_asm6.dmc"。
特别音效文件是"sfx_asm6.asm"
 
一、关于本引擎, 在NMI只有一行。(放在刷屏和扫描按键之后即可。)
jsr famistudio_update
 
二、关于本引擎,在Main中有一些功能:
1 所有设定
    ; CODE
    .base $8000

; FamiStudio config.
FAMISTUDIO_CFG_EXTERNAL       = 1
FAMISTUDIO_CFG_DPCM_SUPPORT   = 1
FAMISTUDIO_CFG_SFX_SUPPORT    = 1 
FAMISTUDIO_CFG_SFX_STREAMS    = 2
FAMISTUDIO_CFG_EQUALIZER      = 1
FAMISTUDIO_USE_VOLUME_TRACK   = 1
FAMISTUDIO_USE_PITCH_TRACK    = 1
FAMISTUDIO_USE_SLIDE_NOTES    = 1
FAMISTUDIO_USE_VIBRATO        = 1
FAMISTUDIO_USE_ARPEGGIO       = 1
FAMISTUDIO_CFG_SMOOTH_VIBRATO = 1
FAMISTUDIO_USE_RELEASE_NOTES  = 1
FAMISTUDIO_DPCM_OFF           = $e000

; ASM6-specific config.
FAMISTUDIO_ASM6_ZP_ENUM   = $00b4
FAMISTUDIO_ASM6_BSS_ENUM  = $0300
FAMISTUDIO_ASM6_CODE_BASE = $8000

    ; FS音乐引擎
    .include "famistudio_asm6.asm"
    ...
Main:

 

1.1 本引擎就固定在$8000
如果要更改,则修改
FAMISTUDIO_ASM6_CODE_BASE = $8000
 
1.2 本引擎零页内存 开始的地址 $00b4(注,例程占用了B4个字节的零页内存)
如果要更改,则修改
FAMISTUDIO_ASM6_ZP_ENUM = $00b4

 

1.3 本引擎内存 开始的地址$0300(注,例程没有占用)
如果要更改,则修改
FAMISTUDIO_ASM6_BSS_ENUM = $0300
 
2 播放某BGM / 暂停BGM
play_song:
  ldx #<song_data
  ldy #>song_data
  jmp @play_song

@play_song:
    lda #1 ; NTSC
    jsr famistudio_init
    lda #0
    jsr famistudio_music_play
    rts
pause_song:
        lda #1
        eor pause_flag
        sta pause_flag

        jsr famistudio_music_pause
        rts
song_data:
    .include "song_xxx_asm6.asm"

 

 
3 播放某音效(支持4最多个音效,需要用FS制作足够的SFX)
Main:
    ...
    ; Load SFX
    ldx #<sfx_data
    ldy #>sfx_data
    jsr famistudio_sfx_init

    ...
Loop:
    ...

play_SFX_0:
        lda #0
        ldx #FAMISTUDIO_SFX_CH0
        jsr famistudio_sfx_play
        rts

play_SFX_1:
        lda #1
        ldx #FAMISTUDIO_SFX_CH1
        jsr famistudio_sfx_play
        rts

play_SFX_2:
        lda #2
        ldx #FAMISTUDIO_SFX_CH2
        jsr famistudio_sfx_play
        rts

play_SFX_3:
        lda #3
        ldx #FAMISTUDIO_SFX_CH3
        jsr famistudio_sfx_play
        rts
        
sfx_data:
    .include "sfx_asm6.asm"

 

 
三、关于高级应用DPCM
只支持一个DPCM地址,默认地址在$e000。如果某BGM包含dmc,那就放这儿。
    ; DPCM
    .org $e000
    .incbin "song_xxx_asm6.dmc"

 

这个地址也能改:(参看上面的设定)
FAMISTUDIO_DPCM_OFF = $e000

  

 

posted on 2023-01-25 23:13  大魔司教教主  阅读(181)  评论(0编辑  收藏  举报

导航