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 982763f4..36e76e04 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index ba94403e..5e8ed0d7 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ 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