From 9c444a49471e8f60112e0417183476d2349e4d59 Mon Sep 17 00:00:00 2001
From: izydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Date: Fri, 15 Aug 2003 22:20:45 +0000
Subject: [PATCH] fixed Sleep behavior (now truly works)

git-svn-id: svn://svn.cc65.org/cc65/trunk@2335 b7a2c559-68d2-44c3-8de9-860c34a00d81
---
 libsrc/geos/process/processsleep.s | 27 ++++++++++++++++++++++-----
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/libsrc/geos/process/processsleep.s b/libsrc/geos/process/processsleep.s
index 7edac2ff4..1cd41441b 100644
--- a/libsrc/geos/process/processsleep.s
+++ b/libsrc/geos/process/processsleep.s
@@ -1,8 +1,8 @@
 
 ;
-; Maciej 'YTM/Alliance' Witkowiak
+; Maciej 'YTM/Elysium' Witkowiak
 ;
-; 30.10.99
+; 30.10.99, 15.8.2003
 
 ;
 ; void Sleep (int jiffies);
@@ -12,9 +12,26 @@
 
 	    .include "../inc/jumptab.inc"
 	    .include "../inc/geossym.inc"
+	    .importzp ptr1
+	    .importzp tmp1
+
+_SleepExit:
+	    jsr Sleep			; call Sleep
+	    ldx tmp1
+	    txs				; restore stack pointer
+	    jmp (ptr1)			; when timeouts control will reach here
 
 _Sleep:
-	    
-	    sta r0L
+	    sta r0L			; store data
 	    stx r0H
-	    jmp Sleep
\ No newline at end of file
+	    pla
+	    sta ptr1
+	    pla
+	    sta ptr1+1			; preserve return address
+	    inc ptr1
+	    bne @L0
+	    inc ptr1+1			; fix return address
+@L0:	    tsx
+	    stx tmp1			; preserve stack pointer
+	    jsr _SleepExit		; call Sleep
+	    jmp MainLoop		; immediate return here - go to idle loop