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

  

 

posted on   大魔司教教主  阅读(226)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示