diff --git a/.Docs/.TEMPLATE.S.txt b/.Docs/.TEMPLATE.S.txt index 7de7af4b..4d32cdc7 100644 --- a/.Docs/.TEMPLATE.S.txt +++ b/.Docs/.TEMPLATE.S.txt @@ -13,7 +13,7 @@ AUTO 4,1 Enable MASM3 auto line num *-------------------------------------- .DUMMY .OR ZPBIN -ZP.START +ZS.START * MyPtr .BS 2 ZS.END .ED diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 37791a1c..4a5818f7 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -584,6 +584,19 @@ A = Child PSID ## RETURN VALUE 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 **In:** A = PID diff --git a/.Floppies/A2OSX.B800.po b/.Floppies/A2OSX.B800.po index 92c8f697..601dfd2b 100644 Binary files a/.Floppies/A2OSX.B800.po and b/.Floppies/A2OSX.B800.po differ diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index a1bbaa3c..a99dbe62 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index a531f7cc..54c5017b 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/KILL.S.txt b/BIN/KILL.S.txt index e69de29b..1754abf3 100644 --- a/BIN/KILL.S.txt +++ b/BIN/KILL.S.txt @@ -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 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 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 4530de46..982ed422 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -224,7 +224,7 @@ SYS.InsDrv .EQ $9E SYS.ExecL .EQ $A0 SYS.ExecV .EQ $A2 * .EQ $A4 -* .EQ $A6 +SYS.Kill .EQ $A6 * .EQ $A8 SYS.GetMemStat .EQ $AA diff --git a/README.md b/README.md index d5efee8f..9c8f603b 100644 --- a/README.md +++ b/README.md @@ -372,6 +372,7 @@ note : '$VAR' does NOT expand Variable | | | -N : Number all output lines | | | | | -S : Suppress repeated empty output lines | | | EDIT | Working | still missing : find/replace | 0.92 | +| KILL | Working | KILL PID | 0.92 | | FORMAT | In Progress | -L : Low-Level Format | 0.92 | | | | -1..9 : Catalog Size (block count) | | | CHTYP | Working | -C : Continue On Error | 0.92 | diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index 38798ad2..5fa807e9 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -35,6 +35,8 @@ CS.START cld .DA CS.QUIT L.MSG.LOGIN .DA MSG.LOGIN 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.SHELL .DA SHELL L.ENV.HOME .DA ENV.HOME @@ -44,12 +46,11 @@ L.HOME .DA HOME CS.INIT clc rts *-------------------------------------- -CS.RUN lda #0 - ldy #hUSERNAME - sta (pData),y - ldy #hPASSWORD - sta (pData),y - +CS.RUN >STZ.G hUSERNAME + >STA.G hPASSWORD + + >STA.G INPUT.PrevCR + >PUSHBI 0 >LDYA L.MSG.LOGIN >SYSCALL printf @@ -88,14 +89,14 @@ CS.RUN lda #0 jsr INPUT.LINEIN bcc .2 - lda #C.CR - >SYSCALL PutChar - bcs .9 - lda #C.LF - >SYSCALL PutChar + >PUSHBI 0 + >LDYA L.MSG.ECHOCRLF + >SYSCALL printf bcs .9 + jsr CS.RUN.SETENV bcs .9 + >PUSHBI S.PS.F.HOLD >LDYA L.SHELL >SYSCALL ExecL @@ -124,18 +125,15 @@ CS.QUIT clc *-------------------------------------- * PRIVATE *-------------------------------------- -INPUT.RESET ldy #INPUT.PassChar - sta (pData),y - lda #0 - ldy #INPUT.BufPtr - sta (pData),y - ldy #INPUT.Status - sta (pData),y +INPUT.RESET >STA.G INPUT.PassChar + + >STZ.G INPUT.BufPtr + >STA.G INPUT.Status rts *-------------------------------------- INPUT.CHARIN tax save char... - ldy #INPUT.Status - lda (pData),y + + >LDA.G INPUT.Status bmi .9 lda #INPUT.BufPtr @@ -149,6 +147,9 @@ INPUT.CHARIN tax save char... cpx #$20 Control Char? bcc .2 + cpx #C.DEL + beq INPUT.CHARIN.DEL + lda (ZPPTR1) cmp #INPUT.BufPtr.SIZE Buffer full? @@ -161,39 +162,51 @@ INPUT.CHARIN tax save char... txa sta (ZPPTR1),y - ldy #INPUT.PassChar - lda (pData),y + >LDA.G INPUT.PassChar bne .1 + txa + .1 >SYSCALL PutChar + bcs .9 + + >STZ.G INPUT.PrevCR rts -.2 cpx #13 CR +.2 cpx #C.CR bne .3 - ldy #INPUT.Status - lda (pData),y - bne .9 - - inc - sta (pData),y - rts - -.3 cpx #10 LF - bne .4 - ldy #INPUT.Status - lda (pData),y - beq .31 + txa + >STA.G INPUT.PrevCR + lda #$80 - sta (pData),y + >STA.G INPUT.Status rts - -.31 - -.4 + +.3 cpx #C.LF + bne .4 + + >LDA.G INPUT.PrevCR + beq .1 + +.4 >STZ.G INPUT.PrevCR .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 lda (pData),y asl CS if a line is in the buffer @@ -202,6 +215,8 @@ INPUT.LINEIN ldy #INPUT.Status CS.END MSG.LOGIN .AZ "\r\nlogin:" 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.HOME .AZ "HOME" SHELL .AZ "${ROOT}BIN/SHELL" @@ -214,6 +229,7 @@ DS.START INPUT.BufPtr .BS INPUT.BufPtr.SIZE+1 INPUT.Status .BS 1 INPUT.PassChar .BS 1 +INPUT.PrevCR .BS 1 hUSERNAME .BS 1 hPASSWORD .BS 1 DS.END diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 301cc919..57e0bb9e 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -101,7 +101,7 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.ExecL $A0 .DA K.ExecV .DA 0 - .DA 0 + .DA K.Kill .DA 0 .DA K.GetMemStat .DA K.GetPSStatus diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index a56c7350..7fcd3ba6 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -85,7 +85,7 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at ZPPtr3,PS.Load.hMem * out : * A = PSID * we cannot use ZPPtrs1 & 2 -* because of calling K.NewStr & PS.Dup +* because of calling K.NewStr & PS.DupEnv *-------------------------------------- PS.CreateChild ldx CORE.PSCount beq .3 @@ -533,6 +533,53 @@ PS.SetMemOwner lda CORE.LastPSID sta (ZPMEMMGR),y 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 * **In:** * A = PID