【原创】FamiStudio引擎应用
NES(主要)分成两条运行脉胳,即Main与NMI。那么本引擎在这两部分都分配代码。
之前说过FS的音乐数据文件是asm,例程喜欢命名为"song_xxx_asm6.asm",如果其包含DPCM,即会多一个文件"song_xxx_asm6.dmc"。
特别音效文件是"sfx_asm6.asm"
一、关于本引擎, 在NMI只有一行。(放在刷屏和扫描按键之后即可。)
1 | jsr famistudio_update |
二、关于本引擎,在Main中有一些功能:
1 所有设定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | ; 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
如果要更改,则修改
1 | FAMISTUDIO_ASM6_CODE_BASE = $8000 |
1.2 本引擎零页内存 开始的地址 $00b4(注,例程占用了B4个字节的零页内存)
如果要更改,则修改
1 | FAMISTUDIO_ASM6_ZP_ENUM = $00b4 |
1.3 本引擎内存 开始的地址$0300(注,例程没有占用)
如果要更改,则修改
1 | FAMISTUDIO_ASM6_BSS_ENUM = $0300 |
2 播放某BGM / 暂停BGM
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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,那就放这儿。
1 2 3 | ; DPCM .org $e000 .incbin "song_xxx_asm6.dmc" |
这个地址也能改:(参看上面的设定)
1 | FAMISTUDIO_DPCM_OFF = $e000 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)