MCODE question  C=C1 MS sets carry in MLDL but not in SDK41 Message #1 Posted by PeterP on 29 Apr 2008, 3:36 p.m.
To the MCODE gurus
There seems to be an interesting discrepancy between the behavior of MCODE in the 41 (currently using a HEPAX) and in SDK41. Given that the SDK41 uses the original roms, this surprised me.
Even more surprised am I that the instruction C=C1 MS can create a carry with a very benign positive number in C (MS=0). The code below runs as shown in SDK41 and produces for 100 in xreg the correct value of 71. However when run within an MLDL it produces 29 as the ?NCXQ in line x11F and x124 are not run. If I insert a NOP infront of them the code runs in the MLDL as well, producing the correct result.
Please see the code snippet below (the code does not do anything useful, its a preamble to a PrimeTwin generator, my usual way of learning a new language). Any thoughts with regards to
 How C=C1 for a benign positive number can set the carry
 Difference between SDK41 and MLDL
would be much appreciated.
Thanks so much !
Cheers
Peter
;calculate startvalue for search for primtwins
;given a number in X, startvalue = 30*Int((X+19)/30) 19
;implemented as (X+19) (X+19)Mod30 19
Add HexCode Command Comment
x107 2A0 SetDec
x108 1A0 A=B=C=0
x109 35C R=12 ;load 19 into C
x10A 050 LD@R 1
x10B 250 LD@R 9
x10C 226 C=C+1 S&X
x10D 070 N=C All ;save for later use
x10E 10E A=C All ;prepare regs for AD2_10
x10F 0F8 Read 3(x)
x110 01D060 ?NCXQ [AD2_10] ;this one works fine
x112 10E A=C All ;A=X+19
x113 158 M=C All ;save in M for later
x114 04E C=0 All ;Load 30 into C to prep for [MOD10]
x115 35C R=12
x116 0D0 LD@R 3
x117 226 C=C+1 S&X
x118 171064 ?NCXQ [MOD10] ;A Mod C
x11A 0EE B<>C ;prep for subtraction via AD2_10
x11B 198 C=M All ;recall X+19
x11C 10E A=C All
x11D 0CE C=B All ;(X+19) Mod 30
x11E 2BE C=C1 MS ;This should simply make it negative. But it sets Carry!!
x11F 01D060 ?NCXQ [AD2_10] ;this only works if I have a NOP in front to clear carry when run in MLDL
;it calcs (X+19) (X+19)Mod30
x121 10E A=C All ;prep to subtract 19
x122 0B0 C=N All ;recall 19 from N
x123 2BE C=C1 ;same problem it sets carry when run in MLDL
x124 01D060 ?NCXQ [AD2_10]
x126 0E8 WRIT 3(x) ;save result to x
x127 3E0 RTN
