【原创】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