From 1eaef2456650b26728d70e120f553238b930f7be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 28 Jul 2019 22:39:30 +0200 Subject: [PATCH] Kernel 0.93+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes DRV/UTHERNET.DRV.S.txt | 14 +- INC/MACROS.I.txt | 8 +- LIB/LIBTCPIP.S.TCP.txt | 50 ++--- SYS/KERNEL.S.ARG.txt | 14 +- SYS/KERNEL.S.BIN.txt | 30 +-- SYS/KERNEL.S.DEF.txt | 2 +- SYS/KERNEL.S.DEV.txt | 2 +- SYS/KERNEL.S.ENV.txt | 8 +- SYS/KERNEL.S.GP.txt | 451 ++++++++++++++++++--------------------- SYS/KERNEL.S.INIT.txt | 8 +- SYS/KERNEL.S.IO.txt | 1 - SYS/KERNEL.S.MATH.txt | 8 +- SYS/KERNEL.S.OSDX.txt | 6 +- SYS/KERNEL.S.PS.txt | 6 +- SYS/KERNEL.S.PWD.txt | 2 +- SYS/KERNEL.S.PWDX.txt | 40 ++-- SYS/KERNEL.S.SHARED.txt | 105 +++++---- SYS/KERNEL.S.SLISTX.txt | 18 +- SYS/KERNEL.S.STDIO.txt | 36 ++-- SYS/KERNEL.S.STDLIB.txt | 4 +- SYS/KERNEL.S.STRING.txt | 6 +- SYS/KERNEL.S.TERM.txt | 6 +- SYS/KERNEL.S.TIME.txt | 22 +- 24 files changed, 421 insertions(+), 426 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 310524fc4de5a9e3621d7a82f13d7ce1ffe25ad2..e1b35b3690db75d757afa8196c73389d2de60cbe 100644 GIT binary patch delta 38075 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

ie*&DEth!HOikLyd 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
Ko^Id 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

)Fk5NX4rgunc<2MpWNQK~ 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 diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index f423adbe..c237094a 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -13,6 +13,7 @@ NEW .INB INC/ETH.I *-------------------------------------- ZPArgPtr .EQ ZPDRV +DEVSLOT0x .EQ ZPDRV+2 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -80,11 +81,10 @@ Dev.Detect >STYA ARGS lda #MLI.E.NODEV sec - rts +.99 rts .3 stx DEVSLOTx0 - lda #A2osX.S.NIC - sta A2osX.S,y + sty DEVSLOT0x lda /PP.REVISION Get Revision# of ths chip... sta PacketPagePTR+1,x @@ -97,7 +97,7 @@ Dev.Detect >STYA ARGS sta DIB+S.DIB.VERSION jsr Dev.ParseArgs - bcs .9 + bcs .99 .8 >PUSHW L.FD.DEV.NAME >PUSHBI 2 @@ -115,7 +115,13 @@ Dev.Detect >STYA ARGS >PUSHW L.FD.DEV.NAME >LDYA L.FD.DEV >SYSCALL MKDEV + bcs .9 + ldx DEVSLOT0x + lda #A2osX.S.NIC + sta A2osX.S,x + +* clc .9 rts *-------------------------------------- Dev.ParseArgs >LDYA ARGS diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index 0342b799..5ec0d47e 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -143,16 +143,16 @@ FPU.TAN .EQ 36 FPU.ATAN .EQ 38 FPU.SETARG .EQ 40 -FPU.SETFAC .EQ 42 +FPU.SETFAC .EQ 42 PrintF FPU.GETFAC .EQ 44 Copy FAC to (FORPNT) FPU.FCOMP .EQ 46 -FPU.LTOF .EQ 48 -FPU.QINT .EQ 50 +FPU.LTOF .EQ 48 Float +FPU.QINT .EQ 50 lrintf FPU.FIN .EQ 52 -FPU.FOUT .EQ 54 +FPU.FOUT .EQ 54 PrintF *-------------------------------------- .MA FPU ldx #FPU.]1 diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 79e34c61..b6c7894a 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -219,17 +219,10 @@ TCP.IN.JMP.ESTBLSH * clc - lda SKT.Cache+S.SOCKET.TCP.INSEQNUM+3 - adc ZPDataInLen - sta SKT.Cache+S.SOCKET.TCP.INSEQNUM+3 - - lda SKT.Cache+S.SOCKET.TCP.INSEQNUM+2 - adc ZPDataInLen+1 - sta SKT.Cache+S.SOCKET.TCP.INSEQNUM+2 - bcc .6 - inc SKT.Cache+S.SOCKET.TCP.INSEQNUM+1 - bne .6 - inc SKT.Cache+S.SOCKET.TCP.INSEQNUM + lda ZPDataInLen + ldy ZPDataInLen+1 + ldx #S.SOCKET.TCP.INSEQNUM + jsr TCP.AddAYToSktCacheAtX .6 jsr SKT.StoreTCB update socket @@ -532,20 +525,12 @@ TCP.OUT lda SKT.Cache+S.SOCKET.TCP.OUTTOSEND+1 bcs .9 - lda SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ+3 - clc - adc ZPDataOutLen - sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ+3 - - lda SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ+2 - adc ZPDataOutLen+1 - sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ+2 - bcc .80 - inc SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ+1 - bne .80 - inc SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ - -.80 jmp SKT.StoreTCB exits with CC + lda ZPDataOutLen + ldy ZPDataOutLen+1 + ldx #S.SOCKET.TCP.OUTNEXTSEQ + jsr TCP.AddAYToSktCacheAtX + + jmp SKT.StoreTCB exits with CC *-------------------------------------- TCP.OUT.SendOptA jsr TCP.SetSocketTCPO @@ -626,6 +611,21 @@ TCP.NewFrame ldx #S.IP.PROTOCOL.TCP clc .9 rts +*-------------------------------------- +TCP.AddAYToSktCacheAtX + clc + adc SKT.Cache+3,x + sta SKT.Cache+3,x + + tya + adc SKT.Cache+2,x + sta SKT.Cache+2,x + bcc .8 + inc SKT.Cache+1,x + bne .8 + inc SKT.Cache,x + +.8 rts *-------------------------------------- .DO IPDEBUG=1 DEBUG.IPID ldy #S.IP.IDENTIFICATION diff --git a/SYS/KERNEL.S.ARG.txt b/SYS/KERNEL.S.ARG.txt index 906ac47a..b935c34f 100644 --- a/SYS/KERNEL.S.ARG.txt +++ b/SYS/KERNEL.S.ARG.txt @@ -27,7 +27,7 @@ K.Args2ArgV jsr K.ExpandStr stz ARG.bInQuote -.1 jsr MEM.GetCharPtr1 +.1 jsr SHARED.GetCharPtr1 beq .8 cmp #C.SPACE @@ -49,17 +49,17 @@ K.Args2ArgV jsr K.ExpandStr inx Found one arg !!! lda #0 set this token End - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 bra .1 -.6 jsr MEM.PutCharPtr2 +.6 jsr SHARED.PutCharPtr2 -.7 jsr MEM.GetCharPtr1 +.7 jsr SHARED.GetCharPtr1 bne .2 inx -.8 jsr MEM.PutCharPtr2 set Argv[x] Ending 0 +.8 jsr SHARED.PutCharPtr2 set Argv[x] Ending 0 sta (ZPPtr2) set Array Ending 0 phx @@ -98,10 +98,10 @@ K.ArgV tax save requested arg# dex bmi .7 -.3 jsr MEM.GetCharPtr1 skip str +.3 jsr SHARED.GetCharPtr1 skip str bne .3 - jsr MEM.NextCharPtr1 skip \0 + jsr SHARED.NextCharPtr1 skip \0 bra .1 .7 >LDYA ZPPtr1 diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 6774397c..a5324007 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -2,11 +2,12 @@ NEW AUTO 3,1 *-------------------------------------- .DUMMY - .OR FAC 15 Bytes + .OR FAC 13 Bytes BIN.hMem .BS 1 BIN.R.CS.Start .BS 2 BIN.R.CS.End .BS 2 BIN.R.End .BS 2 +BIN.R.Size .BS 2 BIN.R.Offset .BS 2 BIN.R.Stop .BS 2 .ED @@ -222,12 +223,19 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE * Y,A = Ptr to installed driver *\-------------------------------------- K.InsDrv >STYA ZPPtr3 SRC PTR for move - >PULLW BIN.R.CS.Start - >PULLYA CS Len + >PULLYA DRV.CS.SIZE jsr BIN.ComputeCSEndYA - >PULLW BIN.R.End - + >PULLA BIN.R.End + sta BIN.R.End + sec + sbc BIN.R.CS.Start + tay + + >PULLA + sta BIN.R.End+1 + sbc BIN.R.CS.Start+1 + >STYA BIN.R.Size jsr MEM.GetKrnlBuf Y,A = CODE + DATA bcs .9 No More Room to load Driver @@ -238,15 +246,11 @@ K.InsDrv >STYA ZPPtr3 SRC PTR for move jsr BIN.ComputeOffsetYA - lda BIN.R.End - sec - sbc BIN.R.CS.Start - tay + lda BIN.R.Size eor #$ff tax - lda BIN.R.End+1 - sbc BIN.R.CS.Start+1 + lda BIN.R.Size+1 eor #$ff pha @@ -306,7 +310,7 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE bra .1 *-------------------------------------- -.2 jsr MEM.AddYp1ToPtr1 add current offset in Y to Ptr +.2 jsr SHARED.AddYp1ToPtr1 add current offset in Y to Ptr * + 1 to skip last 00 from beq .2 * ZPPtr1=Current Code PTR lda BIN.R.CS.End @@ -341,7 +345,7 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE pla get back Opcode length... .5 tay A = OPCODE length - jsr MEM.AddYToPtr1 + jsr SHARED.AddYToPtr1 .6 cmp BIN.R.Stop A = ZPPtr1 bne .3 diff --git a/SYS/KERNEL.S.DEF.txt b/SYS/KERNEL.S.DEF.txt index 6cf688f1..24d972d6 100644 --- a/SYS/KERNEL.S.DEF.txt +++ b/SYS/KERNEL.S.DEF.txt @@ -35,7 +35,7 @@ XFer .EQ $C314 CS:M->X, VS:Use Aux ZP DRV.BLK.Cmd .EQ $42 DRV.BLK.UnitNum .EQ $43 DRV.BLK.Buf .EQ $44 -DRV.BLK.BlkNum .EQ $47 +DRV.BLK.BlkNum .EQ $46 *-------------------------------------- * $5E-$C8 RESERVED APPLESOFT Main/Aux (ROM Call, no need to switch back MainZP) *-------------------------------------- diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index b883a823..f4f7c4d9 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -85,7 +85,7 @@ K.GetDevStatus.I * ## RETURN VALUE * A = hDEV *\-------------------------------------- -K.MKDev jsr MEM.SPtr1PPtr2 ptr1=fd, ptr2=name +K.MKDev jsr SHARED.SPtr1PPtr2 ptr1=fd, ptr2=name ldx DevMgr.DevIdx cpx #K.DEV.MAX*2+1 diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index fcc830a0..de6d7e30 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -73,7 +73,7 @@ K.ExpandStr stz ENV.hMem Reset Intermediate string... .31 cmp #'}' end of var? beq .50 - jsr MEM.IsIDValid _,.,a-z,A-Z,0-9 ? + jsr SHARED.IsIDValid _,.,a-z,A-Z,0-9 ? bcc .32 yes, add to varname ldx ENV.VarLen @@ -282,7 +282,7 @@ K.PutEnv >STYA ZPPtr2 NAME=VALUE .2 lda #0 sta K.Buf256,y - jsr MEM.AddYp1ToPtr2 + jsr SHARED.AddYp1ToPtr2 >LDYAI K.Buf256 >STYA ZPPtr1 @@ -299,7 +299,7 @@ K.PutEnv >STYA ZPPtr2 NAME=VALUE * `>SYSCALL setenv` * ## RETURN VALUE *\-------------------------------------- -K.SetEnv jsr MEM.SPtr1PPtr2 +K.SetEnv jsr SHARED.SPtr1PPtr2 K.SetEnv.I jsr K.UnsetEnv.I @@ -463,7 +463,7 @@ ENV.ExpandSysVar bne .4 lda ENV.VarName - jsr IsDigit $0...$9 ?? + jsr ZP.IsDigit $0...$9 ?? bcs .1 and #$0F diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 8be37e07..207efa06 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -171,6 +171,23 @@ GP.AtkCall dec IRQ.InKernel inc IRQ.InKernel rts +*-------------------------------------- +GP.FpuCall dec IRQ.InKernel + jsr .1 + inc IRQ.InKernel + + clc + rts + +.1 cpx #FPU.IMOD32+1 + bcc GP.RomCall.JmpX INT32 + + phx + jsr GP.SetFAC Get float from stack + + plx + cpx #FPU.PWR+1 + bcs .2 */-------------------------------------- * # FAdd,FSub,FMult,FDiv,FPwr * Return X+Y, X-Y, X*Y, X/Y, X^Y @@ -186,6 +203,14 @@ GP.AtkCall dec IRQ.InKernel * ## RETURN VALUE * On stack (float) *\-------------------------------------- + lda pStack + clc + adc #5 + sta pStack + + phx + jsr GP.SetARG + plx */-------------------------------------- * # Log,Sqr,Exp,Cos,Sin,Tan,ATan * Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x) @@ -204,235 +229,6 @@ GP.AtkCall dec IRQ.InKernel * ## RETURN VALUE * On stack (Float) *\-------------------------------------- -* >PUSHL ARG -* >PUSHL ACC -* >FPU ADD32 -* >PULLL (ARG+ACC) -*-------------------------------------- -MATH.ADD32 clc - .HS B0 BCS -MATH.SUB32 sec - - php - - jsr MATH.PopACC32 - - ldy #0 - ldx #3 - - plp - bcs .2 - -.1 lda (pStack),y - adc ACC32,y - sta (pStack),y - iny - dex - bpl .1 - - rts - -.2 lda (pStack),y - sbc ACC32,y - sta (pStack),y - iny - dex - bpl .2 - -MATH.SUB32.RTS rts -*-------------------------------------- -* >PUSHL ARG -* >PUSHL ACC -* >(I)MUL32 -* >PULLL (ARG*ACC) -*-------------------------------------- -MATH.UMUL32 clc - .HS B0 BCS -MATH.IMUL32 sec - - php - jsr MATH.MULDIVMOD.COMMON - jsr MATH.MUL32 - - plp - bcc MATH.SUB32.RTS - -MATH.RETURN.ITMP - lda ACC32.Sign - eor ARG32.Sign - bpl MATH.PutTMP32 - bra MATH.PutNotTMP32 -*-------------------------------------- -* >PUSHL ARG -* >PUSHL ACC -* >(I)DIV32 -* >PULLL (ARG / ACC) -*-------------------------------------- -* >PUSHL ARG -* >PUSHL ACC -* >(I)MOD32 -* >PULLL (ARG mod ACC) -*-------------------------------------- -MATH.UDIV32 clc - .HS B0 BCS -MATH.IDIV32 sec - clv - bra MATH.DIVMOD - -MATH.UMOD32 clc - .HS B0 BCS -MATH.IMOD32 sec - bit MATH.SUB32.RTS $60 - -MATH.DIVMOD php - jsr MATH.MULDIVMOD.COMMON - jsr MATH.DIVMOD32 - - plp - bcc .3 - bvs MATH.RETURN.ITMP IMOD - - lda ACC32.Sign IDIV - eor ARG32.Sign - bmi MATH.PutARG32 - bra MATH.PutNotARG32 - -.3 bvs MATH.PutARG32 DIV -*-------------------------------------- -MATH.PutTMP32 lda #TMP32 MOD - .HS 2C BIT ABS -*-------------------------------------- -MATH.PutARG32 lda #ARG32 - sta .1+1 - - ldy #3 - -.1 lda $ff,y SELF MODIFIED - sta (pStack),y - dey - bpl .1 - - rts -*-------------------------------------- -MATH.PutNotTMP32 - lda #TMP32 - .HS 2C BIT ABS -*-------------------------------------- -MATH.PutNotARG32 - lda #ARG32 - sta .1+1 - - ldy #0 - ldx #3 - - sec - -.1 lda $ff,y SELF MODIFIED - eor #$ff two's complement of X bytes - adc #0 - sta (pStack),y - iny - dex - bpl .1 - - rts -*-------------------------------------- -MATH.PopACC32 ldy #$ff - -.1 iny - lda (pStack),y - sta ACC32,y - cpy #3 - bne .1 - - sta ACC32.Sign - - tya -* sec Add 3+CS=4 - adc pStack - sta pStack - - rts -*-------------------------------------- -MATH.GetARG32 ldy #0 - -.1 lda (pStack),y - sta ARG32,y - iny - cpy #4 - bne .1 - - sta ARG32.Sign - - rts -*-------------------------------------- -MATH.MULDIVMOD.COMMON - php - - jsr MATH.PopACC32 - jsr MATH.GetARG32 - - plp - bcc .1 - - jsr MATH.ACC32ABS - jsr MATH.ARG32ABS - -.1 rts -*/-------------------------------------- -* # float -* Return 'floated' long -* ## C -* `float f = (float)12345678; -* ## ASM -* **In:** -* `>PUSHL X` (long) -* ## RETURN VALUE -* On stack (float) -*\-------------------------------------- -*/-------------------------------------- -* # lrintf -* Return float rounded into a long -* ## C -* `long int lrintf (float x);` -* ## ASM -* **In:** -* `>PUSHF x` -* `>SYSCALL lrintf` -* ## RETURN VALUE -* On stack (long) -*\-------------------------------------- -*-------------------------------------- -GP.FpuCall dec IRQ.InKernel - jsr .1 - inc IRQ.InKernel - - clc - rts - -.1 cpx #16 < FADD ? - bcc GP.RomCall.JmpX INT32 - - phx - jsr GP.SetFAC Get float from stack - - plx - cpx #26 > FPWR ? - bcs .2 -*-------------------------------------- -* FADD -> FPWR : 2 * float -*-------------------------------------- - lda pStack - clc - adc #5 - sta pStack - - phx - jsr GP.SetARG - plx -*-------------------------------------- -* LOG -> ATAN : 1 * float -*-------------------------------------- .2 jsr GP.ROMCALL GP.GETFAC.ON.STACK @@ -458,17 +254,17 @@ GP.RomCall phx bit $C000,x rts - +*-------------------------------------- GP.RomCall.JmpX jmp (.1,x) -.1 .DA MATH.ADD32 - .DA MATH.SUB32 - .DA MATH.UMUL32 - .DA MATH.IMUL32 - .DA MATH.UDIV32 - .DA MATH.IDIV32 - .DA MATH.UMOD32 - .DA MATH.IMOD32 +.1 .DA GP.ADD32 + .DA GP.SUB32 + .DA GP.UMUL32 + .DA GP.IMUL32 + .DA GP.UDIV32 + .DA GP.IDIV32 + .DA GP.UMOD32 + .DA GP.IMOD32 * http://www.txbobsc.com/scsc/scdocumentor/E7A0.html @@ -505,6 +301,170 @@ GP.SetFAC ldx #FPU.SETFAC >LDYA pStack bra GP.ROMCALL *-------------------------------------- +GP.ADD32 clc + .HS B0 BCS +GP.SUB32 sec + + php + + jsr GP.PopACC32 + + ldy #0 + ldx #3 + + plp + bcs .2 + +.1 lda (pStack),y + adc ACC32,y + sta (pStack),y + iny + dex + bpl .1 + + rts + +.2 lda (pStack),y + sbc ACC32,y + sta (pStack),y + iny + dex + bpl .2 + +GP.SUB32.RTS rts +*-------------------------------------- +GP.UMUL32 clc + .HS B0 BCS +GP.IMUL32 sec + + php + jsr GP.MULDIVMOD.COMMON + jsr MATH.MUL32 + + plp + bcc GP.SUB32.RTS + +GP.RETURN.ITMP + lda ACC32.Sign + eor ARG32.Sign + bpl GP.PutTMP32 + bra GP.PutNotTMP32 +*-------------------------------------- +GP.UDIV32 clc + .HS B0 BCS +GP.IDIV32 sec + clv + bra GP.DIVMOD + +GP.UMOD32 clc + .HS B0 BCS +GP.IMOD32 sec + bit GP.SUB32.RTS $60 + +GP.DIVMOD php + jsr GP.MULDIVMOD.COMMON + jsr MATH.DIVMOD32 + + plp + bcc .3 + bvs GP.RETURN.ITMP IMOD + + lda ACC32.Sign IDIV + eor ARG32.Sign + bmi GP.PutARG32 + bra GP.PutNotARG32 + +.3 bvs GP.PutARG32 DIV +*-------------------------------------- +GP.PutTMP32 lda #TMP32 MOD + .HS 2C BIT ABS +*-------------------------------------- +GP.PutARG32 lda #ARG32 + sta .1+1 + + ldy #3 + +.1 lda $ff,y SELF MODIFIED + sta (pStack),y + dey + bpl .1 + + rts +*-------------------------------------- +GP.PutNotTMP32 lda #TMP32 + .HS 2C BIT ABS +*-------------------------------------- +GP.PutNotARG32 lda #ARG32 + sta .1+1 + + ldy #0 + ldx #3 + + sec + +.1 lda $ff,y SELF MODIFIED + eor #$ff two's complement of X bytes + adc #0 + sta (pStack),y + iny + dex + bpl .1 + + rts +*-------------------------------------- +GP.PopACC32 ldy #$ff + +.1 iny + lda (pStack),y + sta ACC32,y + cpy #3 + bne .1 + + sta ACC32.Sign + + tya +* sec Add 3+CS=4 + adc pStack + sta pStack + + rts +*-------------------------------------- +GP.GetARG32 ldy #0 + +.1 lda (pStack),y + sta ARG32,y + iny + cpy #4 + bne .1 + + sta ARG32.Sign + + rts +*-------------------------------------- +GP.MULDIVMOD.COMMON + php + + jsr GP.PopACC32 + jsr GP.GetARG32 + + plp + bcc .1 + + jsr MATH.ACC32ABS + jsr MATH.ARG32ABS + +.1 rts +*/-------------------------------------- +* # float +* Return 'floated' long +* ## C +* `float f = (float)12345678; +* ## ASM +* **In:** +* `>PUSHL X` (long) +* ## RETURN VALUE +* On stack (float) +*\-------------------------------------- K.Float ldy #3 .1 lda (pStack),y @@ -520,10 +480,21 @@ K.Float ldy #3 ldx #FPU.LTOF -MATH.RomCallPushFAC +GP.RomCallPushFAC jsr GP.ROMCALL jmp GP.GETFAC.ON.STACK -*-------------------------------------- +*/-------------------------------------- +* # lrintf +* Return float rounded into a long +* ## C +* `long int lrintf (float x);` +* ## ASM +* **In:** +* `>PUSHF x` +* `>SYSCALL lrintf` +* ## RETURN VALUE +* On stack (long) +*\-------------------------------------- K.lrintf jsr GP.SetFAC inc pStack keep 4 bytes on stack diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 81122e90..aca0f322 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -1083,14 +1083,14 @@ CHARGET inc TXTPTR inc TXTPTR+1 CHARGOT lda $ffff - beq IsDigit.9 + beq ZP.IsDigit.9 -IsDigit cmp #'0' - bcc IsDigit.9 +ZP.IsDigit cmp #'0' + bcc ZP.IsDigit.9 cmp #'9'+1 rts -IsDigit.9 sec +ZP.IsDigit.9 sec rts .EP Kernel.ZP.S .EQ *-Kernel.ZP diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index 807850ad..83113a14 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -1,6 +1,5 @@ NEW AUTO 3,1 - *-------------------------------------- IO.OPEN.REG >MLICALL MLIGETFILEINFO bcc IO.OPEN.REG.E Already Exists diff --git a/SYS/KERNEL.S.MATH.txt b/SYS/KERNEL.S.MATH.txt index 53bf81d4..43f0cdae 100644 --- a/SYS/KERNEL.S.MATH.txt +++ b/SYS/KERNEL.S.MATH.txt @@ -212,7 +212,7 @@ MATH.ACC322STR10 MATH.Hex2ACC32 lda (ZPPtr2) beq .9 - jsr MEM.IsHexDigit + jsr SHARED.IsHexDigit bcs .9 jsr MATH.A2ACC32 @@ -222,7 +222,7 @@ MATH.Hex2ACC32 lda (ZPPtr2) .1 iny lda (ZPPtr2),y beq .8 - jsr MEM.IsHexDigit + jsr SHARED.IsHexDigit bcs .8 pha @@ -273,7 +273,7 @@ MATH.Dec2ACC32 jsr MATH.ACC32ZERO eor #'-' bne .10 - jsr MEM.NextCharPtr2 skip '-' + jsr SHARED.NextCharPtr2 skip '-' sec .10 ror .80+1 set pos/neg flag @@ -284,7 +284,7 @@ MATH.Dec2ACC32 jsr MATH.ACC32ZERO lda (ZPPtr2),y beq .8 - jsr IsDigit + jsr ZP.IsDigit bcs .8 phy Save Y, pointing to next char diff --git a/SYS/KERNEL.S.OSDX.txt b/SYS/KERNEL.S.OSDX.txt index 815cd67e..dab3f405 100644 --- a/SYS/KERNEL.S.OSDX.txt +++ b/SYS/KERNEL.S.OSDX.txt @@ -16,7 +16,7 @@ X.OSD >STYA TXTPTR ldy #S.CB-1 -.10 jsr MEM.TXTPTR.GetY +.10 jsr SHARED.TXTPTR.GetY sta CB.Cache,y dey bpl .10 @@ -207,7 +207,7 @@ GETTEXTSIZE clc sta CB.Cache+S.CB.SrcH stz CB.Cache+S.CB.SrcH+1 -.3 jsr MEM.TXTPTR.GetNext +.3 jsr SHARED.TXTPTR.GetNext beq .4 jsr FON.GetChar @@ -246,7 +246,7 @@ GETTEXTSIZE clc stz GWORD reset Col index in BM stz GWORD+1 reset Bit index in Col -DRAWTEXT.LOOP jsr MEM.TXTPTR.GetNext +DRAWTEXT.LOOP jsr SHARED.TXTPTR.GetNext beq DRAWTEXT.END jsr FON.GetChar diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 98c6a720..0154c9f2 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -502,7 +502,7 @@ PS.AddArgV ldy #$ff In both cases, remove ARGV[0] * lda #0 jsr PS.AddYAp12ArgSize -.3 jsr MEM.AddYp1ToPtr1 +.3 jsr SHARED.AddYp1ToPtr1 bra .1 .4 txa @@ -555,8 +555,8 @@ PS.AddPtr1ToStrV sta (ZPPtr2),y bne .2 - jsr MEM.AddYp1ToPtr1 - jmp MEM.AddYp1ToPtr2 + jsr SHARED.AddYp1ToPtr1 + jmp SHARED.AddYp1ToPtr2 *-------------------------------------- PS.AddYAp12ArgSize pha diff --git a/SYS/KERNEL.S.PWD.txt b/SYS/KERNEL.S.PWD.txt index 64d71b6d..22858216 100644 --- a/SYS/KERNEL.S.PWD.txt +++ b/SYS/KERNEL.S.PWD.txt @@ -21,7 +21,7 @@ K.GetPWUID * `>SYSCALL getpwname` * ## RETURN VALUE *\-------------------------------------- -K.GetPWName jsr MEM.SPtr1PPtr2 +K.GetPWName jsr SHARED.SPtr1PPtr2 bra K.PutPW.1 */-------------------------------------- diff --git a/SYS/KERNEL.S.PWDX.txt b/SYS/KERNEL.S.PWDX.txt index 7abcbc46..a844948b 100644 --- a/SYS/KERNEL.S.PWDX.txt +++ b/SYS/KERNEL.S.PWDX.txt @@ -61,7 +61,7 @@ PWD.GetPWName lda PWD.hDB >STYA TXTPTR ldy #0 - jsr MEM.TXTPTR.GetY + jsr SHARED.TXTPTR.GetY beq PWD.GetPW.99 .1 lda (ZPPtr3) @@ -70,7 +70,7 @@ PWD.GetPWName lda PWD.hDB ldy #$ff .2 iny - jsr MEM.TXTPTR.GetY + jsr SHARED.TXTPTR.GetY beq .4 cmp (ZPPtr3),y @@ -102,7 +102,7 @@ PWD.PutPW >LDYA ZPPtr2 bne .1 ldy #S.PW.UID - jsr MEM.TXTPTR.GetY + jsr SHARED.TXTPTR.GetY bne PWD.GetPW.RTS Must be ROOT user jsr PWD.GetRecordLen @@ -122,7 +122,7 @@ PWD.PutPW >LDYA ZPPtr2 >STYA PWD.DBPtr ldy #S.PW.PASSWD - jsr MEM.TXTPTR.GetY + jsr SHARED.TXTPTR.GetY bne .12 jsr PWD.DeleteRecord @@ -276,7 +276,7 @@ PWD.FindRecord >LDYA PWD.DBPtr ldy #$ff .3 iny - jsr MEM.TXTPTR.GetY + jsr SHARED.TXTPTR.GetY beq .4 cmp (ZPPtr3),y beq .3 @@ -325,12 +325,12 @@ PWD.Record2PW sta CLRWRITEAUX cmp #':' beq .2 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 inx bra .1 .2 lda #0 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 inx cpx #S.PW.PASSWD bne .2 @@ -340,21 +340,21 @@ PWD.Record2PW sta CLRWRITEAUX cmp #':' beq .4 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 inx bra .3 .4 lda #0 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 inx cpx #S.PW.UID bne .4 jsr PWD.GetByte UID - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 jsr PWD.GetByte GID - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 ldx #S.PW.GECOS @@ -363,12 +363,12 @@ PWD.Record2PW sta CLRWRITEAUX cmp #':' beq .6 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 inx bra .5 .6 lda #0 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 inx cpx #S.PW.DIR bne .6 @@ -378,12 +378,12 @@ PWD.Record2PW sta CLRWRITEAUX cmp #':' beq .8 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 inx bra .7 .8 lda #0 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 inx cpx #S.PW.SHELL bne .8 @@ -393,12 +393,12 @@ PWD.Record2PW sta CLRWRITEAUX cmp #C.CR beq .10 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 inx bra .9 .10 lda #0 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 sta SETWRITEAUX @@ -454,7 +454,7 @@ PWD.GetRecordLen jsr PWD.StoreChar ldy #S.PW.UID - jsr MEM.TXTPTR.GetY + jsr SHARED.TXTPTR.GetY jsr PWD.StoreByte lda #':' @@ -462,7 +462,7 @@ PWD.GetRecordLen iny S.PW.UID - jsr MEM.TXTPTR.GetY + jsr SHARED.TXTPTR.GetY jsr PWD.StoreByte lda #':' @@ -494,7 +494,7 @@ PWD.GetRecordLen.RTS rts *-------------------------------------- PWD.StoreString iny - jsr MEM.TXTPTR.GetY + jsr SHARED.TXTPTR.GetY beq PWD.GetRecordLen.RTS jsr PWD.StoreChar bra PWD.StoreString diff --git a/SYS/KERNEL.S.SHARED.txt b/SYS/KERNEL.S.SHARED.txt index c59a2be0..45ea0a04 100644 --- a/SYS/KERNEL.S.SHARED.txt +++ b/SYS/KERNEL.S.SHARED.txt @@ -1,47 +1,51 @@ NEW AUTO 3,1 *-------------------------------------- -MEM.GetKeyCharY sta CLRREADAUX +SHARED.GetKeyCharY + sta CLRREADAUX lda (ZPSListDataPtr),y sta SETREADAUX - beq MEM.IsDigit.9 - -MEM.IsIDValid cmp #'.' - beq MEM.IsDigit.8 + beq SHARED.IsDigit.9 +SHARED.IsIDValid + cmp #'.' + beq SHARED.IsDigit.8 cmp #'_' - beq MEM.IsDigit.8 - -MEM.IsDigitOrL cmp #'z'+1 - bcs MEM.IsDigit.RTS + beq SHARED.IsDigit.8 +SHARED.IsDigitOrL + cmp #'z'+1 + bcs SHARED.IsDigit.RTS cmp #'a' - bcs MEM.IsDigit.8 - -MEM.IsDigitOrUC cmp #'Z'+1 - bcs MEM.IsDigit.RTS + bcs SHARED.IsDigit.8 +SHARED.IsDigitOrUC + cmp #'Z'+1 + bcs SHARED.IsDigit.RTS cmp #'A' - bcs MEM.IsDigit.8 + bcs SHARED.IsDigit.8 - jmp IsDigit - -MEM.IsDigit.9 sec + jmp ZP.IsDigit +SHARED.IsDigit.9 + sec rts -MEM.IsDigit.8 clc -MEM.IsDigit.RTS rts +SHARED.IsDigit.8 + clc +SHARED.IsDigit.RTS + rts *-------------------------------------- -MEM.IsHexDigit jsr IsDigit +SHARED.IsHexDigit + jsr ZP.IsDigit bcc .8 cmp #'A' - bcc MEM.IsDigit.9 + bcc SHARED.IsDigit.9 cmp #'F'+1 bcc .1 cmp #'a' - bcc MEM.IsDigit.9 + bcc SHARED.IsDigit.9 cmp #'f'+1 - bcs MEM.IsDigit.RTS + bcs SHARED.IsDigit.RTS eor #$20 .1 @@ -52,31 +56,35 @@ MEM.IsHexDigit jsr IsDigit .8 and #$0F rts *-------------------------------------- -MEM.SetKeyCharY sta CLRWRITEAUX +SHARED.SetKeyCharY + sta CLRWRITEAUX sta (ZPSListDataPtr),y sta SETWRITEAUX rts *-------------------------------------- -MEM.GetDataByte sta CLRREADAUX +SHARED.GetDataByte + sta CLRREADAUX lda (ZPSListDataPtr) sta SETREADAUX - bra MEM.SetDataByte.1 + bra SHARED.SetDataByte.1 *-------------------------------------- -MEM.SetDataByte sta CLRWRITEAUX +SHARED.SetDataByte + sta CLRWRITEAUX sta (ZPSListDataPtr) sta SETWRITEAUX -MEM.SetDataByte.1 +SHARED.SetDataByte.1 inc ZPSListDataPtr bne .8 inc ZPSListDataPtr+1 .8 rts *-------------------------------------- -MEM.TXTPTR.GetY sta CLRREADAUX +SHARED.TXTPTR.GetY + sta CLRREADAUX lda (TXTPTR),y sta SETREADAUX rts *-------------------------------------- -MEM.TXTPTR.GetNext +SHARED.TXTPTR.GetNext sta CLRREADAUX lda (TXTPTR) sta SETREADAUX @@ -86,29 +94,34 @@ MEM.TXTPTR.GetNext inc TXTPTR+1 .9 rts *-------------------------------------- -MEM.SPtr1PPtr2 >STYA ZPPtr1 +SHARED.SPtr1PPtr2 + >STYA ZPPtr1 >PULLW ZPPtr2 rts *-------------------------------------- -MEM.SPtr2PPtr1 >STYA ZPPtr2 +SHARED.SPtr2PPtr1 + >STYA ZPPtr2 >PULLW ZPPtr1 rts *-------------------------------------- -MEM.GetCharPtr1 lda (ZPPtr1) - bne MEM.NextCharPtr1 +SHARED.GetCharPtr1 + lda (ZPPtr1) + bne SHARED.NextCharPtr1 rts -MEM.PutCharPtr1 sta (ZPPtr1) -MEM.NextCharPtr1 +SHARED.PutCharPtr1 + sta (ZPPtr1) +SHARED.NextCharPtr1 inc ZPPtr1 bne .8 inc ZPPtr1+1 never Z .8 rts *-------------------------------------- -MEM.AddYp1ToPtr1 +SHARED.AddYp1ToPtr1 sec .HS 90 BCC -MEM.AddYToPtr1 clc +SHARED.AddYToPtr1 + clc tya adc ZPPtr1 sta ZPPtr1 @@ -116,10 +129,11 @@ MEM.AddYToPtr1 clc inc ZPPtr1+1 .8 rts *-------------------------------------- -MEM.AddYp1ToPtr2 +SHARED.AddYp1ToPtr2 sec .HS 90 BCC -MEM.AddYToPtr2 clc +SHARED.AddYToPtr2 + clc tya adc ZPPtr2 sta ZPPtr2 @@ -128,12 +142,13 @@ MEM.AddYToPtr2 clc inc ZPPtr2+1 .8 rts *-------------------------------------- -MEM.GetCharPtr2 lda (ZPPtr2) - bne MEM.NextCharPtr2 +SHARED.GetCharPtr2 + lda (ZPPtr2) + bne SHARED.NextCharPtr2 rts - -MEM.PutCharPtr2 sta (ZPPtr2) -MEM.NextCharPtr2 +SHARED.PutCharPtr2 + sta (ZPPtr2) +SHARED.NextCharPtr2 inc ZPPtr2 bne .8 inc ZPPtr2+1 diff --git a/SYS/KERNEL.S.SLISTX.txt b/SYS/KERNEL.S.SLISTX.txt index 94bb68c3..45de319f 100644 --- a/SYS/KERNEL.S.SLISTX.txt +++ b/SYS/KERNEL.S.SLISTX.txt @@ -76,7 +76,7 @@ SLIST.GetData jsr SLIST.Select cmp #C.CR beq .8 -.5 jsr MEM.SetDataByte +.5 jsr SHARED.SetDataByte inc ZPSListDataLen bne .2 inc ZPSListDataLen+1 @@ -90,7 +90,7 @@ SLIST.GetData jsr SLIST.Select bpl .81 lda #0 - jsr MEM.SetDataByte + jsr SHARED.SetDataByte inc ZPSListDataLen bne .81 inc ZPSListDataLen+1 @@ -143,7 +143,7 @@ SLIST.AddData jsr SLIST.Select inc ZPSListDataLen+1 beq .8 -.2 jsr MEM.GetDataByte +.2 jsr SHARED.GetDataByte jsr SLIST.AddBlockByte bcc .1 @@ -177,7 +177,7 @@ SLIST.SetData jsr SLIST.Select inc SLIST.nDataCnt+1 beq .8 -.2 jsr MEM.GetDataByte +.2 jsr SHARED.GetDataByte jsr SLIST.SetBlockByte bra .1 @@ -200,13 +200,13 @@ SLIST.GetByID jsr SLIST.Select .1 phy jsr SLIST.GetNextByte ply - jsr MEM.SetKeyCharY + jsr SHARED.SetKeyCharY iny dex bne .1 txa lda #0 - jsr MEM.SetKeyCharY + jsr SHARED.SetKeyCharY jsr SLIST.SkipData @@ -227,7 +227,7 @@ SLIST.NewKey jsr SLIST.Search ldy #0 -.1 jsr MEM.GetKeyCharY +.1 jsr SHARED.GetKeyCharY jsr SLIST.AddBlockByte bcs .9 iny @@ -310,7 +310,7 @@ SLIST.Search jsr K.GetMemPtr ldy #$ff .1 iny - jsr MEM.GetKeyCharY + jsr SHARED.GetKeyCharY bcc .1 sty SLIST.KeyLen @@ -336,7 +336,7 @@ SLIST.Search jsr K.GetMemPtr jsr SLIST.GetNextByte sta .4+1 ply - jsr MEM.GetKeyCharY + jsr SHARED.GetKeyCharY .4 cmp #$ff SELF MODIFIED bne .5 diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index e0edbf28..2bd154a6 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -278,7 +278,7 @@ K.PrintF.1 stz PrintF.Cnt stz PrintF.LocalGetByte+1 -.1 jsr MEM.GetCharPtr2 +.1 jsr SHARED.GetCharPtr2 bne .22 jmp .8 end of format.. @@ -292,7 +292,7 @@ K.PrintF.1 stz PrintF.Cnt lda (ZPPtr2) beq .7 end of format... print % and exit - jsr IsDigit + jsr ZP.IsDigit bcs .6 no digit....go check specifier cmp #'0' ...a 0...mmm... padding char? @@ -300,12 +300,12 @@ K.PrintF.1 stz PrintF.Cnt sta K.PrintF.PadC - jsr MEM.NextCharPtr2 skip 0 ... + jsr SHARED.NextCharPtr2 skip 0 ... lda (ZPPtr2) beq .7 - jsr IsDigit + jsr ZP.IsDigit bcs .6 %0x ?????? .4 jsr MATH.Dec2ACC32 @@ -319,7 +319,7 @@ K.PrintF.1 stz PrintF.Cnt lda #C.SPACE sta K.PrintF.PadC -.5 jsr MEM.AddYToPtr2 skip all processed chars +.5 jsr SHARED.AddYToPtr2 skip all processed chars lda (ZPPtr2) beq .7 @@ -333,7 +333,7 @@ K.PrintF.1 stz PrintF.Cnt bra .20 unknown ... -.62 jsr MEM.NextCharPtr2 +.62 jsr SHARED.NextCharPtr2 txa yes, jmp to it! asl @@ -349,7 +349,7 @@ K.PrintF.1 stz PrintF.Cnt .10 cmp #'\' bne .20 - jsr MEM.GetCharPtr2 + jsr SHARED.GetCharPtr2 beq .99 ldx #PrintFTBL2.Cnt-1 @@ -365,7 +365,7 @@ K.PrintF.1 stz PrintF.Cnt jsr MATH.Hex2ACC32 bcs .99 - jsr MEM.AddYToPtr2 + jsr SHARED.AddYToPtr2 .14 lda ACC32 bra .20 @@ -548,7 +548,7 @@ PrintF.F clc adc #5 sta PrintF.LocalGetByte+1 - ldy #A2osX.NumStrBuf+1 In order not to trash A2osX.SaveSM,A2osX.SaveSX + ldy #A2osX.NumStrBuf ldx #FPU.FOUT jsr GP.ROMCALL @@ -720,7 +720,7 @@ K.FGetS jsr PFT.CheckNodeA cmp #C.CR beq .8 empty string - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 lda ZPPtr1 eor #$ff @@ -742,7 +742,7 @@ K.FGetS jsr PFT.CheckNodeA cmp #C.CR beq .8 - jsr MEM.PutCharPtr2 + jsr SHARED.PutCharPtr2 bra .3 .5 cmp #MLI.E.EOF @@ -848,7 +848,7 @@ STDIO.Read.1 lda #0 * ## RETURN VALUE * A = Number of arguments filled. *\-------------------------------------- -K.SScanF jsr MEM.SPtr2PPtr1 ptr2=String to Scan,Ptr1=format +K.SScanF jsr SHARED.SPtr2PPtr1 ptr2=String to Scan,Ptr1=format lda pStack sta pLocal @@ -856,7 +856,7 @@ K.SScanF jsr MEM.SPtr2PPtr1 ptr2=String to Scan,Ptr1=format stz .8+1 rest Arg processed stz PrintF.LocalGetByte+1 -.1 jsr MEM.GetCharPtr1 End Of format? +.1 jsr SHARED.GetCharPtr1 End Of format? beq .8 cmp #'%' Escape ? @@ -868,16 +868,16 @@ K.SScanF jsr MEM.SPtr2PPtr1 ptr2=String to Scan,Ptr1=format cmp (ZPPtr2) Same char in string? bne .9 - jsr MEM.NextCharPtr2 + jsr SHARED.NextCharPtr2 bra .1 -.12 jsr MEM.NextCharPtr2 Space.... +.12 jsr SHARED.NextCharPtr2 Space.... cmp (ZPPtr2) another one ? beq .12 bne .1 -.2 jsr MEM.GetCharPtr1 Get specifier after % +.2 jsr SHARED.GetCharPtr1 Get specifier after % beq .9 unexpected End of format after "%" ? ldx #K.SScanFJMP-K.SScanFTBL-2 @@ -937,7 +937,7 @@ K.SScanF.H lda K.SScanFTBL+1,x Get VAR size jsr MATH.Hex2ACC32 -K.SScanF.GetVAL jsr MEM.AddYToPtr2 Y=char count parsed +K.SScanF.GetVAL jsr SHARED.AddYToPtr2 Y=char count parsed .1 ply get back VAL size @@ -961,7 +961,7 @@ K.SScanF.S ldy #$ff .2 lda #0 add \0 to param ptr sta (ZPPtr3),y -K.SScanF.Fwd jmp MEM.AddYToPtr2 Y=char count parsed +K.SScanF.Fwd jmp SHARED.AddYToPtr2 Y=char count parsed */-------------------------------------- * # FOpen * Open a file diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 4925a192..f4edc432 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -41,7 +41,7 @@ K.AToF >STYA TXTPTR Ptr to source string jsr CHARGOT ldx #FPU.FIN - jmp MATH.RomCallPushFAC + jmp GP.RomCallPushFAC */-------------------------------------- * # StrToL/StrToUL * Convert String to 32 bits (unsigned) int @@ -60,7 +60,7 @@ K.AToF >STYA TXTPTR Ptr to source string K.StrToL sec Signed .HS 90 BCC K.StrToUL clc Unsigned - jsr MEM.SPtr2PPtr1 + jsr SHARED.SPtr2PPtr1 >PULLA Base jsr K.AToL.I diff --git a/SYS/KERNEL.S.STRING.txt b/SYS/KERNEL.S.STRING.txt index dea0803e..a71a4f43 100644 --- a/SYS/KERNEL.S.STRING.txt +++ b/SYS/KERNEL.S.STRING.txt @@ -58,11 +58,11 @@ K.StrCpy clc pha phy - jsr MEM.SPtr1PPtr2 + jsr SHARED.SPtr1PPtr2 bcc .2 -.1 jsr MEM.GetCharPtr1 +.1 jsr SHARED.GetCharPtr1 bne .1 .2 ldy #0 @@ -202,7 +202,7 @@ K.StrCmp sec * CS, Y,A > 0 or < 0 *\-------------------------------------- K.StrCaseCmp clc - jsr MEM.SPtr1PPtr2 + jsr SHARED.SPtr1PPtr2 ldy #0 diff --git a/SYS/KERNEL.S.TERM.txt b/SYS/KERNEL.S.TERM.txt index 9eebce70..f7a97706 100644 --- a/SYS/KERNEL.S.TERM.txt +++ b/SYS/KERNEL.S.TERM.txt @@ -528,12 +528,12 @@ DRV.TERM.CSI.Exec sta CsiHeader -.1 jsr MEM.NextCharPtr2 - +.1 jsr SHARED.NextCharPtr2 + .2 jsr MATH.Dec2ACC32 bcs .5 - jsr MEM.AddYToPtr2 + jsr SHARED.AddYToPtr2 lda #255 ldx ACC32+1 diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 2a09063c..67838c4c 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -32,7 +32,7 @@ K.Time >PUSHYA * `>SYSCALL PTime2Time` * ## RETURN VALUE *\-------------------------------------- -K.PTime2Time jsr MEM.SPtr1PPtr2 +K.PTime2Time jsr SHARED.SPtr1PPtr2 ldy #1 lda (ZPPtr1),y Get Year @@ -166,7 +166,7 @@ K.ComputeWDAY lda #DAY0-1 Thursday : 4 (-1 for mod 7) * `>SYSCALL CTime2Time` * ## RETURN VALUE *\-------------------------------------- -K.CTime2Time jsr MEM.SPtr1PPtr2 +K.CTime2Time jsr SHARED.SPtr1PPtr2 ldy #3 @@ -341,21 +341,21 @@ K.StrFTime.MDAY .DA #3,#0,#3,#2,#3,#2,#3,#3,#2,#3,#2,#3 * ## RETURN VALUE * none. always succeed. *\-------------------------------------- -K.StrFTime jsr MEM.SPtr1PPtr2 +K.StrFTime jsr SHARED.SPtr1PPtr2 >PULLW ZPPtr3 timeptr -.1 jsr MEM.GetCharPtr2 +.1 jsr SHARED.GetCharPtr2 beq .8 cmp #'%' beq .2 - jsr MEM.PutCharPtr1 + jsr SHARED.PutCharPtr1 bra .1 .2 ldx #K.StrFTime.Cnt-1 - jsr MEM.GetCharPtr2 + jsr SHARED.GetCharPtr2 beq .8 .3 cmp K.StrFTime.Tbl,x @@ -438,7 +438,7 @@ K.StrFTime.STR sta ZPPtr4 .3 iny lda (ZPPtr4),y - jsr MEM.PutCharPtr1 + jsr SHARED.PutCharPtr1 tya cmp (ZPPtr4) beq .8 @@ -462,9 +462,9 @@ K.StrFTime.P ldy #S.Time.HOUR lda #'p' .HS 2C bit abs .1 lda #'a' - jsr MEM.PutCharPtr1 + jsr SHARED.PutCharPtr1 lda #'m' - jmp MEM.PutCharPtr1 + jmp SHARED.PutCharPtr1 K.StrFTime.YY ldy #S.Time.CENTURY jsr K.StrFTime.addDecPtr1Y @@ -481,9 +481,9 @@ K.StrFTime.addDecA jsr MATH.A2STR10 lda A2osX.NumStrBuf - jsr MEM.PutCharPtr1 + jsr SHARED.PutCharPtr1 lda A2osX.NumStrBuf+1 - jmp MEM.PutCharPtr1 + jmp SHARED.PutCharPtr1 *-------------------------------------- K.StrFTime.DAY >PSTR "???" >PSTR "Monday"