mirror of
https://github.com/byteworksinc/ORCALib.git
synced 2024-11-19 08:31:26 +00:00
6bf27c6743
The new m16.int64 file contains a new "negate8" macro (for 64-bit negation), as well as an improved version of "ph8". These have been added to the individual *.macros files, but if those are regenerated, m16.int64 should be used as an input to macgen ahead of m16.ORCA (which contains the original version of ph8).
82 lines
1011 B
Plaintext
82 lines
1011 B
Plaintext
;
|
|
; New and improved macros for operations on 64-bit integers
|
|
;
|
|
|
|
; Negate a 64-bit value (DP, absolute, or absolute long)
|
|
macro
|
|
&l negate8 &n1
|
|
&l ~setm
|
|
sec
|
|
ldy #0
|
|
tya
|
|
sbc &n1
|
|
sta &n1
|
|
tya
|
|
sbc &n1+2
|
|
sta &n1+2
|
|
tya
|
|
sbc &n1+4
|
|
sta &n1+4
|
|
tya
|
|
sbc &n1+6
|
|
sta &n1+6
|
|
~restm
|
|
mend
|
|
|
|
|
|
; Improved ph8 macro:
|
|
; - Generates more effecient code for constants
|
|
; - Supports "ph8 <dp" to get better code using pei
|
|
macro
|
|
&l ph8 &n1
|
|
lclc &c
|
|
&l anop
|
|
&c amid &n1,1,1
|
|
aif s:longa=1,.a
|
|
rep #%00100000
|
|
.a
|
|
aif "&c"="#",.d
|
|
aif "&c"="[",.b
|
|
aif "&c"<>"{",.c
|
|
&c amid &n1,l:&n1,1
|
|
aif "&c"<>"}",.g
|
|
&n1 amid &n1,2,l:&n1-2
|
|
&n1 setc (&n1)
|
|
.b
|
|
ldy #6
|
|
~&SYSCNT lda &n1,y
|
|
pha
|
|
dey
|
|
dey
|
|
bpl ~&SYSCNT
|
|
ago .e
|
|
.c
|
|
aif "&c"<>"<",.c1
|
|
pei &n1+6
|
|
pei &n1+4
|
|
pei &n1+2
|
|
pei &n1
|
|
ago .e
|
|
.c1
|
|
ldx #6
|
|
~&SYSCNT lda &n1,x
|
|
pha
|
|
dex
|
|
dex
|
|
bpl ~&SYSCNT
|
|
ago .e
|
|
.d
|
|
&n1 amid &n1,2,l:&n1-1
|
|
pea +(&n1)|-48
|
|
pea +(&n1)|-32
|
|
pea +(&n1)|-16
|
|
pea &n1
|
|
.e
|
|
aif s:longa=1,.f
|
|
sep #%00100000
|
|
.f
|
|
mexit
|
|
.g
|
|
mnote "Missing closing '}'",16
|
|
mend
|