]> git.sur5r.net Git - cc65/commitdiff
fixed Sleep behavior (now truly works)
authorizydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 15 Aug 2003 22:20:45 +0000 (22:20 +0000)
committerizydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 15 Aug 2003 22:20:45 +0000 (22:20 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@2335 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/geos/process/processsleep.s

index 7edac2ff44feb2ccdee7993ac557f66833cde68c..1cd41441b43d48236ddbaa800ce1b780323851d7 100644 (file)
@@ -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);
 
            .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