mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-29 02:49:54 +00:00
Kernel & shell rewrite
This commit is contained in:
parent
2ec85716eb
commit
7f06969e7d
BIN
A2OSX.BOOT.DSK
BIN
A2OSX.BOOT.DSK
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
@ -4,22 +4,20 @@ NEW
|
|||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
SET PATH=%A2OSX%SBIN/;%A2OSX%BIN/
|
SET PATH=%A2OSX%SBIN/;%A2OSX%BIN/
|
||||||
SET DRV=%A2OSX%DRV/
|
|
||||||
SET ETC=%A2OSX%ETC/
|
|
||||||
SET LIB=%A2OSX%LIB/
|
SET LIB=%A2OSX%LIB/
|
||||||
LOAD CONSOLE.DRV
|
LOAD %A2OSX%DRV/CONSOLE.DRV
|
||||||
EXEC GETTY KBD CON LOGIN
|
EXEC GETTY CON LOGIN
|
||||||
LOAD SSC.DRV 9600 N 8 1 X
|
*LOAD %A2OSX%DRV/SSC.DRV 9600 N 8 1 X
|
||||||
EXEC GETTY COM2 COM2 LOGIN
|
*EXEC GETTY COM2 LOGIN
|
||||||
*LOAD PPIC.DRV
|
*LOAD %A2OSX%DRV/PPIC.DRV
|
||||||
LOAD UTHERNET.DRV 000E3A123456
|
LOAD %A2OSX%DRV/UTHERNET.DRV 000E3A123456
|
||||||
EXEC TCPIP ETH3
|
EXEC TCPIP ETH3
|
||||||
EXEC DHCPCLNT
|
EXEC DHCPCLNT
|
||||||
*EXEC TELNETD
|
*EXEC TELNETD
|
||||||
*MOUNT TFTP 192.168.1.5:/A2OSX /MNT/A2OSX
|
*MOUNT TFTP 192.168.1.5:/A2OSX /MNT/A2OSX
|
||||||
*MOUNT CIFS 192.168.1.5:/MSSHARE /MNT/MSSHARE
|
*MOUNT CIFS 192.168.1.5:/MSSHARE /MNT/MSSHARE
|
||||||
*LOAD DHGR.DRV
|
*LOAD %A2OSX%DRV/DHGR.DRV
|
||||||
*LOAD MOUSE.DRV
|
*LOAD %A2OSX%DRV/MOUSE.DRV
|
||||||
*EXEC GUI
|
*EXEC GUI
|
||||||
MAN
|
MAN
|
||||||
TEXT A2OSX.STARTUP
|
TEXT A2OSX.STARTUP
|
||||||
|
@ -16,6 +16,7 @@ AUTO 6
|
|||||||
.INB INC/LIBTCPIP.I
|
.INB INC/LIBTCPIP.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPPTR1 .EQ ZPBIN
|
ZPPTR1 .EQ ZPBIN
|
||||||
|
ZPPTR2 .EQ ZPBIN+2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* File Header (16 Bytes)
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -41,6 +42,7 @@ L.SSCANF.IP .DA SSCANF.IP
|
|||||||
L.IP .DA IP
|
L.IP .DA IP
|
||||||
L.MSG0 .DA MSG0
|
L.MSG0 .DA MSG0
|
||||||
L.MSG1 .DA MSG1
|
L.MSG1 .DA MSG1
|
||||||
|
L.DNSNAME .DA DNSNAME
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT stz hHostName
|
CS.INIT stz hHostName
|
||||||
@ -83,7 +85,6 @@ CS.INIT.ADD >PUSHA
|
|||||||
>LIBCALL hLIBSTR,LIBSTR.SSCANF
|
>LIBCALL hLIBSTR,LIBSTR.SSCANF
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>PUSHWI 1800 default TTL
|
|
||||||
>PUSHW L.IP
|
>PUSHW L.IP
|
||||||
lda hHostName
|
lda hHostName
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
@ -110,37 +111,46 @@ CS.INIT.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GETCACHE
|
|||||||
lda (ZPPTR1)
|
lda (ZPPTR1)
|
||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
ldy #S.DNSCACHE.RDATA+3
|
ldy #S.DNSCACHE.RDATA+4
|
||||||
|
.5 dey
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
dey
|
cpy #S.DNSCACHE.RDATA
|
||||||
lda (ZPPTR1),y
|
bne .5
|
||||||
>PUSHA
|
|
||||||
dey
|
ldy #S.DNSCACHE.TTL+4
|
||||||
lda (ZPPTR1),y
|
.6 dey
|
||||||
>PUSHA
|
|
||||||
dey
|
|
||||||
lda (ZPPTR1),y
|
|
||||||
>PUSHA
|
|
||||||
|
|
||||||
ldy #S.DNSCACHE.TTL+3
|
|
||||||
>PUSHA
|
|
||||||
dey
|
|
||||||
lda (ZPPTR1),y
|
|
||||||
>PUSHA
|
|
||||||
dey
|
|
||||||
lda (ZPPTR1),y
|
|
||||||
>PUSHA
|
|
||||||
dey
|
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
|
cpy #S.DNSCACHE.TTL
|
||||||
|
bne .6
|
||||||
|
|
||||||
ldy #S.DNSCACHE.hNAME
|
ldy #S.DNSCACHE.hNAME
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>PUSHYA
|
>STYA ZPPTR2
|
||||||
|
|
||||||
>PUSHB (ZPPTR1)
|
ldy #0 convert DNS-style string to PSTR
|
||||||
|
.10 lda (ZPPTR2),y
|
||||||
|
tax
|
||||||
|
beq .12
|
||||||
|
|
||||||
|
lda #'.'
|
||||||
|
sta DNSNAME,y
|
||||||
|
|
||||||
|
.11 iny
|
||||||
|
lda (ZPPTR2),y
|
||||||
|
sta DNSNAME,y
|
||||||
|
dex
|
||||||
|
bne .11
|
||||||
|
iny
|
||||||
|
bne .10
|
||||||
|
|
||||||
|
.12 dey
|
||||||
|
sty DNSNAME
|
||||||
|
|
||||||
|
>PUSHW L.DNSNAME
|
||||||
|
>PUSHB (ZPPTR1) Entry Status
|
||||||
|
|
||||||
>PUSHW L.MSG1
|
>PUSHW L.MSG1
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
@ -151,11 +161,13 @@ CS.INIT.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GETCACHE
|
|||||||
sta ZPPTR1
|
sta ZPPTR1
|
||||||
bcc .3
|
bcc .3
|
||||||
inc ZPPTR1+1
|
inc ZPPTR1+1
|
||||||
|
|
||||||
.3 plx
|
.3 plx
|
||||||
dex
|
dex
|
||||||
bne .1
|
beq .8
|
||||||
|
jmp .1
|
||||||
|
|
||||||
lda #0 tell TSKMGR that all done ok, but
|
.8 lda #0 tell TSKMGR that all done ok, but
|
||||||
sec we do not want to stay in memory
|
sec we do not want to stay in memory
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -181,12 +193,13 @@ LIBSTR >PSTRING "libstr.o"
|
|||||||
LIBTCPIP >PSTRING "libtcpip.o"
|
LIBTCPIP >PSTRING "libtcpip.o"
|
||||||
SSCANF.IP >PSTRING "%d.%d.%d.%d"
|
SSCANF.IP >PSTRING "%d.%d.%d.%d"
|
||||||
MSG0 >CSTRING "STS Hostname TTL IP Address\n"
|
MSG0 >CSTRING "STS Hostname TTL IP Address\n"
|
||||||
MSG1 >CSTRING "$%h %32S %09L %d.%d.%d.%d\n"
|
MSG1 >CSTRING "$%h %32S %h%h%h%h %d.%d.%d.%d\n"
|
||||||
hLIBSTR .BS 1
|
hLIBSTR .BS 1
|
||||||
hLIBTCPIP .BS 1
|
hLIBTCPIP .BS 1
|
||||||
hHostName .BS 1
|
hHostName .BS 1
|
||||||
hIP .BS 1
|
hIP .BS 1
|
||||||
IP .BS 4
|
IP .BS 4
|
||||||
|
DNSNAME .BS K.DNS.MAXLEN+1
|
||||||
MAN
|
MAN
|
||||||
SAVE BIN/DNS.S
|
SAVE BIN/DNS.S
|
||||||
ASM
|
ASM
|
||||||
|
@ -114,8 +114,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 CMD ARGS\n"
|
||||||
MSG1 >CSTRING "%03d %b %03d %16S %32S\n"
|
MSG1 >CSTRING "%03d %b %03d %30S %28S\n"
|
||||||
MSG2 >PSTRING "(none)"
|
MSG2 >PSTRING "(none)"
|
||||||
MAN
|
MAN
|
||||||
SAVE BIN/PS.S
|
SAVE BIN/PS.S
|
||||||
|
402
BIN/RPCINFO.S.txt
Normal file
402
BIN/RPCINFO.S.txt
Normal file
@ -0,0 +1,402 @@
|
|||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02
|
||||||
|
.OR $2000
|
||||||
|
.TF /A2OSX.BOOT/BIN/RPCINFO
|
||||||
|
*--------------------------------------
|
||||||
|
.INB INC/MACROS.I
|
||||||
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
|
.INB INC/KERNEL.I
|
||||||
|
.INB INC/LIBSTR.I
|
||||||
|
.INB INC/LIBTCPIP.I
|
||||||
|
*--------------------------------------
|
||||||
|
RPCINFO.TIMEOUT .EQ 40 40*100ms = 4 sec.
|
||||||
|
*--------------------------------------
|
||||||
|
ZPFrameBase1 .EQ ZPBIN
|
||||||
|
ZPFrameLen1 .EQ ZPBIN+2
|
||||||
|
ZPFramePtr1 .EQ ZPBIN+4
|
||||||
|
*--------------------------------------
|
||||||
|
* File Header (16 Bytes)
|
||||||
|
*--------------------------------------
|
||||||
|
CS.START cld
|
||||||
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA DS.END-DS.START Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
.1 .DA CS.INIT
|
||||||
|
.DA CS.RUN
|
||||||
|
.DA CS.DOEVENT
|
||||||
|
.DA CS.QUIT
|
||||||
|
L.LIBSTR .DA LIBSTR
|
||||||
|
L.LIBTCPIP .DA LIBTCPIP
|
||||||
|
L.SSCANF.IP .DA SSCANF.IP
|
||||||
|
L.MSG0 .DA MSG0
|
||||||
|
L.MSG1 .DA MSG1
|
||||||
|
L.MSG2 .DA MSG2
|
||||||
|
L.MSG3 .DA MSG3
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
CS.INIT ldy #S.PS.hARGS
|
||||||
|
lda (pPs),y
|
||||||
|
bne .1
|
||||||
|
lda #SYSMGR.ERRSYN
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 >LDYA L.LIBSTR
|
||||||
|
>LOADLIBYA
|
||||||
|
sta hLIBSTR
|
||||||
|
|
||||||
|
>LDYA L.LIBTCPIP
|
||||||
|
>LOADLIBYA
|
||||||
|
sta hLIBTCPIP
|
||||||
|
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
|
||||||
|
bcs .9
|
||||||
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
|
lda (ZPQuickPtr1) Configured ?
|
||||||
|
bpl .9
|
||||||
|
|
||||||
|
ldy #S.IPCFG.HDEV
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
sta hDev
|
||||||
|
|
||||||
|
lda A2OSX.RANDOM16
|
||||||
|
ldy #XID
|
||||||
|
sta (pData),y
|
||||||
|
lda A2OSX.RANDOM16+1
|
||||||
|
iny
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
lda (pPs)
|
||||||
|
ora #S.PS.F.EVENT Now accept events
|
||||||
|
sta (pPs)
|
||||||
|
clc
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN >PUSHW pData DST.IP
|
||||||
|
>PUSHW L.SSCANF.IP
|
||||||
|
ldy #S.PS.hARGS
|
||||||
|
lda (pPs),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.SSCANF
|
||||||
|
bcc CS.RUN.IPOK
|
||||||
|
|
||||||
|
lda #RPCINFO.TIMEOUT
|
||||||
|
ldy #TimeOut
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
CS.RUN.DNSQUERY >PUSHW pData DST.IP
|
||||||
|
ldy #S.PS.hARGS
|
||||||
|
lda (pPs),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.QUERY
|
||||||
|
bcc CS.RUN.IPOK
|
||||||
|
|
||||||
|
jsr A2osX.SLEEP
|
||||||
|
ldy #TimeOut
|
||||||
|
lda (pData),y
|
||||||
|
bne CS.RUN.DNSQUERY
|
||||||
|
|
||||||
|
ldy #S.PS.hARGS
|
||||||
|
lda (pPs),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
>PUSHW L.MSG0
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
|
sec
|
||||||
|
CS.RUN.RTS rts
|
||||||
|
|
||||||
|
CS.RUN.IPOK ldy #S.PS.hARGS
|
||||||
|
lda (pPs),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
ldy #3
|
||||||
|
>PUSHB (pData),y DST.IP+3
|
||||||
|
dey
|
||||||
|
>PUSHB (pData),y DST.IP+2
|
||||||
|
dey
|
||||||
|
>PUSHB (pData),y DST.IP+1
|
||||||
|
>PUSHB (pData) DST.IP
|
||||||
|
>PUSHW L.MSG1
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
|
CS.RUN.RPCCALL >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.UDP.FRAME
|
||||||
|
bcs CS.RUN.RTS
|
||||||
|
>STYA ZPFrameBase1
|
||||||
|
txa
|
||||||
|
ldy #hFrame
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
ldx #3
|
||||||
|
ldy #DST.IP
|
||||||
|
.10 lda (pData),y
|
||||||
|
pha
|
||||||
|
iny
|
||||||
|
dex
|
||||||
|
bpl .10
|
||||||
|
|
||||||
|
ldx #3
|
||||||
|
ldy #S.IP.DST+3
|
||||||
|
.1 pla
|
||||||
|
sta (ZPFrameBase1),y
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
ldy #S.UDP.SRCPORT
|
||||||
|
lda #UDP.PORT.PMAP
|
||||||
|
sta (ZPFrameBase1),y
|
||||||
|
ldy #S.UDP.DSTPORT
|
||||||
|
sta (ZPFrameBase1),y
|
||||||
|
|
||||||
|
ldy #XID
|
||||||
|
lda (pData),y
|
||||||
|
tax
|
||||||
|
iny
|
||||||
|
lda (pData),y
|
||||||
|
|
||||||
|
ldy #S.RPC.XID+1
|
||||||
|
sta (ZPFrameBase1),y
|
||||||
|
dey
|
||||||
|
txa
|
||||||
|
sta (ZPFrameBase1),y
|
||||||
|
|
||||||
|
.3 >PUSHWI S.RPC+32
|
||||||
|
ldy #hFrame
|
||||||
|
lda (pData),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.UDP.FRAME
|
||||||
|
bcc .4
|
||||||
|
|
||||||
|
jsr A2osX.SLEEP
|
||||||
|
ldy #TimeOut
|
||||||
|
lda (pData),y
|
||||||
|
bne .3
|
||||||
|
|
||||||
|
.4 ldy #hFrame
|
||||||
|
lda (pData),y
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
|
ldy #bReply
|
||||||
|
lda #0
|
||||||
|
sta (pData),y
|
||||||
|
lda #RPCINFO.TIMEOUT
|
||||||
|
ldy #TimeOut
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
CS.RUN.WAIT jsr A2osX.SLEEP
|
||||||
|
ldy #bReply
|
||||||
|
lda (pData),y
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
ldy #bCTRLC
|
||||||
|
lda (pData),y
|
||||||
|
bne CS.RUN.ERROR
|
||||||
|
ldy #TimeOut
|
||||||
|
lda (pData),y
|
||||||
|
bne CS.RUN.WAIT
|
||||||
|
|
||||||
|
ldy #3
|
||||||
|
>PUSHB (pData),y DST.IP+3
|
||||||
|
dey
|
||||||
|
>PUSHB (pData),y DST.IP+2
|
||||||
|
dey
|
||||||
|
>PUSHB (pData),y DST.IP+1
|
||||||
|
>PUSHB (pData) DST.IP
|
||||||
|
>PUSHW L.MSG2
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
|
.1 ldy #bCTRLC
|
||||||
|
lda (pData),y
|
||||||
|
bne CS.RUN.ERROR
|
||||||
|
ldy #TimeOut
|
||||||
|
lda (pData),y
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
jsr A2osX.SLEEP
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.2
|
||||||
|
CS.RUN.ERROR sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.DOEVENT lda (pEvent)
|
||||||
|
and #S.EVT.F.TIMER is it a TIMER event?
|
||||||
|
beq .1 no....
|
||||||
|
|
||||||
|
ldy #TimeOut
|
||||||
|
lda (pData),y
|
||||||
|
beq .10
|
||||||
|
|
||||||
|
dec
|
||||||
|
sta (pData),y
|
||||||
|
.10 sec do not discard TIMER event
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 lda (pEvent)
|
||||||
|
and #S.EVT.F.KEY is it a KEY event?
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
ldy #S.EVT.hDEV is Event from active IN device?
|
||||||
|
lda (pEvent),y
|
||||||
|
ldy #S.PS.hINDEV
|
||||||
|
cmp (pPs),y
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
||||||
|
lda (pEvent),y
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
ldy #S.EVT.DATALO
|
||||||
|
lda (pEvent),y
|
||||||
|
cmp #$03 Ctrl-C
|
||||||
|
bne .8
|
||||||
|
|
||||||
|
lda #$FF
|
||||||
|
ldy #bCTRLC
|
||||||
|
sta (pData),y
|
||||||
|
bra .8
|
||||||
|
|
||||||
|
.2 lda (pEvent)
|
||||||
|
and #S.EVT.F.NET
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
ldy #S.EVT.hDEV
|
||||||
|
lda (pEvent),y
|
||||||
|
cmp hDev
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
ldy #S.EVT.DATALO Get Frame hMem
|
||||||
|
lda (pEvent),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPFrameBase1
|
||||||
|
|
||||||
|
ldy #S.IP.PROTOCOL
|
||||||
|
lda (ZPFrameBase1),y
|
||||||
|
cmp #S.IP.PROTOCOL.UDP
|
||||||
|
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
ldy #S.UDP.DSTPORT
|
||||||
|
lda (ZPFrameBase1),y
|
||||||
|
cmp #S.ICMP.TYPE.ECHOREP
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
ldy #S.RPC.XID
|
||||||
|
lda (ZPFrameBase1),y
|
||||||
|
tax
|
||||||
|
iny
|
||||||
|
lda (ZPFrameBase1),y
|
||||||
|
ldy #XID+1
|
||||||
|
cmp (pData),y
|
||||||
|
bne .9
|
||||||
|
dey
|
||||||
|
txa
|
||||||
|
cmp (pData),y
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
jsr CS.EVENT.REPLY
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.EVENT.REPLY lda #RPCINFO.TIMEOUT
|
||||||
|
sec
|
||||||
|
sbc TimeOut
|
||||||
|
|
||||||
|
stz TimeOut.ms
|
||||||
|
stz TimeOut.ms+1
|
||||||
|
|
||||||
|
tay
|
||||||
|
beq .3
|
||||||
|
|
||||||
|
.1 lda TimeOut.ms
|
||||||
|
clc
|
||||||
|
adc #K.TIMER16RESOLUTION*20
|
||||||
|
sta TimeOut.ms
|
||||||
|
bcc .2
|
||||||
|
inc TimeOut
|
||||||
|
.2 dey
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
.3 >PUSHW TimeOut.ms
|
||||||
|
ldy #S.IP.TTL
|
||||||
|
>PUSHB (ZPFrameBase1),y
|
||||||
|
|
||||||
|
ldy #S.ICMP.SEQUENCE+1
|
||||||
|
>PUSHB (ZPFrameBase1),y
|
||||||
|
dey
|
||||||
|
>PUSHB (ZPFrameBase1),y
|
||||||
|
|
||||||
|
ldy #S.IP.SRC+3
|
||||||
|
>PUSHB (ZPFrameBase1),y
|
||||||
|
dey
|
||||||
|
>PUSHB (ZPFrameBase1),y
|
||||||
|
dey
|
||||||
|
>PUSHB (ZPFrameBase1),y
|
||||||
|
dey
|
||||||
|
>PUSHB (ZPFrameBase1),y
|
||||||
|
|
||||||
|
>PUSHW L.MSG3
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
|
ldy #bReply
|
||||||
|
lda (pData),y
|
||||||
|
inc
|
||||||
|
sta (pData),y
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.QUIT lda hLIBTCPIP
|
||||||
|
>SYSCALL SYS.UnloadLibA
|
||||||
|
lda hLIBSTR
|
||||||
|
>SYSCALL SYS.UnloadLibA
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.END
|
||||||
|
LIBSTR >PSTRING "libstr.o"
|
||||||
|
LIBTCPIP >PSTRING "libtcpip.o"
|
||||||
|
SSCANF.IP >PSTRING "%d.%d.%d.%d"
|
||||||
|
MSG0 >CSTRING "%S: Unknown host\n"
|
||||||
|
MSG1 >CSTRING "PING %d.%d.%d.%d (%S)\n"
|
||||||
|
MSG2 >CSTRING "%d.%d.%d.%d: TimeOut/Host unreachable\n"
|
||||||
|
MSG3 >CSTRING "32 bytes from %d.%d.%d.%d, icmp_seq=%D, ttl=%d, time=%D ms\n"
|
||||||
|
hLIBSTR .BS 1
|
||||||
|
hLIBTCPIP .BS 1
|
||||||
|
hDev .BS 1
|
||||||
|
TimeOut.ms .BS 2
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR 0
|
||||||
|
DS.START
|
||||||
|
DST.IP .BS 4
|
||||||
|
hFrame .BS 1
|
||||||
|
TimeOut .BS 1
|
||||||
|
XID .BS 4
|
||||||
|
bCTRLC .BS 1
|
||||||
|
bReply .BS 1
|
||||||
|
DS.END
|
||||||
|
.ED
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE BIN/RPCINFO.S
|
||||||
|
ASM
|
@ -81,8 +81,16 @@ OPEN stz CURON
|
|||||||
GETEVENT lda A2osX.TIMER16
|
GETEVENT lda A2osX.TIMER16
|
||||||
and #CURSOR.BLINK.SPEED
|
and #CURSOR.BLINK.SPEED
|
||||||
eor CURON
|
eor CURON
|
||||||
beq .9
|
beq .1
|
||||||
jsr CURBLNK
|
jsr CURBLNK
|
||||||
|
|
||||||
|
.1 lda A2osX.SCREENS
|
||||||
|
and #A2osX.SCREENS.C is screen active?
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
>SYSCALL SYS.GetKeyboardEvent
|
||||||
|
bcs .9
|
||||||
|
rts
|
||||||
|
|
||||||
.9 lda #0 Error = no event
|
.9 lda #0 Error = no event
|
||||||
sec
|
sec
|
||||||
|
@ -23,7 +23,6 @@ SYS.PStrCat .EQ $14
|
|||||||
SYS.PStrCmp .EQ $16
|
SYS.PStrCmp .EQ $16
|
||||||
|
|
||||||
SYS.PStrGetTkn .EQ $18
|
SYS.PStrGetTkn .EQ $18
|
||||||
SYS.GetPStrIndex .EQ $1A
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.LoadBinA .EQ $20
|
SYS.LoadBinA .EQ $20
|
||||||
SYS.LoadLibYA .EQ $22
|
SYS.LoadLibYA .EQ $22
|
||||||
@ -81,9 +80,13 @@ SYS.MLIWriteBlock .EQ $7E
|
|||||||
SYS.GetDevByIDA .EQ $80
|
SYS.GetDevByIDA .EQ $80
|
||||||
SYS.GetDevByNameA .EQ $82
|
SYS.GetDevByNameA .EQ $82
|
||||||
SYS.GetDevByNameYA .EQ $84
|
SYS.GetDevByNameYA .EQ $84
|
||||||
|
|
||||||
|
SYS.GetKeyboardEvent .EQ $88
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.ExecProcessA .EQ $90
|
SYS.ExecProcessNewEnvA .EQ $90
|
||||||
SYS.CreateProcessA .EQ $92
|
SYS.ExecProcessA .EQ $92
|
||||||
|
SYS.CreateProcessNewEnvA .EQ $94
|
||||||
|
SYS.CreateProcessA .EQ $96
|
||||||
|
|
||||||
SYS.GetPSByIDA .EQ $98
|
SYS.GetPSByIDA .EQ $98
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -200,6 +203,7 @@ S.PS.F .EQ 0
|
|||||||
S.PS.F.INUSE .EQ %10000000
|
S.PS.F.INUSE .EQ %10000000
|
||||||
S.PS.F.HOLD .EQ %01000000
|
S.PS.F.HOLD .EQ %01000000
|
||||||
S.PS.F.EVENT .EQ %00100000
|
S.PS.F.EVENT .EQ %00100000
|
||||||
|
S.PS.F.ENV .EQ %00010000
|
||||||
S.PS.ID .EQ 1
|
S.PS.ID .EQ 1
|
||||||
S.PS.PID .EQ 2
|
S.PS.PID .EQ 2
|
||||||
S.PS.hCS .EQ 3
|
S.PS.hCS .EQ 3
|
||||||
|
@ -25,6 +25,10 @@ K.UDPTABLE.SIZE .EQ 16
|
|||||||
K.TCPTABLE.SIZE .EQ 16
|
K.TCPTABLE.SIZE .EQ 16
|
||||||
K.ETH.FRAME.LEN .EQ 1514
|
K.ETH.FRAME.LEN .EQ 1514
|
||||||
K.IP.TTL .EQ 64
|
K.IP.TTL .EQ 64
|
||||||
|
K.DNS.MAXLEN .EQ 64
|
||||||
|
K.DYNPORT.START .EQ 49152
|
||||||
|
K.DYNPORT.END .EQ 65535
|
||||||
|
K.DYNPORT.MAX .EQ 64
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
H.BIN.HEADER .EQ 0
|
H.BIN.HEADER .EQ 0
|
||||||
H.BIN.HEADER.DRV65 .EQ $4C8D 6502:cld,jmp abs
|
H.BIN.HEADER.DRV65 .EQ $4C8D 6502:cld,jmp abs
|
||||||
|
@ -89,6 +89,8 @@ S.DNSCACHE.CLASS .EQ 4
|
|||||||
S.DNSCACHE.TTL .EQ 6
|
S.DNSCACHE.TTL .EQ 6
|
||||||
S.DNSCACHE.RDLENGTH .EQ 10
|
S.DNSCACHE.RDLENGTH .EQ 10
|
||||||
S.DNSCACHE.RDATA .EQ 12
|
S.DNSCACHE.RDATA .EQ 12
|
||||||
|
S.DNSCACHE.ID .EQ 12 Store Message.Id in cache (pending req.)
|
||||||
|
S.DNSCACHE.DYNPORT .EQ 14 Store Dyn.Port in cache (pending req.)
|
||||||
*
|
*
|
||||||
S.DNSCACHE .EQ 16
|
S.DNSCACHE .EQ 16
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -287,9 +287,9 @@ AUTO 6
|
|||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PSTRING
|
.MA PSTRING
|
||||||
.DA #.74-.73
|
.DA #:2-:1
|
||||||
.73 .AS "]1"
|
:1 .AS "]1"
|
||||||
.74 .AS ""
|
:2 .EQ *
|
||||||
.EM
|
.EM
|
||||||
MAN
|
MAN
|
||||||
SAVE INC/MACROS.I
|
SAVE INC/MACROS.I
|
||||||
|
@ -15,13 +15,15 @@ DNS.CLEAR ldx #K.DNSCACHE.SIZE*S.DNSCACHE
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* DNS.QUERY
|
* DNS.QUERY
|
||||||
* In:
|
* In:
|
||||||
* PULLA = hostname PSTR
|
* PULLW = hostname PTR to PSTR
|
||||||
* PULLW = PTR to IP to fill with cached data
|
* PULLW = PTR to IP to fill with cached data
|
||||||
* Out:
|
* Out:
|
||||||
* CC: hit: IP filled with address
|
* CC: hit: IP filled with address
|
||||||
* CS: missed
|
* CS: missed
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DNS.QUERY >PULLW ZPDNSHostname Get host string
|
DNS.QUERY >PULLYA Get host string
|
||||||
|
jsr PSTR2DNSHostName
|
||||||
|
|
||||||
>PULLW ZPDNSIP Get IP address to fill
|
>PULLW ZPDNSIP Get IP address to fill
|
||||||
|
|
||||||
ldx #0
|
ldx #0
|
||||||
@ -29,21 +31,25 @@ DNS.QUERY >PULLW ZPDNSHostname Get host string
|
|||||||
.1 lda DNS.CACHE,x
|
.1 lda DNS.CACHE,x
|
||||||
beq .6 empty DNS cache entry?
|
beq .6 empty DNS cache entry?
|
||||||
|
|
||||||
|
phx
|
||||||
lda DNS.CACHE+S.DNSCACHE.hNAME,x
|
lda DNS.CACHE+S.DNSCACHE.hNAME,x
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>STYA ZPQuickPtr3
|
>STYA ZPQuickPtr3
|
||||||
lda (ZPDNSHostname)
|
plx
|
||||||
cmp (ZPQuickPtr3) Same Length?
|
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
.2 lda DNSHostname,y
|
||||||
|
bne .21
|
||||||
|
lda (ZPQuickPtr3),y
|
||||||
|
beq .22
|
||||||
|
|
||||||
|
.21 cmp (ZPQuickPtr3),y
|
||||||
bne .6
|
bne .6
|
||||||
tay
|
iny
|
||||||
.2 lda (ZPDNSHostname),y
|
|
||||||
jsr ToLowerCaseA
|
|
||||||
cmp (ZPQuickPtr3),y
|
|
||||||
bne .6
|
|
||||||
dey
|
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
lda DNS.CACHE,x get back status...
|
.22 lda DNS.CACHE,x get back status...
|
||||||
bpl .4 Pending...
|
bpl .4 Pending...
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
@ -92,18 +98,18 @@ DNS.REQUEST jsr NEW.UDP.FRAME
|
|||||||
ldy #S.DNS.ID
|
ldy #S.DNS.ID
|
||||||
lda A2osX.RANDOM16
|
lda A2osX.RANDOM16
|
||||||
sta (ZPFrameBase1),y
|
sta (ZPFrameBase1),y
|
||||||
sta MESSAGE.ID
|
sta DNSMessageID
|
||||||
iny
|
iny
|
||||||
lda A2osX.RANDOM16+1
|
lda A2osX.RANDOM16+1
|
||||||
sta (ZPFrameBase1),y
|
sta (ZPFrameBase1),y
|
||||||
sta MESSAGE.ID+1
|
sta DNSMessageID+1
|
||||||
|
|
||||||
ldy #S.DNS.F
|
* ldy #S.DNS.F
|
||||||
lda /S.DNS.F.RD
|
* lda /S.DNS.F.RD
|
||||||
sta (ZPFrameBase1),y
|
* sta (ZPFrameBase1),y
|
||||||
iny
|
* iny
|
||||||
lda #S.DNS.F.RD
|
* lda #S.DNS.F.RD
|
||||||
sta (ZPFrameBase1),y
|
* sta (ZPFrameBase1),y
|
||||||
|
|
||||||
ldy #S.DNS.QDCOUNT
|
ldy #S.DNS.QDCOUNT
|
||||||
lda /1
|
lda /1
|
||||||
@ -120,28 +126,14 @@ DNS.REQUEST jsr NEW.UDP.FRAME
|
|||||||
adc ZPFrameBase1+1
|
adc ZPFrameBase1+1
|
||||||
sta ZPFramePtr1+1
|
sta ZPFramePtr1+1
|
||||||
|
|
||||||
lda (ZPDNSHostname) Get hostname len
|
ldy #0
|
||||||
tay
|
.2 lda DNSHostname,y
|
||||||
ldx #0
|
|
||||||
.2 lda (ZPDNSHostname),y
|
|
||||||
cmp #'.'
|
|
||||||
bne .3
|
|
||||||
txa
|
|
||||||
ldx #$FF
|
|
||||||
.3 sta (ZPFramePtr1),y
|
|
||||||
inx
|
|
||||||
dey
|
|
||||||
bne .2
|
|
||||||
txa
|
|
||||||
sta (ZPFramePtr1)
|
|
||||||
|
|
||||||
lda (ZPDNSHostname)
|
|
||||||
tay
|
|
||||||
iny
|
|
||||||
lda #$0 Ending #0
|
|
||||||
sta (ZPFramePtr1),y
|
sta (ZPFramePtr1),y
|
||||||
|
beq .3
|
||||||
iny
|
iny
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
.3 iny
|
||||||
lda /S.DNS.QTYPE.A
|
lda /S.DNS.QTYPE.A
|
||||||
sta (ZPFramePtr1),y
|
sta (ZPFramePtr1),y
|
||||||
iny
|
iny
|
||||||
@ -155,7 +147,7 @@ DNS.REQUEST jsr NEW.UDP.FRAME
|
|||||||
lda #S.DNS.QCLASS.IN
|
lda #S.DNS.QCLASS.IN
|
||||||
sta (ZPFramePtr1),y
|
sta (ZPFramePtr1),y
|
||||||
|
|
||||||
lda (ZPDNSHostname) Get hostname len again (QNAME)
|
lda DNSHostnameLen Get hostname len again (QNAME)
|
||||||
clc
|
clc
|
||||||
adc #6 (len+1) + Ending 0 + QTYPE + QCLASS
|
adc #6 (len+1) + Ending 0 + QTYPE + QCLASS
|
||||||
adc #S.DNS
|
adc #S.DNS
|
||||||
@ -203,13 +195,19 @@ DNS.REQUEST jsr NEW.UDP.FRAME
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* DNS.ADD
|
* DNS.ADD
|
||||||
* In:
|
* In:
|
||||||
* PULLA = hostname PSTR to Add
|
* PULLW = hostname PSTR to Add
|
||||||
* PULLW = PTR to IP
|
* PULLW = PTR to IP
|
||||||
* PULLW = TTL
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DNS.ADD >PULLW ZPDNSHostname Get host string
|
DNS.ADD >PULLYA Get host string
|
||||||
|
jsr PSTR2DNSHostName
|
||||||
>PULLW ZPDNSIP Get host IP address
|
>PULLW ZPDNSIP Get host IP address
|
||||||
>PULLW HOST.TTL
|
|
||||||
|
lda #$80
|
||||||
|
sta DNSHostTTL+3
|
||||||
|
stz DNSHostTTL+2
|
||||||
|
stz DNSHostTTL+1
|
||||||
|
stz DNSHostTTL
|
||||||
|
|
||||||
lda #S.DNSCACHE.STATUS.RESOLVED
|
lda #S.DNSCACHE.STATUS.RESOLVED
|
||||||
bra DNS.ADD.I
|
bra DNS.ADD.I
|
||||||
|
|
||||||
@ -223,34 +221,35 @@ DNS.ADD.I sta Status
|
|||||||
beq DNS.ADD.ENTRY free ?
|
beq DNS.ADD.ENTRY free ?
|
||||||
|
|
||||||
lda DNS.CACHE+S.DNSCACHE.hNAME,x
|
lda DNS.CACHE+S.DNSCACHE.hNAME,x
|
||||||
|
phx
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>STYA ZPQuickPtr3
|
>STYA ZPQuickPtr3
|
||||||
lda (ZPDNSHostname)
|
plx
|
||||||
cmp (ZPQuickPtr3) Same Length?
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
tay
|
ldy #0
|
||||||
.2 lda (ZPDNSHostname),y
|
|
||||||
jsr ToLowerCaseA
|
.2 lda DNSHostname,y
|
||||||
cmp (ZPQuickPtr3),y
|
cmp (ZPQuickPtr3),y
|
||||||
bne .4
|
bne .4
|
||||||
dey
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
bra DNS.UPD.ENTRY
|
and #$FF End Of String?
|
||||||
|
beq DNS.UPD.ENTRY
|
||||||
|
|
||||||
|
iny
|
||||||
|
bne .2
|
||||||
|
|
||||||
.4 txa
|
.4 txa
|
||||||
clc
|
clc
|
||||||
adc #S.DNSCACHE
|
adc #S.DNSCACHE
|
||||||
cmp #K.DNSCACHE.SIZE*S.DNSCACHE
|
|
||||||
beq .5
|
|
||||||
tax
|
tax
|
||||||
bra .1
|
cmp #K.DNSCACHE.SIZE*S.DNSCACHE
|
||||||
|
bne .1
|
||||||
.5 lda DNS.CACHE+S.DNSCACHE.hNAME discard oldest entry hNAME
|
|
||||||
|
lda DNS.CACHE+S.DNSCACHE.hNAME discard oldest entry hNAME
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
ldx #K.DNSCACHE.SIZE*S.DNSCACHE-S.DNSCACHE
|
ldx #K.DNSCACHE.SIZE*S.DNSCACHE-S.DNSCACHE
|
||||||
|
|
||||||
.6 lda DNS.CACHE+S.DNSCACHE-1,x
|
.6 lda DNS.CACHE+S.DNSCACHE-1,x
|
||||||
sta DNS.CACHE-1,x
|
sta DNS.CACHE-1,x
|
||||||
dex
|
dex
|
||||||
@ -259,9 +258,9 @@ DNS.ADD.I sta Status
|
|||||||
ldx #K.DNSCACHE.SIZE*S.DNSCACHE-S.DNSCACHE
|
ldx #K.DNSCACHE.SIZE*S.DNSCACHE-S.DNSCACHE
|
||||||
|
|
||||||
DNS.ADD.ENTRY phx
|
DNS.ADD.ENTRY phx
|
||||||
lda (ZPDNSHostname)
|
|
||||||
inc add 1 for len
|
ldy DNSHostnameLen
|
||||||
tay
|
iny add 1 for Ending 00
|
||||||
lda #0
|
lda #0
|
||||||
>PUSHYA push PSTR len
|
>PUSHYA push PSTR len
|
||||||
>PUSHBI 0 no option
|
>PUSHBI 0 no option
|
||||||
@ -270,29 +269,40 @@ DNS.ADD.ENTRY phx
|
|||||||
plx
|
plx
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.10 >STYA ZPQuickPtr3
|
.10 >STYA ZPQuickPtr4
|
||||||
txa
|
txa
|
||||||
plx
|
plx
|
||||||
sta DNS.CACHE+S.DNSCACHE.hNAME,x
|
sta DNS.CACHE+S.DNSCACHE.hNAME,x
|
||||||
|
|
||||||
lda (ZPDNSHostname)
|
ldy #0
|
||||||
sta (ZPQuickPtr3)
|
.1 lda DNSHostname,y
|
||||||
tay
|
sta (ZPQuickPtr4),y
|
||||||
|
iny
|
||||||
.1 lda (ZPDNSHostname),y
|
cpy DNSHostnameLen
|
||||||
jsr ToLowerCaseA
|
|
||||||
sta (ZPQuickPtr3),y
|
|
||||||
dey
|
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta (ZPQuickPtr4),y
|
||||||
|
|
||||||
DNS.UPD.ENTRY lda Status
|
DNS.UPD.ENTRY lda Status
|
||||||
sta DNS.CACHE,x
|
sta DNS.CACHE+S.DNSCACHE.STATUS,x
|
||||||
bpl .9 pending...
|
bmi .1 pending?
|
||||||
|
|
||||||
lda HOST.TTL
|
lda DNSMessageID
|
||||||
|
sta DNS.CACHE+S.DNSCACHE.ID,x
|
||||||
|
lda DNSMessageID+1
|
||||||
|
sta DNS.CACHE+S.DNSCACHE.ID+1,x
|
||||||
|
|
||||||
|
bra .9
|
||||||
|
|
||||||
|
.1 lda DNSHostTTL
|
||||||
sta DNS.CACHE+S.DNSCACHE.TTL,x
|
sta DNS.CACHE+S.DNSCACHE.TTL,x
|
||||||
lda HOST.TTL+1
|
lda DNSHostTTL+1
|
||||||
sta DNS.CACHE+S.DNSCACHE.TTL+1,x
|
sta DNS.CACHE+S.DNSCACHE.TTL+1,x
|
||||||
|
lda DNSHostTTL+2
|
||||||
|
sta DNS.CACHE+S.DNSCACHE.TTL+2,x
|
||||||
|
lda DNSHostTTL+3
|
||||||
|
sta DNS.CACHE+S.DNSCACHE.TTL+3,x
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
.2 lda (ZPDNSIP),y
|
.2 lda (ZPDNSIP),y
|
||||||
@ -313,6 +323,53 @@ DNS.GETCACHE >LDYA L.DNS.CACHE
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PRIVATE
|
* PRIVATE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
PSTR2DNSHostName >STYA ZPQuickPtr1
|
||||||
|
|
||||||
|
lda (ZPQuickPtr1)
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
cmp #K.DNS.MAXLEN-1
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
tay
|
||||||
|
|
||||||
|
inc
|
||||||
|
sta DNSHostNameLen
|
||||||
|
|
||||||
|
lda #0 Ending 0
|
||||||
|
sta DNSHostName+1,y
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.1 lda (ZPQuickPtr1),y
|
||||||
|
and #$7f
|
||||||
|
cmp #'.'
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
cmp #'A'
|
||||||
|
bcc .10
|
||||||
|
cmp #'Z'+1
|
||||||
|
bcs .10
|
||||||
|
adc #$20
|
||||||
|
|
||||||
|
.10 inx
|
||||||
|
bra .3
|
||||||
|
|
||||||
|
.2 txa
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.3 sta DNSHostName,y
|
||||||
|
dey
|
||||||
|
bne .1
|
||||||
|
stx DNSHostName
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
|
||||||
MAN
|
MAN
|
||||||
SAVE LIB/LIBTCPIP.S.DNS
|
SAVE LIB/LIBTCPIP.S.DNS
|
||||||
LOAD LIB/LIBTCPIP.S
|
LOAD LIB/LIBTCPIP.S
|
||||||
|
@ -19,7 +19,6 @@ ZPFrameLen1 .EQ ZPLIB+2
|
|||||||
ZPFramePtr1 .EQ ZPLIB+4
|
ZPFramePtr1 .EQ ZPLIB+4
|
||||||
ZPARPIP .EQ ZPLIB+6
|
ZPARPIP .EQ ZPLIB+6
|
||||||
ZPARPMAC .EQ ZPLIB+8
|
ZPARPMAC .EQ ZPLIB+8
|
||||||
ZPDNSHostname .EQ ZPLIB+10
|
|
||||||
ZPDNSIP .EQ ZPLIB+12
|
ZPDNSIP .EQ ZPLIB+12
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* File Header (16 Bytes)
|
* File Header (16 Bytes)
|
||||||
@ -80,6 +79,7 @@ LIB.LOAD lda bFirstLoad
|
|||||||
bne .8
|
bne .8
|
||||||
jsr ARP.CLEAR
|
jsr ARP.CLEAR
|
||||||
jsr DNS.CLEAR
|
jsr DNS.CLEAR
|
||||||
|
jsr DYN.CLEAR
|
||||||
inc bFirstLoad
|
inc bFirstLoad
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
@ -389,11 +389,19 @@ ADD.LISTENER sec
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
REM.LISTENER sec
|
REM.LISTENER sec
|
||||||
rts
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
DYN.CLEAR
|
||||||
|
*--------------------------------------
|
||||||
|
DYN.GET
|
||||||
|
*--------------------------------------
|
||||||
|
DYN.RELEASE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB LIB/LIBTCPIP.S.ARP
|
.INB LIB/LIBTCPIP.S.ARP
|
||||||
.INB LIB/LIBTCPIP.S.DNS
|
.INB LIB/LIBTCPIP.S.DNS
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PRIVATE
|
* PRIVATE
|
||||||
|
*--------------------------------------
|
||||||
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ToLowerCaseA cmp #'A'
|
ToLowerCaseA cmp #'A'
|
||||||
bcc .1
|
bcc .1
|
||||||
@ -466,14 +474,21 @@ CS.END
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
bFirstLoad .DA #0
|
bFirstLoad .DA #0
|
||||||
Status .BS 1
|
Status .BS 1
|
||||||
MESSAGE.ID .BS 2 for DNS functions
|
DNSMessageID .BS 2
|
||||||
HOST.TTL .BS 4 for DNS functions
|
DNSDynamicPort .BS 2
|
||||||
|
DNSHostTTL .BS 4
|
||||||
|
DNSHostName .BS K.DNS.MAXLEN+1
|
||||||
|
DNSHostNameLen .BS 1
|
||||||
IP.CHECKSUM .BS 4
|
IP.CHECKSUM .BS 4
|
||||||
IPCFG .BS S.IPCFG
|
IPCFG .BS S.IPCFG
|
||||||
ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE
|
ARP.CACHE .BS K.ARPCACHE.SIZE*S.ARPCACHE
|
||||||
DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
|
DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
|
||||||
UDP.TABLE .BS K.UDPTABLE.SIZE*S.LISTENER
|
UDP.TABLE .BS K.UDPTABLE.SIZE*S.LISTENER
|
||||||
TCP.TABLE .BS K.TCPTABLE.SIZE*S.LISTENER
|
TCP.TABLE .BS K.TCPTABLE.SIZE*S.LISTENER
|
||||||
|
DYNPORT.UDP.LAST .BS 2
|
||||||
|
DYNPORT.TCP.LAST .BS 2
|
||||||
|
DYNPORT.UDP .BS K.DYNPORT.MAX*4
|
||||||
|
DYNPORT.TCP .BS K.DYNPORT.MAX*4
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE LIB/LIBTCPIP.S
|
SAVE LIB/LIBTCPIP.S
|
||||||
|
@ -50,38 +50,20 @@ CS.INIT ldy #S.PS.hARGS
|
|||||||
>PUSHBI $20 Push SEP=' '
|
>PUSHBI $20 Push SEP=' '
|
||||||
>PUSHBI 1 Push 1 for getting INDEV
|
>PUSHBI 1 Push 1 for getting INDEV
|
||||||
>SYSCALL SYS.PStrGetTkn
|
>SYSCALL SYS.PStrGetTkn
|
||||||
bcs .9
|
bcs .98
|
||||||
|
|
||||||
sta hDEVNAME
|
sta hDEVNAME
|
||||||
>SYSCALL SYS.GetDevByNameA
|
>SYSCALL SYS.GetDevByNameA
|
||||||
bcs .8
|
bcs .99
|
||||||
|
|
||||||
txa
|
txa
|
||||||
ldy #S.PS.hINDEV
|
ldy #S.PS.hINDEV
|
||||||
sta (pPs),y
|
sta (pPs),y
|
||||||
|
|
||||||
|
|
||||||
lda hDEVNAME
|
|
||||||
>SYSCALL SYS.FreeMemA
|
|
||||||
|
|
||||||
ldy #S.PS.hARGS
|
|
||||||
lda (pPs),y
|
|
||||||
>PUSHA
|
|
||||||
>PUSHBI $20 Push SEP=' '
|
|
||||||
>PUSHBI 2 Push 1 for getting OUTDEV
|
|
||||||
>SYSCALL SYS.PStrGetTkn
|
|
||||||
.9 bcs .99
|
|
||||||
|
|
||||||
sta hDEVNAME
|
|
||||||
>SYSCALL SYS.GetDevByNameA
|
|
||||||
.8 bcs .98
|
|
||||||
|
|
||||||
>STYA pDev
|
|
||||||
txa
|
|
||||||
ldy #S.PS.hOUTDEV
|
ldy #S.PS.hOUTDEV
|
||||||
sta (pPs),y
|
sta (pPs),y
|
||||||
ldy #S.PS.hERRDEV
|
ldy #S.PS.hERRDEV
|
||||||
sta (pPs),y
|
sta (pPs),y
|
||||||
|
|
||||||
lda hDEVNAME
|
lda hDEVNAME
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
@ -89,7 +71,7 @@ CS.INIT ldy #S.PS.hARGS
|
|||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
>PUSHBI $20 Push SEP=' '
|
>PUSHBI $20 Push SEP=' '
|
||||||
>PUSHBI 3 Push 3 for getting BIN
|
>PUSHBI 2 Push 3 for getting BIN
|
||||||
>SYSCALL SYS.PStrGetTkn
|
>SYSCALL SYS.PStrGetTkn
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
@ -142,7 +124,7 @@ CS.RUN ldy #S.PS.hOUTDEV
|
|||||||
|
|
||||||
ldy #hBinName
|
ldy #hBinName
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
>SYSCALL SYS.ExecProcessA
|
>SYSCALL SYS.ExecProcessNewEnvA
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.DOEVENT sec
|
CS.DOEVENT sec
|
||||||
|
@ -82,7 +82,7 @@ CS.RUN lda #0
|
|||||||
|
|
||||||
ldy #hSHELL
|
ldy #hSHELL
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
>SYSCALL SYS.ExecProcessA
|
>SYSCALL SYS.ExecProcessNewEnvA
|
||||||
|
|
||||||
bcc .8
|
bcc .8
|
||||||
|
|
||||||
|
390
SBIN/SHELL.S.CMD.txt
Normal file
390
SBIN/SHELL.S.CMD.txt
Normal file
@ -0,0 +1,390 @@
|
|||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02
|
||||||
|
*--------------------------------------
|
||||||
|
EXEC.CMD stz hFullCmd
|
||||||
|
stz hEnvPath
|
||||||
|
|
||||||
|
ldy #hCmdLine
|
||||||
|
>PUSHB (pData),y
|
||||||
|
>PUSHBI $20 Push SEP=' '
|
||||||
|
>PUSHBI 0 Push 0 for getting CMD & ARGS
|
||||||
|
>SYSCALL SYS.PStrGetTkn
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
sta hExecCmd
|
||||||
|
stx hExecArgs
|
||||||
|
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPPtr1
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
stz ExecCmdIdx
|
||||||
|
|
||||||
|
.1 lda CMDS,x
|
||||||
|
beq EXEC.CMD.EXT
|
||||||
|
cmp (ZPPtr1)
|
||||||
|
bne .5
|
||||||
|
|
||||||
|
phx
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
.2 iny
|
||||||
|
inx
|
||||||
|
lda (ZPPtr1),y
|
||||||
|
cmp #'a'
|
||||||
|
bcc .3
|
||||||
|
cmp #'{'
|
||||||
|
bcs .3
|
||||||
|
eor #$20 to Uppercase
|
||||||
|
.3 cmp CMDS,x
|
||||||
|
bne .4
|
||||||
|
tya
|
||||||
|
cmp (ZPPtr1)
|
||||||
|
bne .2
|
||||||
|
plx
|
||||||
|
|
||||||
|
jsr EXEC.CMD.INT
|
||||||
|
jmp EXEC.CMD.ClnUp
|
||||||
|
|
||||||
|
.4 plx
|
||||||
|
.5 txa
|
||||||
|
sec
|
||||||
|
adc CMDS,x
|
||||||
|
tax
|
||||||
|
inc ExecCmdIdx
|
||||||
|
inc ExecCmdIdx
|
||||||
|
bra .1
|
||||||
|
.99 rts
|
||||||
|
|
||||||
|
EXEC.CMD.EXT ldy #1
|
||||||
|
lda (ZPPtr1),y
|
||||||
|
cmp #'/'
|
||||||
|
bne .2
|
||||||
|
ldy #hCmdLine
|
||||||
|
lda (pPs),y
|
||||||
|
bra .11
|
||||||
|
|
||||||
|
.2 >PUSHW L.ENV.PATH push ENVNAME=PATH
|
||||||
|
ldy #S.PS.hENV
|
||||||
|
lda (pPs),y
|
||||||
|
>PUSHA
|
||||||
|
>SYSCALL SYS.GetEnvVarP get value for ENV=PATH
|
||||||
|
|
||||||
|
bcs EXEC.CMD.ClnUp
|
||||||
|
|
||||||
|
sta hEnvPath
|
||||||
|
>PUSHB hExecCmd
|
||||||
|
>PUSHB hEnvPath
|
||||||
|
>SYSCALL SYS.FileSearch
|
||||||
|
bcc .10
|
||||||
|
|
||||||
|
>PUSHB hExecCmd
|
||||||
|
ldy #S.PS.hPREFIX
|
||||||
|
lda (pPs),y
|
||||||
|
>PUSHA
|
||||||
|
>SYSCALL SYS.FileSearch
|
||||||
|
|
||||||
|
bcs EXEC.CMD.ClnUp
|
||||||
|
|
||||||
|
.10 sta hFullCmd
|
||||||
|
.11 >SYSCALL SYS.MLIGetFileInfoA
|
||||||
|
bcs EXEC.CMD.ClnUp
|
||||||
|
|
||||||
|
>STYA ZPPTR1
|
||||||
|
ldy #1 Get File Type
|
||||||
|
lda (ZPPTR1),y
|
||||||
|
cmp #$04 TXT File ?
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
bra *
|
||||||
|
|
||||||
|
.1 jsr EXEC.CMD.ClnUp Discard CMD & ARGS
|
||||||
|
ldy #hCmdLine
|
||||||
|
lda (pData),y
|
||||||
|
>SYSCALL SYS.ExecProcessNewEnvA
|
||||||
|
|
||||||
|
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 ldx ExecCmdIdx
|
||||||
|
jmp (J.INTCMDS,x)
|
||||||
|
*--------------------------------------
|
||||||
|
EXEC.CMD.CD lda hExecArgs
|
||||||
|
bne EXEC.CMD.CD.C
|
||||||
|
ldy #S.PS.hPREFIX
|
||||||
|
lda (pPs),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||||
|
jsr CROUT
|
||||||
|
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 lda hNEWPATH
|
||||||
|
>SYSCALL SYS.CheckPrefixA
|
||||||
|
bcs .98
|
||||||
|
ldy #S.PS.hPREFIX
|
||||||
|
lda (pPs),y
|
||||||
|
pha
|
||||||
|
lda hNEWPATH
|
||||||
|
sta (pPs),y
|
||||||
|
pla
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
EXEC.CMD.SET lda hExecArgs
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
ldy #S.PS.hENV
|
||||||
|
lda (pPs),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPPTR1
|
||||||
|
|
||||||
|
.1 lda (ZPPTR1)
|
||||||
|
beq .8 Ending 0 ?
|
||||||
|
>PUSHW ZPPTR1
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||||
|
jsr CROUT
|
||||||
|
|
||||||
|
lda ZPPTR1
|
||||||
|
sec
|
||||||
|
adc (ZPPTR1) Add len+1 to PTR
|
||||||
|
sta ZPPTR1
|
||||||
|
bcc .1
|
||||||
|
inc ZPPTR1
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.2 >PUSHA Push Cmd Line
|
||||||
|
>PUSHBI $3D Push SEP='='
|
||||||
|
>PUSHBI 0 Push Token IDX
|
||||||
|
>SYSCALL SYS.PStrGetTkn
|
||||||
|
bcc .3
|
||||||
|
lda #SYSMGR.ERRSYN
|
||||||
|
rts
|
||||||
|
|
||||||
|
.3 sta hVarName
|
||||||
|
stx hVarValue
|
||||||
|
txa
|
||||||
|
bne .7
|
||||||
|
|
||||||
|
lda hExecArgs
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPPTR1
|
||||||
|
lda (ZPPTR1)
|
||||||
|
tay
|
||||||
|
lda (ZPPTR1),y
|
||||||
|
cmp #'='
|
||||||
|
beq .7
|
||||||
|
|
||||||
|
>PUSHB hVarName
|
||||||
|
ldy #S.PS.hENV
|
||||||
|
>PUSHB (pPs),y
|
||||||
|
>SYSCALL SYS.GetEnvVarH
|
||||||
|
bcs .97
|
||||||
|
sta hVarValue
|
||||||
|
|
||||||
|
lda hVarName
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||||
|
|
||||||
|
lda #'='
|
||||||
|
jsr COUT
|
||||||
|
|
||||||
|
lda hVarValue
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||||
|
jsr CROUT
|
||||||
|
|
||||||
|
bra .97
|
||||||
|
|
||||||
|
.7 >PUSHB hVarValue
|
||||||
|
>PUSHB hVarName
|
||||||
|
ldy #S.PS.hENV
|
||||||
|
>PUSHB (pPs),y
|
||||||
|
>SYSCALL SYS.SetEnvVarH
|
||||||
|
|
||||||
|
.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
|
||||||
|
bcs .9
|
||||||
|
>PUSHW DATELO
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTDATE
|
||||||
|
jsr CROUT
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime
|
||||||
|
bcs .9
|
||||||
|
>PUSHW TIMELO
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTTIME
|
||||||
|
jsr CROUT
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
EXEC.CMD.ECHO lda hExecArgs
|
||||||
|
beq .98
|
||||||
|
>SYSCALL SYS.ExpandPStrA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
pha
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||||
|
jsr CROUT
|
||||||
|
pla
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.98 lda #SYSMGR.ERRSYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
EXEC.CMD.TYPE lda hExecArgs
|
||||||
|
beq .98
|
||||||
|
>SYSCALL SYS.LoadFileA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>STYA ZPPTR2 store file len
|
||||||
|
phx
|
||||||
|
txa
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPPTR1
|
||||||
|
.1 lda ZPPTR2
|
||||||
|
bne .2
|
||||||
|
lda ZPPTR2+1
|
||||||
|
beq .3
|
||||||
|
dec ZPPTR2+1
|
||||||
|
.2 dec ZPPTR2
|
||||||
|
|
||||||
|
lda (ZPPTR1)
|
||||||
|
jsr COUT
|
||||||
|
inc ZPPTR1
|
||||||
|
bne .1
|
||||||
|
inc ZPPTR1+1
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.3 pla
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.98 lda #SYSMGR.ERRSYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
EXEC.CMD.EXIT ldy #bEXIT
|
||||||
|
lda #$FF
|
||||||
|
sta (pData),y
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE SBIN/SHELL.S.CMD
|
||||||
|
LOAD SBIN/SHELL.S
|
||||||
|
ASM
|
186
SBIN/SHELL.S.HIS.txt
Normal file
186
SBIN/SHELL.S.HIS.txt
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02
|
||||||
|
*--------------------------------------
|
||||||
|
History.Init >PUSHWI 256 Get a buffer for History
|
||||||
|
>PUSHBI S.MEM.F.INIT0
|
||||||
|
>SYSCALL SYS.GetMem
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
txa
|
||||||
|
ldy #hCmdHistory
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
ldy #CmdHistory.IDX
|
||||||
|
sta (pData),y
|
||||||
|
ldy #CmdHistory.END
|
||||||
|
sta (pData),y
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
History.Add ldy #hCmdHistory
|
||||||
|
lda (pData),y
|
||||||
|
beq .9
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPPTR1
|
||||||
|
|
||||||
|
.10 ldy #CmdHistory.END
|
||||||
|
lda (pData),y
|
||||||
|
sec add len+1
|
||||||
|
adc (pData) CmdBuffer length
|
||||||
|
bcc .2 enough room
|
||||||
|
|
||||||
|
lda (ZPPTR1) get len of oldest string
|
||||||
|
sec
|
||||||
|
adc ZPPTR1
|
||||||
|
sta ZPPTR2
|
||||||
|
lda ZPPTR1+1
|
||||||
|
adc #0
|
||||||
|
sta ZPPTR2+1
|
||||||
|
|
||||||
|
ldy #$FF
|
||||||
|
|
||||||
|
.1 iny
|
||||||
|
lda (ZPPTR2),y move back until ending 0 found
|
||||||
|
sta (ZPPTR1),y
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
tya
|
||||||
|
|
||||||
|
ldy #CmdHistory.END mark new end of history
|
||||||
|
sta (pData),y
|
||||||
|
bra .10 retry....
|
||||||
|
|
||||||
|
.2 tax keep new CmdHistory.END
|
||||||
|
|
||||||
|
tay
|
||||||
|
lda #0
|
||||||
|
sta (ZPPTR1),y set ending 0
|
||||||
|
|
||||||
|
ldy #CmdHistory.END save old END
|
||||||
|
lda (pData),y
|
||||||
|
pha
|
||||||
|
|
||||||
|
txa get back new END
|
||||||
|
|
||||||
|
ldy #CmdHistory.IDX set it as new IDX
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
ldy #CmdHistory.END
|
||||||
|
sta (pData),y set new CmdHistory.END
|
||||||
|
|
||||||
|
pla get back old END
|
||||||
|
clc
|
||||||
|
adc ZPPTR1
|
||||||
|
sta ZPPTR1
|
||||||
|
bcc .3
|
||||||
|
inc ZPPTR1+1
|
||||||
|
|
||||||
|
.3 lda (pData)
|
||||||
|
tay
|
||||||
|
|
||||||
|
.4 lda (pData),y
|
||||||
|
sta (ZPPTR1),y
|
||||||
|
dey
|
||||||
|
bpl .4
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
History.GetPrev ldy #hCmdHistory
|
||||||
|
lda (pData),y
|
||||||
|
beq HISTORY.RTS
|
||||||
|
|
||||||
|
tax
|
||||||
|
|
||||||
|
ldy #CmdHistory.END
|
||||||
|
lda (pData),y
|
||||||
|
beq HISTORY.RTS empty history,nothing to do
|
||||||
|
ldy #CmdHistory.IDX
|
||||||
|
lda (pData),y
|
||||||
|
beq HISTORY.RTS already oldest,nothing to do
|
||||||
|
|
||||||
|
txa
|
||||||
|
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPPTR1
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
|
||||||
|
.1 tax
|
||||||
|
tay
|
||||||
|
sec
|
||||||
|
adc (ZPPTR1),y
|
||||||
|
ldy #CmdHistory.IDX
|
||||||
|
cmp (pData),y
|
||||||
|
bne .1 reached current index
|
||||||
|
|
||||||
|
.2 txa
|
||||||
|
ldy #CmdHistory.IDX set new index
|
||||||
|
sta (pData),y
|
||||||
|
bra History.SetBuf
|
||||||
|
History.RTS rts
|
||||||
|
*--------------------------------------
|
||||||
|
History.GetNext ldy #hCmdHistory
|
||||||
|
lda (pData),y
|
||||||
|
beq HISTORY.RTS
|
||||||
|
|
||||||
|
tax
|
||||||
|
|
||||||
|
ldy #CmdHistory.END
|
||||||
|
lda (pData),y
|
||||||
|
beq HISTORY.RTS empty history,nothing to do
|
||||||
|
ldy #CmdHistory.IDX
|
||||||
|
cmp (pData),y
|
||||||
|
beq HISTORY.RTS already oldest,nothing to do
|
||||||
|
|
||||||
|
txa
|
||||||
|
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPPTR1
|
||||||
|
|
||||||
|
ldy #CmdHistory.IDX
|
||||||
|
lda (pData),y
|
||||||
|
phy
|
||||||
|
tay
|
||||||
|
sec
|
||||||
|
adc (ZPPTR1),y add length+1 of current line in history
|
||||||
|
ply
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
ldy #CmdHistory.END
|
||||||
|
cmp (pData),y
|
||||||
|
bne History.SetBuf
|
||||||
|
jmp CmdBuffer.CLR end of history, just blank buffer
|
||||||
|
*--------------------------------------
|
||||||
|
History.SetBuf jsr CmdBuffer.CLR
|
||||||
|
|
||||||
|
ldy #CmdHistory.IDX
|
||||||
|
lda (pData),y
|
||||||
|
tay keep length of string
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc ZPPTR1
|
||||||
|
sta ZPPTR1
|
||||||
|
bcc .1
|
||||||
|
inc ZPPTR1+1
|
||||||
|
|
||||||
|
.1 lda (ZPPTR1),y
|
||||||
|
sta (pData),y
|
||||||
|
dey
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
jmp CmdBuffer.PRINT
|
||||||
|
*--------------------------------------
|
||||||
|
History.Quit ldy #hCmdHistory
|
||||||
|
lda (pData),y
|
||||||
|
beq .9
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE SBIN/SHELL.S.HIS
|
||||||
|
LOAD SBIN/SHELL.S
|
||||||
|
ASM
|
452
SBIN/SHELL.S.txt
452
SBIN/SHELL.S.txt
@ -3,7 +3,7 @@ PREFIX /A2OSX.SRC
|
|||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF /A2OSX.BOOT/SBIN/SHELL
|
.TF /A2OSX.BOOT/SBIN/SHELL
|
||||||
@ -33,7 +33,7 @@ CS.START cld
|
|||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Relocation Table
|
* Relocation Table
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
@ -43,8 +43,8 @@ L.LIBSTR .DA LIBSTR
|
|||||||
L.MSG.GREETINGS .DA MSG.GREETINGS
|
L.MSG.GREETINGS .DA MSG.GREETINGS
|
||||||
L.MSG.UNKNOWN .DA MSG.UNKNOWN
|
L.MSG.UNKNOWN .DA MSG.UNKNOWN
|
||||||
L.MSG.SYNERR .DA MSG.SYNERR
|
L.MSG.SYNERR .DA MSG.SYNERR
|
||||||
L.CMDS .DA CMDS
|
L.ENV.PATH .DA ENV.PATH
|
||||||
T.INTCMDS .DA EXEC.CMD.CD
|
J.INTCMDS .DA EXEC.CMD.CD
|
||||||
.DA EXEC.CMD.SET
|
.DA EXEC.CMD.SET
|
||||||
.DA EXEC.CMD.DATE
|
.DA EXEC.CMD.DATE
|
||||||
.DA EXEC.CMD.TIME
|
.DA EXEC.CMD.TIME
|
||||||
@ -53,26 +53,23 @@ T.INTCMDS .DA EXEC.CMD.CD
|
|||||||
.DA EXEC.CMD.EXIT
|
.DA EXEC.CMD.EXIT
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT lda #0
|
CS.INIT >LDYA L.LIBSTR
|
||||||
ldy #bEXIT
|
|
||||||
sta (pData),y
|
|
||||||
ldy #CmdHistory.IDX
|
|
||||||
sta (pData),y
|
|
||||||
ldy #CmdHistory.END
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
>PUSHWI 256 Get a buffer for History
|
|
||||||
>PUSHBI S.MEM.F.INIT0
|
|
||||||
>SYSCALL SYS.GetMem
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
stx hCmdHistory
|
|
||||||
|
|
||||||
>LDYA L.LIBSTR
|
|
||||||
>LOADLIBYA
|
>LOADLIBYA
|
||||||
bcs .99
|
bcs .9
|
||||||
sta hLIBSTR
|
sta hLIBSTR
|
||||||
|
|
||||||
|
ldy #S.PS.hARGS Batch mode ?
|
||||||
|
lda (pPs),y
|
||||||
|
beq CS.INIT.INTERACTIVE no,continue starting interactive
|
||||||
|
|
||||||
|
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.INIT.INTERACTIVE
|
||||||
|
jsr History.Init
|
||||||
|
bcs .9
|
||||||
|
|
||||||
ldy #S.PS.ID
|
ldy #S.PS.ID
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
@ -88,9 +85,9 @@ CS.INIT lda #0
|
|||||||
lda (pPs)
|
lda (pPs)
|
||||||
ora #S.PS.F.EVENT Now accept events
|
ora #S.PS.F.EVENT Now accept events
|
||||||
sta (pPs)
|
sta (pPs)
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.99 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN lda #0
|
CS.RUN lda #0
|
||||||
sta (pData)
|
sta (pData)
|
||||||
@ -107,14 +104,19 @@ CS.RUN lda #0
|
|||||||
.2 and #$7F
|
.2 and #$7F
|
||||||
sta (pData)
|
sta (pData)
|
||||||
beq CS.RUN Empty line
|
beq CS.RUN Empty line
|
||||||
|
ldy #1
|
||||||
|
lda (pData),y
|
||||||
|
cmp #'#' Comment
|
||||||
|
beq CS.RUN
|
||||||
|
|
||||||
|
jsr History.Add
|
||||||
|
|
||||||
>LDYA pData
|
>LDYA pData
|
||||||
>SYSCALL SYS.NewPStrYA
|
>SYSCALL SYS.NewPStrYA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
ldy #hCMDLINE
|
ldy #hCmdLine
|
||||||
sta (pData),y
|
sta (pData),y
|
||||||
jsr HISTORY.ADD
|
|
||||||
jsr EXEC.CMD
|
jsr EXEC.CMD
|
||||||
bcc .3
|
bcc .3
|
||||||
|
|
||||||
@ -127,10 +129,10 @@ CS.RUN lda #0
|
|||||||
jsr COUT
|
jsr COUT
|
||||||
jsr CROUT
|
jsr CROUT
|
||||||
|
|
||||||
.3 ldy #hCMDLINE
|
.3 ldy #hCmdLine
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
ldy #hCMDLINE
|
ldy #hCmdLine
|
||||||
lda #0
|
lda #0
|
||||||
sta (pData),y
|
sta (pData),y
|
||||||
|
|
||||||
@ -238,371 +240,14 @@ CS.EVENT.CTRL.CHAR
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.QUIT lda hCmdHistory
|
CS.QUIT jsr History.Quit
|
||||||
beq .1
|
lda hLIBSTR
|
||||||
>SYSCALL SYS.FreeMemA
|
|
||||||
|
|
||||||
.1 lda hLIBSTR
|
|
||||||
>SYSCALL SYS.UnloadLibA
|
>SYSCALL SYS.UnloadLibA
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PRIVATE
|
* PRIVATE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXEC.CMD ldy #hCMDLINE
|
|
||||||
>PUSHB (pData),y
|
|
||||||
>PUSHBI $20 Push SEP=' '
|
|
||||||
>PUSHBI 0 Push 0 for getting CMD & ARGS
|
|
||||||
>SYSCALL SYS.PStrGetTkn
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
ldy #hCMD
|
|
||||||
sta (pData),y
|
|
||||||
pha
|
|
||||||
txa
|
|
||||||
ldy #hARGS
|
|
||||||
sta (pData),y
|
|
||||||
pla
|
|
||||||
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>PUSHYA
|
|
||||||
>PUSHYA
|
|
||||||
|
|
||||||
>LIBCALL hLIBSTR,LIBSTR.UCASEP
|
|
||||||
>PUSHW L.CMDS
|
|
||||||
>SYSCALL SYS.GetPStrIndex
|
|
||||||
bcs .1 Not An internal command
|
|
||||||
jsr EXEC.CMD.INT
|
|
||||||
bcs .98
|
|
||||||
jsr .98
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.1 jsr .98 Discard CMD & ARGS
|
|
||||||
ldy #hCMDLINE
|
|
||||||
lda (pData),y
|
|
||||||
>SYSCALL SYS.ExecProcessA
|
|
||||||
rts
|
|
||||||
|
|
||||||
.98 pha
|
|
||||||
ldy #hCMD
|
|
||||||
lda (pData),y
|
|
||||||
>SYSCALL SYS.FreeMemA
|
|
||||||
ldy #hARGS
|
|
||||||
lda (pData),y
|
|
||||||
>SYSCALL SYS.FreeMemA
|
|
||||||
pla
|
|
||||||
sec
|
|
||||||
.99 rts
|
|
||||||
*--------------------------------------
|
|
||||||
EXEC.CMD.INT asl
|
|
||||||
tax
|
|
||||||
jmp (T.INTCMDS,x)
|
|
||||||
*--------------------------------------
|
|
||||||
EXEC.CMD.CD ldy #hARGS
|
|
||||||
lda (pData),y
|
|
||||||
bne EXEC.CMD.CD.C
|
|
||||||
ldy #S.PS.hPREFIX
|
|
||||||
lda (pPs),y
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>PUSHYA
|
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
|
||||||
jsr CROUT
|
|
||||||
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 lda hNEWPATH
|
|
||||||
>SYSCALL SYS.CheckPrefixA
|
|
||||||
bcs .98
|
|
||||||
ldy #S.PS.hPREFIX
|
|
||||||
lda (pPs),y
|
|
||||||
pha
|
|
||||||
lda hNEWPATH
|
|
||||||
sta (pPs),y
|
|
||||||
pla
|
|
||||||
>SYSCALL SYS.FreeMemA
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
EXEC.CMD.SET ldy #hARGS
|
|
||||||
lda (pData),y
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
ldy #S.PS.hENV
|
|
||||||
lda (pPs),y
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>STYA ZPPTR1
|
|
||||||
|
|
||||||
.1 lda (ZPPTR1)
|
|
||||||
beq .8 Ending 0 ?
|
|
||||||
>PUSHW ZPPTR1
|
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
|
||||||
jsr CROUT
|
|
||||||
|
|
||||||
lda ZPPTR1
|
|
||||||
sec
|
|
||||||
adc (ZPPTR1) Add len+1 to PTR
|
|
||||||
sta ZPPTR1
|
|
||||||
bcc .1
|
|
||||||
inc ZPPTR1
|
|
||||||
bra .1
|
|
||||||
|
|
||||||
.2 sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime
|
|
||||||
bcs .9
|
|
||||||
>PUSHW DATELO
|
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTDATE
|
|
||||||
jsr CROUT
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime
|
|
||||||
bcs .9
|
|
||||||
>PUSHW TIMELO
|
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTTIME
|
|
||||||
jsr CROUT
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
EXEC.CMD.ECHO ldy #hARGS
|
|
||||||
lda (pData),y
|
|
||||||
beq .98
|
|
||||||
>SYSCALL SYS.ExpandPStrA
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
pha
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>PUSHYA
|
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
|
||||||
jsr CROUT
|
|
||||||
pla
|
|
||||||
>SYSCALL SYS.FreeMemA
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.98 lda #SYSMGR.ERRSYN
|
|
||||||
sec
|
|
||||||
.99 rts
|
|
||||||
*--------------------------------------
|
|
||||||
EXEC.CMD.TYPE ldy #hARGS
|
|
||||||
lda (pData),y
|
|
||||||
beq .98
|
|
||||||
>SYSCALL SYS.LoadFileA
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
>STYA ZPPTR2 store file len
|
|
||||||
phx
|
|
||||||
txa
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>STYA ZPPTR1
|
|
||||||
.1 lda ZPPTR2
|
|
||||||
bne .2
|
|
||||||
lda ZPPTR2+1
|
|
||||||
beq .3
|
|
||||||
dec ZPPTR2+1
|
|
||||||
.2 dec ZPPTR2
|
|
||||||
|
|
||||||
lda (ZPPTR1)
|
|
||||||
jsr COUT
|
|
||||||
inc ZPPTR1
|
|
||||||
bne .1
|
|
||||||
inc ZPPTR1+1
|
|
||||||
bra .1
|
|
||||||
|
|
||||||
.3 pla
|
|
||||||
>SYSCALL SYS.FreeMemA
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.98 lda #SYSMGR.ERRSYN
|
|
||||||
sec
|
|
||||||
.99 rts
|
|
||||||
*--------------------------------------
|
|
||||||
EXEC.CMD.EXIT ldy #bEXIT
|
|
||||||
lda #$FF
|
|
||||||
sta (pData),y
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
HISTORY.ADD lda hCmdHistory
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>STYA ZPPTR1
|
|
||||||
|
|
||||||
.10 lda CmdHistory.END ending 0
|
|
||||||
inc keep room for new ending 0
|
|
||||||
sec add len+1
|
|
||||||
adc (pData) CmdBuffer
|
|
||||||
bcc .2 enough room
|
|
||||||
|
|
||||||
lda (ZPPTR1) get len of oldest string
|
|
||||||
sec
|
|
||||||
adc ZPPTR1
|
|
||||||
sta ZPPTR2
|
|
||||||
lda ZPPTR1+1
|
|
||||||
adc #0
|
|
||||||
sta ZPPTR2+1
|
|
||||||
|
|
||||||
ldy #$FF
|
|
||||||
|
|
||||||
.1 iny
|
|
||||||
lda (ZPPTR2),y move back until 0 found
|
|
||||||
sta (ZPPTR1),y
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
sty CmdHistory.END mark new end of history
|
|
||||||
bra .10 retry....
|
|
||||||
|
|
||||||
.2 ldy CmdHistory.END
|
|
||||||
lda (pData)
|
|
||||||
tax
|
|
||||||
lda pData
|
|
||||||
sta ZPPTR2
|
|
||||||
lda pData+1
|
|
||||||
sta ZPPTR2+1
|
|
||||||
|
|
||||||
.3 lda (ZPPTR2)
|
|
||||||
sta (ZPPTR1),y
|
|
||||||
inc ZPPTR2
|
|
||||||
bne .4
|
|
||||||
inc ZPPTR2+1
|
|
||||||
.4 iny
|
|
||||||
dex
|
|
||||||
bpl .3
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
sta (ZPPTR1),y set ending 0
|
|
||||||
sty CmdHistory.IDX
|
|
||||||
sty CmdHistory.END
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
HISTORY.GETPREV lda CmdHistory.END
|
|
||||||
beq HISTORY.RTS empty history,nothing to do
|
|
||||||
lda CmdHistory.IDX
|
|
||||||
beq HISTORY.RTS already oldest,nothing to do
|
|
||||||
|
|
||||||
lda hCmdHistory
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>STYA ZPPTR1
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
.1 tay save current index
|
|
||||||
sec
|
|
||||||
adc (ZPPTR1),y
|
|
||||||
cmp CmdHistory.IDX
|
|
||||||
bne .1 not yet reached current index
|
|
||||||
sty CmdHistory.IDX set new index
|
|
||||||
bra HISTORY.SETBUF
|
|
||||||
HISTORY.RTS rts
|
|
||||||
*--------------------------------------
|
|
||||||
HISTORY.GETNEXT ldx CmdHistory.END
|
|
||||||
beq HISTORY.RTS empty history,nothing to do
|
|
||||||
cpx CmdHistory.IDX
|
|
||||||
beq HISTORY.RTS
|
|
||||||
|
|
||||||
lda hCmdHistory
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>STYA ZPPTR1
|
|
||||||
|
|
||||||
ldy CmdHistory.IDX
|
|
||||||
lda (ZPPTR1),y
|
|
||||||
sec
|
|
||||||
adc CmdHistory.IDX
|
|
||||||
cmp CmdHistory.END
|
|
||||||
sta CmdHistory.IDX
|
|
||||||
beq CmdBuffer.CLR end of history, just blank buffer
|
|
||||||
*--------------------------------------
|
|
||||||
HISTORY.SETBUF jsr CmdBuffer.CLR
|
|
||||||
|
|
||||||
lda pData
|
|
||||||
sta ZPPTR2
|
|
||||||
lda pData+1
|
|
||||||
sta ZPPTR2+1
|
|
||||||
|
|
||||||
ldy CmdHistory.IDX
|
|
||||||
lda (ZPPTR1),y
|
|
||||||
tax
|
|
||||||
|
|
||||||
.1 lda (ZPPTR1),y
|
|
||||||
sta (ZPPTR2)
|
|
||||||
|
|
||||||
inc ZPPTR2
|
|
||||||
bne .2
|
|
||||||
inc ZPPTR2+1
|
|
||||||
|
|
||||||
.2 iny
|
|
||||||
dex
|
|
||||||
bpl .1
|
|
||||||
*--------------------------------------
|
|
||||||
CmdBuffer.PRINT ldy #0
|
CmdBuffer.PRINT ldy #0
|
||||||
.1 iny
|
.1 iny
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
@ -615,7 +260,7 @@ CmdBuffer.PRINT ldy #0
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CmdBuffer.CLR jsr CmdBuffer.DEL
|
CmdBuffer.CLR jsr CmdBuffer.DEL
|
||||||
bne CmdBuffer.CLR
|
bne CmdBuffer.CLR
|
||||||
.9 rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CmdBuffer.DEL lda (pData)
|
CmdBuffer.DEL lda (pData)
|
||||||
beq .9
|
beq .9
|
||||||
@ -654,17 +299,21 @@ COUT phx
|
|||||||
plx
|
plx
|
||||||
rts
|
rts
|
||||||
pDevJmp jmp (pDev)
|
pDevJmp jmp (pDev)
|
||||||
|
*--------------------------------------
|
||||||
|
.INB SBIN/SHELL.S.CMD
|
||||||
|
.INB SBIN/SHELL.S.HIS
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
ENV.PATH >PSTRING "PATH"
|
||||||
CMDS >PSTRING "CD"
|
CMDS >PSTRING "CD"
|
||||||
CMDS1 >PSTRING "SET"
|
>PSTRING "SET"
|
||||||
CMDS2 >PSTRING "DATE"
|
>PSTRING "DATE"
|
||||||
CMDS3 >PSTRING "TIME"
|
>PSTRING "TIME"
|
||||||
CMDS4 >PSTRING "ECHO"
|
>PSTRING "ECHO"
|
||||||
CMDS5 >PSTRING "TYPE"
|
>PSTRING "TYPE"
|
||||||
CMDS6 >PSTRING "EXIT"
|
>PSTRING "EXIT"
|
||||||
.DA #0
|
.HS 00
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
LIBSTR >PSTRING "libstr.o"
|
LIBSTR >PSTRING "libstr.o"
|
||||||
MSG.GREETINGS >CSTRING "\nA2osX-Shell on Dev=(%h:%h),PS=%h\n\n"
|
MSG.GREETINGS >CSTRING "\nA2osX-Shell on Dev=(%h:%h),PS=%h\n\n"
|
||||||
@ -672,18 +321,23 @@ MSG.UNKNOWN >CSTRING "Command Not Found\n"
|
|||||||
MSG.SYNERR >CSTRING "Syntax Error Or Invalid Pathname\n"
|
MSG.SYNERR >CSTRING "Syntax Error Or Invalid Pathname\n"
|
||||||
hLIBSTR .BS 1
|
hLIBSTR .BS 1
|
||||||
hNEWPATH .BS 1
|
hNEWPATH .BS 1
|
||||||
|
hExecCmd .BS 1
|
||||||
|
hExecArgs .BS 1
|
||||||
|
hEnvPath .BS 1
|
||||||
|
hFullCmd .BS 1
|
||||||
|
hVarName .BS 1
|
||||||
|
hVarValue .BS 1
|
||||||
|
ExecCmdIdx .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DUMMY
|
.DUMMY
|
||||||
.OR 0
|
.OR 0
|
||||||
DS.START
|
DS.START
|
||||||
CmdBuffer .BS CmdBuffer.MAX+1
|
CmdBuffer .BS CmdBuffer.MAX+1
|
||||||
bEXIT .BS 1
|
bEXIT .BS 1
|
||||||
hCMDLINE .BS 1
|
hCmdLine .BS 1
|
||||||
hCMD .BS 1
|
|
||||||
hARGS .BS 1
|
|
||||||
hCmdHistory .BS 1
|
hCmdHistory .BS 1
|
||||||
CmdHistory.IDX .BS 1
|
CmdHistory.IDX .BS 1
|
||||||
CmdHistory.END .BS 1
|
CmdHistory.END .BS 1
|
||||||
DS.END
|
DS.END
|
||||||
.ED
|
.ED
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -252,11 +252,11 @@ CS.QUIT lda hDev
|
|||||||
>SYSCALL SYS.GetDevByIDA
|
>SYSCALL SYS.GetDevByIDA
|
||||||
>STYA pDev
|
>STYA pDev
|
||||||
|
|
||||||
ldx #DEVMGR.OPEN
|
ldx #DEVMGR.CLOSE
|
||||||
jsr pDevJmp
|
jsr pDevJmp
|
||||||
|
|
||||||
lda hLIBTCPIP
|
lda hLIBTCPIP
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.UnloadLibA
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -399,7 +399,11 @@ DNSListener ldy #S.DNS.F+1
|
|||||||
and /S.DNS.F.QR
|
and /S.DNS.F.QR
|
||||||
beq .9
|
beq .9
|
||||||
|
|
||||||
ldy #S.DNS.QDCOUNT
|
ldy #S.DNS.ANCOUNT+1
|
||||||
|
lda (ZPFrameBase1),y
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
ldy #S.DNS.QDCOUNT+1
|
||||||
lda (ZPFrameBase1),y
|
lda (ZPFrameBase1),y
|
||||||
tax
|
tax
|
||||||
beq .3 no QUERY to skip
|
beq .3 no QUERY to skip
|
||||||
@ -417,22 +421,9 @@ DNSListener ldy #S.DNS.F+1
|
|||||||
dex skip another QUERY ?
|
dex skip another QUERY ?
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
.3 lda (ZPFrameBase1),y get offset of NAME
|
.3 iny skip high byte of offset
|
||||||
phy save current offset in frame
|
iny skip lo byte of offset
|
||||||
tay
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
.4 lda (ZPFrameBase1),y compute len of NAME
|
|
||||||
beq .5
|
|
||||||
inx
|
|
||||||
iny
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
.5 inx X=length of NAME
|
|
||||||
|
|
||||||
ply get back offset in frame
|
|
||||||
|
|
||||||
>STYA ZPQuickPtr1
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -6,44 +6,81 @@ AUTO 6
|
|||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF SBIN/TELNETD
|
.TF /A2OSX.BOOT/SBIN/TELNETD
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
.INB INC/MONITOR.I
|
.INB INC/A2OSX.API.I
|
||||||
|
.INB INC/KERNEL.I
|
||||||
|
.INB INC/LIBTCPIP.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
.1 .DA CS.INIT
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
.DA CS.RUN
|
.DA #1 BIN Layout Version 1
|
||||||
.DA CS.EVENT
|
|
||||||
.DA CS.QUIT
|
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
.DA 0 Data Segemnt to Allocate
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT clc
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
|
.1 .DA CS.INIT
|
||||||
|
.DA CS.RUN
|
||||||
|
.DA CS.DOEVENT
|
||||||
|
.DA CS.QUIT
|
||||||
|
L.LIBTCPIP .DA LIBTCPIP
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
CS.INIT >LDYA L.LIBTCPIP
|
||||||
|
>LOADLIBYA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
sta hLIBTCPIP
|
||||||
|
|
||||||
|
>PUSHWI S.IP.PROTOCOL.TCP
|
||||||
|
>PUSHWI TCP.PORT.TELNETS
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.CreateSocket
|
||||||
|
bcs .99
|
||||||
|
sta hSrvSocket
|
||||||
|
|
||||||
|
clc
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN lda hSrvSocket
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.ListenSocket
|
||||||
|
bcs .8
|
||||||
|
|
||||||
|
>LIBCALL hLIBTCPIP,LIBTCPIP.CreateDevice
|
||||||
|
bcs *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.8 clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN clc
|
CS.DOEVENT clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.EVENT clc
|
CS.QUIT >PUSHB hSrvSocket
|
||||||
rts
|
>LIBCALL hLIBTCPIP,LIBTCPIP.DestroySocket
|
||||||
*--------------------------------------
|
|
||||||
CS.QUIT clc
|
|
||||||
|
lda hLIBTCPIP
|
||||||
|
>SYSCALL SYS.UnloadLibA
|
||||||
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
|
*--------------------------------------
|
||||||
|
LIBTCPIP >PSTRING "libtcpip.o"
|
||||||
|
hLIBTCPIP .BS 1
|
||||||
|
hSrvSocket .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
|
||||||
MAN
|
MAN
|
||||||
SAVE SBIN/TELNETD.S
|
SAVE SBIN/TELNETD.S
|
||||||
ASM
|
ASM
|
||||||
|
@ -10,15 +10,15 @@ DevMgr.HiMem .EQ $FFFE Protect IRQ vector in Aux LC
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.DevMgrInit
|
* S.DevMgrInit
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.DevMgrInit ldx #S.DEV.SIZE*2
|
S.DevMgrInit ldx #S.DEV.SIZE*DevMgr.Count
|
||||||
.1 lda DevMgr.NUL-1,x
|
.1 lda DevMgr.NUL-1,x
|
||||||
sta DevMgr.Table-1,x
|
sta DevMgr.Table-1,x
|
||||||
dex
|
dex
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
stz DevMgr.Table+S.DEV.SIZE*2+1
|
stz DevMgr.Table+S.DEV.SIZE*DevMgr.Count+1
|
||||||
|
|
||||||
lda #1 reserve #0=NUL, #1=KBD
|
lda #DevMgr.Count-1
|
||||||
sta DevMgr.LastDevID
|
sta DevMgr.LastDevID
|
||||||
|
|
||||||
>LDYAI DevMgr.End
|
>LDYAI DevMgr.End
|
||||||
@ -146,45 +146,7 @@ S.GetDevEvent >LDYAI DevMgr.Table
|
|||||||
sta (pEvent),y
|
sta (pEvent),y
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DevMgr.Free .BS 2
|
S.GetKeyboardEvent
|
||||||
DevMgr.DevID .BS 1
|
|
||||||
DevMgr.LastDevID .BS 1
|
|
||||||
*--------------------------------------
|
|
||||||
DevMgr.NUL cld
|
|
||||||
jmp (DevMgr.NUL.Code,x)
|
|
||||||
.DA #S.DEV.F.INUSE+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR
|
|
||||||
>PSTRING "NUL" NAME
|
|
||||||
.HS 00 NAME must Be 5 bytes long
|
|
||||||
.HS 00.00
|
|
||||||
.HS 00.00.00.00
|
|
||||||
*--------------------------------------
|
|
||||||
DevMgr.KBD cld
|
|
||||||
jmp (DevMgr.KBD.Code,x)
|
|
||||||
.DA #S.DEV.F.INUSE+S.DEV.F.EVENT+S.DEV.F.CHAR
|
|
||||||
>PSTRING "KBD" NAME
|
|
||||||
.HS 00 NAME must Be 5 bytes long
|
|
||||||
.HS 00.00
|
|
||||||
.HS 00.00.00.00
|
|
||||||
*--------------------------------------
|
|
||||||
DevMgr.NUL.Code .DA .8 OPEN
|
|
||||||
.DA .8 GETEVENT
|
|
||||||
.DA .8 COUT
|
|
||||||
.DA .8 CLOSE
|
|
||||||
.DA .8 GETINFO
|
|
||||||
.DA .8 IRQ
|
|
||||||
.8 clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DevMgr.KBD.Code .DA .8 OPEN
|
|
||||||
.DA DevMgr.KBD.GETEVENT
|
|
||||||
.DA .8 COUT
|
|
||||||
.DA .8 CLOSE
|
|
||||||
.DA .8 GETINFO
|
|
||||||
.DA .8 IRQ
|
|
||||||
.8 clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
DevMgr.KBD.GETEVENT
|
|
||||||
lda KBD
|
lda KBD
|
||||||
bpl .9
|
bpl .9
|
||||||
|
|
||||||
@ -212,6 +174,46 @@ DevMgr.KBD.GETEVENT
|
|||||||
sec no event
|
sec no event
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
DevMgr.Free .BS 2
|
||||||
|
DevMgr.DevID .BS 1
|
||||||
|
DevMgr.LastDevID .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
DevMgr.Count .EQ 2
|
||||||
|
*--------------------------------------
|
||||||
|
DevMgr.NUL cld
|
||||||
|
jmp (DevMgr.NUL.Code,x)
|
||||||
|
.DA #S.DEV.F.INUSE+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR
|
||||||
|
>PSTRING "NUL" NAME
|
||||||
|
.HS 00 NAME must Be 5 bytes long
|
||||||
|
.HS 00.00
|
||||||
|
.HS 00.00.00.00
|
||||||
|
*--------------------------------------
|
||||||
|
DevMgr.SYS cld
|
||||||
|
jmp (DevMgr.SYS.Code,x)
|
||||||
|
.DA #S.DEV.F.INUSE+S.DEV.F.CHAR
|
||||||
|
>PSTRING "SYS" NAME
|
||||||
|
.HS 00 NAME must Be 5 bytes long
|
||||||
|
.HS 00.00
|
||||||
|
.HS 00.00.00.00
|
||||||
|
*--------------------------------------
|
||||||
|
DevMgr.NUL.Code .DA .8 OPEN
|
||||||
|
.DA .8 GETEVENT
|
||||||
|
.DA .8 COUT
|
||||||
|
.DA .8 CLOSE
|
||||||
|
.DA .8 GETINFO
|
||||||
|
.DA .8 IRQ
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
DevMgr.SYS.Code .DA .8 OPEN
|
||||||
|
.DA .8 GETEVENT
|
||||||
|
.DA .8 COUT
|
||||||
|
.DA .8 CLOSE
|
||||||
|
.DA .8 GETINFO
|
||||||
|
.DA .8 IRQ
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
DevMgr.End .EQ *
|
DevMgr.End .EQ *
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.DEV
|
SAVE SYS/KERNEL.S.DEV
|
||||||
|
@ -24,24 +24,11 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
|||||||
|
|
||||||
.1 sta LoadDrv.Cmd
|
.1 sta LoadDrv.Cmd
|
||||||
stx LoadDrv.Args
|
stx LoadDrv.Args
|
||||||
>PUSHA push CMD for S.FileSearch
|
pha
|
||||||
|
|
||||||
>PUSHWI ENV.DRV push ENVNAME=DRV
|
|
||||||
ldy #S.PS.hENV
|
|
||||||
lda TskMgr.Table,y Get PS #0 Env
|
|
||||||
>PUSHA
|
|
||||||
jsr S.GetEnvVarP get value for ENV=%DRV%
|
|
||||||
bcs .98
|
|
||||||
|
|
||||||
sta LoadDrv.Path
|
|
||||||
>PUSHA A=PStr to Value
|
|
||||||
jsr S.FileSearch find File in %DRV%
|
|
||||||
bcs .97 not Found
|
|
||||||
|
|
||||||
sta LoadDrv.FullName
|
|
||||||
jsr S.SysScrPPSTRA
|
jsr S.SysScrPPSTRA
|
||||||
|
pla
|
||||||
lda LoadDrv.FullName
|
jsr S.ExpandPStrA
|
||||||
|
sta LoadDrv.ExpCmd
|
||||||
jsr S.LoadBinA
|
jsr S.LoadBinA
|
||||||
bcs .96
|
bcs .96
|
||||||
|
|
||||||
@ -71,12 +58,7 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
|||||||
pla
|
pla
|
||||||
|
|
||||||
.96 pha
|
.96 pha
|
||||||
lda LoadDrv.FullName
|
lda LoadDrv.ExpCmd
|
||||||
jsr S.FreeMemA
|
|
||||||
pla
|
|
||||||
|
|
||||||
.97 pha
|
|
||||||
lda LoadDrv.Path
|
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
pla
|
pla
|
||||||
|
|
||||||
@ -91,11 +73,10 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
|||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MSG.DRVLOAD >PSTRING "\nLoadDrv:"
|
MSG.DRVLOAD >PSTRING "\nLoadDrv:"
|
||||||
LoadDrv.Cmd .BS 1
|
LoadDrv.Cmd .BS 1
|
||||||
LoadDrv.Args .BS 1
|
LoadDrv.Args .BS 1
|
||||||
LoadDrv.Path .BS 1
|
LoadDrv.ExpCmd .BS 1
|
||||||
LoadDrv.FullName .BS 1
|
LoadDrv.hMem .BS 1
|
||||||
LoadDrv.hMem .BS 1
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* pCode = .DRV File Loaded Address
|
* pCode = .DRV File Loaded Address
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -306,28 +306,6 @@ S.SetEnvVar plp
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PRIVATE
|
* PRIVATE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.SetSysEnvA >PUSHA Push Cmd Line
|
|
||||||
>PUSHBI $3D Push SEP='='
|
|
||||||
>PUSHBI 0 Push Token IDX
|
|
||||||
jsr S.PStrGetTkn
|
|
||||||
bcs *
|
|
||||||
phx save X,A for discard
|
|
||||||
pha
|
|
||||||
pha
|
|
||||||
txa
|
|
||||||
>PUSHA
|
|
||||||
pla
|
|
||||||
>PUSHA
|
|
||||||
ldy #S.PS.hENV
|
|
||||||
lda TSKMGR.TABLE,y
|
|
||||||
>PUSHA
|
|
||||||
jsr S.SetEnvVarH
|
|
||||||
|
|
||||||
pla disard NAME
|
|
||||||
jsr S.FreeMemA
|
|
||||||
pla discard VALUE
|
|
||||||
jmp S.FreeMemA
|
|
||||||
*--------------------------------------
|
|
||||||
* S.SelectEnvH
|
* S.SelectEnvH
|
||||||
* In:
|
* In:
|
||||||
* PULLB = hENV
|
* PULLB = hENV
|
||||||
@ -392,24 +370,6 @@ S.SelectEnv
|
|||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.PrintSysEnv ldy #S.PS.hENV
|
|
||||||
lda TskMgr.Table,y Get PS #0 ENV
|
|
||||||
jsr S.GetMemPtrA
|
|
||||||
>STYA R.AX
|
|
||||||
.1 lda (R.AX)
|
|
||||||
beq .8 Ending 0 ?
|
|
||||||
>LDYA R.AX
|
|
||||||
jsr S.SysScrPPSTRYA
|
|
||||||
jsr S.SysScrCROUT
|
|
||||||
lda R.AL
|
|
||||||
sec
|
|
||||||
adc (R.AX) Add len+1 to PTR
|
|
||||||
sta R.AL
|
|
||||||
bcc .1
|
|
||||||
inc R.AH
|
|
||||||
bra .1
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.ENV
|
SAVE SYS/KERNEL.S.ENV
|
||||||
LOAD SYS/KERNEL.S
|
LOAD SYS/KERNEL.S
|
||||||
|
199
SYS/KERNEL.S.EXE.txt
Normal file
199
SYS/KERNEL.S.EXE.txt
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02
|
||||||
|
*--------------------------------------
|
||||||
|
* S.ExecFileA (R)
|
||||||
|
* in :
|
||||||
|
* A = hMem of FilePath (PSTRING)
|
||||||
|
* out :
|
||||||
|
*
|
||||||
|
*--------------------------------------
|
||||||
|
S.ExecFileA jsr S.LoadFileA
|
||||||
|
bcc S.ExecFileAOK
|
||||||
|
rts
|
||||||
|
|
||||||
|
S.ExecFileAOK >STYA S.ExecFileA.DataLen
|
||||||
|
stx S.ExecFileA.hData
|
||||||
|
txa
|
||||||
|
jsr S.GetMemPtrA
|
||||||
|
>STYA S.ExecFileA.DataPtr
|
||||||
|
|
||||||
|
.1 stz TmpBuffer256
|
||||||
|
|
||||||
|
.2 >LDYA S.ExecFileA.DataPtr
|
||||||
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
|
inc S.ExecFileA.DataPtr
|
||||||
|
bne .21
|
||||||
|
inc S.ExecFileA.DataPtr+1
|
||||||
|
|
||||||
|
.21 lda S.ExecFileA.DataLen
|
||||||
|
bne .22
|
||||||
|
dec S.ExecFileA.DataLen+1
|
||||||
|
.22 dec S.ExecFileA.DataLen
|
||||||
|
|
||||||
|
lda (ZPQuickPtr1)
|
||||||
|
cmp #$0D
|
||||||
|
beq .3
|
||||||
|
inc TmpBuffer256
|
||||||
|
ldx TmpBuffer256
|
||||||
|
sta TmpBuffer256,x
|
||||||
|
|
||||||
|
lda S.ExecFileA.DataLen
|
||||||
|
bne .2
|
||||||
|
lda S.ExecFileA.DataLen+1
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
.3 lda TmpBuffer256
|
||||||
|
beq .4
|
||||||
|
lda TmpBuffer256+1
|
||||||
|
cmp #'*'
|
||||||
|
beq .4
|
||||||
|
lda #'-'
|
||||||
|
jsr S.SysScrCOUTA
|
||||||
|
lda #'>'
|
||||||
|
jsr S.SysScrCOUTA
|
||||||
|
>LDYAI TmpBuffer256
|
||||||
|
jsr S.SysScrPPSTRYA
|
||||||
|
>LDYAI TmpBuffer256
|
||||||
|
jsr S.NewPStrYA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
pha
|
||||||
|
jsr S.ExecCmdLineA
|
||||||
|
jsr S.SysScrPRCode
|
||||||
|
pla
|
||||||
|
jsr S.FreeMemA
|
||||||
|
|
||||||
|
.4 lda S.ExecFileA.DataLen
|
||||||
|
bne .1
|
||||||
|
lda S.ExecFileA.DataLen+1
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
jsr .99
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.99 lda S.ExecFileA.hData
|
||||||
|
jsr S.FreeMemA
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.ExecCmdLineA >PUSHA Push Cmd Line
|
||||||
|
>PUSHBI $20 Push SEP=' '
|
||||||
|
>PUSHBI 0 Push Token IDX
|
||||||
|
jsr S.PStrGetTkn
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
sta S.ExecFileA.hCMD
|
||||||
|
stx S.ExecFileA.hARGS
|
||||||
|
jsr S.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
>PUSHWI EXECCMDS
|
||||||
|
jsr S.GetPStrIndex
|
||||||
|
bcs .98
|
||||||
|
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
lda S.ExecFileA.hARGS
|
||||||
|
jsr S.ExecCmdLine
|
||||||
|
bcs .98
|
||||||
|
|
||||||
|
jsr .98
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.98 pha
|
||||||
|
lda S.ExecFileA.hARGS
|
||||||
|
jsr S.FreeMemA
|
||||||
|
lda S.ExecFileA.hCMD
|
||||||
|
jsr S.FreeMemA
|
||||||
|
pla
|
||||||
|
.99 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.ExecFileA.hData .BS 1
|
||||||
|
S.ExecFileA.DataLen .BS 2
|
||||||
|
S.ExecFileA.DataPtr .BS 2
|
||||||
|
S.ExecFileA.hCMD .BS 1
|
||||||
|
S.ExecFileA.hARGS .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
EXECCMDS .HS .03
|
||||||
|
.AS "SET"
|
||||||
|
.HS 04
|
||||||
|
.AS "LOAD"
|
||||||
|
.HS 04
|
||||||
|
.AS "EXEC"
|
||||||
|
.DA #0
|
||||||
|
*--------------------------------------
|
||||||
|
S.ExecCmdLine jmp (.1,x)
|
||||||
|
.1 .DA S.SetSysEnvA
|
||||||
|
.DA S.LoadDrvA VCPU!!!!
|
||||||
|
.DA S.CreateProcessA VCPU!!!!
|
||||||
|
*--------------------------------------
|
||||||
|
* S.GetPStrIndex
|
||||||
|
* in :
|
||||||
|
* PULLW = String Table (Array Of PSTR)
|
||||||
|
* PULLW = String To Search (PSTR)
|
||||||
|
* out :
|
||||||
|
* CC: A = String Index In Table
|
||||||
|
*--------------------------------------
|
||||||
|
S.GetPStrIndex >PULLW ZPQuickPtr1
|
||||||
|
>PULLW ZPQuickPtr2
|
||||||
|
ldx #0
|
||||||
|
.1 lda (ZPQuickPtr1)
|
||||||
|
beq .99
|
||||||
|
cmp (ZPQuickPtr2)
|
||||||
|
bne .3
|
||||||
|
tay
|
||||||
|
.2 lda (ZPQuickPtr1),y
|
||||||
|
eor (ZPQuickPtr2),y
|
||||||
|
and #$7F
|
||||||
|
bne .3
|
||||||
|
dey
|
||||||
|
bne .2
|
||||||
|
txa
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
.3 inx
|
||||||
|
lda (ZPQuickPtr1)
|
||||||
|
sec
|
||||||
|
adc ZPQuickPtr1
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
bcc .1
|
||||||
|
inc ZPQuickPtr1+1
|
||||||
|
bra .1
|
||||||
|
.99 lda #SYSMGR.ERRSYN
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.SetSysEnvA >PUSHA Push Cmd Line
|
||||||
|
>PUSHBI $3D Push SEP='='
|
||||||
|
>PUSHBI 0 Push Token IDX
|
||||||
|
jsr S.PStrGetTkn
|
||||||
|
bcs *
|
||||||
|
phx save X,A for discard
|
||||||
|
pha
|
||||||
|
pha
|
||||||
|
txa
|
||||||
|
>PUSHA
|
||||||
|
pla
|
||||||
|
>PUSHA
|
||||||
|
ldy #S.PS.hENV
|
||||||
|
lda TSKMGR.TABLE,y
|
||||||
|
>PUSHA
|
||||||
|
jsr S.SetEnvVarH
|
||||||
|
|
||||||
|
pla disard NAME
|
||||||
|
jsr S.FreeMemA
|
||||||
|
pla discard VALUE
|
||||||
|
jmp S.FreeMemA
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE SYS/KERNEL.S.EXE
|
||||||
|
LOAD SYS/KERNEL.S
|
||||||
|
ASM
|
@ -339,42 +339,6 @@ S.PStrGetTkn >PULLA Get IDX
|
|||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.GetPStrIndex
|
|
||||||
* in :
|
|
||||||
* PULLW = String Table (Array Of PSTR)
|
|
||||||
* PULLW = String To Search (PSTR)
|
|
||||||
* out :
|
|
||||||
* CC: A = String Index In Table
|
|
||||||
*--------------------------------------
|
|
||||||
S.GetPStrIndex >PULLW ZPQuickPtr1
|
|
||||||
>PULLW ZPQuickPtr2
|
|
||||||
ldx #0
|
|
||||||
.1 lda (ZPQuickPtr1)
|
|
||||||
beq .99
|
|
||||||
cmp (ZPQuickPtr2)
|
|
||||||
bne .3
|
|
||||||
tay
|
|
||||||
.2 lda (ZPQuickPtr1),y
|
|
||||||
eor (ZPQuickPtr2),y
|
|
||||||
and #$7F
|
|
||||||
bne .3
|
|
||||||
dey
|
|
||||||
bne .2
|
|
||||||
txa
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.3 inx
|
|
||||||
lda (ZPQuickPtr1)
|
|
||||||
sec
|
|
||||||
adc ZPQuickPtr1
|
|
||||||
sta ZPQuickPtr1
|
|
||||||
bcc .1
|
|
||||||
inc ZPQuickPtr1+1
|
|
||||||
bra .1
|
|
||||||
.99 lda #SYSMGR.ERRSYN
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.STR
|
SAVE SYS/KERNEL.S.STR
|
||||||
LOAD SYS/KERNEL.S
|
LOAD SYS/KERNEL.S
|
||||||
|
@ -206,7 +206,11 @@ S.TskMgrQuit clc
|
|||||||
* out :
|
* out :
|
||||||
* A = Child PSID
|
* A = Child PSID
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.ExecProcessA jsr S.CreateProcessA
|
S.ExecProcessNewEnvA
|
||||||
|
ldy #S.PS.F.ENV
|
||||||
|
bra S.ExecProcess
|
||||||
|
S.ExecProcessA ldy #0
|
||||||
|
S.ExecProcess jsr S.CreateProcess
|
||||||
bcs .9 terminated, do not set PID as HOLD
|
bcs .9 terminated, do not set PID as HOLD
|
||||||
|
|
||||||
ldy #S.PS.CID
|
ldy #S.PS.CID
|
||||||
@ -226,7 +230,12 @@ S.ExecProcessA jsr S.CreateProcessA
|
|||||||
* out :
|
* out :
|
||||||
* A = Child PSID
|
* A = Child PSID
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
S.CreateProcessNewEnvA
|
||||||
|
ldy #S.PS.F.ENV
|
||||||
|
bra S.CreateProcess
|
||||||
S.CreateProcessA
|
S.CreateProcessA
|
||||||
|
ldy #0
|
||||||
|
S.CreateProcess sty S.CreateChildProcess.Flags
|
||||||
sta S.CreateProcessA.Cmd
|
sta S.CreateProcessA.Cmd
|
||||||
>LDYAI MSG.NEWPS
|
>LDYAI MSG.NEWPS
|
||||||
jsr S.SysScrPPSTRYA
|
jsr S.SysScrPPSTRYA
|
||||||
@ -353,6 +362,7 @@ S.CreateChildProcess
|
|||||||
.30 inc TSKMGR.SIZE
|
.30 inc TSKMGR.SIZE
|
||||||
|
|
||||||
.3 lda #S.PS.F.INUSE
|
.3 lda #S.PS.F.INUSE
|
||||||
|
ora S.CreateChildProcess.Flags
|
||||||
sta (R.AX)
|
sta (R.AX)
|
||||||
|
|
||||||
.4 inc TSKMGR.LASTID Get a PSID not alredy running
|
.4 inc TSKMGR.LASTID Get a PSID not alredy running
|
||||||
@ -371,6 +381,10 @@ S.CreateChildProcess
|
|||||||
iny
|
iny
|
||||||
cpy #S.PS.SIZE
|
cpy #S.PS.SIZE
|
||||||
bne .5
|
bne .5
|
||||||
|
|
||||||
|
lda S.CreateChildProcess.Flags
|
||||||
|
and #S.PS.F.ENV need to create ENV & Prefix ?
|
||||||
|
beq .6
|
||||||
|
|
||||||
ldy #S.PS.hPREFIX copy hPREFIX...
|
ldy #S.PS.hPREFIX copy hPREFIX...
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
@ -387,8 +401,17 @@ S.CreateChildProcess
|
|||||||
|
|
||||||
ldy #S.PS.hENV
|
ldy #S.PS.hENV
|
||||||
sta (R.AX),y
|
sta (R.AX),y
|
||||||
|
bra .8
|
||||||
|
|
||||||
ldy #S.PS.hINDEV
|
.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
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
sta (R.AX),y
|
sta (R.AX),y
|
||||||
ldy #S.PS.hOUTDEV
|
ldy #S.PS.hOUTDEV
|
||||||
@ -404,52 +427,72 @@ S.CreateChildProcess
|
|||||||
ldy #S.PS.PID
|
ldy #S.PS.PID
|
||||||
sta (R.AX),y
|
sta (R.AX),y
|
||||||
|
|
||||||
ldy #S.PS.ID
|
lda TSKMGR.LASTID
|
||||||
lda (R.AX),y
|
|
||||||
clc Exit with A=PSID
|
clc Exit with A=PSID
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
S.CreateChildProcess.Flags
|
||||||
|
.BS 1
|
||||||
|
*--------------------------------------
|
||||||
* S.InitProcessA
|
* S.InitProcessA
|
||||||
* In :
|
* In :
|
||||||
* A = hMem To Full Cmd Line
|
* A = hMem To Full Cmd Line
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.InitProcessA >PUSHA Push Cmd Line
|
S.InitProcessA stz S.InitProcessA.hPath
|
||||||
|
stz S.InitProcessA.hFullPath
|
||||||
|
>PUSHA Push Cmd Line
|
||||||
>PUSHBI $20 Push SEP=' '
|
>PUSHBI $20 Push SEP=' '
|
||||||
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
||||||
jsr S.PStrGetTkn
|
jsr S.PStrGetTkn
|
||||||
bcc .10
|
bcc .10
|
||||||
rts OOM error
|
.99 rts OOM error
|
||||||
|
|
||||||
.10 ldy #S.PS.hCMD
|
.10 sta S.InitProcessA.hCmd
|
||||||
sta (pPs),y
|
pha
|
||||||
>PUSHA push CMD for S.FileSearch
|
|
||||||
txa
|
txa
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
sta (pPs),y set ARGS hMem (0 if none)
|
sta (pPs),y set ARGS hMem (0 if none)
|
||||||
|
|
||||||
>PUSHWI ENV.PATH push ENVNAME=PATH
|
pla
|
||||||
|
jsr S.GetMemPtrA
|
||||||
|
>STYA ZPQuickPtr1
|
||||||
|
lda (ZPQuickPtr1)
|
||||||
|
cmp #'/'
|
||||||
|
bne .20
|
||||||
|
|
||||||
|
lda S.InitProcessA.hCmd
|
||||||
|
bra .30
|
||||||
|
|
||||||
|
.20 >PUSHWI ENV.PATH push ENVNAME=PATH
|
||||||
ldy #S.PS.hENV
|
ldy #S.PS.hENV
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
jsr S.GetEnvVarP get value for ENV=PATH
|
jsr S.GetEnvVarP get value for ENV=PATH
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
sta S.InitProcessA.PATH save VALUE hMem for discard
|
sta S.InitProcessA.hPath save VALUE hMem for discard
|
||||||
|
pha
|
||||||
|
lda S.InitProcessA.hCmd
|
||||||
|
>PUSHA push CMD for S.FileSearch
|
||||||
|
pla
|
||||||
>PUSHA A=PStr to ENV Value
|
>PUSHA A=PStr to ENV Value
|
||||||
jsr S.FileSearch find File in %PATH%
|
jsr S.FileSearch find File in %PATH%
|
||||||
bcs .98
|
bcs S.InitProcessA.ClnUp
|
||||||
|
|
||||||
sta S.InitProcessA.FULLPATH save FULLPATH hMem for discard
|
sta S.InitProcessA.hFullPath save FULLPATH hMem for discard
|
||||||
|
|
||||||
|
.30 jsr S.PStrCpyA
|
||||||
|
ldy #S.PS.hCMD
|
||||||
|
sta (pPs),y
|
||||||
pha
|
pha
|
||||||
jsr S.SysScrPPSTRA
|
jsr S.SysScrPPSTRA
|
||||||
pla
|
pla
|
||||||
|
|
||||||
jsr S.LoadBinA A = BinPath hMem
|
jsr S.LoadBinA A = BinPath hMem
|
||||||
|
bcs S.InitProcessA.ClnUp
|
||||||
bcs .97
|
|
||||||
|
|
||||||
>STYA pCode save PTR to Code Segment
|
>STYA pCode save PTR to Code Segment
|
||||||
txa
|
txa
|
||||||
@ -468,7 +511,7 @@ S.InitProcessA >PUSHA Push Cmd Line
|
|||||||
>PUSHAX Push DS.SIZE
|
>PUSHAX Push DS.SIZE
|
||||||
>PUSHBI S.MEM.F.INIT0 Clear DS
|
>PUSHBI S.MEM.F.INIT0 Clear DS
|
||||||
jsr S.GetMem
|
jsr S.GetMem
|
||||||
bcs .97
|
bcs S.InitProcessA.ClnUp
|
||||||
|
|
||||||
>STYA pData
|
>STYA pData
|
||||||
txa
|
txa
|
||||||
@ -477,25 +520,25 @@ S.InitProcessA >PUSHA Push Cmd Line
|
|||||||
|
|
||||||
.1 ldx #TSKMGR.INIT
|
.1 ldx #TSKMGR.INIT
|
||||||
jsr pCodeJmp Call INIT function
|
jsr pCodeJmp Call INIT function
|
||||||
bcs .97
|
|
||||||
jsr .97
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.97 pha save ERR
|
S.InitProcessA.ClnUp
|
||||||
lda S.InitProcessA.FULLPATH
|
php save Carry
|
||||||
|
pha save ERR
|
||||||
|
lda S.InitProcessA.hFullPath
|
||||||
|
beq .1
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
pla
|
|
||||||
|
|
||||||
.98 pha save ERR
|
.1 lda S.InitProcessA.hPath
|
||||||
lda S.InitProcessA.PATH
|
beq .2
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
pla
|
|
||||||
|
.2 pla
|
||||||
.99 sec
|
plp
|
||||||
rts
|
rts
|
||||||
S.InitProcessA.PATH .BS 1
|
*--------------------------------------
|
||||||
S.InitProcessA.FULLPATH .BS 1
|
S.InitProcessA.hCmd .BS 1
|
||||||
|
S.InitProcessA.hPath .BS 1
|
||||||
|
S.InitProcessA.hFullPath .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.SelectProcessA
|
* S.SelectProcessA
|
||||||
* In : A=PSID
|
* In : A=PSID
|
||||||
@ -544,6 +587,10 @@ S.FreeProcessA jsr S.GetPSByIDA
|
|||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
|
lda (ZPQuickPtr1) get S.PS.F
|
||||||
|
and #S.PS.F.ENV do we have to dscard duplicated env & prefix ?
|
||||||
|
beq .4
|
||||||
|
|
||||||
.2 ldy #S.PS.hENV
|
.2 ldy #S.PS.hENV
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
|
155
SYS/KERNEL.S.txt
155
SYS/KERNEL.S.txt
@ -35,7 +35,7 @@ KERNEL jmp S.KernelInit KERNEL.COLDBOOT
|
|||||||
.DA S.PStrCmp
|
.DA S.PStrCmp
|
||||||
|
|
||||||
.DA S.PStrGetTkn
|
.DA S.PStrGetTkn
|
||||||
.DA S.GetPStrIndex
|
.DA 0
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
@ -104,15 +104,15 @@ KERNEL jmp S.KernelInit KERNEL.COLDBOOT
|
|||||||
.DA S.GetDevByNameYA
|
.DA S.GetDevByNameYA
|
||||||
.DA 0
|
.DA 0
|
||||||
|
|
||||||
.DA 0
|
.DA S.GetKeyboardEvent
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA S.ExecProcessA $90
|
.DA S.ExecProcessNewEnvA $90
|
||||||
|
.DA S.ExecProcessA
|
||||||
|
.DA S.CreateProcessNewEnvA
|
||||||
.DA S.CreateProcessA
|
.DA S.CreateProcessA
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
|
|
||||||
.DA S.GetPSByIDA
|
.DA S.GetPSByIDA
|
||||||
.DA 0
|
.DA 0
|
||||||
@ -288,140 +288,28 @@ S.KernelRun jsr S.TskMgrRun
|
|||||||
jsr S.DestroyEvent
|
jsr S.DestroyEvent
|
||||||
jmp S.KernelRun
|
jmp S.KernelRun
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.KernelQuit bra *
|
S.PrintSysEnv ldy #S.PS.hENV
|
||||||
*--------------------------------------
|
lda TskMgr.Table,y Get PS #0 ENV
|
||||||
* PUBLIC
|
|
||||||
*--------------------------------------
|
|
||||||
* S.ExecFileA (R)
|
|
||||||
* in :
|
|
||||||
* A = hMem of FilePath (PSTRING)
|
|
||||||
* out :
|
|
||||||
*
|
|
||||||
*--------------------------------------
|
|
||||||
S.ExecFileA jsr S.LoadFileA
|
|
||||||
bcc S.ExecFileAOK
|
|
||||||
rts
|
|
||||||
|
|
||||||
S.ExecFileAOK >STYA S.ExecFileA.DataLen
|
|
||||||
stx S.ExecFileA.hData
|
|
||||||
txa
|
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
>STYA S.ExecFileA.DataPtr
|
>STYA R.AX
|
||||||
|
.1 lda (R.AX)
|
||||||
.1 stz TmpBuffer256
|
beq .8 Ending 0 ?
|
||||||
|
>LDYA R.AX
|
||||||
.2 >LDYA S.ExecFileA.DataPtr
|
jsr S.SysScrPPSTRYA
|
||||||
>STYA ZPQuickPtr1
|
jsr S.SysScrCROUT
|
||||||
|
lda R.AL
|
||||||
inc S.ExecFileA.DataPtr
|
|
||||||
bne .21
|
|
||||||
inc S.ExecFileA.DataPtr+1
|
|
||||||
|
|
||||||
.21 lda S.ExecFileA.DataLen
|
|
||||||
bne .22
|
|
||||||
dec S.ExecFileA.DataLen+1
|
|
||||||
.22 dec S.ExecFileA.DataLen
|
|
||||||
|
|
||||||
lda (ZPQuickPtr1)
|
|
||||||
cmp #$0D
|
|
||||||
beq .3
|
|
||||||
inc TmpBuffer256
|
|
||||||
ldx TmpBuffer256
|
|
||||||
sta TmpBuffer256,x
|
|
||||||
|
|
||||||
lda S.ExecFileA.DataLen
|
|
||||||
bne .2
|
|
||||||
lda S.ExecFileA.DataLen+1
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
.3 lda TmpBuffer256
|
|
||||||
beq .4
|
|
||||||
lda TmpBuffer256+1
|
|
||||||
cmp #'*'
|
|
||||||
beq .4
|
|
||||||
lda #'-'
|
|
||||||
jsr S.SysScrCOUTA
|
|
||||||
lda #'>'
|
|
||||||
jsr S.SysScrCOUTA
|
|
||||||
>LDYAI TmpBuffer256
|
|
||||||
jsr S.SysScrPPSTRYA
|
|
||||||
>LDYAI TmpBuffer256
|
|
||||||
jsr S.NewPStrYA
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
pha
|
|
||||||
jsr S.ExecCmdLineA
|
|
||||||
jsr S.SysScrPRCode
|
|
||||||
pla
|
|
||||||
jsr S.FreeMemA
|
|
||||||
|
|
||||||
.4 lda S.ExecFileA.DataLen
|
|
||||||
bne .1
|
|
||||||
lda S.ExecFileA.DataLen+1
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
jsr .99
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.99 lda S.ExecFileA.hData
|
|
||||||
jsr S.FreeMemA
|
|
||||||
sec
|
sec
|
||||||
rts
|
adc (R.AX) Add len+1 to PTR
|
||||||
*--------------------------------------
|
sta R.AL
|
||||||
S.ExecCmdLineA >PUSHA Push Cmd Line
|
bcc .1
|
||||||
>PUSHBI $20 Push SEP=' '
|
inc R.AH
|
||||||
>PUSHBI 0 Push Token IDX
|
bra .1
|
||||||
jsr S.PStrGetTkn
|
.8 rts
|
||||||
bcs .99
|
|
||||||
|
|
||||||
sta S.ExecFileA.hCMD
|
|
||||||
stx S.ExecFileA.hARGS
|
|
||||||
jsr S.GetMemPtrA
|
|
||||||
>PUSHYA
|
|
||||||
>PUSHWI EXECCMDS
|
|
||||||
jsr S.GetPStrIndex
|
|
||||||
bcs .98
|
|
||||||
|
|
||||||
asl
|
|
||||||
tax
|
|
||||||
lda S.ExecFileA.hARGS
|
|
||||||
jsr S.ExecCmdLine
|
|
||||||
bcs .98
|
|
||||||
|
|
||||||
jsr .98
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.98 pha
|
|
||||||
lda S.ExecFileA.hARGS
|
|
||||||
jsr S.FreeMemA
|
|
||||||
lda S.ExecFileA.hCMD
|
|
||||||
jsr S.FreeMemA
|
|
||||||
pla
|
|
||||||
.99 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
S.ExecFileA.hData .BS 1
|
|
||||||
S.ExecFileA.DataLen .BS 2
|
|
||||||
S.ExecFileA.DataPtr .BS 2
|
|
||||||
S.ExecFileA.hCMD .BS 1
|
|
||||||
S.ExecFileA.hARGS .BS 1
|
|
||||||
*--------------------------------------
|
|
||||||
S.ExecCmdLine jmp (.1,x)
|
|
||||||
.1 .DA S.SetSysEnvA
|
|
||||||
.DA S.LoadDrvA VCPU!!!!
|
|
||||||
.DA S.CreateProcessA VCPU!!!!
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
pDevJmp jmp (pDev)
|
pDevJmp jmp (pDev)
|
||||||
pCodeJmp jmp (pCode)
|
pCodeJmp jmp (pCode)
|
||||||
pLibJmp jmp (pLib)
|
pLibJmp jmp (pLib)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXECCMDS >PSTRING "SET"
|
|
||||||
EXECCMDS1 >PSTRING "LOAD"
|
|
||||||
EXECCMDS2 >PSTRING "EXEC"
|
|
||||||
.DA #0
|
|
||||||
*--------------------------------------
|
|
||||||
MSG.Init >PSTRING "A2osX[Stage2]:Init\n"
|
MSG.Init >PSTRING "A2osX[Stage2]:Init\n"
|
||||||
MSG.Init.MemMgr >PSTRING "->MemMgr Init"
|
MSG.Init.MemMgr >PSTRING "->MemMgr Init"
|
||||||
MSG.Init.TskMgr >PSTRING "->TskMgr Init"
|
MSG.Init.TskMgr >PSTRING "->TskMgr Init"
|
||||||
@ -438,8 +326,6 @@ STARTUP.FILE >PSTRING "A2osX.STARTUP"
|
|||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ENV.A2osX >PSTRING "A2OSX"
|
ENV.A2osX >PSTRING "A2OSX"
|
||||||
ENV.PATH >PSTRING "PATH"
|
ENV.PATH >PSTRING "PATH"
|
||||||
ENV.DRV >PSTRING "DRV"
|
|
||||||
ENV.ETC >PSTRING "ETC"
|
|
||||||
ENV.LIB >PSTRING "LIB"
|
ENV.LIB >PSTRING "LIB"
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB SYS/KERNEL.S.MEM
|
.INB SYS/KERNEL.S.MEM
|
||||||
@ -455,6 +341,7 @@ ENV.LIB >PSTRING "LIB"
|
|||||||
.INB SYS/KERNEL.S.ENV
|
.INB SYS/KERNEL.S.ENV
|
||||||
.INB SYS/KERNEL.S.TSK
|
.INB SYS/KERNEL.S.TSK
|
||||||
.INB SYS/KERNEL.S.EVT
|
.INB SYS/KERNEL.S.EVT
|
||||||
|
.INB SYS/KERNEL.S.EXE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB SYS/KERNEL.S.DEV
|
.INB SYS/KERNEL.S.DEV
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -6,6 +6,7 @@ CREATE INC
|
|||||||
CREATE LIB
|
CREATE LIB
|
||||||
CREATE SBIN
|
CREATE SBIN
|
||||||
CREATE SYS
|
CREATE SYS
|
||||||
|
CREATE USR
|
||||||
PREFIX /A2OSX.SRC
|
PREFIX /A2OSX.SRC
|
||||||
CREATE BIN
|
CREATE BIN
|
||||||
CREATE DRV
|
CREATE DRV
|
||||||
@ -13,4 +14,5 @@ CREATE ETC
|
|||||||
CREATE INC
|
CREATE INC
|
||||||
CREATE LIB
|
CREATE LIB
|
||||||
CREATE SBIN
|
CREATE SBIN
|
||||||
CREATE SYS
|
CREATE SYS
|
||||||
|
CREATE USR
|
||||||
|
@ -4,7 +4,6 @@ NEW
|
|||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
PREFIX /A2OSX.BOOT
|
PREFIX /A2OSX.BOOT
|
||||||
DELETE A2OSX.SYSTEM
|
|
||||||
BLOAD A
|
BLOAD A
|
||||||
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1300
|
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1300
|
||||||
-A2OSX.SYSTEM
|
-A2OSX.SYSTEM
|
||||||
|
Loading…
Reference in New Issue
Block a user