Skip to content

Instantly share code, notes, and snippets.

@viciious
Created July 19, 2023 18:41
Show Gist options
  • Save viciious/0b8b0ee75dfd6deaebadfb5ef1eef6ff to your computer and use it in GitHub Desktop.
Save viciious/0b8b0ee75dfd6deaebadfb5ef1eef6ff to your computer and use it in GitHub Desktop.
movem.l d2-d7/a2-a5,-(sp)
move.l sp@(44),a0 | adpcm state pointer
move.l sp@(48),a1 | write pointer
move.l sp@(52),d0 | length
move.l d0,d7
lsr.l #1,d7
subq.l #1,d7
move.l 0(a0),a5 | read pointer
moveq #0,d2
move.w 4(a0),d2 | index
moveq #0,d6
move.w 6(a0),d6 | value
lea adpcm_ima_indices,a3
lea adpcm_ima_deltas,a2
lea pcm_u8_to_sm_lut,a4
moveq #0,d0
moveq #0,d1
swap d7
samplePair2:
swap d7
samplePair:
move.b (a5)+,d1 | 8
move.b d1,d0 | 4
andi.b #0x0F,d0 | 8
andi.b #0xF0,d1 | 8
lsr.b #3,d1 | 12
add.b d0,d0 | 4
| = 44
firstSample:
move.w d2,d3 | 4
add.w d0,d3 | 4
move.w (a3,d3.w),d2 | 14 | update index
add.w d3,d3 | 4
add.l (a2,d3.w),d6 | 18
spl d3 | 4
ext.w d3 | 4
and.w d3,d6 | 4 | d6 == 0 if d6 < 0
clampMin0Done:
btst.l #16,d6 | 6 | test for bit 16 - 1 if d6 > 0xffff
beq.s clampMax0Done | 10 or 12
move.l d3,d6
clampMax0Done:
move.w d6,-(sp) | 8
move.b (sp)+,d0 | 8
move.b (a4,d0.w),(a1) | 18
secondSample:
move.w d2,d3 | 4
add.w d1,d3 | 4
move.w (a3,d3.w),d2 | 14 | update index
add.w d3,d3 | 4
add.l (a2,d3.w),d6 | 16
spl d3 | 4
ext.w d3 | 4
and.w d3,d6 | 4 | d6 == 0 if d6 < 0
clampMin1Done:
btst.l #16,d6 | 6 | test for bit 16 - 1 if d6 > 0xffff
beq.s clampMax1Done | 10 or 12
move.l d3,d6
clampMax1Done:
move.w d6,-(sp) | 8
move.b (sp)+,d0 | 8
move.b (a4,d0.w),2(a1) | 22
addq #4,a1 | 8
| = 220-224
dbf d7, samplePair | 12
swap d7
dbf d7, samplePair2
move.l a5,0(a0)
move.w d2,4(a0)
move.w d6,6(a0)
movem.l (sp)+,d2-d7/a2-a5
rts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment