Kernel version 0.8 (Initial Commit)

This commit is contained in:
Rémy GIBERT 2016-08-17 08:25:58 +02:00
parent 44dd59a5ab
commit 3cf6dd05a6
42 changed files with 1978 additions and 2557 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,148 +0,0 @@
PR#3
PREFIX /A2OSX.BOOT
DELETE A2OSX.SYSTEM
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* **** START OF A2osX Global Page ****
*--------------------------------------
A2osX.GP.B.start
.PH $BE00
*--------------------------------------
* A2osX.SYSCALL (AUXLC to AUXLC)
* In:
* X = SYSfnc.Index
* Y,A = free for Inline param
*--------------------------------------
A2osX.GP.Start jmp (KERNEL.SYSCALL,x)
*--------------------------------------
* LIBCALL (AUXLC to AUXLC)
* In:
* Y = LIB.ID
* X = LIBfnc.Index
* A = free for Inline param
*--------------------------------------
jmp A2osX.LIBCALL1
*--------------------------------------
* Kernel.MLICALL (AUXLC to MAINLC)
* In:
* X = MLI Function
* A = Param Count
*--------------------------------------
jmp A2osX.MLICALL1
*--------------------------------------
jmp A2osX.ROMCALL1
jmp BrkHandler
.BS $BE10-*
*--------------------------------------
jmp (pDev) pDevJmp
jmp (pCode) pCodeJmp
jmp (pLib) pLibJmp
.BS $BE20-*
*--------------------------------------
GO.Reset jsr GO.AUXLC
jmp KERNEL.COLDBOOT
*--------------------------------------
A2osX.LIBCALL1 pha
phx
tya
>SYSCALL SYS.GetMemPtrA
>STYA .1+1
plx
pla
.1 jmp $FFFF
*--------------------------------------
A2osX.MLICALL1 jsr GO.MAINLC
stx .1
sta MLICALL.PARAMS
jsr MLI
.1 .BS 1
.DA MLICALL.PARAMS
jsr GO.AUXLC
rts
*--------------------------------------
A2osX.ROMCALL1 plx
stx .1+1
plx
stx .1+2
ldx RROMBNK1
jsr .1
ldx RRAMWRAMBNK1
ldx RRAMWRAMBNK1
rts
.1 jmp $FFFF
*--------------------------------------
GO.MAINLC php
clc
.HS 2C bit abs
GO.AUXLC php
sec
sei
sta A2osX.SaveA
pla keep P in A for later
stx A2osX.SaveX
sty A2osX.SaveY
plx
ply
inx
bne .1
iny
.1 stx GO.EXIT.JMP+1
sty GO.EXIT.JMP+2
ldx RRAMWRAMBNK1
ldx RRAMWRAMBNK1
ldy pStack
bcs GO.AUXLC1
GO.MAINLC1 tsx
stx A2osX.SaveSX
ldx A2osX.SaveSM
txs
stx CLRALTZP
bra GO.EXIT
*--------------------------------------
GO.AUXLC1 stx SETALTZP
tsx
stx A2osX.SaveSM
ldx A2osX.SaveSX
txs
*--------------------------------------
GO.EXIT sty pStack
pha push P on stack
ldy A2osX.SaveY
ldx A2osX.SaveX
lda A2osX.SaveA
plp
GO.EXIT.JMP jmp $FFFF
*--------------------------------------
A2osX.SaveA .BS 1
A2osX.SaveX .BS 1
A2osX.SaveY .BS 1
*--------------------------------------
BrkHandler sta SETPAGE2
bra *
*--------------------------------------
IrqHandler bra *
*--------------------------------------
A2osX.GP.End .EQ *
*--------------------------------------
* CONTROL SECTION :
*--------------------------------------
.DO A2osX.GP.End>$BEBF
ERROR:GP too big
.FIN
*--------------------------------------
.BS A2osX.GP.START+$100-*
.EP
*--------------------------------------
MAN
SAVE A2OSX.S.GP
LOAD A2OSX.S
ASM

View File

@ -1,153 +0,0 @@
PR#3
PREFIX /A2OSX.BOOT
DELETE A2OSX.SYSTEM
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
EnumKM.EPB .EQ $0D
EnumKM.EL .EQ $27
*--------------------------------------
EnumKM ldx #0
ldy Boot.Prefix
.1 inx
lda SYS,x
sta Boot.Prefix+1,y
iny
cpx SYS
bne .1
sty Boot.Prefix
jsr MLI
.DA #MLIOPEN
.DA MLIOPEN01
bcs .99
lda MLIOPEN01+5
sta MLIREAD01+1
sta MLICLOSE01+1
.2 jsr MLI
.DA #MLIREAD
.DA MLIREAD01
bcs .98
lda #EnumKM.EPB
sta EnumKM.EC
>LDYAI A2osX.ReadBuff+4
>STYA EnumKM.BPTR
.3 >LDYA EnumKM.BPTR
>STYA TmpPtr1
lda (TmpPtr1)
and #$F0 Empty ?
beq .5 yes, skip
and #$C0 anything out of type 1,2 or 3 ?
bne .5 yes, skip
lda (TmpPtr1)
and #$0F
cmp KM.PREFIX at least enough chars for KM.*?
bcc .5 no, skip
ldy #$10 file type
lda (TmpPtr1),y
cmp #$06 'BIN'?
bne .5 skip
ldy KM.PREFIX
.4 lda (TmpPtr1),y
cmp KM.PREFIX,y
bne .5
dey
bne .4
jsr LoadKM
.5 lda EnumKM.BPTR
clc
adc #EnumKM.EL
sta EnumKM.BPTR
bcc .6
inc EnumKM.BPTR+1
.6 dec EnumKM.EC
bne .3
bra .2
.8 jsr MLI
.DA #MLICLOSE
.DA MLICLOSE01
rts
.98 cmp #MLI.ERR.EOF
beq .8
pha
jsr .8
pla
.99 sec
rts
*--------------------------------------
EnumKM.EC .BS 1
EnumKM.BPTR .BS 2
*--------------------------------------
LoadKM ldx Boot.Prefix
.1 lda Boot.Prefix,x
sta KM.Filename,x
dex
bne .1
ldx Boot.Prefix
lda (TmpPtr1)
and #$0F
tay
clc
adc Boot.Prefix
sta KM.Filename
tax
.2 lda (TmpPtr1),y
sta KM.Filename,x
dex
dey
bne .2
>LDAXI MSG.KMLOAD
jsr PrintCStrAX
>LDAXI KM.Filename
jsr PrintPStrAX
jsr CROUT
jsr MLI
.DA #MLIOPEN
.DA MLIOPEN02
bcs .99
lda MLIOPEN02+5
sta MLIREAD02+1
sta MLICLOSE02+1
jsr MLI
.DA #MLIREAD
.DA MLIREAD02
bcs .98
jsr .9
jsr A2osX.KMLOAD
jsr CROUT
.98 pha
jsr .9
pla
sec
rts
.9 jsr MLI
.DA #MLICLOSE
.DA MLICLOSE02
.99 rts
*--------------------------------------
MAN
SAVE A2OSX.S.KM
LOAD A2OSX.S
ASM

View File

@ -1,179 +0,0 @@
PR#3
PREFIX /A2OSX.BOOT
DELETE A2OSX.SYSTEM
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
PrintPStrAX >STAX TmpPtr1
lda (TmpPtr1)
tax
beq .9
ldy #1
.1 lda (TmpPtr1),y
ora #$80
jsr COUT
iny
dex
bne .1
.9 rts
*--------------------------------------
PrintCStrAX >STAX TmpPtr1
pla
sta TmpPtr2
pla
sta TmpPtr2+1
ldy #0
.1 stz b0Flag
stz DigitCount
lda (TmpPtr1),y
beq .9
cmp #'%'
bne .4
.11 iny
lda (TmpPtr1),y
beq .9
cmp #'0'
bne .22
ror b0Flag beq -> CS
bra .11
.22 bcc .21
cmp #'9'+1
bcs .21
and #$0f
sta DigitCount
bra .11
.21 cmp #'d'
bne .2
pla
jsr PrintADec
bra .8
.2 cmp #'D'
bne .3
pla
plx
jsr PrintAXDec
bra .8
.3 cmp #'h'
bne .4
pla
jsr PRBYTE
.4 cmp #'\'
bne .7
iny
lda (TmpPtr1),y
beq .9
cmp #'n'
bne .9
lda #$0D
.7 ora #$80
jsr COUT
.8 iny
bne .1
.9 lda TmpPtr2+1
pha
lda TmpPtr2
pha
rts
*--------------------------------------
PrintADec ldx #0
PrintAXDec >STAX HEX
stz BCD
stz BCD+1
stz BCD+2
phy
ldx #16 let's roll 16 bits
sed
.2 asl HEX
rol HEX+1
php cpy will disturb carry while BCD adc
ldy #0
.3 plp
lda BCD,y
adc BCD,y
sta BCD,y
php
iny
cpy #3 Last byte of BCDBUF?
bne .3
plp
dex
bne .2
cld
ldx #0
ldy #5
.4 lda BCD,x
pha
and #$0F
ora #$B0
sta DigitBuffer,y
dey
pla
lsr
lsr
lsr
lsr
ora #$B0
sta DigitBuffer,y
inx
dey
bpl .4
lda DigitCount
beq .5
lda #6
sec
sbc DigitCount
.5 tay
.6 lda DigitBuffer,y
cmp #"0"
beq .7
sec
ror b0Flag
bra .8
.7 cpy #5
beq .8
lda #" "
bit b0Flag
bpl .81
lda #"0"
.8 jsr COUT
.81 iny
cpy #6
bne .6
.9 ply
rts
*--------------------------------------
HEX .BS 2
BCD .BS 3
b0Flag .BS 1
DigitCount .BS 1
DigitBuffer .BS 6
*--------------------------------------
MAN
SAVE A2OSX.S.TOOLS
LOAD A2OSX.S
ASM

View File

@ -4,6 +4,8 @@ NEW
INC 1
AUTO 6
ECHO *** A2osX Startup file ***
echo Working Directory:
CD
echo Env:
SET
# Main Screen
@ -14,12 +16,12 @@ STARTPROC GETTY CON ${A2OSX}SBIN/LOGIN
#STARTPROC GETTY COM2 LOGIN
#INSDRV PIC.DRV
# Network Section
#INSDRV UTHERNET.DRV 000E3A123456
INSDRV UTHERNET.DRV 000E3A123456
#INSDRV UTHERNET2.DRV 0008DC123456
#INSDRV UTHER2.AI.DRV 0008DC123456
#INSDRV LANCEGS.DRV
#STARTPROC TCPIP
#STARTPROC DHCPCLNT
STARTPROC TCPIP
STARTPROC DHCPCLNT
#STARTPROC HTTPD
#TELNETD
#MOUNT TFTP 192.168.1.5:/A2OSX /MNT/A2OSX

View File

@ -214,7 +214,7 @@ DIR.IN jsr SRC.GetArg
>LDYA L.SRC.BUFFER
>SYSCALL SYS.NewPStrYA
pha
phx
jsr FIO.OpenFileA
plx

View File

@ -162,6 +162,8 @@ CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.NewPStrYA
txa
ldy #SRC.hFILENAME
sta (pData),y

View File

@ -50,8 +50,6 @@ CS.INIT ldy #S.PS.hARGS
>SYSCALL SYS.PStrGetTkn
bcs .99
>DEBUG
ldy #hArg1
sta (pData),y
txa

View File

@ -552,6 +552,8 @@ Prompt.Save cmp #3
>SYSCALL SYS.FreeMemA
.11 >LDYA pData
>SYSCALL SYS.NewPStrYA
txa
ldy #hFileName
sta (pData),y

View File

@ -97,6 +97,7 @@ J.CTRL .DA Ctrl.Invalid
.DA 0
*--------------------------------------
CS.INIT stz hFile
stz TmpFilename
stz TmpLen
stz TmpLen+1
@ -104,50 +105,32 @@ CS.INIT stz hFile
ldy #bSaved
sta (pData),y
ldy #S.PS.hARGS
lda (pPs),y
beq .3
>SYSCALL SYS.GetArgC
cmp #1
beq .1
>SYSCALL SYS.GetMemPtrA
>STYA ZPPTR1
lda #1
>SYSCALL SYS.GetArgA
lda (ZPPTR1)
cmp #'/'
bne .1
>SYSCALL SYS.GetFullPathYA
stx TmpFilename
ldy #S.PS.hARGS
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.NewPStrYA
bra .2
.1 ldy #S.PS.hARGS
lda (pPs),y
>PUSHA
ldy #S.PS.hPREFIX
lda (pPs),y
>PUSHA
>SYSCALL SYS.PStrCat
.2 ldy #hFileName
sta (pData),y
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.LoadFileYA
bcs .3
bcs .1
stx hFile
>STYA TmpLen
.3 >LDYA TmpLen
.1 >LDYA TmpLen
iny
bne .4
bne .2
inc
.4 >PUSHYA
.2 >PUSHYA
>PUSHBI S.MEM.F.INIT0
>SYSCALL SYS.GetMem
bcs .98
>STYA ZPPTR2
txa
ldy #hBuffer
@ -174,7 +157,8 @@ CS.INIT stz hFile
inc ZPPTR2+1
bra .5
.6 jsr .98
.6 lda hFile
>SYSCALL SYS.FreeMemA
.7 ldy #FileLen
lda TmpLen
@ -183,6 +167,10 @@ CS.INIT stz hFile
lda TmpLen+1
sta (pData),y
lda TmpFilename
ldy #hFileName
sta (pData),y
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
@ -505,6 +493,7 @@ MSG.HELP >PSTRING "All commands: (* = Not yet implemented)"
EscChars >PSTRING "DBAC"
EscAscii .HS 04080A0B15
hFile .BS 1
TmpFilename .BS 1
TmpByte .BS 1
TmpLen .BS 2
TmpCount .BS 2

View File

@ -49,61 +49,47 @@ CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.LoadLibYA
sta hLIBSTR
lda #0
ldy #DS.END-DS.START-1
.11 sta (pData),y
dey
bpl .11
stz TmpBuffer256
ldy #S.PS.hARGS
lda (pPs),y
beq .1 no arg, go get current prefix
>SYSCALL SYS.GetArgC
cmp #1
bne .1
jsr CS.INIT.GETPFX no arg, go get current prefix
bra .3
>SYSCALL SYS.GetMemPtrA
.1 lda #1
>SYSCALL SYS.GetArgA
>STYA ZPPtr1
lda (ZPPtr1)
beq .1
ldy #1
lda (ZPPtr1),y
cmp #'/' full path starting with '/'?
bne .10 no, append to current prefix
beq .2 yes, do not append to current prefix
ldy #S.PS.hARGS yes, get back arg...
lda (pPs),y
bra .3
jsr CS.INIT.GETPFX
.10 ldy #S.PS.hARGS
lda (pPs),y
>PUSHA
ldy #S.PS.hPREFIX
lda (pPs),y
>PUSHA
.2 >PUSHW ZPPtr1
>PUSHWI TmpBuffer256
>SYSCALL SYS.PStrCat
ldy #hDIRPATH
sta (pData),y
bra .3
.1 ldy #S.PS.hPREFIX
lda (pPs),y
.3 >SYSCALL SYS.GetMemPtrA
>STYA ZPPtr1
>SYSCALL SYS.CheckPrefixYA is it a existing directory?
bcs .4 no, let ListDirInitYA extract pattern
lda (ZPPtr1)
.3 >LDYAI TmpBuffer256
>SYSCALL SYS.CheckPrefixYA is it a existing directory?
bcs .5 no, let ListDirInitYA extract pattern
lda TmpBuffer256
tay
lda #'/'
cmp (ZPPtr1),y
beq .31
cmp TmpBuffer256,y
beq .4
iny
sta (ZPPtr1),y
sta TmpBuffer256,y
.31 iny
.4 iny
lda #'*'
sta (ZPPtr1),y
sta TmpBuffer256,y
.4 >LDYA ZPPtr1
.5 >LDYAI TmpBuffer256
>SYSCALL SYS.ListDirInitYA
bcs .9
ldy #hS.LISTDIR
@ -118,6 +104,14 @@ CS.INIT >LDYA L.LIBSTR
.9 sec
rts
*--------------------------------------
CS.INIT.GETPFX ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>PUSHWI TmpBuffer256
>SYSCALL SYS.PStrCpy
rts
*--------------------------------------
CS.RUN ldy #bCANCEL
lda (pData),y
beq .1

View File

@ -44,9 +44,10 @@ L.MSG2 .DA MSG2
L.MSG3 .DA MSG3
.DA 0
*--------------------------------------
CS.INIT ldy #S.PS.hARGS
lda (pPs),y
CS.INIT >SYSCALL SYS.GetArgC
cmp #1
bne .1
lda #SYSMGR.ERRSYN
sec
rts
@ -93,9 +94,8 @@ CS.INIT ldy #S.PS.hARGS
CS.RUN jsr Init.Timeout
.1 >PUSHW pData DST.IP
ldy #S.PS.hARGS
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
lda #1
>SYSCALL SYS.GetArgA
>PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME
bcc .2
@ -103,9 +103,8 @@ CS.RUN jsr Init.Timeout
jsr Wait.Timeout
bcc .1
ldy #S.PS.hARGS
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
lda #1
>SYSCALL SYS.GetArgA
>PUSHYA
>PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF
@ -113,9 +112,8 @@ CS.RUN jsr Init.Timeout
sec
rts
.2 ldy #S.PS.hARGS
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
.2 lda #1
>SYSCALL SYS.GetArgA
>PUSHYA
ldy #3

View File

@ -37,7 +37,6 @@ CS.START cld
L.LIBSTR .DA LIBSTR
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
L.MSG2 .DA MSG2
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBSTR
@ -56,17 +55,7 @@ CS.RUN >LDYAI TSKMGR.TABLE+S.PS.SIZE
.1 lda (ZPPTR1)
bpl .4
ldy #S.PS.hARGS
lda (ZPPTR1),y
beq .2
>SYSCALL SYS.GetMemPtrA
>PUSHYA
bra .3
.2 >PUSHW L.MSG2
.3 ldy #S.PS.hCMD
ldy #S.PS.hCMDLINE
lda (ZPPTR1),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
@ -80,7 +69,7 @@ CS.RUN >LDYAI TSKMGR.TABLE+S.PS.SIZE
ldy #S.PS.ID
lda (ZPPTR1),y
>PUSHA DevID
>PUSHA PID
>PUSHW L.MSG1
>LIBCALL hLibStr,LIBSTR.PRINTF
@ -112,9 +101,8 @@ CS.END
hLibStr .BS 1
PS.COUNT .BS 1
LIBSTR >PSTRING "libstr.o"
MSG0 >CSTRING "ID Flags PID CMD ARGS\n"
MSG1 >CSTRING "%03d %b %03d %30S %28S\n"
MSG2 >PSTRING "(none)"
MSG0 >CSTRING "ID Flags PID Command Line\n"
MSG1 >CSTRING "%03d %b %03d %S\n"
MAN
SAVE BIN/PS.S
ASM

View File

@ -124,7 +124,7 @@ L.MSG.DETECT.KO .DA MSG.DETECT.KO
L.DEV.HEADER.NAME .DA DEV.HEADER.NAME
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect sta hArgs
Dev.Detect >STYA ARGS
>LDYA L.MSG.DETECT
>SYSCALL SYS.PSTROutYA
@ -154,8 +154,11 @@ Dev.Detect sta hArgs
.3 stx DEVSLOTx0
lda hARGS
>LDYA ARGS
>STYA ZPTmpPTR
lda (ZPTmpPTR)
bne .4
lda #$00
sta MAC
lda #$0E
@ -171,9 +174,7 @@ Dev.Detect sta hArgs
sta MAC+5
bra .8
.4 >SYSCALL SYS.GetMemPtrA
>STYA ZPTmpPTR
jsr DecodeMac
.4 jsr DecodeMac
bcc .8
lda #DEVMGR.ERRICL
sec
@ -194,7 +195,7 @@ CS.END
MSG.DETECT >PSTRING "UtherNet/CS8900A Driver.\n"
MSG.DETECT.OK >PSTRING "UtherNet/CS8900A Installed As Device : "
MSG.DETECT.KO >PSTRING "Hardware Not Found.\n"
hArgs .BS 1
ARGS .BS 2
*--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------

View File

@ -16,16 +16,18 @@ K.PS.MAX .EQ 64
*--------------------------------------
ZPKERNEL .EQ $0
*--------------------------------------
ZPMEMMGR .EQ $8
*--------------------------------------
pCode .EQ $10
pData .EQ $12
pStack .EQ $14
pLib .EQ $16
pDev .EQ $18
pDrv .EQ $18
pEvent .EQ $1A
pPs .EQ $1C
pDrv .EQ $1E
pPs .EQ $1A
pDev .EQ $1C
pEvent .EQ $1E
ZPDRV .EQ $80
ZPBIN .EQ $90
@ -34,10 +36,6 @@ ZPLIB .EQ $A0 32 bytes for TCPIP
* !!!!!!! RESERVED APPLESOFT.I !!!!!!!
* $5E -> $C8
*--------------------------------------
* $B0 -> $FF KERNEL RESERVED
*--------------------------------------
ZPMemMgr .EQ $E0
*--------------------------------------
R.VCPU16 .EQ $F0
R.AX .EQ R.VCPU16
R.AL .EQ R.VCPU16
@ -73,6 +71,8 @@ D.STACK.TOP .EQ $03F0 ...Down to $0300
* Main/Aux $400 -> $7FF : Console Screen
* Main/Aux $800 -> $BFF : System Screen
*--------------------------------------
KrnBuffer256 .EQ $0C00
*--------------------------------------
*** Z80 Reserved ***
*--------------------------------------
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
@ -84,7 +84,7 @@ DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b
*--------------------------------------
TskMgr.Table .EQ $1400 K.PS.MAX*S.PS.SIZE=64*16=1k
*--------------------------------------
* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes)
* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes)
*--------------------------------------
MemMgr.Table .EQ $1800
MemMgr.HiMem .EQ $1800 Slot 0 is Reserved
@ -105,9 +105,10 @@ A2osX.LIBCALL .EQ $BE03
A2osX.MLICALL .EQ $BE06
A2osX.ROMCALL .EQ $BE09
*--------------------------------------
pDevJmp .EQ $BE10
pCodeJmp .EQ $BE13
pLibJmp .EQ $BE16
pCodeJmp .EQ $BE10
pLibJmp .EQ $BE13
pDrvJmp .EQ $BE16
pDevJmp .EQ $BE19
*--------------------------------------
* $12 bytes min !!!!
*--------------------------------------
@ -159,28 +160,26 @@ SYS.GetStockObjectA .EQ $0C
SYS.FreeStockObject .EQ $0E
*--------------------------------------
SYS.NewPStrYA .EQ $10
SYS.PStrCpy .EQ $12
SYS.PStrCat .EQ $14
SYS.PStrUprYA .EQ $16
SYS.PStrGetTkn .EQ $18
SYS.GetArgCount .EQ $1C
SYS.GetArgA .EQ $1E
SYS.PStr2StrArrayYA .EQ $1A
*--------------------------------------
SYS.LoadDrvYA .EQ $20
SYS.LoadLibYA .EQ $22
SYS.UnloadLibA .EQ $24
SYS.LoadDrvA .EQ $26
*--------------------------------------
SYS.ExpandPStrA .EQ $30
SYS.ExpandPStrYA .EQ $32
SYS.PutEnvYA .EQ $34
SYS.GetEnvVarYA .EQ $36
SYS.SetEnvVarH .EQ $38
SYS.SetEnvVarP .EQ $3A
SYS.DelEnvVarA .EQ $3C
SYS.DelEnvVarYA .EQ $3E
SYS.ExpandPStrYA .EQ $32
SYS.GetArgC .EQ $34
SYS.GetArgA .EQ $36
SYS.PutEnvYA .EQ $38
SYS.SetEnv .EQ $3A
SYS.GetEnvYA .EQ $3C
SYS.UnsetEnvYA .EQ $3E
*--------------------------------------
SYS.MLICreateFile .EQ $40
@ -238,7 +237,7 @@ SYS.Sleep .EQ $9C
*--------------------------------------
SYS.CheckPrefixYA .EQ $A0
SYS.FileSearch .EQ $A2
SYS.GetFullPathYA .EQ $A4
SYS.LoadFileYA .EQ $A6
SYS.ListDirInitYA .EQ $AA
@ -439,8 +438,8 @@ S.PS.hCS .EQ 3
S.PS.hDS .EQ 4
S.PS.hPREFIX .EQ 5
S.PS.hENV .EQ 6
S.PS.hCMD .EQ 7
S.PS.hARGS .EQ 8
S.PS.hCMDLINE .EQ 7
*S.PS.hARGS .EQ 8
S.PS.hINDEV .EQ 9
S.PS.hOUTDEV .EQ 10
S.PS.hERRDEV .EQ 11

View File

@ -104,12 +104,6 @@ AUTO 6
jsr A2osX.MLICALL
.EM
*--------------------------------------
.MA DRVCALL
ldy ]1
ldx #]2
jsr A2osX.DRVCALL
.EM
*--------------------------------------
.MA LIBCALL
ldy ]1
@ -132,11 +126,9 @@ AUTO 6
.MA PUSHYA
dec pStack
sta (pStack)
pha
tya
dec pStack
sta (pStack)
pla
.EM
*--------------------------------------
.MA PULLYA

View File

@ -11,9 +11,9 @@ AUTO 6
.INB INC/MACROS.I
.INB INC/A2OSX.I
*--------------------------------------
ZPTmpPtr1 .EQ ZPLIB+2
ZPTmpPtr2 .EQ ZPLIB+4
ZPTmpPtr3 .EQ ZPLIB+6
ZPTmpPtr1 .EQ ZPLIB
ZPTmpPtr2 .EQ ZPLIB+2
ZPTmpPtr3 .EQ ZPLIB+4
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------

View File

@ -372,8 +372,6 @@ DNS.DecodeMsg sta hFrame1
>SYSCALL SYS.GetMemPtrA
>STYA ZPFrameBase1
* >DEBUG
ldy #S.DNS.F+1
lda (ZPFrameBase1),y
and /S.DNS.F.QR

View File

@ -209,131 +209,7 @@ Destop.Paint lda #4
.8 rts
*--------------------------------------
* Midpoint algorithm
{
dx=x2-x1;
if (dx=0) => VLINE;
if(dx<0)
{
swap(&x1,&x2);
swap(&y1,&y2);
dx=-dx;
}
dy=y2-y1;
if (dy=0) => HLINE;
if (dy<0)
{
incY=-1;
dy=-dy;
}
else
{
incY=1;
}
if(dy>dx)
{
incE=2*dx;
d=incE-dy;
incNE=2*(dx-dy);
while(y1<y2)
{
if(d>0)
{
d=d+incNE;
x1=x1+incY;
}
else
d=d+incE;
y1++;
putpixel(x1,y1,COLOR);
}
}
else
{
incE=2*dy;
d=incE-dx;
incNE=2*(dy-dx);
while(x1<x2)
{
if(d>0)
{
d=d+incNE;
y1=y1+incY;
}
else
d=d+incE;
x1++;
putpixel(x1,y1,COLOR);
}
}
*--------------------------------------
DrawLine >STYA ZPBase
ldy #9
.1 lda (ZPBase),y
sta ZPCtrlBlk,y
dey
bpl .1
lda ZPCtrlBlk+4 X2.LO
sec
sbc ZPCtrlBlk X1.LO
sta DrawLine.DX
lda ZPCtrlBlk+5 X2.HI
sbc ZPCtrlBlk+1 X1.HI
sta DrawLine.DX+1
ora DrawLine.DX DX=0?
beq DrawLineV yes, call DRV.VLINE
bcs .2 is CS, X1<X2, no swap,no ABS
lda ZPCtrlBlk SWAP X1,X2
ldx ZPCtrlBlk+4
sta ZPCtrlBlk+4
stx ZPCtrlBlk
lda ZPCtrlBlk+1
ldx ZPCtrlBlk+5
sta ZPCtrlBlk+5
stx ZPCtrlBlk+1
lda ZPCtrlBlk+2 SWAP Y1,Y2
ldx ZPCtrlBlk+6
sta ZPCtrlBlk+6
stx ZPCtrlBlk+2
lda ZPCtrlBlk+3
ldx ZPCtrlBlk+7
sta ZPCtrlBlk+7
stx ZPCtrlBlk+3
lda #0 DX=-DX
sec
sbc DrawLine.DX
sta DrawLine.DX
lda #0
sbc DrawLine.DX+1
sta DrawLine.DX+1
.2 lda ZPCtrlBlk+6 Y2.LO
sec
sbc ZPCtrlBlk+2 Y1.LO
sta DrawLine.DY
lda ZPCtrlBlk+7 Y2.HI
sbc ZPCtrlBlk+3 Y1.HI
sta DrawLine.DY+1
ora DrawLine.DY DY=0?
beq DrawLineH yes, call DRV.HLINE
bcs .3 is CS, Y1<Y2
.3
*--------------------------------------
GoDevGFX jmp (pDevGFX)
GoDevMouse jmp (pDevMouse)

View File

@ -35,8 +35,8 @@ L.MSG.USAGE .DA MSG.USAGE
L.MSG.GREETINGS .DA MSG.GREETINGS
.DA 0 End Of Reloc Table
*--------------------------------------
CS.INIT ldy #S.PS.hARGS
lda (pPs),y
CS.INIT >SYSCALL SYS.GetArgC
cmp #1
bne .1
>LDYA L.MSG.USAGE
@ -45,14 +45,8 @@ CS.INIT ldy #S.PS.hARGS
sec
rts
.1 >PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 1 Push 1 for getting INDEV
>SYSCALL SYS.PStrGetTkn
bcs .99
sta hDEVNAME
>SYSCALL SYS.GetMemPtrA
.1 lda #1
>SYSCALL SYS.GetArgA
>SYSCALL SYS.GetDevByNameYA
bcs .98
@ -66,31 +60,24 @@ CS.INIT ldy #S.PS.hARGS
ldy #S.PS.hERRDEV
sta (pPs),y
lda hDEVNAME
>SYSCALL SYS.FreeMemA
ldx #DEVMGR.OPEN
jsr pDevJmp
bcs .99
ldy #S.PS.hARGS
lda (pPs),y
>PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 2 Push 2 for getting BIN
>SYSCALL SYS.PStrGetTkn
lda #2
>SYSCALL SYS.GetArgA
bcs .99
>SYSCALL SYS.NewPStrYA
bcs .99
txa
ldy #hBinName
sta (pData),y
clc
rts
.98 pha
lda hDEVNAME
>SYSCALL SYS.FreeMemA
pla
sec
.98 sec
.99 rts
*--------------------------------------
CS.RUN lda #13 try send a CR...
@ -112,7 +99,7 @@ CS.RUN lda #13 try send a CR...
ldy #hBinName
lda (pData),y
ldy #0
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.ExecProcessNewEnvYA
.9 rts
@ -135,7 +122,6 @@ CS.QUIT ldy #hBinName
CS.END
MSG.USAGE >PSTRING "GETTY <DEV> <PROGRAM>"
MSG.GREETINGS >PSTRING "\e[12h\nA2osX-GeTTY on Dev=%S\n"
hDEVNAME .BS 1
*--------------------------------------
.DUMMY
.OR 0

View File

@ -34,23 +34,33 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.HELP .DA MSG.HELP
L.MSG.LOAD .DA MSG.LOAD
.DA 0
*--------------------------------------
CS.INIT ldy #S.PS.hARGS
lda (pPs),y
CS.INIT >SYSCALL SYS.GetArgC
cmp #1
bne .1
>LDYA L.MSG.HELP
>SYSCALL SYS.PSTROutYA
bra .8
.1 >SYSCALL SYS.LoadDrvA
bcs .9
.8 lda #0 tell TSKMGR that all done ok, but
.9 sec we do not want to stay in memory
lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
.1 lda #1 get PTR to ARG[1] (Driver name)
>SYSCALL SYS.GetArgA
>PUSHYA
>LDYA L.MSG.LOAD
>SYSCALL SYS.PSTROutYA
lda #1 get PTR to ARG[1] (Driver name)
>SYSCALL SYS.GetArgA
>SYSCALL SYS.LoadDrvYA YA = PTR to ARG[1...n]
sec we do not want to stay in memory
.99 rts
*--------------------------------------
CS.RUN
CS.DOEVENT
@ -58,7 +68,9 @@ CS.QUIT clc
rts
*--------------------------------------
CS.END
MSG.HELP >PSTRING "Usage: insdrv </path/drv/>file.drv <args>\n"
MSG.HELP >PSTRING "Usage: insdrv file.drv <args>\n"
MSG.LOAD >PSTRING "INSDRV:Loading %S...\n"
*--------------------------------------
MAN
SAVE SBIN/INSDRV.S
ASM

View File

@ -38,14 +38,7 @@ L.MSG.PASSWORD .DA MSG.PASSWORD
L.SHELL .DA SHELL
.DA 0
*--------------------------------------
CS.INIT >LDYA L.SHELL
>SYSCALL SYS.NewPStrYA
bcs .9
ldy #hSHELL
sta (pData),y
lda (pPs)
CS.INIT lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc Tell TskMgr To stay in memory
@ -89,9 +82,7 @@ CS.RUN lda #0
>SYSCALL SYS.COutA
bcs .9
ldy #hSHELL
lda (pData),y
ldy #0
>LDYA L.SHELL
>SYSCALL SYS.ExecProcessNewEnvYA
bcs .9
@ -124,10 +115,7 @@ CS.DOEVENT ldy #S.EVT.hDEV
.99 sec
rts
*--------------------------------------
CS.QUIT ldy #hSHELL
lda (pData),y
>SYSCALL SYS.FreeMemA
clc
CS.QUIT clc
rts
*--------------------------------------
* PRIVATE
@ -210,7 +198,7 @@ INPUT.LINEIN ldy #INPUT.Status
CS.END
MSG.LOGIN >PSTRING "login:"
MSG.PASSWORD >PSTRING "password:"
SHELL >PSTRING "SBIN/SHELL"
SHELL >PSTRING "${A2OSX}SBIN/SHELL"
.DUMMY
.OR 0
DS.START
@ -219,7 +207,6 @@ INPUT.Status .BS 1
INPUT.PassChar .BS 1
hUSERNAME .BS 1
hPASSWORD .BS 1
hSHELL .BS 1
DS.END
.ED
*--------------------------------------

View File

@ -5,289 +5,284 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
EXEC.CMD stz hFullCmd
stz hEnvPath
ldy #hCmdLine
lda (pData),y
>PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 0 Push 0 for getting CMD & ARGS
>SYSCALL SYS.PStrGetTkn
* Y,A -> Command line (formatted & not empty)
*--------------------------------------
Cmd.ExecYA stz Cmd.Exec.Mode
Cmd.ExecYA.1 >SYSCALL SYS.ExpandPStrYA
bcs .99
stx hCmdLine
sta hExecCmd
stx hExecArgs
>SYSCALL SYS.GetMemPtrA
>STYA ZPPtr1
ldx #0
stz ExecCmdIdx
stz ExecCmdMode
.1 lda CMDS,x
beq .6
cmp (ZPPtr1)
bne .5
ldy #1
ldx #0 ARGS len
phx
ldy #0
.2 iny
inx
lda (ZPPtr1),y
cmp #'a'
bcc .3
.10 cmp #'a'
bcc .11
cmp #'z'+1
bcs .3
eor #$20 to Uppercase
.3 cmp CMDS,x
bne .4
bcs .11
eor #$20 to Uppercase
.11 sta CMD,y Store Cmd in Buffer
sty CMD update CMD len
tya
cmp (ZPPtr1)
bne .2
plx
beq .13 end of string
ldx ExecCmdIdx
jsr EXEC.CMD.INT
jmp EXEC.CMD.ClnUp
.4 plx
.5 txa
sec
adc CMDS,x
tax
inc ExecCmdIdx
inc ExecCmdIdx
bra .1
.6 jsr EXEC.CMD.EXT
jmp EXEC.CMD.ClnUp
.99 rts
*--------------------------------------
EXEC.CMD.ClnUp pha
php
lda hFullCmd
beq .1
>SYSCALL SYS.FreeMemA
.1 lda hEnvPath
beq .2
>SYSCALL SYS.FreeMemA
.2 lda hExecArgs
beq .3
>SYSCALL SYS.FreeMemA
.3 lda hExecCmd
beq .8
>SYSCALL SYS.FreeMemA
.8 plp
pla
rts
*--------------------------------------
EXEC.CMD.INT jmp (J.INTCMDS,x)
*--------------------------------------
* ZPPtr1 = hExecCmd
*--------------------------------------
EXEC.CMD.EXT ldy #1
iny
lda (ZPPtr1),y
cmp #'/'
bne .1
>LDYA ZPPtr1
>SYSCALL SYS.NewPStrYA
bra .10
.1 >LDYA L.ENV.PATH push ENVNAME=PATH
>SYSCALL SYS.GetEnvVarYA get value for ENV=PATH
cmp #' '
bne .10
bcc .12
jmp .9
.12 tya
cmp (ZPPtr1)
beq .13 end of string
.12 sta hEnvPath
>PUSHB hExecCmd
>PUSHB hEnvPath
>SYSCALL SYS.FileSearch
bcc .10
>PUSHB hExecCmd
ldy #S.PS.hPREFIX
lda (pPs),y
>PUSHA
>SYSCALL SYS.FileSearch
.10 bcs .9
sta hFullCmd
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.MLIGetFileInfoYA
bcs .9
>STYA ZPPTR1
ldy #1 Get File Type
lda (ZPPTR1),y
cmp #$04 TXT File ?
bne .2
iny
lda (ZPPtr1),y
inx
sta ARGS,x
bra .12
lda hFullCmd
jsr OpenTxtFileA
bcs .9
.13 stx ARGS update ARGS len
lda hCmdLine Discard Expanded Cmd Line
>SYSCALL SYS.FreeMemA
>LDYA L.CMDS
>STYA ZPPtr2
lda hExecArgs
beq .11
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.NewPStrYA
bcs .9
.11 ldy #hInputArgs
sta (pData),y
bra .9
ldx #0
.2 cmp #$06 BIN File ?
.1 lda (ZPPtr2)
beq Cmd.Exec.EXT Ending 0, must be an external Cmd....
cmp CMD
bne .4
lda hFullCmd
ldy hExecArgs
bit ExecCmdMode
bmi .3 startproc
tay
>SYSCALL SYS.ExecProcessNewEnvYA
bra .9
.3 >SYSCALL SYS.CreateProcessYA
bra.9
.2 lda CMD,y
.3 cmp (ZPPtr2),y
bne .4
dey
bne .2
.4 cmp #$ff SYS File ?
bne .5
jmp (J.INTCMDS,x) Found an internal Cmd...
.4 inx
inx
lda ZPPtr2
sec
adc (ZPPtr2)
sta ZPPtr2
bcc .1
inc ZPPtr2+1
bra .1
.99 rts
*--------------------------------------
Cmd.Exec.EXT ldy #1
lda CMD,y
cmp #'/' Command line is already full path, no search
beq .3
>LDYA L.ENV.PATH push ENVNAME=PATH for search
>SYSCALL SYS.GetEnvYA get value for ENV=PATH
bcs .1 No PATH, try in CD
>PUSHYA push search list
>PUSHW L.CMD
>SYSCALL SYS.FileSearch
bcc .2
.1 ldy #S.PS.hPREFIX not found, try in CD
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA push search list
>PUSHW L.CMD
>SYSCALL SYS.FileSearch
bcs .99
.2 phx save X=hMem, Y,A = Filename
>PUSHYA
>PUSHW L.CMD replace CMD in TmpBuffer with full path
>SYSCALL SYS.PStrCpy
pla
>SYSCALL SYS.FreeMemA Discard this string...
.3 stz TmpBuffer256 reset TmpBuffer256 for final CMDLINE
>LDYA L.CMD
>SYSCALL SYS.MLIGetFileInfoYA
bcs .99
>STYA ZPPtr2
ldy #1 Get File Type
lda (ZPPtr2),y
cmp #$04 TXT File ?
beq Cmd.Exec.EXT.TXT
cmp #$06 BIN File ?
beq Cmd.Exec.EXT.BIN
cmp #$ff SYS File ?
bne .9
bra *
.5 lda #SYSMGR.ERRSYN
.9 lda #SYSMGR.ERRSYN
sec
.9 rts
.99 rts
*--------------------------------------
EXEC.CMD.CD lda hExecArgs
bne EXEC.CMD.CD.C
* TXT : Launch "/PATH/SHELL /PATH/CMD ARGS"
*--------------------------------------
Cmd.Exec.EXT.TXT
lda #0 Get arg[0] = /PATH/SHELL
>SYSCALL SYS.GetArgA
>PUSHYA
>PUSHWI TmpBuffer256
>SYSCALL SYS.PStrCpy
inc TmpBuffer256 Add a space....
ldy TmpBuffer256
lda #' '
sta TmpBuffer256,y
*--------------------------------------
* BIN : Launch "/PATH/CMD ARGS"
*--------------------------------------
Cmd.Exec.EXT.BIN
>PUSHW L.CMD
>PUSHWI TmpBuffer256
>SYSCALL SYS.PStrCat
lda ARGS
beq .1
inc TmpBuffer256 Add a space....
ldy TmpBuffer256
lda #' '
sta TmpBuffer256,y
>PUSHW L.ARGS
>PUSHWI TmpBuffer256
>SYSCALL SYS.PStrCat
.1 >LDYAI TmpBuffer256
bit Cmd.Exec.Mode
bmi .2 startproc
>SYSCALL SYS.ExecProcessNewEnvYA
rts
.2 >SYSCALL SYS.CreateProcessYA
rts
*--------------------------------------
* Internal Commands
*--------------------------------------
Cmd.Exec.CD lda ARGS
bne Cmd.Exec.CD1
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.PSTROutYA
bcs .9
lda #13
>SYSCALL SYS.COutA
clc
rts
.9 rts
EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
>STYA ZPPTR2
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>STYA ZPPTR1
>PUSHWI MLI.MAXPATH+1 Get a buffer for new PATH
>PUSHBI 0 no particular Option
>SYSCALL SYS.GetMem
bcs .99
>STYA ZPPTR3
stx hNEWPATH
lda #0
sta (ZPPTR3)
ldy #1
lda (ZPPTR2),y
Cmd.Exec.CD1 lda ARGS+1
cmp #'/' Full Path?
beq .3
cmp #'.' ".." ?
bne .2
lda (ZPPTR2)
cmp #2
bne .97
iny
lda (ZPPTR2),y
cmp #'.'
bne .97
lda (ZPPTR1)
tay
.1 dey
beq .97
lda (ZPPTR1),y
cmp #'/'
bne .1
tya
sta (ZPPTR3)
.11 lda (ZPPTR1),y
sta (ZPPTR3),y
dey
bne .11
bra .4
.97 lda #SYSMGR.ERRSYN
.98 pha
lda hNEWPATH
>SYSCALL SYS.FreeMemA
pla
sec
.99 rts
.2 >PUSHW ZPPTR1
>PUSHW ZPPTR3
>LIBCALL hLIBSTR,LIBSTR.STRCPYP
.3 >PUSHW ZPPTR2
>PUSHW ZPPTR3
>LIBCALL hLIBSTR,LIBSTR.STRCATP
lda (ZPPTR3)
tay
lda #'/' Ending with '/'?
cmp (ZPPTR3),y
beq .4
iny
sta (ZPPTR3),y
tya
sta (ZPPTR3)
.4 >LDYA ZPPTR3
>SYSCALL SYS.CheckPrefixYA
bcs .98
ldy #S.PS.hPREFIX
>LDYA L.ARGS
bra Cmd.Exec.CD.Change
.1 ldy #S.PS.hPREFIX no, init target prefix with actual
lda (pPs),y
pha
lda hNEWPATH
sta (pPs),y
pla
>SYSCALL SYS.FreeMemA
clc
rts
*--------------------------------------
EXEC.CMD.STARTPROC
lda hExecCmd
>SYSCALL SYS.FreeMemA
stz hExecCmd
lda hExecArgs
beq .9
>PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 0 Push 0 for getting CMD & ARGS
>SYSCALL SYS.PStrGetTkn
bcs .99
phx
sta hExecCmd
>SYSCALL SYS.GetMemPtrA
>STYA ZPPTR1
>PUSHYA
>PUSHWI TmpBuffer256
>SYSCALL SYS.PStrCpy
lda hExecArgs
>SYSCALL SYS.FreeMemA
pla
sta hExecArgs
lda ARGS+1
cmp #'.' ".." ?
bne .3
cmp ARGS+2 ".." ?
bne .9
sec
ror ExecCmdMode
jmp EXEC.CMD.EXT
ldy TmpBuffer256 remove last dir component in actual prefix
.2 dey
beq .9 nothing to remove, synerr
lda TmpBuffer256,y
cmp #'/'
bne .2
sty TmpBuffer256
>LDYAI TmpBuffer256
bra Cmd.Exec.CD.Change
.9 lda #SYSMGR.ERRSYN
sec
.99 rts
rts
.3 >PUSHW L.ARGS Append ARG to buffer
>PUSHWI TmpBuffer256
>SYSCALL SYS.PStrCat
ldx TmpBuffer256
lda #'/' Ending with '/'?
cmp TmpBuffer256,x
beq .4
sta TmpBuffer256+1,x
inc TmpBuffer256
.4 >LDYAI TmpBuffer256
Cmd.Exec.CD.Change
>STYA ZPPtr1
>SYSCALL SYS.CheckPrefixYA
bcs .9
>LDYA ZPPtr1
>SYSCALL SYS.NewPStrYA
bcs .9
phx
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL SYS.FreeMemA
pla
ldy #S.PS.hPREFIX
sta (pPs),y
clc
.9 rts
*--------------------------------------
EXEC.CMD.SET lda hExecArgs
bne EXEC.CMD.SETVAR
Cmd.Exec.STARTPROC
lda ARGS
beq Cmd.Exec.ERRSYN
sec
ror Cmd.Exec.Mode
>LDYA L.ARGS
jmp Cmd.ExecYA.1
Cmd.Exec.ERRSYN lda #SYSMGR.ERRSYN
sec
rts
*--------------------------------------
Cmd.Exec.SET lda ARGS
bne Cmd.Exec.SETVAR
ldy #S.PS.hENV
lda (pPs),y
@ -298,82 +293,79 @@ EXEC.CMD.SET lda hExecArgs
beq .8 Ending 0 ?
>LDYA ZPPTR1
>SYSCALL SYS.PSTROutYA
bcs .9
lda ZPPTR1
sec
adc (ZPPTR1) Add len+1 to PTR
sta ZPPTR1
bcc .2
inc ZPPTR1+1
.2 lda #'='
>SYSCALL SYS.COutA
bcs .9
>LDYA ZPPTR1
>SYSCALL SYS.PSTROutYA
bcs .9
lda #13
>SYSCALL SYS.COutA
bcs .9
lda ZPPTR1
sec
adc (ZPPTR1) Add len+1 to PTR
sta ZPPTR1
bcc .1
inc ZPPTR1
inc ZPPTR1+1
bra .1
.8 clc
rts
.9 rts
EXEC.CMD.SETVAR >PUSHA Push Cmd Line
>PUSHBI $3D Push SEP='='
>PUSHBI 0 Push Token IDX
>SYSCALL SYS.PStrGetTkn
bcc .3
lda #SYSMGR.ERRSYN
Cmd.Exec.SETVAR tax
lda ARGS,x
cmp #'=' ARGS ends with =, UnsetEnv
beq .2
.1 dex
beq .3 no =, GetEnv
lda ARGS,x
cmp #'=' ARGS contains =, PutEnv
bne .1
cpx #1 string is '=value' ?
beq Cmd.Exec.ERRSYN syntax error
>LDYA L.ARGS String is VAR=VALUE...
>SYSCALL SYS.PutEnvYA
rts
.3 sta hVarName
stx hVarValue
txa
beq .31
.2 dec ARGS String is "VAR=", Remove endig '='
>LDYA L.ARGS String is "VAR"...
>SYSCALL SYS.UnsetEnvYA
rts
>PUSHB hVarValue
>PUSHB hVarName
>SYSCALL SYS.SetEnvVarH
jmp .97
.31 lda hExecArgs
>SYSCALL SYS.GetMemPtrA
>STYA ZPPTR1
lda (ZPPTR1)
tay
lda (ZPPTR1),y
cmp #'='
bne .4
lda hVarName
>SYSCALL SYS.DelEnvVarA
bra .97
.4 lda hVarName
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.GetEnvVarYA
bcs .97
sta hVarValue
lda hVarName
>SYSCALL SYS.GetMemPtrA
.3 >LDYA L.ARGS String is VAR...
>SYSCALL SYS.PSTROutYA
bcs .9
lda #'='
>SYSCALL SYS.COutA
lda hVarValue
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.PSTROutYA
lda #13
bcs .9
>LDYA L.ARGS
>SYSCALL SYS.GetEnvYA
bcs .8
>SYSCALL SYS.PSTROutYA Y,A = VALUE
.8 lda #13
>SYSCALL SYS.COutA
clc
.97 php
pha
lda hVarValue
beq .98
>SYSCALL SYS.FreeMemA
.98 lda hVarName
>SYSCALL SYS.FreeMemA
pla
php
rts
.9 rts
*--------------------------------------
EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime
Cmd.Exec.DATE >SYSCALL SYS.MLIGetTime
bcs .9
>PUSHW DATELO
>LIBCALL hLIBSTR,LIBSTR.PRINTDATE
@ -382,7 +374,7 @@ EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime
clc
.9 rts
*--------------------------------------
EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime
Cmd.Exec.TIME >SYSCALL SYS.MLIGetTime
bcs .9
>PUSHW TIMELO
>LIBCALL hLIBSTR,LIBSTR.PRINTTIME
@ -391,28 +383,22 @@ EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime
clc
.9 rts
*--------------------------------------
EXEC.CMD.ECHO lda hExecArgs
beq .98
>SYSCALL SYS.ExpandPStrA
bcs .99
pha
>SYSCALL SYS.GetMemPtrA
Cmd.Exec.ECHO lda ARGS
beq .9
>LDYA L.ARGS
>SYSCALL SYS.PSTROutYA
lda #13
>SYSCALL SYS.COutA
pla
>SYSCALL SYS.FreeMemA
clc
rts
.98 lda #SYSMGR.ERRSYN
.9 lda #SYSMGR.ERRSYN
sec
.99 rts
rts
*--------------------------------------
EXEC.CMD.TYPE lda hExecArgs
Cmd.Exec.TYPE lda ARGS
beq .98
>SYSCALL SYS.GetMemPtrA
>LDYA L.ARGS
>SYSCALL SYS.LoadFileYA
bcs .99
@ -444,17 +430,17 @@ EXEC.CMD.TYPE lda hExecArgs
sec
.99 rts
*--------------------------------------
EXEC.CMD.READ
Cmd.Exec.READ
clc
rts
*--------------------------------------
EXEC.CMD.PAUSE ldy #bPause
Cmd.Exec.PAUSE ldy #bPause
lda #$80
sta (pData),y
clc
rts
*--------------------------------------
EXEC.CMD.EXIT ldy #bEXIT
Cmd.Exec.EXIT ldy #bEXIT
lda #$FF
sta (pData),y
clc

View File

@ -5,7 +5,7 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
History.Init >PUSHWI 256 Get a buffer for History
HIS.Init >PUSHWI 256 Get a buffer for History
>PUSHBI S.MEM.F.INIT0
>SYSCALL SYS.GetMem
bcs .9
@ -21,7 +21,7 @@ History.Init >PUSHWI 256 Get a buffer for History
sta (pData),y
.9 rts
*--------------------------------------
History.Add ldy #hCmdHistory
HIS.Add ldy #hCmdHistory
lda (pData),y
beq .9
>SYSCALL SYS.GetMemPtrA
@ -88,7 +88,7 @@ History.Add ldy #hCmdHistory
bpl .4
.9 rts
*--------------------------------------
History.GetPrev ldy #hCmdHistory
HIS.GetPrev ldy #hCmdHistory
lda (pData),y
beq HISTORY.RTS
@ -121,10 +121,10 @@ History.GetPrev ldy #hCmdHistory
.2 txa
ldy #CmdHistory.IDX set new index
sta (pData),y
bra History.SetBuf
bra HIS.SetBuf
History.RTS rts
*--------------------------------------
History.GetNext ldy #hCmdHistory
HIS.GetNext ldy #hCmdHistory
lda (pData),y
beq HISTORY.RTS
@ -153,10 +153,10 @@ History.GetNext ldy #hCmdHistory
ldy #CmdHistory.END
cmp (pData),y
bne History.SetBuf
bne HIS.SetBuf
jmp CmdBuffer.CLR end of history, just blank buffer
*--------------------------------------
History.SetBuf jsr CmdBuffer.CLR
HIS.SetBuf jsr CmdBuffer.CLR
ldy #CmdHistory.IDX
lda (pData),y
@ -175,7 +175,7 @@ History.SetBuf jsr CmdBuffer.CLR
jmp CmdBuffer.PRINT
*--------------------------------------
History.Quit ldy #hCmdHistory
HIS.Quit ldy #hCmdHistory
lda (pData),y
beq .9
>SYSCALL SYS.FreeMemA

99
SBIN/SHELL.S.TXT.txt Normal file
View File

@ -0,0 +1,99 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
TXT.OpenFileYA >SYSCALL SYS.MLIOpenYA
bcs .9
ldy #hInputFile
sta (pData),y
pha
txa
ldy #hInputBuffer
sta (pData),y
>PUSHBI $0D Line separator for TXT file
>PUSHBI $FF
pla
>PUSHA
>SYSCALL SYS.MLINewLine
bcc .9
pha
jsr TXT.CloseFile
pla
sec
.9 rts
*--------------------------------------
TXT.ReadFile >PUSHWI 127
>PUSHWI TmpBuffer256+1
ldy #hInputFile
lda (pData),y
>PUSHA
>SYSCALL SYS.MLIRead
bcs .9
tya
beq .10
lda TmpBuffer256,y Y,A=Bytes read
cmp #$0D
bne .10
dey
.10 tya
sta (pData)
beq .2
.1 lda TmpBuffer256,y
sta (pData),y
dey
bne .1
.2 ldy #bEcho
lda (pData),y
beq .8
lda #'>'
>SYSCALL SYS.COutA
lda #'"'
>SYSCALL SYS.COutA
>LDYA pData
>SYSCALL SYS.PSTROutYA
lda #'"'
>SYSCALL SYS.COutA
lda #13
>SYSCALL SYS.COutA
.8 clc
.9 rts
*--------------------------------------
TXT.CloseFile ldy #hInputArgs
lda (pData),y
beq .1
>SYSCALL SYS.FreeMemA
.1 ldy #hInputFile
lda (pData),y
beq .9
>SYSCALL SYS.MLICloseA
ldy #hInputBuffer
lda (pData),y
>SYSCALL SYS.FreeMemA
.9 lda #0
ldy #hInputArgs
sta (pData),y
ldy #hInputFile
sta (pData),y
ldy #hInputBuffer
sta (pData),y
rts
*--------------------------------------
MAN
SAVE SBIN/SHELL.S.TXT
LOAD SBIN/SHELL.S
ASM

View File

@ -42,28 +42,33 @@ L.LIBSTR .DA LIBSTR
L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.ERROR .DA MSG.ERROR
L.ENV.PATH .DA ENV.PATH
J.INTCMDS .DA EXEC.CMD.CD
.DA EXEC.CMD.DATE
.DA EXEC.CMD.ECHO
.DA EXEC.CMD.EXIT
.DA EXEC.CMD.PAUSE
.DA EXEC.CMD.READ
.DA EXEC.CMD.SET
.DA EXEC.CMD.STARTPROC
.DA EXEC.CMD.TIME
.DA EXEC.CMD.TYPE
L.CMD .DA CMD
L.ARGS .DA ARGS
L.CMDS .DA CMDS
J.INTCMDS .DA Cmd.Exec.CD
.DA Cmd.Exec.DATE
.DA Cmd.Exec.ECHO
.DA Cmd.Exec.EXIT
.DA Cmd.Exec.PAUSE
.DA Cmd.Exec.READ
.DA Cmd.Exec.SET
.DA Cmd.Exec.STARTPROC
.DA Cmd.Exec.TIME
.DA Cmd.Exec.TYPE
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.LoadLibYA
bcs .9
sta hLIBSTR
ldy #S.PS.hARGS Batch file ?
lda (pPs),y
beq CS.INIT.INTERACTIVE no,continue starting interactive
>SYSCALL SYS.GetArgC
cmp #1
jsr OpenTxtFileA
beq CS.INIT.INTERACTIVE no arg, continue starting interactive
lda #1
>SYSCALL SYS.GetArgA
jsr TXT.OpenFileYA
bcs .9
ldy #bExitOnEOF
@ -73,7 +78,7 @@ CS.INIT >LDYA L.LIBSTR
.9 rts
*--------------------------------------
CS.INIT.INTERACTIVE
jsr History.Init
jsr HIS.Init
bcs .9
ldy #S.PS.hINDEV
@ -92,7 +97,7 @@ CS.INIT.INTERACTIVE
CS.RUN lda #0
sta (pData)
ldy #bPause
.11 ldy #bPause
lda (pData),y
bpl .10
clc
@ -113,41 +118,25 @@ CS.RUN lda #0
sta (pData)
bra .3
.2 jsr ReadTxtFile
.2 jsr TXT.ReadFile
bcs .81
.3 lda (pData)
beq CS.RUN Empty line
.3 jsr CmdBuffer.Normalize
lda (pData)
beq .11 Empty line
ldy #1
ldy #hInputFile if batch mode, do not add to cmd history
lda (pData),y
cmp #'#' Comment
beq CS.RUN
bne .4
ldy #hInputFile
lda (pData),y
bne .32
jsr History.Add
jsr HIS.Add
.32 >LDYA pData
>SYSCALL SYS.NewPStrYA
bcs .99
ldy #hCmdLine
sta (pData),y
jsr EXEC.CMD
bcc .4
.4 >LDYA pData
jsr Cmd.ExecYA
bcc .8
tay
beq .4
beq .8
jsr PrintError
.4 ldy #hCmdLine
lda (pData),y
>SYSCALL SYS.FreeMemA
ldy #hCmdLine
lda #0
sta (pData),y
.8 ldy #bEXIT
lda (pData),y
@ -156,7 +145,7 @@ CS.RUN lda #0
clc
rts
.81 jsr CloseTxtFile
.81 jsr TXT.CloseFile
ldy #bExitOnEOF
lda (pData),y
beq .8
@ -201,7 +190,7 @@ CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
cpx #3 test Ctrl-c
bne .12
jsr CloseTxtFile
jsr TXT.CloseFile
ldy #bExitOnEOF
lda (pData),y
ldy #bExit
@ -303,14 +292,14 @@ CS.EVENT.CTRL.CHAR
.2 cpx #10 LF (down arrow)
bne .3
jsr HISTORY.GETNEXT
jsr HIS.GetNext
clc
rts
.3 cpx #11 VT (up arrow)
bne .4
jsr HISTORY.GETPREV
jsr His.GetPrev
clc
rts
@ -323,7 +312,7 @@ CS.EVENT.CTRL.CHAR
.8 clc
rts
*--------------------------------------
CS.QUIT jsr History.Quit
CS.QUIT jsr HIS.Quit
ldy #hInputFile
lda (pData),y
@ -336,8 +325,10 @@ CS.QUIT jsr History.Quit
>SYSCALL SYS.FreeMemA
.2 lda hLIBSTR
beq .8
>SYSCALL SYS.UnloadLibA
clc
.8 clc
rts
*--------------------------------------
* PRIVATE
@ -356,6 +347,60 @@ PrintError pha
pla
rts
*--------------------------------------
* Remove extra SPACE & comment
*--------------------------------------
CmdBuffer.Normalize
>LDYA pData
>STYA ZPPtr1
lda (pData) empty line...quit
beq .9
tax Char count
ldy #0
.1 jsr CmdBuffer.Normalize.Next
beq .8 no more char, exit
cmp #' ' skip leading spaces
beq .1
cmp #'#' Comment ?
beq .8 ignore remaining chars
.3 iny add char to buffer
sta (pData),y
jsr CmdBuffer.Normalize.Next
beq .8
cmp #' '
bne .3
iny add One SPACE to buffer
sta (pData),y
.5 jsr CmdBuffer.Normalize.Next
beq .8
cmp #' '
beq .5 skip additional spaces
bne .3 no more space, add next word...
.8 tya
sta (pData)
.9 rts
CmdBuffer.Normalize.Next
txa
beq .8
dex
inc ZPPtr1
bne .1
inc ZPPtr1+1
.1 lda (ZPPtr1)
.8 rts
*--------------------------------------
CmdBuffer.PRINT ldy #0
.1 iny
lda (pData),y
@ -377,99 +422,10 @@ CmdBuffer.DEL lda (pData)
dec
sta (pData)
.9 rts
*--------------------------------------
OpenTxtFileA >SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.MLIOpenYA
bcs .9
ldy #hInputFile
sta (pData),y
pha
txa
ldy #hInputBuffer
sta (pData),y
>PUSHBI $0D Line separator for TXT file
>PUSHBI $FF
pla
>PUSHA
>SYSCALL SYS.MLINewLine
bcc .9
pha
jsr CloseTxtFile
pla
sec
.9 rts
*--------------------------------------
ReadTxtFile >PUSHWI 127
>PUSHWI TmpBuffer256+1
ldy #hInputFile
lda (pData),y
>PUSHA
>SYSCALL SYS.MLIRead
bcs .9
tya
beq .10
lda TmpBuffer256,y Y,A=Bytes read
cmp #$0D
bne .10
dey
.10 tya
sta (pData)
beq .2
.1 lda TmpBuffer256,y
sta (pData),y
dey
bne .1
.2 ldy #bEcho
lda (pData),y
beq .8
lda #'>'
>SYSCALL SYS.COutA
lda #'"'
>SYSCALL SYS.COutA
>LDYA pData
>SYSCALL SYS.PSTROutYA
lda #'"'
>SYSCALL SYS.COutA
lda #13
>SYSCALL SYS.COutA
.8 clc
.9 rts
*--------------------------------------
CloseTxtFile ldy #hInputArgs
lda (pData),y
beq .1
>SYSCALL SYS.FreeMemA
.1 ldy #hInputFile
lda (pData),y
beq .9
>SYSCALL SYS.MLICloseA
ldy #hInputBuffer
lda (pData),y
>SYSCALL SYS.FreeMemA
.9 lda #0
ldy #hInputArgs
sta (pData),y
ldy #hInputFile
sta (pData),y
ldy #hInputBuffer
sta (pData),y
rts
*--------------------------------------
.INB SBIN/SHELL.S.CMD
.INB SBIN/SHELL.S.HIS
.INB SBIN/SHELL.S.TXT
*--------------------------------------
CS.END
*--------------------------------------
@ -489,20 +445,14 @@ CMDS >PSTRING "CD"
LIBSTR >PSTRING "libstr.o"
MSG.GREETINGS >PSTRING "\nA2osX-Shell on Dev=%h\n\n"
MSG.ERROR >PSTRING "[%h]\n"
*MSG.NOTFOUND >CSTRING "Command Not Found\n"
*MSG.SYNERR >CSTRING "Syntax Error Or Invalid Pathname\n"
EscChars >PSTRING "DBAC"
EscAscii .HS 04080A0B15
CMD .BS 256
ARGS .BS 256
hLIBSTR .BS 1
hNEWPATH .BS 1
hExecCmd .BS 1
hExecArgs .BS 1
hEnvPath .BS 1
hFullCmd .BS 1
hVarName .BS 1
hVarValue .BS 1
ExecCmdIdx .BS 1
ExecCmdMode .BS 1
hCmdLine .BS 1
Cmd.Exec.Mode .BS 1
*--------------------------------------
.DUMMY
.OR 0
@ -513,7 +463,6 @@ bPause .BS 1
bExit .BS 1
bEcho .BS 1
bExitOnEOF .BS 1
hCmdLine .BS 1
hCmdHistory .BS 1
CmdHistory.IDX .BS 1
CmdHistory.END .BS 1

75
SYS/KERNEL.S.ARG.txt Normal file
View File

@ -0,0 +1,75 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* Out : A = Command line Arg Count
*--------------------------------------
S.GetArgC jsr S.InitArgPtr1
ldx #0
.1 lda (ZPQuickPtr1)
beq .8
jsr S.NextArgPtr1
inx
bne .1
.8 txa
clc
rts
*--------------------------------------
* In :
* A = Arg Index
* Out :
* CC : Y,A = PStr To Arg[A]
* CS : Out Of Bound
*--------------------------------------
S.GetArgA sta S.GetArgA.Idx
jsr S.InitArgPtr1
lda S.GetArgA.Idx
beq .8
ldx #0
.1 lda (ZPQuickPtr1)
beq .9
cpx S.GetArgA.Idx
beq .8
jsr S.NextArgPtr1
inx
bra .1
.8 >LDYA ZPQuickPtr1
clc
rts
.9 sec
rts
*--------------------------------------
S.InitArgPtr1 ldy #S.PS.hCMDLINE
lda (pPs),y
jsr S.GetMemPtrA
>STYA ZPQuickPtr1
rts
*--------------------------------------
S.NextArgPtr1 lda ZPQuickPtr1
sec
adc (ZPQuickPtr1)
sta ZPQuickPtr1
bcc .8
inc ZPQuickPtr1+1
.8 rts
*--------------------------------------
S.GetArgA.Idx .BS 1
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.ARG
LOAD SYS/KERNEL.S
ASM

View File

@ -5,32 +5,17 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* S.LoadBinA
* S.LoadBinYA
* in :
* A = hMem of FilePath (PSTRING)
* out :
* Y,A = MEMPTR
* X = hMem of Code Segment
*--------------------------------------
S.LoadBinA sta S.LoadBinA.hFilename save file path
jsr S.GetMemPtrA
>STYA ZPQuickPtr1
lda (ZPQuickPtr1)
tay
.1 lda (ZPQuickPtr1),y convert to UPPERCASE
cmp #'a'
bmi .2
cmp #'z'+1
bpl .2
eor #$20
sta (ZPQuickPtr1),y
.2 dey
bne .1
>LDYA ZPQuickPtr1
S.LoadBinYA >STYA S.LoadBin.Filename
jsr S.PStrUprYA
>LDYA S.LoadBin.Filename
jsr S.GetMemByNameYA
bcs .3 not already loaded
@ -49,13 +34,13 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
clc
rts
.3 >LDYA ZPQuickPtr1
.3 >LDYA S.LoadBin.Filename
jsr S.LoadFileYA
bcc .4
rts Error Loading file
.4 >STYA S.LoadBinA.FileLen
stx S.LoadBinA.hMem save hMem
.4 >STYA S.LoadBin.FileLen
stx S.LoadBin.hMem save hMem
txa
jsr S.GetMemPtrA
>STYA ZPQuickPtr1 save base address for relocation
@ -67,8 +52,7 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
lda (ZPQuickPtr1),y
sta R.AH
lda S.LoadBinA.hFilename
jsr S.GetMemPtrA
>LDYA S.LoadBin.Filename
jsr S.MLIGetFileInfoYA Get File Info for AUXTYPE
bcs .98
@ -76,23 +60,23 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
ldy #2 get AUXTYPE
lda (ZPQuickPtr2),y
sta R.BL Make BX=Range Start=AUXTYPE
sta S.LoadBinA.AuxType
sta S.LoadBin.AuxType
clc
adc S.LoadBinA.FileLen
adc S.LoadBin.FileLen
sta R.CL Make CX=Range End=AUXTYPE+FILELEN
iny
lda (ZPQuickPtr2),y
sta R.BH
sta S.LoadBinA.AuxType+1
adc S.LoadBinA.FileLen+1
sta S.LoadBin.AuxType+1
adc S.LoadBin.FileLen+1
sta R.CH
lda ZPQuickPtr1 Compute relocation offset in DX
sec
sbc S.LoadBinA.AuxType
sbc S.LoadBin.AuxType
sta R.DL DX=Offset=ZPQuickPtr1-AUXTYPE
lda ZPQuickPtr1+1
sbc S.LoadBinA.AuxType+1
sbc S.LoadBin.AuxType+1
sta R.DH
>LDYA ZPQuickPtr1
@ -107,13 +91,12 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
bcs .98 relocation error, dicard Code segment
lda S.LoadBinA.hFilename get back bin path
jsr S.GetMemPtrA
jsr S.NewPStrYA
>LDYA S.LoadBin.Filename get back bin path
jsr S.NewPStrYA make a copy of this string
bcs .98
pha
phx save copy
lda S.LoadBinA.hMem
lda S.LoadBin.hMem
jsr S.GetMemByIDA
>STYA ZPQuickPtr1
@ -125,24 +108,24 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
ldy #S.MEM.BIN
sta (ZPQuickPtr1),y
lda S.LoadBinA.hMem
lda S.LoadBin.hMem
tax return hMEM to Caller...
jsr S.GetMemPtrA
clc ...and Y,A=PTR to CS
rts
.98 pha
lda S.LoadBinA.hMem
lda S.LoadBin.hMem
jsr S.FreeMemA Discard Loaded Code
pla
sec
rts
*--------------------------------------
S.LoadBinA.hFilename .BS 1
S.LoadBinA.hMem .BS 1
S.LoadBinA.AuxType .BS 2
S.LoadBinA.FileLen .BS 2
S.LoadBin.Filename .BS 2
S.LoadBin.hMem .BS 1
S.LoadBin.AuxType .BS 2
S.LoadBin.FileLen .BS 2
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.BIN

View File

@ -5,44 +5,46 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* S.LoadDrvA
* S.LoadDrvYA
* in :
* A = hMem To Full Cmd Line
* Y,A = PTR To Full Cmd Line PStrArray
* out :
* none
*--------------------------------------
S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
>PUSHBI $20 Push SEP=' '
>PUSHBI 0 Push 0 for getting CMD And ARGS
jsr S.PStrGetTkn
bcc .1
rts
.1 sta S.LoadDrv.Name
stx S.LoadDrv.Args
S.LoadDrvYA >STYA S.LoadDrv.CmdArray
>LDYAI ENV.DRV push ENVNAME=DRV
jsr S.GetEnvVarYA get value for ENV=$DRV
jsr S.GetEnvYA get value for ENV=DRV
bcs .99
>PUSHYA Push $DRV value
>PUSHW S.LoadDrv.CmdArray (ARG[0] = DRVNAME)
jsr S.FileSearch find libname in $DRV
bcs .99
stx S.LoadDrv.hFullName
jsr S.LoadBinYA Y,A =filename full path
bcs .98
sta S.LoadDrv.Srch
>PUSHB S.LoadDrv.Name push CMD for S.FileSearch
>PUSHB S.LoadDrv.Srch
jsr S.FileSearch find File in $DRV
bcs .97 not Found
sta S.LoadDrv.FullName
jsr S.LoadBinA
bcs .96
>STYA pDrv
stx S.LoadDrv.hMem
lda S.LoadDrv.Args
jsr S.LoadDrvA.Jmp call Dev.Detect
>LDYA S.LoadDrv.CmdArray Advance to ARG[1]
>STYA ZPQuickPtr1
lda ZPQuickPtr1
sec
adc (ZPQuickPtr1)
sta ZPQuickPtr1
bcc .1
inc ZPQuickPtr1+1
.1 >LDYA ZPQuickPtr1
jsr pDrvJmp call Dev.Detect
bcs .95
bcs .97
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
@ -52,51 +54,35 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
bcs .95
jsr .95
bcs .97
ldy #S.DEV.F
lda (pDev),y
ora #S.DEV.F.INUSE
sta (pDev),y
jsr .97 Cleanup...
lda #0 Make sure RC = 0 if success
clc
.99 rts
.97 pha
lda S.LoadDrv.hMem
jsr S.FreeMemA
pla
.98 pha
lda S.LoadDrv.hFullName
jsr S.FreeMemA
pla
sec
rts
.95 pha
lda S.LoadDrv.hMem
jsr S.FreeMemA
pla
.96 pha
lda S.LoadDrv.FullName
jsr S.FreeMemA
pla
.97 pha
lda S.LoadDrv.Srch
jsr S.FreeMemA
pla
.98 pha
lda S.LoadDrv.Args
jsr S.FreeMemA
lda S.LoadDrv.Name
jsr S.FreeMemA
pla
.99 sec
rts
*--------------------------------------
S.LoadDrvA.Jmp jmp (pDrv)
*--------------------------------------
S.LoadDrv.Name .BS 1
S.LoadDrv.Args .BS 1
S.LoadDrv.Srch .BS 1
S.LoadDrv.FullName .BS 1
S.LoadDrv.hMem .BS 1
*--------------------------------------
ENV.DRV >PSTRING "DRV"
S.LoadDrv.CmdArray .BS 2
S.LoadDrv.hFullName .BS 1
S.LoadDrv.hMem .BS 1
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.DRV

View File

@ -5,20 +5,20 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* S.ExpandPStrA
* S.ExpandPStrYA
* In:
* A = hMem of String to Expand (PSTRING)
* Y,A = PTR to String to Expand (PSTRING)
* Out:
* A = hMem to Expanded String (PSTRING)
* X = hMem to Expanded String (PSTRING)
* Y,A = PTR to Expanded String
*--------------------------------------
S.ExpandPStrA jsr S.GetMemPtrA
S.ExpandPStrYA >STYA ZPQuickPtr3
stz TmpBuffer256 init Expanded String len=0
stz KrnBuffer256 init Expanded String len=0
ldy #0
.10 stz S.ExpandPStrA.Start
.10 stz S.ExpandPStr.Start
.1 tya
cmp (ZPQuickPtr3) End of PSTR?
@ -27,19 +27,19 @@ S.ExpandPStrYA >STYA ZPQuickPtr3
iny
lda (ZPQuickPtr3),y
ldx S.ExpandPStrA.Start
ldx S.ExpandPStr.Start
bne .3 already in a var?
cmp #'$' no, found one ?
beq .2
inc TmpBuffer256 no, copy char
ldx TmpBuffer256
sta TmpBuffer256,x
inc KrnBuffer256 no, copy char
ldx KrnBuffer256
sta KrnBuffer256,x
bra .1
.2 sty S.ExpandPStrA.Start save var start
stz S.ExpandPStrA.End
.2 sty S.ExpandPStr.Start save var start
stz S.ExpandPStr.End
bra .1 skip this char
.3 cmp #'{' in var, "{" after "$"?
@ -48,78 +48,76 @@ S.ExpandPStrYA >STYA ZPQuickPtr3
cmp #'}' end of var?
beq .5
.4 jsr S.ExpandPStrA.VC valid char ?
.4 jsr S.ExpandPStr.VC valid char ?
bcs .5 no, end here
sty S.ExpandPStrA.End yes, save end
sty S.ExpandPStr.End yes, save end
bra .1
.5 lda S.ExpandPStrA.End get end
.5 lda S.ExpandPStr.End get end
beq .1 empty {} or $/
phy save current index
jsr S.ExpandPStrA.AV
jsr S.ExpandPStr.AV
ply restore index in string...
bra .10 reset start flag and continue
.6 sty S.ExpandPStrA.End end of PSTR
lda S.ExpandPStrA.Start are we in a var?
.6 sty S.ExpandPStr.End end of PSTR
lda S.ExpandPStr.Start are we in a var?
beq .7 no...exit...
jsr S.ExpandPStrA.AV yes, expand and add to STR
jsr S.ExpandPStr.AV yes, expand and add to STR
.7 >LDYAI TmpBuffer256
.7 >LDYAI KrnBuffer256
jsr S.NewPStrYA
rts
*--------------------------------------
S.ExpandPStrA.AV
ldy #S.PS.hENV
lda (pPs),y
jsr S.GetMemPtrA
>STYA ZPQuickPtr1 Store ENV for FindVar
lda S.ExpandPStrA.End
S.ExpandPStr.AV lda S.ExpandPStr.End
sec
sbc S.ExpandPStrA.Start compute len of VAR End-Start+1
sbc S.ExpandPStr.Start compute len of VAR End-Start+1
ldx TmpBuffer256
ldx KrnBuffer256
inx
sta TmpBuffer256,x
sta KrnBuffer256,x
stx ZPQuickPtr2
lda /TmpBuffer256
lda /KrnBuffer256
sta ZPQuickPtr2+1
ldy S.ExpandPStrA.Start
ldy S.ExpandPStr.Start
.1 iny
inx
lda (ZPQuickPtr3),y
sta TmpBuffer256,x
cpy S.ExpandPStrA.End
sta KrnBuffer256,x
cpy S.ExpandPStr.End
bne .1
jsr S.FindVar
jsr S.CheckSysVarPtr2
bcs .10
>STYA ZPQuickPtr1
bra .11
.10 jsr S.FindVarPtr2
bcs .9
ldy #0
jsr S.NextEnvPtr1 Skip NAME
.11 ldy #0
ldx KrnBuffer256
.2 iny
lda (ZPQuickPtr1),y
cmp #'='
bne .2
.3 iny
lda (ZPQuickPtr1),y
inc TmpBuffer256
ldx TmpBuffer256
sta TmpBuffer256,x
inx
sta KrnBuffer256,x
tya
cmp (ZPQuickPtr1) last char?
bne .3
cmp (ZPQuickPtr1) last char?
bne .2
stx KrnBuffer256
.9 rts
*--------------------------------------
S.ExpandPStrA.VC
cmp #'0'
S.ExpandPStr.VC cmp #'0'
bcc .9
cmp #'9'+1
bcc .8
@ -137,289 +135,297 @@ S.ExpandPStrA.VC
.9 sec
rts
*--------------------------------------
S.ExpandPStrA.Start .BS 1
S.ExpandPStrA.End .BS 1
S.ExpandPStr.Start .BS 1
S.ExpandPStr.End .BS 1
*--------------------------------------
* S.DupEnvA
* In:
* A = ENV hMem To Duplicate
* Out:
* A = hMem to new ENV
* S.PutEnvYA
*--------------------------------------
S.DupEnvA jsr S.GetMemPtrA
>STYA ZPQuickPtr1
>PUSHWI K.ENV.SIZE
>PUSHBI 0
jsr S.GetMem
bcs .9
>STYA ZPQuickPtr2
S.PutEnvYA >STYA ZPQuickPtr2 NAME=VALUE
lda (ZPQuickPtr2)
beq .9
sta KrnBuffer256
tay
.1 lda (ZPQuickPtr2),y
sta KrnBuffer256,y
dey
bne .1
ldy #0
.1 lda (ZPQuickPtr1),y
sta (ZPQuickPtr2),y
beq .8
iny
bne .1
inc ZPQuickPtr1+1
inc ZPQuickPtr2+1
bra .1
.8 txa
clc
.9 rts
*--------------------------------------
* S.GetEnvVarYA
* In:
* Y,A = PTR to NAME (PSTRING)
* Out:
* A = hMem to VALUE (PSTRING) 0,"" if not exist
*--------------------------------------
S.GetEnvVarYA >STYA ZPQuickPtr2
jsr S.FindVar
bcc .1
>LDYAI 1 not found
>PUSHYA create "" PSTR
>PUSHBI 0
jsr S.GetMem create a new PSTR
bcs .99
>STYA ZPQuickPtr3
lda #0
sta (ZPQuickPtr3) set len of PSTR
txa
clc
rts
.1 lda (ZPQuickPtr1) get NAME=VALUE len
sec
sbc (ZPQuickPtr2) substract (NAME len)
tay y=len("=VALUE")
lda #0
>PUSHYA
>PUSHBI 0
jsr S.GetMem create a new PSTR
bcs .99
>STYA ZPQuickPtr3
phx save hMem
lda (ZPQuickPtr1) get NAME=VALUE len
clc
sbc (ZPQuickPtr2) compute VALUE len
sta (ZPQuickPtr3) set new PSTR Len
tax x = chr to copy
lda (ZPQuickPtr2) get name len
inc add 1 to skip "="
tay
.2 iny
inc ZPQuickPtr3
bne .3
inc ZPQuickPtr3+1
.3 lda (ZPQuickPtr1),y
sta (ZPQuickPtr3)
dex
cpy KrnBuffer256 last char ?
beq .9 no "=" found
lda KrnBuffer256,y
cmp #'='
bne .2
pla get back PSTR hMem
cpy #1 String like "=value" ?
beq .9
cpy KrnBuffer256 last char ?
beq .9 we have "VAR="
lda KrnBuffer256 save actual string len
sty KrnBuffer256 set length of VAR string
dec KrnBuffer256 ...without "="
.3 clc Substract VAR len+1 from whole len to get
sbc KrnBuffer256 VALUE len
sta KrnBuffer256,y save it at "=" POS
tya
clc
.99 rts
adc #KrnBuffer256
sta ZPQuickPtr3
lda /KrnBuffer256
sta ZPQuickPtr3+1
>LDYAI KrnBuffer256
>STYA ZPQuickPtr2
bra S.SetEnvPtr2Ptr3
.9 sec
rts
*--------------------------------------
* S.SetEnvVarH
* In:
* PULLB = hMem To Name (PSTRING)
* PULLB = hMem To Value (PSTRING)
*--------------------------------------
* S.SetEnvVarP
* S.SetEnv
* In:
* PULLW = PTR To Name (PSTRING)
* PULLW = PTR To Value (PSTRING)
* Out:
*--------------------------------------
S.SetEnvVarH >PULLA
jsr S.GetMemPtrA
>STYA ZPQuickPtr2
>PULLA
jsr S.GetMemPtrA
bra S.SetEnvVar
S.SetEnvVarP >PULLW ZPQuickPtr2
>PULLYA
S.SetEnvVar >STYA ZPQuickPtr3 ZPQuickPtr3 = VALUE
jsr S.FindVar
bcs .3 Not Found,ZPQuickPtr1 -> End Of Env
lda (ZPQuickPtr1) Found, Discard current NAME definition
sec
adc ZPQuickPtr1 add NAME=VALUE len+1 to ZPQuickPtr1
sta ZPQuickPtr4
lda #0
adc ZPQuickPtr1+1 store it in ZPQuickPtr4
sta ZPQuickPtr4+1
.1 lda (ZPQuickPtr4)
sta (ZPQuickPtr1)
beq .3 until we move ending 0
inc ZPQuickPtr1
bne .2
inc ZPQuickPtr1+1
.2 inc ZPQuickPtr4
bne .1
inc ZPQuickPtr4+1
bra .1
.3 lda ZPQuickPtr1 Compute ENV UPPER LIMIT
S.SetEnv >PULLW ZPQuickPtr2 NAME...
>PULLW ZPQuickPtr3 ...VALUE
S.SetEnvPtr2Ptr3
jsr S.UnsetEnvPtr2
jsr S.InitEnvPtr1 Y,A = ZPQuickPtr1 -> Env
lda ZPQuickPtr1 Compute ENV UPPER LIMIT in Ptr4
clc
adc #K.ENV.SIZE
sta ZPQuickPtr4
lda ZPQuickPtr1+1
adc /K.ENV.SIZE
sta ZPQuickPtr4+1
ldy ZPQuickPtr1+1
lda ZPQuickPtr1 Compute New Env Upper limit in A,Y
sec
adc (ZPQuickPtr2) add NAME len +1(for len)
bcc .4
adc (ZPQuickPtr2) add NAME len +1
bcc .1
iny
.4 sec
adc (ZPQuickPtr3) add VALUE len +1(for "=")
bcc .5
.1 sec
adc (ZPQuickPtr3) add VALUE len +1
bcc .2
iny
.5 sec A,Y=new upper limit
sbc ZPQuickPtr4 greater than hMem Upper limit ?
bcc .51
.2 cmp ZPQuickPtr4 GE than hMem Upper limit ?
tya
sbc ZPQuickPtr4+1
bcs .99
.51 lda (ZPQuickPtr2) make len = NAME+VALUE+1
sec
adc (ZPQuickPtr3)
bcs .99
.3 lda (ZPQuickPtr1) Scan until endig 0...
beq .4
inc ZPQuickPtr1
bne .3
inc ZPQuickPtr1+1
bne .3
.4 lda (ZPQuickPtr2)
sta (ZPQuickPtr1)
inc ZPQuickPtr1
tay
.5 lda (ZPQuickPtr2),y
sta (ZPQuickPtr1),y
dey
bne .5
jsr S.NextEnvPtr1
lda (ZPQuickPtr3)
sta (ZPQuickPtr1)
tay
.6 lda (ZPQuickPtr3),y
sta (ZPQuickPtr1),y
dey
bne .6
inc ZPQuickPtr1+1
.6 ldy #0
.7 iny
lda (ZPQuickPtr2),y
sta (ZPQuickPtr1)
inc ZPQuickPtr1
bne .8
inc ZPQuickPtr1+1
.8 tya
cmp (ZPQuickPtr2)
bne .7
lda #'='
sta (ZPQuickPtr1)
inc ZPQuickPtr1
bne .9
inc ZPQuickPtr1+1
.9 ldy #0
.10 iny
lda (ZPQuickPtr3),y
sta (ZPQuickPtr1)
inc ZPQuickPtr1
bne .11
inc ZPQuickPtr1+1
.11 tya
cmp (ZPQuickPtr3)
bne .10
lda #0
jsr S.NextEnvPtr1
.8 lda #0
sta (ZPQuickPtr1)
clc
rts
.99 lda #SYSMGR.ERRENVF
sec
rts
*--------------------------------------
* S.PutEnvYA
* S.GetEnvYA
* In:
* Y,A = PTR To Name (NAME=VALUE)
* Y,A = PTR to NAME (PSTRING)
* Out:
* CC : Y,A = PTR to VALUE (PSTRING)
* CS : not found
*--------------------------------------
S.GetEnvYA >STYA ZPQuickPtr2
jsr S.CheckSysVarPtr2
bcc .9
jsr S.FindVarPtr2
bcs .9
jsr S.NextEnvPtr1 Skip NAME
>LDYA ZPQuickPtr1
.9 rts
*--------------------------------------
* S.UnsetEnvYA
* In:
* YA = PTR To Name (PSTRING)
* Out:
*--------------------------------------
S.PutEnvYA clc
rts
*--------------------------------------
* S.DelEnvVarA
* In:
* PULLB = hMem To Name (PSTRING)
*--------------------------------------
* S.DelEnvVarYA
* In:
* PULLW = PTR To Name (PSTRING)
* Out:
*--------------------------------------
S.DelEnvVarA >PULLA get NAME
jsr S.GetMemPtrA
S.DelEnvVarYA >STYA ZPQuickPtr2 Store VAR Name
S.DelEnvVar jsr S.FindVar
S.UnsetEnvYA >STYA ZPQuickPtr2 Store VAR Name
S.UnsetEnvPtr2 jsr S.FindVarPtr2
bcs .8 not found, quit
lda (ZPQuickPtr1) Found, Discard current NAME definition
sec
adc ZPQuickPtr1 add NAME=VALUE len+1 to ZPQuickPtr1
sta ZPQuickPtr4
lda #0
adc ZPQuickPtr1+1 store it in ZPQuickPtr4
sta ZPQuickPtr4+1
.1 lda (ZPQuickPtr4)
sta (ZPQuickPtr1)
beq .8 until we move ending 0
inc ZPQuickPtr1
bne .2
inc ZPQuickPtr1+1
.2 inc ZPQuickPtr4
bne .1
inc ZPQuickPtr4+1
bra .1
jsr S.DiscardVarPtr1 Ptr1 -> ENVNAME
.8 clc
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
* S.FindVar
* S.CheckSysVarPtr2
* In:
* ZPQuickPtr2 -> NAME
*--------------------------------------
* Out:
* CC: Found
* ZPQuickPtr1 -> NAME=VALUE
* YA -> VALUE
* CS: Not Found
*--------------------------------------
S.CheckSysVarPtr2
lda (ZPQuickPtr2)
cmp #1 is name 1 char?
bne .9
ldy #1
lda (ZPQuickPtr2),y
cmp #'0' $0...$9 ??
bcc .1 no,
cmp #'9'+1
bcs .99
and #$0F
jmp S.GetArgA
.1 cmp #'*' $* : All ARGS
bne .9
cmp #'#' $# : ARGC
bne .9
cmp #'?' $? : RC
bne .9
cmp #'$' $$ : PID
bne .9
.9 sec
.99 rts
*--------------------------------------
* S.FindVarPtr2
* In:
* ZPQuickPtr2 -> NAME
* Out:
* CC: Found
* ZPQuickPtr1 -> ENV.NAME
* ZPQuickPtr2 -> NAME
* CS: Not Found
* ZPQuickPtr1 -> PTR to Ending 0
* ZPQuickPtr2 -> NAME
*--------------------------------------
S.FindVar ldy #S.PS.hENV
S.FindVarPtr2 jsr S.InitEnvPtr1 Store ENV
bcs .99
lda (ZPQuickPtr1)
beq .9 end of ENV
.1 cmp (ZPQuickPtr2) Same len as NAME?
bne .3
tay
.2 lda (ZPQuickPtr1),y
cmp (ZPQuickPtr2),y
bne .3
dey
bne .2
clc
rts
.3 jsr S.NextEnvPtr1 Skip NAME
jsr S.NextEnvPtr1 Skip VALUE
lda (ZPQuickPtr1)
bne .1
.9 sec
.99 rts
*--------------------------------------
* S.DiscardVar
* In:
* ZPQuickPtr1 -> ENV.NAME to Discard
*--------------------------------------
S.DiscardVarPtr1
lda ZPQuickPtr1 Discard current NAME & VALUE definition
sec ZPQuickPtr1 -> NAME
adc (ZPQuickPtr1) add NAME+1 to ZPQuickPtr1
sta ZPQuickPtr4 store it in ZPQuickPtr4
lda #0
adc ZPQuickPtr1+1
sta ZPQuickPtr4+1
lda ZPQuickPtr4 add VALUE+1 to ZPQuickPtr4
sec
adc (ZPQuickPtr4)
sta ZPQuickPtr4
bcc .1
inc ZPQuickPtr4+1
.1 ldy #0
.2 lda (ZPQuickPtr4),y Move back tail...
sta (ZPQuickPtr1),y
beq .8 ...until we move ending 0
iny
bne .2
inc ZPQuickPtr1+1
inc ZPQuickPtr4+1
bra .2
.8 rts
*--------------------------------------
S.InitEnvPtr1 ldy #S.PS.hENV
lda (pPs),y
jsr S.GetMemPtrA
>STYA ZPQuickPtr1 Store ENV
.1 lda (ZPQuickPtr1)
beq .9
ldy #0
.2 iny
lda (ZPQuickPtr1),y
cmp #'=' End Of VAR Name ?
beq .4
.3 cmp (ZPQuickPtr2),y
bne .7
tya
cmp (ZPQuickPtr2)
bne .2
iny
lda (ZPQuickPtr1),y
cmp #'=' End Of VAR Name ?
bne .3
.4 dey
tya
cmp (ZPQuickPtr2) Y = VAR Name Len ?
beq .8 yes, found VAR
.7 lda (ZPQuickPtr1) no, go to next NAME=VALUE
sec
adc ZPQuickPtr1
sta ZPQuickPtr1
bcc .1
inc ZPQuickPtr1+1
bra .1
.8 clc
rts
.9 sec
rts
*--------------------------------------
S.NextEnvPtr1 lda ZPQuickPtr1
sec
adc (ZPQuickPtr1)
sta ZPQuickPtr1
bcc .8
inc ZPQuickPtr1+1
.8 rts
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.ENV

View File

@ -31,75 +31,107 @@ S.CheckPrefixYA >STYA MLICALL.PARAMS+1
*--------------------------------------
* S.FileSearch
* in :
* PULLB = hMem to Search Path (PSTRING) %LIB%;/SYS/SLIB
* PULLB = hMem to File Name (PSTRING)
* PULLW = PSTR to File Name (PSTRING)
* PULLW = PSTR to Search Path (PSTRING) %LIB%;/SYS/SLIB
* out :
* A = hMem of FilePath (PSTRING)
* Y,A = PSTR to FilePath (PSTRING)
* X = hMem to FilePath
*--------------------------------------
S.FileSearch >PULLA Get Search path
jsr S.ExpandPStrA Expand it
bcc .10
pha save error code
>PULLA discard file name
pla
sec
rts
.10 sta S.FileSearch.hSrch Store Expanded path list to search
>PULLB S.FileSearch.hFile Store Filename
lda #1
sta S.FileSearch.Idx Start At Token 1
.1 >PUSHB S.FileSearch.hSrch push expanded path list
>PUSHBI ';'
>PUSHB S.FileSearch.Idx Push Token IDX
jsr S.PStrGetTkn Get token in A
bcs .98
sta S.FileSearch.hPath Store Token path
>PUSHB S.FileSearch.hFile push filename
>PUSHB S.FileSearch.hPath Push Token path
jsr S.PStrCat
bcs .97
sta S.FileSearch.hFull Store Full path (Token Path+filename)
S.FileSearch >PULLW ZPQuickPtr4 ZPQuickPtr1 trashed by ExpandPStrYA
>PULLYA Get Search list
jsr S.ExpandPStrYA Expand it
bcs .99
jsr S.GetMemPtrA
stx S.FileSearch.hSrch
>STYA ZPQuickPtr2 expanded search list ;
stz S.FileSearch.Index
.1 stz KrnBuffer256 reset String
ldx #0
ldy S.FileSearch.Index
.2 tya
cmp (ZPQuickPtr2) end of src string ?
beq .3 end of string, try it....
iny
lda (ZPQuickPtr2),y
cmp #';'
beq .3
inx
sta KrnBuffer256,x
bra .2
.3 txa
beq .98 String is empty....nothing to try
sty S.FileSearch.Index save current index
ldy #0
.4 iny
lda (ZPQuickPtr4),y Append Fiename...
inx
sta KrnBuffer256,x
tya
cmp (ZPQuickPtr4)
bne .4
stx KrnBuffer256 set string length
>LDYAI KrnBuffer256
jsr S.MLIGetFileInfoYA
bcc .8
bcs .1 Failed...retry next path...
lda S.FileSearch.hFull Discard this Full Path
lda S.FileSearch.hSrch Discard Expanded hSrch list
jsr S.FreeMemA
lda S.FileSearch.hPath Discard Token path
jsr S.FreeMemA
inc S.FileSearch.Idx Try next Token
bne .1
beq .98 go to discard Expanded path list
.97 lda S.FileSearch.hPath Discard Token path
jsr S.FreeMemA
>LDYAI KrnBuffer256
jmp S.NewPStrYA
.98 lda S.FileSearch.hSrch Discard Expanded hSrch list
jsr S.FreeMemA
lda #SYSMGR.ERRFNF
sec
rts
.8 jsr .97 Dicard all except Full Path
lda S.FileSearch.hFull
clc
rts
.99 rts
*--------------------------------------
S.FileSearch.File .BS 2
S.FileSearch.hSrch .BS 1
S.FileSearch.hFile .BS 1
S.FileSearch.Idx .BS 1
S.FileSearch.hPath .BS 1
S.FileSearch.hFull .BS 1
S.FileSearch.Index .BS 1
*--------------------------------------
* S.GetFullPathYA
* in :
* Y,A = Filename (PSTRING)
* out :
* Y,A = FullPath (PSTRING)
* X = hMem of FullPath
*--------------------------------------
S.GetFullPathYA >STYA ZPQuickPtr3 Ptr1 & 2 used by StrCpy
lda (ZPQuickPtr3)
beq .9
stz KrnBuffer256
ldy #1
lda (ZPQuickPtr3),y
cmp #'/' full path starting with '/'?
beq .1 yes, do not append to current prefix
ldy #S.PS.hPREFIX
lda (pPs),y
jsr S.GetMemPtrA
>PUSHYA
>PUSHWI KrnBuffer256
jsr S.PStrCpy
.1 >PUSHW ZPQuickPtr3
>PUSHWI KrnBuffer256
jsr S.PStrCat
>LDYAI KrnBuffer256
jmp S.NewPStrYA
.9 sec
rts
*--------------------------------------
* S.LoadFileYA
* in :
@ -108,12 +140,9 @@ S.FileSearch.hFull .BS 1
* Y,A = File Length
* X = hMem of Loaded File
*--------------------------------------
S.LoadFileYA jsr S.ExpandPStrYA
sta S.LoadFile.hExp
jsr S.GetMemPtrA
jsr S.MLIOpenYA
S.LoadFileYA jsr S.MLIOpenYA
bcc .10
jmp .99
rts
.10 sta S.LoadFile.hRef save ref_num
stx S.LoadFile.hBuf save Prodos Buffer for freemem
@ -132,25 +161,16 @@ S.LoadFileYA jsr S.ExpandPStrYA
jsr S.GetMem
bcs .98
phy save Ptr
pha
>STYA S.LoadFile.Mem
stx S.LoadFile.hMem save Segment hMem
>PUSHW S.LoadFile.Len Push Length for S.MLIRead
pla restore Dest PTR
ply
>PUSHYA and push for S.MLIRead
>PUSHW S.LoadFile.Mem Push PTR
>PUSHB S.LoadFile.hRef Push ref_num
jsr S.MLIRead
bcs .97
lda S.LoadFile.hRef
jsr S.MLICloseA
lda S.LoadFile.hBuf
jsr S.FreeMemA Discard ProDOS IO Buffer
lda S.LoadFile.hExp Discard Expanded String
jsr S.FreeMemA
jsr .98 Close File....
>LDYA S.LoadFile.Len Return File Length...
ldx S.LoadFile.hMem ...and hMem to Caller
@ -169,17 +189,13 @@ S.LoadFileYA jsr S.ExpandPStrYA
jsr S.FreeMemA ProDOS IO Buffer
pla
.99 pha
lda S.LoadFile.hExp
jsr S.FreeMemA
pla
sec
.99 sec
rts
*--------------------------------------
S.LoadFile.hRef .BS 1
S.LoadFile.hBuf .BS 1
S.LoadFile.hExp .BS 1
S.LoadFile.hMem .BS 1
S.LoadFile.Mem .BS 2
S.LoadFile.Len .BS 2
*--------------------------------------
* S.ListDirInitYA
@ -229,6 +245,8 @@ S.ListDirInitYA >STYA R.BX Store path
>LDYA R.BX
jsr S.NewPStrYA
bcs .99
txa
ldy #S.LISTDIR.hPATH
sta (R.CX),y

View File

@ -32,9 +32,10 @@ A2osX.GP.Start jmp (KERNEL.SYSCALL,x)
jmp BrkHandler
.BS $BE10-*
*--------------------------------------
jmp (pDev) pDevJmp
jmp (pCode) pCodeJmp
jmp (pLib) pLibJmp
jmp (pDrv) pDrvJmp
jmp (pDev) pDevJmp
.BS $BE20-*
*--------------------------------------
GO.Reset jsr GO.AUXLC

View File

@ -139,50 +139,45 @@ S.TskMgrInit stz TSKMGR.LASTID
>PUSHWI K.ENV.SIZE get a buffer for ENV
>PUSHBI S.MEM.F.INIT0 make sure blank
>SYSCALL SYS.GetMem create it...
bcs *
bcs .9
txa
ldy #S.PS.hENV
sta (pPs),y
>LDYAI TmpBuffer256
>SYSCALL SYS.MLIGetPrefixYA
bcs *
bcs .9
>LDYAI TmpBuffer256
>SYSCALL SYS.NewPStrYA
bcs *
bcs .9
txa
ldy #S.PS.hPREFIX
sta (pPs),y
>PUSHWI TmpBuffer256 push ENV value
>PUSHWI I.ENV.A2osX push ENV name
>SYSCALL SYS.SetEnvVarP
>SYSCALL SYS.SetEnv
bcs .9
>PUSHWI I.ENV.PATH.VAL
>PUSHWI I.ENV.PATH
>SYSCALL SYS.SetEnvVarP
>LDYAI I.ENV.PATH
>SYSCALL SYS.PutEnvYA
bcs .9
>PUSHWI I.ENV.LIB.VAL
>PUSHWI I.ENV.LIB
>SYSCALL SYS.SetEnvVarP
>LDYAI I.ENV.LIB
>SYSCALL SYS.PutEnvYA
bcs .9
>PUSHWI I.ENV.DRV.VAL
>PUSHWI I.ENV.DRV
>SYSCALL SYS.SetEnvVarP
>LDYAI I.ENV.DRV
>SYSCALL SYS.PutEnvYA
.9 rts
*--------------------------------------
I.ENV.A2osX >PSTRING "A2OSX"
I.ENV.PATH >PSTRING "PATH"
I.ENV.PATH.VAL >PSTRING "${A2OSX}SBIN/;${A2OSX}BIN/"
I.ENV.LIB >PSTRING "LIB"
I.ENV.LIB.VAL >PSTRING "${A2OSX}LIB/"
I.ENV.DRV >PSTRING "DRV"
I.ENV.DRV.VAL >PSTRING "${A2OSX}DRV/"
I.ENV.PATH >PSTRING "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
I.ENV.LIB >PSTRING "LIB=${A2OSX}LIB/"
I.ENV.DRV >PSTRING "DRV=${A2OSX}DRV/"
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.INIT

View File

@ -17,31 +17,31 @@ KERNEL.SYSCALL .DA S.GetMem $00
.DA 0
*--------------------------------------
.DA S.NewPStrYA $10
.DA 0
.DA S.PStrCpy
.DA S.PStrCat
.DA S.PStrUprYA
.DA 0
.DA S.PStrGetTkn
.DA 0
.DA S.GetArgCount
.DA S.GetArgA
.DA S.PStr2StrArrayYA
.DA 0
.DA 0
*--------------------------------------
.DA 0 $20
.DA S.LoadDrvYA $20
.DA S.LoadLibYA
.DA S.UnloadLibA
.DA S.LoadDrvA
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
*--------------------------------------
.DA S.ExpandPStrA $30
.DA 0 $30
.DA S.ExpandPStrYA
.DA S.GetArgC
.DA S.GetArgA
.DA S.PutEnvYA
.DA S.GetEnvVarYA
.DA S.SetEnvVarH
.DA S.SetEnvVarP
.DA S.DelEnvVarA
.DA S.DelEnvVarYA
.DA S.SetEnv
.DA S.GetEnvYA
.DA S.UnsetEnvYA
*--------------------------------------
.DA S.MLICreateFile $40
.DA 0
@ -99,7 +99,7 @@ KERNEL.SYSCALL .DA S.GetMem $00
*--------------------------------------
.DA S.CheckPrefixYA $A0
.DA S.FileSearch
.DA 0
.DA S.GetFullPathYA
.DA S.LoadFileYA
.DA 0
.DA S.ListDirInitYA

View File

@ -11,45 +11,24 @@ AUTO 6
* out :
* A = hMem To loaded LIB
*--------------------------------------
S.LoadLibYA jsr S.NewPStrYA
bcs .99
sta S.LoadLibYA.hLibName save LibName hMem for discard
jsr S.LoadLibA
php save error status
pha save error code/hMem
lda S.LoadLibYA.hLibName
jsr S.FreeMemA discard STR hMem
pla get back error code/hMem
plp ..and error status
.99 rts
*--------------------------------------
S.LoadLibYA.hLibName .BS 1
*--------------------------------------
* S.LoadLibA
* in :
* A = hMem To Lib Name
* out :
* A = hMem of Loaded Lib
*--------------------------------------
S.LoadLibA sta S.LoadLibA.hName save libname for S.FileSearch
S.LoadLibYA >STYA S.LoadLib.Name save libname for S.FileSearch
>LDYAI ENV.LIB push ENVNAME=LIB
jsr S.GetEnvVarYA get value for ENV=LIB
jsr S.GetEnvYA get value for ENV=LIB
bcs .99
sta S.LoadLibA.hSrch save hMem to LIB VALUE
>PUSHYA Push $LIB value
>PUSHB S.LoadLibA.hName
>PUSHB S.LoadLibA.hSrch
>PUSHW S.LoadLib.Name
jsr S.FileSearch find libname in $LIB
bcs .99
stx S.LoadLib.hFullName
jsr S.LoadBinYA Y,A = filename full path
bcs .98
sta S.LoadLibA.hPath
jsr S.LoadBinA A = hMem of filename full path
bcs .97
stx S.LoadLibA.hMem
stx S.LoadLib.hMem
>STYA pLib
ldx #LIBMGR.LOAD
@ -57,28 +36,28 @@ S.LoadLibA sta S.LoadLibA.hName save libname for S.FileSearch
bcs .97
jsr .97
jsr .98 Cleanup...
lda S.LoadLibA.hMem
lda S.LoadLib.hMem
clc
rts
.97 pha
lda S.LoadLibA.hPath discard LIB PATH
lda S.LoadLib.hMem
jsr S.FreeMemA
pla
.98 pha
lda S.LoadLibA.hSrch discard LIB VALUE
lda S.LoadLib.hFullName
jsr S.FreeMemA
pla
sec
.99 rts
*--------------------------------------
S.LoadLibA.hName .BS 1
S.LoadLibA.hSrch .BS 1
S.LoadLibA.hPath .BS 1
S.LoadLibA.hMem .BS 1
S.LoadLib.Name .BS 2
S.LoadLib.hFullName .BS 1
S.LoadLib.hMem .BS 1
*--------------------------------------
* S.UnloadLibA
* in :

View File

@ -8,10 +8,10 @@ AUTO 6
* !!!!!!!! DO NOT USE VCPU16 !!!!!!!!
* !!!!!! DO NOT USE ZPQuickPTRs !!!!!
*--------------------------------------
ZPMemMgrSPtr .EQ ZPMemMgr Pointer To Slot selected
ZPMemMgrTmp1 .EQ ZPMemMgr+2
ZPMemMgrTmp2 .EQ ZPMemMgr+4
ZPMemMgrTmp3 .EQ ZPMemMgr+6
ZPMemMgrSPtr .EQ ZPMEMMGR Pointer To Slot selected
ZPMemMgrTmp1 .EQ ZPMEMMGR+2
ZPMemMgrTmp2 .EQ ZPMEMMGR+4
ZPMemMgrTmp3 .EQ ZPMEMMGR+6
*--------------------------------------
* TODO :
* - Create a 256 bytes table

442
SYS/KERNEL.S.PS.txt Normal file
View File

@ -0,0 +1,442 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* S.ExecProcessNewEnvYA
* S.ExecProcessYA (Blocking Parent PID)
* S.CreateProcessNewEnvYA
* S.CreateProcessYA (Non Blocking)
* in :
* Y,A = PTR To Cmd Line
* out :
* A = Child PSID
*--------------------------------------
S.ExecProcessNewEnvYA
ldx #S.PS.F.ENV
.HS 2C bit abs
*--------------------------------------
S.ExecProcessYA ldx #0
jsr S.CreateProcess
bcs .9 terminated, do not set PID as HOLD
ldy #S.PS.CID
sta (pPs),y
pha Save Child PID
lda (pPs)
ora #S.PS.F.HOLD
sta (pPs)
pla Get Back PID
clc
.9 rts
*--------------------------------------
S.CreateProcessNewEnvYA
ldx #S.PS.F.ENV
.HS 2C bit abs
*--------------------------------------
S.CreateProcessYA
ldx #0
S.CreateProcess stx S.CreateChildProcess.Flags
jsr S.ExpandPStrYA
bcs .99
stx S.CreateProcess.hCmdLine
>STYA S.CreateProcess.CmdLine
jsr S.CreateChildProcess
bcs .98
sta S.CreateProcess.CPSID
jsr S.SelectProcessA
jsr S.InitProcess
bcs .97 Init Failed or exit?
ldy #S.PS.PID switch back to Parent Process
lda (pPs),y
jsr S.SelectProcessA
lda S.CreateProcess.CPSID
clc
rts
.97 pha save error code
ldy #S.PS.PID switch back to Parent Process
lda (pPs),y
jsr S.SelectProcessA
lda S.CreateProcess.CPSID
jsr S.FreeProcessA
pla get back error code
.98 pha
lda S.CreateProcess.hCmdLine
jsr S.FreeMemA
pla
.99 sec
rts
*--------------------------------------
S.CreateProcess.hCmdLine .BS 1
S.CreateProcess.CmdLine .BS 2
S.CreateProcess.CPSID .BS 1
*--------------------------------------
* S.GetPSByIDA
* In :
* A = PID
* Out :
* Y,A = PTR to TSKSLOT
*--------------------------------------
S.GetPSByIDA sta S.GetPSByIDA.PS
>LDYAI TskMgr.Table
>STYA ZPQuickPtr1
lda S.GetPSByIDA.PS
beq .8
ldx #0
.1 inx
lda ZPQuickPtr1
clc
adc #S.PS.SIZE
sta ZPQuickPtr1
bcc .2
inc ZPQuickPtr1+1
.2 lda (ZPQuickPtr1)
bpl .3
ldy #S.PS.ID
lda (ZPQuickPtr1),y
cmp S.GetPSByIDA.PS
beq .8
.3 cpx TSKMGR.SIZE
bne .1
.9 lda #TSKMGR.ERRNSP
sec
rts
.8 >LDYA ZPQuickPtr1
clc
rts
*--------------------------------------
S.GetPSByIDA.PS .BS 1
*--------------------------------------
S.Sleep pla get PC LO
sec
sbc pCode
ldy #S.PS.PC
sta (pPs),y
pla get PC HI
sbc pCode+1
iny
sta (pPs),y
lda (pPs)
ora #S.PS.F.SLEEP
sta (pPs)
clc No error,
rts back to Kernel
*--------------------------------------
* PRIVATE
*--------------------------------------
* S.CreateChildProcess
* in :
* out :
* A = PSID
* we cannot use ZPQuickPtrs1 & 2
* because of calling S.NewPStrYA & S.DupEnvA
*--------------------------------------
S.CreateChildProcess
>LDYAI TskMgr.Table+S.PS.SIZE
>STYA ZPQuickPtr3
ldx #0
.1 inx
cpx TSKMGR.SIZE
beq .2
lda (ZPQuickPtr3) Found an empty slot
bpl .3
lda ZPQuickPtr3
clc
adc #S.PS.SIZE
sta ZPQuickPtr3
bcc .1
inc ZPQuickPtr3+1
bra .1
.2 cpx #K.PS.MAX
bne .30
lda #TSKMGR.ERROOH
sec
rts
.30 inc TSKMGR.SIZE
.3 lda #S.PS.F.INUSE
ora S.CreateChildProcess.Flags
sta (ZPQuickPtr3)
.4 inc TSKMGR.LASTID Get a PSID not alredy running
beq .4 not = 0
lda TSKMGR.LASTID
jsr S.GetPSByIDA
bcc .4
ldy #S.PS.ID
lda TSKMGR.LASTID
sta (ZPQuickPtr3),y
lda #0
ldy #S.PS.hCS
.5 sta (ZPQuickPtr3),y Blank Everything in this S.PS
iny
cpy #S.PS.SIZE
bne .5
lda S.CreateChildProcess.Flags
and #S.PS.F.ENV need to create ENV & Prefix ?
beq .6
ldy #S.PS.hPREFIX copy hPREFIX...
lda (pPs),y
jsr S.GetMemPtrA
jsr S.NewPStrYA
bcs .99
txa
ldy #S.PS.hPREFIX
sta (ZPQuickPtr3),y
ldy #S.PS.hENV ...and hENV from parent PS
lda (pPs),y
jsr S.DupEnvA
bcs .99
ldy #S.PS.hENV
sta (ZPQuickPtr3),y
bra .8
.6 ldy #S.PS.hPREFIX reuse same hPREFIX...
lda (pPs),y
sta (ZPQuickPtr3),y
ldy #S.PS.hENV ...and hENV from parent PS
lda (pPs),y
sta (ZPQuickPtr3),y
.8 ldy #S.PS.hINDEV
.81 lda (pPs),y
sta (ZPQuickPtr3),y
iny
cpy #S.PS.hERRDEV+1
bne .81
ldy #S.PS.ID
lda (pPs),y
ldy #S.PS.PID
sta (ZPQuickPtr3),y
lda TSKMGR.LASTID
clc Exit with A=PSID
rts
.99 sec
rts
*--------------------------------------
S.CreateChildProcess.Flags
.BS 1
*--------------------------------------
* S.InitProcess
* In :
* A = hMem To Full Cmd Line
*--------------------------------------
S.InitProcess >LDYA S.CreateProcess.CmdLine
jsr S.PStr2StrArrayYA
bcs .9
phy save PTR to StrArray...
pha
txa
ldy #S.PS.hCMDLINE
sta (pPs),y
pla Restore PTR...
ply
jsr S.LoadBinYA A = BinPath hMem
bcs .9
>STYA pCode save PTR to Code Segment
txa
ldy #S.PS.hCS
sta (pPs),y save CS hMem in TSKSLOT
ldy #H.BIN.BIN.DS.SIZE+1
lda (pCode),y Load DS.SIZE HI
tax
dey
ora (pCode),y
beq .2 DS.SIZE=0...
lda (pCode),y
>PUSHAX Push DS.SIZE
>PUSHBI S.MEM.F.INIT0 Clear DS
jsr S.GetMem
bcs .9
>STYA pData
txa
ldy #S.PS.hDS
sta (pPs),y save DS hMem in TSKSLOT
.2 lda (pCode)
cmp #H.BIN.HEADER.BIN65
bne *
ldx #TSKMGR.INIT
jsr pCodeJmp Call INIT function
bcc .9
pha save error code
ldx #TSKMGR.QUIT
jsr pCodeJmp Call QUIT function
pla get back error code
sec
.9 rts
*--------------------------------------
* S.SelectProcessA
* In : A=PSID
*--------------------------------------
S.SelectProcessA
tay
bne S.SelectProcessN
S.SelectProcess0
>LDYAI TskMgr.Table Make PS #0 as current process
>STYA pPs
bra S.SelectProcessDev
S.SelectProcessN
jsr S.GetPSByIDA
bcs *
>STYA pPs
S.SelectProcess ldy #S.PS.hCS
lda (pPs),y
jsr S.GetMemPtrA
>STYA pCode
ldy #S.PS.hDS
lda (pPs),y
beq S.SelectProcessDev
jsr S.GetMemPtrA
>STYA pData
S.SelectProcessDev
ldy #S.PS.hOUTDEV
lda (pPs),y
beq .8
jsr S.GetDevByIDA
>STYA pDev
.8 clc
rts
*--------------------------------------
* S.FreeProcessA
* In : A = PID to free
*--------------------------------------
S.FreeProcessA jsr S.GetPSByIDA
bcs *
>STYA ZPQuickPtr1
ldy #S.PS.hCMDLINE
lda (ZPQuickPtr1),y
beq .2
jsr S.FreeMemA
lda (ZPQuickPtr1) get S.PS.F
and #S.PS.F.ENV do we have to discard duplicated env & prefix ?
beq .4
.2 ldy #S.PS.hENV
lda (ZPQuickPtr1),y
beq .3
jsr S.FreeMemA
.3 ldy #S.PS.hPREFIX
lda (ZPQuickPtr1),y
beq .4
jsr S.FreeMemA
.4 ldy #S.PS.hDS
lda (ZPQuickPtr1),y
beq .5
jsr S.FreeMemA
.5 ldy #S.PS.hCS
lda (ZPQuickPtr1),y
beq .8
jsr S.FreeMemA
.8 lda #0
sta (ZPQuickPtr1) Mark TSKSLOT as free
clc
rts
*--------------------------------------
* S.DupEnvA
* In:
* A = ENV hMem To Duplicate
* Out:
* A = hMem to new ENV
*--------------------------------------
S.DupEnvA jsr S.GetMemPtrA
>STYA ZPQuickPtr1
>PUSHWI K.ENV.SIZE
>PUSHBI 0
jsr S.GetMem
bcs .9
>STYA ZPQuickPtr2
ldy #0
.1 lda (ZPQuickPtr1),y
sta (ZPQuickPtr2),y
beq .8
iny
bne .1
inc ZPQuickPtr1+1
inc ZPQuickPtr2+1
bra .1
.8 txa
clc
.9 rts
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.PS
LOAD SYS/KERNEL.S
ASM

View File

@ -5,125 +5,7 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* S.BinRelocateYA :
* YA = Ptr to Code
* R.AX = Code Length
* R.BX = Range Start address to relocate
* R.CX = Range End address to relocate
* R.DX = offset to apply to all abs addresses between R.BX and R.CX
*--------------------------------------
S.BinRelocateYA >STYA ZPQuickPtr1
ldy #H.BIN.JMP relocate Main JMP
lda (ZPQuickPtr1),y
clc
adc R.DL
sta (ZPQuickPtr1),y
iny
lda (ZPQuickPtr1),y
adc R.DH
sta (ZPQuickPtr1),y
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
bra S.JmpRelocate
S.DrvRelocateYA >STYA ZPQuickPtr1
ldy #0
S.JmpRelocate lda (ZPQuickPtr1),y Start Relocate JMP table
tax
iny
ora (ZPQuickPtr1),y
beq S.CodeRelocate $0000 = end of table
dey
txa
clc
adc R.DL
sta (ZPQuickPtr1),y
iny
lda (ZPQuickPtr1),y
adc R.DH
sta (ZPQuickPtr1),y
iny
bra S.JmpRelocate
S.CodeRelocate lda ZPQuickPtr1
clc
adc R.AL Make ZPQuickPtr2=End of code
sta ZPQuickPtr2 =ZPQuickPtr1+AX (code len)
lda ZPQuickPtr1+1
adc R.AH
sta ZPQuickPtr2+1
iny
tya add current offset in Y to Ptr
clc
adc ZPQuickPtr1
sta ZPQuickPtr1
bcc .5
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
clc
.5 lda (ZPQuickPtr1) get OPCODE
tax
lda OPCODES,x get OPCODE definition
bpl .7 abs addressing?
and #3 save Opcode length...
pha
ldy #1
lda (ZPQuickPtr1),y Get LO
sec
sbc R.BL
iny
lda (ZPQuickPtr1),y Get HI
sbc R.BH
bcc .6 addr < AX, out of range
dey
lda (ZPQuickPtr1),y Get LO
sec
sbc R.CL
iny
lda (ZPQuickPtr1),y Get HI
sbc R.CH
bcs .6 addr > CX, out of range
dey
lda (ZPQuickPtr1),y Get LO
clc
adc R.DL add DX to abs address
sta (ZPQuickPtr1),y store relocated addr LO
iny
lda (ZPQuickPtr1),y Get HI
adc R.DH
sta (ZPQuickPtr1),y store relocated addr HI
.6 pla
.7 clc A = OPCODE length
adc ZPQuickPtr1
sta ZPQuickPtr1
bcc .8
inc ZPQuickPtr1+1
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
sec
sbc ZPQuickPtr2
lda ZPQuickPtr1+1
sbc ZPQuickPtr2+1
bcc .5 yes, continue relocating
clc
rts
*--------------------------------------
* S.InsDrv
* pDrv = .DRV File Loaded Address
*--------------------------------------
S.InsDrv ldy #H.BIN.DRV.CODE.LEN
@ -136,28 +18,28 @@ S.InsDrv ldy #H.BIN.DRV.CODE.LEN
ldy #H.BIN.DRV.CODE.O
lda (pDrv),y
clc
adc S.LoadBinA.AuxType
adc S.LoadBin.AuxType
sta R.BL
iny
lda (pDrv),y
adc S.LoadBinA.AuxType+1
adc S.LoadBin.AuxType+1
sta R.BH set BX=End Of Code
lda S.LoadBinA.AuxType
lda S.LoadBin.AuxType
clc
adc S.LoadBinA.FileLen
adc S.LoadBin.FileLen
sta R.CL
lda S.LoadBinA.AuxType+1
adc S.LoadBinA.FileLen+1
lda S.LoadBin.AuxType+1
adc S.LoadBin.FileLen+1
sta R.CH set CX=End Of Range
ldy #H.BIN.DRV.CODE.O
lda S.LoadBinA.FileLen
lda S.LoadBin.FileLen
sec
sbc (pDrv),y
sta S.InsDrv.DRVLen
iny
lda S.LoadBinA.FileLen+1
lda S.LoadBin.FileLen+1
sbc (pDrv),y
sta S.InsDrv.DRVLen+1 Compute DRV Len
@ -313,6 +195,125 @@ S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O
S.InsDrv.DrvLen .BS 2
S.InsDrv.DrvEnd .BS 2
*--------------------------------------
* S.BinRelocateYA :
* YA = Ptr to Code
* R.AX = Code Length
* R.BX = Range Start address to relocate
* R.CX = Range End address to relocate
* R.DX = offset to apply to all abs addresses between R.BX and R.CX
*--------------------------------------
S.BinRelocateYA >STYA ZPQuickPtr1
ldy #H.BIN.JMP relocate Main JMP
lda (ZPQuickPtr1),y
clc
adc R.DL
sta (ZPQuickPtr1),y
iny
lda (ZPQuickPtr1),y
adc R.DH
sta (ZPQuickPtr1),y
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
bra S.JmpRelocate
S.DrvRelocateYA >STYA ZPQuickPtr1
ldy #0
S.JmpRelocate lda (ZPQuickPtr1),y Start Relocate JMP table
tax
iny
ora (ZPQuickPtr1),y
beq S.CodeRelocate $0000 = end of table
dey
txa
clc
adc R.DL
sta (ZPQuickPtr1),y
iny
lda (ZPQuickPtr1),y
adc R.DH
sta (ZPQuickPtr1),y
iny
bra S.JmpRelocate
S.CodeRelocate lda ZPQuickPtr1
clc
adc R.AL Make ZPQuickPtr2=End of code
sta ZPQuickPtr2 =ZPQuickPtr1+AX (code len)
lda ZPQuickPtr1+1
adc R.AH
sta ZPQuickPtr2+1
iny
tya add current offset in Y to Ptr
clc
adc ZPQuickPtr1
sta ZPQuickPtr1
bcc .5
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
clc
.5 lda (ZPQuickPtr1) get OPCODE
tax
lda OPCODES,x get OPCODE definition
bpl .7 abs addressing?
and #3 save Opcode length...
pha
ldy #1
lda (ZPQuickPtr1),y Get LO
sec
sbc R.BL
iny
lda (ZPQuickPtr1),y Get HI
sbc R.BH
bcc .6 addr < AX, out of range
dey
lda (ZPQuickPtr1),y Get LO
sec
sbc R.CL
iny
lda (ZPQuickPtr1),y Get HI
sbc R.CH
bcs .6 addr > CX, out of range
dey
lda (ZPQuickPtr1),y Get LO
clc
adc R.DL add DX to abs address
sta (ZPQuickPtr1),y store relocated addr LO
iny
lda (ZPQuickPtr1),y Get HI
adc R.DH
sta (ZPQuickPtr1),y store relocated addr HI
.6 pla
.7 clc A = OPCODE length
adc ZPQuickPtr1
sta ZPQuickPtr1
bcc .8
inc ZPQuickPtr1+1
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
sec
sbc ZPQuickPtr2
lda ZPQuickPtr1+1
sbc ZPQuickPtr2+1
bcc .5 yes, continue relocating
clc
rts
*--------------------------------------
* 65C02 OPCODES
* Bit 7 : 1 absolute addressing
* Bit 1-0 : opcode + @ length

View File

@ -7,9 +7,10 @@ AUTO 6
*--------------------------------------
* S.NewPStrYA
* IN:
* PULLW = PTR to buffer
* Y,A = PTR to buffer
* OUT:
* A = hMem to S (PSTRING)
* Y,A = PTR to String
* X = hMem (PSTRING)
*--------------------------------------
S.NewPStrYA >STYA ZPQuickPtr1
lda (ZPQuickPtr1)
@ -17,73 +18,103 @@ S.NewPStrYA >STYA ZPQuickPtr1
tay
lda #0 Y,A = len of new string
>PUSHYA
>PUSHA 0 = no option
>PUSHBI 0 0 = no option
jsr S.GetMem
bcs .9
phx
>STYA ZPQuickPtr2
jsr S.PStrCpyPtr1Ptr2
>LDYA ZPQuickPtr2
clc
rts
.9 sec
rts
*--------------------------------------
* S.PStrCpy
* IN:
* PULLW = PSTR to DST (PSTRING)
* PULLW = PSTR to SRC (PSTRING)
* OUT:
* DST = SRC (PSTRING)
*--------------------------------------
S.PStrCpy >PULLW ZPQuickPtr2 save DST
>PULLW ZPQuickPtr1 save SRC
S.PStrCpyPtr1Ptr2
lda (ZPQuickPtr1)
sta (ZPQuickPtr2)
tay
beq .2
.1 lda (ZPQuickPtr1),y
sta (ZPQuickPtr2),y
dey
bne .1
.2 pla
clc
rts
.9 sec
.2 clc
rts
*--------------------------------------
* S.PStrCat
* IN:
* PULLB = hMem to S1 (PSTRING)
* PULLB = hMem to S2 (PSTRING)
* PULLW = PSTR to DST (PSTRING)
* PULLW = PSTR to SRC (PSTRING)
* OUT:
* A = hMem to S1+S2 (PSTRING)
* DST = DST+SRC (PSTRING)
*--------------------------------------
S.PStrCat >PULLA
jsr S.GetMemPtrA
>STYA ZPQuickPtr1 save S1
>PULLA
jsr S.GetMemPtrA
>STYA ZPQuickPtr2 save S2
lda (ZPQuickPtr1) Compute length of new path = S1 + S2 + 1
sec
adc (ZPQuickPtr2)
tay
lda #0 Y,A = len of new string
>PUSHYA
>PUSHA 0 = no option
jsr S.GetMem
bcs .9 OOM error
>STYA ZPQuickPtr3
phx save New hMem
S.PStrCat >PULLW ZPQuickPtr2 save DST
>PULLW ZPQuickPtr1 save SRC
lda (ZPQuickPtr1)
tax
ldy #0
.2 iny
lda (ZPQuickPtr1),y
sta (ZPQuickPtr3),y
dex
lda (ZPQuickPtr2)
tay
.1 cpy #255
beq .8
iny
inc ZPQuickPtr1
bne .2
lda (ZPQuickPtr2)
tax
.3 inc ZPQuickPtr2
bne .4
inc ZPQuickPtr2+1
.4 iny
lda (ZPQuickPtr2)
sta (ZPQuickPtr3),y
inc ZPQuickPtr1+1
.2 lda (ZPQuickPtr1)
sta (ZPQuickPtr2),y
dex
bne .3
tya
sta (ZPQuickPtr3)
pla returns A = new hMem
bne .1
.8 tya
sta (ZPQuickPtr2)
clc
rts
.9 sec
*--------------------------------------
* S.PStrUpr
* IN:
* Y,A = PTR to String (PSTRING)
* OUT:
* Uppercased String in Buffer
*--------------------------------------
S.PStrUprYA >STYA ZPQuickPtr1
lda (ZPQuickPtr1)
tay
.1 lda (ZPQuickPtr1),y convert to UPPERCASE
cmp #'a'
bcc .2
cmp #'z'+1
bcs .2
eor #$20
sta (ZPQuickPtr1),y
.2 dey
bne .1
clc
rts
*--------------------------------------
* S.PStrMatch
@ -160,158 +191,81 @@ S.PStrMatch >PULLW ZPQuickPtr2 pull String
.9 sec
rts
*--------------------------------------
* S.PStrGetTkn
* IN:
* PULLB = Token IDX
* 0: "Split mode": first token + remaining
* !0: "Std Mode": Return token #
* PULLB = SEP char
* PULLB = hMem to PSTRING
* OUT:
* A = hMem to Token (PSTRING)
* X = hMem to Remaining String After Token "Split Mode"
* S.PStr2StrArrayYA
* In :
* Y,A = PTR to String
* Out :
* Y,A = PTR to StrArray
* X = hMem
*--------------------------------------
S.PStrGetTkn >PULLA Get IDX
sta S.PStrGetTkn.IDX
>PULLA Get SEP
sta S.PStrGetTkn.SEP
>PULLA Get PStr
jsr S.GetMemPtrA
S.PStr2StrArrayYA
>STYA ZPQuickPtr1
lda (ZPQuickPtr1) Get mem size STRLEN+1
ldx #0
inc
bne .1
inx
S.PStrGetTkn1 ldx #0 init token count to 0
ldy #0
stz S.PStrGetTkn.START init INTOKEN start to 0
.1 iny
lda (ZPQuickPtr1),y
and #$7F
cmp S.PStrGetTkn.SEP char=SEP ?
bne .3 no, start a new token if not alredy in
lda S.PStrGetTkn.START SEP:in INTOKEN ?
beq .4 no, skip this SEP
inx yes, increase token count
lda S.PStrGetTkn.IDX requested token=0 ?
beq .71 yes, we are in "split mode"
cpx S.PStrGetTkn.IDX no,is current X=requested IDX?
beq .71
stz S.PStrGetTkn.START reset in INTOKEN start
bra .4
.3 lda S.PStrGetTkn.START char:already INTOKEN ?
bne .4 yes, keep existing start index
sty S.PStrGetTkn.START mark begining of token
.4 tya
cmp (ZPQuickPtr1) end of string ?
bne .1 no, get next one
lda S.PStrGetTkn.START INTOKEN?
beq .6
inx yes, last one is ending with string
.6 lda S.PStrGetTkn.IDX split mode ?
beq .7
cpx S.PStrGetTkn.IDX is token = requested?
beq .7
sec End of String reached, no matching token
.61 rts
.1 >PUSHAX
>PUSHBI 0
jsr S.GetMem
bcs .9
phx save hMem
phy save PTR.LO
pha save PTR.HI
>STYA ZPQuickPtr2
.71 dey move back yo end of token before this SEP
.7 sty S.PStrGetTkn.END we have matching token (or 1st one in split mode) at [START,END]
tya compute token len=Y-END
sec
sbc S.PStrGetTkn.START
inc +1
inc +1 for string len
tay
lda #0
>PUSHYA Get a hMem for this token
>PUSHA 0 = no option
jsr S.GetMem
bcs .61
phx save hMem
>STYA ZPQuickPtr2
lda S.PStrGetTkn.END
sec
sbc S.PStrGetTkn.START
inc
sta (ZPQuickPtr2) set this string length
ldy S.PStrGetTkn.START
dey
.8 iny
inc ZPQuickPtr2
bne .9
inc ZPQuickPtr2+1
.9 lda (ZPQuickPtr1),y
sta (ZPQuickPtr2)
cpy S.PStrGetTkn.END
bne .8
lda S.PStrGetTkn.IDX requested token=0 ?
bne .87
tya yes, we are in "split mode"
cmp (ZPQuickPtr1) Remaining chars ?
beq .87
.10 iny move to next char
lda (ZPQuickPtr1),y
cmp S.PStrGetTkn.SEP char=SEP?
bne .11
tya
cmp (ZPQuickPtr1) last one ?
bne .10
bra .87 yes, nothing to return
.11 sty S.PStrGetTkn.END S.PStrGetTkn.END=1st non SEP char
lda (ZPQuickPtr1) compute reamining len=Y-ZPQuickPtr1+1
sec
sbc S.PStrGetTkn.END
inc
inc +1 for string len
tay
lda #0
>PUSHYA Get a hMem for remaining string
>PUSHA 0 = no option
jsr S.GetMem
bcs .98
phx save hMem
>STYA ZPQuickPtr2
lda (ZPQuickPtr1)
tax count in src string
beq .8
ldy #0 reset index in dst token
.3 inc ZPQuickPtr1 get...
bne .4
inc ZPQuickPtr1+1
.4 lda (ZPQuickPtr1) ...next char
cmp #' ' found a space ?
bne .6
tya in a token ?
beq .7 no, skip & go to next char
sta (ZPQuickPtr2) yes, set this token len
sec
sbcS.PStrGetTkn.END
inc
sta (ZPQuickPtr2)
ldy S.PStrGetTkn.END
dey
.12 iny
inc ZPQuickPtr2
bne .13
adc ZPQuickPtr2 advance to next token
sta ZPQuickPtr2
bcc .5
inc ZPQuickPtr2+1
.13 lda (ZPQuickPtr1),y
sta (ZPQuickPtr2)
tya
cmp (ZPQuickPtr1)
bne .12
plx get back remaining string hMem
pla get back token hMem
clc
rts
.87 ldx #0 Splitmode but no remaining string to return
pla get back token hMem
clc
rts
.5 ldy #0 reset index in dst token
bra .7
.98 pla get back Token hMem
jsr S.FreeMemA discard Token
.99 sec
rts
*--------------------------------------
S.PStrGetTkn.SEP .BS 1
S.PStrGetTkn.IDX .BS 1
S.PStrGetTkn.START .BS 1
S.PStrGetTkn.END .BS 1
*--------------------------------------
S.GetArgCount
.6 iny add char to token
sta (ZPQuickPtr2),y
.7 dex end of src string?
bne .3 no...next char...
tya yes, are we in a token ?
beq .8
sta (ZPQuickPtr2) yes, set last token len
sec
adc ZPQuickPtr2 advance to next token
sta ZPQuickPtr2
bcc .8
inc ZPQuickPtr2+1
.8 lda #0
sta (ZPQuickPtr2) set Array Ending 0
pla get back PTR.HI
ply get back PTR.LO
plx get back hMem
clc
rts
*--------------------------------------
S.GetArgA
clc
rts
.9 rts
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.STR

View File

@ -149,401 +149,6 @@ S.DispatchEvents
S.TskMgrQuit clc
rts
*--------------------------------------
* PUBLIC
*--------------------------------------
* S.ExecProcessNewEnvYA
* S.ExecProcessYA (Blocking Parent PID)
* S.CreateProcessNewEnvYA
* S.CreateProcessYA (Non Blocking)
* in :
* A = hMem To Cmd Line
* Y = hMem To Args
* out :
* A = Child PSID
*--------------------------------------
S.ExecProcessNewEnvYA
ldx #S.PS.F.ENV
.HS 2C bit abs
S.ExecProcessYA ldx #0
S.ExecProcess jsr S.CreateProcess
bcs .9 terminated, do not set PID as HOLD
ldy #S.PS.CID
sta (pPs),y
pha Save Child PID
lda (pPs)
ora #S.PS.F.HOLD
sta (pPs)
pla Get Back PID
clc
.9 rts
*--------------------------------------
S.CreateProcessNewEnvYA
ldx #S.PS.F.ENV
.HS 2C bit abs
S.CreateProcessYA
ldx #0
S.CreateProcess stx S.CreateChildProcess.Flags
sta S.CreateProcessA.Cmd
sty S.CreateProcessA.Args
jsr S.CreateChildProcess
bcs .99
sta S.CreateProcessA.CPSID
jsr S.SelectProcessA
jsr S.InitProcess
bcs .98 Init Failed or exit?
ldy #S.PS.PID switch back to Parent Process
lda (pPs),y
jsr S.SelectProcessA
lda S.CreateProcessA.CPSID
clc
rts
.98 pha save error code
ldy #S.PS.PID switch back to Parent Process
lda (pPs),y
jsr S.SelectProcessA
lda S.CreateProcessA.CPSID
jsr S.FreeProcessA
pla get back error code
.99 sec
rts
*--------------------------------------
S.CreateProcessA.Cmd .BS 1
S.CreateProcessA.Args .BS 1
S.CreateProcessA.CPSID .BS 1
*--------------------------------------
* S.GetPSByIDA
* In :
* A = PID
* Out :
* Y,A = PTR to TSKSLOT
*--------------------------------------
S.GetPSByIDA sta S.GetPSByIDA.PS
>LDYAI TskMgr.Table
>STYA ZPQuickPtr1
lda S.GetPSByIDA.PS
beq .8
ldx #0
.1 inx
lda ZPQuickPtr1
clc
adc #S.PS.SIZE
sta ZPQuickPtr1
bcc .2
inc ZPQuickPtr1+1
.2 lda (ZPQuickPtr1)
bpl .3
ldy #S.PS.ID
lda (ZPQuickPtr1),y
cmp S.GetPSByIDA.PS
beq .8
.3 cpx TSKMGR.SIZE
bne .1
.9 lda #TSKMGR.ERRNSP
sec
rts
.8 >LDYA ZPQuickPtr1
clc
rts
*--------------------------------------
S.GetPSByIDA.PS .BS 1
*--------------------------------------
S.Sleep pla get PC LO
sec
sbc pCode
ldy #S.PS.PC
sta (pPs),y
pla get PC HI
sbc pCode+1
iny
sta (pPs),y
lda (pPs)
ora #S.PS.F.SLEEP
sta (pPs)
clc No error,
rts back to Kernel
*--------------------------------------
* PRIVATE
*--------------------------------------
* S.CreateChildProcess
* in :
* out :
* A = PSID
* we cannot use ZPQuickPtrs
* because of calling S.NewPStrYA & S.DupEnvA
*--------------------------------------
S.CreateChildProcess
>LDYAI TskMgr.Table+S.PS.SIZE
>STYA R.AX
ldx #0
.1 inx
cpx TSKMGR.SIZE
beq .2
lda (R.AX) Found an empty slot
bpl .3
lda R.AL
clc
adc #S.PS.SIZE
sta R.AL
bcc .1
inc R.AH
bra .1
.2 cpx #K.PS.MAX
bne .30
lda #TSKMGR.ERROOH
sec
rts
.30 inc TSKMGR.SIZE
.3 lda #S.PS.F.INUSE
ora S.CreateChildProcess.Flags
sta (R.AX)
.4 inc TSKMGR.LASTID Get a PSID not alredy running
beq .4 not = 0
lda TSKMGR.LASTID
jsr S.GetPSByIDA
bcc .4
ldy #S.PS.ID
lda TSKMGR.LASTID
sta (R.AX),y
lda #0
ldy #S.PS.hCS
.5 sta (R.AX),y Blank Everything in this S.PS
iny
cpy #S.PS.SIZE
bne .5
lda S.CreateChildProcess.Flags
and #S.PS.F.ENV need to create ENV & Prefix ?
beq .6
ldy #S.PS.hPREFIX copy hPREFIX...
lda (pPs),y
jsr S.GetMemPtrA
jsr S.NewPStrYA
bcs .99
ldy #S.PS.hPREFIX
sta (R.AX),y
ldy #S.PS.hENV ...and hENV from parent PS
lda (pPs),y
jsr S.DupEnvA
bcs .99
ldy #S.PS.hENV
sta (R.AX),y
bra .8
.6 ldy #S.PS.hPREFIX reuse same hPREFIX...
lda (pPs),y
sta (R.AX),y
ldy #S.PS.hENV ...and hENV from parent PS
lda (pPs),y
sta (R.AX),y
.8 ldy #S.PS.hINDEV
.81 lda (pPs),y
sta (R.AX),y
iny
cpy #S.PS.hERRDEV+1
bne .81
ldy #S.PS.ID
lda (pPs),y
ldy #S.PS.PID
sta (R.AX),y
lda TSKMGR.LASTID
clc Exit with A=PSID
rts
.99 sec
rts
*--------------------------------------
S.CreateChildProcess.Flags
.BS 1
*--------------------------------------
* S.InitProcess
* In :
* A = hMem To Full Cmd Line
*--------------------------------------
S.InitProcess lda S.CreateProcessA.Args
beq .1
jsr S.ExpandPStrA
.1 ldy #S.PS.hARGS
sta (pPs),y set ARGS hMem (0 if none)
lda S.CreateProcessA.Cmd
jsr S.ExpandPStrA
ldy #S.PS.hCMD
sta (pPs),y
jsr S.LoadBinA A = BinPath hMem
bcs .99
>STYA pCode save PTR to Code Segment
txa
ldy #S.PS.hCS
sta (pPs),y save CS hMem in TSKSLOT
ldy #H.BIN.BIN.DS.SIZE+1
lda (pCode),y Load DS.SIZE HI
tax
dey
ora (pCode),y
beq .2 DS.SIZE=0...
lda (pCode),y
>PUSHAX Push DS.SIZE
>PUSHBI S.MEM.F.INIT0 Clear DS
jsr S.GetMem
bcs .99
>STYA pData
txa
ldy #S.PS.hDS
sta (pPs),y save DS hMem in TSKSLOT
.2 lda (pCode)
cmp #H.BIN.HEADER.BIN65
bne *
ldx #TSKMGR.INIT
jsr pCodeJmp Call INIT function
bcc .99
pha save error code
ldx #TSKMGR.QUIT
jsr pCodeJmp Call QUIT function
pla get back error code
sec
.99 rts
*--------------------------------------
* S.SelectProcessA
* In : A=PSID
*--------------------------------------
S.SelectProcessA
tay
bne S.SelectProcessN
S.SelectProcess0
>LDYAI TskMgr.Table Make PS #0 as current process
>STYA pPs
bra S.SelectProcessDev
S.SelectProcessN
jsr S.GetPSByIDA
bcs *
>STYA pPs
S.SelectProcess ldy #S.PS.hCS
lda (pPs),y
jsr S.GetMemPtrA
>STYA pCode
ldy #S.PS.hDS
lda (pPs),y
beq S.SelectProcessDev
jsr S.GetMemPtrA
>STYA pData
S.SelectProcessDev
ldy #S.PS.hOUTDEV
lda (pPs),y
beq .8
jsr S.GetDevByIDA
>STYA pDev
.8 clc
rts
*--------------------------------------
* S.FreeProcessA
* In : A = PID to free
*--------------------------------------
S.FreeProcessA jsr S.GetPSByIDA
bcs *
>STYA ZPQuickPtr1
ldy #S.PS.hARGS
lda (ZPQuickPtr1),y
beq .1
jsr S.FreeMemA
.1 ldy #S.PS.hCMD
lda (ZPQuickPtr1),y
beq .2
jsr S.FreeMemA
lda (ZPQuickPtr1) get S.PS.F
and #S.PS.F.ENV do we have to discard duplicated env & prefix ?
beq .4
.2 ldy #S.PS.hENV
lda (ZPQuickPtr1),y
beq .3
jsr S.FreeMemA
.3 ldy #S.PS.hPREFIX
lda (ZPQuickPtr1),y
beq .4
jsr S.FreeMemA
.4 ldy #S.PS.hDS
lda (ZPQuickPtr1),y
beq .5
jsr S.FreeMemA
.5 ldy #S.PS.hCS
lda (ZPQuickPtr1),y
beq .8
jsr S.FreeMemA
.8 lda #0
sta (ZPQuickPtr1) Mark TSKSLOT as free
clc
rts
*--------------------------------------
TSKMGR.SIZE .BS 1
TSKMGR.COUNT .BS 1
TSKMGR.EVENTCNT .BS 1

View File

@ -117,8 +117,8 @@ Kernel.Init2 >LDAXI MSG.Init2
jsr S.TskMgrInit
bcs *
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F
sta CLRALTZP Make sure MAIN ZP...
lda RROMBNK1 ... & ROM is enabled for X.PRINT.F
>LDAXI MSG.Init2.OK
jsr PrintCStrAX
@ -137,31 +137,22 @@ Kernel.Init3 ldx #DEVMGR.SELECT
>LDYAI MSG.Init3
>SYSCALL SYS.PSTROutYA
>LDYAI MSG.StartupFile
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>LDYAI MSG.Prefix
>SYSCALL SYS.PSTROutYA
>LDYAI STARTUP.ARGS Get A2osX.STARTUP full path...
>SYSCALL SYS.NewPStrYA
pha
>LDYAI STARTUP.CMD Get SHELL full path...
>SYSCALL SYS.NewPStrYA
ply get back ARGS in Y
phy
pha A=CMD, save for discard
>PUSHWI STARTUP.CMDLINE
>LDYAI MSG.Startup
>SYSCALL SYS.PSTROutYA
>LDYAI STARTUP.CMDLINE
>SYSCALL SYS.CreateProcessYA
bcc .1
>PUSHA
>LDYAI MSG.StartupErr
>SYSCALL SYS.PSTROutYA
bra *
bcs .9
.1 pla
>SYSCALL SYS.FreeMemA
pla
>SYSCALL SYS.FreeMemA
>LDYAI MSG.Init3.OK
>SYSCALL SYS.PSTROutYA
@ -169,6 +160,11 @@ Kernel.Init3 ldx #DEVMGR.SELECT
>STYA pPs
jmp S.KernelRun
.9 >PUSHA
>LDYAI MSG.StartupErr
>SYSCALL SYS.PSTROutYA
bra *
*--------------------------------------
Kernel.Move ldy #0
.1 inc ZPQuickPtr3
@ -197,12 +193,12 @@ MSG.K.INIT >CSTRING "Kernel Setup...\n"
MSG.Init2.OK >CSTRING "A2osX[Stage2]:Complete.\n"
*--------------------------------------
MSG.Init3 >PSTRING "A2osX[Stage3]:Init\n"
MSG.StartupFile >PSTRING "EXEC A2osX.Startup...\n"
MSG.StartupErr >PSTRING "SHELL A2osX.Startup Failed with Error : [$%h]\n"
MSG.Prefix >PSTRING "Prefix:%S\n"
MSG.Startup >PSTRING "Executing Kernel Startup Script...\nCmd:%S\n"
MSG.StartupErr >PSTRING "Failed : [$%h]\n"
MSG.Init3.OK >PSTRING "A2osX[Stage3]:Complete.\n"
*--------------------------------------
STARTUP.CMD >PSTRING "${A2OSX}SBIN/SHELL"
STARTUP.ARGS >PSTRING "${A2OSX}A2osX.STARTUP"
STARTUP.CMDLINE >PSTRING "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP"
*--------------------------------------
* Global Page
*--------------------------------------
@ -222,6 +218,7 @@ A2osX.D001 .EQ *
.INB SYS/KERNEL.S.CIO
.INB SYS/KERNEL.S.FIO
.INB SYS/KERNEL.S.MLI
.INB SYS/KERNEL.S.ARG
.INB SYS/KERNEL.S.ENV
.INB SYS/KERNEL.S.EVT
.EP
@ -245,6 +242,7 @@ A2osX.E000 .EQ *
.INB SYS/KERNEL.S.DRV
.INB SYS/KERNEL.S.LIB
.INB SYS/KERNEL.S.TSK
.INB SYS/KERNEL.S.PS
*--------------------------------------
* Make sure KERNEL.S.DEV is the last one
*--------------------------------------