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