Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-02-17 17:55:02 +01:00
parent fe193891d1
commit 8c89a474c3
29 changed files with 733 additions and 289 deletions

View File

@ -540,11 +540,11 @@ CS : not found
# GetPWUID
## C
`int getpwuid(short int uid, S.PW* passwd );`
`int getpwuid(short int uid, S.PW *passwd);`
## ASM
`PUSHB uid`
`>PUSHW passwd`
`lda uid`
`>SYSCALL getpwuid`
## RETURN VALUE
@ -552,11 +552,11 @@ CS : not found
# GetPWName
## C
`int getpwname(const char* name, S.PW* passwd );`
`int getpwname(const char* name, S.PW *passwd);`
## ASM
`>PUSHW name`
`>PUSHW passwd`
`>LDYA name`
`>SYSCALL getpwname`
## RETURN VALUE
@ -567,11 +567,46 @@ CS : not found
`int putpw( S.PW* passwd );`
## ASM
`>LDYA passwd`
`>PUSHW passwd`
`>SYSCALL putpw`
## RETURN VALUE
# GetGRGID
## C
`int getgrgid(short int gid, S.GRP *group);`
## ASM
`>PUSHB gid`
`>PUSHW group`
`>SYSCALL getpwname`
## RETURN VALUE
# GetGRName
## C
`int getgrgid(const char* name, S.GRP *group);`
## ASM
`>PUSHW name`
`>PUSHW group`
`>SYSCALL getpwname`
## RETURN VALUE
# PutGR
## C
`int putgr(S.GRP *group);`
## ASM
`>PUSHW group`
`>SYSCALL putgr`
## RETURN VALUE
# SListGetData
## ASM

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -381,9 +381,10 @@ CS.RUN.PushGidUid
.2 >PUSHYA
>PUSHW ZPPW
ldy #S.STAT.UID
lda (ZPFileStat),y
>PUSHA
>PUSHW ZPPW
>SYSCALL GetPWUID
bcs .3

View File

@ -85,8 +85,9 @@ CS.RUN >LDYAI S.PW
>STYA ZPStrPtr
stx ZPhStr
>PUSHW ZPPWPtr
lda #0
>PUSHA
>PUSHW ZPPWPtr
>SYSCALL GetPWUID
bcc .1
@ -109,9 +110,6 @@ CS.RUN >LDYAI S.PW
>SYSCALL putpw
bcs .99
>SYSCALL FlushEtcPasswd
bcs .99
lda #0
sec
rts
@ -165,9 +163,6 @@ CS.RUN.ROOT ldy #0
>SYSCALL putpw
bcs .9
>SYSCALL FlushEtcPasswd
bcs .9
lda #0
sec
.9 rts

View File

@ -80,9 +80,6 @@ CS.RUN >LDYAI S.PW
>SYSCALL putpw
bcs .99
>SYSCALL FlushEtcPasswd
bcs .99
jsr CS.RUN.RmDir
bcs .99

339
DRV/MKBOARD.DRV.S.txt Normal file
View File

@ -0,0 +1,339 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF drv/mkboard.drv
*--------------------------------------
S.DCB.SND .EQ 16
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.E.I
*--------------------------------------
ZPArgPtr .EQ ZPBIN
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp Dev.Detect cld,jmp abs=DRV
.DA #$61 6502,Level 1 (65c02)
.DA #1 DRV Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
L.MSG.DETECT.OK .DA MSG.DETECT.OK
L.MSG.DETECT.KO .DA MSG.DETECT.KO
L.DRV.CS.START .DA DRV.CS.START
L.FD.DEV .DA FD.DEV
L.FD.DEV.NAME .DA FD.DEV.NAME
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect >STYA ARGS
stz ZPArgPtr
lda #$C1
sta ZPArgPtr+1
.1 and #$0f
tay
lda A2osX.S,y
bne .3
ldy #4
sec
lda (ZPArgPtr),y
sbc (ZPArgPtr),y
cmp #5
beq .4
.3 inc FD.DEV.NAME+3
inc ZPArgPtr+1 no match, try next slot....
lda ZPArgPtr+1
cmp #$C8
bne .1
>LDYA L.MSG.DETECT.KO
>SYSCALL puts
lda #MLI.E.NODEV Not Found in any slot, exiting
sec
rts
.4 lda ZPArgPtr+1
and #$0F
pha
tay
lda #A2osX.S.SND
sta A2osX.S,y
pla
asl
asl
asl
asl
clc
adc #$8F
sta DEVSLOTn08F
jsr Dev.ParseArgs
bcs .9
.8 >PUSHW L.MSG.DETECT.OK
>PUSHW L.FD.DEV.NAME
>PUSHBI 2
>SYSCALL printf
>PUSHWI DRV.END
>PUSHWI DRV.CS.END-DRV.CS.START
>PUSHWI DRV.CS.START
>LDYA L.DRV.CS.START
>SYSCALL InsDrv
bcs .9
>STYA FD.DEV+S.FD.DEV.DRVPTR
>PUSHW L.FD.DEV.NAME
>LDYA L.FD.DEV
>SYSCALL MKDEV
.9 rts
*--------------------------------------
Dev.ParseArgs >LDYA ARGS
>STYA ZPArgPTR
lda (ZPArgPTR)
bne .1
clc
rts
.1
.92 lda #E.SYN
sec
rts
*--------------------------------------
CS.END
MSG.DETECT.OK .AZ "MockingBoard Installed As Device : %s\r\n"
MSG.DETECT.KO .AZ "HW Not Found."
ARGS .BS 2
*--------------------------------------
FD.DEV .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #0 DEVID
.DA 0 BUSPTR
.BS 2 DRVPTR
.DA 0 DCBPTR
.DA 0 BUFPTR
FD.DEV.NAME .AZ "snd1"
*--------------------------------------
* Driver Code
*--------------------------------------
ZPIOCTL .EQ ZPDRV
ZPBufPtr .EQ ZPDRV+2
ZPCount .EQ ZPDRV+4
*--------------------------------------
DRV.CS.START cld
jmp (.1,x)
.1 .DA STATUS
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA CONTROL
.DA A2osX.BADCALL
.DA OPEN
.DA CLOSE
.DA READ
.DA WRITE
.DA IRQ
.DA 0 end or relocation
*--------------------------------------
STATUS jsr STATUS.CONTROL.Init
ldy #S.IOCTL.STATCODE
lda (ZPIOCTL),y
beq .1
cmp #S.IOCTL.STATCODE.GETDIB
bne STATUS.DCB
ldy #S.DIB-1
.HS 2C bit abs
.1 ldy #3
.2 lda DIB,y
sta (ZPBufPtr),y
dey
bpl .2
clc
rts
STATUS.DCB cmp #S.IOCTL.STATCODE.GETDCB
bne .3
ldy #S.DCB.SND-1
.2 lda DCB,y
sta (ZPBufPtr),y
dey
bpl .2
clc
rts
.3 cmp #S.IOCTL.STATCODE.EOF
bne STATUS.9
lda DIB+S.DIB.S
and #S.DIB.S.OPENED
beq OPEN.E
.8 clc
rts
STATUS.9 lda #MLI.E.BADCTL
sec
rts
*--------------------------------------
CONTROL jsr STATUS.CONTROL.Init
ldy #S.IOCTL.CTRLCODE
lda (ZPIOCTL),y
cmp #S.IOCTL.CTRLCODE.SETDCB
bne STATUS.9
ldy #S.DCB.SND-1
.2 lda (ZPBufPtr),y
sta DCB,y
dey
bpl .2
*--------------------------------------
OPEN lda DIB+S.DIB.S
bit #S.DIB.S.OPENED
beq OPEN.1
OPEN.E lda #MLI.E.OPEN
sec
rts
OPEN.1 php
sei
ldx DEVSLOTn08F
lda #S.DIB.S.OPENED
tsb DIB+S.DIB.S
plp
clc
rts
*--------------------------------------
CLOSE php
sei
ldx DEVSLOTn08F
lda #S.DIB.S.OPENED
trb DIB+S.DIB.S
plp
clc
rts
*--------------------------------------
READ php
sei
.8 plp
clc
rts
.9 lda #MLI.E.IO
.HS 2C BIT ABS
.99 lda #E.NODATA
plp
sec
rts
*--------------------------------------
WRITE php
sei
.8 plp
clc
rts
.9 lda #MLI.E.IO
.HS 2C BIT ABS
.99 lda #E.NODATA
plp
sec
rts
*--------------------------------------
READ.WRITE.Init ldx DEVSLOTn08F
STATUS.CONTROL.Init
>STYA ZPIOCTL
ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
iny #S.IOCTL.BYTECNT
lda (ZPIOCTL),y
eor #$ff
sta ZPCount
iny
lda (ZPIOCTL),y
eor #$ff
sta ZPCount+1
rts
*--------------------------------------
* IRQ Handler
* on exit, CC if handled
*--------------------------------------
IRQ ldx DEVSLOTn08F
bra .9
.8 clc
rts
.9 sec
rts
*--------------------------------------
DRV.CS.END
DEVSLOTn08F .BS 1
*--------------------------------------
DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ+S.DIB.S.IRQ
.DA #0,#0,#0
>PSTR "MockingBoard "
.DA #S.DIB.T.CHAR
.DA #0
.DA K.VER
*--------------------------------------
DCB .DA #S.DCB.T.SND
.DA #0 FLAGS
.DA #0
.DA #0
.DA #0
.DA #0
.DA #0
.DA #0
.DA #0
.DA #0
*--------------------------------------
DRV.END
MAN
SAVE USR/SRC/DRV/MKBOARD.DRV.S
ASM

View File

@ -91,6 +91,7 @@ A2osX.S.COM .EQ $E0
A2osX.S.XY .EQ $E1
A2osX.S.NIC .EQ $E2
A2osX.S.CLK .EQ $E3
A2osX.S.SND .EQ $E4
A2osX.S.DISABLE .EQ $FF
*--------------------------------------
* NON BLOCKING Entry point (From libs)
@ -221,17 +222,16 @@ SYS.SScanF .EQ $52
* .EQ $5A
* .EQ $5C
* .EQ $5E
*--------------------------------------D2
* .EQ $60
* .EQ $62
* .EQ $64
* .EQ $66
* .EQ $68
* .EQ $6A
* .EQ $6C
* ARG
SYS.Shift .EQ $68
SYS.ArgV .EQ $6A
SYS.ArgVDup .EQ $6C
* .EQ $6E
*--------------------------------------D2
* STDLIB
SYS.AToF .EQ $70
SYS.AToI .EQ $72
@ -269,12 +269,12 @@ SYS.LoadFile .EQ $A8
SYS.LoadTxtFile .EQ $AA
SYS.FileSearch .EQ $AC
SYS.GetMemStat .EQ $AE
* ARG
SYS.Shift .EQ $B0
SYS.ArgV .EQ $B2
SYS.ArgVDup .EQ $B4
* .EQ $B6
*--------------------------------------E0/AUX
* STRV / STRVX
SYS.StrVShift .EQ $B0
SYS.StrVGet .EQ $B2
SYS.StrVAdd .EQ $B4
* .EQ $B6
* ENV / ENVX
SYS.PutEnv .EQ $B8
SYS.SetEnv .EQ $BA
@ -294,33 +294,32 @@ SYS.MD5Finalize .EQ $CE
SYS.GetPWUID .EQ $D0
SYS.GetPWName .EQ $D2
SYS.PutPW .EQ $D4
SYS.FlushEtcPasswd .EQ $D6
* STRV / STRVX
SYS.StrVShift .EQ $D8
SYS.StrVGet .EQ $DA
SYS.StrVAdd .EQ $DC
SYS.GetGRGID .EQ $D6
SYS.GetGRName .EQ $D8
SYS.PutGR .EQ $DA
* .EQ $DC
* .EQ $DE
*--------------------------------------E0
* MEM
SYS.GetMem .EQ $E0
SYS.Realloc .EQ $E2
SYS.GetMemPtr .EQ $E4
SYS.FreeMem .EQ $E6
SYS.NewStkObj .EQ $E8
SYS.LoadStkObj .EQ $EA
SYS.GetStkObjPtr .EQ $EC
SYS.FreeStkObj .EQ $EE
* SLISTX
SYS.SListGetData .EQ $F0
SYS.SListAddData .EQ $F2
SYS.SListSetData .EQ $F4
SYS.SListGetByID .EQ $F6
SYS.SListGetData .EQ $E0
SYS.SListAddData .EQ $E2
SYS.SListSetData .EQ $E4
SYS.SListGetByID .EQ $E6
SYS.SListNewKey .EQ $F8
SYS.SListLookup .EQ $FA
SYS.SListNew .EQ $FC
SYS.SListFree .EQ $FE
SYS.SListNewKey .EQ $E8
SYS.SListLookup .EQ $EA
SYS.SListNew .EQ $EC
SYS.SListFree .EQ $EE
*--------------------------------------F0
* MEM
SYS.GetMem .EQ $F0
SYS.Realloc .EQ $F2
SYS.GetMemPtr .EQ $F4
SYS.FreeMem .EQ $F6
SYS.NewStkObj .EQ $F8
SYS.LoadStkObj .EQ $FA
SYS.GetStkObjPtr .EQ $FC
SYS.FreeStkObj .EQ $FE
*--------------------------------------
* MEM STRUCT
*--------------------------------------
@ -397,6 +396,7 @@ S.DCB.T .EQ 0
S.DCB.T.NIC .EQ $81
S.DCB.T.COM .EQ $82
S.DCB.T.GFX .EQ $83
S.DCB.T.SND .EQ $84
*--------------------------------------
S.DIB.S .EQ 0
S.DIB.S.BLOCK .EQ %10000000
@ -432,7 +432,7 @@ S.DIB.T.NIC .EQ $12 Network Interface Card
S.DIB.T.XY .EQ $13 X,Y Pointing Device
S.DIB.T.CHAR .EQ $14
S.DIB.T.GFX .EQ $15
*S.DIB.T.SND .EQ $17
S.DIB.T.SND .EQ $16
S.DIB.ST .EQ 22
S.DIB.ST.EXT .EQ $80
S.DIB.ST.DSKSW .EQ $40
@ -642,6 +642,10 @@ S.PW.SHELL .EQ 182 64+1
*
S.PW .EQ 247
*--------------------------------------
S.GRP.GID .EQ 0
S.GRP.NAME .EQ 1 16+1
S.GRP.MEMBERS .EQ 18
*--------------------------------------
S.SESSION.P .EQ 0
S.SESSION.P.ROOT .EQ %10000000
S.SESSION.P.SYSADMIN .EQ %01000000

View File

@ -2,11 +2,24 @@ NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
IO.IIC.RDVBLMSK .EQ $C041 R, B7=1: VBL interrupts enabled
*--------------------------------------
* The action taken for the soft switches
* from $C058 ... $C05F is only taken if access
* has first been enabled by writing to IOUDISOFF ($C07F).]
* has first been enabled by writing to IOUDISOFF ($C07F)
*--------------------------------------
* Apple IIc Tech Note #9 : Detecting VBL
* Written by Dan Strnad (November 1989)
* This Technical Note describes how the VBLInt flag at $C019 behaves differently
* than documented in the Apple IIc Technical Reference Manual, Second Edition, when being polled.
* The Apple IIc Technical Reference Manual, Second Edition, claims that reading
* $C019 reads and resets the VBLInt flag. This is not correct.
*
* After reading $C019 once the high bit has been set to flag VBL,
* the high bit remains set. A program polling VBL at $C019 would have to access
* either PTrig at $C070 or RdIOUDis at $C07E to reset the high-bit for $C019.
* Note that IOUDis must have been turned off by writing to $C07F
* then ENVBL accessed at $C05B in order to poll for $C019 on the IIc.
*--------------------------------------
IO.IIC.RDVBLMSK .EQ $C041 R, B7=1: VBL interrupts enabled
*--------------------------------------
IO.IIC.DISVBL .EQ $C05A W, Disable VBL interrupts
IO.IIC.ENVBL .EQ $C05B W, Enable VBL interrupts

View File

@ -83,8 +83,9 @@ CS.RUN >LDYAI 33 Enough for HASH
>LDYA L.ETCISSUE
jsr CS.RUN.DUMPFILE
lda #0
>PUSHA ROOT user
>PUSHWZ Dry Run, no output
* lda #0 ROOT user
>SYSCALL GetPWUID
bcc CS.RUN.AUTH
@ -218,8 +219,10 @@ CS.RUN.CHECKPWD rol ZPbValidUser
>STYA ZPPWPtr
stx ZPhPW
pha
>PUSHB ZPUID
pla
>PUSHYA
lda ZPUID
>SYSCALL GetPWUID
bcs CS.RUN.CHECK.9

View File

@ -456,29 +456,34 @@ CPU.Init.6502 >PUSHWI MSG.CPU
bne .1
sec
.1 ror ZPPtr1 save //c flag
.1 ror ZPPtr1 save //c flag
bpl .11
sta CLRIOUDIS
lda IO.IIC.RDVBLMSK
sta ZPPtr1+1 Save VBLIRQ enable
sta ZPPtr1+1 Save VBLIRQ enable
sta IO.IIC.ENVBL
.11 bit VBL
bpl .11
bit ZPPtr1 //c ?
bpl .2
lda IO.IIC.CLRVBLIRQ yes, clear IRQ
.2 lda VBL
bmi .2
ldx #2
.20 bit ZPPtr1 //c ?
.20 bit ZPPtr1 //c ?
bpl .3
lda IO.IIC.CLRVBLIRQ yes, clear IRQ
lda #0 wait for UP again
lda IO.IIC.CLRVBLIRQ yes, clear IRQ
lda #0 wait for UP again
.3 ldy #4 (2)
@ -999,9 +1004,9 @@ TskMgrInit >LDYAI MSG.TSK
>SYSCALL2 puts
>LDYAI K.ENV.SIZE get a buffer for ENV
ldx #SYS.NewStkObj
jsr K.SYSCALL2.AUX Buffer in AUX mem
>SYSCALL NewStkObj Buffer in AUX mem
bcs EvtMgrInit.RTS
>STYA ZPPtr1
txa
@ -1119,7 +1124,7 @@ MSG.KCREAD.KO .AZ "\nError While Reading Kernel Config File, Using Default.\n"
MSG.PRODOSFX .AZ "!!!Running under ProDOS.FX!!! Enabling lowercase mode.\n"
MSG.Init2.OK .AZ "A2osX[Stage2]:Complete.\n"
*--------------------------------------
SYSSCREEN.TOP .AZ "A2osX 0.93 Console"
SYSSCREEN.TOP .AZ "A2osX 0.94 Console"
MSG.Init3 .AS "A2osX[Stage3]:Init"
.AZ "\r\n*** Press Ctrl-R for ROOT Mode ***\r\n"
MSG.DEV .AZ "Device Manager..."

View File

@ -58,18 +58,18 @@ K.SYSCALL .DA K.ChTyp $00 : STAT
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Bank 2
*--------------------------------------
.DA 0 $60
.DA 0
.DA 0
.DA 0
.DA K.Shift $68 : ARG
.DA K.ArgV
.DA K.ArgVDup
.DA 0
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Bank 2
*--------------------------------------
.DA K.AToF $70 : STDLIB
.DA K.AToI
.DA K.AToL
@ -105,23 +105,23 @@ K.SYSCALL .DA K.ChTyp $00 : STAT
.DA K.LoadTxtFile
.DA K.FileSearch
.DA K.GetMemStat
.DA K.Shift $B0 : ARG
.DA K.ArgV
.DA K.ArgVDup
.DA 0
.DA K.PutEnv ENV
.DA K.SetEnv
.DA K.GetEnv
.DA K.UnsetEnv
*--------------------------------------
* AUX
*--------------------------------------
.DA K.StrVShift $B0 : STRV
.DA K.StrVGet
.DA K.StrVAdd
.DA 0
.DA K.PutEnv $B8 : ENV
.DA K.SetEnv
.DA K.GetEnv
.DA K.UnsetEnv
.DA K.Time $C0 : TIME
.DA K.StrFTime
.DA K.PTime2Time
.DA K.CTime2Time
.DA K.MD5
.DA K.MD5 $C8 : MD5
.DA K.MD5Init
.DA K.MD5Update
.DA K.MD5Finalize
@ -129,25 +129,13 @@ K.SYSCALL .DA K.ChTyp $00 : STAT
.DA K.GetPWUID $D0 : PWD
.DA K.GetPWName
.DA K.PutPW
.DA K.FlushEtcPasswd
.DA K.StrVShift
.DA K.StrVGet
.DA K.StrVAdd
.DA K.GetGRGID
.DA K.GetGRName
.DA K.PutGR
.DA 0
.DA 0
*--------------------------------------
* $E000
*--------------------------------------
.DA K.GetMem $E0
.DA K.Realloc
.DA K.GetMemPtr
.DA K.FreeMem
.DA K.GetMem K.NewStkObj
.DA K.LoadStkObj
.DA K.GetMemPtr K.GetStkObjPtr
.DA K.FreeMem K.FreeStkObj
*--------------------------------------
.DA K.SListGetData $F0
.DA K.SListGetData $E0 : SLIST
.DA K.SListAddData
.DA K.SListSetData
.DA K.SListGetByID
@ -157,131 +145,143 @@ K.SYSCALL .DA K.ChTyp $00 : STAT
.DA K.SListNew
.DA K.SListFree
*--------------------------------------
* $E000
*--------------------------------------
.DA K.GetMem $F0
.DA K.Realloc
.DA K.GetMemPtr
.DA K.FreeMem
.DA K.GetMem K.NewStkObj
.DA K.LoadStkObj
.DA K.GetMemPtr K.GetStkObjPtr
.DA K.FreeMem K.FreeStkObj
*--------------------------------------
* LO Byte :
* #RRAMWRAMBNK1,#RRAMWRAMBNK2
* HI Byte :
* Flags (ROOT....)
*--------------------------------------
K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1 $10
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1 $20
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1 $30
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1 $40
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1 $50
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
.DA #RRAMWRAMBNK1
.DA #$80
.DA #RRAMWRAMBNK1 $60
.DA #$80
.DA #RRAMWRAMBNK1
.DA #$80
.DA #RRAMWRAMBNK1
.DA #$80
.DA #RRAMWRAMBNK1
.DA #$80
.DA #RRAMWRAMBNK1
.DA #$80
.DA #RRAMWRAMBNK1
.DA #$80
.DA #RRAMWRAMBNK1
.DA #$80
.DA #RRAMWRAMBNK1
.DA #$80
.DA #0
*--------------------------------------
.DA #RRAMWRAMBNK2 $70
.DA #RRAMWRAMBNK2 $60
.DA #0
.DA #RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2 $68 : ARG
.DA #0
.DA #RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2 $70 : STDLIB
.DA #0
.DA #RRAMWRAMBNK2
.DA #0
@ -298,65 +298,65 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
.DA #RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2 $80
.DA #$80
.DA #RRAMWRAMBNK2 $80 : STRING
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2 $90
.DA #$80
.DA #RRAMWRAMBNK2 $90 : DEV
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2 $98 : BIN
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2 $A0
.DA #$80
.DA #RRAMWRAMBNK2 $A0 : PS
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0
.DA #RRAMWRAMBNK2 $B0
.DA #$80
.DA #RRAMWRAMBNK2
.DA #$80
.DA #RRAMWRAMBNK2
.DA #$80
.DA #RRAMWRAMBNK2
.DA #$80
.DA #0 $B0 : STRV
.DA #0
.DA #0
.DA #0
.DA #0
.DA #0
.DA #0
.DA #0
.DA #0 $B8 : ENV
.DA #0
.DA #0
@ -367,32 +367,31 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
.DA #0
.DA #0 $C0 : TIME
.DA #$80
.DA #0
.DA #$80
.DA #0
.DA #$80
.DA #0
.DA #$80
.DA #0
.DA #0
.DA #0
.DA #0
.DA #0 $C8 : MD5
.DA #$80
.DA #0
.DA #$80
.DA #0
.DA #$80
.DA #0
.DA #$80
.DA #0
.DA #0
.DA #0
.DA #0
.DA #$C0 $D0 : PWDX
.DA #$80
.DA #0
.DA #$C0 PWDX
.DA #$80
.DA #0
.DA #$C0 PWDX
.DA #$80
.DA #0
.DA #0 PWD
.DA #$80
.DA #0
.DA #0 $D8 : StrV
.DA #0
.DA #0
.DA #0
@ -400,40 +399,41 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
.DA #0
.DA #0
.DA #0
.DA #0
.DA #$C0 $E0 : SLIST
.DA #0
.DA #$C0
.DA #0
.DA #$C0
.DA #0
.DA #$C0
.DA #0
.DA #$C0
.DA #0
.DA #$C0
.DA #0
.DA #$C0
.DA #0
.DA #$C0
.DA #0
*--------------------------------------
.DA #0 $E0 : MemMgr at $E000
.DA #$80
.DA #0
.DA #$80
.DA #0
.DA #$80
.DA #0
.DA #$80
.DA #0
.DA #0
.DA #0
.DA #0
.DA #$C0 NewStkObj
.DA #$80
.DA #0
.DA #$80
.DA #0 LoadStkObj
.DA #0
.DA #$C0 GetStkObjPtr
.DA #$80
.DA #0
.DA #$C0 FreeStkObj
.DA #$80
*--------------------------------------
.DA #$C0 $F0 : SLIST
.DA #$80
.DA #$C0
.DA #$80
.DA #$C0
.DA #$80
.DA #$C0
.DA #$80
.DA #$C0
.DA #$80
.DA #$C0
.DA #$80
.DA #$C0
.DA #$80
.DA #$C0
.DA #$80
.DA #0
*--------------------------------------
* K.SYSCALL2 : From KERNEL (MAIN,AUX), LIB
*--------------------------------------
@ -488,9 +488,14 @@ K.SYSCALL.JMPX sta SETREADAUX
sta CLRWRITEAUX
rts
.1 jmp (.2-SYS.PutEnv,x)
.1 jmp (.2-SYS.StrVShift,x)
.2 .DA ENVX.PutEnv
.2 .DA STRVX.StrVShift
.DA STRVX.StrVGet
.DA STRVX.StrVAdd
.DA 0
.DA ENVX.PutEnv
.DA ENVX.SetEnv
.DA ENVX.GetEnv
.DA ENVX.UnsetEnv
@ -508,11 +513,9 @@ K.SYSCALL.JMPX sta SETREADAUX
.DA PWDX.GetPWUID
.DA PWDX.GetPWName
.DA PWDX.PutPW
.DA 0 FlushEtcPasswd
.DA STRVX.StrVShift
.DA STRVX.StrVGet
.DA STRVX.StrVAdd
.DA PWDX.GetGRGID
.DA PWDX.GetGRName
.DA PWDX.PutGR
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.JMP

View File

@ -3,44 +3,47 @@ NEW
*/--------------------------------------
* # GetPWUID
* ## C
* `int getpwuid(short int uid, S.PW* passwd );`
* `int getpwuid(short int uid, S.PW *passwd);`
* ## ASM
* `PUSHB uid`
* `>PUSHW passwd`
* `lda uid`
* `>SYSCALL getpwuid`
* ## RETURN VALUE
*\--------------------------------------
K.GetPWUID sta ZPPtr1+1
>PULLW ZPPtr2
K.GetPWUID
K.GetGRGID >PULLW FORPNT
>PULLB ZPPtr1+1
jmp K.SYSCALL.JMPX
*/--------------------------------------
* # GetPWName
* ## C
* `int getpwname(const char* name, S.PW* passwd );`
* `int getpwname(const char* name, S.PW *passwd);`
* ## ASM
* `>PUSHW name`
* `>PUSHW passwd`
* `>LDYA name`
* `>SYSCALL getpwname`
* ## RETURN VALUE
*\--------------------------------------
K.GetPWName >STYA TXTPTR
>PULLW ZPPtr2
K.GetPWName
K.GetGRName >PULLW FORPNT
>PULLW TXTPTR
jmp K.SYSCALL.JMPX
*/--------------------------------------
* # PutPW
* ## C
* `int putpw( S.PW* passwd );`
* ## ASM
* `>LDYA passwd`
* `>PUSHW passwd`
* `>SYSCALL putpw`
* ## RETURN VALUE
*\--------------------------------------
K.PutPW >STYA ZPPtr2
>STYA TXTPTR
K.PutPW >PULLW TXTPTR
jmp K.SYSCALL.JMPX
jsr K.SYSCALL.JMPX
bcc K.FlushEtcPasswd
rts
*--------------------------------------
K.FlushEtcPasswd
>LDYA PWD.DBSize
@ -50,7 +53,7 @@ K.FlushEtcPasswd
stx .8+1
>PUSHWI PWD.FILE
>PUSHWI PWD.PWFILE
>PUSHBI O.WRONLY+O.CREATE
>PUSHBI S.FI.T.TXT
>PUSHWZ Aux type
@ -85,11 +88,48 @@ K.FlushEtcPasswd
.8 lda #$ff
jmp K.freemem SELF MODIFIED
*/--------------------------------------
* # GetGRGID
* ## C
* `int getgrgid(short int gid, S.GRP *group);`
* ## ASM
* `>PUSHB gid`
* `>PUSHW group`
* `>SYSCALL getpwname`
* ## RETURN VALUE
*\--------------------------------------
*/--------------------------------------
* # GetGRName
* ## C
* `int getgrgid(const char* name, S.GRP *group);`
* ## ASM
* `>PUSHW name`
* `>PUSHW group`
* `>SYSCALL getpwname`
* ## RETURN VALUE
*\--------------------------------------
*/--------------------------------------
* # PutGR
* ## C
* `int putgr(S.GRP *group);`
* ## ASM
* `>PUSHW group`
* `>SYSCALL putgr`
* ## RETURN VALUE
*\--------------------------------------
K.PutGR >PULLW TXTPTR
jsr K.SYSCALL.JMPX
bcc K.FlushEtcGroup
rts
*--------------------------------------
K.FlushEtcGroup rts
*--------------------------------------
PWD.hDB .BS 1
PWD.DBPtr .BS 2
PWD.DBSize .BS 2
PWD.FILE .AZ "${ROOT}etc/passwd"
PWD.PWFILE .AZ "${ROOT}etc/passwd"
PWD.GRFILE .AZ "${ROOT}etc/group"
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.PWD

View File

@ -1,8 +1,9 @@
NEW
AUTO 3,1
*--------------------------------------
* ZPPtr1 : UID / pName (Input)
* ZPPtr2 : pPW (Output)
* ZPPtr1 : UID
* TXTPTR : pName (Input)
* FORPNT : pPW (Output)
* ZPPtr3 : pDB
* USERNAME:PASSWORD:UID:GID:GECOS:HOME:SHELL\CR
* ....\CR
@ -28,7 +29,7 @@ PWDX.GetPWUID lda PWD.hDB
jsr PWD.NextLine
bra .1
PWD.GetPW.8 ldx ZPPtr2+1
PWD.GetPW.8 ldx FORPNT+1
beq .8 Dry run, no output
jmp PWD.Record2PW
@ -70,7 +71,7 @@ PWDX.GetPWName lda PWD.hDB
cmp #':'
bne .3
ldx ZPPtr2+1
ldx FORPNT+1
beq .8
jmp PWD.Record2PW
@ -79,7 +80,7 @@ PWDX.GetPWName lda PWD.hDB
jsr PWD.NextString skip PASSWORD
jmp PWD.GetByte get UID
*--------------------------------------
* ZPPtr2 : pPW (Input)
* FORPNT : pPW (Output)
* ZPPtr3 : pDB
*--------------------------------------
PWDX.PutPW lda PWD.hDB
@ -166,6 +167,14 @@ PWDX.PutPW lda PWD.hDB
sec
rts
*--------------------------------------
PWDX.GetGRGID
*--------------------------------------
PWDX.GetGRName
*--------------------------------------
PWDX.PutGR
*--------------------------------------
* PRIVATE
*--------------------------------------
PWD.GetUID >LDYA PWD.DBPtr
@ -225,9 +234,6 @@ PWD.DeleteRecord
PWD.FindRecord >LDYA PWD.DBPtr
>STYA ZPPtr3
>LDYA ZPPtr2
>STYA TXTPTR
.2 lda (ZPPtr3)
beq .9 End of DB
@ -267,9 +273,7 @@ PWD.NextLine iny
inc ZPPtr3+1
.8 rts
*--------------------------------------
PWD.Record2PW sta CLRWRITEAUX
ldy #0
PWD.Record2PW ldy #0
ldx #0 NAME
@ -277,11 +281,11 @@ PWD.Record2PW sta CLRWRITEAUX
iny
cmp #':'
beq .2
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
inx
bra .1
.2 lda #0
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
inx
cpx #S.PW.PASSWD
bne .2
@ -291,21 +295,21 @@ PWD.Record2PW sta CLRWRITEAUX
cmp #':'
beq .4
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
inx
bra .3
.4 lda #0
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
inx
cpx #S.PW.UID
bne .4
jsr PWD.GetByte UID
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
jsr PWD.GetByte GID
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
ldx #S.PW.GECOS
@ -313,11 +317,11 @@ PWD.Record2PW sta CLRWRITEAUX
iny
cmp #':'
beq .6
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
inx
bra .5
.6 lda #0
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
inx
cpx #S.PW.DIR
bne .6
@ -326,11 +330,11 @@ PWD.Record2PW sta CLRWRITEAUX
iny
cmp #':'
beq .8
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
inx
bra .7
.8 lda #0
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
inx
cpx #S.PW.SHELL
bne .8
@ -339,12 +343,12 @@ PWD.Record2PW sta CLRWRITEAUX
iny
cmp #C.CR
beq .10
jsr SHARED.PutCharPtr2
jsr SHARED.FORPNT.PutNext
inx
bra .9
.10 lda #0
jsr SHARED.PutCharPtr2
sta SETWRITEAUX
jsr SHARED.FORPNT.PutNext
clc
rts
*--------------------------------------

View File

@ -599,6 +599,11 @@ ENV.GetSession ldy #S.PS.hSID
lda S.Table.hSession-1,y
jsr K.GetMemPtr
>STYA ZPPtr3
* ldy #S.SESSION.UID
* lda (ZPPtr3),y
rts
*--------------------------------------
ENV.AddYAToBuf >STYA ZPPtr3

View File

@ -45,11 +45,11 @@ A2osX.AUX .DA #0
A2osX.AUX.B .PH Mem.XHiMem
.INB USR/SRC/SYS/KERNEL.S.TERMX
.INB USR/SRC/SYS/KERNEL.S.STRVX
.INB USR/SRC/SYS/KERNEL.S.ENVX
.INB USR/SRC/SYS/KERNEL.S.TIMEX
.INB USR/SRC/SYS/KERNEL.S.MD5X
.INB USR/SRC/SYS/KERNEL.S.PWDX
.INB USR/SRC/SYS/KERNEL.S.STRVX
.INB USR/SRC/SYS/KERNEL.S.SLISTX
.EP
A2osX.AUX.S .EQ *-A2osX.AUX.B
@ -82,12 +82,12 @@ A2osX.D2 .DA #0
A2osX.D2.B .PH $D000
.DA #RRAMWRAMBNK2
.INB USR/SRC/SYS/KERNEL.S.ARG
.INB USR/SRC/SYS/KERNEL.S.STDLIB
.INB USR/SRC/SYS/KERNEL.S.STRING
.INB USR/SRC/SYS/KERNEL.S.DEV
.INB USR/SRC/SYS/KERNEL.S.BIN
.INB USR/SRC/SYS/KERNEL.S.PS
.INB USR/SRC/SYS/KERNEL.S.ARG
.EP
A2osX.D2.S .EQ *-A2osX.D2.B
@ -99,13 +99,13 @@ A2osX.E0.B .PH $E000
.INB USR/SRC/SYS/KERNEL.S.IRQ
.INB USR/SRC/SYS/KERNEL.S.SHARED
.INB USR/SRC/SYS/KERNEL.S.MATH
.INB USR/SRC/SYS/KERNEL.S.TERM
.INB USR/SRC/SYS/KERNEL.S.STRV
.INB USR/SRC/SYS/KERNEL.S.ENV
.INB USR/SRC/SYS/KERNEL.S.TIME
.INB USR/SRC/SYS/KERNEL.S.MD5
.INB USR/SRC/SYS/KERNEL.S.PWD
.INB USR/SRC/SYS/KERNEL.S.STRV
.INB USR/SRC/SYS/KERNEL.S.MEM
* go to A2osX.D1
.INB USR/SRC/SYS/KERNEL.S.PIPE