diff options
author | Rangi <remy.oukaour+rangi42@gmail.com> | 2018-02-03 21:11:55 -0500 |
---|---|---|
committer | Rangi <remy.oukaour+rangi42@gmail.com> | 2018-02-03 21:11:55 -0500 |
commit | 73ea7c6326f16f84de1cf74193705328d1664645 (patch) | |
tree | 31c6e407dd73df136f34c7945c8198afb2746f0a /macros/code.asm | |
parent | 271aa20b73f699819351e787c58d0d14694eb135 (diff) |
Macro factors out sine code, just like sine data, since it's used 5 times
Diffstat (limited to 'macros/code.asm')
-rw-r--r-- | macros/code.asm | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/macros/code.asm b/macros/code.asm index 0b36f6c11..a02a33380 100644 --- a/macros/code.asm +++ b/macros/code.asm @@ -52,3 +52,50 @@ endc endr and x ENDM + +calc_sine_wave: MACRO +; input: a = a signed 6-bit value +; output: a = d * sin(a * pi/32) + and %111111 + cp %100000 + jr nc, .negative\@ + call .apply\@ + ld a, h + ret +.negative\@ + and %011111 + call .apply\@ + ld a, h + xor $ff + inc a + ret +.apply\@ + ld e, a + ld a, d + ld d, 0 +if _NARG == 1 + ld hl, \1 +else + ld hl, .sinetable\@ +endc + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, 0 +.multiply\@ ; factor amplitude + srl a + jr nc, .even\@ + add hl, de +.even\@ + sla e + rl d + and a + jr nz, .multiply\@ + ret +if _NARG == 0 +.sinetable\@ + sine_table 32 +endc +ENDM |