mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-02-07 05:30:55 +00:00
pt3: optimize envelope code
This commit is contained in:
parent
90b8a76a4b
commit
7b447699f8
@ -911,35 +911,26 @@ envelope_slide:
|
|||||||
; Envelope slide
|
; Envelope slide
|
||||||
; If b1 top bits are 10 or 11
|
; If b1 top bits are 10 or 11
|
||||||
|
|
||||||
|
lda sample_b0
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl ; b0 bit 5 to carry flag
|
||||||
lda #$20
|
lda #$20
|
||||||
bit sample_b0
|
bit sample_b1 ; b1 bit 7 to sign flag, bit 5 to zero flag
|
||||||
php
|
php
|
||||||
|
|
||||||
bit sample_b1
|
|
||||||
bpl else_noise_slide ; if ((b1 & 0x80) != 0) {
|
bpl else_noise_slide ; if ((b1 & 0x80) != 0) {
|
||||||
|
tya
|
||||||
|
ora #$f0
|
||||||
|
bcs envelope_slide_down ; if ((b0 & 0x20) == 0) {
|
||||||
|
|
||||||
plp
|
envelope_slide_up:
|
||||||
php
|
; j = ((b0>>1)&0xF) + a->envelope_sliding;
|
||||||
;;bug? always falls through
|
and #$0f
|
||||||
beq envelope_slide_down ; if ((b0 & 0x20) != 0) {
|
clc
|
||||||
|
|
||||||
; FIXME: this can be optimized
|
|
||||||
|
|
||||||
envelope_slide_down:
|
envelope_slide_down:
|
||||||
|
|
||||||
; j = ((b0>>1)|0xF0) + a->envelope_sliding
|
; j = ((b0>>1)|0xF0) + a->envelope_sliding
|
||||||
tya
|
|
||||||
ora #$f0
|
|
||||||
clc
|
|
||||||
adc note_a+NOTE_ENVELOPE_SLIDING,X
|
|
||||||
sta e_slide_amount ; j
|
|
||||||
;;+jmp envelope_slide_done?
|
|
||||||
|
|
||||||
envelope_slide_up:
|
|
||||||
; j = ((b0>>1)&0xF) + a->envelope_sliding;
|
|
||||||
tya
|
|
||||||
and #$0f
|
|
||||||
clc
|
|
||||||
adc note_a+NOTE_ENVELOPE_SLIDING,X
|
adc note_a+NOTE_ENVELOPE_SLIDING,X
|
||||||
sta e_slide_amount ; j
|
sta e_slide_amount ; j
|
||||||
|
|
||||||
@ -950,6 +941,7 @@ envelope_slide_done:
|
|||||||
|
|
||||||
; a->envelope_sliding = j;
|
; a->envelope_sliding = j;
|
||||||
sta note_a+NOTE_ENVELOPE_SLIDING,X
|
sta note_a+NOTE_ENVELOPE_SLIDING,X
|
||||||
|
clc
|
||||||
|
|
||||||
last_envelope:
|
last_envelope:
|
||||||
|
|
||||||
@ -973,7 +965,7 @@ else_noise_slide:
|
|||||||
sta pt3_noise_add
|
sta pt3_noise_add
|
||||||
|
|
||||||
plp
|
plp
|
||||||
beq noise_slide_done ; if ((b1 & 0x20) != 0) {
|
bcc noise_slide_done ; if ((b1 & 0x20) != 0) {
|
||||||
|
|
||||||
; noise_sliding = pt3_noise_add
|
; noise_sliding = pt3_noise_add
|
||||||
sta note_a+NOTE_NOISE_SLIDING,X
|
sta note_a+NOTE_NOISE_SLIDING,X
|
||||||
@ -1035,7 +1027,7 @@ handle_onoff:
|
|||||||
eor #$1 ; toggle
|
eor #$1 ; toggle
|
||||||
sta note_a+NOTE_ENABLED,X
|
sta note_a+NOTE_ENABLED,X
|
||||||
|
|
||||||
bne do_offon
|
.byte $a9 ;mask do_onoff
|
||||||
do_onoff:
|
do_onoff:
|
||||||
dex ; select ONOFF
|
dex ; select ONOFF
|
||||||
;lda note_a+NOTE_ONOFF_DELAY,X ; if (a->enabled) a->onoff=a->onoff_delay;
|
;lda note_a+NOTE_ONOFF_DELAY,X ; if (a->enabled) a->onoff=a->onoff_delay;
|
||||||
@ -1457,30 +1449,33 @@ effect_2_small: ; FIXME: make smaller
|
|||||||
|
|
||||||
iny
|
iny
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda (PATTERN_L),Y ; load byte, set as slide_step low
|
|
||||||
iny
|
iny
|
||||||
sta note_a+NOTE_TONE_SLIDE_STEP_L,X
|
|
||||||
|
|
||||||
lda (PATTERN_L),Y ; load byte, set as slide_step high
|
lda (PATTERN_L),Y ; load byte, set as slide_step high
|
||||||
sta note_a+NOTE_TONE_SLIDE_STEP_H,X
|
php
|
||||||
|
|
||||||
; 16-bit absolute value
|
; 16-bit absolute value
|
||||||
bpl slide_step_positive
|
bpl slide_step_positive1
|
||||||
|
|
||||||
eor #$ff
|
eor #$ff
|
||||||
|
|
||||||
|
slide_step_positive1:
|
||||||
sta note_a+NOTE_TONE_SLIDE_STEP_H,X
|
sta note_a+NOTE_TONE_SLIDE_STEP_H,X
|
||||||
lda note_a+NOTE_TONE_SLIDE_STEP_L,X
|
dey
|
||||||
|
lda (PATTERN_L),Y ; load byte, set as slide_step low
|
||||||
|
plp
|
||||||
|
bpl slide_step_positive2
|
||||||
eor #$ff
|
eor #$ff
|
||||||
adc #$0 ;+carry set by earlier CMP
|
adc #$0 ;+carry set by earlier CMP
|
||||||
|
|
||||||
|
slide_step_positive2:
|
||||||
sta note_a+NOTE_TONE_SLIDE_STEP_L,X
|
sta note_a+NOTE_TONE_SLIDE_STEP_L,X
|
||||||
bcc skip_step_inc1
|
bcc skip_step_inc1
|
||||||
inc note_a+NOTE_TONE_SLIDE_STEP_H,X
|
inc note_a+NOTE_TONE_SLIDE_STEP_H,X
|
||||||
skip_step_inc1:
|
skip_step_inc1:
|
||||||
|
|
||||||
slide_step_positive:
|
|
||||||
|
|
||||||
iny ; moved here as it messed with flags
|
iny ; moved here as it messed with flags
|
||||||
|
iny
|
||||||
|
|
||||||
|
|
||||||
; a->tone_delta=GetNoteFreq(a->note,pt3)-
|
; a->tone_delta=GetNoteFreq(a->note,pt3)-
|
||||||
@ -1489,18 +1484,18 @@ slide_step_positive:
|
|||||||
lda note_a+NOTE_NOTE,X
|
lda note_a+NOTE_NOTE,X
|
||||||
jsr GetNoteFreq
|
jsr GetNoteFreq
|
||||||
lda freq_l
|
lda freq_l
|
||||||
sta note_a+NOTE_TONE_DELTA_L,X
|
sta temp_word_l
|
||||||
lda freq_h
|
lda freq_h
|
||||||
sta note_a+NOTE_TONE_DELTA_H,X
|
sta temp_word_h
|
||||||
|
|
||||||
lda prev_note
|
lda prev_note
|
||||||
jsr GetNoteFreq
|
jsr GetNoteFreq
|
||||||
|
|
||||||
sec
|
sec
|
||||||
lda note_a+NOTE_TONE_DELTA_L,X
|
lda temp_word_l
|
||||||
sbc freq_l
|
sbc freq_l
|
||||||
sta note_a+NOTE_TONE_DELTA_L,X
|
sta note_a+NOTE_TONE_DELTA_L,X
|
||||||
lda note_a+NOTE_TONE_DELTA_H,X
|
lda temp_word_h
|
||||||
sbc freq_h
|
sbc freq_h
|
||||||
sta note_a+NOTE_TONE_DELTA_H,X
|
sta note_a+NOTE_TONE_DELTA_H,X
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user