Kernel 0.92

This commit is contained in:
Rémy GIBERT 2018-12-04 14:20:35 +01:00
parent 72a2049cda
commit bb0fffc193
11 changed files with 246 additions and 45 deletions

View File

@ -13,7 +13,7 @@ AUTO 4,1 Enable MASM3 auto line num
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR ZPBIN .OR ZPBIN
ZP.START ZS.START
* MyPtr .BS 2 * MyPtr .BS 2
ZS.END ZS.END
.ED .ED

View File

@ -584,6 +584,19 @@ A = Child PSID
## RETURN VALUE ## RETURN VALUE
A = Child PSID A = Child PSID
# ExecL
## C
`int kill(short int pid, short int sig);`
## ASM
`>PUSHB sig`
`lda pid`
`>SYSCALL kill`
## RETURN VALUE
A = Child PSID
# GetPSStatus # GetPSStatus
**In:** **In:**
A = PID A = PID

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,124 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/KILL
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
*--------------------------------------
* Zero Page Segment, up to 32 bytes
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPTmpPtr .BS 2
ZS.END
.ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0 S.PS.F
.DA #0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA #16 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.SSCANF.PID .DA SSCANF.PID
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN ldy #S.PS.ARGC
lda (pPS),y
beq .9
lda #1
>STA.G Signal
.1 >INC.G ArgIndex
>SYSCALL ArgV
bcs .9
>STYA ZPTmpPtr
lda (ZPTmpPtr)
cmp #'-'
bne .2
ldy #1
lda (ZPTmpPtr),y
beq .9
cmp #'0'
bcc .9
cmp #'9'+1
bcs .9
and #$0F
>STA.G Signal
bra .1
.9 >PUSHBI 0
>LDYA L.MSG.USAGE
>SYSCALL printf
lda #E.SYN
sec
rts
.2 >PUSHEA.G PID
>PUSHBI 2 1 Ptr
>PUSHW L.SSCANF.PID
>LDYA ZPTmpPtr
>SYSCALL sscanf
bcs .9
>PUSHB.G Signal
>LDA.G PID
>SYSCALL kill
bcs .99
lda #0
sec
.99 rts
*--------------------------------------
CS.DOEVENT sec do not discard TIMER event
rts
*--------------------------------------
CS.QUIT clc
rts
*--------------------------------------
CS.END
MSG.USAGE .AS "Usage : KILL <signal> PID\r\n"
.AS " -0 : No Signal\r\n"
.AZ " -1 : SIGQUIT\r\n"
SSCANF.PID .AZ "%d"
*--------------------------------------
.DUMMY
.OR 0
DS.START
ArgIndex .BS 1
Signal .BS 1
PID .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE USR/SRC/BIN/KILL.S
ASM

View File

@ -224,7 +224,7 @@ SYS.InsDrv .EQ $9E
SYS.ExecL .EQ $A0 SYS.ExecL .EQ $A0
SYS.ExecV .EQ $A2 SYS.ExecV .EQ $A2
* .EQ $A4 * .EQ $A4
* .EQ $A6 SYS.Kill .EQ $A6
* .EQ $A8 * .EQ $A8
SYS.GetMemStat .EQ $AA SYS.GetMemStat .EQ $AA

View File

@ -372,6 +372,7 @@ note : '$VAR' does NOT expand Variable
| | | -N : Number all output lines | | | | | -N : Number all output lines | |
| | | -S : Suppress repeated empty output lines | | | | | -S : Suppress repeated empty output lines | |
| EDIT | Working | still missing : find/replace | 0.92 | | EDIT | Working | still missing : find/replace | 0.92 |
| KILL | Working | KILL <signal> PID | 0.92 |
| FORMAT | In Progress | -L : Low-Level Format | 0.92 | | FORMAT | In Progress | -L : Low-Level Format | 0.92 |
| | | -1..9 : Catalog Size (block count) | | | | | -1..9 : Catalog Size (block count) | |
| CHTYP | Working | -C : Continue On Error | 0.92 | | CHTYP | Working | -C : Continue On Error | 0.92 |

View File

@ -35,6 +35,8 @@ CS.START cld
.DA CS.QUIT .DA CS.QUIT
L.MSG.LOGIN .DA MSG.LOGIN L.MSG.LOGIN .DA MSG.LOGIN
L.MSG.PASSWORD .DA MSG.PASSWORD L.MSG.PASSWORD .DA MSG.PASSWORD
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.ECHODEL .DA MSG.ECHODEL
L.ENV.SHELL .DA ENV.SHELL L.ENV.SHELL .DA ENV.SHELL
L.SHELL .DA SHELL L.SHELL .DA SHELL
L.ENV.HOME .DA ENV.HOME L.ENV.HOME .DA ENV.HOME
@ -44,12 +46,11 @@ L.HOME .DA HOME
CS.INIT clc CS.INIT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN lda #0 CS.RUN >STZ.G hUSERNAME
ldy #hUSERNAME >STA.G hPASSWORD
sta (pData),y
ldy #hPASSWORD >STA.G INPUT.PrevCR
sta (pData),y
>PUSHBI 0 >PUSHBI 0
>LDYA L.MSG.LOGIN >LDYA L.MSG.LOGIN
>SYSCALL printf >SYSCALL printf
@ -88,14 +89,14 @@ CS.RUN lda #0
jsr INPUT.LINEIN jsr INPUT.LINEIN
bcc .2 bcc .2
lda #C.CR >PUSHBI 0
>SYSCALL PutChar >LDYA L.MSG.ECHOCRLF
bcs .9 >SYSCALL printf
lda #C.LF
>SYSCALL PutChar
bcs .9 bcs .9
jsr CS.RUN.SETENV jsr CS.RUN.SETENV
bcs .9 bcs .9
>PUSHBI S.PS.F.HOLD >PUSHBI S.PS.F.HOLD
>LDYA L.SHELL >LDYA L.SHELL
>SYSCALL ExecL >SYSCALL ExecL
@ -124,18 +125,15 @@ CS.QUIT clc
*-------------------------------------- *--------------------------------------
* PRIVATE * PRIVATE
*-------------------------------------- *--------------------------------------
INPUT.RESET ldy #INPUT.PassChar INPUT.RESET >STA.G INPUT.PassChar
sta (pData),y
lda #0 >STZ.G INPUT.BufPtr
ldy #INPUT.BufPtr >STA.G INPUT.Status
sta (pData),y
ldy #INPUT.Status
sta (pData),y
rts rts
*-------------------------------------- *--------------------------------------
INPUT.CHARIN tax save char... INPUT.CHARIN tax save char...
ldy #INPUT.Status
lda (pData),y >LDA.G INPUT.Status
bmi .9 bmi .9
lda #INPUT.BufPtr lda #INPUT.BufPtr
@ -149,6 +147,9 @@ INPUT.CHARIN tax save char...
cpx #$20 Control Char? cpx #$20 Control Char?
bcc .2 bcc .2
cpx #C.DEL
beq INPUT.CHARIN.DEL
lda (ZPPTR1) lda (ZPPTR1)
cmp #INPUT.BufPtr.SIZE Buffer full? cmp #INPUT.BufPtr.SIZE Buffer full?
@ -161,39 +162,51 @@ INPUT.CHARIN tax save char...
txa txa
sta (ZPPTR1),y sta (ZPPTR1),y
ldy #INPUT.PassChar >LDA.G INPUT.PassChar
lda (pData),y
bne .1 bne .1
txa txa
.1 >SYSCALL PutChar .1 >SYSCALL PutChar
bcs .9
>STZ.G INPUT.PrevCR
rts rts
.2 cpx #13 CR .2 cpx #C.CR
bne .3 bne .3
ldy #INPUT.Status
lda (pData),y
bne .9
inc
sta (pData),y
rts
.3 cpx #10 LF
bne .4 txa
ldy #INPUT.Status >STA.G INPUT.PrevCR
lda (pData),y
beq .31
lda #$80 lda #$80
sta (pData),y >STA.G INPUT.Status
rts rts
.31 .3 cpx #C.LF
bne .4
.4
>LDA.G INPUT.PrevCR
beq .1
.4 >STZ.G INPUT.PrevCR
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
INPUT.CHARIN.DEL
lda (ZPPTR1)
beq .8
dec
sta (ZPPTR1)
>PUSHBI 0
>LDYA L.MSG.ECHODEL
>SYSCALL printf
.8 clc
rts
*--------------------------------------
INPUT.LINEIN ldy #INPUT.Status INPUT.LINEIN ldy #INPUT.Status
lda (pData),y lda (pData),y
asl CS if a line is in the buffer asl CS if a line is in the buffer
@ -202,6 +215,8 @@ INPUT.LINEIN ldy #INPUT.Status
CS.END CS.END
MSG.LOGIN .AZ "\r\nlogin:" MSG.LOGIN .AZ "\r\nlogin:"
MSG.PASSWORD .AZ "\r\npassword:" MSG.PASSWORD .AZ "\r\npassword:"
MSG.ECHOCRLF .AZ "\r\n"
MSG.ECHODEL .DA #C.BS,#C.SPACE,#C.BS,#0
ENV.SHELL .AZ "SHELL" ENV.SHELL .AZ "SHELL"
ENV.HOME .AZ "HOME" ENV.HOME .AZ "HOME"
SHELL .AZ "${ROOT}BIN/SHELL" SHELL .AZ "${ROOT}BIN/SHELL"
@ -214,6 +229,7 @@ DS.START
INPUT.BufPtr .BS INPUT.BufPtr.SIZE+1 INPUT.BufPtr .BS INPUT.BufPtr.SIZE+1
INPUT.Status .BS 1 INPUT.Status .BS 1
INPUT.PassChar .BS 1 INPUT.PassChar .BS 1
INPUT.PrevCR .BS 1
hUSERNAME .BS 1 hUSERNAME .BS 1
hPASSWORD .BS 1 hPASSWORD .BS 1
DS.END DS.END

View File

@ -101,7 +101,7 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.ExecL $A0 .DA K.ExecL $A0
.DA K.ExecV .DA K.ExecV
.DA 0 .DA 0
.DA 0 .DA K.Kill
.DA 0 .DA 0
.DA K.GetMemStat .DA K.GetMemStat
.DA K.GetPSStatus .DA K.GetPSStatus

View File

@ -85,7 +85,7 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at ZPPtr3,PS.Load.hMem
* out : * out :
* A = PSID * A = PSID
* we cannot use ZPPtrs1 & 2 * we cannot use ZPPtrs1 & 2
* because of calling K.NewStr & PS.Dup * because of calling K.NewStr & PS.DupEnv
*-------------------------------------- *--------------------------------------
PS.CreateChild ldx CORE.PSCount PS.CreateChild ldx CORE.PSCount
beq .3 beq .3
@ -533,6 +533,53 @@ PS.SetMemOwner lda CORE.LastPSID
sta (ZPMEMMGR),y sta (ZPMEMMGR),y
rts rts
*/-------------------------------------- */--------------------------------------
* # ExecL
* ## C
* `int kill(short int pid, short int sig);`
* ## ASM
* `>PUSHB sig`
* `lda pid`
* `>SYSCALL kill`
* ## RETURN VALUE
* A = Child PSID
*\--------------------------------------
K.Kill cmp #0
beq .99 CS
jsr CORE.GetPSByID
bcs .99
>STYA ZPPtr1
>PULLA
cmp #2
bcs .9
asl
tax
jmp (.1,x)
.1 .DA K.Kill.0
.DA K.Kill.1
.9 lda #E.SYN
* sec
rts
.99 >RET 1
*--------------------------------------
K.Kill.0 clc
rts
*--------------------------------------
K.Kill.1 lda (ZPPtr1)
and #$33
ora #S.PS.F.QUIT
sta (ZPPtr1)
clc
rts
*/--------------------------------------
* # GetPSStatus * # GetPSStatus
* **In:** * **In:**
* A = PID * A = PID