Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;....................................................................................................
- .bank $01
- ;BASE_SM1 = $3e00
- .bss
- BASE_SM1: .ds (TIMER_PLAYER_END-TIMER_PLAYER)
- .code
- TIMER_PLAYER:
- ;ram
- .chn0_chk
- jmp (.chn0_end_chk-TIMER_PLAYER)+BASE_SM1 ;.chn0_end_chk
- .chn1_chk
- jmp (.chn1_end_chk-TIMER_PLAYER)+BASE_SM1 ;.chn1_end_chk
- .PCM_DRIVER
- ;int call
- stz $1403
- tst #$ff,$3fff
- beq .do
- rti
- .do
- pha
- ; 15 cycles
- stz $800
- .sm1 lda #$00
- .dda0 sta $806
- lda #$01
- sta $800
- .sm2 lda #$00
- .dda1 sta $806
- lda #$02
- sta $800
- .sm3 lda #$00
- .dda2 sta $806
- lda #$03
- sta $800
- .sm4 lda #$00
- .dda3 sta $806
- lda #$01
- sta $3fff
- cli
- ; 56 cycles
- .ch0 lda #$00
- tam #$06
- .sm5 lda #$00
- .cn0 adc #$00
- sta (.sm5-TIMER_PLAYER)+BASE_SM1+1
- .sm6 lda #$00
- .cn1 adc #$00
- sta (.sm6-TIMER_PLAYER)+BASE_SM1+1
- .sm7 lda #$00
- adc (.sm8-TIMER_PLAYER)+BASE_SM1+1
- sta (.sm8-TIMER_PLAYER)+BASE_SM1+1
- bcs .inc_chn0_msb
- .sm8 lda $0000
- bmi .chn0_chk
- sta (.sm1-TIMER_PLAYER)+BASE_SM1+1
- ; 51 cycles
- .ch1 lda #$00
- tam #$06
- .sm9 lda #$00
- .cn2 adc #$00
- sta (.sm9-TIMER_PLAYER)+BASE_SM1+1
- .sm10 lda #$00
- .cn3 adc #$00
- sta (.sm10-TIMER_PLAYER)+BASE_SM1+1
- .sm11 lda #$00
- adc (.sm12-TIMER_PLAYER)+BASE_SM1+1
- sta (.sm12-TIMER_PLAYER)+BASE_SM1+1
- bcs .inc_chn1_msb
- .sm12 lda $0000
- bmi .chn1_chk
- sta (.sm2-TIMER_PLAYER)+BASE_SM1+1
- ; 51 cycles
- .ch2 lda #$00
- tam #$06
- .sm13 lda #$00
- .cn4 adc #$00
- sta (.sm13-TIMER_PLAYER)+BASE_SM1+1
- .sm14 lda #$00
- .cn5 adc #$00
- sta (.sm14-TIMER_PLAYER)+BASE_SM1+1
- .sm15 lda #$00
- adc (.sm16-TIMER_PLAYER)+BASE_SM1+1
- sta (.sm16-TIMER_PLAYER)+BASE_SM1+1
- bcs .inc_chn2_msb
- .sm16 lda $0000
- bmi .chn2_chk
- sta (.sm3-TIMER_PLAYER)+BASE_SM1+1
- ; 51 cycles
- .ch3 lda #$00
- tam #$06
- .sm17 lda #$00
- .cn6 adc #$00
- sta (.sm17-TIMER_PLAYER)+BASE_SM1+1
- .sm18 lda #$00
- .cn7 adc #$00
- sta (.sm18-TIMER_PLAYER)+BASE_SM1+1
- .sm19 lda #$00
- adc (.sm20-TIMER_PLAYER)+BASE_SM1+1
- sta (.sm20-TIMER_PLAYER)+BASE_SM1+1
- bcs .inc_chn3_msb
- .sm20 lda $0000
- bmi .chn3_chk
- sta (.sm4-TIMER_PLAYER)+BASE_SM1+1
- ; 51 cycles
- .end
- pla
- stz $3fff
- rti
- ; 11 cycles
- ; 286 cycles total.
- ; 33176 cycles per frame
- ; 27.7% cpu resource
- ;rest of the conditional called code
- .chn2_chk
- jmp (.chn2_end_chk-TIMER_PLAYER)+BASE_SM1
- .chn3_chk
- jmp (.chn3_end_chk-TIMER_PLAYER)+BASE_SM1
- .inc_chn0_msb
- lda (.sm8-TIMER_PLAYER)+BASE_SM1+2
- adc #$00
- cmp #$e0
- bcs .inc_chn0_bnk
- sta (.sm8-TIMER_PLAYER)+BASE_SM1+2
- jmp (.sm8-TIMER_PLAYER)+BASE_SM1
- .inc_chn0_bnk
- and #$c0
- sta (.sm8-TIMER_PLAYER)+BASE_SM1+2
- lda (.ch0-TIMER_PLAYER)+BASE_SM1+1
- inc a
- sta (.ch0-TIMER_PLAYER)+BASE_SM1+1
- .ch0_ tam #$06
- jmp (.sm8-TIMER_PLAYER)+BASE_SM1
- .inc_chn1_msb
- lda (.sm12-TIMER_PLAYER)+BASE_SM1+2
- adc #$00
- cmp #$e0
- bcs .inc_chn1_bnk
- sta (.sm12-TIMER_PLAYER)+BASE_SM1+2
- jmp (.sm12-TIMER_PLAYER)+BASE_SM1
- .inc_chn1_bnk
- and #$c0
- sta (.sm12-TIMER_PLAYER)+BASE_SM1+2
- lda (.ch1-TIMER_PLAYER)+BASE_SM1+1
- inc a
- sta (.ch1-TIMER_PLAYER)+BASE_SM1+1
- .ch1_ tam #$06
- jmp (.sm12-TIMER_PLAYER)+BASE_SM1
- .inc_chn2_msb
- lda (.sm16-TIMER_PLAYER)+BASE_SM1+2
- adc #$00
- cmp #$e0
- bcs .inc_chn2_bnk
- sta (.sm16-TIMER_PLAYER)+BASE_SM1+2
- jmp (.sm16-TIMER_PLAYER)+BASE_SM1
- .inc_chn2_bnk
- and #$c0
- sta (.sm16-TIMER_PLAYER)+BASE_SM1+2
- lda (.ch2-TIMER_PLAYER)+BASE_SM1+1
- inc a
- sta (.ch2-TIMER_PLAYER)+BASE_SM1+1
- .ch2_ tam #$06
- jmp (.sm16-TIMER_PLAYER)+BASE_SM1
- .inc_chn3_msb
- lda (.sm20-TIMER_PLAYER)+BASE_SM1+2
- adc #$00
- cmp #$e0
- bcs .inc_chn3_bnk
- sta (.sm20-TIMER_PLAYER)+BASE_SM1+2
- jmp (.sm20-TIMER_PLAYER)+BASE_SM1
- .inc_chn3_bnk
- and #$c0
- sta (.sm20-TIMER_PLAYER)+BASE_SM1+2
- lda (.ch3-TIMER_PLAYER)+BASE_SM1+1
- inc a
- sta (.ch3-TIMER_PLAYER)+BASE_SM1+1
- .ch3_ tam #$06
- jmp (.sm20-TIMER_PLAYER)+BASE_SM1
- .chn0_end_chk
- lda #$80
- sta (.ch0-TIMER_PLAYER)+BASE_SM1 ;.ch0
- .0 lda #low(.ch1 - .ch0)-2
- sta (.ch0-TIMER_PLAYER)+BASE_SM1+1 ;.ch0+1
- stz (.dda0-TIMER_PLAYER)+BASE_SM1+1 ;.dda0+1
- jmp (.ch1-TIMER_PLAYER)+BASE_SM1 ;.ch1
- .chn1_end_chk
- lda #$80
- sta (.ch1-TIMER_PLAYER)+BASE_SM1 ;.ch1
- .1 lda #low(.ch2 - .ch1)-2
- sta (.ch1-TIMER_PLAYER)+BASE_SM1+1 ;.ch1+1
- stz (.dda1-TIMER_PLAYER)+BASE_SM1+1 ;.dda1+1
- jmp (.ch2-TIMER_PLAYER)+BASE_SM1 ;.ch2
- .chn2_end_chk
- lda #$80
- sta (.ch2-TIMER_PLAYER)+BASE_SM1 ;.ch2
- .2 lda #low(.ch3 - .ch2)-2
- sta (.ch2-TIMER_PLAYER)+BASE_SM1+1 ;.ch2+1
- stz (.dda2-TIMER_PLAYER)+BASE_SM1+1 ;.dda2+1
- jmp (.ch3-TIMER_PLAYER)+BASE_SM1 ;.ch3
- .chn3_end_chk
- lda #$80
- sta (.ch3-TIMER_PLAYER)+BASE_SM1 ;.ch3
- .3 lda #low(.end - .ch3)-2
- sta (.ch3-TIMER_PLAYER)+BASE_SM1+1 ;.ch3+1
- stz (.dda3-TIMER_PLAYER)+BASE_SM1+1 ;.dda3+1
- jmp (.end-TIMER_PLAYER)+BASE_SM1 ;.end
- ;Need to make some private labels, public.
- PCM_DRIVER = (.PCM_DRIVER-TIMER_PLAYER)+BASE_SM1
- CHN0.bnk = (.ch0-TIMER_PLAYER)+BASE_SM1+1
- CHN0.mode = (.ch0-TIMER_PLAYER)+BASE_SM1
- CHN0.on = $a9
- CHN0.off = $80
- CHN0.stop = (.ch1 - .ch0)-2
- CHN0.ddaOff = $00
- CHN0.ddaOn = $06
- CHN0.dda = (.dda0-TIMER_PLAYER)+BASE_SM1+1
- CHN0.lo = (.cn0-TIMER_PLAYER)+BASE_SM1+1
- CHN0.mid = (.cn1-TIMER_PLAYER)+BASE_SM1+1
- CHN0.hi = (.sm7-TIMER_PLAYER)+BASE_SM1+1
- CHN0.ptr = (.sm8-TIMER_PLAYER)+BASE_SM1+1
- CHN1.bnk = (.ch1-TIMER_PLAYER)+BASE_SM1+1
- CHN1.mode = (.ch1-TIMER_PLAYER)+BASE_SM1
- CHN1.on = $a9
- CHN1.off = $80
- CHN1.ddaOff = $00
- CHN1.ddaOn = $06
- CHN1.stop = (.ch2 - .ch1)-2
- CHN1.dda = (.dda1-TIMER_PLAYER)+BASE_SM1+1
- CHN1.lo = (.cn2-TIMER_PLAYER)+BASE_SM1+1
- CHN1.mid = (.cn3-TIMER_PLAYER)+BASE_SM1+1
- CHN1.hi = (.sm11-TIMER_PLAYER)+BASE_SM1+1
- CHN1.ptr = (.sm12-TIMER_PLAYER)+BASE_SM1+1
- CHN2.bnk = (.ch2-TIMER_PLAYER)+BASE_SM1+1
- CHN2.mode = (.ch2-TIMER_PLAYER)+BASE_SM1
- CHN2.on = $a9
- CHN2.off = $80
- CHN2.ddaOff = $00
- CHN2.ddaOn = $06
- CHN2.stop = (.ch3 - .ch2)-2
- CHN2.dda = (.dda2-TIMER_PLAYER)+BASE_SM1+1
- CHN2.lo = (.cn4-TIMER_PLAYER)+BASE_SM1+1
- CHN2.mid = (.cn5-TIMER_PLAYER)+BASE_SM1+1
- CHN2.hi = (.sm15-TIMER_PLAYER)+BASE_SM1+1
- CHN2.ptr = (.sm16-TIMER_PLAYER)+BASE_SM1+1
- CHN3.bnk = (.ch3-TIMER_PLAYER)+BASE_SM1+1
- CHN3.mode = (.ch3-TIMER_PLAYER)+BASE_SM1
- CHN3.on = $a9
- CHN3.off = $80
- CHN3.ddaOff = $00
- CHN3.ddaOn = $06
- CHN3.stop = (.end - .ch3)-2
- CHN3.dda = (.dda3-TIMER_PLAYER)+BASE_SM1+1
- CHN3.lo = (.cn6-TIMER_PLAYER)+BASE_SM1+1
- CHN3.mid = (.cn7-TIMER_PLAYER)+BASE_SM1+1
- CHN3.hi = (.sm19-TIMER_PLAYER)+BASE_SM1+1
- CHN3.ptr = (.sm20-TIMER_PLAYER)+BASE_SM1+1
- TIMER_PLAYER_END:
- ;end code
- ;....................................................................................................
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement