diff options
author | yenatch <yenatch@gmail.com> | 2018-02-25 22:39:51 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-25 22:39:51 -0500 |
commit | 725148443f0ed0f70af747259ef49643359e92a2 (patch) | |
tree | 5f8ccf80489e0820934d40a732a5ce8d7f65e1e3 /macros/code.asm | |
parent | f44f306cfd4b438d0ba2f56b61be4b118ef3274b (diff) | |
parent | 7453bd1aa8e55a1a9fcce7c69f62106f5e5f6e9c (diff) |
Merge pull request #476 from Rangi42/master
Resolve some issues; rename some maps; move more tables into data/; warp_def → warp_event (ready to merge)
Diffstat (limited to 'macros/code.asm')
-rw-r--r-- | macros/code.asm | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/macros/code.asm b/macros/code.asm index 799c27d45..a02a33380 100644 --- a/macros/code.asm +++ b/macros/code.asm @@ -41,8 +41,8 @@ maskbits: MACRO ; example usage in rejection sampling: ; .loop ; call Random -; maskbits 30 -; cp 30 +; maskbits 26 +; cp 26 ; jr nc, .loop x = 1 rept 8 @@ -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 |