mirror of https://github.com/A2osX/A2osX.git
Kernel version 0.8 (Initial Commit)
This commit is contained in:
parent
44dd59a5ab
commit
3cf6dd05a6
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
148
A2osX.S.GP.txt
148
A2osX.S.GP.txt
|
@ -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
|
153
A2osX.S.KM.txt
153
A2osX.S.KM.txt
|
@ -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
|
|
@ -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
|
|
@ -4,6 +4,8 @@ NEW
|
|||
INC 1
|
||||
AUTO 6
|
||||
ECHO *** A2osX Startup file ***
|
||||
echo Working Directory:
|
||||
CD
|
||||
echo Env:
|
||||
SET
|
||||
# Main Screen
|
||||
|
@ -14,12 +16,12 @@ STARTPROC GETTY CON ${A2OSX}SBIN/LOGIN
|
|||
#STARTPROC GETTY COM2 LOGIN
|
||||
#INSDRV PIC.DRV
|
||||
# Network Section
|
||||
#INSDRV UTHERNET.DRV 000E3A123456
|
||||
INSDRV UTHERNET.DRV 000E3A123456
|
||||
#INSDRV UTHERNET2.DRV 0008DC123456
|
||||
#INSDRV UTHER2.AI.DRV 0008DC123456
|
||||
#INSDRV LANCEGS.DRV
|
||||
#STARTPROC TCPIP
|
||||
#STARTPROC DHCPCLNT
|
||||
STARTPROC TCPIP
|
||||
STARTPROC DHCPCLNT
|
||||
#STARTPROC HTTPD
|
||||
#TELNETD
|
||||
#MOUNT TFTP 192.168.1.5:/A2OSX /MNT/A2OSX
|
||||
|
|
|
@ -214,7 +214,7 @@ DIR.IN jsr SRC.GetArg
|
|||
>LDYA L.SRC.BUFFER
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
|
||||
pha
|
||||
phx
|
||||
|
||||
jsr FIO.OpenFileA
|
||||
plx
|
||||
|
|
|
@ -162,6 +162,8 @@ CS.INIT >LDYA L.LIBSTR
|
|||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
|
||||
txa
|
||||
ldy #SRC.hFILENAME
|
||||
sta (pData),y
|
||||
|
||||
|
|
|
@ -50,8 +50,6 @@ CS.INIT ldy #S.PS.hARGS
|
|||
>SYSCALL SYS.PStrGetTkn
|
||||
bcs .99
|
||||
|
||||
>DEBUG
|
||||
|
||||
ldy #hArg1
|
||||
sta (pData),y
|
||||
txa
|
||||
|
|
|
@ -552,6 +552,8 @@ Prompt.Save cmp #3
|
|||
>SYSCALL SYS.FreeMemA
|
||||
.11 >LDYA pData
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
|
||||
txa
|
||||
ldy #hFileName
|
||||
sta (pData),y
|
||||
|
||||
|
|
|
@ -97,6 +97,7 @@ J.CTRL .DA Ctrl.Invalid
|
|||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT stz hFile
|
||||
stz TmpFilename
|
||||
stz TmpLen
|
||||
stz TmpLen+1
|
||||
|
||||
|
@ -104,50 +105,32 @@ CS.INIT stz hFile
|
|||
ldy #bSaved
|
||||
sta (pData),y
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
beq .3
|
||||
>SYSCALL SYS.GetArgC
|
||||
cmp #1
|
||||
beq .1
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR1
|
||||
lda #1
|
||||
>SYSCALL SYS.GetArgA
|
||||
|
||||
lda (ZPPTR1)
|
||||
cmp #'/'
|
||||
bne .1
|
||||
>SYSCALL SYS.GetFullPathYA
|
||||
stx TmpFilename
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bra .2
|
||||
|
||||
.1 ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>SYSCALL SYS.PStrCat
|
||||
|
||||
.2 ldy #hFileName
|
||||
sta (pData),y
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.LoadFileYA
|
||||
bcs .3
|
||||
bcs .1
|
||||
|
||||
stx hFile
|
||||
>STYA TmpLen
|
||||
|
||||
.3 >LDYA TmpLen
|
||||
.1 >LDYA TmpLen
|
||||
iny
|
||||
bne .4
|
||||
bne .2
|
||||
inc
|
||||
|
||||
.4 >PUSHYA
|
||||
.2 >PUSHYA
|
||||
>PUSHBI S.MEM.F.INIT0
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .98
|
||||
|
||||
>STYA ZPPTR2
|
||||
txa
|
||||
ldy #hBuffer
|
||||
|
@ -174,7 +157,8 @@ CS.INIT stz hFile
|
|||
inc ZPPTR2+1
|
||||
bra .5
|
||||
|
||||
.6 jsr .98
|
||||
.6 lda hFile
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
.7 ldy #FileLen
|
||||
lda TmpLen
|
||||
|
@ -183,6 +167,10 @@ CS.INIT stz hFile
|
|||
lda TmpLen+1
|
||||
sta (pData),y
|
||||
|
||||
lda TmpFilename
|
||||
ldy #hFileName
|
||||
sta (pData),y
|
||||
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPs)
|
||||
|
@ -505,6 +493,7 @@ MSG.HELP >PSTRING "All commands: (* = Not yet implemented)"
|
|||
EscChars >PSTRING "DBAC"
|
||||
EscAscii .HS 04080A0B15
|
||||
hFile .BS 1
|
||||
TmpFilename .BS 1
|
||||
TmpByte .BS 1
|
||||
TmpLen .BS 2
|
||||
TmpCount .BS 2
|
||||
|
|
72
BIN/LS.S.txt
72
BIN/LS.S.txt
|
@ -49,61 +49,47 @@ CS.INIT >LDYA L.LIBSTR
|
|||
>SYSCALL SYS.LoadLibYA
|
||||
sta hLIBSTR
|
||||
|
||||
lda #0
|
||||
ldy #DS.END-DS.START-1
|
||||
.11 sta (pData),y
|
||||
dey
|
||||
bpl .11
|
||||
stz TmpBuffer256
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
beq .1 no arg, go get current prefix
|
||||
>SYSCALL SYS.GetArgC
|
||||
cmp #1
|
||||
bne .1
|
||||
|
||||
jsr CS.INIT.GETPFX no arg, go get current prefix
|
||||
bra .3
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
.1 lda #1
|
||||
>SYSCALL SYS.GetArgA
|
||||
>STYA ZPPtr1
|
||||
lda (ZPPtr1)
|
||||
beq .1
|
||||
|
||||
ldy #1
|
||||
lda (ZPPtr1),y
|
||||
cmp #'/' full path starting with '/'?
|
||||
bne .10 no, append to current prefix
|
||||
beq .2 yes, do not append to current prefix
|
||||
|
||||
ldy #S.PS.hARGS yes, get back arg...
|
||||
lda (pPs),y
|
||||
bra .3
|
||||
jsr CS.INIT.GETPFX
|
||||
|
||||
.10 ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
.2 >PUSHW ZPPtr1
|
||||
>PUSHWI TmpBuffer256
|
||||
>SYSCALL SYS.PStrCat
|
||||
ldy #hDIRPATH
|
||||
sta (pData),y
|
||||
bra .3
|
||||
|
||||
.1 ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
|
||||
.3 >SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPtr1
|
||||
>SYSCALL SYS.CheckPrefixYA is it a existing directory?
|
||||
bcs .4 no, let ListDirInitYA extract pattern
|
||||
|
||||
lda (ZPPtr1)
|
||||
.3 >LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.CheckPrefixYA is it a existing directory?
|
||||
bcs .5 no, let ListDirInitYA extract pattern
|
||||
|
||||
lda TmpBuffer256
|
||||
tay
|
||||
lda #'/'
|
||||
cmp (ZPPtr1),y
|
||||
beq .31
|
||||
cmp TmpBuffer256,y
|
||||
beq .4
|
||||
iny
|
||||
sta (ZPPtr1),y
|
||||
sta TmpBuffer256,y
|
||||
|
||||
.31 iny
|
||||
.4 iny
|
||||
lda #'*'
|
||||
sta (ZPPtr1),y
|
||||
sta TmpBuffer256,y
|
||||
|
||||
.4 >LDYA ZPPtr1
|
||||
.5 >LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.ListDirInitYA
|
||||
bcs .9
|
||||
ldy #hS.LISTDIR
|
||||
|
@ -118,6 +104,14 @@ CS.INIT >LDYA L.LIBSTR
|
|||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.INIT.GETPFX ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>PUSHWI TmpBuffer256
|
||||
>SYSCALL SYS.PStrCpy
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN ldy #bCANCEL
|
||||
lda (pData),y
|
||||
beq .1
|
||||
|
|
|
@ -44,9 +44,10 @@ L.MSG2 .DA MSG2
|
|||
L.MSG3 .DA MSG3
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
CS.INIT >SYSCALL SYS.GetArgC
|
||||
cmp #1
|
||||
bne .1
|
||||
|
||||
lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
rts
|
||||
|
@ -93,9 +94,8 @@ CS.INIT ldy #S.PS.hARGS
|
|||
CS.RUN jsr Init.Timeout
|
||||
|
||||
.1 >PUSHW pData DST.IP
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
lda #1
|
||||
>SYSCALL SYS.GetArgA
|
||||
>PUSHYA
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME
|
||||
bcc .2
|
||||
|
@ -103,9 +103,8 @@ CS.RUN jsr Init.Timeout
|
|||
jsr Wait.Timeout
|
||||
bcc .1
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
lda #1
|
||||
>SYSCALL SYS.GetArgA
|
||||
>PUSHYA
|
||||
>PUSHW L.MSG0
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
@ -113,9 +112,8 @@ CS.RUN jsr Init.Timeout
|
|||
sec
|
||||
rts
|
||||
|
||||
.2 ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
.2 lda #1
|
||||
>SYSCALL SYS.GetArgA
|
||||
>PUSHYA
|
||||
|
||||
ldy #3
|
||||
|
|
20
BIN/PS.S.txt
20
BIN/PS.S.txt
|
@ -37,7 +37,6 @@ CS.START cld
|
|||
L.LIBSTR .DA LIBSTR
|
||||
L.MSG0 .DA MSG0
|
||||
L.MSG1 .DA MSG1
|
||||
L.MSG2 .DA MSG2
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT >LDYA L.LIBSTR
|
||||
|
@ -56,17 +55,7 @@ CS.RUN >LDYAI TSKMGR.TABLE+S.PS.SIZE
|
|||
.1 lda (ZPPTR1)
|
||||
bpl .4
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (ZPPTR1),y
|
||||
beq .2
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
bra .3
|
||||
|
||||
.2 >PUSHW L.MSG2
|
||||
|
||||
.3 ldy #S.PS.hCMD
|
||||
ldy #S.PS.hCMDLINE
|
||||
lda (ZPPTR1),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
|
@ -80,7 +69,7 @@ CS.RUN >LDYAI TSKMGR.TABLE+S.PS.SIZE
|
|||
|
||||
ldy #S.PS.ID
|
||||
lda (ZPPTR1),y
|
||||
>PUSHA DevID
|
||||
>PUSHA PID
|
||||
>PUSHW L.MSG1
|
||||
>LIBCALL hLibStr,LIBSTR.PRINTF
|
||||
|
||||
|
@ -112,9 +101,8 @@ CS.END
|
|||
hLibStr .BS 1
|
||||
PS.COUNT .BS 1
|
||||
LIBSTR >PSTRING "libstr.o"
|
||||
MSG0 >CSTRING "ID Flags PID CMD ARGS\n"
|
||||
MSG1 >CSTRING "%03d %b %03d %30S %28S\n"
|
||||
MSG2 >PSTRING "(none)"
|
||||
MSG0 >CSTRING "ID Flags PID Command Line\n"
|
||||
MSG1 >CSTRING "%03d %b %03d %S\n"
|
||||
MAN
|
||||
SAVE BIN/PS.S
|
||||
ASM
|
||||
|
|
|
@ -124,7 +124,7 @@ L.MSG.DETECT.KO .DA MSG.DETECT.KO
|
|||
L.DEV.HEADER.NAME .DA DEV.HEADER.NAME
|
||||
.DA 0 End Of Reloc Table
|
||||
*--------------------------------------
|
||||
Dev.Detect sta hArgs
|
||||
Dev.Detect >STYA ARGS
|
||||
>LDYA L.MSG.DETECT
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
|
@ -154,8 +154,11 @@ Dev.Detect sta hArgs
|
|||
|
||||
.3 stx DEVSLOTx0
|
||||
|
||||
lda hARGS
|
||||
>LDYA ARGS
|
||||
>STYA ZPTmpPTR
|
||||
lda (ZPTmpPTR)
|
||||
bne .4
|
||||
|
||||
lda #$00
|
||||
sta MAC
|
||||
lda #$0E
|
||||
|
@ -171,9 +174,7 @@ Dev.Detect sta hArgs
|
|||
sta MAC+5
|
||||
bra .8
|
||||
|
||||
.4 >SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPTmpPTR
|
||||
jsr DecodeMac
|
||||
.4 jsr DecodeMac
|
||||
bcc .8
|
||||
lda #DEVMGR.ERRICL
|
||||
sec
|
||||
|
@ -194,7 +195,7 @@ CS.END
|
|||
MSG.DETECT >PSTRING "UtherNet/CS8900A Driver.\n"
|
||||
MSG.DETECT.OK >PSTRING "UtherNet/CS8900A Installed As Device : "
|
||||
MSG.DETECT.KO >PSTRING "Hardware Not Found.\n"
|
||||
hArgs .BS 1
|
||||
ARGS .BS 2
|
||||
*--------------------------------------
|
||||
* Device Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
|
|
|
@ -16,16 +16,18 @@ K.PS.MAX .EQ 64
|
|||
*--------------------------------------
|
||||
ZPKERNEL .EQ $0
|
||||
*--------------------------------------
|
||||
ZPMEMMGR .EQ $8
|
||||
*--------------------------------------
|
||||
pCode .EQ $10
|
||||
pData .EQ $12
|
||||
pStack .EQ $14
|
||||
|
||||
pLib .EQ $16
|
||||
pDev .EQ $18
|
||||
pDrv .EQ $18
|
||||
|
||||
pEvent .EQ $1A
|
||||
pPs .EQ $1C
|
||||
pDrv .EQ $1E
|
||||
pPs .EQ $1A
|
||||
pDev .EQ $1C
|
||||
pEvent .EQ $1E
|
||||
|
||||
ZPDRV .EQ $80
|
||||
ZPBIN .EQ $90
|
||||
|
@ -34,10 +36,6 @@ ZPLIB .EQ $A0 32 bytes for TCPIP
|
|||
* !!!!!!! RESERVED APPLESOFT.I !!!!!!!
|
||||
* $5E -> $C8
|
||||
*--------------------------------------
|
||||
* $B0 -> $FF KERNEL RESERVED
|
||||
*--------------------------------------
|
||||
ZPMemMgr .EQ $E0
|
||||
*--------------------------------------
|
||||
R.VCPU16 .EQ $F0
|
||||
R.AX .EQ R.VCPU16
|
||||
R.AL .EQ R.VCPU16
|
||||
|
@ -73,6 +71,8 @@ D.STACK.TOP .EQ $03F0 ...Down to $0300
|
|||
* Main/Aux $400 -> $7FF : Console Screen
|
||||
* Main/Aux $800 -> $BFF : System Screen
|
||||
*--------------------------------------
|
||||
KrnBuffer256 .EQ $0C00
|
||||
*--------------------------------------
|
||||
*** Z80 Reserved ***
|
||||
*--------------------------------------
|
||||
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
|
||||
|
@ -84,7 +84,7 @@ DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b
|
|||
*--------------------------------------
|
||||
TskMgr.Table .EQ $1400 K.PS.MAX*S.PS.SIZE=64*16=1k
|
||||
*--------------------------------------
|
||||
* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes)
|
||||
* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes)
|
||||
*--------------------------------------
|
||||
MemMgr.Table .EQ $1800
|
||||
MemMgr.HiMem .EQ $1800 Slot 0 is Reserved
|
||||
|
@ -105,9 +105,10 @@ A2osX.LIBCALL .EQ $BE03
|
|||
A2osX.MLICALL .EQ $BE06
|
||||
A2osX.ROMCALL .EQ $BE09
|
||||
*--------------------------------------
|
||||
pDevJmp .EQ $BE10
|
||||
pCodeJmp .EQ $BE13
|
||||
pLibJmp .EQ $BE16
|
||||
pCodeJmp .EQ $BE10
|
||||
pLibJmp .EQ $BE13
|
||||
pDrvJmp .EQ $BE16
|
||||
pDevJmp .EQ $BE19
|
||||
*--------------------------------------
|
||||
* $12 bytes min !!!!
|
||||
*--------------------------------------
|
||||
|
@ -159,28 +160,26 @@ SYS.GetStockObjectA .EQ $0C
|
|||
SYS.FreeStockObject .EQ $0E
|
||||
*--------------------------------------
|
||||
SYS.NewPStrYA .EQ $10
|
||||
|
||||
SYS.PStrCpy .EQ $12
|
||||
SYS.PStrCat .EQ $14
|
||||
SYS.PStrUprYA .EQ $16
|
||||
|
||||
SYS.PStrGetTkn .EQ $18
|
||||
|
||||
SYS.GetArgCount .EQ $1C
|
||||
SYS.GetArgA .EQ $1E
|
||||
SYS.PStr2StrArrayYA .EQ $1A
|
||||
*--------------------------------------
|
||||
|
||||
SYS.LoadDrvYA .EQ $20
|
||||
SYS.LoadLibYA .EQ $22
|
||||
SYS.UnloadLibA .EQ $24
|
||||
SYS.LoadDrvA .EQ $26
|
||||
*--------------------------------------
|
||||
SYS.ExpandPStrA .EQ $30
|
||||
SYS.ExpandPStrYA .EQ $32
|
||||
SYS.PutEnvYA .EQ $34
|
||||
SYS.GetEnvVarYA .EQ $36
|
||||
|
||||
SYS.SetEnvVarH .EQ $38
|
||||
SYS.SetEnvVarP .EQ $3A
|
||||
SYS.DelEnvVarA .EQ $3C
|
||||
SYS.DelEnvVarYA .EQ $3E
|
||||
SYS.ExpandPStrYA .EQ $32
|
||||
SYS.GetArgC .EQ $34
|
||||
SYS.GetArgA .EQ $36
|
||||
|
||||
SYS.PutEnvYA .EQ $38
|
||||
SYS.SetEnv .EQ $3A
|
||||
SYS.GetEnvYA .EQ $3C
|
||||
SYS.UnsetEnvYA .EQ $3E
|
||||
*--------------------------------------
|
||||
SYS.MLICreateFile .EQ $40
|
||||
|
||||
|
@ -238,7 +237,7 @@ SYS.Sleep .EQ $9C
|
|||
*--------------------------------------
|
||||
SYS.CheckPrefixYA .EQ $A0
|
||||
SYS.FileSearch .EQ $A2
|
||||
|
||||
SYS.GetFullPathYA .EQ $A4
|
||||
SYS.LoadFileYA .EQ $A6
|
||||
|
||||
SYS.ListDirInitYA .EQ $AA
|
||||
|
@ -439,8 +438,8 @@ S.PS.hCS .EQ 3
|
|||
S.PS.hDS .EQ 4
|
||||
S.PS.hPREFIX .EQ 5
|
||||
S.PS.hENV .EQ 6
|
||||
S.PS.hCMD .EQ 7
|
||||
S.PS.hARGS .EQ 8
|
||||
S.PS.hCMDLINE .EQ 7
|
||||
*S.PS.hARGS .EQ 8
|
||||
S.PS.hINDEV .EQ 9
|
||||
S.PS.hOUTDEV .EQ 10
|
||||
S.PS.hERRDEV .EQ 11
|
||||
|
|
|
@ -104,12 +104,6 @@ AUTO 6
|
|||
|
||||
jsr A2osX.MLICALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA DRVCALL
|
||||
ldy ]1
|
||||
ldx #]2
|
||||
jsr A2osX.DRVCALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LIBCALL
|
||||
ldy ]1
|
||||
|
@ -132,11 +126,9 @@ AUTO 6
|
|||
.MA PUSHYA
|
||||
dec pStack
|
||||
sta (pStack)
|
||||
pha
|
||||
tya
|
||||
dec pStack
|
||||
sta (pStack)
|
||||
pla
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLYA
|
||||
|
|
|
@ -11,9 +11,9 @@ AUTO 6
|
|||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
*--------------------------------------
|
||||
ZPTmpPtr1 .EQ ZPLIB+2
|
||||
ZPTmpPtr2 .EQ ZPLIB+4
|
||||
ZPTmpPtr3 .EQ ZPLIB+6
|
||||
ZPTmpPtr1 .EQ ZPLIB
|
||||
ZPTmpPtr2 .EQ ZPLIB+2
|
||||
ZPTmpPtr3 .EQ ZPLIB+4
|
||||
*--------------------------------------
|
||||
* File Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
|
|
|
@ -372,8 +372,6 @@ DNS.DecodeMsg sta hFrame1
|
|||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPFrameBase1
|
||||
|
||||
* >DEBUG
|
||||
|
||||
ldy #S.DNS.F+1
|
||||
lda (ZPFrameBase1),y
|
||||
and /S.DNS.F.QR
|
||||
|
|
|
@ -209,131 +209,7 @@ Destop.Paint lda #4
|
|||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
* Midpoint algorithm
|
||||
{
|
||||
dx=x2-x1;
|
||||
if (dx=0) => VLINE;
|
||||
if(dx<0)
|
||||
{
|
||||
swap(&x1,&x2);
|
||||
swap(&y1,&y2);
|
||||
dx=-dx;
|
||||
}
|
||||
|
||||
dy=y2-y1;
|
||||
if (dy=0) => HLINE;
|
||||
if (dy<0)
|
||||
{
|
||||
incY=-1;
|
||||
dy=-dy;
|
||||
}
|
||||
else
|
||||
{
|
||||
incY=1;
|
||||
}
|
||||
|
||||
if(dy>dx)
|
||||
{
|
||||
incE=2*dx;
|
||||
d=incE-dy;
|
||||
incNE=2*(dx-dy);
|
||||
|
||||
while(y1<y2)
|
||||
{
|
||||
if(d>0)
|
||||
{
|
||||
d=d+incNE;
|
||||
x1=x1+incY;
|
||||
}
|
||||
else
|
||||
d=d+incE;
|
||||
y1++;
|
||||
putpixel(x1,y1,COLOR);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
incE=2*dy;
|
||||
d=incE-dx;
|
||||
incNE=2*(dy-dx);
|
||||
|
||||
while(x1<x2)
|
||||
{
|
||||
if(d>0)
|
||||
{
|
||||
d=d+incNE;
|
||||
y1=y1+incY;
|
||||
}
|
||||
else
|
||||
d=d+incE;
|
||||
x1++;
|
||||
putpixel(x1,y1,COLOR);
|
||||
}
|
||||
}
|
||||
|
||||
*--------------------------------------
|
||||
DrawLine >STYA ZPBase
|
||||
ldy #9
|
||||
.1 lda (ZPBase),y
|
||||
sta ZPCtrlBlk,y
|
||||
dey
|
||||
bpl .1
|
||||
|
||||
lda ZPCtrlBlk+4 X2.LO
|
||||
sec
|
||||
sbc ZPCtrlBlk X1.LO
|
||||
sta DrawLine.DX
|
||||
lda ZPCtrlBlk+5 X2.HI
|
||||
sbc ZPCtrlBlk+1 X1.HI
|
||||
sta DrawLine.DX+1
|
||||
|
||||
ora DrawLine.DX DX=0?
|
||||
beq DrawLineV yes, call DRV.VLINE
|
||||
|
||||
bcs .2 is CS, X1<X2, no swap,no ABS
|
||||
|
||||
lda ZPCtrlBlk SWAP X1,X2
|
||||
ldx ZPCtrlBlk+4
|
||||
sta ZPCtrlBlk+4
|
||||
stx ZPCtrlBlk
|
||||
lda ZPCtrlBlk+1
|
||||
ldx ZPCtrlBlk+5
|
||||
sta ZPCtrlBlk+5
|
||||
stx ZPCtrlBlk+1
|
||||
|
||||
lda ZPCtrlBlk+2 SWAP Y1,Y2
|
||||
ldx ZPCtrlBlk+6
|
||||
sta ZPCtrlBlk+6
|
||||
stx ZPCtrlBlk+2
|
||||
lda ZPCtrlBlk+3
|
||||
ldx ZPCtrlBlk+7
|
||||
sta ZPCtrlBlk+7
|
||||
stx ZPCtrlBlk+3
|
||||
|
||||
lda #0 DX=-DX
|
||||
sec
|
||||
sbc DrawLine.DX
|
||||
sta DrawLine.DX
|
||||
lda #0
|
||||
sbc DrawLine.DX+1
|
||||
sta DrawLine.DX+1
|
||||
|
||||
.2 lda ZPCtrlBlk+6 Y2.LO
|
||||
sec
|
||||
sbc ZPCtrlBlk+2 Y1.LO
|
||||
sta DrawLine.DY
|
||||
lda ZPCtrlBlk+7 Y2.HI
|
||||
sbc ZPCtrlBlk+3 Y1.HI
|
||||
sta DrawLine.DY+1
|
||||
|
||||
ora DrawLine.DY DY=0?
|
||||
beq DrawLineH yes, call DRV.HLINE
|
||||
|
||||
bcs .3 is CS, Y1<Y2
|
||||
|
||||
|
||||
|
||||
.3
|
||||
*--------------------------------------
|
||||
GoDevGFX jmp (pDevGFX)
|
||||
GoDevMouse jmp (pDevMouse)
|
||||
|
|
|
@ -35,8 +35,8 @@ L.MSG.USAGE .DA MSG.USAGE
|
|||
L.MSG.GREETINGS .DA MSG.GREETINGS
|
||||
.DA 0 End Of Reloc Table
|
||||
*--------------------------------------
|
||||
CS.INIT ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
CS.INIT >SYSCALL SYS.GetArgC
|
||||
cmp #1
|
||||
bne .1
|
||||
|
||||
>LDYA L.MSG.USAGE
|
||||
|
@ -45,14 +45,8 @@ CS.INIT ldy #S.PS.hARGS
|
|||
sec
|
||||
rts
|
||||
|
||||
.1 >PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 1 Push 1 for getting INDEV
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
bcs .99
|
||||
|
||||
sta hDEVNAME
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
.1 lda #1
|
||||
>SYSCALL SYS.GetArgA
|
||||
>SYSCALL SYS.GetDevByNameYA
|
||||
bcs .98
|
||||
|
||||
|
@ -66,31 +60,24 @@ CS.INIT ldy #S.PS.hARGS
|
|||
ldy #S.PS.hERRDEV
|
||||
sta (pPs),y
|
||||
|
||||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
ldx #DEVMGR.OPEN
|
||||
jsr pDevJmp
|
||||
bcs .99
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 2 Push 2 for getting BIN
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
lda #2
|
||||
>SYSCALL SYS.GetArgA
|
||||
bcs .99
|
||||
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bcs .99
|
||||
|
||||
txa
|
||||
ldy #hBinName
|
||||
sta (pData),y
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
sec
|
||||
.98 sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN lda #13 try send a CR...
|
||||
|
@ -112,7 +99,7 @@ CS.RUN lda #13 try send a CR...
|
|||
|
||||
ldy #hBinName
|
||||
lda (pData),y
|
||||
ldy #0
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.ExecProcessNewEnvYA
|
||||
.9 rts
|
||||
|
||||
|
@ -135,7 +122,6 @@ CS.QUIT ldy #hBinName
|
|||
CS.END
|
||||
MSG.USAGE >PSTRING "GETTY <DEV> <PROGRAM>"
|
||||
MSG.GREETINGS >PSTRING "\e[12h\nA2osX-GeTTY on Dev=%S\n"
|
||||
hDEVNAME .BS 1
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
|
|
|
@ -34,23 +34,33 @@ CS.START cld
|
|||
.DA CS.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.MSG.HELP .DA MSG.HELP
|
||||
L.MSG.LOAD .DA MSG.LOAD
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
CS.INIT >SYSCALL SYS.GetArgC
|
||||
cmp #1
|
||||
bne .1
|
||||
|
||||
>LDYA L.MSG.HELP
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
bra .8
|
||||
|
||||
.1 >SYSCALL SYS.LoadDrvA
|
||||
|
||||
bcs .9
|
||||
|
||||
|
||||
.8 lda #0 tell TSKMGR that all done ok, but
|
||||
.9 sec we do not want to stay in memory
|
||||
lda #0 tell TSKMGR that all done ok, but
|
||||
sec we do not want to stay in memory
|
||||
rts
|
||||
|
||||
.1 lda #1 get PTR to ARG[1] (Driver name)
|
||||
>SYSCALL SYS.GetArgA
|
||||
>PUSHYA
|
||||
|
||||
>LDYA L.MSG.LOAD
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
lda #1 get PTR to ARG[1] (Driver name)
|
||||
>SYSCALL SYS.GetArgA
|
||||
|
||||
>SYSCALL SYS.LoadDrvYA YA = PTR to ARG[1...n]
|
||||
|
||||
sec we do not want to stay in memory
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN
|
||||
CS.DOEVENT
|
||||
|
@ -58,7 +68,9 @@ CS.QUIT clc
|
|||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
MSG.HELP >PSTRING "Usage: insdrv </path/drv/>file.drv <args>\n"
|
||||
MSG.HELP >PSTRING "Usage: insdrv file.drv <args>\n"
|
||||
MSG.LOAD >PSTRING "INSDRV:Loading %S...\n"
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SBIN/INSDRV.S
|
||||
ASM
|
||||
|
|
|
@ -38,14 +38,7 @@ L.MSG.PASSWORD .DA MSG.PASSWORD
|
|||
L.SHELL .DA SHELL
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT >LDYA L.SHELL
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bcs .9
|
||||
|
||||
ldy #hSHELL
|
||||
sta (pData),y
|
||||
|
||||
lda (pPs)
|
||||
CS.INIT lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPs)
|
||||
clc Tell TskMgr To stay in memory
|
||||
|
@ -89,9 +82,7 @@ CS.RUN lda #0
|
|||
>SYSCALL SYS.COutA
|
||||
bcs .9
|
||||
|
||||
ldy #hSHELL
|
||||
lda (pData),y
|
||||
ldy #0
|
||||
>LDYA L.SHELL
|
||||
>SYSCALL SYS.ExecProcessNewEnvYA
|
||||
|
||||
bcs .9
|
||||
|
@ -124,10 +115,7 @@ CS.DOEVENT ldy #S.EVT.hDEV
|
|||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT ldy #hSHELL
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
CS.QUIT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
|
@ -210,7 +198,7 @@ INPUT.LINEIN ldy #INPUT.Status
|
|||
CS.END
|
||||
MSG.LOGIN >PSTRING "login:"
|
||||
MSG.PASSWORD >PSTRING "password:"
|
||||
SHELL >PSTRING "SBIN/SHELL"
|
||||
SHELL >PSTRING "${A2OSX}SBIN/SHELL"
|
||||
.DUMMY
|
||||
.OR 0
|
||||
DS.START
|
||||
|
@ -219,7 +207,6 @@ INPUT.Status .BS 1
|
|||
INPUT.PassChar .BS 1
|
||||
hUSERNAME .BS 1
|
||||
hPASSWORD .BS 1
|
||||
hSHELL .BS 1
|
||||
DS.END
|
||||
.ED
|
||||
*--------------------------------------
|
||||
|
|
|
@ -5,289 +5,284 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
EXEC.CMD stz hFullCmd
|
||||
stz hEnvPath
|
||||
|
||||
ldy #hCmdLine
|
||||
lda (pData),y
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push 0 for getting CMD & ARGS
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
* Y,A -> Command line (formatted & not empty)
|
||||
*--------------------------------------
|
||||
Cmd.ExecYA stz Cmd.Exec.Mode
|
||||
Cmd.ExecYA.1 >SYSCALL SYS.ExpandPStrYA
|
||||
bcs .99
|
||||
stx hCmdLine
|
||||
|
||||
sta hExecCmd
|
||||
stx hExecArgs
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPtr1
|
||||
|
||||
ldx #0
|
||||
stz ExecCmdIdx
|
||||
stz ExecCmdMode
|
||||
|
||||
.1 lda CMDS,x
|
||||
beq .6
|
||||
cmp (ZPPtr1)
|
||||
bne .5
|
||||
ldy #1
|
||||
ldx #0 ARGS len
|
||||
|
||||
phx
|
||||
ldy #0
|
||||
|
||||
.2 iny
|
||||
inx
|
||||
lda (ZPPtr1),y
|
||||
cmp #'a'
|
||||
bcc .3
|
||||
.10 cmp #'a'
|
||||
bcc .11
|
||||
cmp #'z'+1
|
||||
bcs .3
|
||||
eor #$20 to Uppercase
|
||||
.3 cmp CMDS,x
|
||||
bne .4
|
||||
bcs .11
|
||||
eor #$20 to Uppercase
|
||||
|
||||
.11 sta CMD,y Store Cmd in Buffer
|
||||
sty CMD update CMD len
|
||||
|
||||
tya
|
||||
cmp (ZPPtr1)
|
||||
bne .2
|
||||
plx
|
||||
beq .13 end of string
|
||||
|
||||
ldx ExecCmdIdx
|
||||
jsr EXEC.CMD.INT
|
||||
jmp EXEC.CMD.ClnUp
|
||||
|
||||
.4 plx
|
||||
.5 txa
|
||||
sec
|
||||
adc CMDS,x
|
||||
tax
|
||||
inc ExecCmdIdx
|
||||
inc ExecCmdIdx
|
||||
bra .1
|
||||
|
||||
.6 jsr EXEC.CMD.EXT
|
||||
jmp EXEC.CMD.ClnUp
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.ClnUp pha
|
||||
php
|
||||
lda hFullCmd
|
||||
beq .1
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
.1 lda hEnvPath
|
||||
beq .2
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
.2 lda hExecArgs
|
||||
beq .3
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
.3 lda hExecCmd
|
||||
beq .8
|
||||
>SYSCALL SYS.FreeMemA
|
||||
.8 plp
|
||||
pla
|
||||
rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.INT jmp (J.INTCMDS,x)
|
||||
*--------------------------------------
|
||||
* ZPPtr1 = hExecCmd
|
||||
*--------------------------------------
|
||||
EXEC.CMD.EXT ldy #1
|
||||
iny
|
||||
lda (ZPPtr1),y
|
||||
cmp #'/'
|
||||
bne .1
|
||||
>LDYA ZPPtr1
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bra .10
|
||||
|
||||
.1 >LDYA L.ENV.PATH push ENVNAME=PATH
|
||||
>SYSCALL SYS.GetEnvVarYA get value for ENV=PATH
|
||||
cmp #' '
|
||||
bne .10
|
||||
|
||||
bcc .12
|
||||
jmp .9
|
||||
.12 tya
|
||||
cmp (ZPPtr1)
|
||||
beq .13 end of string
|
||||
|
||||
.12 sta hEnvPath
|
||||
>PUSHB hExecCmd
|
||||
>PUSHB hEnvPath
|
||||
>SYSCALL SYS.FileSearch
|
||||
bcc .10
|
||||
|
||||
>PUSHB hExecCmd
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>SYSCALL SYS.FileSearch
|
||||
|
||||
.10 bcs .9
|
||||
|
||||
sta hFullCmd
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.MLIGetFileInfoYA
|
||||
bcs .9
|
||||
|
||||
>STYA ZPPTR1
|
||||
ldy #1 Get File Type
|
||||
lda (ZPPTR1),y
|
||||
cmp #$04 TXT File ?
|
||||
bne .2
|
||||
iny
|
||||
lda (ZPPtr1),y
|
||||
inx
|
||||
sta ARGS,x
|
||||
bra .12
|
||||
|
||||
lda hFullCmd
|
||||
jsr OpenTxtFileA
|
||||
bcs .9
|
||||
.13 stx ARGS update ARGS len
|
||||
|
||||
lda hCmdLine Discard Expanded Cmd Line
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
>LDYA L.CMDS
|
||||
>STYA ZPPtr2
|
||||
|
||||
lda hExecArgs
|
||||
beq .11
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bcs .9
|
||||
.11 ldy #hInputArgs
|
||||
sta (pData),y
|
||||
bra .9
|
||||
ldx #0
|
||||
|
||||
.2 cmp #$06 BIN File ?
|
||||
.1 lda (ZPPtr2)
|
||||
beq Cmd.Exec.EXT Ending 0, must be an external Cmd....
|
||||
|
||||
cmp CMD
|
||||
bne .4
|
||||
|
||||
lda hFullCmd
|
||||
ldy hExecArgs
|
||||
|
||||
bit ExecCmdMode
|
||||
bmi .3 startproc
|
||||
tay
|
||||
|
||||
>SYSCALL SYS.ExecProcessNewEnvYA
|
||||
bra .9
|
||||
|
||||
.3 >SYSCALL SYS.CreateProcessYA
|
||||
bra.9
|
||||
.2 lda CMD,y
|
||||
.3 cmp (ZPPtr2),y
|
||||
bne .4
|
||||
dey
|
||||
bne .2
|
||||
|
||||
.4 cmp #$ff SYS File ?
|
||||
bne .5
|
||||
jmp (J.INTCMDS,x) Found an internal Cmd...
|
||||
|
||||
.4 inx
|
||||
inx
|
||||
|
||||
lda ZPPtr2
|
||||
sec
|
||||
adc (ZPPtr2)
|
||||
sta ZPPtr2
|
||||
bcc .1
|
||||
inc ZPPtr2+1
|
||||
bra .1
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
Cmd.Exec.EXT ldy #1
|
||||
lda CMD,y
|
||||
cmp #'/' Command line is already full path, no search
|
||||
beq .3
|
||||
|
||||
>LDYA L.ENV.PATH push ENVNAME=PATH for search
|
||||
>SYSCALL SYS.GetEnvYA get value for ENV=PATH
|
||||
bcs .1 No PATH, try in CD
|
||||
|
||||
>PUSHYA push search list
|
||||
>PUSHW L.CMD
|
||||
>SYSCALL SYS.FileSearch
|
||||
bcc .2
|
||||
|
||||
.1 ldy #S.PS.hPREFIX not found, try in CD
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA push search list
|
||||
>PUSHW L.CMD
|
||||
>SYSCALL SYS.FileSearch
|
||||
bcs .99
|
||||
|
||||
.2 phx save X=hMem, Y,A = Filename
|
||||
>PUSHYA
|
||||
>PUSHW L.CMD replace CMD in TmpBuffer with full path
|
||||
>SYSCALL SYS.PStrCpy
|
||||
pla
|
||||
>SYSCALL SYS.FreeMemA Discard this string...
|
||||
|
||||
.3 stz TmpBuffer256 reset TmpBuffer256 for final CMDLINE
|
||||
|
||||
>LDYA L.CMD
|
||||
>SYSCALL SYS.MLIGetFileInfoYA
|
||||
bcs .99
|
||||
|
||||
>STYA ZPPtr2
|
||||
ldy #1 Get File Type
|
||||
lda (ZPPtr2),y
|
||||
cmp #$04 TXT File ?
|
||||
beq Cmd.Exec.EXT.TXT
|
||||
cmp #$06 BIN File ?
|
||||
beq Cmd.Exec.EXT.BIN
|
||||
cmp #$ff SYS File ?
|
||||
bne .9
|
||||
|
||||
bra *
|
||||
|
||||
.5 lda #SYSMGR.ERRSYN
|
||||
.9 lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
.9 rts
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.CD lda hExecArgs
|
||||
bne EXEC.CMD.CD.C
|
||||
* TXT : Launch "/PATH/SHELL /PATH/CMD ARGS"
|
||||
*--------------------------------------
|
||||
Cmd.Exec.EXT.TXT
|
||||
lda #0 Get arg[0] = /PATH/SHELL
|
||||
>SYSCALL SYS.GetArgA
|
||||
>PUSHYA
|
||||
>PUSHWI TmpBuffer256
|
||||
>SYSCALL SYS.PStrCpy
|
||||
|
||||
inc TmpBuffer256 Add a space....
|
||||
ldy TmpBuffer256
|
||||
lda #' '
|
||||
sta TmpBuffer256,y
|
||||
*--------------------------------------
|
||||
* BIN : Launch "/PATH/CMD ARGS"
|
||||
*--------------------------------------
|
||||
Cmd.Exec.EXT.BIN
|
||||
>PUSHW L.CMD
|
||||
>PUSHWI TmpBuffer256
|
||||
>SYSCALL SYS.PStrCat
|
||||
|
||||
lda ARGS
|
||||
beq .1
|
||||
|
||||
inc TmpBuffer256 Add a space....
|
||||
ldy TmpBuffer256
|
||||
lda #' '
|
||||
sta TmpBuffer256,y
|
||||
|
||||
>PUSHW L.ARGS
|
||||
>PUSHWI TmpBuffer256
|
||||
>SYSCALL SYS.PStrCat
|
||||
|
||||
.1 >LDYAI TmpBuffer256
|
||||
bit Cmd.Exec.Mode
|
||||
bmi .2 startproc
|
||||
|
||||
>SYSCALL SYS.ExecProcessNewEnvYA
|
||||
rts
|
||||
|
||||
.2 >SYSCALL SYS.CreateProcessYA
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Internal Commands
|
||||
*--------------------------------------
|
||||
Cmd.Exec.CD lda ARGS
|
||||
bne Cmd.Exec.CD1
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
bcs .9
|
||||
lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
clc
|
||||
rts
|
||||
.9 rts
|
||||
|
||||
EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR2
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR1
|
||||
>PUSHWI MLI.MAXPATH+1 Get a buffer for new PATH
|
||||
>PUSHBI 0 no particular Option
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .99
|
||||
>STYA ZPPTR3
|
||||
stx hNEWPATH
|
||||
|
||||
lda #0
|
||||
sta (ZPPTR3)
|
||||
ldy #1
|
||||
lda (ZPPTR2),y
|
||||
Cmd.Exec.CD1 lda ARGS+1
|
||||
cmp #'/' Full Path?
|
||||
beq .3
|
||||
cmp #'.' ".." ?
|
||||
bne .2
|
||||
lda (ZPPTR2)
|
||||
cmp #2
|
||||
bne .97
|
||||
iny
|
||||
lda (ZPPTR2),y
|
||||
cmp #'.'
|
||||
bne .97
|
||||
lda (ZPPTR1)
|
||||
tay
|
||||
.1 dey
|
||||
beq .97
|
||||
lda (ZPPTR1),y
|
||||
cmp #'/'
|
||||
bne .1
|
||||
tya
|
||||
sta (ZPPTR3)
|
||||
.11 lda (ZPPTR1),y
|
||||
sta (ZPPTR3),y
|
||||
dey
|
||||
bne .11
|
||||
bra .4
|
||||
.97 lda #SYSMGR.ERRSYN
|
||||
.98 pha
|
||||
lda hNEWPATH
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
sec
|
||||
.99 rts
|
||||
|
||||
.2 >PUSHW ZPPTR1
|
||||
>PUSHW ZPPTR3
|
||||
>LIBCALL hLIBSTR,LIBSTR.STRCPYP
|
||||
.3 >PUSHW ZPPTR2
|
||||
>PUSHW ZPPTR3
|
||||
>LIBCALL hLIBSTR,LIBSTR.STRCATP
|
||||
lda (ZPPTR3)
|
||||
tay
|
||||
lda #'/' Ending with '/'?
|
||||
cmp (ZPPTR3),y
|
||||
beq .4
|
||||
iny
|
||||
sta (ZPPTR3),y
|
||||
tya
|
||||
sta (ZPPTR3)
|
||||
.4 >LDYA ZPPTR3
|
||||
>SYSCALL SYS.CheckPrefixYA
|
||||
bcs .98
|
||||
ldy #S.PS.hPREFIX
|
||||
|
||||
>LDYA L.ARGS
|
||||
bra Cmd.Exec.CD.Change
|
||||
|
||||
.1 ldy #S.PS.hPREFIX no, init target prefix with actual
|
||||
lda (pPs),y
|
||||
pha
|
||||
lda hNEWPATH
|
||||
sta (pPs),y
|
||||
pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.STARTPROC
|
||||
lda hExecCmd
|
||||
>SYSCALL SYS.FreeMemA
|
||||
stz hExecCmd
|
||||
|
||||
lda hExecArgs
|
||||
beq .9
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push 0 for getting CMD & ARGS
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
bcs .99
|
||||
phx
|
||||
sta hExecCmd
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR1
|
||||
>PUSHYA
|
||||
>PUSHWI TmpBuffer256
|
||||
>SYSCALL SYS.PStrCpy
|
||||
|
||||
lda hExecArgs
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
sta hExecArgs
|
||||
lda ARGS+1
|
||||
cmp #'.' ".." ?
|
||||
bne .3
|
||||
|
||||
cmp ARGS+2 ".." ?
|
||||
|
||||
bne .9
|
||||
|
||||
sec
|
||||
ror ExecCmdMode
|
||||
|
||||
jmp EXEC.CMD.EXT
|
||||
ldy TmpBuffer256 remove last dir component in actual prefix
|
||||
|
||||
.2 dey
|
||||
beq .9 nothing to remove, synerr
|
||||
|
||||
lda TmpBuffer256,y
|
||||
cmp #'/'
|
||||
bne .2
|
||||
|
||||
sty TmpBuffer256
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
bra Cmd.Exec.CD.Change
|
||||
|
||||
.9 lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
.99 rts
|
||||
rts
|
||||
|
||||
.3 >PUSHW L.ARGS Append ARG to buffer
|
||||
>PUSHWI TmpBuffer256
|
||||
>SYSCALL SYS.PStrCat
|
||||
|
||||
ldx TmpBuffer256
|
||||
lda #'/' Ending with '/'?
|
||||
cmp TmpBuffer256,x
|
||||
beq .4
|
||||
sta TmpBuffer256+1,x
|
||||
inc TmpBuffer256
|
||||
|
||||
.4 >LDYAI TmpBuffer256
|
||||
|
||||
Cmd.Exec.CD.Change
|
||||
>STYA ZPPtr1
|
||||
>SYSCALL SYS.CheckPrefixYA
|
||||
bcs .9
|
||||
|
||||
>LDYA ZPPtr1
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bcs .9
|
||||
|
||||
phx
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
pla
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
sta (pPs),y
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.SET lda hExecArgs
|
||||
bne EXEC.CMD.SETVAR
|
||||
Cmd.Exec.STARTPROC
|
||||
lda ARGS
|
||||
beq Cmd.Exec.ERRSYN
|
||||
sec
|
||||
ror Cmd.Exec.Mode
|
||||
|
||||
>LDYA L.ARGS
|
||||
jmp Cmd.ExecYA.1
|
||||
|
||||
Cmd.Exec.ERRSYN lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
Cmd.Exec.SET lda ARGS
|
||||
bne Cmd.Exec.SETVAR
|
||||
|
||||
ldy #S.PS.hENV
|
||||
lda (pPs),y
|
||||
|
@ -298,82 +293,79 @@ EXEC.CMD.SET lda hExecArgs
|
|||
beq .8 Ending 0 ?
|
||||
>LDYA ZPPTR1
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
bcs .9
|
||||
|
||||
lda ZPPTR1
|
||||
sec
|
||||
adc (ZPPTR1) Add len+1 to PTR
|
||||
sta ZPPTR1
|
||||
bcc .2
|
||||
inc ZPPTR1+1
|
||||
|
||||
.2 lda #'='
|
||||
>SYSCALL SYS.COutA
|
||||
bcs .9
|
||||
|
||||
>LDYA ZPPTR1
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
bcs .9
|
||||
|
||||
lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
bcs .9
|
||||
|
||||
lda ZPPTR1
|
||||
sec
|
||||
adc (ZPPTR1) Add len+1 to PTR
|
||||
sta ZPPTR1
|
||||
bcc .1
|
||||
inc ZPPTR1
|
||||
inc ZPPTR1+1
|
||||
bra .1
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
.9 rts
|
||||
|
||||
EXEC.CMD.SETVAR >PUSHA Push Cmd Line
|
||||
>PUSHBI $3D Push SEP='='
|
||||
>PUSHBI 0 Push Token IDX
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
bcc .3
|
||||
lda #SYSMGR.ERRSYN
|
||||
Cmd.Exec.SETVAR tax
|
||||
lda ARGS,x
|
||||
cmp #'=' ARGS ends with =, UnsetEnv
|
||||
beq .2
|
||||
|
||||
.1 dex
|
||||
beq .3 no =, GetEnv
|
||||
|
||||
lda ARGS,x
|
||||
cmp #'=' ARGS contains =, PutEnv
|
||||
bne .1
|
||||
|
||||
cpx #1 string is '=value' ?
|
||||
beq Cmd.Exec.ERRSYN syntax error
|
||||
|
||||
>LDYA L.ARGS String is VAR=VALUE...
|
||||
>SYSCALL SYS.PutEnvYA
|
||||
rts
|
||||
|
||||
.3 sta hVarName
|
||||
stx hVarValue
|
||||
txa
|
||||
beq .31
|
||||
.2 dec ARGS String is "VAR=", Remove endig '='
|
||||
>LDYA L.ARGS String is "VAR"...
|
||||
>SYSCALL SYS.UnsetEnvYA
|
||||
rts
|
||||
|
||||
>PUSHB hVarValue
|
||||
>PUSHB hVarName
|
||||
>SYSCALL SYS.SetEnvVarH
|
||||
jmp .97
|
||||
|
||||
.31 lda hExecArgs
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR1
|
||||
lda (ZPPTR1)
|
||||
tay
|
||||
lda (ZPPTR1),y
|
||||
cmp #'='
|
||||
bne .4
|
||||
|
||||
lda hVarName
|
||||
>SYSCALL SYS.DelEnvVarA
|
||||
bra .97
|
||||
|
||||
.4 lda hVarName
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.GetEnvVarYA
|
||||
bcs .97
|
||||
sta hVarValue
|
||||
|
||||
lda hVarName
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
.3 >LDYA L.ARGS String is VAR...
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
bcs .9
|
||||
lda #'='
|
||||
>SYSCALL SYS.COutA
|
||||
lda hVarValue
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
lda #13
|
||||
bcs .9
|
||||
|
||||
>LDYA L.ARGS
|
||||
>SYSCALL SYS.GetEnvYA
|
||||
bcs .8
|
||||
|
||||
>SYSCALL SYS.PSTROutYA Y,A = VALUE
|
||||
|
||||
.8 lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
|
||||
clc
|
||||
|
||||
.97 php
|
||||
pha
|
||||
lda hVarValue
|
||||
beq .98
|
||||
>SYSCALL SYS.FreeMemA
|
||||
.98 lda hVarName
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
php
|
||||
rts
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime
|
||||
Cmd.Exec.DATE >SYSCALL SYS.MLIGetTime
|
||||
bcs .9
|
||||
>PUSHW DATELO
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTDATE
|
||||
|
@ -382,7 +374,7 @@ EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime
|
|||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime
|
||||
Cmd.Exec.TIME >SYSCALL SYS.MLIGetTime
|
||||
bcs .9
|
||||
>PUSHW TIMELO
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTTIME
|
||||
|
@ -391,28 +383,22 @@ EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime
|
|||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.ECHO lda hExecArgs
|
||||
beq .98
|
||||
>SYSCALL SYS.ExpandPStrA
|
||||
bcs .99
|
||||
|
||||
pha
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
Cmd.Exec.ECHO lda ARGS
|
||||
beq .9
|
||||
>LDYA L.ARGS
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 lda #SYSMGR.ERRSYN
|
||||
.9 lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
.99 rts
|
||||
rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.TYPE lda hExecArgs
|
||||
Cmd.Exec.TYPE lda ARGS
|
||||
beq .98
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>LDYA L.ARGS
|
||||
>SYSCALL SYS.LoadFileYA
|
||||
bcs .99
|
||||
|
||||
|
@ -444,17 +430,17 @@ EXEC.CMD.TYPE lda hExecArgs
|
|||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.READ
|
||||
Cmd.Exec.READ
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.PAUSE ldy #bPause
|
||||
Cmd.Exec.PAUSE ldy #bPause
|
||||
lda #$80
|
||||
sta (pData),y
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.EXIT ldy #bEXIT
|
||||
Cmd.Exec.EXIT ldy #bEXIT
|
||||
lda #$FF
|
||||
sta (pData),y
|
||||
clc
|
||||
|
|
|
@ -5,7 +5,7 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
History.Init >PUSHWI 256 Get a buffer for History
|
||||
HIS.Init >PUSHWI 256 Get a buffer for History
|
||||
>PUSHBI S.MEM.F.INIT0
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .9
|
||||
|
@ -21,7 +21,7 @@ History.Init >PUSHWI 256 Get a buffer for History
|
|||
sta (pData),y
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
History.Add ldy #hCmdHistory
|
||||
HIS.Add ldy #hCmdHistory
|
||||
lda (pData),y
|
||||
beq .9
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
|
@ -88,7 +88,7 @@ History.Add ldy #hCmdHistory
|
|||
bpl .4
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
History.GetPrev ldy #hCmdHistory
|
||||
HIS.GetPrev ldy #hCmdHistory
|
||||
lda (pData),y
|
||||
beq HISTORY.RTS
|
||||
|
||||
|
@ -121,10 +121,10 @@ History.GetPrev ldy #hCmdHistory
|
|||
.2 txa
|
||||
ldy #CmdHistory.IDX set new index
|
||||
sta (pData),y
|
||||
bra History.SetBuf
|
||||
bra HIS.SetBuf
|
||||
History.RTS rts
|
||||
*--------------------------------------
|
||||
History.GetNext ldy #hCmdHistory
|
||||
HIS.GetNext ldy #hCmdHistory
|
||||
lda (pData),y
|
||||
beq HISTORY.RTS
|
||||
|
||||
|
@ -153,10 +153,10 @@ History.GetNext ldy #hCmdHistory
|
|||
|
||||
ldy #CmdHistory.END
|
||||
cmp (pData),y
|
||||
bne History.SetBuf
|
||||
bne HIS.SetBuf
|
||||
jmp CmdBuffer.CLR end of history, just blank buffer
|
||||
*--------------------------------------
|
||||
History.SetBuf jsr CmdBuffer.CLR
|
||||
HIS.SetBuf jsr CmdBuffer.CLR
|
||||
|
||||
ldy #CmdHistory.IDX
|
||||
lda (pData),y
|
||||
|
@ -175,7 +175,7 @@ History.SetBuf jsr CmdBuffer.CLR
|
|||
|
||||
jmp CmdBuffer.PRINT
|
||||
*--------------------------------------
|
||||
History.Quit ldy #hCmdHistory
|
||||
HIS.Quit ldy #hCmdHistory
|
||||
lda (pData),y
|
||||
beq .9
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
|
|
@ -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
|
251
SBIN/SHELL.S.txt
251
SBIN/SHELL.S.txt
|
@ -42,28 +42,33 @@ L.LIBSTR .DA LIBSTR
|
|||
L.MSG.GREETINGS .DA MSG.GREETINGS
|
||||
L.MSG.ERROR .DA MSG.ERROR
|
||||
L.ENV.PATH .DA ENV.PATH
|
||||
J.INTCMDS .DA EXEC.CMD.CD
|
||||
.DA EXEC.CMD.DATE
|
||||
.DA EXEC.CMD.ECHO
|
||||
.DA EXEC.CMD.EXIT
|
||||
.DA EXEC.CMD.PAUSE
|
||||
.DA EXEC.CMD.READ
|
||||
.DA EXEC.CMD.SET
|
||||
.DA EXEC.CMD.STARTPROC
|
||||
.DA EXEC.CMD.TIME
|
||||
.DA EXEC.CMD.TYPE
|
||||
L.CMD .DA CMD
|
||||
L.ARGS .DA ARGS
|
||||
L.CMDS .DA CMDS
|
||||
J.INTCMDS .DA Cmd.Exec.CD
|
||||
.DA Cmd.Exec.DATE
|
||||
.DA Cmd.Exec.ECHO
|
||||
.DA Cmd.Exec.EXIT
|
||||
.DA Cmd.Exec.PAUSE
|
||||
.DA Cmd.Exec.READ
|
||||
.DA Cmd.Exec.SET
|
||||
.DA Cmd.Exec.STARTPROC
|
||||
.DA Cmd.Exec.TIME
|
||||
.DA Cmd.Exec.TYPE
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT >LDYA L.LIBSTR
|
||||
>SYSCALL SYS.LoadLibYA
|
||||
bcs .9
|
||||
sta hLIBSTR
|
||||
|
||||
ldy #S.PS.hARGS Batch file ?
|
||||
lda (pPs),y
|
||||
beq CS.INIT.INTERACTIVE no,continue starting interactive
|
||||
>SYSCALL SYS.GetArgC
|
||||
cmp #1
|
||||
|
||||
jsr OpenTxtFileA
|
||||
beq CS.INIT.INTERACTIVE no arg, continue starting interactive
|
||||
|
||||
lda #1
|
||||
>SYSCALL SYS.GetArgA
|
||||
jsr TXT.OpenFileYA
|
||||
bcs .9
|
||||
|
||||
ldy #bExitOnEOF
|
||||
|
@ -73,7 +78,7 @@ CS.INIT >LDYA L.LIBSTR
|
|||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.INIT.INTERACTIVE
|
||||
jsr History.Init
|
||||
jsr HIS.Init
|
||||
bcs .9
|
||||
|
||||
ldy #S.PS.hINDEV
|
||||
|
@ -92,7 +97,7 @@ CS.INIT.INTERACTIVE
|
|||
CS.RUN lda #0
|
||||
sta (pData)
|
||||
|
||||
ldy #bPause
|
||||
.11 ldy #bPause
|
||||
lda (pData),y
|
||||
bpl .10
|
||||
clc
|
||||
|
@ -113,41 +118,25 @@ CS.RUN lda #0
|
|||
sta (pData)
|
||||
bra .3
|
||||
|
||||
.2 jsr ReadTxtFile
|
||||
.2 jsr TXT.ReadFile
|
||||
bcs .81
|
||||
|
||||
.3 lda (pData)
|
||||
beq CS.RUN Empty line
|
||||
.3 jsr CmdBuffer.Normalize
|
||||
lda (pData)
|
||||
beq .11 Empty line
|
||||
|
||||
ldy #1
|
||||
ldy #hInputFile if batch mode, do not add to cmd history
|
||||
lda (pData),y
|
||||
cmp #'#' Comment
|
||||
beq CS.RUN
|
||||
bne .4
|
||||
|
||||
ldy #hInputFile
|
||||
lda (pData),y
|
||||
bne .32
|
||||
|
||||
jsr History.Add
|
||||
jsr HIS.Add
|
||||
|
||||
.32 >LDYA pData
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bcs .99
|
||||
|
||||
ldy #hCmdLine
|
||||
sta (pData),y
|
||||
jsr EXEC.CMD
|
||||
bcc .4
|
||||
.4 >LDYA pData
|
||||
jsr Cmd.ExecYA
|
||||
bcc .8
|
||||
tay
|
||||
beq .4
|
||||
beq .8
|
||||
jsr PrintError
|
||||
|
||||
.4 ldy #hCmdLine
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.FreeMemA
|
||||
ldy #hCmdLine
|
||||
lda #0
|
||||
sta (pData),y
|
||||
|
||||
.8 ldy #bEXIT
|
||||
lda (pData),y
|
||||
|
@ -156,7 +145,7 @@ CS.RUN lda #0
|
|||
clc
|
||||
rts
|
||||
|
||||
.81 jsr CloseTxtFile
|
||||
.81 jsr TXT.CloseFile
|
||||
ldy #bExitOnEOF
|
||||
lda (pData),y
|
||||
beq .8
|
||||
|
@ -201,7 +190,7 @@ CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
|
|||
cpx #3 test Ctrl-c
|
||||
bne .12
|
||||
|
||||
jsr CloseTxtFile
|
||||
jsr TXT.CloseFile
|
||||
ldy #bExitOnEOF
|
||||
lda (pData),y
|
||||
ldy #bExit
|
||||
|
@ -303,14 +292,14 @@ CS.EVENT.CTRL.CHAR
|
|||
.2 cpx #10 LF (down arrow)
|
||||
bne .3
|
||||
|
||||
jsr HISTORY.GETNEXT
|
||||
jsr HIS.GetNext
|
||||
clc
|
||||
rts
|
||||
|
||||
.3 cpx #11 VT (up arrow)
|
||||
bne .4
|
||||
|
||||
jsr HISTORY.GETPREV
|
||||
jsr His.GetPrev
|
||||
clc
|
||||
rts
|
||||
|
||||
|
@ -323,7 +312,7 @@ CS.EVENT.CTRL.CHAR
|
|||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT jsr History.Quit
|
||||
CS.QUIT jsr HIS.Quit
|
||||
|
||||
ldy #hInputFile
|
||||
lda (pData),y
|
||||
|
@ -336,8 +325,10 @@ CS.QUIT jsr History.Quit
|
|||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
.2 lda hLIBSTR
|
||||
beq .8
|
||||
>SYSCALL SYS.UnloadLibA
|
||||
clc
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
|
@ -356,6 +347,60 @@ PrintError pha
|
|||
pla
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Remove extra SPACE & comment
|
||||
*--------------------------------------
|
||||
CmdBuffer.Normalize
|
||||
>LDYA pData
|
||||
>STYA ZPPtr1
|
||||
|
||||
lda (pData) empty line...quit
|
||||
beq .9
|
||||
|
||||
tax Char count
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 jsr CmdBuffer.Normalize.Next
|
||||
beq .8 no more char, exit
|
||||
|
||||
cmp #' ' skip leading spaces
|
||||
beq .1
|
||||
|
||||
cmp #'#' Comment ?
|
||||
beq .8 ignore remaining chars
|
||||
|
||||
.3 iny add char to buffer
|
||||
sta (pData),y
|
||||
|
||||
jsr CmdBuffer.Normalize.Next
|
||||
beq .8
|
||||
|
||||
cmp #' '
|
||||
bne .3
|
||||
|
||||
iny add One SPACE to buffer
|
||||
sta (pData),y
|
||||
|
||||
.5 jsr CmdBuffer.Normalize.Next
|
||||
beq .8
|
||||
cmp #' '
|
||||
beq .5 skip additional spaces
|
||||
bne .3 no more space, add next word...
|
||||
|
||||
.8 tya
|
||||
sta (pData)
|
||||
.9 rts
|
||||
|
||||
CmdBuffer.Normalize.Next
|
||||
txa
|
||||
beq .8
|
||||
dex
|
||||
inc ZPPtr1
|
||||
bne .1
|
||||
inc ZPPtr1+1
|
||||
.1 lda (ZPPtr1)
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CmdBuffer.PRINT ldy #0
|
||||
.1 iny
|
||||
lda (pData),y
|
||||
|
@ -377,99 +422,10 @@ CmdBuffer.DEL lda (pData)
|
|||
dec
|
||||
sta (pData)
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
OpenTxtFileA >SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.MLIOpenYA
|
||||
bcs .9
|
||||
|
||||
ldy #hInputFile
|
||||
sta (pData),y
|
||||
pha
|
||||
txa
|
||||
ldy #hInputBuffer
|
||||
sta (pData),y
|
||||
|
||||
>PUSHBI $0D Line separator for TXT file
|
||||
>PUSHBI $FF
|
||||
pla
|
||||
>PUSHA
|
||||
>SYSCALL SYS.MLINewLine
|
||||
bcc .9
|
||||
pha
|
||||
jsr CloseTxtFile
|
||||
pla
|
||||
sec
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
ReadTxtFile >PUSHWI 127
|
||||
>PUSHWI TmpBuffer256+1
|
||||
ldy #hInputFile
|
||||
lda (pData),y
|
||||
>PUSHA
|
||||
>SYSCALL SYS.MLIRead
|
||||
bcs .9
|
||||
|
||||
tya
|
||||
beq .10
|
||||
|
||||
lda TmpBuffer256,y Y,A=Bytes read
|
||||
cmp #$0D
|
||||
bne .10
|
||||
|
||||
dey
|
||||
|
||||
.10 tya
|
||||
sta (pData)
|
||||
beq .2
|
||||
|
||||
.1 lda TmpBuffer256,y
|
||||
sta (pData),y
|
||||
dey
|
||||
bne .1
|
||||
|
||||
.2 ldy #bEcho
|
||||
lda (pData),y
|
||||
beq .8
|
||||
|
||||
lda #'>'
|
||||
>SYSCALL SYS.COutA
|
||||
lda #'"'
|
||||
>SYSCALL SYS.COutA
|
||||
>LDYA pData
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
lda #'"'
|
||||
>SYSCALL SYS.COutA
|
||||
lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
|
||||
.8 clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CloseTxtFile ldy #hInputArgs
|
||||
lda (pData),y
|
||||
beq .1
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
.1 ldy #hInputFile
|
||||
lda (pData),y
|
||||
beq .9
|
||||
|
||||
>SYSCALL SYS.MLICloseA
|
||||
ldy #hInputBuffer
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
.9 lda #0
|
||||
ldy #hInputArgs
|
||||
sta (pData),y
|
||||
ldy #hInputFile
|
||||
sta (pData),y
|
||||
ldy #hInputBuffer
|
||||
sta (pData),y
|
||||
rts
|
||||
*--------------------------------------
|
||||
.INB SBIN/SHELL.S.CMD
|
||||
.INB SBIN/SHELL.S.HIS
|
||||
.INB SBIN/SHELL.S.TXT
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
*--------------------------------------
|
||||
|
@ -489,20 +445,14 @@ CMDS >PSTRING "CD"
|
|||
LIBSTR >PSTRING "libstr.o"
|
||||
MSG.GREETINGS >PSTRING "\nA2osX-Shell on Dev=%h\n\n"
|
||||
MSG.ERROR >PSTRING "[%h]\n"
|
||||
*MSG.NOTFOUND >CSTRING "Command Not Found\n"
|
||||
*MSG.SYNERR >CSTRING "Syntax Error Or Invalid Pathname\n"
|
||||
EscChars >PSTRING "DBAC"
|
||||
EscAscii .HS 04080A0B15
|
||||
CMD .BS 256
|
||||
ARGS .BS 256
|
||||
hLIBSTR .BS 1
|
||||
hNEWPATH .BS 1
|
||||
hExecCmd .BS 1
|
||||
hExecArgs .BS 1
|
||||
hEnvPath .BS 1
|
||||
hFullCmd .BS 1
|
||||
hVarName .BS 1
|
||||
hVarValue .BS 1
|
||||
ExecCmdIdx .BS 1
|
||||
ExecCmdMode .BS 1
|
||||
hCmdLine .BS 1
|
||||
Cmd.Exec.Mode .BS 1
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
|
@ -513,7 +463,6 @@ bPause .BS 1
|
|||
bExit .BS 1
|
||||
bEcho .BS 1
|
||||
bExitOnEOF .BS 1
|
||||
hCmdLine .BS 1
|
||||
hCmdHistory .BS 1
|
||||
CmdHistory.IDX .BS 1
|
||||
CmdHistory.END .BS 1
|
||||
|
|
|
@ -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
|
|
@ -5,32 +5,17 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* S.LoadBinA
|
||||
* S.LoadBinYA
|
||||
* in :
|
||||
* A = hMem of FilePath (PSTRING)
|
||||
* out :
|
||||
* Y,A = MEMPTR
|
||||
* X = hMem of Code Segment
|
||||
*--------------------------------------
|
||||
S.LoadBinA sta S.LoadBinA.hFilename save file path
|
||||
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
lda (ZPQuickPtr1)
|
||||
tay
|
||||
|
||||
.1 lda (ZPQuickPtr1),y convert to UPPERCASE
|
||||
cmp #'a'
|
||||
bmi .2
|
||||
cmp #'z'+1
|
||||
bpl .2
|
||||
eor #$20
|
||||
sta (ZPQuickPtr1),y
|
||||
.2 dey
|
||||
bne .1
|
||||
|
||||
>LDYA ZPQuickPtr1
|
||||
S.LoadBinYA >STYA S.LoadBin.Filename
|
||||
jsr S.PStrUprYA
|
||||
|
||||
>LDYA S.LoadBin.Filename
|
||||
jsr S.GetMemByNameYA
|
||||
bcs .3 not already loaded
|
||||
|
||||
|
@ -49,13 +34,13 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
|
|||
clc
|
||||
rts
|
||||
|
||||
.3 >LDYA ZPQuickPtr1
|
||||
.3 >LDYA S.LoadBin.Filename
|
||||
jsr S.LoadFileYA
|
||||
bcc .4
|
||||
rts Error Loading file
|
||||
|
||||
.4 >STYA S.LoadBinA.FileLen
|
||||
stx S.LoadBinA.hMem save hMem
|
||||
.4 >STYA S.LoadBin.FileLen
|
||||
stx S.LoadBin.hMem save hMem
|
||||
txa
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 save base address for relocation
|
||||
|
@ -67,8 +52,7 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
|
|||
lda (ZPQuickPtr1),y
|
||||
sta R.AH
|
||||
|
||||
lda S.LoadBinA.hFilename
|
||||
jsr S.GetMemPtrA
|
||||
>LDYA S.LoadBin.Filename
|
||||
jsr S.MLIGetFileInfoYA Get File Info for AUXTYPE
|
||||
bcs .98
|
||||
|
||||
|
@ -76,23 +60,23 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
|
|||
ldy #2 get AUXTYPE
|
||||
lda (ZPQuickPtr2),y
|
||||
sta R.BL Make BX=Range Start=AUXTYPE
|
||||
sta S.LoadBinA.AuxType
|
||||
sta S.LoadBin.AuxType
|
||||
clc
|
||||
adc S.LoadBinA.FileLen
|
||||
adc S.LoadBin.FileLen
|
||||
sta R.CL Make CX=Range End=AUXTYPE+FILELEN
|
||||
iny
|
||||
lda (ZPQuickPtr2),y
|
||||
sta R.BH
|
||||
sta S.LoadBinA.AuxType+1
|
||||
adc S.LoadBinA.FileLen+1
|
||||
sta S.LoadBin.AuxType+1
|
||||
adc S.LoadBin.FileLen+1
|
||||
sta R.CH
|
||||
|
||||
lda ZPQuickPtr1 Compute relocation offset in DX
|
||||
sec
|
||||
sbc S.LoadBinA.AuxType
|
||||
sbc S.LoadBin.AuxType
|
||||
sta R.DL DX=Offset=ZPQuickPtr1-AUXTYPE
|
||||
lda ZPQuickPtr1+1
|
||||
sbc S.LoadBinA.AuxType+1
|
||||
sbc S.LoadBin.AuxType+1
|
||||
sta R.DH
|
||||
|
||||
>LDYA ZPQuickPtr1
|
||||
|
@ -107,13 +91,12 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
|
|||
|
||||
bcs .98 relocation error, dicard Code segment
|
||||
|
||||
lda S.LoadBinA.hFilename get back bin path
|
||||
jsr S.GetMemPtrA
|
||||
jsr S.NewPStrYA
|
||||
>LDYA S.LoadBin.Filename get back bin path
|
||||
jsr S.NewPStrYA make a copy of this string
|
||||
bcs .98
|
||||
pha
|
||||
phx save copy
|
||||
|
||||
lda S.LoadBinA.hMem
|
||||
lda S.LoadBin.hMem
|
||||
jsr S.GetMemByIDA
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
|
@ -125,24 +108,24 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
|
|||
ldy #S.MEM.BIN
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
lda S.LoadBinA.hMem
|
||||
lda S.LoadBin.hMem
|
||||
tax return hMEM to Caller...
|
||||
jsr S.GetMemPtrA
|
||||
clc ...and Y,A=PTR to CS
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda S.LoadBinA.hMem
|
||||
lda S.LoadBin.hMem
|
||||
jsr S.FreeMemA Discard Loaded Code
|
||||
pla
|
||||
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.LoadBinA.hFilename .BS 1
|
||||
S.LoadBinA.hMem .BS 1
|
||||
S.LoadBinA.AuxType .BS 2
|
||||
S.LoadBinA.FileLen .BS 2
|
||||
S.LoadBin.Filename .BS 2
|
||||
S.LoadBin.hMem .BS 1
|
||||
S.LoadBin.AuxType .BS 2
|
||||
S.LoadBin.FileLen .BS 2
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.BIN
|
||||
|
|
|
@ -5,44 +5,46 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* S.LoadDrvA
|
||||
* S.LoadDrvYA
|
||||
* in :
|
||||
* A = hMem To Full Cmd Line
|
||||
* Y,A = PTR To Full Cmd Line PStrArray
|
||||
* out :
|
||||
* none
|
||||
*--------------------------------------
|
||||
S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
||||
jsr S.PStrGetTkn
|
||||
bcc .1
|
||||
rts
|
||||
|
||||
.1 sta S.LoadDrv.Name
|
||||
stx S.LoadDrv.Args
|
||||
S.LoadDrvYA >STYA S.LoadDrv.CmdArray
|
||||
|
||||
>LDYAI ENV.DRV push ENVNAME=DRV
|
||||
jsr S.GetEnvVarYA get value for ENV=$DRV
|
||||
jsr S.GetEnvYA get value for ENV=DRV
|
||||
bcs .99
|
||||
|
||||
>PUSHYA Push $DRV value
|
||||
|
||||
>PUSHW S.LoadDrv.CmdArray (ARG[0] = DRVNAME)
|
||||
|
||||
jsr S.FileSearch find libname in $DRV
|
||||
bcs .99
|
||||
stx S.LoadDrv.hFullName
|
||||
|
||||
jsr S.LoadBinYA Y,A =filename full path
|
||||
bcs .98
|
||||
|
||||
sta S.LoadDrv.Srch
|
||||
|
||||
>PUSHB S.LoadDrv.Name push CMD for S.FileSearch
|
||||
>PUSHB S.LoadDrv.Srch
|
||||
jsr S.FileSearch find File in $DRV
|
||||
bcs .97 not Found
|
||||
|
||||
sta S.LoadDrv.FullName
|
||||
jsr S.LoadBinA
|
||||
bcs .96
|
||||
|
||||
>STYA pDrv
|
||||
stx S.LoadDrv.hMem
|
||||
|
||||
lda S.LoadDrv.Args
|
||||
jsr S.LoadDrvA.Jmp call Dev.Detect
|
||||
>LDYA S.LoadDrv.CmdArray Advance to ARG[1]
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
lda ZPQuickPtr1
|
||||
sec
|
||||
adc (ZPQuickPtr1)
|
||||
sta ZPQuickPtr1
|
||||
bcc .1
|
||||
inc ZPQuickPtr1+1
|
||||
|
||||
.1 >LDYA ZPQuickPtr1
|
||||
jsr pDrvJmp call Dev.Detect
|
||||
|
||||
bcs .95
|
||||
bcs .97
|
||||
|
||||
bit RRAMWRAMBNK2
|
||||
bit RRAMWRAMBNK2
|
||||
|
@ -52,51 +54,35 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
|||
bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
|
||||
bcs .95
|
||||
|
||||
jsr .95
|
||||
bcs .97
|
||||
|
||||
ldy #S.DEV.F
|
||||
lda (pDev),y
|
||||
ora #S.DEV.F.INUSE
|
||||
sta (pDev),y
|
||||
|
||||
jsr .97 Cleanup...
|
||||
|
||||
lda #0 Make sure RC = 0 if success
|
||||
clc
|
||||
.99 rts
|
||||
|
||||
.97 pha
|
||||
lda S.LoadDrv.hMem
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.98 pha
|
||||
lda S.LoadDrv.hFullName
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
|
||||
.95 pha
|
||||
lda S.LoadDrv.hMem
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.96 pha
|
||||
lda S.LoadDrv.FullName
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.97 pha
|
||||
lda S.LoadDrv.Srch
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.98 pha
|
||||
lda S.LoadDrv.Args
|
||||
jsr S.FreeMemA
|
||||
lda S.LoadDrv.Name
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.LoadDrvA.Jmp jmp (pDrv)
|
||||
*--------------------------------------
|
||||
S.LoadDrv.Name .BS 1
|
||||
S.LoadDrv.Args .BS 1
|
||||
S.LoadDrv.Srch .BS 1
|
||||
S.LoadDrv.FullName .BS 1
|
||||
S.LoadDrv.hMem .BS 1
|
||||
*--------------------------------------
|
||||
ENV.DRV >PSTRING "DRV"
|
||||
S.LoadDrv.CmdArray .BS 2
|
||||
S.LoadDrv.hFullName .BS 1
|
||||
S.LoadDrv.hMem .BS 1
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.DRV
|
||||
|
|
|
@ -5,20 +5,20 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* S.ExpandPStrA
|
||||
* S.ExpandPStrYA
|
||||
* In:
|
||||
* A = hMem of String to Expand (PSTRING)
|
||||
* Y,A = PTR to String to Expand (PSTRING)
|
||||
* Out:
|
||||
* A = hMem to Expanded String (PSTRING)
|
||||
* X = hMem to Expanded String (PSTRING)
|
||||
* Y,A = PTR to Expanded String
|
||||
*--------------------------------------
|
||||
S.ExpandPStrA jsr S.GetMemPtrA
|
||||
S.ExpandPStrYA >STYA ZPQuickPtr3
|
||||
|
||||
stz TmpBuffer256 init Expanded String len=0
|
||||
stz KrnBuffer256 init Expanded String len=0
|
||||
|
||||
ldy #0
|
||||
|
||||
.10 stz S.ExpandPStrA.Start
|
||||
.10 stz S.ExpandPStr.Start
|
||||
|
||||
.1 tya
|
||||
cmp (ZPQuickPtr3) End of PSTR?
|
||||
|
@ -27,19 +27,19 @@ S.ExpandPStrYA >STYA ZPQuickPtr3
|
|||
iny
|
||||
lda (ZPQuickPtr3),y
|
||||
|
||||
ldx S.ExpandPStrA.Start
|
||||
ldx S.ExpandPStr.Start
|
||||
bne .3 already in a var?
|
||||
|
||||
cmp #'$' no, found one ?
|
||||
beq .2
|
||||
|
||||
inc TmpBuffer256 no, copy char
|
||||
ldx TmpBuffer256
|
||||
sta TmpBuffer256,x
|
||||
inc KrnBuffer256 no, copy char
|
||||
ldx KrnBuffer256
|
||||
sta KrnBuffer256,x
|
||||
bra .1
|
||||
|
||||
.2 sty S.ExpandPStrA.Start save var start
|
||||
stz S.ExpandPStrA.End
|
||||
.2 sty S.ExpandPStr.Start save var start
|
||||
stz S.ExpandPStr.End
|
||||
bra .1 skip this char
|
||||
|
||||
.3 cmp #'{' in var, "{" after "$"?
|
||||
|
@ -48,78 +48,76 @@ S.ExpandPStrYA >STYA ZPQuickPtr3
|
|||
cmp #'}' end of var?
|
||||
beq .5
|
||||
|
||||
.4 jsr S.ExpandPStrA.VC valid char ?
|
||||
.4 jsr S.ExpandPStr.VC valid char ?
|
||||
bcs .5 no, end here
|
||||
sty S.ExpandPStrA.End yes, save end
|
||||
sty S.ExpandPStr.End yes, save end
|
||||
bra .1
|
||||
|
||||
.5 lda S.ExpandPStrA.End get end
|
||||
.5 lda S.ExpandPStr.End get end
|
||||
beq .1 empty {} or $/
|
||||
|
||||
phy save current index
|
||||
jsr S.ExpandPStrA.AV
|
||||
jsr S.ExpandPStr.AV
|
||||
ply restore index in string...
|
||||
bra .10 reset start flag and continue
|
||||
|
||||
.6 sty S.ExpandPStrA.End end of PSTR
|
||||
lda S.ExpandPStrA.Start are we in a var?
|
||||
.6 sty S.ExpandPStr.End end of PSTR
|
||||
lda S.ExpandPStr.Start are we in a var?
|
||||
beq .7 no...exit...
|
||||
|
||||
jsr S.ExpandPStrA.AV yes, expand and add to STR
|
||||
jsr S.ExpandPStr.AV yes, expand and add to STR
|
||||
|
||||
.7 >LDYAI TmpBuffer256
|
||||
.7 >LDYAI KrnBuffer256
|
||||
jsr S.NewPStrYA
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ExpandPStrA.AV
|
||||
ldy #S.PS.hENV
|
||||
lda (pPs),y
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 Store ENV for FindVar
|
||||
|
||||
lda S.ExpandPStrA.End
|
||||
S.ExpandPStr.AV lda S.ExpandPStr.End
|
||||
sec
|
||||
sbc S.ExpandPStrA.Start compute len of VAR End-Start+1
|
||||
sbc S.ExpandPStr.Start compute len of VAR End-Start+1
|
||||
|
||||
ldx TmpBuffer256
|
||||
ldx KrnBuffer256
|
||||
inx
|
||||
sta TmpBuffer256,x
|
||||
sta KrnBuffer256,x
|
||||
|
||||
stx ZPQuickPtr2
|
||||
lda /TmpBuffer256
|
||||
lda /KrnBuffer256
|
||||
sta ZPQuickPtr2+1
|
||||
|
||||
ldy S.ExpandPStrA.Start
|
||||
ldy S.ExpandPStr.Start
|
||||
|
||||
.1 iny
|
||||
inx
|
||||
lda (ZPQuickPtr3),y
|
||||
sta TmpBuffer256,x
|
||||
cpy S.ExpandPStrA.End
|
||||
sta KrnBuffer256,x
|
||||
cpy S.ExpandPStr.End
|
||||
bne .1
|
||||
|
||||
jsr S.FindVar
|
||||
jsr S.CheckSysVarPtr2
|
||||
bcs .10
|
||||
>STYA ZPQuickPtr1
|
||||
bra .11
|
||||
|
||||
.10 jsr S.FindVarPtr2
|
||||
bcs .9
|
||||
|
||||
ldy #0
|
||||
jsr S.NextEnvPtr1 Skip NAME
|
||||
|
||||
.11 ldy #0
|
||||
ldx KrnBuffer256
|
||||
|
||||
.2 iny
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp #'='
|
||||
bne .2
|
||||
|
||||
.3 iny
|
||||
lda (ZPQuickPtr1),y
|
||||
inc TmpBuffer256
|
||||
ldx TmpBuffer256
|
||||
sta TmpBuffer256,x
|
||||
inx
|
||||
sta KrnBuffer256,x
|
||||
|
||||
tya
|
||||
cmp (ZPQuickPtr1) last char?
|
||||
bne .3
|
||||
cmp (ZPQuickPtr1) last char?
|
||||
bne .2
|
||||
stx KrnBuffer256
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.ExpandPStrA.VC
|
||||
cmp #'0'
|
||||
S.ExpandPStr.VC cmp #'0'
|
||||
bcc .9
|
||||
cmp #'9'+1
|
||||
bcc .8
|
||||
|
@ -137,289 +135,297 @@ S.ExpandPStrA.VC
|
|||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ExpandPStrA.Start .BS 1
|
||||
S.ExpandPStrA.End .BS 1
|
||||
S.ExpandPStr.Start .BS 1
|
||||
S.ExpandPStr.End .BS 1
|
||||
*--------------------------------------
|
||||
* S.DupEnvA
|
||||
* In:
|
||||
* A = ENV hMem To Duplicate
|
||||
* Out:
|
||||
* A = hMem to new ENV
|
||||
* S.PutEnvYA
|
||||
*--------------------------------------
|
||||
S.DupEnvA jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
>PUSHWI K.ENV.SIZE
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
S.PutEnvYA >STYA ZPQuickPtr2 NAME=VALUE
|
||||
lda (ZPQuickPtr2)
|
||||
beq .9
|
||||
sta KrnBuffer256
|
||||
tay
|
||||
|
||||
.1 lda (ZPQuickPtr2),y
|
||||
sta KrnBuffer256,y
|
||||
dey
|
||||
bne .1
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2),y
|
||||
beq .8
|
||||
|
||||
iny
|
||||
bne .1
|
||||
inc ZPQuickPtr1+1
|
||||
inc ZPQuickPtr2+1
|
||||
bra .1
|
||||
|
||||
.8 txa
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.GetEnvVarYA
|
||||
* In:
|
||||
* Y,A = PTR to NAME (PSTRING)
|
||||
* Out:
|
||||
* A = hMem to VALUE (PSTRING) 0,"" if not exist
|
||||
*--------------------------------------
|
||||
S.GetEnvVarYA >STYA ZPQuickPtr2
|
||||
jsr S.FindVar
|
||||
bcc .1
|
||||
>LDYAI 1 not found
|
||||
>PUSHYA create "" PSTR
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem create a new PSTR
|
||||
bcs .99
|
||||
>STYA ZPQuickPtr3
|
||||
lda #0
|
||||
sta (ZPQuickPtr3) set len of PSTR
|
||||
txa
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 lda (ZPQuickPtr1) get NAME=VALUE len
|
||||
sec
|
||||
sbc (ZPQuickPtr2) substract (NAME len)
|
||||
tay y=len("=VALUE")
|
||||
lda #0
|
||||
>PUSHYA
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem create a new PSTR
|
||||
bcs .99
|
||||
>STYA ZPQuickPtr3
|
||||
phx save hMem
|
||||
lda (ZPQuickPtr1) get NAME=VALUE len
|
||||
clc
|
||||
sbc (ZPQuickPtr2) compute VALUE len
|
||||
sta (ZPQuickPtr3) set new PSTR Len
|
||||
tax x = chr to copy
|
||||
lda (ZPQuickPtr2) get name len
|
||||
inc add 1 to skip "="
|
||||
tay
|
||||
.2 iny
|
||||
inc ZPQuickPtr3
|
||||
bne .3
|
||||
inc ZPQuickPtr3+1
|
||||
.3 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr3)
|
||||
dex
|
||||
cpy KrnBuffer256 last char ?
|
||||
beq .9 no "=" found
|
||||
|
||||
lda KrnBuffer256,y
|
||||
cmp #'='
|
||||
bne .2
|
||||
pla get back PSTR hMem
|
||||
|
||||
cpy #1 String like "=value" ?
|
||||
beq .9
|
||||
|
||||
cpy KrnBuffer256 last char ?
|
||||
beq .9 we have "VAR="
|
||||
|
||||
lda KrnBuffer256 save actual string len
|
||||
|
||||
sty KrnBuffer256 set length of VAR string
|
||||
dec KrnBuffer256 ...without "="
|
||||
|
||||
|
||||
.3 clc Substract VAR len+1 from whole len to get
|
||||
sbc KrnBuffer256 VALUE len
|
||||
sta KrnBuffer256,y save it at "=" POS
|
||||
|
||||
tya
|
||||
clc
|
||||
.99 rts
|
||||
adc #KrnBuffer256
|
||||
sta ZPQuickPtr3
|
||||
lda /KrnBuffer256
|
||||
sta ZPQuickPtr3+1
|
||||
|
||||
>LDYAI KrnBuffer256
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
bra S.SetEnvPtr2Ptr3
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.SetEnvVarH
|
||||
* In:
|
||||
* PULLB = hMem To Name (PSTRING)
|
||||
* PULLB = hMem To Value (PSTRING)
|
||||
*--------------------------------------
|
||||
* S.SetEnvVarP
|
||||
* S.SetEnv
|
||||
* In:
|
||||
* PULLW = PTR To Name (PSTRING)
|
||||
* PULLW = PTR To Value (PSTRING)
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
S.SetEnvVarH >PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr2
|
||||
>PULLA
|
||||
jsr S.GetMemPtrA
|
||||
bra S.SetEnvVar
|
||||
S.SetEnvVarP >PULLW ZPQuickPtr2
|
||||
>PULLYA
|
||||
S.SetEnvVar >STYA ZPQuickPtr3 ZPQuickPtr3 = VALUE
|
||||
jsr S.FindVar
|
||||
bcs .3 Not Found,ZPQuickPtr1 -> End Of Env
|
||||
lda (ZPQuickPtr1) Found, Discard current NAME definition
|
||||
sec
|
||||
adc ZPQuickPtr1 add NAME=VALUE len+1 to ZPQuickPtr1
|
||||
sta ZPQuickPtr4
|
||||
lda #0
|
||||
adc ZPQuickPtr1+1 store it in ZPQuickPtr4
|
||||
sta ZPQuickPtr4+1
|
||||
.1 lda (ZPQuickPtr4)
|
||||
sta (ZPQuickPtr1)
|
||||
beq .3 until we move ending 0
|
||||
inc ZPQuickPtr1
|
||||
bne .2
|
||||
inc ZPQuickPtr1+1
|
||||
.2 inc ZPQuickPtr4
|
||||
bne .1
|
||||
inc ZPQuickPtr4+1
|
||||
bra .1
|
||||
.3 lda ZPQuickPtr1 Compute ENV UPPER LIMIT
|
||||
S.SetEnv >PULLW ZPQuickPtr2 NAME...
|
||||
>PULLW ZPQuickPtr3 ...VALUE
|
||||
|
||||
S.SetEnvPtr2Ptr3
|
||||
jsr S.UnsetEnvPtr2
|
||||
|
||||
jsr S.InitEnvPtr1 Y,A = ZPQuickPtr1 -> Env
|
||||
|
||||
lda ZPQuickPtr1 Compute ENV UPPER LIMIT in Ptr4
|
||||
clc
|
||||
adc #K.ENV.SIZE
|
||||
sta ZPQuickPtr4
|
||||
|
||||
lda ZPQuickPtr1+1
|
||||
adc /K.ENV.SIZE
|
||||
sta ZPQuickPtr4+1
|
||||
|
||||
ldy ZPQuickPtr1+1
|
||||
lda ZPQuickPtr1 Compute New Env Upper limit in A,Y
|
||||
sec
|
||||
adc (ZPQuickPtr2) add NAME len +1(for len)
|
||||
bcc .4
|
||||
adc (ZPQuickPtr2) add NAME len +1
|
||||
bcc .1
|
||||
iny
|
||||
.4 sec
|
||||
adc (ZPQuickPtr3) add VALUE len +1(for "=")
|
||||
bcc .5
|
||||
|
||||
.1 sec
|
||||
adc (ZPQuickPtr3) add VALUE len +1
|
||||
bcc .2
|
||||
iny
|
||||
.5 sec A,Y=new upper limit
|
||||
sbc ZPQuickPtr4 greater than hMem Upper limit ?
|
||||
bcc .51
|
||||
|
||||
.2 cmp ZPQuickPtr4 GE than hMem Upper limit ?
|
||||
tya
|
||||
sbc ZPQuickPtr4+1
|
||||
bcs .99
|
||||
.51 lda (ZPQuickPtr2) make len = NAME+VALUE+1
|
||||
sec
|
||||
adc (ZPQuickPtr3)
|
||||
bcs .99
|
||||
|
||||
.3 lda (ZPQuickPtr1) Scan until endig 0...
|
||||
beq .4
|
||||
|
||||
inc ZPQuickPtr1
|
||||
bne .3
|
||||
inc ZPQuickPtr1+1
|
||||
bne .3
|
||||
|
||||
.4 lda (ZPQuickPtr2)
|
||||
sta (ZPQuickPtr1)
|
||||
inc ZPQuickPtr1
|
||||
tay
|
||||
|
||||
.5 lda (ZPQuickPtr2),y
|
||||
sta (ZPQuickPtr1),y
|
||||
dey
|
||||
bne .5
|
||||
|
||||
jsr S.NextEnvPtr1
|
||||
|
||||
lda (ZPQuickPtr3)
|
||||
sta (ZPQuickPtr1)
|
||||
tay
|
||||
|
||||
.6 lda (ZPQuickPtr3),y
|
||||
sta (ZPQuickPtr1),y
|
||||
dey
|
||||
bne .6
|
||||
inc ZPQuickPtr1+1
|
||||
.6 ldy #0
|
||||
.7 iny
|
||||
lda (ZPQuickPtr2),y
|
||||
sta (ZPQuickPtr1)
|
||||
inc ZPQuickPtr1
|
||||
bne .8
|
||||
inc ZPQuickPtr1+1
|
||||
.8 tya
|
||||
cmp (ZPQuickPtr2)
|
||||
bne .7
|
||||
lda #'='
|
||||
sta (ZPQuickPtr1)
|
||||
inc ZPQuickPtr1
|
||||
bne .9
|
||||
inc ZPQuickPtr1+1
|
||||
.9 ldy #0
|
||||
.10 iny
|
||||
lda (ZPQuickPtr3),y
|
||||
sta (ZPQuickPtr1)
|
||||
inc ZPQuickPtr1
|
||||
bne .11
|
||||
inc ZPQuickPtr1+1
|
||||
.11 tya
|
||||
cmp (ZPQuickPtr3)
|
||||
bne .10
|
||||
lda #0
|
||||
|
||||
jsr S.NextEnvPtr1
|
||||
|
||||
.8 lda #0
|
||||
|
||||
sta (ZPQuickPtr1)
|
||||
clc
|
||||
rts
|
||||
|
||||
.99 lda #SYSMGR.ERRENVF
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PutEnvYA
|
||||
* S.GetEnvYA
|
||||
* In:
|
||||
* Y,A = PTR To Name (NAME=VALUE)
|
||||
* Y,A = PTR to NAME (PSTRING)
|
||||
* Out:
|
||||
* CC : Y,A = PTR to VALUE (PSTRING)
|
||||
* CS : not found
|
||||
*--------------------------------------
|
||||
S.GetEnvYA >STYA ZPQuickPtr2
|
||||
jsr S.CheckSysVarPtr2
|
||||
bcc .9
|
||||
|
||||
jsr S.FindVarPtr2
|
||||
bcs .9
|
||||
jsr S.NextEnvPtr1 Skip NAME
|
||||
>LDYA ZPQuickPtr1
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.UnsetEnvYA
|
||||
* In:
|
||||
* YA = PTR To Name (PSTRING)
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
S.PutEnvYA clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.DelEnvVarA
|
||||
* In:
|
||||
* PULLB = hMem To Name (PSTRING)
|
||||
*--------------------------------------
|
||||
* S.DelEnvVarYA
|
||||
* In:
|
||||
* PULLW = PTR To Name (PSTRING)
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
S.DelEnvVarA >PULLA get NAME
|
||||
jsr S.GetMemPtrA
|
||||
S.DelEnvVarYA >STYA ZPQuickPtr2 Store VAR Name
|
||||
S.DelEnvVar jsr S.FindVar
|
||||
S.UnsetEnvYA >STYA ZPQuickPtr2 Store VAR Name
|
||||
S.UnsetEnvPtr2 jsr S.FindVarPtr2
|
||||
bcs .8 not found, quit
|
||||
|
||||
lda (ZPQuickPtr1) Found, Discard current NAME definition
|
||||
sec
|
||||
adc ZPQuickPtr1 add NAME=VALUE len+1 to ZPQuickPtr1
|
||||
sta ZPQuickPtr4
|
||||
lda #0
|
||||
adc ZPQuickPtr1+1 store it in ZPQuickPtr4
|
||||
sta ZPQuickPtr4+1
|
||||
|
||||
.1 lda (ZPQuickPtr4)
|
||||
sta (ZPQuickPtr1)
|
||||
beq .8 until we move ending 0
|
||||
inc ZPQuickPtr1
|
||||
bne .2
|
||||
inc ZPQuickPtr1+1
|
||||
|
||||
.2 inc ZPQuickPtr4
|
||||
bne .1
|
||||
inc ZPQuickPtr4+1
|
||||
bra .1
|
||||
jsr S.DiscardVarPtr1 Ptr1 -> ENVNAME
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
* S.FindVar
|
||||
* S.CheckSysVarPtr2
|
||||
* In:
|
||||
* ZPQuickPtr2 -> NAME
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* CC: Found
|
||||
* ZPQuickPtr1 -> NAME=VALUE
|
||||
* YA -> VALUE
|
||||
* CS: Not Found
|
||||
*--------------------------------------
|
||||
S.CheckSysVarPtr2
|
||||
lda (ZPQuickPtr2)
|
||||
cmp #1 is name 1 char?
|
||||
bne .9
|
||||
|
||||
ldy #1
|
||||
lda (ZPQuickPtr2),y
|
||||
cmp #'0' $0...$9 ??
|
||||
bcc .1 no,
|
||||
cmp #'9'+1
|
||||
bcs .99
|
||||
and #$0F
|
||||
jmp S.GetArgA
|
||||
|
||||
.1 cmp #'*' $* : All ARGS
|
||||
bne .9
|
||||
|
||||
cmp #'#' $# : ARGC
|
||||
bne .9
|
||||
|
||||
cmp #'?' $? : RC
|
||||
bne .9
|
||||
|
||||
cmp #'$' $$ : PID
|
||||
bne .9
|
||||
|
||||
.9 sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.FindVarPtr2
|
||||
* In:
|
||||
* ZPQuickPtr2 -> NAME
|
||||
* Out:
|
||||
* CC: Found
|
||||
* ZPQuickPtr1 -> ENV.NAME
|
||||
* ZPQuickPtr2 -> NAME
|
||||
* CS: Not Found
|
||||
* ZPQuickPtr1 -> PTR to Ending 0
|
||||
* ZPQuickPtr2 -> NAME
|
||||
*--------------------------------------
|
||||
S.FindVar ldy #S.PS.hENV
|
||||
S.FindVarPtr2 jsr S.InitEnvPtr1 Store ENV
|
||||
bcs .99
|
||||
|
||||
lda (ZPQuickPtr1)
|
||||
beq .9 end of ENV
|
||||
|
||||
.1 cmp (ZPQuickPtr2) Same len as NAME?
|
||||
bne .3
|
||||
|
||||
tay
|
||||
|
||||
.2 lda (ZPQuickPtr1),y
|
||||
cmp (ZPQuickPtr2),y
|
||||
bne .3
|
||||
dey
|
||||
bne .2
|
||||
clc
|
||||
rts
|
||||
|
||||
.3 jsr S.NextEnvPtr1 Skip NAME
|
||||
jsr S.NextEnvPtr1 Skip VALUE
|
||||
lda (ZPQuickPtr1)
|
||||
bne .1
|
||||
|
||||
.9 sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.DiscardVar
|
||||
* In:
|
||||
* ZPQuickPtr1 -> ENV.NAME to Discard
|
||||
*--------------------------------------
|
||||
S.DiscardVarPtr1
|
||||
lda ZPQuickPtr1 Discard current NAME & VALUE definition
|
||||
sec ZPQuickPtr1 -> NAME
|
||||
adc (ZPQuickPtr1) add NAME+1 to ZPQuickPtr1
|
||||
sta ZPQuickPtr4 store it in ZPQuickPtr4
|
||||
lda #0
|
||||
adc ZPQuickPtr1+1
|
||||
sta ZPQuickPtr4+1
|
||||
|
||||
lda ZPQuickPtr4 add VALUE+1 to ZPQuickPtr4
|
||||
sec
|
||||
adc (ZPQuickPtr4)
|
||||
sta ZPQuickPtr4
|
||||
bcc .1
|
||||
inc ZPQuickPtr4+1
|
||||
|
||||
.1 ldy #0
|
||||
|
||||
.2 lda (ZPQuickPtr4),y Move back tail...
|
||||
sta (ZPQuickPtr1),y
|
||||
beq .8 ...until we move ending 0
|
||||
iny
|
||||
bne .2
|
||||
inc ZPQuickPtr1+1
|
||||
inc ZPQuickPtr4+1
|
||||
bra .2
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
S.InitEnvPtr1 ldy #S.PS.hENV
|
||||
lda (pPs),y
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 Store ENV
|
||||
|
||||
.1 lda (ZPQuickPtr1)
|
||||
beq .9
|
||||
ldy #0
|
||||
.2 iny
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp #'=' End Of VAR Name ?
|
||||
beq .4
|
||||
.3 cmp (ZPQuickPtr2),y
|
||||
bne .7
|
||||
tya
|
||||
cmp (ZPQuickPtr2)
|
||||
bne .2
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp #'=' End Of VAR Name ?
|
||||
bne .3
|
||||
.4 dey
|
||||
tya
|
||||
cmp (ZPQuickPtr2) Y = VAR Name Len ?
|
||||
beq .8 yes, found VAR
|
||||
.7 lda (ZPQuickPtr1) no, go to next NAME=VALUE
|
||||
sec
|
||||
adc ZPQuickPtr1
|
||||
sta ZPQuickPtr1
|
||||
bcc .1
|
||||
inc ZPQuickPtr1+1
|
||||
bra .1
|
||||
.8 clc
|
||||
rts
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.NextEnvPtr1 lda ZPQuickPtr1
|
||||
sec
|
||||
adc (ZPQuickPtr1)
|
||||
sta ZPQuickPtr1
|
||||
bcc .8
|
||||
inc ZPQuickPtr1+1
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.ENV
|
||||
|
|
|
@ -31,75 +31,107 @@ S.CheckPrefixYA >STYA MLICALL.PARAMS+1
|
|||
*--------------------------------------
|
||||
* S.FileSearch
|
||||
* in :
|
||||
* PULLB = hMem to Search Path (PSTRING) %LIB%;/SYS/SLIB
|
||||
* PULLB = hMem to File Name (PSTRING)
|
||||
* PULLW = PSTR to File Name (PSTRING)
|
||||
* PULLW = PSTR to Search Path (PSTRING) %LIB%;/SYS/SLIB
|
||||
* out :
|
||||
* A = hMem of FilePath (PSTRING)
|
||||
* Y,A = PSTR to FilePath (PSTRING)
|
||||
* X = hMem to FilePath
|
||||
*--------------------------------------
|
||||
S.FileSearch >PULLA Get Search path
|
||||
jsr S.ExpandPStrA Expand it
|
||||
bcc .10
|
||||
pha save error code
|
||||
>PULLA discard file name
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
|
||||
.10 sta S.FileSearch.hSrch Store Expanded path list to search
|
||||
|
||||
>PULLB S.FileSearch.hFile Store Filename
|
||||
|
||||
lda #1
|
||||
sta S.FileSearch.Idx Start At Token 1
|
||||
|
||||
.1 >PUSHB S.FileSearch.hSrch push expanded path list
|
||||
>PUSHBI ';'
|
||||
>PUSHB S.FileSearch.Idx Push Token IDX
|
||||
|
||||
jsr S.PStrGetTkn Get token in A
|
||||
bcs .98
|
||||
|
||||
sta S.FileSearch.hPath Store Token path
|
||||
>PUSHB S.FileSearch.hFile push filename
|
||||
>PUSHB S.FileSearch.hPath Push Token path
|
||||
jsr S.PStrCat
|
||||
bcs .97
|
||||
|
||||
sta S.FileSearch.hFull Store Full path (Token Path+filename)
|
||||
S.FileSearch >PULLW ZPQuickPtr4 ZPQuickPtr1 trashed by ExpandPStrYA
|
||||
>PULLYA Get Search list
|
||||
jsr S.ExpandPStrYA Expand it
|
||||
bcs .99
|
||||
|
||||
jsr S.GetMemPtrA
|
||||
stx S.FileSearch.hSrch
|
||||
>STYA ZPQuickPtr2 expanded search list ;
|
||||
|
||||
stz S.FileSearch.Index
|
||||
|
||||
.1 stz KrnBuffer256 reset String
|
||||
ldx #0
|
||||
|
||||
ldy S.FileSearch.Index
|
||||
|
||||
.2 tya
|
||||
cmp (ZPQuickPtr2) end of src string ?
|
||||
beq .3 end of string, try it....
|
||||
iny
|
||||
lda (ZPQuickPtr2),y
|
||||
cmp #';'
|
||||
beq .3
|
||||
inx
|
||||
sta KrnBuffer256,x
|
||||
bra .2
|
||||
|
||||
.3 txa
|
||||
beq .98 String is empty....nothing to try
|
||||
|
||||
sty S.FileSearch.Index save current index
|
||||
|
||||
ldy #0
|
||||
|
||||
.4 iny
|
||||
lda (ZPQuickPtr4),y Append Fiename...
|
||||
inx
|
||||
sta KrnBuffer256,x
|
||||
tya
|
||||
cmp (ZPQuickPtr4)
|
||||
bne .4
|
||||
|
||||
stx KrnBuffer256 set string length
|
||||
|
||||
>LDYAI KrnBuffer256
|
||||
jsr S.MLIGetFileInfoYA
|
||||
bcc .8
|
||||
bcs .1 Failed...retry next path...
|
||||
|
||||
lda S.FileSearch.hFull Discard this Full Path
|
||||
lda S.FileSearch.hSrch Discard Expanded hSrch list
|
||||
jsr S.FreeMemA
|
||||
lda S.FileSearch.hPath Discard Token path
|
||||
jsr S.FreeMemA
|
||||
|
||||
inc S.FileSearch.Idx Try next Token
|
||||
bne .1
|
||||
|
||||
beq .98 go to discard Expanded path list
|
||||
|
||||
.97 lda S.FileSearch.hPath Discard Token path
|
||||
jsr S.FreeMemA
|
||||
|
||||
>LDYAI KrnBuffer256
|
||||
jmp S.NewPStrYA
|
||||
|
||||
.98 lda S.FileSearch.hSrch Discard Expanded hSrch list
|
||||
jsr S.FreeMemA
|
||||
lda #SYSMGR.ERRFNF
|
||||
sec
|
||||
rts
|
||||
|
||||
.8 jsr .97 Dicard all except Full Path
|
||||
lda S.FileSearch.hFull
|
||||
clc
|
||||
rts
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
S.FileSearch.File .BS 2
|
||||
S.FileSearch.hSrch .BS 1
|
||||
S.FileSearch.hFile .BS 1
|
||||
S.FileSearch.Idx .BS 1
|
||||
S.FileSearch.hPath .BS 1
|
||||
S.FileSearch.hFull .BS 1
|
||||
S.FileSearch.Index .BS 1
|
||||
*--------------------------------------
|
||||
* S.GetFullPathYA
|
||||
* in :
|
||||
* Y,A = Filename (PSTRING)
|
||||
* out :
|
||||
* Y,A = FullPath (PSTRING)
|
||||
* X = hMem of FullPath
|
||||
*--------------------------------------
|
||||
S.GetFullPathYA >STYA ZPQuickPtr3 Ptr1 & 2 used by StrCpy
|
||||
lda (ZPQuickPtr3)
|
||||
beq .9
|
||||
|
||||
stz KrnBuffer256
|
||||
|
||||
ldy #1
|
||||
lda (ZPQuickPtr3),y
|
||||
cmp #'/' full path starting with '/'?
|
||||
beq .1 yes, do not append to current prefix
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
jsr S.GetMemPtrA
|
||||
>PUSHYA
|
||||
>PUSHWI KrnBuffer256
|
||||
jsr S.PStrCpy
|
||||
|
||||
.1 >PUSHW ZPQuickPtr3
|
||||
>PUSHWI KrnBuffer256
|
||||
jsr S.PStrCat
|
||||
|
||||
>LDYAI KrnBuffer256
|
||||
jmp S.NewPStrYA
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.LoadFileYA
|
||||
* in :
|
||||
|
@ -108,12 +140,9 @@ S.FileSearch.hFull .BS 1
|
|||
* Y,A = File Length
|
||||
* X = hMem of Loaded File
|
||||
*--------------------------------------
|
||||
S.LoadFileYA jsr S.ExpandPStrYA
|
||||
sta S.LoadFile.hExp
|
||||
jsr S.GetMemPtrA
|
||||
jsr S.MLIOpenYA
|
||||
S.LoadFileYA jsr S.MLIOpenYA
|
||||
bcc .10
|
||||
jmp .99
|
||||
rts
|
||||
|
||||
.10 sta S.LoadFile.hRef save ref_num
|
||||
stx S.LoadFile.hBuf save Prodos Buffer for freemem
|
||||
|
@ -132,25 +161,16 @@ S.LoadFileYA jsr S.ExpandPStrYA
|
|||
jsr S.GetMem
|
||||
bcs .98
|
||||
|
||||
phy save Ptr
|
||||
pha
|
||||
>STYA S.LoadFile.Mem
|
||||
|
||||
stx S.LoadFile.hMem save Segment hMem
|
||||
>PUSHW S.LoadFile.Len Push Length for S.MLIRead
|
||||
pla restore Dest PTR
|
||||
ply
|
||||
>PUSHYA and push for S.MLIRead
|
||||
>PUSHW S.LoadFile.Mem Push PTR
|
||||
>PUSHB S.LoadFile.hRef Push ref_num
|
||||
jsr S.MLIRead
|
||||
bcs .97
|
||||
|
||||
lda S.LoadFile.hRef
|
||||
jsr S.MLICloseA
|
||||
|
||||
lda S.LoadFile.hBuf
|
||||
jsr S.FreeMemA Discard ProDOS IO Buffer
|
||||
|
||||
lda S.LoadFile.hExp Discard Expanded String
|
||||
jsr S.FreeMemA
|
||||
jsr .98 Close File....
|
||||
|
||||
>LDYA S.LoadFile.Len Return File Length...
|
||||
ldx S.LoadFile.hMem ...and hMem to Caller
|
||||
|
@ -169,17 +189,13 @@ S.LoadFileYA jsr S.ExpandPStrYA
|
|||
jsr S.FreeMemA ProDOS IO Buffer
|
||||
pla
|
||||
|
||||
.99 pha
|
||||
lda S.LoadFile.hExp
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
sec
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.LoadFile.hRef .BS 1
|
||||
S.LoadFile.hBuf .BS 1
|
||||
S.LoadFile.hExp .BS 1
|
||||
S.LoadFile.hMem .BS 1
|
||||
S.LoadFile.Mem .BS 2
|
||||
S.LoadFile.Len .BS 2
|
||||
*--------------------------------------
|
||||
* S.ListDirInitYA
|
||||
|
@ -229,6 +245,8 @@ S.ListDirInitYA >STYA R.BX Store path
|
|||
>LDYA R.BX
|
||||
jsr S.NewPStrYA
|
||||
bcs .99
|
||||
|
||||
txa
|
||||
ldy #S.LISTDIR.hPATH
|
||||
sta (R.CX),y
|
||||
|
||||
|
|
|
@ -32,9 +32,10 @@ A2osX.GP.Start jmp (KERNEL.SYSCALL,x)
|
|||
jmp BrkHandler
|
||||
.BS $BE10-*
|
||||
*--------------------------------------
|
||||
jmp (pDev) pDevJmp
|
||||
jmp (pCode) pCodeJmp
|
||||
jmp (pLib) pLibJmp
|
||||
jmp (pDrv) pDrvJmp
|
||||
jmp (pDev) pDevJmp
|
||||
.BS $BE20-*
|
||||
*--------------------------------------
|
||||
GO.Reset jsr GO.AUXLC
|
||||
|
|
|
@ -139,50 +139,45 @@ S.TskMgrInit stz TSKMGR.LASTID
|
|||
>PUSHWI K.ENV.SIZE get a buffer for ENV
|
||||
>PUSHBI S.MEM.F.INIT0 make sure blank
|
||||
>SYSCALL SYS.GetMem create it...
|
||||
bcs *
|
||||
bcs .9
|
||||
|
||||
txa
|
||||
ldy #S.PS.hENV
|
||||
sta (pPs),y
|
||||
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.MLIGetPrefixYA
|
||||
bcs *
|
||||
bcs .9
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bcs *
|
||||
bcs .9
|
||||
|
||||
txa
|
||||
ldy #S.PS.hPREFIX
|
||||
sta (pPs),y
|
||||
|
||||
>PUSHWI TmpBuffer256 push ENV value
|
||||
>PUSHWI I.ENV.A2osX push ENV name
|
||||
>SYSCALL SYS.SetEnvVarP
|
||||
>SYSCALL SYS.SetEnv
|
||||
bcs .9
|
||||
|
||||
>PUSHWI I.ENV.PATH.VAL
|
||||
>PUSHWI I.ENV.PATH
|
||||
>SYSCALL SYS.SetEnvVarP
|
||||
>LDYAI I.ENV.PATH
|
||||
>SYSCALL SYS.PutEnvYA
|
||||
bcs .9
|
||||
|
||||
>PUSHWI I.ENV.LIB.VAL
|
||||
>PUSHWI I.ENV.LIB
|
||||
>SYSCALL SYS.SetEnvVarP
|
||||
>LDYAI I.ENV.LIB
|
||||
>SYSCALL SYS.PutEnvYA
|
||||
bcs .9
|
||||
|
||||
>PUSHWI I.ENV.DRV.VAL
|
||||
>PUSHWI I.ENV.DRV
|
||||
>SYSCALL SYS.SetEnvVarP
|
||||
>LDYAI I.ENV.DRV
|
||||
>SYSCALL SYS.PutEnvYA
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
I.ENV.A2osX >PSTRING "A2OSX"
|
||||
I.ENV.PATH >PSTRING "PATH"
|
||||
I.ENV.PATH.VAL >PSTRING "${A2OSX}SBIN/;${A2OSX}BIN/"
|
||||
I.ENV.LIB >PSTRING "LIB"
|
||||
I.ENV.LIB.VAL >PSTRING "${A2OSX}LIB/"
|
||||
I.ENV.DRV >PSTRING "DRV"
|
||||
I.ENV.DRV.VAL >PSTRING "${A2OSX}DRV/"
|
||||
I.ENV.PATH >PSTRING "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
|
||||
I.ENV.LIB >PSTRING "LIB=${A2OSX}LIB/"
|
||||
I.ENV.DRV >PSTRING "DRV=${A2OSX}DRV/"
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.INIT
|
||||
|
|
|
@ -17,31 +17,31 @@ KERNEL.SYSCALL .DA S.GetMem $00
|
|||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.NewPStrYA $10
|
||||
.DA 0
|
||||
.DA S.PStrCpy
|
||||
.DA S.PStrCat
|
||||
.DA S.PStrUprYA
|
||||
.DA 0
|
||||
.DA S.PStrGetTkn
|
||||
.DA 0
|
||||
.DA S.GetArgCount
|
||||
.DA S.GetArgA
|
||||
.DA S.PStr2StrArrayYA
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA 0 $20
|
||||
.DA S.LoadDrvYA $20
|
||||
.DA S.LoadLibYA
|
||||
.DA S.UnloadLibA
|
||||
.DA S.LoadDrvA
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.ExpandPStrA $30
|
||||
.DA 0 $30
|
||||
.DA S.ExpandPStrYA
|
||||
.DA S.GetArgC
|
||||
.DA S.GetArgA
|
||||
.DA S.PutEnvYA
|
||||
.DA S.GetEnvVarYA
|
||||
.DA S.SetEnvVarH
|
||||
.DA S.SetEnvVarP
|
||||
.DA S.DelEnvVarA
|
||||
.DA S.DelEnvVarYA
|
||||
.DA S.SetEnv
|
||||
.DA S.GetEnvYA
|
||||
.DA S.UnsetEnvYA
|
||||
*--------------------------------------
|
||||
.DA S.MLICreateFile $40
|
||||
.DA 0
|
||||
|
@ -99,7 +99,7 @@ KERNEL.SYSCALL .DA S.GetMem $00
|
|||
*--------------------------------------
|
||||
.DA S.CheckPrefixYA $A0
|
||||
.DA S.FileSearch
|
||||
.DA 0
|
||||
.DA S.GetFullPathYA
|
||||
.DA S.LoadFileYA
|
||||
.DA 0
|
||||
.DA S.ListDirInitYA
|
||||
|
|
|
@ -11,45 +11,24 @@ AUTO 6
|
|||
* out :
|
||||
* A = hMem To loaded LIB
|
||||
*--------------------------------------
|
||||
S.LoadLibYA jsr S.NewPStrYA
|
||||
bcs .99
|
||||
|
||||
sta S.LoadLibYA.hLibName save LibName hMem for discard
|
||||
jsr S.LoadLibA
|
||||
|
||||
php save error status
|
||||
pha save error code/hMem
|
||||
lda S.LoadLibYA.hLibName
|
||||
jsr S.FreeMemA discard STR hMem
|
||||
pla get back error code/hMem
|
||||
plp ..and error status
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
S.LoadLibYA.hLibName .BS 1
|
||||
*--------------------------------------
|
||||
* S.LoadLibA
|
||||
* in :
|
||||
* A = hMem To Lib Name
|
||||
* out :
|
||||
* A = hMem of Loaded Lib
|
||||
*--------------------------------------
|
||||
S.LoadLibA sta S.LoadLibA.hName save libname for S.FileSearch
|
||||
|
||||
S.LoadLibYA >STYA S.LoadLib.Name save libname for S.FileSearch
|
||||
>LDYAI ENV.LIB push ENVNAME=LIB
|
||||
jsr S.GetEnvVarYA get value for ENV=LIB
|
||||
jsr S.GetEnvYA get value for ENV=LIB
|
||||
bcs .99
|
||||
|
||||
sta S.LoadLibA.hSrch save hMem to LIB VALUE
|
||||
>PUSHYA Push $LIB value
|
||||
|
||||
>PUSHB S.LoadLibA.hName
|
||||
>PUSHB S.LoadLibA.hSrch
|
||||
>PUSHW S.LoadLib.Name
|
||||
|
||||
jsr S.FileSearch find libname in $LIB
|
||||
bcs .99
|
||||
|
||||
stx S.LoadLib.hFullName
|
||||
|
||||
jsr S.LoadBinYA Y,A = filename full path
|
||||
bcs .98
|
||||
|
||||
sta S.LoadLibA.hPath
|
||||
jsr S.LoadBinA A = hMem of filename full path
|
||||
bcs .97
|
||||
stx S.LoadLibA.hMem
|
||||
stx S.LoadLib.hMem
|
||||
>STYA pLib
|
||||
|
||||
ldx #LIBMGR.LOAD
|
||||
|
@ -57,28 +36,28 @@ S.LoadLibA sta S.LoadLibA.hName save libname for S.FileSearch
|
|||
|
||||
bcs .97
|
||||
|
||||
jsr .97
|
||||
jsr .98 Cleanup...
|
||||
|
||||
lda S.LoadLibA.hMem
|
||||
lda S.LoadLib.hMem
|
||||
clc
|
||||
rts
|
||||
|
||||
.97 pha
|
||||
lda S.LoadLibA.hPath discard LIB PATH
|
||||
lda S.LoadLib.hMem
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.98 pha
|
||||
lda S.LoadLibA.hSrch discard LIB VALUE
|
||||
lda S.LoadLib.hFullName
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
S.LoadLibA.hName .BS 1
|
||||
S.LoadLibA.hSrch .BS 1
|
||||
S.LoadLibA.hPath .BS 1
|
||||
S.LoadLibA.hMem .BS 1
|
||||
S.LoadLib.Name .BS 2
|
||||
S.LoadLib.hFullName .BS 1
|
||||
S.LoadLib.hMem .BS 1
|
||||
*--------------------------------------
|
||||
* S.UnloadLibA
|
||||
* in :
|
||||
|
|
|
@ -8,10 +8,10 @@ AUTO 6
|
|||
* !!!!!!!! DO NOT USE VCPU16 !!!!!!!!
|
||||
* !!!!!! DO NOT USE ZPQuickPTRs !!!!!
|
||||
*--------------------------------------
|
||||
ZPMemMgrSPtr .EQ ZPMemMgr Pointer To Slot selected
|
||||
ZPMemMgrTmp1 .EQ ZPMemMgr+2
|
||||
ZPMemMgrTmp2 .EQ ZPMemMgr+4
|
||||
ZPMemMgrTmp3 .EQ ZPMemMgr+6
|
||||
ZPMemMgrSPtr .EQ ZPMEMMGR Pointer To Slot selected
|
||||
ZPMemMgrTmp1 .EQ ZPMEMMGR+2
|
||||
ZPMemMgrTmp2 .EQ ZPMEMMGR+4
|
||||
ZPMemMgrTmp3 .EQ ZPMEMMGR+6
|
||||
*--------------------------------------
|
||||
* TODO :
|
||||
* - Create a 256 bytes table
|
||||
|
|
|
@ -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
|
|
@ -5,125 +5,7 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* S.BinRelocateYA :
|
||||
* YA = Ptr to Code
|
||||
* R.AX = Code Length
|
||||
* R.BX = Range Start address to relocate
|
||||
* R.CX = Range End address to relocate
|
||||
* R.DX = offset to apply to all abs addresses between R.BX and R.CX
|
||||
*--------------------------------------
|
||||
S.BinRelocateYA >STYA ZPQuickPtr1
|
||||
|
||||
ldy #H.BIN.JMP relocate Main JMP
|
||||
lda (ZPQuickPtr1),y
|
||||
clc
|
||||
adc R.DL
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
adc R.DH
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
|
||||
bra S.JmpRelocate
|
||||
|
||||
S.DrvRelocateYA >STYA ZPQuickPtr1
|
||||
|
||||
ldy #0
|
||||
|
||||
S.JmpRelocate lda (ZPQuickPtr1),y Start Relocate JMP table
|
||||
tax
|
||||
iny
|
||||
ora (ZPQuickPtr1),y
|
||||
beq S.CodeRelocate $0000 = end of table
|
||||
|
||||
dey
|
||||
txa
|
||||
clc
|
||||
adc R.DL
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
adc R.DH
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
iny
|
||||
|
||||
bra S.JmpRelocate
|
||||
|
||||
S.CodeRelocate lda ZPQuickPtr1
|
||||
clc
|
||||
adc R.AL Make ZPQuickPtr2=End of code
|
||||
sta ZPQuickPtr2 =ZPQuickPtr1+AX (code len)
|
||||
lda ZPQuickPtr1+1
|
||||
adc R.AH
|
||||
sta ZPQuickPtr2+1
|
||||
|
||||
iny
|
||||
tya add current offset in Y to Ptr
|
||||
clc
|
||||
adc ZPQuickPtr1
|
||||
sta ZPQuickPtr1
|
||||
bcc .5
|
||||
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
|
||||
clc
|
||||
|
||||
.5 lda (ZPQuickPtr1) get OPCODE
|
||||
tax
|
||||
lda OPCODES,x get OPCODE definition
|
||||
bpl .7 abs addressing?
|
||||
|
||||
and #3 save Opcode length...
|
||||
pha
|
||||
|
||||
ldy #1
|
||||
lda (ZPQuickPtr1),y Get LO
|
||||
sec
|
||||
sbc R.BL
|
||||
iny
|
||||
lda (ZPQuickPtr1),y Get HI
|
||||
sbc R.BH
|
||||
bcc .6 addr < AX, out of range
|
||||
|
||||
dey
|
||||
lda (ZPQuickPtr1),y Get LO
|
||||
sec
|
||||
sbc R.CL
|
||||
iny
|
||||
lda (ZPQuickPtr1),y Get HI
|
||||
sbc R.CH
|
||||
bcs .6 addr > CX, out of range
|
||||
|
||||
dey
|
||||
lda (ZPQuickPtr1),y Get LO
|
||||
clc
|
||||
adc R.DL add DX to abs address
|
||||
sta (ZPQuickPtr1),y store relocated addr LO
|
||||
iny
|
||||
lda (ZPQuickPtr1),y Get HI
|
||||
adc R.DH
|
||||
sta (ZPQuickPtr1),y store relocated addr HI
|
||||
|
||||
.6 pla
|
||||
|
||||
.7 clc A = OPCODE length
|
||||
adc ZPQuickPtr1
|
||||
sta ZPQuickPtr1
|
||||
bcc .8
|
||||
inc ZPQuickPtr1+1
|
||||
|
||||
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
|
||||
sec
|
||||
sbc ZPQuickPtr2
|
||||
lda ZPQuickPtr1+1
|
||||
sbc ZPQuickPtr2+1
|
||||
bcc .5 yes, continue relocating
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.InsDrv
|
||||
* pDrv = .DRV File Loaded Address
|
||||
*--------------------------------------
|
||||
S.InsDrv ldy #H.BIN.DRV.CODE.LEN
|
||||
|
@ -136,28 +18,28 @@ S.InsDrv ldy #H.BIN.DRV.CODE.LEN
|
|||
ldy #H.BIN.DRV.CODE.O
|
||||
lda (pDrv),y
|
||||
clc
|
||||
adc S.LoadBinA.AuxType
|
||||
adc S.LoadBin.AuxType
|
||||
sta R.BL
|
||||
iny
|
||||
lda (pDrv),y
|
||||
adc S.LoadBinA.AuxType+1
|
||||
adc S.LoadBin.AuxType+1
|
||||
sta R.BH set BX=End Of Code
|
||||
|
||||
lda S.LoadBinA.AuxType
|
||||
lda S.LoadBin.AuxType
|
||||
clc
|
||||
adc S.LoadBinA.FileLen
|
||||
adc S.LoadBin.FileLen
|
||||
sta R.CL
|
||||
lda S.LoadBinA.AuxType+1
|
||||
adc S.LoadBinA.FileLen+1
|
||||
lda S.LoadBin.AuxType+1
|
||||
adc S.LoadBin.FileLen+1
|
||||
sta R.CH set CX=End Of Range
|
||||
|
||||
ldy #H.BIN.DRV.CODE.O
|
||||
lda S.LoadBinA.FileLen
|
||||
lda S.LoadBin.FileLen
|
||||
sec
|
||||
sbc (pDrv),y
|
||||
sta S.InsDrv.DRVLen
|
||||
iny
|
||||
lda S.LoadBinA.FileLen+1
|
||||
lda S.LoadBin.FileLen+1
|
||||
sbc (pDrv),y
|
||||
sta S.InsDrv.DRVLen+1 Compute DRV Len
|
||||
|
||||
|
@ -313,6 +195,125 @@ S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O
|
|||
S.InsDrv.DrvLen .BS 2
|
||||
S.InsDrv.DrvEnd .BS 2
|
||||
*--------------------------------------
|
||||
* S.BinRelocateYA :
|
||||
* YA = Ptr to Code
|
||||
* R.AX = Code Length
|
||||
* R.BX = Range Start address to relocate
|
||||
* R.CX = Range End address to relocate
|
||||
* R.DX = offset to apply to all abs addresses between R.BX and R.CX
|
||||
*--------------------------------------
|
||||
S.BinRelocateYA >STYA ZPQuickPtr1
|
||||
|
||||
ldy #H.BIN.JMP relocate Main JMP
|
||||
lda (ZPQuickPtr1),y
|
||||
clc
|
||||
adc R.DL
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
adc R.DH
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
|
||||
bra S.JmpRelocate
|
||||
|
||||
S.DrvRelocateYA >STYA ZPQuickPtr1
|
||||
|
||||
ldy #0
|
||||
|
||||
S.JmpRelocate lda (ZPQuickPtr1),y Start Relocate JMP table
|
||||
tax
|
||||
iny
|
||||
ora (ZPQuickPtr1),y
|
||||
beq S.CodeRelocate $0000 = end of table
|
||||
|
||||
dey
|
||||
txa
|
||||
clc
|
||||
adc R.DL
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
adc R.DH
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
iny
|
||||
|
||||
bra S.JmpRelocate
|
||||
|
||||
S.CodeRelocate lda ZPQuickPtr1
|
||||
clc
|
||||
adc R.AL Make ZPQuickPtr2=End of code
|
||||
sta ZPQuickPtr2 =ZPQuickPtr1+AX (code len)
|
||||
lda ZPQuickPtr1+1
|
||||
adc R.AH
|
||||
sta ZPQuickPtr2+1
|
||||
|
||||
iny
|
||||
tya add current offset in Y to Ptr
|
||||
clc
|
||||
adc ZPQuickPtr1
|
||||
sta ZPQuickPtr1
|
||||
bcc .5
|
||||
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
|
||||
clc
|
||||
|
||||
.5 lda (ZPQuickPtr1) get OPCODE
|
||||
tax
|
||||
lda OPCODES,x get OPCODE definition
|
||||
bpl .7 abs addressing?
|
||||
|
||||
and #3 save Opcode length...
|
||||
pha
|
||||
|
||||
ldy #1
|
||||
lda (ZPQuickPtr1),y Get LO
|
||||
sec
|
||||
sbc R.BL
|
||||
iny
|
||||
lda (ZPQuickPtr1),y Get HI
|
||||
sbc R.BH
|
||||
bcc .6 addr < AX, out of range
|
||||
|
||||
dey
|
||||
lda (ZPQuickPtr1),y Get LO
|
||||
sec
|
||||
sbc R.CL
|
||||
iny
|
||||
lda (ZPQuickPtr1),y Get HI
|
||||
sbc R.CH
|
||||
bcs .6 addr > CX, out of range
|
||||
|
||||
dey
|
||||
lda (ZPQuickPtr1),y Get LO
|
||||
clc
|
||||
adc R.DL add DX to abs address
|
||||
sta (ZPQuickPtr1),y store relocated addr LO
|
||||
iny
|
||||
lda (ZPQuickPtr1),y Get HI
|
||||
adc R.DH
|
||||
sta (ZPQuickPtr1),y store relocated addr HI
|
||||
|
||||
.6 pla
|
||||
|
||||
.7 clc A = OPCODE length
|
||||
adc ZPQuickPtr1
|
||||
sta ZPQuickPtr1
|
||||
bcc .8
|
||||
inc ZPQuickPtr1+1
|
||||
|
||||
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
|
||||
sec
|
||||
sbc ZPQuickPtr2
|
||||
lda ZPQuickPtr1+1
|
||||
sbc ZPQuickPtr2+1
|
||||
bcc .5 yes, continue relocating
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* 65C02 OPCODES
|
||||
* Bit 7 : 1 absolute addressing
|
||||
* Bit 1-0 : opcode + @ length
|
||||
|
|
|
@ -7,9 +7,10 @@ AUTO 6
|
|||
*--------------------------------------
|
||||
* S.NewPStrYA
|
||||
* IN:
|
||||
* PULLW = PTR to buffer
|
||||
* Y,A = PTR to buffer
|
||||
* OUT:
|
||||
* A = hMem to S (PSTRING)
|
||||
* Y,A = PTR to String
|
||||
* X = hMem (PSTRING)
|
||||
*--------------------------------------
|
||||
S.NewPStrYA >STYA ZPQuickPtr1
|
||||
lda (ZPQuickPtr1)
|
||||
|
@ -17,73 +18,103 @@ S.NewPStrYA >STYA ZPQuickPtr1
|
|||
tay
|
||||
lda #0 Y,A = len of new string
|
||||
>PUSHYA
|
||||
>PUSHA 0 = no option
|
||||
>PUSHBI 0 0 = no option
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
phx
|
||||
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
jsr S.PStrCpyPtr1Ptr2
|
||||
|
||||
>LDYA ZPQuickPtr2
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrCpy
|
||||
* IN:
|
||||
* PULLW = PSTR to DST (PSTRING)
|
||||
* PULLW = PSTR to SRC (PSTRING)
|
||||
* OUT:
|
||||
* DST = SRC (PSTRING)
|
||||
*--------------------------------------
|
||||
S.PStrCpy >PULLW ZPQuickPtr2 save DST
|
||||
>PULLW ZPQuickPtr1 save SRC
|
||||
|
||||
S.PStrCpyPtr1Ptr2
|
||||
lda (ZPQuickPtr1)
|
||||
sta (ZPQuickPtr2)
|
||||
tay
|
||||
beq .2
|
||||
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2),y
|
||||
dey
|
||||
bne .1
|
||||
.2 pla
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
|
||||
.2 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrCat
|
||||
* IN:
|
||||
* PULLB = hMem to S1 (PSTRING)
|
||||
* PULLB = hMem to S2 (PSTRING)
|
||||
* PULLW = PSTR to DST (PSTRING)
|
||||
* PULLW = PSTR to SRC (PSTRING)
|
||||
* OUT:
|
||||
* A = hMem to S1+S2 (PSTRING)
|
||||
* DST = DST+SRC (PSTRING)
|
||||
*--------------------------------------
|
||||
S.PStrCat >PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1 save S1
|
||||
>PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr2 save S2
|
||||
lda (ZPQuickPtr1) Compute length of new path = S1 + S2 + 1
|
||||
sec
|
||||
adc (ZPQuickPtr2)
|
||||
tay
|
||||
lda #0 Y,A = len of new string
|
||||
>PUSHYA
|
||||
>PUSHA 0 = no option
|
||||
jsr S.GetMem
|
||||
bcs .9 OOM error
|
||||
>STYA ZPQuickPtr3
|
||||
phx save New hMem
|
||||
S.PStrCat >PULLW ZPQuickPtr2 save DST
|
||||
>PULLW ZPQuickPtr1 save SRC
|
||||
|
||||
lda (ZPQuickPtr1)
|
||||
tax
|
||||
ldy #0
|
||||
.2 iny
|
||||
lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr3),y
|
||||
dex
|
||||
|
||||
lda (ZPQuickPtr2)
|
||||
tay
|
||||
|
||||
.1 cpy #255
|
||||
beq .8
|
||||
|
||||
iny
|
||||
|
||||
inc ZPQuickPtr1
|
||||
bne .2
|
||||
lda (ZPQuickPtr2)
|
||||
tax
|
||||
.3 inc ZPQuickPtr2
|
||||
bne .4
|
||||
inc ZPQuickPtr2+1
|
||||
.4 iny
|
||||
lda (ZPQuickPtr2)
|
||||
sta (ZPQuickPtr3),y
|
||||
inc ZPQuickPtr1+1
|
||||
|
||||
.2 lda (ZPQuickPtr1)
|
||||
sta (ZPQuickPtr2),y
|
||||
dex
|
||||
bne .3
|
||||
tya
|
||||
sta (ZPQuickPtr3)
|
||||
pla returns A = new hMem
|
||||
bne .1
|
||||
|
||||
.8 tya
|
||||
sta (ZPQuickPtr2)
|
||||
clc
|
||||
rts
|
||||
.9 sec
|
||||
*--------------------------------------
|
||||
* S.PStrUpr
|
||||
* IN:
|
||||
* Y,A = PTR to String (PSTRING)
|
||||
* OUT:
|
||||
* Uppercased String in Buffer
|
||||
*--------------------------------------
|
||||
S.PStrUprYA >STYA ZPQuickPtr1
|
||||
|
||||
lda (ZPQuickPtr1)
|
||||
tay
|
||||
|
||||
.1 lda (ZPQuickPtr1),y convert to UPPERCASE
|
||||
cmp #'a'
|
||||
bcc .2
|
||||
cmp #'z'+1
|
||||
bcs .2
|
||||
eor #$20
|
||||
sta (ZPQuickPtr1),y
|
||||
.2 dey
|
||||
bne .1
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrMatch
|
||||
|
@ -160,158 +191,81 @@ S.PStrMatch >PULLW ZPQuickPtr2 pull String
|
|||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PStrGetTkn
|
||||
* IN:
|
||||
* PULLB = Token IDX
|
||||
* 0: "Split mode": first token + remaining
|
||||
* !0: "Std Mode": Return token #
|
||||
* PULLB = SEP char
|
||||
* PULLB = hMem to PSTRING
|
||||
* OUT:
|
||||
* A = hMem to Token (PSTRING)
|
||||
* X = hMem to Remaining String After Token "Split Mode"
|
||||
* S.PStr2StrArrayYA
|
||||
* In :
|
||||
* Y,A = PTR to String
|
||||
* Out :
|
||||
* Y,A = PTR to StrArray
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
S.PStrGetTkn >PULLA Get IDX
|
||||
sta S.PStrGetTkn.IDX
|
||||
>PULLA Get SEP
|
||||
sta S.PStrGetTkn.SEP
|
||||
>PULLA Get PStr
|
||||
jsr S.GetMemPtrA
|
||||
S.PStr2StrArrayYA
|
||||
>STYA ZPQuickPtr1
|
||||
lda (ZPQuickPtr1) Get mem size STRLEN+1
|
||||
ldx #0
|
||||
inc
|
||||
bne .1
|
||||
inx
|
||||
|
||||
S.PStrGetTkn1 ldx #0 init token count to 0
|
||||
ldy #0
|
||||
stz S.PStrGetTkn.START init INTOKEN start to 0
|
||||
.1 iny
|
||||
lda (ZPQuickPtr1),y
|
||||
and #$7F
|
||||
cmp S.PStrGetTkn.SEP char=SEP ?
|
||||
bne .3 no, start a new token if not alredy in
|
||||
lda S.PStrGetTkn.START SEP:in INTOKEN ?
|
||||
beq .4 no, skip this SEP
|
||||
inx yes, increase token count
|
||||
lda S.PStrGetTkn.IDX requested token=0 ?
|
||||
beq .71 yes, we are in "split mode"
|
||||
cpx S.PStrGetTkn.IDX no,is current X=requested IDX?
|
||||
beq .71
|
||||
stz S.PStrGetTkn.START reset in INTOKEN start
|
||||
bra .4
|
||||
.3 lda S.PStrGetTkn.START char:already INTOKEN ?
|
||||
bne .4 yes, keep existing start index
|
||||
sty S.PStrGetTkn.START mark begining of token
|
||||
.4 tya
|
||||
cmp (ZPQuickPtr1) end of string ?
|
||||
bne .1 no, get next one
|
||||
lda S.PStrGetTkn.START INTOKEN?
|
||||
beq .6
|
||||
inx yes, last one is ending with string
|
||||
.6 lda S.PStrGetTkn.IDX split mode ?
|
||||
beq .7
|
||||
cpx S.PStrGetTkn.IDX is token = requested?
|
||||
beq .7
|
||||
sec End of String reached, no matching token
|
||||
.61 rts
|
||||
.1 >PUSHAX
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
phx save hMem
|
||||
phy save PTR.LO
|
||||
pha save PTR.HI
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
.71 dey move back yo end of token before this SEP
|
||||
.7 sty S.PStrGetTkn.END we have matching token (or 1st one in split mode) at [START,END]
|
||||
tya compute token len=Y-END
|
||||
sec
|
||||
sbc S.PStrGetTkn.START
|
||||
inc +1
|
||||
inc +1 for string len
|
||||
tay
|
||||
lda #0
|
||||
>PUSHYA Get a hMem for this token
|
||||
>PUSHA 0 = no option
|
||||
jsr S.GetMem
|
||||
bcs .61
|
||||
phx save hMem
|
||||
>STYA ZPQuickPtr2
|
||||
lda S.PStrGetTkn.END
|
||||
sec
|
||||
sbc S.PStrGetTkn.START
|
||||
inc
|
||||
sta (ZPQuickPtr2) set this string length
|
||||
ldy S.PStrGetTkn.START
|
||||
dey
|
||||
.8 iny
|
||||
inc ZPQuickPtr2
|
||||
bne .9
|
||||
inc ZPQuickPtr2+1
|
||||
.9 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2)
|
||||
cpy S.PStrGetTkn.END
|
||||
bne .8
|
||||
lda S.PStrGetTkn.IDX requested token=0 ?
|
||||
bne .87
|
||||
tya yes, we are in "split mode"
|
||||
cmp (ZPQuickPtr1) Remaining chars ?
|
||||
beq .87
|
||||
.10 iny move to next char
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp S.PStrGetTkn.SEP char=SEP?
|
||||
bne .11
|
||||
tya
|
||||
cmp (ZPQuickPtr1) last one ?
|
||||
bne .10
|
||||
bra .87 yes, nothing to return
|
||||
.11 sty S.PStrGetTkn.END S.PStrGetTkn.END=1st non SEP char
|
||||
lda (ZPQuickPtr1) compute reamining len=Y-ZPQuickPtr1+1
|
||||
sec
|
||||
sbc S.PStrGetTkn.END
|
||||
inc
|
||||
inc +1 for string len
|
||||
tay
|
||||
lda #0
|
||||
>PUSHYA Get a hMem for remaining string
|
||||
>PUSHA 0 = no option
|
||||
jsr S.GetMem
|
||||
bcs .98
|
||||
phx save hMem
|
||||
>STYA ZPQuickPtr2
|
||||
lda (ZPQuickPtr1)
|
||||
tax count in src string
|
||||
beq .8
|
||||
|
||||
ldy #0 reset index in dst token
|
||||
|
||||
.3 inc ZPQuickPtr1 get...
|
||||
bne .4
|
||||
inc ZPQuickPtr1+1
|
||||
.4 lda (ZPQuickPtr1) ...next char
|
||||
|
||||
cmp #' ' found a space ?
|
||||
bne .6
|
||||
|
||||
tya in a token ?
|
||||
beq .7 no, skip & go to next char
|
||||
|
||||
sta (ZPQuickPtr2) yes, set this token len
|
||||
sec
|
||||
sbcS.PStrGetTkn.END
|
||||
inc
|
||||
sta (ZPQuickPtr2)
|
||||
ldy S.PStrGetTkn.END
|
||||
dey
|
||||
.12 iny
|
||||
inc ZPQuickPtr2
|
||||
bne .13
|
||||
adc ZPQuickPtr2 advance to next token
|
||||
sta ZPQuickPtr2
|
||||
bcc .5
|
||||
inc ZPQuickPtr2+1
|
||||
.13 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2)
|
||||
tya
|
||||
cmp (ZPQuickPtr1)
|
||||
bne .12
|
||||
plx get back remaining string hMem
|
||||
pla get back token hMem
|
||||
clc
|
||||
rts
|
||||
|
||||
.87 ldx #0 Splitmode but no remaining string to return
|
||||
pla get back token hMem
|
||||
clc
|
||||
rts
|
||||
.5 ldy #0 reset index in dst token
|
||||
bra .7
|
||||
|
||||
.98 pla get back Token hMem
|
||||
jsr S.FreeMemA discard Token
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.PStrGetTkn.SEP .BS 1
|
||||
S.PStrGetTkn.IDX .BS 1
|
||||
S.PStrGetTkn.START .BS 1
|
||||
S.PStrGetTkn.END .BS 1
|
||||
*--------------------------------------
|
||||
S.GetArgCount
|
||||
.6 iny add char to token
|
||||
sta (ZPQuickPtr2),y
|
||||
|
||||
.7 dex end of src string?
|
||||
bne .3 no...next char...
|
||||
|
||||
tya yes, are we in a token ?
|
||||
beq .8
|
||||
|
||||
sta (ZPQuickPtr2) yes, set last token len
|
||||
sec
|
||||
adc ZPQuickPtr2 advance to next token
|
||||
sta ZPQuickPtr2
|
||||
bcc .8
|
||||
inc ZPQuickPtr2+1
|
||||
|
||||
.8 lda #0
|
||||
sta (ZPQuickPtr2) set Array Ending 0
|
||||
|
||||
pla get back PTR.HI
|
||||
ply get back PTR.LO
|
||||
plx get back hMem
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.GetArgA
|
||||
clc
|
||||
rts
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.STR
|
||||
|
|
|
@ -149,401 +149,6 @@ S.DispatchEvents
|
|||
S.TskMgrQuit clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
* S.ExecProcessNewEnvYA
|
||||
* S.ExecProcessYA (Blocking Parent PID)
|
||||
* S.CreateProcessNewEnvYA
|
||||
* S.CreateProcessYA (Non Blocking)
|
||||
* in :
|
||||
* A = hMem To Cmd Line
|
||||
* Y = hMem To Args
|
||||
* out :
|
||||
* A = Child PSID
|
||||
*--------------------------------------
|
||||
S.ExecProcessNewEnvYA
|
||||
ldx #S.PS.F.ENV
|
||||
.HS 2C bit abs
|
||||
S.ExecProcessYA ldx #0
|
||||
S.ExecProcess jsr S.CreateProcess
|
||||
bcs .9 terminated, do not set PID as HOLD
|
||||
|
||||
ldy #S.PS.CID
|
||||
sta (pPs),y
|
||||
|
||||
pha Save Child PID
|
||||
lda (pPs)
|
||||
ora #S.PS.F.HOLD
|
||||
sta (pPs)
|
||||
pla Get Back PID
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.CreateProcessNewEnvYA
|
||||
ldx #S.PS.F.ENV
|
||||
.HS 2C bit abs
|
||||
S.CreateProcessYA
|
||||
ldx #0
|
||||
S.CreateProcess stx S.CreateChildProcess.Flags
|
||||
sta S.CreateProcessA.Cmd
|
||||
sty S.CreateProcessA.Args
|
||||
|
||||
jsr S.CreateChildProcess
|
||||
bcs .99
|
||||
|
||||
sta S.CreateProcessA.CPSID
|
||||
jsr S.SelectProcessA
|
||||
|
||||
jsr S.InitProcess
|
||||
bcs .98 Init Failed or exit?
|
||||
|
||||
ldy #S.PS.PID switch back to Parent Process
|
||||
lda (pPs),y
|
||||
|
||||
jsr S.SelectProcessA
|
||||
|
||||
lda S.CreateProcessA.CPSID
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 pha save error code
|
||||
|
||||
ldy #S.PS.PID switch back to Parent Process
|
||||
lda (pPs),y
|
||||
jsr S.SelectProcessA
|
||||
|
||||
lda S.CreateProcessA.CPSID
|
||||
jsr S.FreeProcessA
|
||||
|
||||
pla get back error code
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.CreateProcessA.Cmd .BS 1
|
||||
S.CreateProcessA.Args .BS 1
|
||||
S.CreateProcessA.CPSID .BS 1
|
||||
*--------------------------------------
|
||||
* S.GetPSByIDA
|
||||
* In :
|
||||
* A = PID
|
||||
* Out :
|
||||
* Y,A = PTR to TSKSLOT
|
||||
*--------------------------------------
|
||||
S.GetPSByIDA sta S.GetPSByIDA.PS
|
||||
|
||||
>LDYAI TskMgr.Table
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
lda S.GetPSByIDA.PS
|
||||
beq .8
|
||||
|
||||
ldx #0
|
||||
|
||||
.1 inx
|
||||
lda ZPQuickPtr1
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta ZPQuickPtr1
|
||||
bcc .2
|
||||
inc ZPQuickPtr1+1
|
||||
|
||||
.2 lda (ZPQuickPtr1)
|
||||
bpl .3
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp S.GetPSByIDA.PS
|
||||
beq .8
|
||||
|
||||
.3 cpx TSKMGR.SIZE
|
||||
bne .1
|
||||
|
||||
.9 lda #TSKMGR.ERRNSP
|
||||
sec
|
||||
rts
|
||||
|
||||
.8 >LDYA ZPQuickPtr1
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.GetPSByIDA.PS .BS 1
|
||||
*--------------------------------------
|
||||
S.Sleep pla get PC LO
|
||||
sec
|
||||
sbc pCode
|
||||
ldy #S.PS.PC
|
||||
sta (pPs),y
|
||||
|
||||
pla get PC HI
|
||||
sbc pCode+1
|
||||
iny
|
||||
sta (pPs),y
|
||||
lda (pPs)
|
||||
ora #S.PS.F.SLEEP
|
||||
sta (pPs)
|
||||
clc No error,
|
||||
rts back to Kernel
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
* S.CreateChildProcess
|
||||
* in :
|
||||
* out :
|
||||
* A = PSID
|
||||
* we cannot use ZPQuickPtrs
|
||||
* because of calling S.NewPStrYA & S.DupEnvA
|
||||
*--------------------------------------
|
||||
S.CreateChildProcess
|
||||
>LDYAI TskMgr.Table+S.PS.SIZE
|
||||
>STYA R.AX
|
||||
|
||||
ldx #0
|
||||
|
||||
.1 inx
|
||||
cpx TSKMGR.SIZE
|
||||
beq .2
|
||||
|
||||
lda (R.AX) Found an empty slot
|
||||
bpl .3
|
||||
lda R.AL
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta R.AL
|
||||
bcc .1
|
||||
inc R.AH
|
||||
|
||||
bra .1
|
||||
|
||||
.2 cpx #K.PS.MAX
|
||||
bne .30
|
||||
|
||||
lda #TSKMGR.ERROOH
|
||||
sec
|
||||
rts
|
||||
|
||||
.30 inc TSKMGR.SIZE
|
||||
|
||||
.3 lda #S.PS.F.INUSE
|
||||
ora S.CreateChildProcess.Flags
|
||||
sta (R.AX)
|
||||
|
||||
.4 inc TSKMGR.LASTID Get a PSID not alredy running
|
||||
beq .4 not = 0
|
||||
lda TSKMGR.LASTID
|
||||
jsr S.GetPSByIDA
|
||||
bcc .4
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda TSKMGR.LASTID
|
||||
sta (R.AX),y
|
||||
|
||||
lda #0
|
||||
ldy #S.PS.hCS
|
||||
.5 sta (R.AX),y Blank Everything in this S.PS
|
||||
iny
|
||||
cpy #S.PS.SIZE
|
||||
bne .5
|
||||
|
||||
lda S.CreateChildProcess.Flags
|
||||
and #S.PS.F.ENV need to create ENV & Prefix ?
|
||||
beq .6
|
||||
|
||||
ldy #S.PS.hPREFIX copy hPREFIX...
|
||||
lda (pPs),y
|
||||
jsr S.GetMemPtrA
|
||||
jsr S.NewPStrYA
|
||||
bcs .99
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
sta (R.AX),y
|
||||
|
||||
ldy #S.PS.hENV ...and hENV from parent PS
|
||||
lda (pPs),y
|
||||
jsr S.DupEnvA
|
||||
bcs .99
|
||||
|
||||
ldy #S.PS.hENV
|
||||
sta (R.AX),y
|
||||
bra .8
|
||||
|
||||
.6 ldy #S.PS.hPREFIX reuse same hPREFIX...
|
||||
lda (pPs),y
|
||||
sta (R.AX),y
|
||||
|
||||
ldy #S.PS.hENV ...and hENV from parent PS
|
||||
lda (pPs),y
|
||||
sta (R.AX),y
|
||||
|
||||
.8 ldy #S.PS.hINDEV
|
||||
.81 lda (pPs),y
|
||||
sta (R.AX),y
|
||||
iny
|
||||
cpy #S.PS.hERRDEV+1
|
||||
bne .81
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (pPs),y
|
||||
|
||||
ldy #S.PS.PID
|
||||
sta (R.AX),y
|
||||
|
||||
lda TSKMGR.LASTID
|
||||
clc Exit with A=PSID
|
||||
rts
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.CreateChildProcess.Flags
|
||||
.BS 1
|
||||
*--------------------------------------
|
||||
* S.InitProcess
|
||||
* In :
|
||||
* A = hMem To Full Cmd Line
|
||||
*--------------------------------------
|
||||
S.InitProcess lda S.CreateProcessA.Args
|
||||
beq .1
|
||||
jsr S.ExpandPStrA
|
||||
.1 ldy #S.PS.hARGS
|
||||
sta (pPs),y set ARGS hMem (0 if none)
|
||||
|
||||
lda S.CreateProcessA.Cmd
|
||||
jsr S.ExpandPStrA
|
||||
|
||||
ldy #S.PS.hCMD
|
||||
sta (pPs),y
|
||||
|
||||
jsr S.LoadBinA A = BinPath hMem
|
||||
bcs .99
|
||||
|
||||
>STYA pCode save PTR to Code Segment
|
||||
txa
|
||||
ldy #S.PS.hCS
|
||||
sta (pPs),y save CS hMem in TSKSLOT
|
||||
|
||||
ldy #H.BIN.BIN.DS.SIZE+1
|
||||
lda (pCode),y Load DS.SIZE HI
|
||||
tax
|
||||
dey
|
||||
ora (pCode),y
|
||||
|
||||
beq .2 DS.SIZE=0...
|
||||
|
||||
lda (pCode),y
|
||||
>PUSHAX Push DS.SIZE
|
||||
>PUSHBI S.MEM.F.INIT0 Clear DS
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
|
||||
>STYA pData
|
||||
txa
|
||||
ldy #S.PS.hDS
|
||||
sta (pPs),y save DS hMem in TSKSLOT
|
||||
|
||||
.2 lda (pCode)
|
||||
cmp #H.BIN.HEADER.BIN65
|
||||
bne *
|
||||
|
||||
ldx #TSKMGR.INIT
|
||||
jsr pCodeJmp Call INIT function
|
||||
bcc .99
|
||||
pha save error code
|
||||
ldx #TSKMGR.QUIT
|
||||
jsr pCodeJmp Call QUIT function
|
||||
pla get back error code
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* S.SelectProcessA
|
||||
* In : A=PSID
|
||||
*--------------------------------------
|
||||
S.SelectProcessA
|
||||
tay
|
||||
bne S.SelectProcessN
|
||||
S.SelectProcess0
|
||||
>LDYAI TskMgr.Table Make PS #0 as current process
|
||||
>STYA pPs
|
||||
bra S.SelectProcessDev
|
||||
S.SelectProcessN
|
||||
jsr S.GetPSByIDA
|
||||
bcs *
|
||||
>STYA pPs
|
||||
|
||||
S.SelectProcess ldy #S.PS.hCS
|
||||
lda (pPs),y
|
||||
jsr S.GetMemPtrA
|
||||
>STYA pCode
|
||||
|
||||
ldy #S.PS.hDS
|
||||
lda (pPs),y
|
||||
beq S.SelectProcessDev
|
||||
|
||||
jsr S.GetMemPtrA
|
||||
>STYA pData
|
||||
|
||||
S.SelectProcessDev
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (pPs),y
|
||||
beq .8
|
||||
|
||||
jsr S.GetDevByIDA
|
||||
>STYA pDev
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.FreeProcessA
|
||||
* In : A = PID to free
|
||||
*--------------------------------------
|
||||
S.FreeProcessA jsr S.GetPSByIDA
|
||||
bcs *
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.PS.hARGS
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .1
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.1 ldy #S.PS.hCMD
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .2
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
lda (ZPQuickPtr1) get S.PS.F
|
||||
and #S.PS.F.ENV do we have to discard duplicated env & prefix ?
|
||||
beq .4
|
||||
|
||||
.2 ldy #S.PS.hENV
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .3
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.3 ldy #S.PS.hPREFIX
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .4
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.4 ldy #S.PS.hDS
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .5
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.5 ldy #S.PS.hCS
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .8
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.8 lda #0
|
||||
sta (ZPQuickPtr1) Mark TSKSLOT as free
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
TSKMGR.SIZE .BS 1
|
||||
TSKMGR.COUNT .BS 1
|
||||
TSKMGR.EVENTCNT .BS 1
|
||||
|
|
|
@ -117,8 +117,8 @@ Kernel.Init2 >LDAXI MSG.Init2
|
|||
jsr S.TskMgrInit
|
||||
bcs *
|
||||
|
||||
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
|
||||
lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F
|
||||
sta CLRALTZP Make sure MAIN ZP...
|
||||
lda RROMBNK1 ... & ROM is enabled for X.PRINT.F
|
||||
|
||||
>LDAXI MSG.Init2.OK
|
||||
jsr PrintCStrAX
|
||||
|
@ -137,31 +137,22 @@ Kernel.Init3 ldx #DEVMGR.SELECT
|
|||
>LDYAI MSG.Init3
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>LDYAI MSG.StartupFile
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
|
||||
>PUSHYA
|
||||
>LDYAI MSG.Prefix
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>LDYAI STARTUP.ARGS Get A2osX.STARTUP full path...
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
pha
|
||||
>LDYAI STARTUP.CMD Get SHELL full path...
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
ply get back ARGS in Y
|
||||
phy
|
||||
pha A=CMD, save for discard
|
||||
>PUSHWI STARTUP.CMDLINE
|
||||
>LDYAI MSG.Startup
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>LDYAI STARTUP.CMDLINE
|
||||
>SYSCALL SYS.CreateProcessYA
|
||||
bcc .1
|
||||
|
||||
>PUSHA
|
||||
>LDYAI MSG.StartupErr
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
bra *
|
||||
bcs .9
|
||||
|
||||
.1 pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
>LDYAI MSG.Init3.OK
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
|
@ -169,6 +160,11 @@ Kernel.Init3 ldx #DEVMGR.SELECT
|
|||
>STYA pPs
|
||||
|
||||
jmp S.KernelRun
|
||||
|
||||
.9 >PUSHA
|
||||
>LDYAI MSG.StartupErr
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
bra *
|
||||
*--------------------------------------
|
||||
Kernel.Move ldy #0
|
||||
.1 inc ZPQuickPtr3
|
||||
|
@ -197,12 +193,12 @@ MSG.K.INIT >CSTRING "Kernel Setup...\n"
|
|||
MSG.Init2.OK >CSTRING "A2osX[Stage2]:Complete.\n"
|
||||
*--------------------------------------
|
||||
MSG.Init3 >PSTRING "A2osX[Stage3]:Init\n"
|
||||
MSG.StartupFile >PSTRING "EXEC A2osX.Startup...\n"
|
||||
MSG.StartupErr >PSTRING "SHELL A2osX.Startup Failed with Error : [$%h]\n"
|
||||
MSG.Prefix >PSTRING "Prefix:%S\n"
|
||||
MSG.Startup >PSTRING "Executing Kernel Startup Script...\nCmd:%S\n"
|
||||
MSG.StartupErr >PSTRING "Failed : [$%h]\n"
|
||||
MSG.Init3.OK >PSTRING "A2osX[Stage3]:Complete.\n"
|
||||
*--------------------------------------
|
||||
STARTUP.CMD >PSTRING "${A2OSX}SBIN/SHELL"
|
||||
STARTUP.ARGS >PSTRING "${A2OSX}A2osX.STARTUP"
|
||||
STARTUP.CMDLINE >PSTRING "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP"
|
||||
*--------------------------------------
|
||||
* Global Page
|
||||
*--------------------------------------
|
||||
|
@ -222,6 +218,7 @@ A2osX.D001 .EQ *
|
|||
.INB SYS/KERNEL.S.CIO
|
||||
.INB SYS/KERNEL.S.FIO
|
||||
.INB SYS/KERNEL.S.MLI
|
||||
.INB SYS/KERNEL.S.ARG
|
||||
.INB SYS/KERNEL.S.ENV
|
||||
.INB SYS/KERNEL.S.EVT
|
||||
.EP
|
||||
|
@ -245,6 +242,7 @@ A2osX.E000 .EQ *
|
|||
.INB SYS/KERNEL.S.DRV
|
||||
.INB SYS/KERNEL.S.LIB
|
||||
.INB SYS/KERNEL.S.TSK
|
||||
.INB SYS/KERNEL.S.PS
|
||||
*--------------------------------------
|
||||
* Make sure KERNEL.S.DEV is the last one
|
||||
*--------------------------------------
|
||||
|
|
Loading…
Reference in New Issue