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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -49,61 +49,47 @@ CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.LoadLibYA >SYSCALL SYS.LoadLibYA
sta hLIBSTR sta hLIBSTR
lda #0 stz TmpBuffer256
ldy #DS.END-DS.START-1
.11 sta (pData),y
dey
bpl .11
ldy #S.PS.hARGS >SYSCALL SYS.GetArgC
lda (pPs),y cmp #1
beq .1 no arg, go get current prefix 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 >STYA ZPPtr1
lda (ZPPtr1)
beq .1
ldy #1 ldy #1
lda (ZPPtr1),y lda (ZPPtr1),y
cmp #'/' full path starting with '/'? 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... jsr CS.INIT.GETPFX
lda (pPs),y
bra .3
.10 ldy #S.PS.hARGS .2 >PUSHW ZPPtr1
lda (pPs),y >PUSHWI TmpBuffer256
>PUSHA
ldy #S.PS.hPREFIX
lda (pPs),y
>PUSHA
>SYSCALL SYS.PStrCat >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 tay
lda #'/' lda #'/'
cmp (ZPPtr1),y cmp TmpBuffer256,y
beq .31 beq .4
iny iny
sta (ZPPtr1),y sta TmpBuffer256,y
.31 iny .4 iny
lda #'*' lda #'*'
sta (ZPPtr1),y sta TmpBuffer256,y
.4 >LDYA ZPPtr1 .5 >LDYAI TmpBuffer256
>SYSCALL SYS.ListDirInitYA >SYSCALL SYS.ListDirInitYA
bcs .9 bcs .9
ldy #hS.LISTDIR ldy #hS.LISTDIR
@ -118,6 +104,14 @@ CS.INIT >LDYA L.LIBSTR
.9 sec .9 sec
rts 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 CS.RUN ldy #bCANCEL
lda (pData),y lda (pData),y
beq .1 beq .1

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -209,131 +209,7 @@ Destop.Paint lda #4
.8 rts .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) GoDevGFX jmp (pDevGFX)
GoDevMouse jmp (pDevMouse) GoDevMouse jmp (pDevMouse)

View File

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

View File

@ -34,23 +34,33 @@ CS.START cld
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.MSG.HELP .DA MSG.HELP L.MSG.HELP .DA MSG.HELP
L.MSG.LOAD .DA MSG.LOAD
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT ldy #S.PS.hARGS CS.INIT >SYSCALL SYS.GetArgC
lda (pPs),y cmp #1
bne .1 bne .1
>LDYA L.MSG.HELP >LDYA L.MSG.HELP
>SYSCALL SYS.PSTROutYA >SYSCALL SYS.PSTROutYA
bra .8 lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
.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
rts 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.RUN
CS.DOEVENT CS.DOEVENT
@ -58,7 +68,9 @@ CS.QUIT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END 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 MAN
SAVE SBIN/INSDRV.S SAVE SBIN/INSDRV.S
ASM ASM

View File

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

View File

@ -5,289 +5,284 @@ INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
EXEC.CMD stz hFullCmd * Y,A -> Command line (formatted & not empty)
stz hEnvPath *--------------------------------------
Cmd.ExecYA stz Cmd.Exec.Mode
ldy #hCmdLine Cmd.ExecYA.1 >SYSCALL SYS.ExpandPStrYA
lda (pData),y
>PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 0 Push 0 for getting CMD & ARGS
>SYSCALL SYS.PStrGetTkn
bcs .99 bcs .99
stx hCmdLine
sta hExecCmd
stx hExecArgs
>SYSCALL SYS.GetMemPtrA
>STYA ZPPtr1 >STYA ZPPtr1
ldx #0
stz ExecCmdIdx
stz ExecCmdMode
.1 lda CMDS,x ldy #1
beq .6 ldx #0 ARGS len
cmp (ZPPtr1)
bne .5
phx
ldy #0
.2 iny
inx
lda (ZPPtr1),y lda (ZPPtr1),y
cmp #'a' .10 cmp #'a'
bcc .3 bcc .11
cmp #'z'+1 cmp #'z'+1
bcs .3 bcs .11
eor #$20 to Uppercase eor #$20 to Uppercase
.3 cmp CMDS,x
bne .4 .11 sta CMD,y Store Cmd in Buffer
sty CMD update CMD len
tya tya
cmp (ZPPtr1) cmp (ZPPtr1)
bne .2 beq .13 end of string
plx
ldx ExecCmdIdx iny
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
lda (ZPPtr1),y lda (ZPPtr1),y
cmp #'/' cmp #' '
bne .1 bne .10
>LDYA ZPPtr1
>SYSCALL SYS.NewPStrYA
bra .10
.1 >LDYA L.ENV.PATH push ENVNAME=PATH
>SYSCALL SYS.GetEnvVarYA get value for ENV=PATH
bcc .12 .12 tya
jmp .9 cmp (ZPPtr1)
beq .13 end of string
.12 sta hEnvPath iny
>PUSHB hExecCmd lda (ZPPtr1),y
>PUSHB hEnvPath inx
>SYSCALL SYS.FileSearch sta ARGS,x
bcc .10 bra .12
>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
lda hFullCmd .13 stx ARGS update ARGS len
jsr OpenTxtFileA
bcs .9 lda hCmdLine Discard Expanded Cmd Line
>SYSCALL SYS.FreeMemA
>LDYA L.CMDS
>STYA ZPPtr2
lda hExecArgs ldx #0
beq .11
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.NewPStrYA
bcs .9
.11 ldy #hInputArgs
sta (pData),y
bra .9
.2 cmp #$06 BIN File ? .1 lda (ZPPtr2)
beq Cmd.Exec.EXT Ending 0, must be an external Cmd....
cmp CMD
bne .4 bne .4
lda hFullCmd tay
ldy hExecArgs
bit ExecCmdMode
bmi .3 startproc
>SYSCALL SYS.ExecProcessNewEnvYA .2 lda CMD,y
bra .9 .3 cmp (ZPPtr2),y
bne .4
.3 >SYSCALL SYS.CreateProcessYA dey
bra.9 bne .2
.4 cmp #$ff SYS File ? jmp (J.INTCMDS,x) Found an internal Cmd...
bne .5
.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 * bra *
.5 lda #SYSMGR.ERRSYN .9 lda #SYSMGR.ERRSYN
sec sec
.9 rts .99 rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.CD lda hExecArgs * TXT : Launch "/PATH/SHELL /PATH/CMD ARGS"
bne EXEC.CMD.CD.C *--------------------------------------
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 ldy #S.PS.hPREFIX
lda (pPs),y lda (pPs),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.PSTROutYA >SYSCALL SYS.PSTROutYA
bcs .9
lda #13 lda #13
>SYSCALL SYS.COutA >SYSCALL SYS.COutA
clc .9 rts
rts
EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA Cmd.Exec.CD1 lda ARGS+1
>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
cmp #'/' Full Path? 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 bne .1
tya
sta (ZPPTR3) >LDYA L.ARGS
.11 lda (ZPPTR1),y bra Cmd.Exec.CD.Change
sta (ZPPTR3),y
dey .1 ldy #S.PS.hPREFIX no, init target prefix with actual
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
lda (pPs),y 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 >SYSCALL SYS.GetMemPtrA
>STYA ZPPTR1 >PUSHYA
>PUSHWI TmpBuffer256
>SYSCALL SYS.PStrCpy
lda hExecArgs lda ARGS+1
>SYSCALL SYS.FreeMemA cmp #'.' ".." ?
pla bne .3
sta hExecArgs
cmp ARGS+2 ".." ?
bne .9
sec ldy TmpBuffer256 remove last dir component in actual prefix
ror ExecCmdMode
.2 dey
jmp EXEC.CMD.EXT 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 .9 lda #SYSMGR.ERRSYN
sec 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 Cmd.Exec.STARTPROC
bne EXEC.CMD.SETVAR 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 ldy #S.PS.hENV
lda (pPs),y lda (pPs),y
@ -298,82 +293,79 @@ EXEC.CMD.SET lda hExecArgs
beq .8 Ending 0 ? beq .8 Ending 0 ?
>LDYA ZPPTR1 >LDYA ZPPTR1
>SYSCALL SYS.PSTROutYA >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 lda #13
>SYSCALL SYS.COutA >SYSCALL SYS.COutA
bcs .9
lda ZPPTR1 lda ZPPTR1
sec sec
adc (ZPPTR1) Add len+1 to PTR adc (ZPPTR1) Add len+1 to PTR
sta ZPPTR1 sta ZPPTR1
bcc .1 bcc .1
inc ZPPTR1 inc ZPPTR1+1
bra .1 bra .1
.8 clc .8 clc
rts .9 rts
EXEC.CMD.SETVAR >PUSHA Push Cmd Line Cmd.Exec.SETVAR tax
>PUSHBI $3D Push SEP='=' lda ARGS,x
>PUSHBI 0 Push Token IDX cmp #'=' ARGS ends with =, UnsetEnv
>SYSCALL SYS.PStrGetTkn beq .2
bcc .3
lda #SYSMGR.ERRSYN .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 rts
.3 sta hVarName .2 dec ARGS String is "VAR=", Remove endig '='
stx hVarValue >LDYA L.ARGS String is "VAR"...
txa >SYSCALL SYS.UnsetEnvYA
beq .31 rts
>PUSHB hVarValue .3 >LDYA L.ARGS String is VAR...
>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
>SYSCALL SYS.PSTROutYA >SYSCALL SYS.PSTROutYA
bcs .9
lda #'=' lda #'='
>SYSCALL SYS.COutA >SYSCALL SYS.COutA
lda hVarValue bcs .9
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.PSTROutYA >LDYA L.ARGS
lda #13 >SYSCALL SYS.GetEnvYA
bcs .8
>SYSCALL SYS.PSTROutYA Y,A = VALUE
.8 lda #13
>SYSCALL SYS.COutA >SYSCALL SYS.COutA
.9 rts
clc
.97 php
pha
lda hVarValue
beq .98
>SYSCALL SYS.FreeMemA
.98 lda hVarName
>SYSCALL SYS.FreeMemA
pla
php
rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime Cmd.Exec.DATE >SYSCALL SYS.MLIGetTime
bcs .9 bcs .9
>PUSHW DATELO >PUSHW DATELO
>LIBCALL hLIBSTR,LIBSTR.PRINTDATE >LIBCALL hLIBSTR,LIBSTR.PRINTDATE
@ -382,7 +374,7 @@ EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime Cmd.Exec.TIME >SYSCALL SYS.MLIGetTime
bcs .9 bcs .9
>PUSHW TIMELO >PUSHW TIMELO
>LIBCALL hLIBSTR,LIBSTR.PRINTTIME >LIBCALL hLIBSTR,LIBSTR.PRINTTIME
@ -391,28 +383,22 @@ EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.ECHO lda hExecArgs Cmd.Exec.ECHO lda ARGS
beq .98 beq .9
>SYSCALL SYS.ExpandPStrA >LDYA L.ARGS
bcs .99
pha
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.PSTROutYA >SYSCALL SYS.PSTROutYA
lda #13 lda #13
>SYSCALL SYS.COutA >SYSCALL SYS.COutA
pla
>SYSCALL SYS.FreeMemA
clc clc
rts rts
.98 lda #SYSMGR.ERRSYN .9 lda #SYSMGR.ERRSYN
sec sec
.99 rts rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.TYPE lda hExecArgs Cmd.Exec.TYPE lda ARGS
beq .98 beq .98
>SYSCALL SYS.GetMemPtrA >LDYA L.ARGS
>SYSCALL SYS.LoadFileYA >SYSCALL SYS.LoadFileYA
bcs .99 bcs .99
@ -444,17 +430,17 @@ EXEC.CMD.TYPE lda hExecArgs
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.READ Cmd.Exec.READ
clc clc
rts rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.PAUSE ldy #bPause Cmd.Exec.PAUSE ldy #bPause
lda #$80 lda #$80
sta (pData),y sta (pData),y
clc clc
rts rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.EXIT ldy #bEXIT Cmd.Exec.EXIT ldy #bEXIT
lda #$FF lda #$FF
sta (pData),y sta (pData),y
clc clc

View File

@ -5,7 +5,7 @@ INC 1
AUTO 6 AUTO 6
.LIST OFF .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 >PUSHBI S.MEM.F.INIT0
>SYSCALL SYS.GetMem >SYSCALL SYS.GetMem
bcs .9 bcs .9
@ -21,7 +21,7 @@ History.Init >PUSHWI 256 Get a buffer for History
sta (pData),y sta (pData),y
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
History.Add ldy #hCmdHistory HIS.Add ldy #hCmdHistory
lda (pData),y lda (pData),y
beq .9 beq .9
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
@ -88,7 +88,7 @@ History.Add ldy #hCmdHistory
bpl .4 bpl .4
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
History.GetPrev ldy #hCmdHistory HIS.GetPrev ldy #hCmdHistory
lda (pData),y lda (pData),y
beq HISTORY.RTS beq HISTORY.RTS
@ -121,10 +121,10 @@ History.GetPrev ldy #hCmdHistory
.2 txa .2 txa
ldy #CmdHistory.IDX set new index ldy #CmdHistory.IDX set new index
sta (pData),y sta (pData),y
bra History.SetBuf bra HIS.SetBuf
History.RTS rts History.RTS rts
*-------------------------------------- *--------------------------------------
History.GetNext ldy #hCmdHistory HIS.GetNext ldy #hCmdHistory
lda (pData),y lda (pData),y
beq HISTORY.RTS beq HISTORY.RTS
@ -153,10 +153,10 @@ History.GetNext ldy #hCmdHistory
ldy #CmdHistory.END ldy #CmdHistory.END
cmp (pData),y cmp (pData),y
bne History.SetBuf bne HIS.SetBuf
jmp CmdBuffer.CLR end of history, just blank buffer jmp CmdBuffer.CLR end of history, just blank buffer
*-------------------------------------- *--------------------------------------
History.SetBuf jsr CmdBuffer.CLR HIS.SetBuf jsr CmdBuffer.CLR
ldy #CmdHistory.IDX ldy #CmdHistory.IDX
lda (pData),y lda (pData),y
@ -175,7 +175,7 @@ History.SetBuf jsr CmdBuffer.CLR
jmp CmdBuffer.PRINT jmp CmdBuffer.PRINT
*-------------------------------------- *--------------------------------------
History.Quit ldy #hCmdHistory HIS.Quit ldy #hCmdHistory
lda (pData),y lda (pData),y
beq .9 beq .9
>SYSCALL SYS.FreeMemA >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.GREETINGS .DA MSG.GREETINGS
L.MSG.ERROR .DA MSG.ERROR L.MSG.ERROR .DA MSG.ERROR
L.ENV.PATH .DA ENV.PATH L.ENV.PATH .DA ENV.PATH
J.INTCMDS .DA EXEC.CMD.CD L.CMD .DA CMD
.DA EXEC.CMD.DATE L.ARGS .DA ARGS
.DA EXEC.CMD.ECHO L.CMDS .DA CMDS
.DA EXEC.CMD.EXIT J.INTCMDS .DA Cmd.Exec.CD
.DA EXEC.CMD.PAUSE .DA Cmd.Exec.DATE
.DA EXEC.CMD.READ .DA Cmd.Exec.ECHO
.DA EXEC.CMD.SET .DA Cmd.Exec.EXIT
.DA EXEC.CMD.STARTPROC .DA Cmd.Exec.PAUSE
.DA EXEC.CMD.TIME .DA Cmd.Exec.READ
.DA EXEC.CMD.TYPE .DA Cmd.Exec.SET
.DA Cmd.Exec.STARTPROC
.DA Cmd.Exec.TIME
.DA Cmd.Exec.TYPE
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT >LDYA L.LIBSTR CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.LoadLibYA >SYSCALL SYS.LoadLibYA
bcs .9 bcs .9
sta hLIBSTR sta hLIBSTR
>SYSCALL SYS.GetArgC
ldy #S.PS.hARGS Batch file ? cmp #1
lda (pPs),y
beq CS.INIT.INTERACTIVE no,continue starting interactive
jsr OpenTxtFileA beq CS.INIT.INTERACTIVE no arg, continue starting interactive
lda #1
>SYSCALL SYS.GetArgA
jsr TXT.OpenFileYA
bcs .9 bcs .9
ldy #bExitOnEOF ldy #bExitOnEOF
@ -73,7 +78,7 @@ CS.INIT >LDYA L.LIBSTR
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.INIT.INTERACTIVE CS.INIT.INTERACTIVE
jsr History.Init jsr HIS.Init
bcs .9 bcs .9
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
@ -92,7 +97,7 @@ CS.INIT.INTERACTIVE
CS.RUN lda #0 CS.RUN lda #0
sta (pData) sta (pData)
ldy #bPause .11 ldy #bPause
lda (pData),y lda (pData),y
bpl .10 bpl .10
clc clc
@ -113,41 +118,25 @@ CS.RUN lda #0
sta (pData) sta (pData)
bra .3 bra .3
.2 jsr ReadTxtFile .2 jsr TXT.ReadFile
bcs .81 bcs .81
.3 lda (pData) .3 jsr CmdBuffer.Normalize
beq CS.RUN Empty line lda (pData)
beq .11 Empty line
ldy #1 ldy #hInputFile if batch mode, do not add to cmd history
lda (pData),y lda (pData),y
cmp #'#' Comment bne .4
beq CS.RUN
ldy #hInputFile jsr HIS.Add
lda (pData),y
bne .32
jsr History.Add
.32 >LDYA pData .4 >LDYA pData
>SYSCALL SYS.NewPStrYA jsr Cmd.ExecYA
bcs .99 bcc .8
ldy #hCmdLine
sta (pData),y
jsr EXEC.CMD
bcc .4
tay tay
beq .4 beq .8
jsr PrintError jsr PrintError
.4 ldy #hCmdLine
lda (pData),y
>SYSCALL SYS.FreeMemA
ldy #hCmdLine
lda #0
sta (pData),y
.8 ldy #bEXIT .8 ldy #bEXIT
lda (pData),y lda (pData),y
@ -156,7 +145,7 @@ CS.RUN lda #0
clc clc
rts rts
.81 jsr CloseTxtFile .81 jsr TXT.CloseFile
ldy #bExitOnEOF ldy #bExitOnEOF
lda (pData),y lda (pData),y
beq .8 beq .8
@ -201,7 +190,7 @@ CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
cpx #3 test Ctrl-c cpx #3 test Ctrl-c
bne .12 bne .12
jsr CloseTxtFile jsr TXT.CloseFile
ldy #bExitOnEOF ldy #bExitOnEOF
lda (pData),y lda (pData),y
ldy #bExit ldy #bExit
@ -303,14 +292,14 @@ CS.EVENT.CTRL.CHAR
.2 cpx #10 LF (down arrow) .2 cpx #10 LF (down arrow)
bne .3 bne .3
jsr HISTORY.GETNEXT jsr HIS.GetNext
clc clc
rts rts
.3 cpx #11 VT (up arrow) .3 cpx #11 VT (up arrow)
bne .4 bne .4
jsr HISTORY.GETPREV jsr His.GetPrev
clc clc
rts rts
@ -323,7 +312,7 @@ CS.EVENT.CTRL.CHAR
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT jsr History.Quit CS.QUIT jsr HIS.Quit
ldy #hInputFile ldy #hInputFile
lda (pData),y lda (pData),y
@ -336,8 +325,10 @@ CS.QUIT jsr History.Quit
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.2 lda hLIBSTR .2 lda hLIBSTR
beq .8
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc
.8 clc
rts rts
*-------------------------------------- *--------------------------------------
* PRIVATE * PRIVATE
@ -356,6 +347,60 @@ PrintError pha
pla pla
rts 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 CmdBuffer.PRINT ldy #0
.1 iny .1 iny
lda (pData),y lda (pData),y
@ -377,99 +422,10 @@ CmdBuffer.DEL lda (pData)
dec dec
sta (pData) sta (pData)
.9 rts .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.CMD
.INB SBIN/SHELL.S.HIS .INB SBIN/SHELL.S.HIS
.INB SBIN/SHELL.S.TXT
*-------------------------------------- *--------------------------------------
CS.END CS.END
*-------------------------------------- *--------------------------------------
@ -489,20 +445,14 @@ CMDS >PSTRING "CD"
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
MSG.GREETINGS >PSTRING "\nA2osX-Shell on Dev=%h\n\n" MSG.GREETINGS >PSTRING "\nA2osX-Shell on Dev=%h\n\n"
MSG.ERROR >PSTRING "[%h]\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" EscChars >PSTRING "DBAC"
EscAscii .HS 04080A0B15 EscAscii .HS 04080A0B15
CMD .BS 256
ARGS .BS 256
hLIBSTR .BS 1 hLIBSTR .BS 1
hNEWPATH .BS 1 hNEWPATH .BS 1
hExecCmd .BS 1 hCmdLine .BS 1
hExecArgs .BS 1 Cmd.Exec.Mode .BS 1
hEnvPath .BS 1
hFullCmd .BS 1
hVarName .BS 1
hVarValue .BS 1
ExecCmdIdx .BS 1
ExecCmdMode .BS 1
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
@ -513,7 +463,6 @@ bPause .BS 1
bExit .BS 1 bExit .BS 1
bEcho .BS 1 bEcho .BS 1
bExitOnEOF .BS 1 bExitOnEOF .BS 1
hCmdLine .BS 1
hCmdHistory .BS 1 hCmdHistory .BS 1
CmdHistory.IDX .BS 1 CmdHistory.IDX .BS 1
CmdHistory.END .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 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
* S.LoadBinA * S.LoadBinYA
* in : * in :
* A = hMem of FilePath (PSTRING) * A = hMem of FilePath (PSTRING)
* out : * out :
* Y,A = MEMPTR * Y,A = MEMPTR
* X = hMem of Code Segment * X = hMem of Code Segment
*-------------------------------------- *--------------------------------------
S.LoadBinA sta S.LoadBinA.hFilename save file path S.LoadBinYA >STYA S.LoadBin.Filename
jsr S.PStrUprYA
jsr S.GetMemPtrA
>STYA ZPQuickPtr1 >LDYA S.LoadBin.Filename
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
jsr S.GetMemByNameYA jsr S.GetMemByNameYA
bcs .3 not already loaded bcs .3 not already loaded
@ -49,13 +34,13 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
clc clc
rts rts
.3 >LDYA ZPQuickPtr1 .3 >LDYA S.LoadBin.Filename
jsr S.LoadFileYA jsr S.LoadFileYA
bcc .4 bcc .4
rts Error Loading file rts Error Loading file
.4 >STYA S.LoadBinA.FileLen .4 >STYA S.LoadBin.FileLen
stx S.LoadBinA.hMem save hMem stx S.LoadBin.hMem save hMem
txa txa
jsr S.GetMemPtrA jsr S.GetMemPtrA
>STYA ZPQuickPtr1 save base address for relocation >STYA ZPQuickPtr1 save base address for relocation
@ -67,8 +52,7 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
sta R.AH sta R.AH
lda S.LoadBinA.hFilename >LDYA S.LoadBin.Filename
jsr S.GetMemPtrA
jsr S.MLIGetFileInfoYA Get File Info for AUXTYPE jsr S.MLIGetFileInfoYA Get File Info for AUXTYPE
bcs .98 bcs .98
@ -76,23 +60,23 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
ldy #2 get AUXTYPE ldy #2 get AUXTYPE
lda (ZPQuickPtr2),y lda (ZPQuickPtr2),y
sta R.BL Make BX=Range Start=AUXTYPE sta R.BL Make BX=Range Start=AUXTYPE
sta S.LoadBinA.AuxType sta S.LoadBin.AuxType
clc clc
adc S.LoadBinA.FileLen adc S.LoadBin.FileLen
sta R.CL Make CX=Range End=AUXTYPE+FILELEN sta R.CL Make CX=Range End=AUXTYPE+FILELEN
iny iny
lda (ZPQuickPtr2),y lda (ZPQuickPtr2),y
sta R.BH sta R.BH
sta S.LoadBinA.AuxType+1 sta S.LoadBin.AuxType+1
adc S.LoadBinA.FileLen+1 adc S.LoadBin.FileLen+1
sta R.CH sta R.CH
lda ZPQuickPtr1 Compute relocation offset in DX lda ZPQuickPtr1 Compute relocation offset in DX
sec sec
sbc S.LoadBinA.AuxType sbc S.LoadBin.AuxType
sta R.DL DX=Offset=ZPQuickPtr1-AUXTYPE sta R.DL DX=Offset=ZPQuickPtr1-AUXTYPE
lda ZPQuickPtr1+1 lda ZPQuickPtr1+1
sbc S.LoadBinA.AuxType+1 sbc S.LoadBin.AuxType+1
sta R.DH sta R.DH
>LDYA ZPQuickPtr1 >LDYA ZPQuickPtr1
@ -107,13 +91,12 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
bcs .98 relocation error, dicard Code segment bcs .98 relocation error, dicard Code segment
lda S.LoadBinA.hFilename get back bin path >LDYA S.LoadBin.Filename get back bin path
jsr S.GetMemPtrA jsr S.NewPStrYA make a copy of this string
jsr S.NewPStrYA
bcs .98 bcs .98
pha phx save copy
lda S.LoadBinA.hMem lda S.LoadBin.hMem
jsr S.GetMemByIDA jsr S.GetMemByIDA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
@ -125,24 +108,24 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
ldy #S.MEM.BIN ldy #S.MEM.BIN
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
lda S.LoadBinA.hMem lda S.LoadBin.hMem
tax return hMEM to Caller... tax return hMEM to Caller...
jsr S.GetMemPtrA jsr S.GetMemPtrA
clc ...and Y,A=PTR to CS clc ...and Y,A=PTR to CS
rts rts
.98 pha .98 pha
lda S.LoadBinA.hMem lda S.LoadBin.hMem
jsr S.FreeMemA Discard Loaded Code jsr S.FreeMemA Discard Loaded Code
pla pla
sec sec
rts rts
*-------------------------------------- *--------------------------------------
S.LoadBinA.hFilename .BS 1 S.LoadBin.Filename .BS 2
S.LoadBinA.hMem .BS 1 S.LoadBin.hMem .BS 1
S.LoadBinA.AuxType .BS 2 S.LoadBin.AuxType .BS 2
S.LoadBinA.FileLen .BS 2 S.LoadBin.FileLen .BS 2
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S.BIN SAVE SYS/KERNEL.S.BIN

View File

@ -5,44 +5,46 @@ INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
* S.LoadDrvA * S.LoadDrvYA
* in : * in :
* A = hMem To Full Cmd Line * Y,A = PTR To Full Cmd Line PStrArray
* out : * out :
* none * none
*-------------------------------------- *--------------------------------------
S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn S.LoadDrvYA >STYA S.LoadDrv.CmdArray
>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
>LDYAI ENV.DRV push ENVNAME=DRV >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 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 >STYA pDrv
stx S.LoadDrv.hMem stx S.LoadDrv.hMem
lda S.LoadDrv.Args >LDYA S.LoadDrv.CmdArray Advance to ARG[1]
jsr S.LoadDrvA.Jmp call Dev.Detect >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
bit RRAMWRAMBNK2 bit RRAMWRAMBNK2
@ -52,51 +54,35 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
bcs .95 bcs .97
jsr .95
ldy #S.DEV.F ldy #S.DEV.F
lda (pDev),y lda (pDev),y
ora #S.DEV.F.INUSE ora #S.DEV.F.INUSE
sta (pDev),y sta (pDev),y
jsr .97 Cleanup...
lda #0 Make sure RC = 0 if success
clc 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 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" ENV.DRV >PSTRING "DRV"
S.LoadDrv.CmdArray .BS 2
S.LoadDrv.hFullName .BS 1
S.LoadDrv.hMem .BS 1
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S.DRV SAVE SYS/KERNEL.S.DRV

View File

@ -5,20 +5,20 @@ INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
* S.ExpandPStrA * S.ExpandPStrYA
* In: * In:
* A = hMem of String to Expand (PSTRING) * Y,A = PTR to String to Expand (PSTRING)
* Out: * 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 S.ExpandPStrYA >STYA ZPQuickPtr3
stz TmpBuffer256 init Expanded String len=0 stz KrnBuffer256 init Expanded String len=0
ldy #0 ldy #0
.10 stz S.ExpandPStrA.Start .10 stz S.ExpandPStr.Start
.1 tya .1 tya
cmp (ZPQuickPtr3) End of PSTR? cmp (ZPQuickPtr3) End of PSTR?
@ -27,19 +27,19 @@ S.ExpandPStrYA >STYA ZPQuickPtr3
iny iny
lda (ZPQuickPtr3),y lda (ZPQuickPtr3),y
ldx S.ExpandPStrA.Start ldx S.ExpandPStr.Start
bne .3 already in a var? bne .3 already in a var?
cmp #'$' no, found one ? cmp #'$' no, found one ?
beq .2 beq .2
inc TmpBuffer256 no, copy char inc KrnBuffer256 no, copy char
ldx TmpBuffer256 ldx KrnBuffer256
sta TmpBuffer256,x sta KrnBuffer256,x
bra .1 bra .1
.2 sty S.ExpandPStrA.Start save var start .2 sty S.ExpandPStr.Start save var start
stz S.ExpandPStrA.End stz S.ExpandPStr.End
bra .1 skip this char bra .1 skip this char
.3 cmp #'{' in var, "{" after "$"? .3 cmp #'{' in var, "{" after "$"?
@ -48,78 +48,76 @@ S.ExpandPStrYA >STYA ZPQuickPtr3
cmp #'}' end of var? cmp #'}' end of var?
beq .5 beq .5
.4 jsr S.ExpandPStrA.VC valid char ? .4 jsr S.ExpandPStr.VC valid char ?
bcs .5 no, end here bcs .5 no, end here
sty S.ExpandPStrA.End yes, save end sty S.ExpandPStr.End yes, save end
bra .1 bra .1
.5 lda S.ExpandPStrA.End get end .5 lda S.ExpandPStr.End get end
beq .1 empty {} or $/ beq .1 empty {} or $/
phy save current index phy save current index
jsr S.ExpandPStrA.AV jsr S.ExpandPStr.AV
ply restore index in string... ply restore index in string...
bra .10 reset start flag and continue bra .10 reset start flag and continue
.6 sty S.ExpandPStrA.End end of PSTR .6 sty S.ExpandPStr.End end of PSTR
lda S.ExpandPStrA.Start are we in a var? lda S.ExpandPStr.Start are we in a var?
beq .7 no...exit... 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 jsr S.NewPStrYA
rts rts
*-------------------------------------- *--------------------------------------
S.ExpandPStrA.AV S.ExpandPStr.AV lda S.ExpandPStr.End
ldy #S.PS.hENV
lda (pPs),y
jsr S.GetMemPtrA
>STYA ZPQuickPtr1 Store ENV for FindVar
lda S.ExpandPStrA.End
sec 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 inx
sta TmpBuffer256,x sta KrnBuffer256,x
stx ZPQuickPtr2 stx ZPQuickPtr2
lda /TmpBuffer256 lda /KrnBuffer256
sta ZPQuickPtr2+1 sta ZPQuickPtr2+1
ldy S.ExpandPStrA.Start ldy S.ExpandPStr.Start
.1 iny .1 iny
inx inx
lda (ZPQuickPtr3),y lda (ZPQuickPtr3),y
sta TmpBuffer256,x sta KrnBuffer256,x
cpy S.ExpandPStrA.End cpy S.ExpandPStr.End
bne .1 bne .1
jsr S.FindVar jsr S.CheckSysVarPtr2
bcs .10
>STYA ZPQuickPtr1
bra .11
.10 jsr S.FindVarPtr2
bcs .9 bcs .9
ldy #0 jsr S.NextEnvPtr1 Skip NAME
.11 ldy #0
ldx KrnBuffer256
.2 iny .2 iny
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
cmp #'=' inx
bne .2 sta KrnBuffer256,x
.3 iny
lda (ZPQuickPtr1),y
inc TmpBuffer256
ldx TmpBuffer256
sta TmpBuffer256,x
tya tya
cmp (ZPQuickPtr1) last char? cmp (ZPQuickPtr1) last char?
bne .3 bne .2
stx KrnBuffer256
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
S.ExpandPStrA.VC S.ExpandPStr.VC cmp #'0'
cmp #'0'
bcc .9 bcc .9
cmp #'9'+1 cmp #'9'+1
bcc .8 bcc .8
@ -137,289 +135,297 @@ S.ExpandPStrA.VC
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
S.ExpandPStrA.Start .BS 1 S.ExpandPStr.Start .BS 1
S.ExpandPStrA.End .BS 1 S.ExpandPStr.End .BS 1
*-------------------------------------- *--------------------------------------
* S.DupEnvA * S.PutEnvYA
* In:
* A = ENV hMem To Duplicate
* Out:
* A = hMem to new ENV
*-------------------------------------- *--------------------------------------
S.DupEnvA jsr S.GetMemPtrA S.PutEnvYA >STYA ZPQuickPtr2 NAME=VALUE
>STYA ZPQuickPtr1 lda (ZPQuickPtr2)
>PUSHWI K.ENV.SIZE beq .9
>PUSHBI 0 sta KrnBuffer256
jsr S.GetMem tay
bcs .9
>STYA ZPQuickPtr2 .1 lda (ZPQuickPtr2),y
sta KrnBuffer256,y
dey
bne .1
ldy #0 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 .2 iny
inc ZPQuickPtr3 cpy KrnBuffer256 last char ?
bne .3 beq .9 no "=" found
inc ZPQuickPtr3+1
.3 lda (ZPQuickPtr1),y lda KrnBuffer256,y
sta (ZPQuickPtr3) cmp #'='
dex
bne .2 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 clc
.99 rts adc #KrnBuffer256
sta ZPQuickPtr3
lda /KrnBuffer256
sta ZPQuickPtr3+1
>LDYAI KrnBuffer256
>STYA ZPQuickPtr2
bra S.SetEnvPtr2Ptr3
.9 sec
rts
*-------------------------------------- *--------------------------------------
* S.SetEnvVarH * S.SetEnv
* In:
* PULLB = hMem To Name (PSTRING)
* PULLB = hMem To Value (PSTRING)
*--------------------------------------
* S.SetEnvVarP
* In: * In:
* PULLW = PTR To Name (PSTRING) * PULLW = PTR To Name (PSTRING)
* PULLW = PTR To Value (PSTRING) * PULLW = PTR To Value (PSTRING)
* Out: * Out:
*-------------------------------------- *--------------------------------------
S.SetEnvVarH >PULLA S.SetEnv >PULLW ZPQuickPtr2 NAME...
jsr S.GetMemPtrA >PULLW ZPQuickPtr3 ...VALUE
>STYA ZPQuickPtr2
>PULLA S.SetEnvPtr2Ptr3
jsr S.GetMemPtrA jsr S.UnsetEnvPtr2
bra S.SetEnvVar
S.SetEnvVarP >PULLW ZPQuickPtr2 jsr S.InitEnvPtr1 Y,A = ZPQuickPtr1 -> Env
>PULLYA
S.SetEnvVar >STYA ZPQuickPtr3 ZPQuickPtr3 = VALUE lda ZPQuickPtr1 Compute ENV UPPER LIMIT in Ptr4
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
clc clc
adc #K.ENV.SIZE adc #K.ENV.SIZE
sta ZPQuickPtr4 sta ZPQuickPtr4
lda ZPQuickPtr1+1 lda ZPQuickPtr1+1
adc /K.ENV.SIZE adc /K.ENV.SIZE
sta ZPQuickPtr4+1 sta ZPQuickPtr4+1
ldy ZPQuickPtr1+1 ldy ZPQuickPtr1+1
lda ZPQuickPtr1 Compute New Env Upper limit in A,Y lda ZPQuickPtr1 Compute New Env Upper limit in A,Y
sec sec
adc (ZPQuickPtr2) add NAME len +1(for len) adc (ZPQuickPtr2) add NAME len +1
bcc .4 bcc .1
iny iny
.4 sec
adc (ZPQuickPtr3) add VALUE len +1(for "=") .1 sec
bcc .5 adc (ZPQuickPtr3) add VALUE len +1
bcc .2
iny iny
.5 sec A,Y=new upper limit
sbc ZPQuickPtr4 greater than hMem Upper limit ? .2 cmp ZPQuickPtr4 GE than hMem Upper limit ?
bcc .51
tya tya
sbc ZPQuickPtr4+1 sbc ZPQuickPtr4+1
bcs .99 bcs .99
.51 lda (ZPQuickPtr2) make len = NAME+VALUE+1
sec .3 lda (ZPQuickPtr1) Scan until endig 0...
adc (ZPQuickPtr3) beq .4
inc ZPQuickPtr1
bne .3
inc ZPQuickPtr1+1
bne .3
.4 lda (ZPQuickPtr2)
sta (ZPQuickPtr1) 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 bne .6
inc ZPQuickPtr1+1
.6 ldy #0 jsr S.NextEnvPtr1
.7 iny
lda (ZPQuickPtr2),y .8 lda #0
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
sta (ZPQuickPtr1) sta (ZPQuickPtr1)
clc clc
rts rts
.99 lda #SYSMGR.ERRENVF .99 lda #SYSMGR.ERRENVF
sec sec
rts rts
*-------------------------------------- *--------------------------------------
* S.PutEnvYA * S.GetEnvYA
* In: * 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: * Out:
*-------------------------------------- *--------------------------------------
S.PutEnvYA clc S.UnsetEnvYA >STYA ZPQuickPtr2 Store VAR Name
rts S.UnsetEnvPtr2 jsr S.FindVarPtr2
*--------------------------------------
* 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
bcs .8 not found, quit bcs .8 not found, quit
lda (ZPQuickPtr1) Found, Discard current NAME definition jsr S.DiscardVarPtr1 Ptr1 -> ENVNAME
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
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
* PRIVATE * PRIVATE
*-------------------------------------- *--------------------------------------
* S.FindVar * S.CheckSysVarPtr2
* In: * In:
* ZPQuickPtr2 -> NAME * ZPQuickPtr2 -> NAME
*--------------------------------------
* Out: * Out:
* CC: Found * 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 * ZPQuickPtr2 -> NAME
* CS: Not Found * CS: Not Found
* ZPQuickPtr1 -> PTR to Ending 0 * ZPQuickPtr1 -> PTR to Ending 0
* ZPQuickPtr2 -> NAME * 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 lda (pPs),y
jsr S.GetMemPtrA jsr S.GetMemPtrA
>STYA ZPQuickPtr1 Store ENV >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 rts
.9 sec *--------------------------------------
rts S.NextEnvPtr1 lda ZPQuickPtr1
sec
adc (ZPQuickPtr1)
sta ZPQuickPtr1
bcc .8
inc ZPQuickPtr1+1
.8 rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S.ENV SAVE SYS/KERNEL.S.ENV

View File

@ -31,75 +31,107 @@ S.CheckPrefixYA >STYA MLICALL.PARAMS+1
*-------------------------------------- *--------------------------------------
* S.FileSearch * S.FileSearch
* in : * in :
* PULLB = hMem to Search Path (PSTRING) %LIB%;/SYS/SLIB * PULLW = PSTR to File Name (PSTRING)
* PULLB = hMem to File Name (PSTRING) * PULLW = PSTR to Search Path (PSTRING) %LIB%;/SYS/SLIB
* out : * out :
* A = hMem of FilePath (PSTRING) * Y,A = PSTR to FilePath (PSTRING)
* X = hMem to FilePath
*-------------------------------------- *--------------------------------------
S.FileSearch >PULLA Get Search path S.FileSearch >PULLW ZPQuickPtr4 ZPQuickPtr1 trashed by ExpandPStrYA
jsr S.ExpandPStrA Expand it >PULLYA Get Search list
bcc .10 jsr S.ExpandPStrYA Expand it
pha save error code bcs .99
>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)
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 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 jsr S.FreeMemA
lda S.FileSearch.hPath Discard Token path >LDYAI KrnBuffer256
jsr S.FreeMemA jmp S.NewPStrYA
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
.98 lda S.FileSearch.hSrch Discard Expanded hSrch list .98 lda S.FileSearch.hSrch Discard Expanded hSrch list
jsr S.FreeMemA jsr S.FreeMemA
lda #SYSMGR.ERRFNF lda #SYSMGR.ERRFNF
sec sec
rts .99 rts
.8 jsr .97 Dicard all except Full Path
lda S.FileSearch.hFull
clc
rts
*-------------------------------------- *--------------------------------------
S.FileSearch.File .BS 2
S.FileSearch.hSrch .BS 1 S.FileSearch.hSrch .BS 1
S.FileSearch.hFile .BS 1 S.FileSearch.Index .BS 1
S.FileSearch.Idx .BS 1 *--------------------------------------
S.FileSearch.hPath .BS 1 * S.GetFullPathYA
S.FileSearch.hFull .BS 1 * 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 * S.LoadFileYA
* in : * in :
@ -108,12 +140,9 @@ S.FileSearch.hFull .BS 1
* Y,A = File Length * Y,A = File Length
* X = hMem of Loaded File * X = hMem of Loaded File
*-------------------------------------- *--------------------------------------
S.LoadFileYA jsr S.ExpandPStrYA S.LoadFileYA jsr S.MLIOpenYA
sta S.LoadFile.hExp
jsr S.GetMemPtrA
jsr S.MLIOpenYA
bcc .10 bcc .10
jmp .99 rts
.10 sta S.LoadFile.hRef save ref_num .10 sta S.LoadFile.hRef save ref_num
stx S.LoadFile.hBuf save Prodos Buffer for freemem stx S.LoadFile.hBuf save Prodos Buffer for freemem
@ -132,25 +161,16 @@ S.LoadFileYA jsr S.ExpandPStrYA
jsr S.GetMem jsr S.GetMem
bcs .98 bcs .98
phy save Ptr >STYA S.LoadFile.Mem
pha
stx S.LoadFile.hMem save Segment hMem stx S.LoadFile.hMem save Segment hMem
>PUSHW S.LoadFile.Len Push Length for S.MLIRead >PUSHW S.LoadFile.Len Push Length for S.MLIRead
pla restore Dest PTR >PUSHW S.LoadFile.Mem Push PTR
ply
>PUSHYA and push for S.MLIRead
>PUSHB S.LoadFile.hRef Push ref_num >PUSHB S.LoadFile.hRef Push ref_num
jsr S.MLIRead jsr S.MLIRead
bcs .97 bcs .97
lda S.LoadFile.hRef jsr .98 Close File....
jsr S.MLICloseA
lda S.LoadFile.hBuf
jsr S.FreeMemA Discard ProDOS IO Buffer
lda S.LoadFile.hExp Discard Expanded String
jsr S.FreeMemA
>LDYA S.LoadFile.Len Return File Length... >LDYA S.LoadFile.Len Return File Length...
ldx S.LoadFile.hMem ...and hMem to Caller ldx S.LoadFile.hMem ...and hMem to Caller
@ -169,17 +189,13 @@ S.LoadFileYA jsr S.ExpandPStrYA
jsr S.FreeMemA ProDOS IO Buffer jsr S.FreeMemA ProDOS IO Buffer
pla pla
.99 pha .99 sec
lda S.LoadFile.hExp
jsr S.FreeMemA
pla
sec
rts rts
*-------------------------------------- *--------------------------------------
S.LoadFile.hRef .BS 1 S.LoadFile.hRef .BS 1
S.LoadFile.hBuf .BS 1 S.LoadFile.hBuf .BS 1
S.LoadFile.hExp .BS 1
S.LoadFile.hMem .BS 1 S.LoadFile.hMem .BS 1
S.LoadFile.Mem .BS 2
S.LoadFile.Len .BS 2 S.LoadFile.Len .BS 2
*-------------------------------------- *--------------------------------------
* S.ListDirInitYA * S.ListDirInitYA
@ -229,6 +245,8 @@ S.ListDirInitYA >STYA R.BX Store path
>LDYA R.BX >LDYA R.BX
jsr S.NewPStrYA jsr S.NewPStrYA
bcs .99 bcs .99
txa
ldy #S.LISTDIR.hPATH ldy #S.LISTDIR.hPATH
sta (R.CX),y sta (R.CX),y

View File

@ -32,9 +32,10 @@ A2osX.GP.Start jmp (KERNEL.SYSCALL,x)
jmp BrkHandler jmp BrkHandler
.BS $BE10-* .BS $BE10-*
*-------------------------------------- *--------------------------------------
jmp (pDev) pDevJmp
jmp (pCode) pCodeJmp jmp (pCode) pCodeJmp
jmp (pLib) pLibJmp jmp (pLib) pLibJmp
jmp (pDrv) pDrvJmp
jmp (pDev) pDevJmp
.BS $BE20-* .BS $BE20-*
*-------------------------------------- *--------------------------------------
GO.Reset jsr GO.AUXLC 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 >PUSHWI K.ENV.SIZE get a buffer for ENV
>PUSHBI S.MEM.F.INIT0 make sure blank >PUSHBI S.MEM.F.INIT0 make sure blank
>SYSCALL SYS.GetMem create it... >SYSCALL SYS.GetMem create it...
bcs * bcs .9
txa txa
ldy #S.PS.hENV ldy #S.PS.hENV
sta (pPs),y sta (pPs),y
>LDYAI TmpBuffer256 >LDYAI TmpBuffer256
>SYSCALL SYS.MLIGetPrefixYA >SYSCALL SYS.MLIGetPrefixYA
bcs * bcs .9
>LDYAI TmpBuffer256 >LDYAI TmpBuffer256
>SYSCALL SYS.NewPStrYA >SYSCALL SYS.NewPStrYA
bcs * bcs .9
txa
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
sta (pPs),y sta (pPs),y
>PUSHWI TmpBuffer256 push ENV value >PUSHWI TmpBuffer256 push ENV value
>PUSHWI I.ENV.A2osX push ENV name >PUSHWI I.ENV.A2osX push ENV name
>SYSCALL SYS.SetEnvVarP >SYSCALL SYS.SetEnv
bcs .9 bcs .9
>PUSHWI I.ENV.PATH.VAL >LDYAI I.ENV.PATH
>PUSHWI I.ENV.PATH >SYSCALL SYS.PutEnvYA
>SYSCALL SYS.SetEnvVarP
bcs .9 bcs .9
>PUSHWI I.ENV.LIB.VAL >LDYAI I.ENV.LIB
>PUSHWI I.ENV.LIB >SYSCALL SYS.PutEnvYA
>SYSCALL SYS.SetEnvVarP
bcs .9 bcs .9
>PUSHWI I.ENV.DRV.VAL >LDYAI I.ENV.DRV
>PUSHWI I.ENV.DRV >SYSCALL SYS.PutEnvYA
>SYSCALL SYS.SetEnvVarP
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
I.ENV.A2osX >PSTRING "A2OSX" I.ENV.A2osX >PSTRING "A2OSX"
I.ENV.PATH >PSTRING "PATH" I.ENV.PATH >PSTRING "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
I.ENV.PATH.VAL >PSTRING "${A2OSX}SBIN/;${A2OSX}BIN/" I.ENV.LIB >PSTRING "LIB=${A2OSX}LIB/"
I.ENV.LIB >PSTRING "LIB" I.ENV.DRV >PSTRING "DRV=${A2OSX}DRV/"
I.ENV.LIB.VAL >PSTRING "${A2OSX}LIB/"
I.ENV.DRV >PSTRING "DRV"
I.ENV.DRV.VAL >PSTRING "${A2OSX}DRV/"
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S.INIT SAVE SYS/KERNEL.S.INIT

View File

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

View File

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

View File

@ -8,10 +8,10 @@ AUTO 6
* !!!!!!!! DO NOT USE VCPU16 !!!!!!!! * !!!!!!!! DO NOT USE VCPU16 !!!!!!!!
* !!!!!! DO NOT USE ZPQuickPTRs !!!!! * !!!!!! DO NOT USE ZPQuickPTRs !!!!!
*-------------------------------------- *--------------------------------------
ZPMemMgrSPtr .EQ ZPMemMgr Pointer To Slot selected ZPMemMgrSPtr .EQ ZPMEMMGR Pointer To Slot selected
ZPMemMgrTmp1 .EQ ZPMemMgr+2 ZPMemMgrTmp1 .EQ ZPMEMMGR+2
ZPMemMgrTmp2 .EQ ZPMemMgr+4 ZPMemMgrTmp2 .EQ ZPMEMMGR+4
ZPMemMgrTmp3 .EQ ZPMemMgr+6 ZPMemMgrTmp3 .EQ ZPMEMMGR+6
*-------------------------------------- *--------------------------------------
* TODO : * TODO :
* - Create a 256 bytes table * - 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 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
* S.BinRelocateYA : * S.InsDrv
* 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
*--------------------------------------
* pDrv = .DRV File Loaded Address * pDrv = .DRV File Loaded Address
*-------------------------------------- *--------------------------------------
S.InsDrv ldy #H.BIN.DRV.CODE.LEN 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 ldy #H.BIN.DRV.CODE.O
lda (pDrv),y lda (pDrv),y
clc clc
adc S.LoadBinA.AuxType adc S.LoadBin.AuxType
sta R.BL sta R.BL
iny iny
lda (pDrv),y lda (pDrv),y
adc S.LoadBinA.AuxType+1 adc S.LoadBin.AuxType+1
sta R.BH set BX=End Of Code sta R.BH set BX=End Of Code
lda S.LoadBinA.AuxType lda S.LoadBin.AuxType
clc clc
adc S.LoadBinA.FileLen adc S.LoadBin.FileLen
sta R.CL sta R.CL
lda S.LoadBinA.AuxType+1 lda S.LoadBin.AuxType+1
adc S.LoadBinA.FileLen+1 adc S.LoadBin.FileLen+1
sta R.CH set CX=End Of Range sta R.CH set CX=End Of Range
ldy #H.BIN.DRV.CODE.O ldy #H.BIN.DRV.CODE.O
lda S.LoadBinA.FileLen lda S.LoadBin.FileLen
sec sec
sbc (pDrv),y sbc (pDrv),y
sta S.InsDrv.DRVLen sta S.InsDrv.DRVLen
iny iny
lda S.LoadBinA.FileLen+1 lda S.LoadBin.FileLen+1
sbc (pDrv),y sbc (pDrv),y
sta S.InsDrv.DRVLen+1 Compute DRV Len 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.DrvLen .BS 2
S.InsDrv.DrvEnd .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 * 65C02 OPCODES
* Bit 7 : 1 absolute addressing * Bit 7 : 1 absolute addressing
* Bit 1-0 : opcode + @ length * Bit 1-0 : opcode + @ length

View File

@ -7,9 +7,10 @@ AUTO 6
*-------------------------------------- *--------------------------------------
* S.NewPStrYA * S.NewPStrYA
* IN: * IN:
* PULLW = PTR to buffer * Y,A = PTR to buffer
* OUT: * OUT:
* A = hMem to S (PSTRING) * Y,A = PTR to String
* X = hMem (PSTRING)
*-------------------------------------- *--------------------------------------
S.NewPStrYA >STYA ZPQuickPtr1 S.NewPStrYA >STYA ZPQuickPtr1
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
@ -17,73 +18,103 @@ S.NewPStrYA >STYA ZPQuickPtr1
tay tay
lda #0 Y,A = len of new string lda #0 Y,A = len of new string
>PUSHYA >PUSHYA
>PUSHA 0 = no option >PUSHBI 0 0 = no option
jsr S.GetMem jsr S.GetMem
bcs .9 bcs .9
phx
>STYA ZPQuickPtr2 >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) lda (ZPQuickPtr1)
sta (ZPQuickPtr2) sta (ZPQuickPtr2)
tay tay
beq .2 beq .2
.1 lda (ZPQuickPtr1),y .1 lda (ZPQuickPtr1),y
sta (ZPQuickPtr2),y sta (ZPQuickPtr2),y
dey dey
bne .1 bne .1
.2 pla
clc .2 clc
rts
.9 sec
rts rts
*-------------------------------------- *--------------------------------------
* S.PStrCat * S.PStrCat
* IN: * IN:
* PULLB = hMem to S1 (PSTRING) * PULLW = PSTR to DST (PSTRING)
* PULLB = hMem to S2 (PSTRING) * PULLW = PSTR to SRC (PSTRING)
* OUT: * OUT:
* A = hMem to S1+S2 (PSTRING) * DST = DST+SRC (PSTRING)
*-------------------------------------- *--------------------------------------
S.PStrCat >PULLA S.PStrCat >PULLW ZPQuickPtr2 save DST
jsr S.GetMemPtrA >PULLW ZPQuickPtr1 save SRC
>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
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
tax tax
ldy #0
.2 iny lda (ZPQuickPtr2)
lda (ZPQuickPtr1),y tay
sta (ZPQuickPtr3),y
dex .1 cpy #255
beq .8
iny
inc ZPQuickPtr1
bne .2 bne .2
lda (ZPQuickPtr2) inc ZPQuickPtr1+1
tax
.3 inc ZPQuickPtr2 .2 lda (ZPQuickPtr1)
bne .4 sta (ZPQuickPtr2),y
inc ZPQuickPtr2+1
.4 iny
lda (ZPQuickPtr2)
sta (ZPQuickPtr3),y
dex dex
bne .3 bne .1
tya
sta (ZPQuickPtr3) .8 tya
pla returns A = new hMem sta (ZPQuickPtr2)
clc clc
rts 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 rts
*-------------------------------------- *--------------------------------------
* S.PStrMatch * S.PStrMatch
@ -160,158 +191,81 @@ S.PStrMatch >PULLW ZPQuickPtr2 pull String
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
* S.PStrGetTkn * S.PStr2StrArrayYA
* IN: * In :
* PULLB = Token IDX * Y,A = PTR to String
* 0: "Split mode": first token + remaining * Out :
* !0: "Std Mode": Return token # * Y,A = PTR to StrArray
* PULLB = SEP char * X = hMem
* PULLB = hMem to PSTRING
* OUT:
* A = hMem to Token (PSTRING)
* X = hMem to Remaining String After Token "Split Mode"
*-------------------------------------- *--------------------------------------
S.PStrGetTkn >PULLA Get IDX S.PStr2StrArrayYA
sta S.PStrGetTkn.IDX
>PULLA Get SEP
sta S.PStrGetTkn.SEP
>PULLA Get PStr
jsr S.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
lda (ZPQuickPtr1) Get mem size STRLEN+1
ldx #0
inc
bne .1
inx
S.PStrGetTkn1 ldx #0 init token count to 0 .1 >PUSHAX
ldy #0 >PUSHBI 0
stz S.PStrGetTkn.START init INTOKEN start to 0 jsr S.GetMem
.1 iny bcs .9
lda (ZPQuickPtr1),y phx save hMem
and #$7F phy save PTR.LO
cmp S.PStrGetTkn.SEP char=SEP ? pha save PTR.HI
bne .3 no, start a new token if not alredy in >STYA ZPQuickPtr2
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
.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) 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 sec
sbcS.PStrGetTkn.END adc ZPQuickPtr2 advance to next token
inc sta ZPQuickPtr2
sta (ZPQuickPtr2) bcc .5
ldy S.PStrGetTkn.END
dey
.12 iny
inc ZPQuickPtr2
bne .13
inc ZPQuickPtr2+1 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 .5 ldy #0 reset index in dst token
pla get back token hMem bra .7
clc
rts
.98 pla get back Token hMem .6 iny add char to token
jsr S.FreeMemA discard Token sta (ZPQuickPtr2),y
.99 sec
rts .7 dex end of src string?
*-------------------------------------- bne .3 no...next char...
S.PStrGetTkn.SEP .BS 1
S.PStrGetTkn.IDX .BS 1 tya yes, are we in a token ?
S.PStrGetTkn.START .BS 1 beq .8
S.PStrGetTkn.END .BS 1
*-------------------------------------- sta (ZPQuickPtr2) yes, set last token len
S.GetArgCount 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 clc
rts .9 rts
*--------------------------------------
S.GetArgA
clc
rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S.STR SAVE SYS/KERNEL.S.STR

View File

@ -149,401 +149,6 @@ S.DispatchEvents
S.TskMgrQuit clc S.TskMgrQuit clc
rts 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.SIZE .BS 1
TSKMGR.COUNT .BS 1 TSKMGR.COUNT .BS 1
TSKMGR.EVENTCNT .BS 1 TSKMGR.EVENTCNT .BS 1

View File

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