Kernel 0.9.1 : Code reorganization & move to CSTR

This commit is contained in:
Rémy GIBERT 2017-08-24 14:46:48 +02:00
parent 7cecefb477
commit e7825666a6
43 changed files with 794 additions and 353 deletions

Binary file not shown.

Binary file not shown.

View File

@ -61,7 +61,7 @@ CS.RUN >SYSCALL GetArgC
.1 >PUSHW L.DST.IP .1 >PUSHW L.DST.IP
>PUSHW L.SSCANF.IP >PUSHW L.SSCANF.IP
lda #1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>SYSCALL SSCANF >SYSCALL SSCANF

View File

@ -154,7 +154,7 @@ CS.INIT >SYSCALL GetArgC
beq .99 No arg, new file.... beq .99 No arg, new file....
lda #1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>SYSCALL GetFullPathYA >SYSCALL GetFullPathYA
txa txa

View File

@ -47,7 +47,7 @@ CS.INIT >SYSCALL GetArgC
beq .5 beq .5
lda ArgCount lda ArgCount
>SYSCALL GetArgA >SYSCALL GetArg.A
>STYA ZPPtr1 >STYA ZPPtr1
ldy #1 ldy #1
@ -121,7 +121,7 @@ CS.RUN >SYSCALL GetC
lda (pData),y lda (pData),y
inc inc
sta (pData),y sta (pData),y
>SYSCALL GetArgA >SYSCALL GetArg.A
bcs .99 No more arg...the end! bcs .99 No more arg...the end!
>STYA ZPPtr1 >STYA ZPPtr1

View File

@ -58,7 +58,7 @@ CS.INIT >SYSCALL GetArgC
inc ArgIndex inc ArgIndex
lda ArgIndex lda ArgIndex
>SYSCALL GetArgA >SYSCALL GetArg.A
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)

View File

@ -41,7 +41,7 @@ CS.INIT >SYSCALL GetArgC
beq .9 beq .9
lda #1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>SYSCALL GetDevByNameYA >SYSCALL GetDevByNameYA
bcs .9 bcs .9

View File

@ -60,14 +60,14 @@ CS.RUN.ADD cmp #3
>PUSHW L.IP >PUSHW L.IP
>PUSHW L.SSCANF.IP >PUSHW L.SSCANF.IP
lda #3 lda #3
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>SYSCALL SSCANF >SYSCALL SSCANF
bcs .9 bcs .9
>PUSHW L.IP >PUSHW L.IP
lda #2 lda #2
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.ADD >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.ADD
bcs .99 bcs .99

View File

@ -108,7 +108,7 @@ CS.INIT lda #$ff
beq .1 No arg, new file.... beq .1 No arg, new file....
lda #1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>SYSCALL GetFullPathYA >SYSCALL GetFullPathYA
txa txa

View File

@ -53,7 +53,7 @@ CS.INIT >SYSCALL GetArgC
inc ArgIndex inc ArgIndex
lda ArgIndex lda ArgIndex
>SYSCALL GetArgA >SYSCALL GetArg.A
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)

View File

@ -60,7 +60,7 @@ CS.INIT >SYSCALL GetArgC
beq .5 beq .5
lda ArgCount lda ArgCount
>SYSCALL GetArgA >SYSCALL GetArg.A
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)

View File

@ -41,7 +41,7 @@ CS.RUN >SYSCALL GetArgC
beq .99 beq .99
lda #1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>SYSCALL GetFullPathYA >SYSCALL GetFullPathYA
bcs .9 bcs .9

View File

@ -76,7 +76,7 @@ CS.RUN.READ jsr NSC.Init
rts rts
CS.RUN.SET lda #1 CS.RUN.SET lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)

View File

@ -80,7 +80,7 @@ CS.RUN.IPOK >SYSCALL GetArgC
.2 >PUSHW pData DST.IP .2 >PUSHW pData DST.IP
lda #1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME
bcc CS.RUN.HOSTOK bcc CS.RUN.HOSTOK
@ -89,7 +89,7 @@ CS.RUN.IPOK >SYSCALL GetArgC
bcc .2 bcc .2
lda #1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>LDYA L.MSG.UNKNOWN >LDYA L.MSG.UNKNOWN
bra .99 bra .99
@ -101,7 +101,7 @@ CS.RUN.IPOK >SYSCALL GetArgC
rts rts
CS.RUN.HOSTOK lda #1 CS.RUN.HOSTOK lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
ldy #DST.IP+3 ldy #DST.IP+3

View File

@ -83,7 +83,7 @@ CS.RUN jsr Init.Timeout
.1 >PUSHW L.Socket.Dst.Addr .1 >PUSHW L.Socket.Dst.Addr
lda #1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME >LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME
bcc .2 bcc .2
@ -93,7 +93,7 @@ CS.RUN jsr Init.Timeout
bcc .1 bcc .1
lda #1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>LDYA L.MSG.UNKNOWN >LDYA L.MSG.UNKNOWN
>SYSCALL PrintFYA >SYSCALL PrintFYA
@ -155,7 +155,7 @@ CS.RUN jsr Init.Timeout
rts rts
.99 lda #1 .99 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>LDYA L.MSG.TIMEOUT >LDYA L.MSG.TIMEOUT
>SYSCALL PrintFYA >SYSCALL PrintFYA

View File

@ -54,7 +54,7 @@ CS.INIT >SYSCALL GetArgC
inc ArgIndex inc ArgIndex
lda ArgIndex lda ArgIndex
>SYSCALL GetArgA >SYSCALL GetArg.A
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)

View File

@ -63,8 +63,9 @@ K.MLI.PATH .EQ $03B0 64+1 -> $03D0
*-------------------------------------- *--------------------------------------
*UsrBuf256 .EQ $0C00 Main *UsrBuf256 .EQ $0C00 Main
*-------------------------------------- *--------------------------------------
KrnBuf256 .EQ $0D00 Main K.Buf256 .EQ $0D00 Main
*-------------------------------------- *--------------------------------------
K.STACK .EQ $0F00 Up to $0FFF
*-------------------------------------- *--------------------------------------
*** Z80 Reserved $0F00-10FF*** *** Z80 Reserved $0F00-10FF***
*-------------------------------------- *--------------------------------------
@ -172,7 +173,7 @@ SYS.ChGrp .EQ $0E
SYS.LoadDrvYA .EQ $10 SYS.LoadDrvYA .EQ $10
SYS.LoadLibYA .EQ $12 SYS.LoadLibYA .EQ $12
SYS.UnloadLibA .EQ $14 SYS.UnloadLibA .EQ $14
SYS.LoadExeYA .EQ $16 SYS.LoadBin.YA .EQ $16
SYS.TimeYA .EQ $18 SYS.TimeYA .EQ $18
SYS.CTime2Time .EQ $1A SYS.CTime2Time .EQ $1A
SYS.PTime2Time .EQ $1C SYS.PTime2Time .EQ $1C
@ -231,7 +232,7 @@ SYS.Sleep .EQ $6C
* .EQ $6E * .EQ $6E
*-------------------------------------- *--------------------------------------
SYS.GetArgC .EQ $70 SYS.GetArgC .EQ $70
SYS.GetArgA .EQ $72 SYS.GetArg.A .EQ $72
SYS.ExpandPStrYA .EQ $74 SYS.ExpandPStrYA .EQ $74
* .EQ $76 * .EQ $76
SYS.PutEnvYA .EQ $78 SYS.PutEnvYA .EQ $78

View File

@ -51,7 +51,7 @@ CS.INIT >SYSCALL GetArgC
rts rts
.1 lda #1 .1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>SYSCALL MkNodYA >SYSCALL MkNodYA
bcs .9 bcs .9
@ -64,7 +64,7 @@ CS.INIT >SYSCALL GetArgC
sta (pPs),y sta (pPs),y
lda #2 lda #2
>SYSCALL GetArgA >SYSCALL GetArg.A
bcs .9 bcs .9
>SYSCALL ExpandPStrYA >SYSCALL ExpandPStrYA

View File

@ -48,14 +48,14 @@ CS.INIT >SYSCALL GetArgC
rts rts
.1 lda #1 get PTR to ARG[1] (Driver name) .1 lda #1 get PTR to ARG[1] (Driver name)
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>LDYA L.MSG.LOAD >LDYA L.MSG.LOAD
>SYSCALL PrintFYA >SYSCALL PrintFYA
lda #1 get PTR to ARG[1] (Driver name) lda #1 get PTR to ARG[1] (Driver name)
>SYSCALL GetArgA >SYSCALL GetArg.A
>SYSCALL LoadDrvYA YA = PTR to ARG[1...n] >SYSCALL LoadDrvYA YA = PTR to ARG[1...n]
bcs .99 bcs .99

View File

@ -210,7 +210,7 @@ Cmd.Exec.EXT ldy #1
*-------------------------------------- *--------------------------------------
Cmd.Exec.EXT.TXT Cmd.Exec.EXT.TXT
lda #0 Get arg[0] = /PATH/SHELL lda #0 Get arg[0] = /PATH/SHELL
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>PUSHWI UsrBuf256 >PUSHWI UsrBuf256
>SYSCALL PStrCpy >SYSCALL PStrCpy

View File

@ -113,7 +113,7 @@ CS.INIT jsr SetPWD
>PUSHBI SYS.FOpen.R >PUSHBI SYS.FOpen.R
lda #1 lda #1
>SYSCALL GetArgA >SYSCALL GetArg.A
>PUSHYA >PUSHYA
>SYSCALL LoadFile >SYSCALL LoadFile
bcs .9 bcs .9

View File

@ -25,7 +25,7 @@ K.GetArgC jsr ARG.InitArgPtr1
.8 txa .8 txa
rts rts
*/-------------------------------------- */--------------------------------------
* # GetArgA * # GetArg.A
* ## In: * ## In:
* A = argument index. * A = argument index.
* ## Out: * ## Out:
@ -33,7 +33,7 @@ K.GetArgC jsr ARG.InitArgPtr1
* Y,A = CStr To Arg[A] * Y,A = CStr To Arg[A]
* CS : Out Of Bound * CS : Out Of Bound
*\-------------------------------------- *\--------------------------------------
K.GetArgA sta .2+1 K.GetArg.A sta .2+1
jsr ARG.InitArgPtr1 jsr ARG.InitArgPtr1
lda .2+1 lda .2+1

View File

@ -4,17 +4,151 @@ LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
*-------------------------------------- *--------------------------------------
* BIN.LoadExeYA * K.LoadDrv.YA
* in :
* Y,A = PTR To Full Cmd Line PStrArray
* out :
* none
*--------------------------------------
K.LoadDrv.YA >STYA K.LoadDrv.CmdArray
>LDYAI ENV.DRV push ENVNAME=DRV
>SYSCALL GetEnvYA get value for ENV=DRV
bcs .9
>PUSHYA Push $DRV value
>PUSHW K.LoadDrv.CmdArray (ARG[0] = DRVNAME)
jsr K.FileSearch.I find Driver in $DRV
bcs .9
>LDYAI K.Buf256
jsr K.LoadBin.YA Y,A =filename full path
bcs .9
>STYA pDrv
stx .97+1
>LDYA K.LoadDrv.CmdArray
>STYA ZPPtr1
.1 lda (ZPPtr1) Advance to ARG[1]
beq .2
inc ZPPtr1
bne .1
inc ZPPtr1+1
bra .1
.2 >LDYA ZPPtr1
jsr pDrvJmp call Dev.Detect
bcs .96
jsr BIN.InstallDRV
bcs .96
jsr .96 Cleanup...
lda #0 Make sure RC = 0 if success
clc
.9 rts
.96 pha
.97 lda #$ff
jsr K.FreeMemA
pla
rts
*--------------------------------------
K.LoadDrv.CmdArray .BS 2
*--------------------------------------
* K.LoadLib.YA
* in :
* Y,A = PTR To Lib Name
* out :
* A = hMem To loaded LIB
*--------------------------------------
K.LoadLib.YA >STYA K.LoadLib.Name SAVE LIBname for K.FileSearch
>LDYAI ENV.LIB push ENVNAME=LIB
>SYSCALL GetEnvYA get value for ENV=LIB
bcs .9
>PUSHYA Push $LIB value
>PUSHW K.LoadLib.Name
jsr K.FileSearch.I find libname in $LIB
bcs .9
>LDYAI K.Buf256
jsr K.LoadBin.YA Y,A=filename full path
bcs .9
stx .8+1
>STYA LIB.Jump+1
txa Pass hLib to LibLoad
ldx #LIBMGR.LOAD
jsr LIB.Jump Call LIB.LOAD function
bcs .99
.8 lda #$ff hLib
clc
.9 rts
.99 pha
lda .8+1
jsr K.FreeMemA
pla
sec
rts
*--------------------------------------
K.LoadLib.Name .BS 2
*--------------------------------------
* K.UnloadLib.A
* in :
* A = hMem To Lib
* out :
*--------------------------------------
K.UnloadLib.A pha
jsr K.GetMemByIDA
>STYA ZPPtr1
ldy #S.MEM.REFCNT
lda (ZPPtr1),y Get count of those referencing this lib
dec only one left ?
beq .1
sta (ZPPtr1),y
pla
clc
rts
.1 ldy #S.MEM.PTR
lda (ZPPtr1),y
sta LIB.Jump+1
iny
lda (ZPPtr1),y
sta LIB.Jump+2
ldx #LIBMGR.UNLOAD
jsr LIB.Jump Call LIB.UNLOAD function
pla
jmp K.FreeMemA
LIB.Jump jmp $ffff Self Modiied
*--------------------------------------
* K.LoadBin.YA
* in : * in :
* A = hMem of FilePath (PSTR) * A = hMem of FilePath (PSTR)
* out : * out :
* Y,A = MEMPTR * Y,A = MEMPTR
* X = hMem of Code Segment * X = hMem of Code Segment
*-------------------------------------- *--------------------------------------
K.LoadEXEYA >STYA K.LoadEXEYA.Filename K.LoadBin.YA >STYA K.LoadBin.YA.Filename
>SYSCALL StrUprYA Y,A unmodified
jsr MEM.GetMemByNameYA jsr MEM.GetMemByNameYA
bcs K.LoadEXEYA.1 not already loaded bcs K.LoadBin.YA.1 not already loaded
>STYA ZPPtr1 Save base address >STYA ZPPtr1 Save base address
ldy #S.MEM.REFCNT ldy #S.MEM.REFCNT
@ -25,8 +159,8 @@ K.LoadEXEYA >STYA K.LoadEXEYA.Filename
txa txa
jmp K.GetMemPtrA X=hMem from K.GetMemByNameA jmp K.GetMemPtrA X=hMem from K.GetMemByNameA
*-------------------------------------- *--------------------------------------
K.LoadEXEYA.1 >PUSHWI K.S.STAT K.LoadBin.YA.1 >PUSHWI K.S.STAT
>PUSHW K.LoadEXEYA.Filename >PUSHW K.LoadBin.YA.Filename
jsr K.STAT Look for AUXTYPE jsr K.STAT Look for AUXTYPE
bcs .9 bcs .9
@ -36,12 +170,12 @@ K.LoadEXEYA.1 >PUSHWI K.S.STAT
>PUSHYA Push AUXTYPE >PUSHYA Push AUXTYPE
>PUSHBI 6 S.FILEINFO.TYPE.BIN >PUSHBI 6 S.FILEINFO.TYPE.BIN
>PUSHBI SYS.FOpen.R >PUSHBI SYS.FOpen.R
>PUSHW K.LoadEXEYA.Filename >PUSHW K.LoadBin.YA.Filename
jsr K.LoadFile jsr K.LoadFile
.9 bcs .99 Error Loading file .9 bcs .99 Error Loading file
stx K.LoadEXEYA.hMem save hMem stx K.LoadBin.YA.hMem save hMem
pha YA=CODE+DATA size pha YA=CODE+DATA size
tya tya
@ -78,11 +212,11 @@ K.LoadEXEYA.1 >PUSHWI K.S.STAT
jsr BIN.RelocateEXE jsr BIN.RelocateEXE
>LDYA K.LoadEXEYA.Filename get back bin path >LDYA K.LoadBin.YA.Filename get back bin path
>SYSCALL NewPStrYA make a copy of this string >SYSCALL NewPStrYA make a copy of this string
bcs .98 bcs .98
lda K.LoadEXEYA.hMem Keep X=hMem lda K.LoadBin.YA.hMem Keep X=hMem
jsr K.GetMemByIDA X unmodified jsr K.GetMemByIDA X unmodified
>STYA ZPPtr1 >STYA ZPPtr1
@ -94,28 +228,28 @@ K.LoadEXEYA.1 >PUSHWI K.S.STAT
ldy #S.MEM.BIN ldy #S.MEM.BIN
sta (ZPPtr1),y sta (ZPPtr1),y
lda K.LoadEXEYA.hMem lda K.LoadBin.YA.hMem
tax return hMEM to Caller... tax return hMEM to Caller...
jsr K.GetMemPtrA jsr K.GetMemPtrA
clc ...and Y,A=PTR to CS clc ...and Y,A=PTR to CS
rts rts
.98 pha .98 pha
lda K.LoadEXEYA.hMem lda K.LoadBin.YA.hMem
jsr K.FreeMemA Discard Loaded Code jsr K.FreeMemA Discard Loaded Code
pla pla
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
K.LoadEXEYA.Filename .BS 2 K.LoadBin.YA.Filename .BS 2
K.LoadEXEYA.hMem .BS 1 K.LoadBin.YA.hMem .BS 1
*-------------------------------------- *--------------------------------------
* BIN.InstallDRV * BIN.InstallDRV
* In: * In:
* pDrv = .DRV File Loaded Address * pDrv = .DRV File Loaded Address
* Note: * Note:
* K.LoadEXEYA called from K.LoadDrvYA * K.LoadBin.YA called from K.LoadDrvYA
* Already setup correctly pDrv, * Already setup correctly pDrv,
* BIN.Relocate.Start,End * BIN.Relocate.Start,End
*-------------------------------------- *--------------------------------------

View File

@ -1,10 +0,0 @@
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.CHR
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM

View File

@ -1,10 +0,0 @@
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.CIO
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM

View File

@ -1,10 +0,0 @@
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.CNV
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM

View File

@ -38,7 +38,7 @@ K.OpenDirYA jsr PFT.CheckPathYA
cmp #$0F Directory ? cmp #$0F Directory ?
bne .98 bne .98
jsr FILE.SetIOBUF jsr STDIO.SetIOBUF
bcs .98 bcs .98
@ -102,7 +102,7 @@ K.ReadDirA.ROOT ldy #S.NODE.DIR.FC did we already returned something ?
stz K.MLI.PARAMS+1 All Volumes stz K.MLI.PARAMS+1 All Volumes
>LDYAI KrnBuf256 >LDYAI K.Buf256
>STYA K.MLI.PARAMS+2 >STYA K.MLI.PARAMS+2
>STYA ZPPtr2 >STYA ZPPtr2
>MLICALL MLIONLINE >MLICALL MLIONLINE

View File

@ -4,64 +4,6 @@ LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
*-------------------------------------- *--------------------------------------
* K.LoadDrvYA
* in :
* Y,A = PTR To Full Cmd Line PStrArray
* out :
* none
*--------------------------------------
K.LoadDrvYA >STYA K.LoadDrv.CmdArray
>LDYAI ENV.DRV push ENVNAME=DRV
>SYSCALL GetEnvYA get value for ENV=DRV
bcs .9
>PUSHYA Push $DRV value
>PUSHW K.LoadDrv.CmdArray (ARG[0] = DRVNAME)
jsr K.FileSearch.I find Driver in $DRV
bcs .9
>LDYAI KrnBuf256
jsr K.LoadExeYA Y,A =filename full path
bcs .9
>STYA pDrv
stx .97+1
>LDYA K.LoadDrv.CmdArray Advance to ARG[1]
>STYA ZPPtr1
lda ZPPtr1
sec
adc (ZPPtr1)
sta ZPPtr1
bcc .1
inc ZPPtr1+1
.1 >LDYA ZPPtr1
jsr pDrvJmp call Dev.Detect
bcs .96
jsr BIN.InstallDRV
bcs .96
jsr .96 Cleanup...
lda #0 Make sure RC = 0 if success
clc
.9 rts
.96 pha
.97 lda #$ff
jsr K.FreeMemA
pla
rts
*--------------------------------------
K.LoadDrv.CmdArray .BS 2
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.DRV SAVE /A2OSX.SRC/SYS/KERNEL.S.DRV
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -4,18 +4,54 @@ LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
*/-------------------------------------- */--------------------------------------
* # ExpandPStrYA * # NewPStrYA
* Create a new copy of PSTR
* ## In:
* Y,A = PTR to buffer
* ## Out:
* CC : success
* Y,A = PTR to String
* X = hMem (PSTR)
* CS : error
* A = SYS error code
*\--------------------------------------
K.NewPStr.YA >STYA ZPPtr2
lda (ZPPtr2)
inc
tay
lda #0 Y,A = len of new string
jsr K.GetMemYA
bcs .9
>STYA ZPPtr1
lda (ZPPtr2)
sta (ZPPtr1)
tay
beq .2
.1 lda (ZPPtr2),y
sta (ZPPtr1),y
dey
bne .1
.2 >LDYA ZPPtr1
clc
.9 rts
*/--------------------------------------
* # ExpandPStr.YA
* ## In: * ## In:
* Y,A = PTR to String to Expand (PSTR) * Y,A = PTR to String to Expand (PSTR)
* ## Out: * ## Out:
* X = hMem to Expanded String (PSTR) * X = hMem to Expanded String (PSTR)
* Y,A = PTR to Expanded String * Y,A = PTR to Expanded String
*\-------------------------------------- *\--------------------------------------
K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string... K.ExpandPStr.YA stz K.ExpandPStr.hPStr Reset Intermediate string...
.1 >STYA ZPPtr2 .1 >STYA ZPPtr2
stz KrnBuf256 init Expanded String len=0 stz K.Buf256 init Expanded String len=0
stz K.ExpandPStr.bFound No var found yet stz K.ExpandPStr.bFound No var found yet
stz K.ExpandPStr.bNoExp Reset no expand flag stz K.ExpandPStr.bNoExp Reset no expand flag
@ -43,11 +79,11 @@ K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string...
.21 bit K.ExpandPStr.bNoExp .21 bit K.ExpandPStr.bNoExp
bpl .23 bpl .23
.22 ldx KrnBuf256 .22 ldx K.Buf256
inx inx
beq .8 beq .8
sta KrnBuf256,x sta K.Buf256,x
stx KrnBuf256 stx K.Buf256
bra .11 bra .11
.23 ldx K.ExpandPStr.bInVar already in a var? .23 ldx K.ExpandPStr.bInVar already in a var?
@ -110,8 +146,8 @@ K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string...
jsr K.FreeMemA yes, discard.... jsr K.FreeMemA yes, discard....
.81 >LDYAI KrnBuf256 .81 >LDYAI K.Buf256
jsr K.NewPStrYA jsr K.NewPStr.YA
bcs .9 bcs .9
stx K.ExpandPStr.hPStr save this as temp string, in case of recurse stx K.ExpandPStr.hPStr save this as temp string, in case of recurse
ldx K.ExpandPStr.bFound Did we expand something ? ldx K.ExpandPStr.bFound Did we expand something ?
@ -147,7 +183,7 @@ K.ExpandPStrGetValue
bcc .9 bcc .9
>LDYAI K.ExpandPStr.Name >LDYAI K.ExpandPStr.Name
jsr K.GetEnvYA jsr K.GetEnv.YA
bcs .9 bcs .9
>STYA ZPPtr3 >STYA ZPPtr3
@ -162,52 +198,52 @@ K.ExpandPStr.bFound .BS 1
K.ExpandPStr.hPStr .BS 1 K.ExpandPStr.hPStr .BS 1
K.ExpandPStr.Name .BS 16 K.ExpandPStr.Name .BS 16
*/-------------------------------------- */--------------------------------------
* # PutEnvYA * # PutEnv.YA
* ## In: * ## In:
* Y,A = PTR to String NAME=VALUE (PSTR) * Y,A = PTR to String NAME=VALUE (PSTR)
* ## Out: * ## Out:
*\-------------------------------------- *\--------------------------------------
K.PutEnvYA >STYA ZPPtr1 NAME=VALUE K.PutEnv.YA >STYA ZPPtr1 NAME=VALUE
lda (ZPPtr1) lda (ZPPtr1)
beq .9 beq .9
sta KrnBuf256 sta K.Buf256
tay tay
.1 lda (ZPPtr1),y copy PSTR to KrnBuf256 .1 lda (ZPPtr1),y copy PSTR to K.Buf256
sta KrnBuf256,y sta K.Buf256,y
dey dey
bne .1 bne .1
ldy #0 ldy #0
.2 iny .2 iny
cpy KrnBuf256 last char ? cpy K.Buf256 last char ?
beq .9 no "=" found beq .9 no "=" found
lda KrnBuf256,y lda K.Buf256,y
cmp #'=' cmp #'='
bne .2 bne .2
cpy #1 String like "=value" ? cpy #1 String like "=value" ?
beq .9 beq .9
cpy KrnBuf256 last char ? cpy K.Buf256 last char ?
beq .9 we have "VAR=" beq .9 we have "VAR="
lda KrnBuf256 get actual string len lda K.Buf256 get actual string len
sty KrnBuf256 set length of VAR string sty K.Buf256 set length of VAR string
dec KrnBuf256 ...without "=" dec K.Buf256 ...without "="
clc Substract VAR len+1 from whole len to get clc Substract VAR len+1 from whole len to get
sbc KrnBuf256 VALUE len sbc K.Buf256 VALUE len
sta KrnBuf256,y save it at "=" POS sta K.Buf256,y save it at "=" POS
stz ZPPtr1 #KrnBuf256 stz ZPPtr1 #K.Buf256
sty ZPPtr2 sty ZPPtr2
lda /KrnBuf256 lda /K.Buf256
sta ZPPtr1+1 sta ZPPtr1+1
sta ZPPtr2+1 sta ZPPtr2+1
@ -295,14 +331,14 @@ K.SetEnvPtr1Ptr2
sec sec
rts rts
*/-------------------------------------- */--------------------------------------
* # GetEnvYA * # GetEnv.YA
* ## In: * ## In:
* Y,A = PTR to NAME (PSTR) * Y,A = PTR to NAME (PSTR)
* ## Out: * ## Out:
* CC : Y,A = PTR to VALUE (PSTR) * CC : Y,A = PTR to VALUE (PSTR)
* CS : not found * CS : not found
*\-------------------------------------- *\--------------------------------------
K.GetEnvYA >STYA ZPPtr1 K.GetEnv.YA >STYA ZPPtr1
jsr ENV.FindVarPtr1 jsr ENV.FindVarPtr1
bcs .9 bcs .9
@ -314,12 +350,12 @@ K.GetEnvYA >STYA ZPPtr1
.9 >LDYAI EmptyPSTR .9 >LDYAI EmptyPSTR
rts rts
*/-------------------------------------- */--------------------------------------
* # UnsetEnvYA * # UnsetEnv.YA
* ## In: * ## In:
* Y,A = PTR To Name (PSTR) * Y,A = PTR To Name (PSTR)
* ## Out: * ## Out:
*\-------------------------------------- *\--------------------------------------
K.UnsetEnvYA >STYA ZPPtr1 Store VAR Name K.UnsetEnv.YA >STYA ZPPtr1 Store VAR Name
S.UnsetEnvPtr1 jsr ENV.FindVarPtr1 S.UnsetEnvPtr1 jsr ENV.FindVarPtr1
bcs .8 not found, quit bcs .8 not found, quit
@ -335,7 +371,7 @@ S.UnsetEnvPtr1 jsr ENV.FindVarPtr1
* K.ExpandPStr.Name * K.ExpandPStr.Name
* Out: * Out:
* CC: Found * CC: Found
* Append VALUE to KrnBuf256 * Append VALUE to K.Buf256
* CS: Not Found * CS: Not Found
*-------------------------------------- *--------------------------------------
ENV.ExpandSysVar ENV.ExpandSysVar
@ -350,7 +386,7 @@ ENV.ExpandSysVar
cmp #'9'+1 cmp #'9'+1
bcs .1 bcs .1
and #$0F and #$0F
jsr K.GetArgA jsr K.GetArg.A
bcs .99 bcs .99
>STYA ZPPtr3 >STYA ZPPtr3
@ -383,7 +419,7 @@ ENV.SysVarsJmp .DA ENV.SysVarsArgs
.DA ENV.SysVarsCPID .DA ENV.SysVarsCPID
*-------------------------------------- *--------------------------------------
ENV.SysVarsArgs lda #1 ENV.SysVarsArgs lda #1
jsr K.GetArgA jsr K.GetArg.A
bcs ENV.SysVarsExit2 bcs ENV.SysVarsExit2
>STYA ZPPtr3 >STYA ZPPtr3
@ -396,12 +432,12 @@ ENV.SysVarsArgs lda #1
lda (ZPPtr3) lda (ZPPtr3)
beq ENV.SysVarsExit2 beq ENV.SysVarsExit2
ldx KrnBuf256 ldx K.Buf256
inx inx
beq ENV.SysVarsExit2 make sure not overlapping buf 256 beq ENV.SysVarsExit2 make sure not overlapping buf 256
stx KrnBuf256 stx K.Buf256
lda #' ' lda #' '
sta KrnBuf256,x sta K.Buf256,x
jsr ENV.AppendPtr3ToBuf jsr ENV.AppendPtr3ToBuf
bra .2 bra .2
@ -434,12 +470,12 @@ ENV.SysVarsA sta HEXBUF
cpy #9 Print always last char cpy #9 Print always last char
bne .1 bne .1
.2 ldx KrnBuf256 .2 ldx K.Buf256
.3 inx .3 inx
beq ENV.SysVarsExit2 beq ENV.SysVarsExit2
sta KrnBuf256,x sta K.Buf256,x
iny iny
cpy #10 cpy #10
beq ENV.SysVarsExit beq ENV.SysVarsExit
@ -447,7 +483,7 @@ ENV.SysVarsA sta HEXBUF
lda ASCBUF,y lda ASCBUF,y
bra .3 bra .3
ENV.SysVarsExit stx KrnBuf256 ENV.SysVarsExit stx K.Buf256
ENV.SysVarsExit2 ENV.SysVarsExit2
clc clc
rts rts
@ -539,19 +575,19 @@ ENV.NextEnvPtr3 lda ZPPtr3
*-------------------------------------- *--------------------------------------
ENV.AppendPtr3ToBuf ENV.AppendPtr3ToBuf
ldy #0 ldy #0
ldx KrnBuf256 ldx K.Buf256
.1 iny .1 iny
lda (ZPPtr3),y lda (ZPPtr3),y
inx inx
beq .9 beq .9
sta KrnBuf256,x sta K.Buf256,x
tya tya
cmp (ZPPtr3) last char? cmp (ZPPtr3) last char?
bne .1 bne .1
stx KrnBuf256 stx K.Buf256
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -1,10 +0,0 @@
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.FILE
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM

View File

@ -22,12 +22,12 @@ K.FileSearch >PULLW ZPPtr2 DstBuf
jsr K.FileSearch.I jsr K.FileSearch.I
bcs .9 bcs .9
lda KrnBuf256 lda K.Buf256
sta (ZPPtr2) sta (ZPPtr2)
tay tay
.1 lda KrnBuf256,y .1 lda K.Buf256,y
sta (ZPPtr2),y sta (ZPPtr2),y
dey dey
bne .1 bne .1
@ -44,7 +44,7 @@ K.FileSearch.I >PULLW ZPPtr4 ZPPtr1 trashed by ExpandPStrYA
stz .11+1 stz .11+1
.1 stz KrnBuf256 reset String .1 stz K.Buf256 reset String
ldx #0 ldx #0
.11 ldy #$ff Self Modified .11 ldy #$ff Self Modified
@ -57,7 +57,7 @@ K.FileSearch.I >PULLW ZPPtr4 ZPPtr1 trashed by ExpandPStrYA
cmp #';' cmp #';'
beq .3 beq .3
inx inx
sta KrnBuf256,x sta K.Buf256,x
bra .2 bra .2
.3 txa .3 txa
@ -70,15 +70,15 @@ K.FileSearch.I >PULLW ZPPtr4 ZPPtr1 trashed by ExpandPStrYA
.4 iny .4 iny
lda (ZPPtr4),y Append Fiename... lda (ZPPtr4),y Append Fiename...
inx inx
sta KrnBuf256,x sta K.Buf256,x
tya tya
cmp (ZPPtr4) cmp (ZPPtr4)
bne .4 bne .4
stx KrnBuf256 set string length stx K.Buf256 set string length
>PUSHWI K.S.STAT >PUSHWI K.S.STAT
>PUSHWI KrnBuf256 >PUSHWI K.Buf256
jsr K.STAT jsr K.STAT
bcs .1 Failed...retry next path... bcs .1 Failed...retry next path...
@ -106,7 +106,7 @@ K.GetFullPathYA >STYA ZPPtr3 Ptr1 & 2 used by StrCpy
lda (ZPPtr3) lda (ZPPtr3)
beq K.GetFullPathYA.9 beq K.GetFullPathYA.9
stz KrnBuf256 stz K.Buf256
ldy #1 ldy #1
lda (ZPPtr3),y lda (ZPPtr3),y
@ -117,14 +117,14 @@ K.GetFullPathYA >STYA ZPPtr3 Ptr1 & 2 used by StrCpy
lda (pPs),y lda (pPs),y
jsr K.GetMemPtrA jsr K.GetMemPtrA
>PUSHYA >PUSHYA
>PUSHWI KrnBuf256 >PUSHWI K.Buf256
>SYSCALL PStrCpy >SYSCALL PStrCpy
.1 >PUSHW ZPPtr3 .1 >PUSHW ZPPtr3
>PUSHWI KrnBuf256 >PUSHWI K.Buf256
>SYSCALL PStrCat >SYSCALL PStrCat
K.GetFullPathYA.NewStr K.GetFullPathYA.NewStr
>LDYAI KrnBuf256 >LDYAI K.Buf256
>SYSCALL NewPStrYA >SYSCALL NewPStrYA
rts rts

View File

@ -76,8 +76,8 @@ Kernel.Init2 >LDAXI MSG.Init2
>STYA ZPPtr3 >STYA ZPPtr3
jsr Kernel.Move jsr Kernel.Move
>LDYAI D.STACK.TOP >LDYAI K.STACK
>STYA pStack init Soft Stack >STYA pStack init Soft Stack
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
@ -775,12 +775,12 @@ TskMgrInit >LDYAI TskMgr.Table+S.PS Clear whole process table except PS0
ldy #S.PS.hENV ldy #S.PS.hENV
sta (pPs),y sta (pPs),y
>LDYAI UsrBuf256 >LDYAI K.Buf256
>STYA K.MLI.PARAMS+1 >STYA K.MLI.PARAMS+1
>MLICALL MLIGETPREFIX >MLICALL MLIGETPREFIX
bcs .9 bcs .9
>LDYAI UsrBuf256 >LDYAI K.Buf256
>SYSCALL NewPStrYA >SYSCALL NewPStrYA
bcs .9 bcs .9
@ -788,7 +788,7 @@ TskMgrInit >LDYAI TskMgr.Table+S.PS Clear whole process table except PS0
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
sta (pPs),y sta (pPs),y
>PUSHWI UsrBuf256 push ENV value >PUSHWI K.Buf256 push ENV value
>PUSHWI I.ENV.A2osX push ENV name >PUSHWI I.ENV.A2osX push ENV name
>SYSCALL SetEnv >SYSCALL SetEnv
bcs .9 bcs .9

View File

@ -17,11 +17,11 @@ K.SYSCALL.JMP .DA K.FileSearch $00
.DA K.ChOwn .DA K.ChOwn
.DA K.ChGrp .DA K.ChGrp
*-------------------------------------- *--------------------------------------
.DA K.LoadDrvYA $10 .DA K.LoadDrv.YA $10
.DA K.LoadLibYA .DA K.LoadLib.YA
.DA K.UnloadLibA .DA K.UnloadLib.A
.DA K.LoadExeYA .DA K.LoadBin.YA
.DA K.TimeYA .DA K.Time.YA
.DA K.CTime2Time .DA K.CTime2Time
.DA K.PTime2Time .DA K.PTime2Time
.DA 0 .DA 0
@ -49,18 +49,18 @@ K.SYSCALL.JMP .DA K.FileSearch $00
.DA 0 $40 .DA 0 $40
.DA K.SScanF .DA K.SScanF
.DA 0 .DA 0
.DA K.PrintFYA .DA K.PrintF.YA
.DA K.SPrintFYA .DA K.SPrintF.YA
.DA K.FPrintFYA .DA K.FPrintF.YA
.DA K.AToI .DA K.AToI
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
.DA K.NewPStrYA $50 .DA 0 $50
.DA K.PStrCpy .DA K.StrCpy
.DA K.PStrCat .DA K.StrCat
.DA K.PStrMatch .DA K.StrMatch
.DA K.PStrUprYA .DA K.StrUpr.YA
.DA K.PStrLwrYA .DA K.StrLwr.YA
.DA K.StrFTime .DA K.StrFTime
.DA 0 K.PStr2StrArrayYA .DA 0 K.PStr2StrArrayYA
*-------------------------------------- *--------------------------------------
@ -74,13 +74,13 @@ K.SYSCALL.JMP .DA K.FileSearch $00
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
.DA K.GetArgC $70 .DA K.GetArgC $70
.DA K.GetArgA .DA K.GetArg.A
.DA K.ExpandPStrYA .DA K.ExpandPStr.YA
.DA 0 .DA 0
.DA K.PutEnvYA .DA K.PutEnv.YA
.DA K.SetEnv .DA K.SetEnv
.DA K.GetEnvYA .DA K.GetEnv.YA
.DA K.UnsetEnvYA .DA K.UnsetEnv.YA
*-------------------------------------- *--------------------------------------
.DA K.GetDevByIDA $80 .DA K.GetDevByIDA $80
.DA K.GetDevByNameYA .DA K.GetDevByNameYA

View File

@ -4,82 +4,6 @@ LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
*-------------------------------------- *--------------------------------------
* K.LoadLibYA
* in :
* Y,A = PTR To Lib Name
* out :
* A = hMem To loaded LIB
*--------------------------------------
K.LoadLibYA >STYA K.LoadLib.Name SAVE LIBname for K.FileSearch
>LDYAI ENV.LIB push ENVNAME=LIB
>SYSCALL GetEnvYA get value for ENV=LIB
bcs .9
>PUSHYA Push $LIB value
>PUSHW K.LoadLib.Name
jsr K.FileSearch.I find libname in $LIB
bcs .9
>LDYAI KrnBuf256
jsr K.LoadExeYA Y,A=filename full path
bcs .9
stx .8+1
>STYA LIB.Jump+1
txa Pass hLib to LibLoad
ldx #LIBMGR.LOAD
jsr LIB.Jump Call LIB.LOAD function
bcs .99
.8 lda #$ff hLib
clc
.9 rts
.99 pha
lda .8+1
jsr K.FreeMemA
pla
sec
rts
*--------------------------------------
K.LoadLib.Name .BS 2
*--------------------------------------
* K.UnloadLibA
* in :
* A = hMem To Lib
* out :
*--------------------------------------
K.UnloadLibA pha
jsr K.GetMemByIDA
>STYA ZPPtr1
ldy #S.MEM.REFCNT
lda (ZPPtr1),y Get count of those referencing this lib
dec only one left ?
beq .1
sta (ZPPtr1),y
pla
clc
rts
.1 ldy #S.MEM.PTR
lda (ZPPtr1),y
sta LIB.Jump+1
iny
lda (ZPPtr1),y
sta LIB.Jump+2
ldx #LIBMGR.UNLOAD
jsr LIB.Jump Call LIB.UNLOAD function
pla
jmp K.FreeMemA
LIB.Jump jmp $ffff Self Modiied
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.LIB SAVE /A2OSX.SRC/SYS/KERNEL.S.LIB
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -365,7 +365,7 @@ K.FreeMemA phy
>PUSHYA >PUSHYA
>LDYAI K.FreeMemA.ERR >LDYAI K.FreeMemA.ERR
jsr K.PrintFYA jsr K.PrintF.YA
.91 ldx #$ff .91 ldx #$ff
bit $C000,x bit $C000,x

View File

@ -175,7 +175,7 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS
ldy #S.PS.hPREFIX copy hPREFIX... ldy #S.PS.hPREFIX copy hPREFIX...
lda (pPs),y lda (pPs),y
jsr K.GetMemPtrA jsr K.GetMemPtrA
jsr K.NewPStrYA jsr K.NewPStr.YA
bcs .9 bcs .9
txa txa
@ -232,7 +232,7 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
PS.Init >LDYA K.CreateProcess.CmdLine PS.Init >LDYA K.CreateProcess.CmdLine
jsr PS.PStr2StrArrayYA jsr PS.Str2StrArrayYA
bcs .9 bcs .9
phy save PTR to StrArray... phy save PTR to StrArray...
@ -244,7 +244,7 @@ PS.Init >LDYA K.CreateProcess.CmdLine
pla Restore PTR... pla Restore PTR...
ply ply
>SYSCALL LoadExeYA Y,A=filename full path >SYSCALL LoadBin.YA Y,A=filename full path
bcs .9 bcs .9
>STYA ZPPtr4 save PTR to Code Segment >STYA ZPPtr4 save PTR to Code Segment

View File

@ -92,7 +92,7 @@ RUN.DumpEvent ldy #S.EVT-1
bpl .1 bpl .1
>LDYAI MSG.DumpEvent >LDYAI MSG.DumpEvent
jmp K.PrintFYA jmp K.PrintF.YA
*-------------------------------------- *--------------------------------------
MSG.DumpEvent >CSTR "!Evt:F=%b,Dev=$%h,LO=$%h,HI=$%h,W1=$%H,W2=$%H\n" MSG.DumpEvent >CSTR "!Evt:F=%b,Dev=$%h,LO=$%h,HI=$%h,W1=$%H,W2=$%H\n"
SYS.CPULOADI .BS 1 SYS.CPULOADI .BS 1

79
SYS/KERNEL.S.STAT.txt Normal file
View File

@ -0,0 +1,79 @@
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
*/--------------------------------------
* # Stat
* Return information about a file
* ## In :
* PUSHW = PTR to S.STAT buffer
* PUSHW = PTR to Filename (PSTR)
* ## Out :
*\--------------------------------------
K.Stat jsr PFT.CheckPathSTK
jsr STDIO.PullMLIPath
>PULLW ZPPtr2
>MLICALL MLIGETFILEINFO
bcs .9
ldx K.MLI.PARAMS+S.FILEINFO.ACCESS
lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO
cpx #S.FILEINFO.ACCESS.FULL
beq .2
lda #S.STAT.MODE.XO+S.STAT.MODE.RO
cpx #S.FILEINFO.ACCESS.R
beq .2
lda #0
.2 ldy #S.STAT.MODE
sta (ZPPtr2),y
ldx #K.Stat.DST-K.Stat.SRC
.3 ldy K.Stat.SRC-1,x
lda K.MLI.PARAMS,y
ldy K.Stat.DST-1,x
sta (ZPPtr2),y
dex
bne .3
ldy #S.STAT.SIZE
lda #0
sta (ZPPtr2),y
iny
lda K.MLI.PARAMS+S.FILEINFO.BLOCKSUSED
asl
sta (ZPPtr2),y
iny
lda K.MLI.PARAMS+S.FILEINFO.BLOCKSUSED+1
rol
sta (ZPPtr2),y
iny
lda #0
rol
sta (ZPPtr2),y
clc
.9 rts
*--------------------------------------
K.Stat.SRC .DA #S.FILEINFO.TYPE
.DA #S.FILEINFO.AUXTYPE,#S.FILEINFO.AUXTYPE+1
.DA #S.FILEINFO.BLOCKSUSED,#S.FILEINFO.BLOCKSUSED+1
K.Stat.DST .DA #S.STAT.P.TYPE
.DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
.DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.STAT
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM

View File

@ -4,6 +4,402 @@ LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
*/-------------------------------------- */--------------------------------------
* # FOpen
* Open a file
* ## In :
* PUSHW = AUXTYPE
* PUSHB = TYPE
* PUSHB = MODE
* SYS.FOpen.R : if R and !exists -> ERROR
* SYS.FOpen.W : if W and !exists -> CREATE
* SYS.FOpen.A : Append
* SYS.FOpen.T : Open/Append in Text mode
* SYS.FOpen.X : Create if not exists
* PUSHW = PATH (PSTR)
* ## Out :
* CC : A = hFILE
* CS : A = EC
*\--------------------------------------
K.FOpen jsr PFT.CheckPathSTK
jsr STDIO.PullMLIPath
>PULLB K.FOpen.MODE
>PULLB K.FOpen.TYPE
>PULLW K.FOpen.AUXTYPE
>MLICALL MLIGETFILEINFO
bcc K.FOpen.10 Already Exists
bit K.FOpen.MODE Create if not exists ?
bpl K.FOpen.9 No, return MLI error
lda #S.FILEINFO.ACCESS.FULL Yes, Create...
sta K.MLI.PARAMS+3 Access
lda K.FOpen.TYPE
sta K.MLI.PARAMS+4 File type
>LDYA K.FOpen.AUXTYPE
>STYA K.MLI.PARAMS+5 Aux type
lda #S.FILEINFO.STORETYPE.STD
sta K.MLI.PARAMS+7
ldx #3
.1 lda DATELO,x
sta K.MLI.PARAMS+8,x
dex
bpl .1
>MLICALL MLICREATE
bcc K.FOpen.10
K.FOpen.9 rts
K.FOpen.10 >LDYAI S.NODE.REG
jsr K.GetMem0YA
bcs K.FOpen.9
>STYA ZPPtr1
stx hFILE
jsr STDIO.SetIOBUF
bcs .98
>MLICALL MLIOPEN
bcs .98
lda K.MLI.PARAMS+5 get ref_num
ldy #S.NODE.REG.REF
sta (ZPPtr1),y
sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based
lda K.FOpen.MODE
bit #SYS.FOpen.W
beq .20 Write mode ?
and #SYS.FOpen.A Append ?
bne .11 yes, go to end of file
stz K.MLI.PARAMS+2
stz K.MLI.PARAMS+3
stz K.MLI.PARAMS+4
>MLICALL MLISETEOF no, reset size to 0
bcs .98
bra .20
.11 >MLICALL MLIGETEOF
bcs .98
>MLICALL MLISETMARK
bcs .98
.20 lda K.FOpen.MODE
and #SYS.FOpen.T Text Mode ?
beq .30
lda #$FF
sta K.MLI.PARAMS+2
lda #$0D
sta K.MLI.PARAMS+3
>MLICALL MLINEWLINE
.30 ldy #S.NODE.T
lda #S.NODE.T.REG
sta (ZPPtr1),y
lda hFILE
clc
rts CC
.98 pha save MLI error
lda hFILE
jsr K.FCloseA.1
pla get back MLI error
sec
rts
*--------------------------------------
K.FOpen.MODE .BS 1
K.FOpen.TYPE .BS 1
K.FOpen.AUXTYPE .BS 2
hFILE .BS 1
*/--------------------------------------
* # FCloseA
* Close a file
* ## In :
* A = hFILE
* ## Out :
*\--------------------------------------
K.FCloseA jsr PFT.CheckNodeA
pha
jsr K.GetMemPtrA
>STYA ZPPtr1
pla
K.FCloseA.1 sta K.FCloseA.2+1
ldy #S.NODE.REG.REF
lda (ZPPtr1),y
beq .1
sta K.MLI.PARAMS+1
>MLICALL MLICLOSE
.1 ldy #S.NODE.REG.IOBUF
lda (ZPPtr1),y
beq K.FCloseA.2
jsr K.FreeMemA
K.FCloseA.2 lda #$ff Self Modified
jmp K.FreeMemA
*/--------------------------------------
* # FReadA
* Read ONE byte from file
* ## In :
* A = hFILE
* ## Out :
* A = Byte Read
*\--------------------------------------
K.FReadA jsr PFT.CheckNodeA
ldx #MLIREAD
bra K.FReadWrite.0
*/--------------------------------------
* # FWriteAY
* ## In:
* A = hFILE
* Y = char
* # Out:
* Y,A = Bytes Written
*\--------------------------------------
K.FWriteAY jsr PFT.CheckNodeA
sty K.FWriteAY.Buf
ldx #MLIWRITE
K.FReadWrite.0 jsr STDIO.GetRefNum
>LDYAI K.FWriteAY.Buf
>STYA K.MLI.PARAMS+2
lda #1
sta K.MLI.PARAMS+4
stz K.MLI.PARAMS+5
lda #4 Param Count = 4 for MLIREAD & MLIWRITE
jsr A2osX.MLICALL
bcs .9
lda K.FWriteAY.Buf
.9 rts
K.FWriteAY.Buf .BS 1
*/--------------------------------------
* # FRead
* Read bytes from file
* ## In :
* PUSHW = Dest Ptr
* PUSHW = Bytes To Read
* PUSHB = hFILE
* ## Out :
* Y,A = Bytes Read
*\--------------------------------------
K.FRead jsr PFT.CheckNodeSTK
ldx #MLIREAD
bra K.FReadWrite.1
*/--------------------------------------
* # FWrite
* ## In:
* PUSHW = Src Ptr
* PUSHW = Bytes To Write
* PUSHB = hFILE
* # Out:
* Y,A = Bytes Written
*\--------------------------------------
K.FWrite jsr PFT.CheckNodeSTK
ldx #MLIWRITE
K.FReadWrite.1 >PULLA
jsr STDIO.GetRefNum
>PULLW K.MLI.PARAMS+4
>PULLW K.MLI.PARAMS+2
lda #4 Param Count = 4 for MLIREAD & MLIWRITE
jsr A2osX.MLICALL
bcs .9
>LDYA K.MLI.PARAMS+6
.9 rts
*/--------------------------------------
* # FFlushA
* ## In:
* A = hFILE
*\--------------------------------------
K.FFlushA jsr PFT.CheckNodeA
jsr STDIO.GetRefNum
>MLICALL MLIFLUSH
rts
*/-------------------------------------
* # FSeek
* ## In:
* PUSHW = OffsetHi
* PUSHW = OffsetLo
* PUSHB = From
* PUSHB = hFILE
*\-------------------------------------
K.FSeek jsr PFT.CheckNodeSTK
>PULLA
jsr STDIO.GetRefNum
>PULLA FROM
tax
>PULLW K.FSeek.OFFSET
>PULLW K.FSeek.OFFSET+2
cpx #SYS.FSeek.SET
bne .1
stz K.MLI.PARAMS+2
stz K.MLI.PARAMS+3
stz K.MLI.PARAMS+4
bra .8
.1 cpx #SYS.FSeek.CUR
bne .2
>MLICALL MLIGETMARK
bcc .8
rts
.2 cpx #SYS.FSeek.END
bne .98
>MLICALL MLIGETEOF
bcs .9
.8 ldx #0
ldy #3
clc
.81 lda K.MLI.PARAMS+2,x
adc K.FSeek.OFFSET,x
sta K.MLI.PARAMS+2,x
inx
dey
bne .81
bcs .99 Offset out of range!
>MLICALL MLISETMARK
.9 rts
.98 lda #SYSMGR.ERRSYN
.HS 2C bit abs
.99 lda #SYSMGR.ERRFTB
sec
rts
*--------------------------------------
K.FSeek.OFFSET .BS 4
*/--------------------------------------
* # FTellA
* ## In:
* A = hFILE
* ## Out:
* Y,A,X = Offset
*\--------------------------------------
K.FTellA jsr PFT.CheckNodeA
K.FTellA.1 jsr STDIO.GetRefNum
>MLICALL MLIGETMARK
bcs .9
>LDYA K.MLI.PARAMS+2
ldx K.MLI.PARAMS+4
.9 rts
*/--------------------------------------
* # FEOFA
* ## In:
* A = hFILE
* ## Out:
* CC :
* A=0 EOF
* A !=0 NOT EOF
* CS :
*\--------------------------------------
K.FEOFA jsr PFT.CheckNodeA
jsr STDIO.GetRefNum
jsr K.FTellA.1
bcs .9
>STYA K.FEOFA.MARK
stx K.FEOFA.MARK+2
>MLICALL MLIGETEOF
bcs .9
sec
lda K.MLI.PARAMS+2
sbc K.FEOFA.MARK
bne .8
lda K.MLI.PARAMS+3
sbc K.FEOFA.MARK+1
bne .8
lda K.MLI.PARAMS+4
sbc K.FEOFA.MARK+2
.8 clc
.9 rts
K.FEOFA.MARK .BS 3
*/--------------------------------------
* # RemoveYA
*\--------------------------------------
K.RemoveYA jsr PFT.CheckPathYA
jsr STDIO.PullMLIPath
>MLICALL MLIDESTROY
rts
*/--------------------------------------
* # Rename
* Rename a file
* ## In :
* PUSHW = New Name
* PUSHW = Old Name
* ## Out :
*\--------------------------------------
K.Rename jsr PFT.CheckPathSTK
jsr STDIO.PullMLIPath
>PULLW .1+1
ldy #0
.1 lda $ffff,y Self Modified
beq .8
iny
sta K.Buf256,y
cpy #MLI.MAXPATH
bne .1
.8 sty K.Buf256
>LDYAI K.Buf256
>STYA K.MLI.PARAMS+3
>MLICALL MLIRename
rts
*--------------------------------------
STDIO.PullMLIPath
>PULLW .1+1
ldy #0
.1 lda $ffff,y Self Modified
beq .8
iny
sta K.MLI.PATH,y
cpy #MLI.MAXPATH
bne .1
.8 sty K.MLI.PATH
>LDYAI K.MLI.PATH
>STYA K.MLI.PARAMS+1
rts
*--------------------------------------
STDIO.SetIOBUF >PUSHWI 1024 get a ProDOS IOBUF
>PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE
jsr K.GetMem
bcs .9
>STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa
ldy #S.NODE.REG.IOBUF
sta (ZPPtr1),y
.9 rts
*--------------------------------------
STDIO.GetRefNum jsr K.GetMemPtrA
>STYA ZPPtr1
ldy #S.NODE.REG.REF
lda (ZPPtr1),y
sta K.MLI.PARAMS+1
rts
*/--------------------------------------
* # FPutCAY * # FPutCAY
* Print A (char) to File * Print A (char) to File
* ## In: * ## In:
@ -331,15 +727,15 @@ K.SScanF.IsDigit
.1 sec .1 sec
rts rts
*/-------------------------------------- */--------------------------------------
* # PrintFYA/SPrintFYA/FPrintFYA * # PrintF.YA/SPrintF.YA/FPrintF.YA
* Prints C-Style String * Prints C-Style String
* ## In: * ## In:
* PrintFYA : * PrintF.YA :
* Y,A = PTR to CStr * Y,A = PTR to CStr
* SPrintFYA : * SPrintF.YA :
* Y,A = PTR to CStr * Y,A = PTR to CStr
* PULLW = Ptr to Dst Buffer * PULLW = Ptr to Dst Buffer
* FPrintFYA : * FPrintF.YA :
* Y,A = PTR to CStr * Y,A = PTR to CStr
* PULLB = hNode * PULLB = hNode
* ## Out: * ## Out:
@ -378,12 +774,12 @@ K.SScanF.IsDigit
* %011s : 'ABCDEFGH000' * %011s : 'ABCDEFGH000'
* %2f : '3.14' * %2f : '3.14'
*\-------------------------------------- *\--------------------------------------
K.SPrintFYA >STYA ZPPtr1 K.SPrintF.YA >STYA ZPPtr1
>PULLW Printf.Cout.Ptr+1 >PULLW Printf.Cout.Ptr+1
K.FPrintFYA >STYA ZPPtr1 K.FPrintF.YA >STYA ZPPtr1
K.PrintFYA >STYA ZPPtr1 K.PrintF.YA >STYA ZPPtr1
ldy #0 ldy #0
@ -730,24 +1126,6 @@ Printf.Cout jmp K.PutCharA
Printf.Cout.Ptr sta $ffff Self modified Printf.Cout.Ptr sta $ffff Self modified
*-------------------------------------- *--------------------------------------
FILE.SetIOBUF >PUSHWI 1024 get a ProDOS IOBUF
>PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE
jsr K.GetMem
bcs .9
>STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa
ldy #S.NODE.REG.IOBUF
sta (ZPPtr1),y
.9 rts
*--------------------------------------
FILE.SetupPrt1A jsr K.GetMemPtrA
>STYA ZPPtr1
ldy #S.NODE.REG.REF
lda (ZPPtr1),y
sta K.MLI.PARAMS+1
rts
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.STDIO SAVE /A2OSX.SRC/SYS/KERNEL.S.STDIO
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -1,10 +0,0 @@
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.STR
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM

View File

@ -143,16 +143,16 @@ K.StrMatch jsr PullPtr1Ptr2
.9 sec .9 sec
rts rts
*/-------------------------------------- */--------------------------------------
* # StrUprYA/StrLwrYA * # StrUpr.YA/StrLwr.YA
* Convert string to UPPERCASE/lowercase * Convert string to UPPERCASE/lowercase
* ## In: * ## In:
* Y,A = PTR to String (CSTR) * Y,A = PTR to String (CSTR)
* ## Out: * ## Out:
* Uppercased/lowercased String in Buffer * Uppercased/lowercased String in Buffer
*\-------------------------------------- *\--------------------------------------
K.StrUprYA ldx #0 K.StrUpr.YA ldx #0
.HS 2C bit abs .HS 2C bit abs
K.StrLwrYA ldx #2 K.StrLwr.YA ldx #2
>STYA ZPPtr1 >STYA ZPPtr1
pha save Y,A to restore them at exit pha save Y,A to restore them at exit
@ -163,9 +163,9 @@ K.StrLwrYA ldx #2
.1 lda (ZPPtr1),y .1 lda (ZPPtr1),y
beq .8 beq .8
cmp K.PStrUprLwr,x cmp .9,x
bcc .2 bcc .2
cmp K.PStrUprLwr+1,x cmp .9+1,x
bcs .2 bcs .2
eor #$20 eor #$20
sta (ZPPtr1),y sta (ZPPtr1),y
@ -178,7 +178,7 @@ K.StrLwrYA ldx #2
pla pla
rts rts
*-------------------------------------- *--------------------------------------
K.PStrUprLwr .AS "azAZ" .9 .AS "azAZ"
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.STRING SAVE /A2OSX.SRC/SYS/KERNEL.S.STRING

View File

@ -11,13 +11,13 @@ CENTURY0 .EQ 19
YEAR0 .EQ 70 YEAR0 .EQ 70
DAY0 .EQ 4 day 0 was a thursday DAY0 .EQ 4 day 0 was a thursday
*-------------------------------------- *--------------------------------------
* K.TimeYA get System Time * K.Time.YA get System Time
* In : * In :
* Y,A = PTR to S.TIME * Y,A = PTR to S.TIME
* Out : * Out :
* S.TIME filled with System date/time * S.TIME filled with System date/time
*-------------------------------------- *--------------------------------------
K.TimeYA >STYA ZPPtr2 K.Time.YA >STYA ZPPtr2
>MLICALL MLIGETTIME >MLICALL MLIGETTIME
>LDYAI DATELO >LDYAI DATELO
>STYA ZPPtr1 >STYA ZPPtr1
@ -618,6 +618,6 @@ K.StrFTime.BIN .BS 1
K.StrFTime.DEC .BS 1 always < 100 K.StrFTime.DEC .BS 1 always < 100
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.Time SAVE /A2OSX.SRC/SYS/KERNEL.S.TIME
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM ASM

View File

@ -28,24 +28,22 @@ A2osX.GP .PH $BD00
.EP .EP
A2osX.D1 .PH $D000 A2osX.D1 .PH $D000
.DA #RRAMWRAMBNK1 .DA #RRAMWRAMBNK1
.INB /A2OSX.SRC/SYS/KERNEL.S.STDIO
.INB /A2OSX.SRC/SYS/KERNEL.S.STAT
.INB /A2OSX.SRC/SYS/KERNEL.S.FIO .INB /A2OSX.SRC/SYS/KERNEL.S.FIO
.INB /A2OSX.SRC/SYS/KERNEL.S.DRV
.INB /A2OSX.SRC/SYS/KERNEL.S.LIB
.INB /A2OSX.SRC/SYS/KERNEL.S.TIME .INB /A2OSX.SRC/SYS/KERNEL.S.TIME
.INB /A2OSX.SRC/SYS/KERNEL.S.FILE
.INB /A2OSX.SRC/SYS/KERNEL.S.DIR .INB /A2OSX.SRC/SYS/KERNEL.S.DIR
.INB /A2OSX.SRC/SYS/KERNEL.S.PFT .INB /A2OSX.SRC/SYS/KERNEL.S.PFT
.INB /A2OSX.SRC/SYS/KERNEL.S.BIN .INB /A2OSX.SRC/SYS/KERNEL.S.BIN
.EP .EP
A2osX.D2 .PH $D000 A2osX.D2 .PH $D000
.DA #RRAMWRAMBNK2 .DA #RRAMWRAMBNK2
.INB /A2OSX.SRC/SYS/KERNEL.S.CIO .INB /A2OSX.SRC/SYS/KERNEL.S.STRING
.INB /A2OSX.SRC/SYS/KERNEL.S.STR .INB /A2OSX.SRC/SYS/KERNEL.S.STDLIB
.INB /A2OSX.SRC/SYS/KERNEL.S.DEV .INB /A2OSX.SRC/SYS/KERNEL.S.DEV
.INB /A2OSX.SRC/SYS/KERNEL.S.PS .INB /A2OSX.SRC/SYS/KERNEL.S.PS
.INB /A2OSX.SRC/SYS/KERNEL.S.ARG .INB /A2OSX.SRC/SYS/KERNEL.S.ARG
.INB /A2OSX.SRC/SYS/KERNEL.S.ENV .INB /A2OSX.SRC/SYS/KERNEL.S.ENV
.INB /A2OSX.SRC/SYS/KERNEL.S.CNV
.INB /A2OSX.SRC/SYS/KERNEL.S.RUN .INB /A2OSX.SRC/SYS/KERNEL.S.RUN
.INB /A2OSX.SRC/SYS/KERNEL.S.EVT .INB /A2OSX.SRC/SYS/KERNEL.S.EVT
.INB /A2OSX.SRC/SYS/KERNEL.S.TSK .INB /A2OSX.SRC/SYS/KERNEL.S.TSK
@ -55,7 +53,6 @@ A2osX.E0 .PH $E000
.INB /A2OSX.SRC/SYS/KERNEL.S.DAT .INB /A2OSX.SRC/SYS/KERNEL.S.DAT
.INB /A2OSX.SRC/SYS/KERNEL.S.IRQ .INB /A2OSX.SRC/SYS/KERNEL.S.IRQ
.INB /A2OSX.SRC/SYS/KERNEL.S.MEM .INB /A2OSX.SRC/SYS/KERNEL.S.MEM
.INB /A2OSX.SRC/SYS/KERNEL.S.CHR
.INB /A2OSX.SRC/SYS/KERNEL.S.D01 .INB /A2OSX.SRC/SYS/KERNEL.S.D01
.EP .EP
A2osX.E0.E .EQ * A2osX.E0.E .EQ *