【原创】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
浙公网安备 33010602011771号