diff --git a/int64.asm b/int64.asm index a1caa1b..162ad53 100644 --- a/int64.asm +++ b/int64.asm @@ -558,7 +558,7 @@ exponent equ mantissa+8 biased exponent and sign bit ldy #0 default sign bit is 0 (positive) lda mantissa+6 if mantissa is negative then bpl lb0 - sub8 #0,mantissa,mantissa negate it + negate8 mantissa negate it ldy #$8000 sign bit is 1 (negative) lb0 tya set sign diff --git a/int64.macros b/int64.macros index 80b7917..ea1d37e 100644 --- a/int64.macros +++ b/int64.macros @@ -1,4 +1,23 @@ 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 + macro &l move4 &m1,&m2 lclb &yistwo &l ~setm @@ -121,121 +140,3 @@ .d sta 2+&op mend - macro -&l sub8 &n1,&n2,&n3 -&l ~setm - ph8 &n1 - ph8 &n2 - jsl ~sub8 - aif c:&n3,.a - pl8 &n1 - ago .b -.a - pl8 &n3 -.b - ~restm - mend - 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 - ldx #6 -~&SYSCNT lda &n1,x - pha - dex - dex - bpl ~&SYSCNT - ago .e -.d -&n1 amid &n1,2,l:&n1-1 - bra ~b&SYSCNT -~a&SYSCNT dc i8"&n1" -~b&SYSCNT ldx #6 -~c&SYSCNT lda ~a&SYSCNT,x - pha - dex - dex - bpl ~c&SYSCNT -.e - aif s:longa=1,.f - sep #%00100000 -.f - mexit -.g - mnote "Missing closing '}'",16 - mend - macro -&l pl8 &n1 - lclc &c -&l anop - aif s:longa=1,.a - rep #%00100000 -.a -&c amid &n1,1,1 - aif "&c"<>"{",.b -&c amid &n1,l:&n1,1 - aif "&c"<>"}",.f -&n1 amid &n1,2,l:&n1-2 - pla - sta (&n1) - ldy #2 - pla - sta (&n1),y - ldy #4 - pla - sta (&n1),y - ldy #6 - pla - sta (&n1),y - ago .d -.b - aif "&c"<>"[",.c - pla - sta &n1 - ldy #2 - pla - sta &n1,y - ldy #4 - pla - sta &n1,y - ldy #6 - pla - sta &n1,y - ago .d -.c - pla - sta &n1 - pla - sta &n1+2 - pla - sta &n1+4 - pla - sta &n1+6 -.d - aif s:longa=1,.e - sep #%00100000 -.e - mexit -.f - mnote "Missing closing '}'",16 - mend diff --git a/m16.int64 b/m16.int64 new file mode 100644 index 0000000..c4dc0c8 --- /dev/null +++ b/m16.int64 @@ -0,0 +1,81 @@ +; +; 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 "{",.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 diff --git a/stdio.asm b/stdio.asm index a7f8e48..a36157b 100644 --- a/stdio.asm +++ b/stdio.asm @@ -4018,7 +4018,7 @@ rn3 inc argp dec strLength -lb1 ph8 llValue divide by 10 +lb1 ph8 "{",.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 MACRO &lab cstr &s &lab dc c"&s",i1'0' @@ -740,69 +811,6 @@ dc i4'&p' mend macro -&l sub8 &n1,&n2,&n3 -&l ~setm - ph8 &n1 - ph8 &n2 - jsl ~SUB8 - aif c:&n3,.a - pl8 &n1 - ago .b -.a - pl8 &n3 -.b - ~restm - mend - 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 - ldx #6 -~&SYSCNT lda &n1,x - pha - dex - dex - bpl ~&SYSCNT - ago .e -.d -&n1 amid &n1,2,l:&n1-1 - bra ~b&SYSCNT -~a&SYSCNT dc i8"&n1" -~b&SYSCNT ldx #6 -~c&SYSCNT lda ~a&SYSCNT,x - pha - dex - dex - bpl ~c&SYSCNT -.e - aif s:longa=1,.f - sep #%00100000 -.f - mexit -.g - mnote "Missing closing '}'",16 - mend - macro &l pl8 &n1 lclc &c &l anop diff --git a/stdlib.asm b/stdlib.asm index 9b260e1..ebca178 100644 --- a/stdlib.asm +++ b/stdlib.asm @@ -518,7 +518,7 @@ retptr equ 1 stx retptr stz retptr+2 - ph8 i + ph8 "{",.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 MACRO &LAB MOVE4 &F,&T &LAB ~SETM @@ -586,55 +657,6 @@ ~RESTM MEND 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 - ldx #6 -~&SYSCNT lda &n1,x - pha - dex - dex - bpl ~&SYSCNT - ago .e -.d -&n1 amid &n1,2,l:&n1-1 - bra ~b&SYSCNT -~a&SYSCNT dc i8"&n1" -~b&SYSCNT ldx #6 -~c&SYSCNT lda ~a&SYSCNT,x - pha - dex - dex - bpl ~c&SYSCNT -.e - aif s:longa=1,.f - sep #%00100000 -.f - mexit -.g - mnote "Missing closing '}'",16 - mend - macro &l pl8 &n1 lclc &c &l anop @@ -690,20 +712,6 @@ mnote "Missing closing '}'",16 mend macro -&l sub8 &n1,&n2,&n3 -&l ~setm - ph8 &n1 - ph8 &n2 - jsl ~SUB8 - aif c:&n3,.a - pl8 &n1 - ago .b -.a - pl8 &n3 -.b - ~restm - mend - macro &l jge &bp &l blt *+5 brl &bp