diff options
Diffstat (limited to '')
| -rw-r--r-- | src/syscall.asm | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/syscall.asm b/src/syscall.asm index e3f0b1b..4bcb601 100644 --- a/src/syscall.asm +++ b/src/syscall.asm @@ -277,8 +277,10 @@ ENDR ; ----------------------------------------------------------------------------- ; sys_sleep(B = 1/64-second units) - cooperative delay driven by the DIV timer. -; DIV (FF04) free-runs at 16384 Hz, so 256 ticks = 1/64 s. We accumulate DIV -; deltas across SchedYields (other procs run) until enough units have elapsed. +; DIV free-runs at 16384 Hz - 32768 Hz in double-speed mode, where 256 ticks +; = 1/128 s - so the accumulated high byte is halved before comparing against +; the target. We accumulate DIV deltas across SchedYields (other procs run) +; until enough 1/64-second units have elapsed. ; ----------------------------------------------------------------------------- sys_sleep: ld a, b @@ -305,7 +307,8 @@ sys_sleep: ld [wSleepAcc], a ld a, [wSleepAcc+1] adc 0 - ld [wSleepAcc+1], a ; acc high byte = elapsed 1/64-second units + ld [wSleepAcc+1], a ; acc high byte = elapsed 1/128-second units + srl a ; /2: double-speed DIV -> 1/64-second units ld b, a ld a, [wSleepTarget] cp b |
