From 5dff2a44599596c0c71b76cb45c2e81a9f18363c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 13 Oct 2017 17:28:09 +0200 Subject: [PATCH] Kernel 0.9.1 : STDIO, saved many bytes in PrintF --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes SYS/KERNEL.S.STDIO.txt | 246 +++++++++++++++++++-------------------- 3 files changed, 118 insertions(+), 128 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 36e76e0438d79bc5e5c4dd0b71bfe54bc19245ba..e689cf26eb6e6a167d2a2116bc2d4384a11c06c7 100644 GIT binary patch delta 2579 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 diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index f6884372..4400430e 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -657,14 +657,14 @@ K.SScanF jsr PullPtr1Ptr2Ptr3 cmp #'d' BYTE ? bne .3 - stz ASCBUF +* stz ASCBUF .20 lda (ZPPtr1) jsr STDIO.IsDigit bcs .21 phx - inc ASCBUF - ldx ASCBUF - sta ASCBUF,x +* inc ASCBUF +* ldx ASCBUF +* sta ASCBUF,x plx jsr K.SScanF.IncPtr1 bne .20 end of string ? @@ -728,8 +728,8 @@ K.SScanF.IncPtr1 * %d : pull 1 byte unsigned DEC 0..255 * %D : pull 2 bytes unsigned DEC 0..65535 * %u : pull 2 bytes PTR to 4 bytes long unsigned DEC 0..4294967295 -* %e : pull 2 bytes PTR to 6 Bytes Real +1.23456789e+12 -* %f : pull 2 bytes PTR to 6 Bytes Real 3.1415 +* %e : pull 2 bytes PTR to 5 Bytes float +1.23456789e+12 +* %f : pull 2 bytes PTR to 5 Bytes float 3.1415 * %h : pull 1 byte to Print HEX * %H : pull 2 bytes to Print HEX * %i : pull 1 byte to Print signed DEC -128..127 @@ -878,27 +878,66 @@ PrintF.B.1 ldx #8 bne .1 rts *-------------------------------------- -PrintF.D >PULLB HEXBUF +PrintF.I sec signed short + .HS 90 BCC +PrintF.D clc unsigned short (BYTE) + ldx #0 one byte + + >PULLB HEXBUF stz HEXBUF+1 bra PrintF.DD.1 -PrintF.DD >PULLW HEXBUF +PrintF.II sec signed int + .HS 90 BCC +PrintF.DD clc unsigned int (WORD) + ldx #1 two bytes + + >PULLW HEXBUF + PrintF.DD.1 stz HEXBUF+2 stz HEXBUF+3 bra PrintF.U.1 + +PrintF.L sec signed long + .HS 90 BCC +PrintF.U clc unsigned long (DWORD) + ldx #3 4 bytes -PrintF.U >PULLW ZPPtr2 + >PULLW ZPPtr2 + ldy #3 .1 lda (ZPPtr2),y sta HEXBUF,y dey bpl .1 + +PrintF.U.1 bcc .8 unsigned, nothing to check -PrintF.U.1 stz SIGN - jsr HEX2DEC - jmp PrintDEC -*-------------------------------------- + + lda HEXBUF,x get sign + bpl .8 + +* sec + + ldy #0 + +.1 lda HEXBUF,y two's complement of X bytes + eor #$ff + adc #0 + sta HEXBUF,y + iny + dex + bpl .1 + + sec tell to print a "-" sign.... + +.8 jmp HEX2DEC +*-------------------------------------- +* .HS 9E 6E6B2800 1,000,000,000 +* EXP(8) 1(s) 1significants(31) +* http://apple2.org.za/gswv/a2zine/GS.WorldView/Resources/GS.TECH.INFO/AppleSoft/ +*-------------------------------------- PrintF.E * >PULLW ZPPtr2 * rts @@ -916,94 +955,7 @@ PrintF.H >PULLA PrintF.H.1 pha jsr PrintF.NN.1 pla - jmp PrintF.N.1 -*-------------------------------------- -PrintF.I >PULLB HEXBUF - eor #$ff if positive, it becomes neg so branch if....minus! - clc - bmi .1 - sec - inc 2s complement... - sta HEXBUF - - -.1 stz HEXBUF+1 - bra PrintF.II.1 - -PrintF.II >PULLW HEXBUF A=HI - eor #$ff - clc - bmi PrintF.II.1 - sec - tax - lda HEXBUF - eor #$ff - inc 2s complement... - sta HEXBUF - bne .1 - inx -.1 sta HEXBUF - stx HEXBUF+1 - -PrintF.II.1 stz HEXBUF+2 - stz HEXBUF+3 - bra PrintF.L.1 - -PrintF.L >PULLW ZPPtr2 - ldy #3 - -.1 lda (ZPPtr2),y - sta HEXBUF,y - dey - bpl .1 - - -PrintF.L.1 ror SIGN - jsr HEX2DEC -*-------------------------------------- -PRINTDEC lda PADLEN any Len format ? - beq .1 no - - lda #10 - sec yes, Print only digits starting at pos 10-padlen - sbc PADLEN - -.1 tax x=0 if no padlen, or x=10-padlen - -.2 lda ASCBUF,x - cmp #'0' a zero? - beq .3 - - inc PADLEN found a non zero, Print all digits, even if 0, next time - ldy #'0' - sty PADCHAR - bra .4 - -.3 cpx #9 last digit ? - beq .4 Print always - - ldy PADLEN no pad to fill, do not Print 0 - beq .6 - - lda PADCHAR fill with PADCHAR - -.4 bit SIGN a sign to print before digits ? - bpl .5 - pha yes, save whatever we have to print.... - lda #'-' - jsr Printf.Cout - stz SIGN reset flag for next char... - pla - -.5 jsr Printf.Cout - bcs .9 - -.6 inx - cpx #10 - bne .2 - - clc -.9 rts + bra PrintF.N.1 *-------------------------------------- PrintF.N >PULLA PrintF.N.1 and #$0F @@ -1122,13 +1074,21 @@ STDIO.IsDigit cmp #'0' .1 sec rts *-------------------------------------- -SIGN .BS 1 +STDIO.AT10 +*-------------------------------------- PADLEN .BS 1 PADCHAR .BS 1 *-------------------------------------- +*EXP .BS 1 +HEXBUF .BS 4 +bNeg .BS 1 +BCDBUF .BS 5 5, enough to handle 10 digits (32bits) +*-------------------------------------- * Convert HEXBUF to ASCBUF decimal padded with 0 *-------------------------------------- -HEX2DEC ldx #4 +HEX2DEC ror bNeg + + ldx #4 .1 stz BCDBUF,x Clear all 5 bytes dex @@ -1155,32 +1115,62 @@ HEX2DEC ldx #4 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) + bit bNeg a -sign to print before digits ? + bpl .9 + lda #'-' + jsr Printf.Cout + +.9 lda PADLEN any Len format ? + beq .4 no + + lda #10 + sec yes, Print only digits starting at pos 10-padlen + sbc PADLEN + +.4 tax x=0 if no padlen, or x=10-padlen + +.5 txa X range 0 to 9 + lsr CS if lo nibble (1,3,5,7,9) + tay + + lda BCDBUF,y + + bcs .6 + + lsr + lsr + lsr + lsr + +.6 and #$0F + ora #$30 + + cmp #'0' a zero? + beq .7 + + inc PADLEN found a non zero, Print all digits, even if 0, next time + ldy #'0' + sty PADCHAR + bra .8 + +.7 cpx #9 last digit ? + beq .8 Print always + + ldy PADLEN no pad to fill, do not Print 0 + beq .10 + + lda PADCHAR fill with PADCHAR + +.8 jsr Printf.Cout + bcs .99 + +.10 inx + cpx #10 + bne .5 + + clc +.99 rts *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.STDIO