Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2019-07-29 17:38:55 +02:00
parent 1eaef24566
commit 61f832d23a
18 changed files with 564 additions and 567 deletions

View File

@ -158,7 +158,7 @@ SEEK.END .EQ $02
*--------------------------------------
* A2osX.SYSCALL Functions Indexes
*--------------------------------------
SYS.GetMemStat .EQ $00
* .EQ $00
SYS.ChMod .EQ $02
SYS.FStat .EQ $04
SYS.Stat .EQ $06
@ -215,8 +215,8 @@ SYS.FPrintF .EQ $5C
* .EQ $60
SYS.ChTyp .EQ $62
SYS.LoadFile .EQ $64
SYS.LoadTxtFile .EQ $66
* .EQ $64
* .EQ $66
* .EQ $68
* .EQ $6A
@ -256,9 +256,9 @@ SYS.ExecV .EQ $A2
* .EQ $A4
SYS.Kill .EQ $A6
* .EQ $A8
* .EQ $AA
* .EQ $AC
SYS.LoadFile .EQ $A8
SYS.LoadTxtFile .EQ $AA
SYS.GetMemStat .EQ $AC
* .EQ $AE
SYS.Args2ArgV .EQ $B0

View File

@ -158,8 +158,7 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE
>PUSHBI O.RDONLY
>LDYAI K.Buf256
ldx #SYS.LoadFile
jsr K.SYSCALL2.BANK BANK1!!!
jsr K.LoadFile
bcs BIN.Load.Cleanup.RTS Error Loading file
stx BIN.hMem save hMem

View File

@ -110,7 +110,7 @@ K.Buf256 .EQ $1100
K.IOBuf .EQ $1200
*--------------------------------------
Mem.MHiMem .EQ A2osX.SYSCALL
Mem.XHiMem .EQ $C000
Mem.XHiMem .EQ A2osX.SYSCALL
DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC
*--------------------------------------
H.BIN.T .EQ 0

View File

@ -26,128 +26,6 @@ K.ChTyp jsr PFT.CheckPathYA
.99 >RET 1 discard filetype
*/--------------------------------------
* # LoadTxtFile
* Load TXT a file in memory (with ending 0)
* ## C
* `int loadtxtfile ( const char * filename, short int flags, short int ftype, int auxtype );`
* ## ASM
* **In:**
* `>PUSHW auxtype`
* `>PUSHB ftype`
* `>PUSHB flags`
* `>LDYA filename`
* `>SYSCALL loadtxtfile`
* ## RETURN VALUE
* Y,A = File Length (without ending 0)
* X = hMem of Loaded File
*\--------------------------------------
.DUMMY
.OR ZPTMP 5 Bytes
FIO.bTXT .BS 1
FIO.hFILE .BS 1
FIO.MemPtr .BS 2
FIO.hMem .BS 1
.ED
*--------------------------------------
K.LoadTxtFile sec
.HS 90 BCC
*/--------------------------------------
* # LoadFile
* Load a file in memory
* ## C
* `int loadfile ( const char * filename, short int flags, short int ftype, int auxtype );`
* ## ASM
* **In:**
* `>PUSHW auxtype`
* `>PUSHB ftype`
* `>PUSHB flags`
* `>LDYA filename`
* `>SYSCALL loadfile`
* ## RETURN VALUE
* Y,A = File Length
* X = hMem of Loaded File
*\--------------------------------------
K.LoadFile clc
ror FIO.bTXT
jsr K.FOpen
bcs .9
.12 sta FIO.hFILE
pha
>PUSHWI K.S.Stat
pla
jsr K.FStat
bcs .11
lda K.S.Stat+S.STAT.SIZE+3
ora K.S.Stat+S.STAT.SIZE+2
bne .10
>LDYA K.S.Stat+S.STAT.SIZE
bit FIO.bTXT Add 1 to buffer size for ending 0
bpl .1
iny
bne .1
inc
bne .1
.10 lda #E.FTB
.11 bra .99
.1 jsr K.GetMem
bcs .99
>STYA FIO.MemPtr
stx FIO.hMem
>PUSHW K.S.Stat+S.STAT.SIZE
>PUSHW FIO.MemPtr
lda FIO.hFILE
jsr K.FRead
bcc .2
pha
lda FIO.hMem
jsr K.FreeMem
pla
.99 pha
lda FIO.hFILE
jsr K.FClose
pla
sec
.9 rts
.2 sty .7+1
sta .8+1
bit FIO.bTXT
bpl .5
pha set ending 0
tya
* clc
adc FIO.MemPtr
sta .4+1
pla
adc FIO.MemPtr+1
sta .4+2
.4 stz $ffff Self Modified
.5 jsr .99 close file
.7 ldy #$ff SELFMODIFIED
.8 lda #$ff SELFMODIFIED
ldx FIO.hMem
clc
rts
*/--------------------------------------
* # ChOwn
* **In:**
* PUSHW = mod

20
SYS/KERNEL.S.GPX.txt Normal file
View File

@ -0,0 +1,20 @@
NEW
AUTO 3,1
*--------------------------------------
* SYSCALL (AUXLC to AUXLC)
* Used by user & kernel for inter bank Calls
* In:
* X = SYSfnc.Index
* Y,A = free for Inline param
*--------------------------------------
sta CLRREADAUX
sta CLRWRITEAUX
jsr K.SYSCALL2
sta SETREADAUX
sta SETWRITEAUX
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.GPX
LOAD USR/SRC/SYS/KERNEL.S
ASM

View File

@ -46,6 +46,15 @@ Kernel.Init2 sei
jsr Kernel.Move
>LDYAI A2osX.GPX
>STYA A1L Src Start Address (MAIN)
>LDYAI A2osX.D1
>STYA A2L Src End Address (MAIN)
>LDYAI A2osX.SYSCALL
>STYA A4L Dst Address (AUX)
sec Main To Aux
jsr AuxMove
sta SETALTZP
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2

View File

@ -1,71 +1,6 @@
NEW
AUTO 3,1
*--------------------------------------
IO.OPEN.REG >MLICALL MLIGETFILEINFO
bcc IO.OPEN.REG.E Already Exists
bit IO.Open.FLAGS Create if not exists ?
bpl IO.OPEN.RTS No, return MLI error
ldx #2 Yes, Create...
.1 lda IO.Open.TYPE,x
sta K.MLI.PARAMS+4,x File type,Aux type
dex
bpl .1
lda #S.FI.ST.STD
jsr IO.MLI.CREATE
bcs IO.OPEN.RTS
IO.OPEN.REG.E ldx #0
jsr IO.MkFD
bcs IO.OPEN.RTS
jsr IO.MLI.OPEN
bcs IO.OPEN.ERR
lda IO.Open.FLAGS
bit #O.WRONLY
beq .20 Write mode ?
and #O.APPEND 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
bra .21
.11 >MLICALL MLIGETEOF
bcs IO.OPEN.ERR
>MLICALL MLISETMARK
.21 bcs IO.OPEN.ERR
.20 lda IO.Open.FLAGS
and #O.TEXT Text Mode ?
beq .8
lda #$FF
sta K.MLI.PARAMS+2
lda #C.CR
sta K.MLI.PARAMS+3
>MLICALL MLINEWLINE
bcs IO.OPEN.ERR
.8 lda IO.hFD
IO.OPEN.RTS rts
IO.OPEN.ERR pha Save Error Code
lda IO.hFD
jsr K.Close
pla
sec
rts
*--------------------------------------
IO.OPEN.CDEV
IO.OPEN.BDEV jsr K.IOCTL.GetPDrv
@ -358,9 +293,7 @@ IO.MLI.OPEN >LDYAI 1024 get a ProDOS IOBUF
* clc
.9 rts
*--------------------------------------
IO.DEVDIR .EQ * "/DEV/"
*--------------------------------------
STAT.FIFO .AS "/DEV/FIFO"
IO.DEV.FIFO .AS "/DEV/FIFO"
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.IO

View File

@ -5,7 +5,7 @@ NEW
*--------------------------------------
* Bank 1
*--------------------------------------
K.SYSCALL .DA K.GetMemStat $00
K.SYSCALL .DA 0 $00
.DA K.ChMod
.DA K.FStat
.DA K.Stat
@ -61,8 +61,8 @@ K.SYSCALL .DA K.GetMemStat $00
.DA 0 $60
.DA K.ChTyp
.DA K.LoadFile
.DA K.LoadTxtFile
.DA 0
.DA 0
.DA 0
.DA 0
.DA K.ChOwn
@ -101,9 +101,9 @@ K.SYSCALL .DA K.GetMemStat $00
.DA K.ExecV
.DA 0
.DA K.Kill
.DA 0
.DA 0
.DA 0
.DA K.LoadFile
.DA K.LoadTxtFile
.DA K.GetMemStat
.DA 0
.DA K.Args2ArgV $B0
@ -381,11 +381,11 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
.DA #RRAMWRAMBNK2
.DA #$80
.DA #RRAMWRAMBNK2 $D0
.DA #$C0 $D0 : PWD
.DA #$80
.DA #RRAMWRAMBNK2
.DA #$C0 PWD
.DA #$80
.DA #RRAMWRAMBNK2
.DA #$C0 PWD
.DA #$80
.DA #RRAMWRAMBNK2
.DA #$80
@ -415,21 +415,21 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
.DA #$C0 FreeStkObj
.DA #$80
*--------------------------------------
.DA #0 $F0 : SLIST
.DA #$C0 $F0 : SLIST
.DA #$80
.DA #0
.DA #$C0
.DA #$80
.DA #0
.DA #$C0
.DA #$80
.DA #0
.DA #$C0
.DA #$80
.DA #0
.DA #$C0
.DA #$80
.DA #0
.DA #$C0
.DA #$80
.DA #0
.DA #$C0
.DA #$80
.DA #0
.DA #$C0
.DA #$80
*--------------------------------------
K.SYSCALL2 bit K.SYSCALL.BANK,x Get Target BNK

View File

@ -4,7 +4,6 @@ NEW
* http://6502.org/source/integers/32muldiv.htm
* http://nparker.llx.com/a2/mult.html
*--------------------------------------
*--------------------------------------
* ARG32*ACC32->TMP32
*--------------------------------------
MATH.MUL32 jsr MATH.TMP32ZERO

View File

@ -275,7 +275,7 @@ K.FreeMem.ERR phx
jsr K.SYSCALL2.BANK
plx
lda #E.INVH
>DEBUG
>DEBUGOA
sec
rts
*--------------------------------------
@ -393,121 +393,6 @@ Mem.DecRefCnt ldy #S.MEM.REFCNT
dec
sta (ZPMemMgrSPtr),y
rts
*--------------------------------------
ZPSListKeyID .EQ ZPMEMMGR+6
ZPSListDataPtr .EQ ZPMEMMGR+8
ZPSListDataLen .EQ ZPMEMMGR+10
ZPSListIBlkPtr .EQ ZPMEMMGR+12
ZPSListDBlkPtr .EQ ZPMEMMGR+14
*/--------------------------------------
* # SListGetData
* ## ASM
* `PUSHW DataOfs`
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListGetData`
* ## RETURN VALUE
* Y,A = Byte Count
* X = hMem (if DataPtr = 0)
*\--------------------------------------
K.SListGetData pha
>PULLW ZPSListKeyID
>PULLW ZPSListDataPtr
>PULLW ZPSListDataLen
>PULLW ZPMemMgrSize
pla
bra K.SListFree
*/--------------------------------------
* # SListAddData
* ## ASM
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListAddData`
* ## RETURN VALUE
*\--------------------------------------
K.SListAddData
*/--------------------------------------
* # SListSetData
* ## ASM
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListSetData`
* ## RETURN VALUE
*\--------------------------------------
K.SListSetData pha
>PULLW ZPSListKeyID
>PULLW ZPSListDataPtr
>PULLW ZPSListDataLen
pla
bra K.SListFree
*/--------------------------------------
* # SListGetByID
* ## ASM
* `PUSHW KeyPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListGetByID`
* ## RETURN VALUE
* Y,A = Next KeyID
*\--------------------------------------
K.SListGetByID pha
>PULLW ZPSListKeyID
>PULLW ZPSListDataPtr
pla
bra K.SListFree
*/--------------------------------------
* # SListNewKey
* ## ASM
* `PUSHW KeyPtr`
* `lda hSList`
* `>SYSCALL SListNewKey`
* ## RETURN VALUE
* Y,A = KeyID
* X = KeyLen
*\--------------------------------------
K.SListNewKey
*/--------------------------------------
* # SListLookup
* ## ASM
* `PUSHW KeyPtr`
* `lda hSList`
* `>SYSCALL SListLookup`
* ## RETURN VALUE
* Y,A = KeyID
* X = Key Length
*\--------------------------------------
K.SListLookup pha
>PULLW ZPSListDataPtr
pla
*/--------------------------------------
* # SListNew
* ## ASM
* `>SYSCALL SListNew`
* ## RETURN VALUE
* A=hSList
*\--------------------------------------
K.SListNew
*/--------------------------------------
* # SListFree
* ## ASM
* `lda hSList`
* `>SYSCALL SListFree`
* ## RETURN VALUE
*\--------------------------------------
K.SListFree sta SETREADAUX
sta SETWRITEAUX
jsr X.SLIST
sta CLRREADAUX
sta CLRWRITEAUX
rts
*/--------------------------------------
* # NewStkObj
* Y,A = Size Requested
@ -595,15 +480,6 @@ K.LoadStkObj ldx #SYS.LoadTxtFile To get ending \0
* (X,Y unmodified)
*\--------------------------------------
*--------------------------------------
* in Y,A = buf size
*--------------------------------------
MEM.GetMainBuf sta CLRREADAUX
sta CLRWRITEAUX
jsr K.GetMem
sta SETREADAUX
sta SETWRITEAUX
rts
*--------------------------------------
MEM.GetKrnlBuf pha
tya
clc
@ -616,55 +492,21 @@ MEM.GetKrnlBuf pha
cpx #DevMgr.HiMem
pha
sbc /DevMgr.HiMem
bcs .98 No More Room...
pla
bcs .99 No More Room...
ldy DevMgr.Free
stx DevMgr.Free
ldx DevMgr.Free+1
pla
sta DevMgr.Free+1
txa
* clc
rts
.98 pla
.99 lda #E.OOM
* sec
rts
*/--------------------------------------
* # GetMemStat
* **In:**
* Y,A = Ptr to 24 bytes buffer
* ## RETURN VALUE
* Buffer filled with memory stats
*\--------------------------------------
K.GetMemStat >STYA ZPPtr1
ldy #23
ldx #7
.1 lda DevMgr.Stat,x
sta (ZPPtr1),y
dey
dex
bpl .1
sta SETREADAUX
jsr .2
sta CLRREADAUX
.2 ldx #7
.3 lda Mem.Table,x
sta (ZPPtr1),y
dey
dex
bpl .3
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.MEM

View File

@ -75,13 +75,13 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem
.90 pha save error code
>PUSHBI 2
lda .8+1
>SYSCALL2 Kill
jsr K.Kill
pla get back error code
sec
rts
.8 lda #$ff SELF MODIFIED
* clc
.9 rts
*--------------------------------------
* PS.CreateChild
@ -226,7 +226,7 @@ PS.CreateChild ldx #0
.9 pha
>PUSHBI 2
lda CORE.LastPSID
>SYSCALL2 Kill
jsr K.Kill
pla
sec
rts
@ -582,7 +582,7 @@ PS.AddYAp12ArgSize
K.Kill cmp #0
beq .99 CS
sta K.Kill.PID
sta .1+1
jsr CORE.GetPSByID
bcs .99
@ -618,23 +618,17 @@ K.Kill.2 ldy #S.PS.hSID
lda S.Table.hSession-1,x
jsr K.FreeMem
ldy #S.PS.hSS
jsr .8
ldx #5
ldy #S.PS.hDS
jsr .8
ldy #S.PS.hCS
jsr .8
ldy #S.PS.hARGV
jsr .8
.11 ldy .10,x
ldy #S.PS.hENV
jsr .8
lda (ZPPtr1),y
bne .12
ldy #S.PS.hCWD
jsr .8
jsr K.FreeMem
.12 dex
bpl .11
lda (ZPPtr1)
bit #S.PS.F.CLOSEONX
@ -645,7 +639,7 @@ K.Kill.2 ldy #S.PS.hSID
ldx #SYS.fclose
jsr K.SYSCALL2.BANK
.1 lda K.Kill.PID
.1 lda #$ff SELF MODIFIED
ldx #0
@ -655,17 +649,175 @@ K.Kill.2 ldy #S.PS.hSID
inx
cpx CORE.PSCount
bne .2
bra *
.3 stz PS.Table.PID,x
lda PS.TABLE.hPS,x
stz PS.TABLE.hPS,x
.4 jmp K.FreeMem
jmp K.FreeMem
.8 lda (ZPPtr1),y
bne .4
.9 rts
.10 .DA #S.PS.hSS,#S.PS.hDS,#S.PS.hCS
.DA #S.PS.hARGV,#S.PS.hENV,#S.PS.hCWD
*/--------------------------------------
* # LoadTxtFile
* Load TXT a file in memory (with ending 0)
* ## C
* `int loadtxtfile ( const char * filename, short int flags, short int ftype, int auxtype );`
* ## ASM
* **In:**
* `>PUSHW auxtype`
* `>PUSHB ftype`
* `>PUSHB flags`
* `>LDYA filename`
* `>SYSCALL loadtxtfile`
* ## RETURN VALUE
* Y,A = File Length (without ending 0)
* X = hMem of Loaded File
*\--------------------------------------
.DUMMY
.OR ZPTMP 5 Bytes
FIO.bTXT .BS 1
FIO.hFILE .BS 1
FIO.MemPtr .BS 2
FIO.hMem .BS 1
.ED
*--------------------------------------
K.Kill.PID .BS 1
K.LoadTxtFile sec
.HS 90 BCC
*/--------------------------------------
* # LoadFile
* Load a file in memory
* ## C
* `int loadfile ( const char * filename, short int flags, short int ftype, int auxtype );`
* ## ASM
* **In:**
* `>PUSHW auxtype`
* `>PUSHB ftype`
* `>PUSHB flags`
* `>LDYA filename`
* `>SYSCALL loadfile`
* ## RETURN VALUE
* Y,A = File Length
* X = hMem of Loaded File
*\--------------------------------------
K.LoadFile clc
ror FIO.bTXT
ldx #SYS.FOpen
jsr K.SYSCALL2.BANK
bcs .9
.12 sta FIO.hFILE
pha
>PUSHWI K.S.Stat
pla
ldx #SYS.FStat
jsr K.SYSCALL2.BANK
bcs .11
lda K.S.Stat+S.STAT.SIZE+3
ora K.S.Stat+S.STAT.SIZE+2
bne .10
>LDYA K.S.Stat+S.STAT.SIZE
bit FIO.bTXT Add 1 to buffer size for ending 0
bpl .1
iny
bne .1
inc
bne .1
.10 lda #E.FTB
.11 bra .99
.1 jsr K.GetMem
bcs .99
>STYA FIO.MemPtr
stx FIO.hMem
>PUSHW K.S.Stat+S.STAT.SIZE
>PUSHW FIO.MemPtr
lda FIO.hFILE
ldx #SYS.FRead
jsr K.SYSCALL2.BANK
bcc .2
pha
lda FIO.hMem
jsr K.FreeMem
pla
.99 pha
lda FIO.hFILE
ldx #SYS.FClose
jsr K.SYSCALL2.BANK
pla
sec
.9 rts
.2 sty .7+1
sta .8+1
bit FIO.bTXT
bpl .5
pha set ending 0
tya
* clc
adc FIO.MemPtr
sta .4+1
pla
adc FIO.MemPtr+1
sta .4+2
.4 stz $ffff Self Modified
.5 jsr .99 close file
.7 ldy #$ff SELFMODIFIED
.8 lda #$ff SELFMODIFIED
ldx FIO.hMem
clc
rts
*/--------------------------------------
* # GetMemStat
* **In:**
* Y,A = Ptr to 24 bytes buffer
* ## RETURN VALUE
* Buffer filled with memory stats
*\--------------------------------------
K.GetMemStat >STYA ZPPtr1
ldy #23
ldx #7
.1 lda DevMgr.Stat,x
sta (ZPPtr1),y
dey
dex
bpl .1
sta SETREADAUX
jsr .2
sta CLRREADAUX
.2 ldx #7
.3 lda Mem.Table,x
sta (ZPPtr1),y
dey
dex
bpl .3
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.PS

View File

@ -1,114 +0,0 @@
NEW
AUTO 3,1
*/--------------------------------------
* # GetPWUID
* ## C
* `int getpwuid(short int uid, S.PW* passwd );`
* ## ASM
* `>PUSHW passwd`
* `lda uid`
* `>SYSCALL getpwuid`
* ## RETURN VALUE
*\--------------------------------------
K.GetPWUID
*/--------------------------------------
* # GetPWName
* ## C
* `int getpwname(const char* name, S.PW* passwd );`
* ## ASM
* `>PUSHW passwd`
* `>LDYA name`
* `>SYSCALL getpwname`
* ## RETURN VALUE
*\--------------------------------------
K.GetPWName jsr SHARED.SPtr1PPtr2
bra K.PutPW.1
*/--------------------------------------
* # PutPW
* ## C
* `int putpw( S.PW* passwd );`
* ## ASM
* `>LDYA passwd`
* `>SYSCALL putpw`
* ## RETURN VALUE
*\--------------------------------------
K.PutPW >STYA ZPPtr2
K.PutPW.1 sta SETREADAUX
sta SETWRITEAUX
jsr X.PWD
sta CLRREADAUX
sta CLRWRITEAUX
bcs .9
lda PWD.bDirty
beq .9
lda PWD.DBPtr
sta A1L
clc
adc PWD.DBSize
sta A2L
lda PWD.DBPtr+1
sta A1L+1
adc PWD.DBSize+1
sta A2L+1
>LDYA PWD.DBSize
jsr K.getmem
bcs .9
stx .8+1
>STYA A4L Save Destination Address in MAIN
clc Aux To Main
jsr AuxMove
>PUSHWZ Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.WRONLY+O.CREATE
>LDYAI PWD.FILE
ldx #SYS.FOpen
jsr K.SYSCALL2.BANK
bcc .1
pha
jsr .8
pla
sec
.9 rts
.1 sta .7+1
>PUSHW PWD.DBSize
lda .8+1
jsr K.getmemptr
>PUSHYA
lda .7+1
ldx #SYS.FWrite
jsr K.SYSCALL2.BANK
bcc .2
pha
jsr .7
pla
sec
rts
.2 stz PWD.bDirty
.7 lda #$ff SELF MODIFIED
ldx #SYS.fclose
jsr K.SYSCALL2.BANK
.8 lda #$ff
jmp K.freemem SELF MODIFIED
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.PWD
LOAD USR/SRC/SYS/KERNEL.S
ASM

View File

@ -1,11 +1,6 @@
NEW
AUTO 3,1
*--------------------------------------
X.PWD jmp (.1-SYS.GetPWUID,x)
.1 .DA PWD.GetPWUID
.DA PWD.GetPWName
.DA PWD.PutPW
*--------------------------------------
* ZPPtr1 : UID / pName (Input)
* ZPPtr2 : pPW (Output)
* ZPPtr3 : pDB
@ -13,7 +8,21 @@ X.PWD jmp (.1-SYS.GetPWUID,x)
* ....\CR
* \0
*--------------------------------------
PWD.GetPWUID lda PWD.hDB
*/--------------------------------------
* # GetPWUID
* ## C
* `int getpwuid(short int uid, S.PW* passwd );`
* ## ASM
* `>PUSHW passwd`
* `lda uid`
* `>SYSCALL getpwuid`
* ## RETURN VALUE
*\--------------------------------------
K.GetPWUID sta ZPPtr1+1
jsr SHARED.PullYA
>STYA ZPPtr2
lda PWD.hDB
beq PWD.GetPW.9
jsr K.GetmemPtr
@ -50,16 +59,26 @@ PWD.GetPW.9 lda #E.IPWDDB
PWD.GetPW.99 lda #E.IUSR
sec
PWD.GetPW.RTS rts
*--------------------------------------
PWD.GetPWName lda PWD.hDB
*/--------------------------------------
* # GetPWName
* ## C
* `int getpwname(const char* name, S.PW* passwd );`
* ## ASM
* `>PUSHW passwd`
* `>LDYA name`
* `>SYSCALL getpwname`
* ## RETURN VALUE
*\--------------------------------------
K.GetPWName >STYA TXTPTR
jsr SHARED.PullYA
>STYA ZPPtr2
lda PWD.hDB
beq PWD.GetPW.9
jsr K.GetmemPtr
>STYA ZPPtr3
>LDYA ZPPtr1
>STYA TXTPTR
ldy #0
jsr SHARED.TXTPTR.GetY
beq PWD.GetPW.99
@ -91,13 +110,21 @@ PWD.GetPWName lda PWD.hDB
.8 iny
jsr PWD.NextString skip PASSWORD
jmp PWD.GetByte get UID
*/--------------------------------------
* # PutPW
* ## C
* `int putpw( S.PW* passwd );`
* ## ASM
* `>LDYA passwd`
* `>SYSCALL putpw`
* ## RETURN VALUE
*\--------------------------------------
K.PutPW >STYA ZPPtr2
>STYA TXTPTR
*--------------------------------------
* ZPPtr2 : pPW (Input)
* ZPPtr3 : pDB
*--------------------------------------
PWD.PutPW >LDYA ZPPtr2
>STYA TXTPTR
lda PWD.hDB
bne .1
@ -191,7 +218,71 @@ PWD.PutPW >LDYA ZPPtr2
sec
rts
*--------------------------------------
* ZPPtr2 = pPW
PWD.Save lda PWD.bDirty
beq .9
lda PWD.DBPtr
sta A1L
clc
adc PWD.DBSize
sta A2L
lda PWD.DBPtr+1
sta A1L+1
adc PWD.DBSize+1
sta A2L+1
>LDYA PWD.DBSize
>SYSCALL2 GetMem
bcs .9
stx .8+1
>STYA A4L Save Destination Address in MAIN
clc Aux To Main
jsr AuxMove
>PUSHWZ Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.WRONLY+O.CREATE
>LDYAI PWD.FILE
ldx #SYS.FOpen
jsr K.SYSCALL2.BANK
bcc .1
pha
jsr .8
pla
sec
.9 rts
.1 sta .7+1
>PUSHW PWD.DBSize
lda .8+1
jsr K.getmemptr
>PUSHYA
lda .7+1
ldx #SYS.FWrite
jsr K.SYSCALL2.BANK
bcc .2
pha
jsr .7
pla
sec
rts
.2 stz PWD.bDirty
.7 lda #$ff SELF MODIFIED
ldx #SYS.fclose
jsr K.SYSCALL2.BANK
.8 lda #$ff
jmp K.freemem SELF MODIFIED
*--------------------------------------
* PRIVATE
*--------------------------------------
PWD.GetUID >LDYA PWD.DBPtr
>STYA ZPPtr3

View File

@ -154,6 +154,15 @@ SHARED.NextCharPtr2
inc ZPPtr2+1
.8 rts
*--------------------------------------
SHARED.PullYA sta CLRREADAUX
lda (pStack)
tay
inc pStack
lda (pStack)
inc pStack
sta SETREADAUX
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.SHARED
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -1,17 +1,36 @@
NEW
AUTO 3,1
*--------------------------------------
X.SLIST jmp (.1-SYS.SListGetData,x)
.1 .DA SLIST.GetData
.DA SLIST.AddData
.DA SLIST.SetData
.DA SLIST.GetByID
.DA SLIST.NewKey
.DA SLIST.Lookup
.DA SLIST.New
.DA SLIST.Free
*--------------------------------------
SLIST.GetData jsr SLIST.Select
ZPSListKeyID .EQ ZPMEMMGR+6
ZPSListDataPtr .EQ ZPMEMMGR+8
ZPSListDataLen .EQ ZPMEMMGR+10
ZPSListIBlkPtr .EQ ZPMEMMGR+12
ZPSListDBlkPtr .EQ ZPMEMMGR+14
*/--------------------------------------
* # SListGetData
* ## ASM
* `PUSHW DataOfs`
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListGetData`
* ## RETURN VALUE
* Y,A = Byte Count
* X = hMem (if DataPtr = 0)
*\--------------------------------------
K.SListGetData sta SLIST.hList
jsr SHARED.PullYA
>STYA ZPSListKeyID
jsr SHARED.PullYA
>STYA ZPSListDataPtr
jsr SHARED.PullYA
>STYA ZPSListDataLen
jsr SHARED.PullYA
>STYA ZPMemMgrSize
jsr SLIST.Select
jsr SLIST.SkipKey
jsr SLIST.GetDataLen
@ -36,7 +55,7 @@ SLIST.GetData jsr SLIST.Select
bne .12
>LDYA SLIST.DataLen
jsr MEM.GetMainBuf
>SYSCALL2 GetMem In MAIN Mem
bcs .9
stx .82+1
>STYA ZPSListDataPtr
@ -99,8 +118,26 @@ SLIST.GetData jsr SLIST.Select
.82 ldx #$ff SELF MODIFIED
clc
rts
*--------------------------------------
SLIST.AddData jsr SLIST.Select
*/--------------------------------------
* # SListAddData
* ## ASM
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListAddData`
* ## RETURN VALUE
*\--------------------------------------
K.SListAddData sta SLIST.hList
jsr SHARED.PullYA
>STYA ZPSListKeyID
jsr SHARED.PullYA
>STYA ZPSListDataPtr
jsr SHARED.PullYA
>STYA ZPSListDataLen
jsr SLIST.Select
jsr SLIST.SkipKey
>LDYA SLIST.KeyID Save DataLen location
@ -153,8 +190,26 @@ SLIST.AddData jsr SLIST.Select
jsr SLIST.AddBlockByte Make sure 0 follow DATA
.9 rts
*--------------------------------------
SLIST.SetData jsr SLIST.Select
*/--------------------------------------
* # SListSetData
* ## ASM
* `PUSHW DataLen`
* `PUSHW DataPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListSetData`
* ## RETURN VALUE
*\--------------------------------------
K.SListSetData sta SLIST.hList
jsr SHARED.PullYA
>STYA ZPSListKeyID
jsr SHARED.PullYA
>STYA ZPSListDataPtr
jsr SHARED.PullYA
>STYA ZPSListDataLen
jsr SLIST.Select
jsr SLIST.SkipKey
jsr SLIST.GetDataLen
@ -187,8 +242,24 @@ SLIST.SetData jsr SLIST.Select
.9 lda #E.DATALEN
sec
rts
*--------------------------------------
SLIST.GetByID jsr SLIST.Select
*/--------------------------------------
* # SListGetByID
* ## ASM
* `PUSHW KeyPtr`
* `PUSHW KeyID`
* `lda hSList`
* `>SYSCALL SListGetByID`
* ## RETURN VALUE
* Y,A = Next KeyID
*\--------------------------------------
K.SListGetByID sta SLIST.hList
jsr SHARED.PullYA
>STYA ZPSListKeyID
jsr SHARED.PullYA
>STYA ZPSListDataPtr
jsr SLIST.Select
jsr SLIST.GetNextByte
@ -217,8 +288,22 @@ SLIST.GetByID jsr SLIST.Select
.9 lda #E.NOKEY
sec
rts
*--------------------------------------
SLIST.NewKey jsr SLIST.Search
*/--------------------------------------
* # SListNewKey
* ## ASM
* `PUSHW KeyPtr`
* `lda hSList`
* `>SYSCALL SListNewKey`
* ## RETURN VALUE
* Y,A = KeyID
* X = KeyLen
*\--------------------------------------
K.SListNewKey sta SLIST.hList
jsr SHARED.PullYA
>STYA ZPSListDataPtr
jsr SLIST.Search
bcc .99
lda SLIST.KeyLen
@ -254,16 +339,36 @@ SLIST.NewKey jsr SLIST.Search
.99 lda #E.DUPKEY
sec
.9 rts
*--------------------------------------
SLIST.Lookup jsr SLIST.Search
*/--------------------------------------
* # SListLookup
* ## ASM
* `PUSHW KeyPtr`
* `lda hSList`
* `>SYSCALL SListLookup`
* ## RETURN VALUE
* Y,A = KeyID
* X = Key Length
*\--------------------------------------
K.SListLookup sta SLIST.hList
jsr SHARED.PullYA
>STYA ZPSListDataPtr
jsr SLIST.Search
bcs .9
>LDYA ZPSListKeyID
ldx SLIST.KeyLen
.9 rts
*--------------------------------------
SLIST.New >LDYAI 160 40k Max before out of memory!!!
*/--------------------------------------
* # SListNew
* ## ASM
* `>SYSCALL SListNew`
* ## RETURN VALUE
* A=hSList
*\--------------------------------------
K.SListNew >LDYAI 160 40k Max before out of memory!!!
jsr K.GetMem0
bcs .9
>STYA ZPSListIBlkPtr
@ -281,8 +386,14 @@ SLIST.New >LDYAI 160 40k Max before out of memory!!!
.8 lda #$ff SELF MODIFIED
.9 rts
*--------------------------------------
SLIST.Free sta .8+1
*/--------------------------------------
* # SListFree
* ## ASM
* `lda hSList`
* `>SYSCALL SListFree`
* ## RETURN VALUE
*\--------------------------------------
K.SListFree sta .8+1
jsr K.GetMemPtr
>STYA .1+1
@ -299,7 +410,7 @@ SLIST.Free sta .8+1
jmp K.FreeMem
*--------------------------------------
* PRIVATE
*--------------------------------------
*--------------------------------------
SLIST.Search jsr K.GetMemPtr
>STYA ZPSListIBlkPtr
@ -466,6 +577,7 @@ SLIST.ToNextBlock
>STYA ZPSListDBlkPtr
rts
*--------------------------------------
SLIST.hList .BS 1
SLIST.KeyLen .BS 1
SLIST.DataLen .BS 2
SLIST.nDataCnt .BS 2

View File

@ -277,7 +277,7 @@ K.MKFIFO >STYA ZPPtr1 pathname buffer
ldy #0
.1 lda STAT.FIFO,y
.1 lda IO.DEV.FIFO,y
sta (ZPPtr1),y
iny
cpy #9

View File

@ -36,8 +36,8 @@ UNISTD.Open ldx #5 /DEV/
bcs .9
.1 lda K.MLI.PATH,x
cmp IO.DEVDIR-1,x
bne .9
cmp IO.DEV.FIFO-1,x
bne IO.OPEN.REG
dex
bne .1
*--------------------------------------
@ -83,17 +83,82 @@ UNISTD.Open ldx #5 /DEV/
.71 lda (pFD) #S.FD.T
tax
jmp (.8,x)
jmp (.8-4,x)
.8 .DA STDIO.IOERR REG
.DA STDIO.IOERR DIR
.8
* .DA STDIO.IOERR REG
* .DA STDIO.IOERR DIR
.DA IO.OPEN.CDEV
.DA IO.OPEN.BDEV
.DA STDIO.IOERR LNK
.DA IO.OPEN.DSOCK
.DA IO.OPEN.SSOCK
.DA IO.OPEN.PIPE
.9 jmp IO.OPEN.REG
*--------------------------------------
IO.OPEN.REG >MLICALL MLIGETFILEINFO
bcc IO.OPEN.REG.E Already Exists
bit IO.Open.FLAGS Create if not exists ?
bpl IO.OPEN.RTS No, return MLI error
ldx #2 Yes, Create...
.1 lda IO.Open.TYPE,x
sta K.MLI.PARAMS+4,x File type,Aux type
dex
bpl .1
lda #S.FI.ST.STD
jsr IO.MLI.CREATE
bcs IO.OPEN.RTS
IO.OPEN.REG.E ldx #0
jsr IO.MkFD
bcs IO.OPEN.RTS
jsr IO.MLI.OPEN
bcs IO.OPEN.ERR
lda IO.Open.FLAGS
bit #O.WRONLY
beq .20 Write mode ?
and #O.APPEND 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
bra .21
.11 >MLICALL MLIGETEOF
bcs IO.OPEN.ERR
>MLICALL MLISETMARK
.21 bcs IO.OPEN.ERR
.20 lda IO.Open.FLAGS
and #O.TEXT Text Mode ?
beq .8
lda #$FF
sta K.MLI.PARAMS+2
lda #C.CR
sta K.MLI.PARAMS+3
>MLICALL MLINEWLINE
bcs IO.OPEN.ERR
.8 lda IO.hFD
IO.OPEN.RTS rts
IO.OPEN.ERR pha Save Error Code
lda IO.hFD
jsr K.Close
pla
sec
rts
*/--------------------------------------
* # close
* ## C

View File

@ -39,6 +39,9 @@ Mem.XLoMem .EQ *
A2osX.GP .PH A2osX.SYSCALL
.INB USR/SRC/SYS/KERNEL.S.GP
.EP
A2osX.GPX .PH A2osX.SYSCALL
.INB USR/SRC/SYS/KERNEL.S.GPX
.EP
A2osX.D1 .PH $D000
.DA #RRAMWRAMBNK1
.INB USR/SRC/SYS/KERNEL.S.STAT
@ -52,13 +55,12 @@ A2osX.D1 .PH $D000
.EP
A2osX.D2 .PH $D000
.DA #RRAMWRAMBNK2
.INB USR/SRC/SYS/KERNEL.S.BIN
.INB USR/SRC/SYS/KERNEL.S.STRING
.INB USR/SRC/SYS/KERNEL.S.TIME
.INB USR/SRC/SYS/KERNEL.S.BIN
.INB USR/SRC/SYS/KERNEL.S.PS
.INB USR/SRC/SYS/KERNEL.S.ARG
.INB USR/SRC/SYS/KERNEL.S.ENV
.INB USR/SRC/SYS/KERNEL.S.PWD
.EP
A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.JMP