diff code_part1/OSTC_code_asm_part1/isr.asm @ 343:d5240792be51

BUGFIX Altimeter random value (SAFE_2BYTE_COPY was not bank safe).
author JeanDo
date Sat, 21 May 2011 14:38:56 +0200
parents 2144f19fa1eb
children 797e2ac42d24
line wrap: on
line diff
--- a/code_part1/OSTC_code_asm_part1/isr.asm	Fri May 20 01:34:59 2011 +0200
+++ b/code_part1/OSTC_code_asm_part1/isr.asm	Sat May 21 14:38:56 2011 +0200
@@ -33,15 +33,17 @@
 ; Because the ISR can happend at any time, the read should be redone if bytes
 ; changed inbetween.
 ;
-; NOTE: Destination might be in any bank, so be BANK SAFE on b
-
-SAFE_2BYTE_COPY MACRO  a, b
+; Trashes: WREG and TABLAT
+; NOTE: Destination might be in any bank, so be BANK SAFE.
+;
+SAFE_2BYTE_COPY MACRO  from, to
         local   retry
 retry:
-        movf    a+1,W                   ; High byte in W, (CURRENT BANK ONLY)
-        movff   WREG,b+1                ; and destination.
-        movff   a,b                     ; Copy low byte.
-        xorwf   a+1,W                   ; High byte changed ??? (CURRENT BANK ONLY)
+        movff   from+1,WREG             ; High byte in W.
+        movff   WREG,to+1               ; and destination.
+        movff   from+0,to+0             ; Copy low byte.
+        movff   from+1,TABLAT           ; another bank-safe read.
+        xorwf   TABLAT,W                ; High byte changed ?
         bnz     retry
         ENDM