From e2f8f7cb0e2f37fd288b7bec9f44232ca5524310 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 12 Oct 2017 17:28:59 +0200 Subject: [PATCH] Kernel 0.9.1 : STDLIB : AToF, StrToF (wip), MACROS CLeanup, code Reorg STDIO/STDLIB --- .Docs/KERNEL.md | 84 ++++----- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes A2osX.S.QC.txt | 3 +- BIN/EDIT.S.BUF.txt | 3 +- BIN/EDIT.S.SCRN.txt | 3 +- INC/MACROS.I.txt | 73 ++------ LIB/LIBBLKDEV.S.txt | 3 +- LIB/LIBTCPIP.S.txt | 6 +- SBIN/SHELL.S.CMD.txt | 2 +- SYS/KERNEL.S.FIO.txt | 5 +- SYS/KERNEL.S.STDIO.txt | 71 +++++++- SYS/KERNEL.S.STDLIB.txt | 367 ++++++++++++++++++++++----------------- SYS/KM.NSC.S.txt | 3 +- X.PRINTF.S.txt | 7 +- 15 files changed, 353 insertions(+), 277 deletions(-) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 4a6cb571..05fe1ddf 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -568,12 +568,53 @@ FPrintF.YA : + %011s : 'ABCDEFGH000' + %2f : '3.14' +# StrToF +Convert String to 40 bits Float + +## In: ++ PUSHW PTR to EndPtr ++ PUSHW Source String (C-Sring) ++ PUSHW PTR to target buffer (5 bytes) + +## Out: + # AToF Convert String to 40 bits Float ## In: -+ PUSHW PTR to target buffer (5 Bytes) + PUSHW Source String (C-Sring) ++ PUSHW PTR to target buffer (5 Bytes) + +## Out: + +# StrToL +Convert String to 32 bits int + +## In: ++ PUSHB Base ++ PUSHW PTR to EndPtr ++ PUSHW Source String (C-Sring) ++ PUSHW PTR to target buffer DWORD + +## Out: + +# StrToUL +Convert String to 32 bits unsigned int + +## In: ++ PUSHB Base ++ PUSHW PTR to EndPtr ++ PUSHW Source String (C-Sring) ++ PUSHW PTR to target buffer DWORD + +## Out: + +# AToL +Convert String to 32 bits int + +## In: ++ PUSHW Source String (C-Sring) ++ PUSHW PTR to target buffer DWORD ## Out: @@ -586,47 +627,6 @@ Convert String to 16 bits int ## Out: + Y,A = Int -# AToL -Convert String to 32 bits int - -## In: -+ PUSHW PTR to target buffer DWORD -+ PUSHW Source String (C-Sring) - -## Out: - -# StrToF -Convert String to 40 bits Float - -## In: -+ PUSHW PTR to target buffer FLOAT (5 bytes) -+ PUSHW PTR to EndPtr -+ PUSHW Source String (C-Sring) - -## Out: - -# StrToL -Convert String to 32 bits int - -## In: -+ PUSHB Base -+ PUSHW PTR to target buffer DWORD -+ PUSHW PTR to EndPtr -+ PUSHW Source String (C-Sring) - -## Out: - -# StrToUL -Convert String to 32 bits unsigned int - -## In: -+ PUSHB Base -+ PUSHW PTR to target buffer DWORD -+ PUSHW PTR to EndPtr -+ PUSHW Source String (C-Sring) - -## Out: - # RealPath.YA Return the canonicalized absolute pathname diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 982763f478ea623832d761faa73096e51e4f6f37..36e76e0438d79bc5e5c4dd0b71bfe54bc19245ba 100644 GIT binary patch delta 5371 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 delta 6231 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 I{;2=|0KLjU*8l(j diff --git a/A2osX.S.QC.txt b/A2osX.S.QC.txt index 72e2a2d6..bc4707bb 100644 --- a/A2osX.S.QC.txt +++ b/A2osX.S.QC.txt @@ -127,7 +127,8 @@ A2osX.QC.KLoad >LDAXI MSG.KLOAD .9 rts *-------------------------------------- A2osX.QC.PrintAX - >STAX TmpPtr1 + sta TmpPtr1 + stx TmpPtr1+1 lda (TmpPtr1) tax beq .9 diff --git a/BIN/EDIT.S.BUF.txt b/BIN/EDIT.S.BUF.txt index 69b8d13f..3dd5d9a2 100644 --- a/BIN/EDIT.S.BUF.txt +++ b/BIN/EDIT.S.BUF.txt @@ -366,7 +366,8 @@ BUF.GetLine ldy #FileY+1 dey lda (pData),y -BUF.GetLineAX >STAX BUF.TmpLine1 +BUF.GetLineAX sta BUF.TmpLine1 + stx BUF.TmpLine1+1 stz BUF.LOffset stz BUF.LOffset+1 diff --git a/BIN/EDIT.S.SCRN.txt b/BIN/EDIT.S.SCRN.txt index aaff8faa..6647040c 100644 --- a/BIN/EDIT.S.SCRN.txt +++ b/BIN/EDIT.S.SCRN.txt @@ -76,7 +76,8 @@ SCRN.UpdateMain ldy #ScreenY lda (pData),y sta TmpCount -.1 >LDAX TmpIndex +.1 lda TmpIndex + ldx TmpIndex+1 jsr BUF.GetLineAX Y = line length bcs .5 diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index 8136ab18..71ee5ecc 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -219,83 +219,61 @@ AUTO 6 .EM *-------------------------------------- .MA PUSHYA - dec pStack - sta (pStack) + >PUSHA tya - dec pStack - sta (pStack) + >PUSHA .EM *-------------------------------------- .MA PULLYA - lda (pStack) - inc pStack + >PULLA tay - lda (pStack) - inc pStack + >PULLA .EM *-------------------------------------- .MA PUSHBI - dec pStack lda #]1 - sta (pStack) + >PUSHA .EM *-------------------------------------- .MA PUSHB .DO ]#=2 - dec pStack lda ]1,]2 - sta (pStack) + >PUSHA .ELSE - dec pStack lda ]1 - sta (pStack) + >PUSHA .FIN .EM *-------------------------------------- .MA PULLB .DO ]#=2 - lda (pStack) + >PULLA sta ]1,]2 - inc pStack .ELSE - lda (pStack) + >PULLA sta ]1 - inc pStack .FIN .EM *-------------------------------------- .MA PUSHWI - dec pStack lda /]1 - sta (pStack) - dec pStack + >PUSHA lda #]1 - sta (pStack) + >PUSHA .EM *-------------------------------------- .MA PUSHW - dec pStack lda ]1+1 - sta (pStack) - dec pStack + >PUSHA lda ]1 - sta (pStack) + >PUSHA .EM *-------------------------------------- .MA PULLW - lda (pStack) + >PULLA sta ]1 - inc pStack - lda (pStack) + >PULLA sta ]1+1 - inc pStack - .EM -*-------------------------------------- - .MA POP - lda pStack - clc - adc ]1 - sta pStack .EM *-------------------------------------- * General WORD Manipulation Macros @@ -319,16 +297,6 @@ AUTO 6 ldy ]1 .FIN .EM -*-------------------------------------- - .MA LDAX - .DO ]#=2 - ldx ]1+1,]2 - lda ]1,]2 - .ELSE - ldx ]1+1 - lda ]1 - .FIN - .EM *-------------------------------------- .MA STYA .DO ]#=2 @@ -340,17 +308,6 @@ AUTO 6 sty ]1 .FIN .EM -*-------------------------------------- - .MA STAX - .DO ]#=2 - sta ]1+1,]2 - txa - sta ]1,]2 - .ELSE - stx ]1+1 - sta ]1 - .FIN - .EM *-------------------------------------- * General Strings Macros *-------------------------------------- diff --git a/LIB/LIBBLKDEV.S.txt b/LIB/LIBBLKDEV.S.txt index ccce7940..fc96cf32 100644 --- a/LIB/LIBBLKDEV.S.txt +++ b/LIB/LIBBLKDEV.S.txt @@ -214,7 +214,8 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf * BitMap Blocks : 0=Used 1=free - >LDAX VolDirHdr.TB + lda VolDirHdr.TB + ldx VolDirHdr.TB+1 jsr GetProDOSCatSizeAX X=blk used for boot/dir/bitmap lda VolDirHdr.TB diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index a79230c7..1abd9cb8 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -196,10 +196,12 @@ GetDynPort inc DYNPORT.LAST bcs .1 >LDAXI K.DYNPORT.START - >STAX DYNPORT.LAST + sta DYNPORT.LAST + stx DYNPORT.LAST+1 rts CC -.1 >LDAX DYNPORT.LAST +.1 lda DYNPORT.LAST + ldx DYNPORT.LAST+1 clc rts *-------------------------------------- diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index 31c4f4ea..2b9417e9 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -567,8 +567,8 @@ Cmd.Exec.READ lda (ZPPtr2) Cmd.Exec.SLEEP lda (ZPPtr2) beq .9 - >PUSHEA.G Sleep >PUSHW ZPPtr2 + >PUSHEA.G Sleep >SYSCALL AToL bcs .9 diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index c691fb1a..992bf875 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -126,7 +126,10 @@ K.SaveFile jsr K.FOpen rts .9 pha - >POP 4 Discard SrcPtr & SrcLen + lda pStack Discard SrcPtr & SrcLen + clc + adc #4 + sta pStack pla sec rts diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 6295d02d..f6884372 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -722,7 +722,7 @@ K.SScanF.IncPtr1 * ## Out: * CC : success * CS : error code from Output -* Specifiers : +* Specifiers : * %b : pull 1 byte to Print BIN * %B : pull 2 bytes to Print BIN * %d : pull 1 byte unsigned DEC 0..255 @@ -746,7 +746,7 @@ K.SScanF.IncPtr1 * \r : Print 'CR' ($0D,13) * \\\\ : Print \ * \% : Print % -* Modifiers for len and padding : +* Modifiers for len and padding : * %d : '9' '12' * %2d : ' 9' '12' * %02d : '09' '12' @@ -754,10 +754,12 @@ K.SScanF.IncPtr1 * %011s : 'ABCDEFGH000' * %2f : '3.14' *\-------------------------------------- -K.SPrintF.YA >STYA ZPPtr1 +K.SPrintF.YA +* >STYA ZPPtr1 * >PULLW Printf.Cout.Ptr+1 -K.FPrintF.YA >STYA ZPPtr1 +K.FPrintF.YA +* >STYA ZPPtr1 K.PrintF.YA >STYA ZPPtr1 @@ -897,8 +899,9 @@ PrintF.U.1 stz SIGN jsr HEX2DEC jmp PrintDEC *-------------------------------------- -PrintF.E >PULLW ZPPtr2 - rts +PrintF.E +* >PULLW ZPPtr2 +* rts *-------------------------------------- PrintF.F >PULLW ZPPtr2 rts @@ -1123,6 +1126,62 @@ SIGN .BS 1 PADLEN .BS 1 PADCHAR .BS 1 *-------------------------------------- +* Convert HEXBUF to ASCBUF decimal padded with 0 +*-------------------------------------- +HEX2DEC ldx #4 + +.1 stz BCDBUF,x Clear all 5 bytes + dex + bpl .1 + + sed switch to BCD mode + + ldx #32 let's roll 32 bits + +.2 asl HEXBUF + rol HEXBUF+1 + rol HEXBUF+2 + rol HEXBUF+3 + + ldy #4 + +.3 lda BCDBUF,y + adc BCDBUF,y + sta BCDBUF,y + dey + bpl .3 + + dex + bne .2 + + cld + + ldy #4 + ldx #9 + +.4 lda BCDBUF,y + pha + and #$0F + ora #$30 + sta ASCBUF,x + dex + pla + lsr + lsr + lsr + lsr + ora #$30 + sta ASCBUF,x + dey + dex + bpl .4 + + rts +*-------------------------------------- +HEXBUF .BS 4 +BCDBUF .BS 5 5, enough to handle 10 digits (32bits) +ASCBUF .BS 12 LEN + sign + 10 digits ($FFFFFFFF=4.294.967.295) +*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.STDIO LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 05b93800..d706ca05 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -4,14 +4,158 @@ LOMEM $A00 INC 1 AUTO 6 */-------------------------------------- +* # StrToF +* Convert String to 40 bits Float +* ## In: +* PUSHW PTR to EndPtr +* PUSHW Source String (C-Sring) +* PUSHW PTR to target buffer (5 bytes) +* ## Out: +*\-------------------------------------- +K.StrToF jsr PullPtr1Ptr2Ptr3 + jsr K.AToF.I + bcc K.StrToUL.Exit + +.9 rts +*/-------------------------------------- * # AToF * Convert String to 40 bits Float * ## In: -* PUSHW PTR to target buffer (5 Bytes) * PUSHW Source String (C-Sring) +* PUSHW PTR to target buffer (5 Bytes) * ## Out: *\-------------------------------------- -K.AToF +K.AToF jsr PullPtr1Ptr2 C-String in Ptr2, Dst buffer in Ptr1 + +K.AToF.I jsr MANTISSA.Clear + + ldy #$ff + +.1 iny + lda (ZPPtr2),y + beq .8 + cmp #' ' + beq .1 + +.2 iny + lda (ZPPtr2),y + beq .8 + + jsr STDIO.IsDigit + bcc .7 + + cmp #'+' + beq .3 + cmp #'-' + bne .4 + +.3 jsr K.AToF.CheckSign + bcs .9 + bra .1 + +.4 cmp #'.' + bne .5 + ldx INEXP Decimal point not allowed in EXP + bne .9 + ldx bDECPOINT ....and only one! + bne .9 + inc bDECPOINT + bra .1 + +.5 cmp #'E' + beq .6 + + cmp #'e' + bne .8 +.6 + +.7 + +.8 clc + +.9 lda #SYSMGR.ERRSYN + sec + rts +*-------------------------------------- +K.AToF.CheckSign + ldy INEXP Get MANTSIGN or EXPSIGN + ldx MANTSIGN,y + bne .9 Already set, error + + cmp #'-' + bne .1 + lda #$ff +.1 sta MANTSIGN,y set '+' of $ff to test with BIT + + clc + rts + +.9 sec + rts +*/-------------------------------------- +* # StrToL +* Convert String to 32 bits int +* ## In: +* PUSHB Base +* PUSHW PTR to EndPtr +* PUSHW Source String (C-Sring) +* PUSHW PTR to target buffer DWORD +* ## Out: +*\-------------------------------------- +K.StrToL sec Signed + .HS 90 BCC +*/-------------------------------------- +* # StrToUL +* Convert String to 32 bits unsigned int +* ## In: +* PUSHB Base +* PUSHW PTR to EndPtr +* PUSHW Source String (C-Sring) +* PUSHW PTR to target buffer DWORD +* ## Out: +*\-------------------------------------- +K.StrToUL clc Unsigned + jsr PullPtr1Ptr2Ptr3 + >PULLA Base + jsr K.AToL.I + bcs K.StrToUL.rts + +* clc + +K.StrToUL.Exit adc ZPPtr2 + sta ZPPtr3 + lda #0 + adc ZPPtr2+1 + sta ZPPtr3+1 + +K.StrToUL.rts rts +*/-------------------------------------- +* # AToL +* Convert String to 32 bits int +* ## In: +* PUSHW Source String (C-Sring) +* PUSHW PTR to target buffer DWORD +* ## Out: +*\-------------------------------------- +K.AToL jsr PullPtr1Ptr2 C-String in Ptr2, Dst buffer in Ptr1 + + lda #10 base 10 + sec signed + +K.AToL.I jsr STDLIB.Dec2Hex + bcs .9 + phy Save Count processed + ldy #3 + +.3 lda MANTISSA,y + sta (ZPPtr1),y + dey + bpl .3 + pla + +* clc + +.9 rts */-------------------------------------- * # AToI.YA * Convert String to 16 bits int @@ -20,201 +164,104 @@ K.AToF * ## Out: * Y,A = Int *\-------------------------------------- -K.AToI.YA >STYA ZPPtr1 +K.AToI.YA >STYA ZPPtr2 lda #10 base 10 sec signed jsr STDLIB.Dec2Hex bcs .9 - >LDYA HEXBUF + >LDYA MANTISSA .9 rts -*/-------------------------------------- -* # AToL -* Convert String to 32 bits int -* ## In: -* PUSHW PTR to target buffer DWORD -* PUSHW Source String (C-Sring) -* ## Out: -*\-------------------------------------- -K.AToL jsr PullPtr1Ptr2 C-String in Ptr1, Dst buffer in Ptr2 - - lda #10 base 10 - sec signed - - jsr STDLIB.Dec2Hex - bcs .9 - - ldy #3 - -.3 lda HEXBUF,y - sta (ZPPtr2),y - dey - bpl .3 - -.9 rts -*/-------------------------------------- -* # StrToF -* Convert String to 40 bits Float -* ## In: -* PUSHW PTR to target buffer FLOAT (5 bytes) -* PUSHW PTR to EndPtr -* PUSHW Source String (C-Sring) -* ## Out: -*\-------------------------------------- -K.StrToF -*/-------------------------------------- -* # StrToL -* Convert String to 32 bits int -* ## In: -* PUSHB Base -* PUSHW PTR to target buffer DWORD -* PUSHW PTR to EndPtr -* PUSHW Source String (C-Sring) -* ## Out: -*\-------------------------------------- -K.StrToL -*/-------------------------------------- -* # StrToUL -* Convert String to 32 bits unsigned int -* ## In: -* PUSHB Base -* PUSHW PTR to target buffer DWORD -* PUSHW PTR to EndPtr -* PUSHW Source String (C-Sring) -* ## Out: -*\-------------------------------------- -K.StrToUL *-------------------------------------- -* Convert ZPPtr1 to HEXBUF +* Convert ZPPtr1 to MANTISSA *-------------------------------------- -STDLIB.Dec2Hex stz HEXBUF - stz HEXBUF+1 - stz HEXBUF+2 - stz HEXBUF+3 +STDLIB.Dec2Hex jsr MANTISSA.Clear ldy #$ff .1 iny - lda (ZPPtr1),y + lda (ZPPtr2),y beq .8 jsr STDIO.IsDigit bcs .8 - lda HEXBUF+3 save HEXBUF for 4+1 - pha - lda HEXBUF+2 - pha - lda HEXBUF+1 - pha - lda HEXBUF - pha + jsr MANTISSA.T10 + bcs .9 - jsr HEXBUF.ROL HEXBUF * 2 -> HEXBUF - bcs .9 overflow!!! - - jsr HEXBUF.ROL HEXBUF * 4 -> HEXBUF - bcs .9 overflow!!! - -* clc - pla HEXBUF * 4 + HEXBUF -> HEXBUF - adc HEXBUF - sta HEXBUF - pla - adc HEXBUF+1 - sta HEXBUF+1 - pla - adc HEXBUF+2 - sta HEXBUF+2 - pla - adc HEXBUF+3 - sta HEXBUF+3 - bcs .99 overflow!!! - - jsr HEXBUF.ROL HEXBUF * 10 -> HEXBUF - bcs .99 overflow!!! - - lda (ZPPtr1),y + lda (ZPPtr2),y and #$0F - adc HEXBUF - sta HEXBUF + adc MANTISSA + sta MANTISSA bcc .1 - inc HEXBUF+1 + inc MANTISSA+1 bne .1 - inc HEXBUF+2 + inc MANTISSA+2 bne .1 - inc HEXBUF+3 + inc MANTISSA+3 bne .1 overflow!!! +* sec + rts -.9 pla discard saved HEXBUF +.8 clc +.9 rts +*-------------------------------------- +MANTISSA.T10 ldx #3 + +.1 lda MANTISSA,x save MANTISSA for 4+1 + pha + dex + bpl .1 + + jsr MANTISSA.ROL MANTISSA * 2 -> MANTISSA + bcs .9 overflow!!! + + jsr MANTISSA.ROL MANTISSA * 4 -> MANTISSA + bcs .9 overflow!!! + + ldx #0 + ldy #4 + +* clc + +.2 pla MANTISSA * 4 + MANTISSA -> MANTISSA + adc MANTISSA,x + sta MANTISSA,x + inx + dey + bne .2 + + bcs .99 overflow!!! + + jsr MANTISSA.ROL MANTISSA * 10 -> MANTISSA + bcs .99 overflow!!! + +.9 pla discard saved MANTISSA pla pla pla .99 rts - -.8 clc - rts *-------------------------------------- -HEXBUF.ROL asl HEXBUF - rol HEXBUF+1 - rol HEXBUF+2 - rol HEXBUF+3 +MANTISSA.ROL asl MANTISSA + rol MANTISSA+1 + rol MANTISSA+2 + rol MANTISSA+3 rts *-------------------------------------- -* Convert HEXBUF to ASCBUF decimal padded with 0 -*-------------------------------------- -HEX2DEC ldx #4 - -.1 stz BCDBUF,x Clear all 5 bytes +MANTISSA.Clear ldx #8 +.1 stz EXPSIGN,x dex bpl .1 - - sed switch to BCD mode - - ldx #32 let's roll 32 bits - -.2 jsr HEXBUF.ROL - - ldy #4 - -.3 lda BCDBUF,y - adc BCDBUF,y - sta BCDBUF,y - dey - bpl .3 - - dex - bne .2 - - cld - - ldy #4 - ldx #9 - -.4 lda BCDBUF,y - pha - and #$0F - ora #$30 - sta ASCBUF,x - dex - pla - lsr - lsr - lsr - lsr - ora #$30 - sta ASCBUF,x - dey - dex - bpl .4 - rts *-------------------------------------- -HEXBUF .BS 4 32 bits max -BCDBUF .BS 5 5, enough to handle 10 digits (32bits) -ASCBUF .BS 12 LEN + sign + 10 digits ($FFFFFFFF=4.294.967.295) +bDECPOINT .BS 1 +INEXP .BS 1 +MANTSIGN .BS 1 +EXPSIGN .BS 1 +EXP .BS 1 +MANTISSA .BS 4 32 bits max */-------------------------------------- * # RealPath.YA * Return the canonicalized absolute pathname diff --git a/SYS/KM.NSC.S.txt b/SYS/KM.NSC.S.txt index baffc757..ef53ef11 100644 --- a/SYS/KM.NSC.S.txt +++ b/SYS/KM.NSC.S.txt @@ -183,7 +183,8 @@ NSCDRV.RELOC .DA NSCDRV.R1+1 .DA NSCDRV.R9+1 .DA 0 *-------------------------------------- -NSC.Print >STAX TmpPtr1 +NSC.Print sta TmpPtr1 + stx TmpPtr1+1 ldy #0 .1 lda (TmpPtr1),y diff --git a/X.PRINTF.S.txt b/X.PRINTF.S.txt index 7fa7088d..1162110b 100644 --- a/X.PRINTF.S.txt +++ b/X.PRINTF.S.txt @@ -5,7 +5,8 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -PrintFAX >STAX PrintFAX.Next+1 +PrintFAX sta PrintFAX.Next+1 + stx PrintFAX.Next+2 pla sta PrintFAX.99+1 pla @@ -109,7 +110,9 @@ PrintFAX.D ldx #0 .HS D0 bne PrintFAX.DD plx pla - >STAX X.HexBuffer + sta X.HexBuffer + stx X.HexBuffer+1 + stz X.BCDBuffer stz X.BCDBuffer+1 stz X.BCDBuffer+2