Skip to content

Commit

Permalink
Clamp pitch and hi-pitch envelope period results
Browse files Browse the repository at this point in the history
  • Loading branch information
Gumball2415 committed Mar 22, 2024
1 parent 71f4f62 commit 6f2c743
Show file tree
Hide file tree
Showing 11 changed files with 2,477 additions and 2,458 deletions.
47 changes: 22 additions & 25 deletions Source/drivers/asm/effects.s
Original file line number Diff line number Diff line change
Expand Up @@ -517,27 +517,28 @@ ft_portamento_up:
sta var_Temp16
lda #$00
sta var_Temp16 + 1
.if .defined(USE_N163)
lda ft_channel_type, x
cmp #CHAN_N163
bne :+
; Multiply by 4
asl var_Temp16
rol var_Temp16 + 1
asl var_Temp16
rol var_Temp16 + 1
:
.endif
jsr ft_period_remove
jsr ft_limit_freq
: jmp ft_post_effects
jmp ft_post_effects
ft_portamento_down:
lda var_ch_Note, x
beq :+
lda var_ch_EffParam, x
sta var_Temp16
lda #$00
sta var_Temp16 + 1
jsr ft_period_add
jsr ft_limit_freq
: jmp ft_post_effects

ft_period_add:
.if .defined(USE_N163)
.if .defined(USE_LINEARPITCH) ;;; ;; ;
lda var_SongFlags
and #FLAG_LINEARPITCH
bne :+
.endif ; ;; ;;;
lda ft_channel_type, x
cmp #CHAN_N163
bne :+
Expand All @@ -548,6 +549,16 @@ ft_period_add:
rol var_Temp16 + 1
:
.endif
jsr ft_period_add
jsr ft_limit_freq
jmp ft_post_effects

ft_period_add:
.if .defined(USE_LINEARPITCH) ;;; ;; ;
lda var_SongFlags
and #FLAG_LINEARPITCH
bne :+
.endif ; ;; ;;;
clc
lda var_ch_TimerPeriodLo, x
adc var_Temp16
Expand All @@ -561,26 +572,12 @@ ft_period_add:
sta var_ch_TimerPeriodHi, x
: rts
ft_period_remove:
.if .defined(USE_N163)
.if .defined(USE_LINEARPITCH) ;;; ;; ;
lda var_SongFlags
padjmp_h 8
and #FLAG_LINEARPITCH
bne :+
.endif ; ;; ;;;
lda ft_channel_type, x
cmp #CHAN_N163
padjmp 7
padjmp_h 4
bne :+
; Multiply by 4
asl var_Temp16
rol var_Temp16 + 1
asl var_Temp16
padjmp 5
rol var_Temp16 + 1
:
.endif
sec
lda var_ch_TimerPeriodLo, x
sbc var_Temp16
Expand Down
71 changes: 40 additions & 31 deletions Source/drivers/asm/instrument.s
Original file line number Diff line number Diff line change
Expand Up @@ -179,20 +179,22 @@ ft_run_instrument:
jsr ft_translate_freq_only

; Check this
: clc
lda var_sequence_result
adc var_ch_TimerPeriodLo, x
sta var_ch_TimerPeriodLo, x
: lda #$00
sta var_Temp16 + 1
lda var_sequence_result
bpl @NoNegativePitch
lda #$FF
bmi @LoadLowPitch
@NoNegativePitch:
lda #$00
@LoadLowPitch:
adc var_ch_TimerPeriodHi, x
sta var_ch_TimerPeriodHi, x
jsr ft_limit_freq
sta var_Temp16
bpl @PositivePitch
@NegativePitch:
;; !! !! change the sign
lda #$FF
eor var_Temp16
sta var_Temp16
inc var_Temp16
jsr ft_period_remove
jmp :+
@PositivePitch:
jsr ft_period_add
: jsr ft_limit_freq
; ^^^^^^^^^^

; Save pitch
Expand All @@ -211,32 +213,39 @@ ft_run_instrument:
sta var_ch_SequencePtr4, x

; Check this
lda var_sequence_result
sta var_Temp16
rol a
bcc @AddHiPitch
lda #$FF
sta var_Temp16 + 1
jmp @StoreHiPitch
@AddHiPitch:
lda #$00
sta var_Temp16 + 1
@StoreHiPitch:
lda var_sequence_result
sta var_Temp16
ldy #$04
: clc
rol var_Temp16 ; multiply by 2
rol var_Temp16 ; multiply by 16
rol var_Temp16 + 1
dey
bne :-

clc
lda var_Temp16
adc var_ch_TimerPeriodLo, x
sta var_ch_TimerPeriodLo, x
lda var_Temp16 + 1
adc var_ch_TimerPeriodHi, x
sta var_ch_TimerPeriodHi, x
jsr ft_limit_freq
lda var_sequence_result
bpl @PositiveHiPitch
@NegativeHiPitch:
;; !! !! change the sign
lda #$FF
eor var_Temp16 + 1
sta var_Temp16 + 1
lda #$FF
eor var_Temp16
clc
adc #$01
sta var_Temp16
lda #$00
adc var_Temp16 + 1
sta var_Temp16 + 1
jsr ft_period_remove
; check for over/underflow
; limitperiod()
jmp :+
@PositiveHiPitch:
jsr ft_period_add
: jsr ft_limit_freq
; ^^^^^^^^^^

@SkipHiPitchUpdate:
Expand Down
4 changes: 2 additions & 2 deletions Source/drivers/asm/player.s
Original file line number Diff line number Diff line change
Expand Up @@ -1595,11 +1595,11 @@ ft_limit_note: ;;; ;; ;
; pla
cpx #APU_NOI
beq :+++
cmp #$00
cmp #$00 ; no note
beq :+
bpl :++
: lda #$01
: cmp #$60
: cmp #$60 ; note 95 (incremented by one earlier)
bcc :+
lda #$60
: rts ; ;; ;;;
Expand Down
499 changes: 250 additions & 249 deletions Source/drivers/drv_2a03.h

Large diffs are not rendered by default.

1,003 changes: 502 additions & 501 deletions Source/drivers/drv_all.h

Large diffs are not rendered by default.

586 changes: 294 additions & 292 deletions Source/drivers/drv_fds.h

Large diffs are not rendered by default.

509 changes: 256 additions & 253 deletions Source/drivers/drv_mmc5.h

Large diffs are not rendered by default.

526 changes: 263 additions & 263 deletions Source/drivers/drv_n163.h

Large diffs are not rendered by default.

532 changes: 267 additions & 265 deletions Source/drivers/drv_s5b.h

Large diffs are not rendered by default.

544 changes: 273 additions & 271 deletions Source/drivers/drv_vrc6.h

Large diffs are not rendered by default.

614 changes: 308 additions & 306 deletions Source/drivers/drv_vrc7.h

Large diffs are not rendered by default.

0 comments on commit 6f2c743

Please sign in to comment.