From 4e5e622903f108d5b78af1367f09dee7e883fb5d Mon Sep 17 00:00:00 2001 From: Stephen Heumann Date: Sun, 2 Apr 2023 16:34:53 -0500 Subject: [PATCH] Do not use FX2X to copy floating-point values. This is gratuitously slow, and may also cause a loss of precision under Golden Gate (depending on the host platform). --- CGC.asm | 28 +++++++++-------- CGC.macros | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 97 insertions(+), 19 deletions(-) diff --git a/CGC.asm b/CGC.asm index 33a2a70..6fbddb7 100644 --- a/CGC.asm +++ b/CGC.asm @@ -9,27 +9,29 @@ **************************************************************** * CnvSX start cg -rec equ 4 record containing values +rec equ 8 record containing values +extptr equ 1 pointer to rec_ext field of rec rec_real equ 0 disp to real (extended) value rec_ext equ 10 disp to extended (SANE) value - tsc set up DP + pha set up DP + pha + tsc phd tcd - ph4 rec push addr of real number - clc push addr of SANE number - lda rec - adc #rec_ext - tax - lda rec+2 - adc #0 - pha - phx - fx2x convert TOS to extended - move4 0,4 return + add4 rec,#rec_ext,extptr copy the number + ldy #8 +lp lda [rec],y + sta [extptr],y + dey + dey + bpl lp + move4 4,8 return pld pla pla + pla + pla rtl end diff --git a/CGC.macros b/CGC.macros index 3c79c79..1b794dd 100644 --- a/CGC.macros +++ b/CGC.macros @@ -175,12 +175,6 @@ sta 2+&op mend MACRO -&LAB FX2X -&LAB PEA $0010 - LDX #$090A - JSL $E10000 - MEND - MACRO &LAB FX2C &LAB PEA $0510 LDX #$090A @@ -435,3 +429,85 @@ .g mnote "Missing closing '}'",16 mend + macro +&l add4 &m1,&m2,&m3 + lclb &yistwo + lclc &c +&l ~setm + aif c:&m3,.a +&c amid "&m2",1,1 + aif "&c"<>"#",.a +&c amid "&m1",1,1 + aif "&c"="{",.a + aif "&c"="[",.a +&c amid "&m2",2,l:&m2-1 + aif &c>=65536,.a + clc + ~lda &m1 + ~op adc,&m2 + ~sta &m1 + bcc ~&SYSCNT + ~op.h inc,&m1 +~&SYSCNT anop + ago .c +.a + aif c:&m3,.b + lclc &m3 +&m3 setc &m1 +.b + clc + ~lda &m1 + ~op adc,&m2 + ~sta &m3 + ~lda.h &m1 + ~op.h adc,&m2 + ~sta.h &m3 +.c + ~restm + mend + macro +&l ~op &opc,&op + lclc &c +&c amid "&op",1,1 + aif "&c"<>"{",.b +&c amid "&op",l:&op,1 + aif "&c"="}",.a + mnote "Missing closing '}'",2 +&op setc &op} +.a +&op amid "&op",2,l:&op-2 +&op setc (&op) +.b +&l &opc &op + mend + macro +&l ~op.h &opc,&op +&l anop + lclc &c +&c amid "&op",1,1 + aif "&c"="[",.b + aif "&c"<>"{",.d +&c amid "&op",l:&op,1 + aif "&c"="}",.a + mnote "Missing closing '}'",2 +&op setc &op} +.a +&op amid "&op",2,l:&op-2 +&op setc (&op) +.b + aif &yistwo,.c +&yistwo setb 1 + ldy #2 +.c +&op setc "&op,y" + &opc &op + mexit +.d + aif "&c"<>"#",.e +&op amid "&op",2,l:&op-1 +&op setc "#^&op" + &opc &op + mexit +.e + &opc 2+&op + mend