Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-07-30 13:14:37 +02:00
parent 2ae41aa860
commit 74633bd4f5
11 changed files with 269 additions and 85 deletions

Binary file not shown.

View File

@ -25,6 +25,8 @@ ZPFullPath .BS 2
ArgIndex .BS 1
bWrite .BS 1
AttrAND .BS 1
AttrORA .BS 1
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -58,7 +60,9 @@ L.MSG.ERR .DA MSG.ERR
CS.INIT clc
rts
*--------------------------------------
CS.RUN inc ArgIndex
CS.RUN dec AttrAND set mask = $ff
inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .8
@ -66,17 +70,13 @@ CS.RUN inc ArgIndex
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
beq .1
cmp #'+'
bne .4
ldy #1
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.2 cmp OptionList,x
beq .3
dex
bpl .2
.1 jsr CS.RUN.CheckSwitch
bcc CS.RUN
.9 >PUSHW L.MSG.USAGE
>PUSHBI 0
@ -84,11 +84,6 @@ CS.RUN inc ArgIndex
lda #E.SYN
sec
.99 rts
.3 ldy OptionVars,x
lda #$80
sta (pData),y
bra CS.RUN
*--------------------------------------
.4 >LDA.G hSrcBasePath
bne .9
@ -204,9 +199,7 @@ CS.RUN.DIR lda (ZPFileName)
>SYSCALL PrintF
bcs .9
jsr CS.RUN.CheckErr
jsr CS.RUN.SetAttr
bcc .7
rts
@ -243,12 +236,7 @@ CS.RUN.FILE jsr FilterMatch
>PUSHBI 2
>SYSCALL PrintF
jsr CS.RUN.CheckErr
rts
jmp CS.RUN.SetAttr
.2 >PUSHW L.MSG.FILEDUMP
@ -262,7 +250,17 @@ CS.RUN.FILE jsr FilterMatch
.8 clc
rts
*--------------------------------------
CS.RUN.CheckErr bcs .1
CS.RUN.SetAttr >PUSHW ZPFullPath
ldy #S.STAT.P.ACCESS
lda (ZPFileStat),y
and AttrAND
ora AttrORA
>PUSHA
>SYSCALL SetAttr
bcs .1
>LDYA L.MSG.OK
>SYSCALL PutS
rts
@ -291,6 +289,75 @@ CS.RUN.GetFilePath
>SYSCALL StrCat
rts
*--------------------------------------
CS.RUN.CheckSwitch
ldy #2
lda (ZPPtr1),y
bne .4
lda (ZPPtr1)
cmp #'-'
bne .9
dey
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.2 cmp OptionList,x
beq .3
dex
bpl .2
.9 sec
rts
.3 ldy OptionVars,x
lda #$80
sta (pData),y
clc
rts
.4 iny
lda (ZPPtr1),y
bne .9
>LDYA ZPPtr1
>SYSCALL strupr
ldx #AttrMask-AttrList2-1
.5 ldy #1
lda (ZPPtr1),y
cmp AttrList1,x
bne .6
iny
lda (ZPPtr1),y
cmp AttrList2,x
beq .7
.6 dex
bpl .5
sec
rts
.7 sec
ror bWrite
lda (ZPPtr1)
cmp #'-'
beq .8
lda AttrMask,x
tsb AttrORA
clc
rts
.8 lda AttrMask,x
trb AttrAND
clc
rts
*--------------------------------------
Access2CSTR ldy #S.STAT.P.ACCESS
lda (ZPFileStat),y
@ -344,6 +411,9 @@ CS.END
*--------------------------------------
OptionList .AS "CRcr"
OptionVars .DA #bContinue,#bRecurse,#bContinue,#bRecurse
AttrList1 .AS "DRBIWR"
AttrList2 .AS "EENNRD"
AttrMask .DA #S.FI.A.D,#S.FI.A.RN,#S.FI.A.B,#S.FI.A.I,#S.FI.A.W,#S.FI.A.R
*--------------------------------------
ATTRS .AS "DeReBn----InWrRd"
*--------------------------------------
@ -357,19 +427,6 @@ MSG.USAGE .AS "Usage : ATTR File(s) (*,? wildcards allowed)\r\n"
.AS "+|-Wr : Write enable\r\n"
.AZ "+|-Rd : Read enable\r\n"
*--------------------------------------
* 7 6 5 4 3 2 1 0
* +--+--+--+--+--+--+--+--+
* |D |RN|B |Reserved|W |R |
* +--+--+--+--+--+--+--+--+
*
* D: Destroy enable bit
* RN: Rename enable bit
* B: Backup needed bit
* W: Write enable bit
* R: Read enable bit
*
* Bit 2 = Invisible Bit (TECH NOTE #23)
*--------------------------------------
MSG.OK .AZ "[OK]"
MSG.ERR .AZ "[%h]\r\n"
MSG.DIRDUMP .AZ "%s %s/\r\n"

View File

@ -12,7 +12,7 @@ NEW
.DUMMY
.OR ZPBIN
ZS.START
ZPPSPtr .BS 2
ZPPtr1 .BS 2
Count .BS 1
Index .BS 1
ZS.END
@ -38,16 +38,27 @@ CS.START cld
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG0 .DA MSG0
L.MSGPS .DA MSGPS
L.MSGDEV .DA MSGDEV
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN >PUSHW L.MSG0
>PUSHBI 0
>SYSCALL PrintF
CS.RUN jsr CS.RUN.PS
jsr CS.RUN.DEV
>PUSHBI 2
>PUSHBI 1 INITD
>SYSCALL kill
lda #0
sec
rts
*--------------------------------------
CS.RUN.PS
.10 stz Count
ldx #0
@ -57,9 +68,9 @@ CS.RUN >PUSHW L.MSG0
beq .7
>SYSCALL GetMemPtr
>STYA ZPPSPtr
>STYA ZPPtr1
lda (ZPPSPtr)
lda (ZPPtr1)
bmi .6 HOLD
ldy #S.PS.S
@ -67,7 +78,7 @@ CS.RUN >PUSHW L.MSG0
beq .6
ldy #S.PS.PID
lda (ZPPSPtr),y
lda (ZPPtr1),y
beq .7
cmp #1
@ -76,13 +87,13 @@ CS.RUN >PUSHW L.MSG0
cmp (pPS),y don't kill myself
beq .7
>PUSHW L.MSG0
>PUSHW L.MSGPS
ldy #S.PS.PID
lda (ZPPSPtr),y
lda (ZPPtr1),y
>PUSHA
ldy #S.PS.hARGV
lda (ZPPSPtr),y
lda (ZPPtr1),y
>SYSCALL GetMemPtr
>PUSHYA
@ -92,7 +103,7 @@ CS.RUN >PUSHW L.MSG0
>PUSHBI 2
ldy #S.PS.PID
lda (ZPPSPtr),y
lda (ZPPtr1),y
>SYSCALL kill
.6 inc Count
@ -106,13 +117,40 @@ CS.RUN >PUSHW L.MSG0
lda Count
bne .10
rts
*--------------------------------------
CS.RUN.DEV ldx #1
stx Index
.1 lda Dev.Table-1,x
sta ZPPtr1
lda Dev.Table,x
sta ZPPtr1+1
beq .7
.8 lda #0 tell Kernel that all done ok, but
sec we do not want to stay in memory
.9 rts
>PUSHW L.MSGDEV
>PUSHB Index
lda ZPPtr1
clc
adc #S.FD.DEV
tay
lda ZPPtr1+1
adc /S.FD.DEV
>PUSHYA
>PUSHBI 3
>SYSCALL PrintF
.7 inc Index
inc index
.90 lda #E.SYN
sec
ldx Index
cpx #K.DEV.MAX*2+1
bne .1
rts
*--------------------------------------
CS.DOEVENT sec
@ -122,7 +160,8 @@ CS.QUIT clc
rts
*--------------------------------------
CS.END
MSG0 .AZ "SHUTDOWN:Killing process %3d, %s\r\n"
MSGPS .AZ "SHUTDOWN:Killing process %3d, %s\r\n"
MSGDEV .AZ "SHUTDOWN:Closing device %3d, %s\r\n"
*--------------------------------------
.DUMMY
.OR 0

View File

@ -43,7 +43,8 @@ CS.START cld
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.Filename .DA MSG.Filename
L.MSG.Mode .DA MSG.Mode
L.MSG.Access .DA MSG.Access
L.MSG.Mod .DA MSG.Mod
L.MSG.UIDGIDSIZE .DA MSG.UIDGIDSIZE
L.FMT.DateTime .DA FMT.DateTime
L.MSG.AMCTimes .DA MSG.AMCTimes
@ -113,8 +114,14 @@ CS.RUN.DUMP lda ArgFile
pla
>SYSCALL FreeMem
jsr Access2CSTR
>PUSHW L.MSG.Access
>PUSHEA.G ATTR
>PUSHBI 2
>SYSCALL PrintF
jsr Mod2CSTR
>PUSHW L.MSG.Mode
>PUSHW L.MSG.MOD
>PUSHEA.G MOD
>PUSHBI 2
>SYSCALL PrintF
@ -131,6 +138,37 @@ CS.RUN.DUMP lda ArgFile
rts
*--------------------------------------
Access2CSTR ldy #S.STAT.P.ACCESS
lda (pData),y
ldy #ATTR+15
ldx #15
.1 lsr
pha
bcc .2
lda ATTRS,x
sta (pData),y
dex
dey
lda ATTRS,x
sta (pData),y
bra .3
.2 lda #'-'
sta (pData),y
dex
dey
sta (pData),y
.3 pla
dey
dex
bpl .1
rts
*--------------------------------------
Mod2CSTR ldy #S.STAT.MODE+1
lda (pData),y
@ -252,6 +290,7 @@ CS.END
*--------------------------------------
OptionList .AS "Cc"
OptionVars .DA #bFormatStr,#bFormatStr
ATTRS .AS "DeReBn----InWrRd"
TYPES .AS "-dbclssp"
ACCESS .AS "xwrxwrxwr"
MSG.NODATE .AZ "<No-Date>"
@ -260,7 +299,8 @@ FMT.DateTime .AZ "%d-%b-%y %H:%M:%S"
MSG.USAGE .AS "Usage : STAT File\r\n"
.AZ " -C : Format\r\n"
MSG.Filename .AZ "Filename : %s\r\n"
MSG.Mode .AZ "Access : %s\r\n"
MSG.Access .AZ "Access : %s\r\n"
MSG.Mod .AZ "Mod : %s\r\n"
MSG.UIDGIDSIZE .AS "UID : %10D\r\n"
.AS "GID : %10D\r\n"
.AS "Size : %10u\r\n"
@ -273,6 +313,7 @@ MSG.AMCTimes .AS "Created : %s\r\n"
.OR 0
DS.START
StatBuf .BS S.STAT
ATTR .BS 17
MOD .BS 11 drwxrwxrwx + \0
TIME.Access .BS 20
TIME.Mod .BS 20

View File

@ -236,7 +236,7 @@ SYS.SScanF .EQ $52
* .EQ $58
* .EQ $5A
* .EQ $5C
* .EQ $5E
SYS.SetAttr .EQ $5E
*--------------------------------------D2
* MOUNT
SYS.Mount .EQ $60

View File

@ -40,9 +40,23 @@ MLISETFILEINFOEX .EQ $D4
MLIGETFILEINFOEX .EQ $D5
MLIACL .EQ $D6
*--------------------------------------
* 7 6 5 4 3 2 1 0
* +--+--+--+--+--+--+--+--+
* |D |RN|B |Reserved|W |R |
* +--+--+--+--+--+--+--+--+
*
* D: Destroy enable bit
* RN: Rename enable bit
* B: Backup needed bit
* W: Write enable bit
* R: Read enable bit
*
* Bit 2 = Invisible Bit (TECH NOTE #23)
*--------------------------------------
S.FI.A .EQ $03
S.FI.A.R .EQ $01
S.FI.A.W .EQ $02
S.FI.A.I .EQ $04
S.FI.A.B .EQ $20
S.FI.A.RN .EQ $40
S.FI.A.D .EQ $80
@ -58,6 +72,18 @@ S.FI.ST .EQ $07
S.FI.ST.STD .EQ $01
S.FI.ST.DIR .EQ $0D
S.FI.UBLKS .EQ $08
*--------------------------------------
* DATE:
* 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
* +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
* | Year | Month | Day |
* +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
* TIME:
* 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
* +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
* |0 0 0| Hour | |0 0| Minute |
* +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
*--------------------------------------
S.FI.MDATE .EQ $0A
S.FI.MTIME .EQ $0C
S.FI.CDATE .EQ $0E

View File

@ -40,11 +40,12 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.CTRLR .DA MSG.CTRLR
L.BINSH .DA BINSH
L.ETCINIT .DA ETCINIT
L.BINMEM .DA BINMEM
L.BINPS .DA BINPS
L.BINSHUTDOWN .DA BINSHUTDOWN
L.CMDS .DA BINSH
.DA BINMEM
.DA BINPS
.DA BINLSOF
.DA BINSHUTDOWN
.DA 0
*--------------------------------------
CS.INIT clc
@ -71,8 +72,8 @@ CS.RUN ldy #S.PS.PID
>LDYA L.MSG.CTRLR
>SYSCALL PutS
>LDYA L.BINSH
jsr CS.RUN.EXEC.YA
ldx #0
jsr CS.RUN.EXEC.X
>SLEEP
@ -85,21 +86,28 @@ CS.RUN ldy #S.PS.PID
cmp #C.CR Ctrl.M
bne .3
>LDYA L.BINMEM
jsr CS.RUN.EXEC.YA
ldx #2
jsr CS.RUN.EXEC.X
bra .2
.3 cmp #16 Ctrl.P
bne .4
>LDYA L.BINPS
jsr CS.RUN.EXEC.YA
ldx #4
jsr CS.RUN.EXEC.X
bra .2
.4 cmp #4 Ctrl.D
.4 cmp #12 Ctrl.L
bne .5
ldx #6
jsr CS.RUN.EXEC.X
.5 cmp #4 Ctrl.D
bne .2
>LDYA L.BINSHUTDOWN
jsr CS.RUN.EXEC.YA
ldx #8
jsr CS.RUN.EXEC.X
bcs .2
sec
@ -154,7 +162,7 @@ CS.RUN.ETCINIT >LDYAI 256
rts
*--------------------------------------
CS.RUN.EXEC.YA >PUSHYA
CS.RUN.EXEC.X >PUSHW L.CMDS,x
>PUSHBI S.PS.F.HOLD
>SYSCALL ExecL
rts
@ -162,17 +170,28 @@ CS.RUN.EXEC.YA >PUSHYA
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT clc
CS.QUIT lda #MLIQUIT
sta .1
jsr $BF00
.1 lda MLI.PARAMS
bcs *
rts
*--------------------------------------
CS.END
*--------------------------------------
MSG.CTRLR .AZ "INITD:Entering ROOT mode..."
BINSH .AZ "${ROOT}bin/sh"
ETCINIT .AZ "${ROOT}etc/init"
BINSH .AZ "${ROOT}bin/sh"
BINMEM .AZ "${ROOT}bin/mem"
BINPS .AZ "${ROOT}bin/ps"
BINLSOF .AZ "${ROOT}bin/lsof"
BINSHUTDOWN .AZ "${ROOT}bin/shutdown"
*--------------------------------------
MLI.PARAMS .DA #4
.DA #0
.DA 0
.DA #0
.DA 0
*--------------------------------------
.DUMMY
.OR 0

View File

@ -55,7 +55,8 @@ ERRORX.GetErrorMessage
clc
rts
*--------------------------------------MLI
ERRORX.Codes .DA #MLI.E.IO
ERRORX.Codes .DA #MLI.E.BADCALL
.DA #MLI.E.IO
.DA #MLI.E.NODEV
.DA #MLI.E.WRTPROT
.DA #MLI.E.DSKSWIT
@ -99,7 +100,8 @@ ERRORX.Codes .DA #MLI.E.IO
*--------------------------------------
ERRORX.Count .EQ *-ERRORX.Codes
*--------------------------------------
ERRORX.Messages .AT "I/O Error"
ERRORX.Messages .AT "Bad MLI Call"
.AT "I/O Error"
.AT "No Device"
.AT "Disk Write-Prot."
.AT "Disk Switched"

View File

@ -57,7 +57,7 @@ K.SYSCALL .DA K.ChTyp $00 : STAT
.DA 0
.DA 0
.DA 0
.DA 0
.DA K.SetAttr
*--------------------------------------
* Bank 2
*--------------------------------------

View File

@ -23,17 +23,17 @@ K.ChTyp.8 >MLICALL MLISETFILEINFO
K.ChTyp.9 >RET 3
*/--------------------------------------
* # Attr
* # SetAttr
* Change Attributes of a ProDOS File
* ## C
* `int attr(const char *filepath, short int attributes);`
* `int setattr(const char *filepath, short int attributes);`
* ## ASM
* `>PUSHW filepath`
* `>PUSHB attributes`
* `>SYSCALL attr`
* `>SYSCALL setattr`
* ## RETURN VALUE
*\--------------------------------------
K.Attr jsr PFT.CheckPath1
K.SetAttr jsr PFT.CheckPath1
bcs K.ChTyp.9
>MLICALL MLIGETFILEINFO

View File

@ -210,13 +210,13 @@ K.FGetS jsr PFT.CheckNodeA
sec
bne .9 IO error
inc NO DATA -> BLOCKING
.11 lda #0 BLOCKING
rts
.2 lda K.IOBuf
cmp #C.LF Discard any leading LF from a previous CR/LF
* beq .8 returns as empty string
beq .1
beq .11 CS -> NODATA -> BLOCKING
cmp #C.CR
beq .8 empty string