From ce18a8a16208e442b8dd14ee91dd79241c59e3e5 Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Tue, 8 Mar 2022 22:52:12 +0100 Subject: [PATCH] add initial pulse width support --- examples/curlywas/tim_ges.cwa | 8 ++++---- platform/bin/platform.uw8 | Bin 3316 -> 3338 bytes platform/src/ges.cwa | 6 +++++- src/run-web.html | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/examples/curlywas/tim_ges.cwa b/examples/curlywas/tim_ges.cwa index 77eb363..e532074 100644 --- a/examples/curlywas/tim_ges.cwa +++ b/examples/curlywas/tim_ges.cwa @@ -16,7 +16,7 @@ fn melody(ch: i32, t: i32, T: i32) { export fn upd() { let lazy t = 32!32 / (1000/60); - let lazy T = t / 8; + let lazy T = t / 7; melody(98, t, T - 3); melody(92, t, T); @@ -36,10 +36,10 @@ export fn upd() { data 80 { i8( - 0, 128, 0, 128, 0x40, 0xe, + 0, 64, 0, 128, 0x40, 0xe, 0, 128, 0, 128, 0x8, 0xc8, - 0, 128, 0, 128, 0xa, 0xa, - 0, 128, 0, 128, 0xa, 0xa, + 0, 32, 0, 128, 0xa, 0xa, + 0, 64, 0, 128, 0xa, 0xa, 0xf8, 0x85, 0xc1, 0xf1, 0, 110, 0, 90 ) diff --git a/platform/bin/platform.uw8 b/platform/bin/platform.uw8 index c77b12e2c49f26896b34f3ff9af8f90c37658169..9276f19f1bd76f3eae4e0f07571de1db7f2f1714 100644 GIT binary patch literal 3338 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 diff --git a/platform/src/ges.cwa b/platform/src/ges.cwa index ad75ae8..99ade94 100644 --- a/platform/src/ges.cwa +++ b/platform/src/ges.cwa @@ -63,6 +63,9 @@ export fn gesSnd(t: i32) -> f32 { let phase = i32.load16_u(channelState, GesChannelState.Phase) << 8; + let inline pulseWidth = channelReg?1; + let phaseShift = (pulseWidth - 128) * 255; + i = 0; let wave = ctrl >> 6; if wave < 2 { @@ -76,7 +79,8 @@ export fn gesSnd(t: i32) -> f32 { else { loop rectLoop { - i!(GesBufferOffset + 128*4) = select(phase & 32768, -32768, 32767); + let p = (phase & 65535) + phaseShift; + i!(GesBufferOffset + 128*4) = select(p >= 32768, -32768, 32767); phase = phase + phaseInc; branch_if (i := i + 4) < 64*4: rectLoop; } diff --git a/src/run-web.html b/src/run-web.html index c690081..7631b88 100644 --- a/src/run-web.html +++ b/src/run-web.html @@ -1 +1 @@ -uw8-run
\ No newline at end of file +uw8-run
\ No newline at end of file