diff options
author | Remy Oukaour <remy.oukaour@gmail.com> | 2017-12-24 19:35:35 -0500 |
---|---|---|
committer | Remy Oukaour <remy.oukaour@gmail.com> | 2017-12-24 19:35:35 -0500 |
commit | 7d4486e6a34a5163575400f21e806471be496e3d (patch) | |
tree | c0cc5f242b92420325d12a9cdedd6c1a3bcc3a4f /engine/routines/sine.asm | |
parent | 15f1fc7c6ce0444ebfd87b1edc22da0ffd61c667 (diff) |
Remove all code from main.asm (some labeled INCBINs, like out-of-context graphics, are still present)
engine/routines/ stores isolated out-of-context routines as individual files. It might be preferable later to append them to their related engine/ files in unique little SECTIONs, relying on the linkerscript to place them appropriately; or some other organization method. In the meantime, they're now easily findable apart from main.asm's other content.
Diffstat (limited to 'engine/routines/sine.asm')
-rwxr-xr-x | engine/routines/sine.asm | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/engine/routines/sine.asm b/engine/routines/sine.asm new file mode 100755 index 000000000..89a905d2e --- /dev/null +++ b/engine/routines/sine.asm @@ -0,0 +1,50 @@ +_Sine:: ; 84d9 +; A simple sine function. +; Return d * sin(e) in hl. + +; e is a signed 6-bit value. + ld a, e + and %111111 + cp %100000 + jr nc, .negative + + call .ApplySineWave + ld a, h + ret + +.negative + and %011111 + call .ApplySineWave + ld a, h + xor -1 + inc a + ret + +.ApplySineWave: ; 84ef + ld e, a + ld a, d + ld d, 0 + ld hl, .sinewave + add hl, de + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, 0 + +; Factor amplitude +.multiply + srl a + jr nc, .even + add hl, de +.even + sla e + rl d + and a + jr nz, .multiply + ret + +.sinewave ; 850b +; A $20-word table representing a sine wave. +; 90 degrees is index $10 at a base amplitude of $100. + sine_wave $100 |