Noise wave generation code optimized.
This commit is contained in:
parent
4461c72eaa
commit
b805349bf0
@ -1,7 +1,7 @@
|
||||
# Raspberry Casket
|
||||
A fast and small open source Pretracker replayer
|
||||
|
||||
## Raspberry Casket Player V2.x (10-Aug-2023)
|
||||
## Raspberry Casket Player V2.x (22-Aug-2023)
|
||||
|
||||
Provided by Chris 'platon42' Hodges <chrisly@platon42.de>
|
||||
|
||||
@ -101,7 +101,7 @@ The original code compressed with *Blueberry's* Shrinkler goes from
|
||||
18052 bytes down to 9023 bytes.
|
||||
|
||||
Raspberry Casket, depending on the features compiled in, is about
|
||||
5784 bytes and shrinkles down to ~4118 bytes (in isolation).
|
||||
5732 bytes and shrinkles down to ~4084 bytes (in isolation).
|
||||
|
||||
So this means that the optimization is not just "on the outside".
|
||||
|
||||
@ -168,8 +168,9 @@ solve this problem.
|
||||
- Bugfix: Songend detection for back-jumps was broken since at least V1.1.
|
||||
- Optimized some more wave selection code.
|
||||
- Nosync/sync wave selection optimized.
|
||||
- Optimized wave generation a bit more (noise generator).
|
||||
- Added Presto player draft.
|
||||
- Drop-in replacement code size: 5784 bytes.
|
||||
- Drop-in replacement code size: 5732 bytes.
|
||||
|
||||
### V1.x (unreleased)
|
||||
- Fixed a bug regarding the copper output mode with looping waves having a loop-offset.
|
||||
|
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
;--------------------------------------------------------------------
|
||||
; Raspberry Casket Player V2.x (20-Aug-2023)
|
||||
; Raspberry Casket Player V2.x (22-Aug-2023)
|
||||
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
;
|
||||
; Provided by Chris 'platon42' Hodges <chrisly@platon42.de>
|
||||
@ -96,7 +96,7 @@
|
||||
; 18052 bytes down to 9023 bytes.
|
||||
;
|
||||
; Raspberry Casket, depending on the features compiled in, is about
|
||||
; 5784 bytes and shrinkles down to ~4118 bytes (in isolation).
|
||||
; 5732 bytes and shrinkles down to ~4084 bytes (in isolation).
|
||||
;
|
||||
; So this means that the optimization is not just "on the outside".
|
||||
;
|
||||
|
@ -1,25 +1,25 @@
|
||||
|
||||
CLIPTO8BIT MACRO
|
||||
cmpi.w #-$80,\1
|
||||
cmp.w #-$80,\1
|
||||
bge.s .nominclip\@
|
||||
moveq.l #-$80,\1
|
||||
.nominclip\@
|
||||
cmpi.w #$7F,\1
|
||||
cmp.w #$7f,\1
|
||||
ble.s .nomaxclip\@
|
||||
moveq.l #$7F,\1
|
||||
moveq.l #$7f,\1
|
||||
.nomaxclip\@
|
||||
ENDM
|
||||
|
||||
CLIPORTRUNC8BIT MACRO
|
||||
beq.s .unboosted\@
|
||||
asr.l #6,\1
|
||||
cmpi.w #-$80,\1
|
||||
asr.l #6,\1
|
||||
cmp.w #-$80,\1
|
||||
bge.s .nominclip\@
|
||||
moveq.l #-$80,\1
|
||||
.nominclip\@
|
||||
cmpi.w #$7F,\1
|
||||
cmp.w #$7f,\1
|
||||
ble.s .nomaxclip\@
|
||||
moveq.l #$7F,\1
|
||||
moveq.l #$7f,\1
|
||||
bra.s .nomaxclip\@
|
||||
.unboosted\@
|
||||
asr.l #8,\1
|
||||
@ -254,8 +254,10 @@ pre_WaveGen:
|
||||
bne .no_noise
|
||||
|
||||
; ----------------------------------------
|
||||
; d0 = scratch
|
||||
; d1 = octave
|
||||
; d2 = pitch ramping value
|
||||
; d4 = scratch
|
||||
; a2 = base note
|
||||
.gen_noise
|
||||
IFNE PRETRACKER_PARANOIA_MODE
|
||||
@ -307,6 +309,8 @@ pre_WaveGen:
|
||||
move.b wi_chord_shift_b(a3),d1
|
||||
add.w d1,d0
|
||||
addq.w #1,d0
|
||||
|
||||
; sum of phase min and shift are used as root for noise
|
||||
|
||||
movea.l d5,a1
|
||||
movea.l pv_wg_curr_sample_ptr(a4),a0
|
||||
@ -330,30 +334,26 @@ pre_WaveGen:
|
||||
lsl.w #7,d1
|
||||
eor.w d1,d0
|
||||
|
||||
cmpa.l #$8000,a5 ; if symmetrical
|
||||
beq.s .gen_noise_centered
|
||||
; FIXME what does this do? d4 = (a5 - $8000) d1 = (a5 + $7fff)&$ffff8000 -> d4 - d1 == ((a5 - $8000) - ((a5 + $7fff)&$ffff8000)
|
||||
move.l a5,d4
|
||||
addi.l #$FFFF8000,d4
|
||||
move.l a5,d1
|
||||
addi.l #$FFFF7FFF,d1
|
||||
andi.w #$8000,d1
|
||||
movea.l d4,a5
|
||||
suba.l d1,a5
|
||||
.gen_noise_centered
|
||||
|
||||
move.b d0,d1
|
||||
move.b d0,d1 ; take the random seed
|
||||
ext.w d1
|
||||
move.w d3,d4
|
||||
muls d1,d4
|
||||
move.l d4,d1
|
||||
asr.l #7,d1
|
||||
muls d3,d1 ; multiply by gain
|
||||
asr.w #7,d1
|
||||
CLIPTO8BIT d1
|
||||
add.b (a0),d1
|
||||
|
||||
move.w a5,d4
|
||||
subq.w #1,d4
|
||||
and.w #$7fff,d4
|
||||
move.w d4,a5
|
||||
addq.w #1,a5
|
||||
|
||||
.gen_noise_innerloop
|
||||
move.b d1,(a0)+
|
||||
cmpa.l pv_wg_curr_samend_ptr(a4),a0
|
||||
beq .wave_gen_tone_done
|
||||
|
||||
adda.l a1,a5
|
||||
|
||||
tst.l d2
|
||||
beq.s .gen_noise_no_pitch_ramping
|
||||
add.l d2,d6
|
||||
@ -365,22 +365,21 @@ pre_WaveGen:
|
||||
|
||||
btst #4,wi_flags_b(a3) ; pitch linear flag
|
||||
beq.s .noise_nonlinear_pitch
|
||||
move.l d2,d4
|
||||
move.l d2,d4 ; filter pitch speed
|
||||
asr.l #7,d4
|
||||
sub.l d4,d2
|
||||
.noise_nonlinear_pitch
|
||||
|
||||
cmpa.w #$1FF,a1
|
||||
bgt.s .gen_noise_no_pitch_ramping
|
||||
moveq.l #0,d2
|
||||
cmpa.w #$1ff,a1
|
||||
bgt.s .gen_noise_no_end_of_pitch_ramp
|
||||
moveq.l #0,d2 ; stop pitch ramping
|
||||
move.l d2,a5
|
||||
;suba.l a5,a5
|
||||
movea.w #$200,a1
|
||||
.gen_noise_no_end_of_pitch_ramp
|
||||
.gen_noise_no_pitch_ramping
|
||||
cmpa.l pv_wg_curr_samend_ptr(a4),a0
|
||||
beq .wave_gen_tone_done
|
||||
cmpa.w #$7FFF,a5
|
||||
ble.s .gen_noise_innerloop
|
||||
cmpa.w a5,a5
|
||||
beq.s .gen_noise_innerloop
|
||||
|
||||
bra .gen_noise_outerloop
|
||||
|
||||
; ----------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user