Kernel 0.92+

This commit is contained in:
Rémy GIBERT 2019-03-11 07:01:40 +00:00
parent 78a02b11b6
commit dfed36d689
14 changed files with 1455 additions and 31 deletions

Binary file not shown.

264
BIN/AARP.S.txt Normal file
View File

@ -0,0 +1,264 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/AARP
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/ETH.I
.INB INC/LIBETALK.I
*--------------------------------------
TIMEOUT.MAX .EQ 40 40*100ms = 4 sec.
*--------------------------------------
ZPPTR1 .EQ ZPBIN
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #16 SS
.DA #2 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBETALK .DA LIBETALK
L.SSCANF.ADDR .DA SSCANF.ADDR
L.SSCANF.MAC .DA SSCANF.MAC
L.MSG.Usage .DA MSG.Usage
L.MSG0 .DA MSG0
L.MSG1 .DA MSG1
L.MSG2 .DA MSG2
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBETALK
>SYSCALL LoadLib
bcs .9
sta hLIBETALK
.9 rts
*--------------------------------------
CS.RUN >LIBCALL hLIBETALK,LIBETALK.GETCFG
>STYA ZPPTR1
* lda (ZPPTR1)
* bmi .1
* jmp CS.RUN.ERR
.1 ldy #S.PS.ARGC
lda (pPs),y
cmp #1
bcs .2
jmp CS.RUN.DUMP
.2 >PUSHEA.G DST.ADDR+3
>PUSHEA.G DST.ADDR+1
>PUSHBI 4 2 Ptrs
>PUSHW L.SSCANF.ADDR
lda #1
>SYSCALL ArgV
>SYSCALL sscanf
bcs CS.RUN.ERR
ldy #S.PS.ARGC
lda (pPs),y
cmp #1
beq CS.RUN.QUERY
cmp #3
bne CS.RUN.ERR
jmp CS.RUN.ADD
CS.RUN.ERR >PUSHBI 0
>LDYA L.MSG.Usage
>SYSCALL printf
lda #E.SYN
sec
rts
*--------------------------------------
CS.RUN.QUERY jsr Init.Timeout
.1 >PUSHEA.G DST.MAC
>PUSHEA.G DST.ADDR
>LIBCALL hLIBETALK,LIBETALK.AARP.QUERY
bcc .2 success, print & exit
jsr Wait.TimeOut
bcs .8
>SLEEP
>SYSCALL GetChar
bcs .1
cmp #3
beq .9
bra .1
.2 ldx #5
ldy #DST.MAC+5
.3 >PUSHB (pData),y
dey
dex
bpl .3
ldx #3
ldy #DST.ADDR+3
.4 >PUSHB (pData),y
dey
dex
bne .4
>PUSHBI 8
>LDYA L.MSG2
>SYSCALL printf
.8 lda #0
.9 sec
rts
*--------------------------------------
CS.RUN.ADD >PUSHEA.G DST.MAC+5
>PUSHEA.G DST.MAC+4
>PUSHEA.G DST.MAC+3
>PUSHEA.G DST.MAC+2
>PUSHEA.G DST.MAC+1
>PUSHEA.G DST.MAC
>PUSHBI 12 6 Ptrs
>PUSHW L.SSCANF.MAC
lda #2
>SYSCALL ArgV
>SYSCALL sscanf
bcs .9
>PUSHEA.G DST.MAC
>PUSHEA.G DST.ADDR
>LIBCALL hLIBETALK,LIBETALK.AARP.ADD
clc
.8 rts
.9 jmp CS.RUN.ERR
*--------------------------------------
CS.RUN.DUMP >LIBCALL hLIBETALK,LIBETALK.AARP.GETCACHE
>STYA ZPPTR1
>LDYA L.MSG0
>SYSCALL puts
ldx #K.AARPCACHE.SIZE
.1 lda (ZPPTR1)
beq .4
ldy #S.AARPCACHE.ADDR+3
>PUSHB (ZPPTR1),y
dey
>PUSHB (ZPPTR1),y
dey
>PUSHB (ZPPTR1),y
ldy #S.AARPCACHE.MAC+6
.3 dey
>PUSHB (ZPPTR1),y
cpy #S.AARPCACHE.MAC
bne .3
ldy #S.AARPCACHE.TTL+1
>PUSHB (ZPPTR1),y
dey
>PUSHB (ZPPTR1),y
>PUSHB (ZPPTR1)
>PUSHBI 12
>LDYA L.MSG1
phx
>SYSCALL printf
plx
>DEBUG
.4 lda ZPPTR1
clc
adc #S.AARPCACHE
sta ZPPTR1
bcc .5
inc ZPPTR1+1
.5 dex
bne .1
.8 lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event?
ldy #TimeOut
lda (pData),y
beq .9
dec
sta (pData),y
.9 sec do not discard TIMER event
rts
*--------------------------------------
CS.QUIT lda hLIBETALK
beq .8
>SYSCALL UnloadLib
.8 clc
rts
*--------------------------------------
Init.Timeout ldy #TimeOut
lda #TIMEOUT.MAX
sta (pData),y
rts
*--------------------------------------
Wait.TimeOut sec
ldy #TimeOut
lda (pData),y
beq .9
clc
.9 rts
*--------------------------------------
CS.END
LIBETALK .AZ "libetalk"
SSCANF.ADDR .AZ "%D.%d"
SSCANF.MAC .AZ "%h:%h:%h:%h:%h:%h"
MSG.Usage .AS "Usage : AARP, display AARP cache\r\n"
.AS " AARP network.nod, query cache or network\r\n"
.AZ " AARP network.nod HH:HH:HH:HH:HH:HH, add a static AARP record in Cache\r\n"
MSG0 .AZ "STS TTL MAC Address network.nod"
MSG1 .AZ "$%h %5D %h:%h:%h:%h:%h:%h %D.%d\r\n"
MSG2 .AZ "%D%d is at %h:%h:%h:%h:%h:%h\r\n"
hLIBETALK .BS 1
*--------------------------------------
DS.START
DST.ADDR .BS 4
DST.MAC .BS 6
TimeOut .BS 1
DS.END
*--------------------------------------
MAN
SAVE USR/SRC/BIN/AARP.S
ASM

533
BIN/ETCONFIG.S.txt Normal file
View File

@ -0,0 +1,533 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/ETCONFIG
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/KERNEL.I
.INB INC/MLI.I
.INB INC/MLI.E.I
.INB INC/NIC.I
.INB INC/ETH.I
.INB INC/LIB.NET.I
.INB INC/LIBETALK.I
*--------------------------------------
TIMEOUT.MAX .EQ 200 20 sec.
PROBE.MAX .EQ 10
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
pETKCFG .BS 2
ZPFrameBase .BS 2
ZPFramePtr .BS 2
ZPTmpPtr1 .BS 2
ZPTmpPtr2 .BS 2
ZPTmpPtr3 .BS 2
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #16 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBETALK .DA LIBETALK
L.MSG.USAGE .DA MSG.USAGE
L.MSG.NODEV .DA MSG.NODEV
L.MSG1.DEV .DA MSG1.DEV
L.MSG1.DEV.ARP .DA MSG1.DEV.ARP
L.MSG1.DEV.IP .DA MSG1.DEV.IP
L.MSG1.LINK.OK .DA MSG1.LINK.OK
L.MSG1.LINK.KO .DA MSG1.LINK.KO
L.MSG1.LINKSPEED .DA MSG1.LINKSPEED
L.MSG1.DPLX.FD .DA MSG1.DPLX.FD
L.MSG1.DPLX.HD .DA MSG1.DPLX.HD
L.MSG2 .DA MSG2
L.MSG2.C .DA MSG2.C
L.MSG2.U .DA MSG2.U
L.MSG2.ADDR .DA MSG2.ADDR
L.MSG2.ROUTER .DA MSG2.ROUTER
L.MSG2.OBJECT .DA MSG2.OBJECT
L.MSG.CFG .DA MSG.CFG
L.MSG.CFG.KO .DA MSG.CFG.KO
L.MSG.CFG.OK .DA MSG.CFG.OK
L.HOSTNAME .DA HOSTNAME
L.CFG.DefaultHost .DA CFG.DefaultHost
L.ETKCFG .DA ETKCFG
L.ETKCFG.OBJECT .DA ETKCFG+S.ETKCFG.OBJECT+1
L.IOCTL .DA IOCTL
*--------------------------------------
L.MSG.PROBE .DA MSG.PROBE
L.MSG.PROBE.KO .DA MSG.PROBE.KO
L.MSG.PROBE.OK .DA MSG.PROBE.OK
L.AARP.PRB .DA AARP.PRB
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBETALK
>SYSCALL LoadLib
bcs .9
sta hLIBETALK
.9 rts
*--------------------------------------
CS.RUN >LIBCALL hLIBETALK,LIBETALK.GETCFG
>STYA pETKCFG
ldy #S.ETKCFG-1
.1 lda (pETKCFG),y
sta ETKCFG,y
dey
bpl .1
lda ETKCFG+S.NETCFG.DevID
bne CS.RUN.SETUP
>LDYA L.MSG.NODEV
>SYSCALL puts
lda #MLI.E.NODEV
sec
rts
CS.RUN.SETUP jsr CS.RUN.PROBE
jsr CS.RUN.DUMP
.8 lda #0
sec
rts
*--------------------------------------
CS.RUN.DUMP >PUSHEA.G DIB
lda ETKCFG+S.NETCFG.DevID
>SYSCALL GetDevStatus
>LEA.G DCB.NIC
>STYA IOCTL+S.IOCTL.BUFPTR
lda #S.IOCTL.STATCODE.GETDCB
sta IOCTL+S.IOCTL.STATCODE
>PUSHW L.IOCTL
>PUSHBI IOCTL.STATUS
lda ETKCFG+S.NETCFG.DevID
>SYSCALL IOCTL
CS.RUN.DUMPNIC ldy #DCB.NIC+S.DCB.NIC.MAC+5
ldx #6
.1 lda (pData),y
>PUSHA
dey
dex
bne .1
>PUSHEA.G DIB+S.DIB.IDS
ldx ETKCFG+S.NETCFG.DevID
lda Dev.Table-1,x
clc
adc #S.FD.DEV
tay
lda Dev.Table,x
adc /S.FD.DEV
>PUSHYA
lda ETKCFG+S.NETCFG.DevID
>PUSHA
>PUSHBI 11
>LDYA L.MSG1.DEV
>SYSCALL printf
>LDA.G DCB.NIC+S.DCB.NIC.FLAGS
and #S.DCB.NIC.FLAGS.ARPOFFLOAD
beq .2
lda #1
.2 >PUSHA
>PUSHBI 1
>LDYA L.MSG1.DEV.ARP
>SYSCALL printf
>LDA.G DCB.NIC+S.DCB.NIC.FLAGS
and #S.DCB.NIC.FLAGS.IPOFFLOAD
beq .3
lda #1
.3
>PUSHA
>PUSHBI 1
>LDYA L.MSG1.DEV.IP
>SYSCALL printf
>LDA.G DCB.NIC+S.DCB.NIC.LINK
and #S.DCB.NIC.LINK.OK
bne CS.RUN.LINK
>LDYA L.MSG1.LINK.KO
>SYSCALL puts
bra CS.RUN.DUMPNET
CS.RUN.LINK >LDYA L.MSG1.LINK.OK
>SYSCALL puts
>PUSHBI 0
>LDYA L.MSG1.LINKSPEED
>SYSCALL printf
>LDA.G DCB.NIC+S.DCB.NIC.SPEED
and #$0F
tax
.4 phx
lda #'0'
>SYSCALL PutChar
plx
dex
bne .4
>LDA.G DCB.NIC+S.DCB.NIC.LINK
and #S.DCB.NIC.LINK.FD
bne .5
>LDYA L.MSG1.DPLX.HD
bra .6
.5 >LDYA L.MSG1.DPLX.FD
.6 >SYSCALL puts
CS.RUN.DUMPNET >PUSHBI 0
>LDYA L.MSG2
>SYSCALL printf
lda ETKCFG+S.ETKCFG.NodID
beq .11
>LDYA L.MSG2.C
bra .10
.11 >LDYA L.MSG2.U
.10 >SYSCALL puts
>PUSHB ETKCFG+S.ETKCFG.NodID
>PUSHW ETKCFG+S.ETKCFG.NetID
>PUSHBI 3
>LDYA L.MSG2.ADDR
>SYSCALL printf
>PUSHB ETKCFG+S.ETKCFG.Router
>PUSHW ETKCFG+S.ETKCFG.NetID
>PUSHBI 3
>LDYA L.MSG2.ROUTER
>SYSCALL printf
>PUSHW L.ETKCFG.OBJECT
>PUSHBI 2
>LDYA L.MSG2.OBJECT
>SYSCALL printf
lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.RUN.PROBE >PUSHBI 0
>LDYA L.MSG.PROBE
>SYSCALL printf
ldx #5
.20 lda ETKCFG+S.NETCFG.MAC,x
sta AARP.PRB.SHA,x
dex
bpl .20
lda #$58
sta AARP.PRB.SPA+2
sta AARP.PRB.TPA+2
sta ETKCFG+S.ETKCFG.NetID
lda A2osX.RANDOM16+1
lda #$06
sta AARP.PRB.SPA+1
sta AARP.PRB.TPA+1
sta ETKCFG+S.ETKCFG.NetID+1
lda A2osX.RANDOM16
lda #$3A
bne .1
inc
.1 cmp #$FE
bcc .2
eor #$80
bne .2
inc
.2 sta AARP.PRB.SPA+3
sta AARP.PRB.TPA+3
sta ETKCFG+S.ETKCFG.NodID
lda #PROBE.MAX
>STA.G PROBE.CNT
.3 >LDYA L.AARP.PRB
>STYA IOCTL+S.IOCTL.BUFPTR
>LDYAI AARP.PRB.LEN
>STYA IOCTL+S.IOCTL.BYTECNT
>PUSHW L.IOCTL
>PUSHBI IOCTL.WRITE
lda ETKCFG+S.NETCFG.DevID
>SYSCALL IOCTL
>SLEEP
>DEC.G PROBE.CNT
bne .3
>LDYA L.MSG.PROBE
>SYSCALL puts
clc
rts
*--------------------------------------
CFG.EtcFiles >LDYAI 256
>SYSCALL GetMem
bcc .1
rts
.1 >STYA ZPTmpPtr1
stx CFG.hBuf1
>LDYA L.HOSTNAME
jsr CFG.Read.PrintF
jsr CFG.Read.HOSTNAME
lda ETKCFG+S.ETKCFG.OBJECT
bne .4
>PUSHW A2osX.TIMER16
>PUSHBI 2
>PUSHW L.CFG.DefaultHost
>LDYA L.ETKCFG.OBJECT
>SYSCALL sprintf
lda #11
sta ETKCFG+S.ETKCFG.OBJECT
.4 >PUSHW L.ETKCFG
>LIBCALL hLIBETALK,LIBETALK.SETCFG
lda CFG.hBuf1
>SYSCALL freemem
.9 rts
*--------------------------------------
CFG.Read.PrintF >PUSHYA
>PUSHBI 2
>LDYA L.MSG.CFG
>SYSCALL printf
rts
*--------------------------------------
CFG.Read.HOSTNAME
>LDYA L.HOSTNAME
jsr CFG.Read.Open
jsr CFG.Read.Result
bcs .9
.1 jsr CFG.Read.GetS
bcs .8
lda (ZPTmpPtr1)
beq .1 empty line...
cmp #'#
beq .1 comment...
ldy #0
.2 lda (ZPTmpPtr1),y
beq .8 end of name
sta ETKCFG+S.ETKCFG.OBJECT,y
iny
cpy #32
bne .2
.8 tya
sta ETKCFG+S.ETKCFG.OBJECT
clc
.HS B0 BCS
.9 sec
jmp CFG.Read.Close
*--------------------------------------
CFG.Read.Result bcc .1
>PUSHA
>PUSHBI 1
>LDYA L.MSG.CFG.KO
>SYSCALL printf
sec
rts
.1 >LDYA L.MSG.CFG.OK
>SYSCALL puts
rts
*--------------------------------------
CFG.Read.Open stz CFG.hCfgFile
pha
>PUSHWI 0
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY
pla
>SYSCALL fopen
bcs .9
sta CFG.hCfgFile
* clc
.9 rts
*--------------------------------------
CFG.Read.Close php
pha
CFG.Read.Close2
lda CFG.hCfgFile
beq .8
>SYSCALL fclose
.8 pla
plp
rts
*--------------------------------------
CFG.Read.GetS >PUSHWI 255
>PUSHW ZPTmpPtr1
lda CFG.hCfgFile
>SYSCALL fgets
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event?
>LDA.G TimeOut
beq .9
dec
sta (pData),y
.9 sec do not discard TIMER event
rts
*--------------------------------------
CS.QUIT lda hLIBETALK
beq .8
>SYSCALL UnloadLib
.8 clc
rts
*--------------------------------------
Init.Timeout ldy #TimeOut
lda #TIMEOUT.MAX
sta (pData),y
rts
*--------------------------------------
Wait.TimeOut ldy #TimeOut
lda (pData),y
rts
*--------------------------------------
CS.END
LIBETALK .AZ "libetalk"
hLIBETALK .BS 1
*--------------------------------------
MSG.USAGE .AZ "Usage : ETCONFIG\r\n"
*--------------------------------------
MSG.NODEV .AZ "EtherTalk not bound to any device."
*--------------------------------------
MSG1.DEV .AS "NIC Device Configuration :\r\n"
.AS " Device ID : $%h\r\n"
.AS " Device Name : %s\r\n"
.AS " Device Type : %S\r\n"
.AZ " HW Address : %02h:%02h:%02h:%02h:%02h:%02h\r\n"
MSG1.DEV.ARP .AZ " ARP Offload : %d\r\n"
MSG1.DEV.IP .AS " IP Offload : %d\r\n"
.AZ " Link Status : "
MSG1.LINK.OK .AZ "OK"
MSG1.LINK.KO .AZ "Media Disconnected"
MSG1.LINKSPEED .AZ " Link Speed : 1"
MSG1.DPLX.FD .AZ " Mbit/s,Full Duplex"
MSG1.DPLX.HD .AZ " Mbit/s,Half Duplex"
*--------------------------------------
MSG2 .AZ "EtherTalk Configuration : "
MSG2.C .AZ "Configured"
MSG2.U .AZ "Not Configured"
MSG2.ADDR .AZ " Network/Node : %D/%d\r\n"
MSG2.ROUTER .AZ " Router : %D/%d\r\n"
MSG2.OBJECT .AZ " Object Name : %S\r\n"
*--------------------------------------
MSG.CFG .AZ "ETCONFIG:Reading %s..."
MSG.CFG.KO .AZ "Not Found. [%h]\r\n"
MSG.CFG.OK .AZ "OK."
*--------------------------------------
HOSTNAME .AZ "${ROOT}ETC/HOSTNAME"
*--------------------------------------
CFG.DefaultHost .AZ "a2osx-%H"
*--------------------------------------
MSG.PROBE .AZ "ETCONFIG:Acquiring NODE..."
MSG.PROBE.KO .AZ "ETCONFIG:Time Out [%h].\r\n"
MSG.PROBE.OK .AZ "ETCONFIG:Success\n"
*--------------------------------------
ETKCFG .BS S.ETKCFG
CFG.hCfgFile .BS 1
CFG.hBuf1 .BS 1
*--------------------------------------
AARP.PRB .HS 090007FFFFFF S.ETH.DSTMAC
AARP.PRB.SRCMAC .BS 6
.DA #0,#36 S.ETH.802.3.LENGTH
.HS AA S.ETH.802.2.DSTSAP
.HS AA S.ETH.802.2.SRCSAP
.HS 03 S.ETH.802.2.CTRL
.HS 00.00.00.80.F3 S.ETH.SNAP.PROTO
.HS 00.01.80.9B.06.04
.HS 0003 Probe
AARP.PRB.SHA .BS 6
AARP.PRB.SPA .BS 4
AARP.PRB.THA .BS 6
AARP.PRB.TPA .BS 4
.BS AARP.PRB+60-*
AARP.PRB.LEN .EQ 60
IOCTL .BS S.IOCTL
*--------------------------------------
.DUMMY
.OR 0
DS.START
DIB .BS S.DIB
DCB.NIC .BS S.DCB.NIC
PROBE.CNT .BS 1
TimeOut .BS 1
DS.END .ED
*--------------------------------------
MAN
SAVE USR/SRC/SBIN/ETCONFIG.S
ASM

View File

@ -5,17 +5,21 @@ AUTO 4,1
*--------------------------------------
S.ETH.DSTMAC .EQ 0
S.ETH.SRCMAC .EQ 6
*--------------------------------------
S.ETH.EII.TYPE .EQ 12
S.ETH.EII.TYPE.IP .EQ $800
S.ETH.EII.TYPE.ARP .EQ $806
*
S.ETH.EII .EQ 14
*
*--------------------------------------
S.ETH.802.3.LENGTH .EQ 12
S.ETH.802.2.DSTSAP .EQ 14
S.ETH.802.2.SRCSAP .EQ 15
S.ETH.802.2.CTRL .EQ 16
S.ETH.SNAP.PROTO .EQ 17
S.ETH.SNAP.PROTO .EQ 20
S.ETH.SNAP.PROTO.AARP .EQ $80F3
S.ETH.SNAP.PROTO.DDP .EQ $809B
*
S.ETH.SNAP .EQ 22
*--------------------------------------

View File

@ -4,17 +4,79 @@ AUTO 4,1
.LIST OFF
.OP 65C02
*--------------------------------------
K.AARPCACHE.SIZE .EQ 10
K.AARP.TTL .EQ 600
K.AARP.PENDING.TTL .EQ 10
K.AROUTER.TTL .EQ 500 50 sec
*--------------------------------------
LIBETALK.SETCFG .EQ 4
LIBETALK.GETCFG .EQ 6
LIBETALK.INCOMING .EQ 8
LIBETALK.PULSE .EQ 10
LIBETALK.AARP.Clear .EQ 12
LIBETALK.AARP.Query .EQ 14
LIBETALK.AARP.Add .EQ 16
LIBETALK.AARP.GetCache .EQ 18
*--------------------------------------
S.ETKCFG.STATUS .EQ 0
S.ETKCFG.DevID .EQ 1
S.ETKCFG.MAC .EQ 2
ERR.AARP.PENDING .EQ $B5
*--------------------------------------
*S.ETKCFG.STATUS .EQ 0
*S.ETKCFG.DevID .EQ 1
*S.ETKCFG.MAC .EQ 4
S.ETKCFG.ADDR .EQ 10
S.ETKCFG.NetID .EQ 11
S.ETKCFG.NodID .EQ 13
S.ETKCFG.Router .EQ 14
S.ETKCFG.OBJECT .EQ 15 L+32
*
S.ETKCFG .EQ 8
S.ETKCFG .EQ 48
*--------------------------------------
S.AARP.HTYPE .EQ S.ETH.SNAP+0 $0001
S.AARP.PTYPE .EQ S.ETH.SNAP+2 $809B
S.AARP.HLEN .EQ S.ETH.SNAP+4 $06
S.AARP.PLEN .EQ S.ETH.SNAP+5 $04
S.AARP.OPERATION .EQ S.ETH.SNAP+6 REQ=$0001,REPLY=$0002,PROBE=$0003
S.AARP.OPERATION.REQ .EQ 1
S.AARP.OPERATION.REP .EQ 2
S.AARP.SHA .EQ S.ETH.SNAP+8 Sender MAC
S.AARP.SPA .EQ S.ETH.SNAP+14 Sender IP
S.AARP.THA .EQ S.ETH.SNAP+18 Target MAC
S.AARP.TPA .EQ S.ETH.SNAP+24 Target IP
*
S.AARP .EQ S.ETH.SNAP+28
*--------------------------------------
S.AARPCACHE.S .EQ 0
S.AARPCACHE.S.PENDING .EQ 1
S.AARPCACHE.S.STATIC .EQ 2
S.AARPCACHE.S.RESOLVED .EQ 128
S.AARPCACHE.TTL .EQ 2
S.AARPCACHE.ADDR .EQ 6
S.AARPCACHE.MAC .EQ 10
*
S.AARPCACHE .EQ 16
*--------------------------------------
S.DDP1.DATALEN .EQ S.ETH.SNAP
S.DDP1.DST.SKT .EQ S.ETH.SNAP+2
S.DDP1.SRC.SKT .EQ S.ETH.SNAP+3
S.DDP1.TYPE .EQ S.ETH.SNAP+4
*
S.DDP1 .EQ S.ETH.SNAP+5
*--------------------------------------
S.DDP2.DATALEN .EQ S.ETH.SNAP
S.DDP2.CHECKSUM .EQ S.ETH.SNAP+2
S.DDP2.DST.NET .EQ S.ETH.SNAP+4
S.DDP2.SRC.NET .EQ S.ETH.SNAP+6
S.DDP2.DST.NOD .EQ S.ETH.SNAP+8
S.DDP2.SRC.NOD .EQ S.ETH.SNAP+9
S.DDP2.DST.SKT .EQ S.ETH.SNAP+10
S.DDP2.SRC.SKT .EQ S.ETH.SNAP+11
S.DDP2.TYPE .EQ S.ETH.SNAP+12
*
S.DDP2 .EQ S.ETH.SNAP+13
*--------------------------------------
S.RTMP
*--------------------------------------
MAN
SAVE INC/LIBETALK.I

386
LIB/LIBETALK.S.AARP.txt Normal file
View File

@ -0,0 +1,386 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
*/--------------------------------------
* # AARP.Clear
* Clear AARP Cache
* **In:**
* ## RETURN VALUE
*\--------------------------------------
AARP.Clear ldx #K.AARPCACHE.SIZE*S.AARPCACHE
.1 stz AARP.CACHE-1,x
dex
bne .1
clc
rts
*/--------------------------------------
* # AARP.Query
* Query AARP Cache and returns HW address
* **In:**
* PUSHW PTR to MAC (to fill)
* PUSHW PTR to ADDR
* ## RETURN VALUE
* CC: hit: MAC filled
* CS: missed
*\--------------------------------------
AARP.Query >PULLW ZPPtrADDR ADDR
>PULLW ZPPtrMAC MAC
ldy #3
.1 lda (ZPPtrADDR),y
sta AARP.TmpCache+S.AARPCACHE.ADDR,y
dey
bpl .1
jsr AARP.QUERY.I
bcs .9
ldy #5
.2 lda AARP.TmpCache+S.AARPCACHE.MAC,y
sta (ZPPtrMAC),y
dey
bpl .2
clc
.9 rts
*/--------------------------------------
* # AARP.Add
* Add a static AARP cache record
* **In:**
* PUSHW PTR to MAC
* PUSHW PTR to IP
*\--------------------------------------
AARP.Add >PULLW ZPPtrADDR ADDR
>PULLW ZPPtrMAC MAC
stz AARP.TmpCache+S.AARPCACHE.TTL
stz AARP.TmpCache+S.AARPCACHE.TTL+1
ldy #3
.1 lda (ZPPtrADDR),y
sta AARP.TmpCache+S.AARPCACHE.ADDR,y
dey
bpl .1
ldy #5
.2 lda (ZPPtrMAC),y
sta AARP.TmpCache+S.AARPCACHE.MAC,y
dey
bpl .2
lda #S.AARPCACHE.S.RESOLVED+S.AARPCACHE.S.STATIC
AARP.ADD.I sta AARP.TmpCache
jsr AARP.FIND.BY.ADDR
bcc .1
jsr AARP.FIND.FREE
.1 ldy #S.AARPCACHE-1
.2 lda AARP.TmpCache,y
sta (ZPCachePtr),y
dey
bpl .2
clc
rts
*/--------------------------------------
* # AARP.GetCache
* Return a Ptr to AARP Cache Table
* **In:**
* ## RETURN VALUE
* Y,A = PTR to AARP.CACHE
*\--------------------------------------
AARP.GetCache >LDYA L.AARP.CACHE
clc
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
AARP.AddFromFrameInPtr
ldy #S.DDP2.SRC.NET
lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.ADDR+1,x
iny
lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.ADDR+2,x
iny
iny
lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.ADDR+3,x
ldy #S.ETH.SRCMAC+5
ldx #5
.2 lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.MAC,x
dey
dex
bpl .2
lda #K.AARP.TTL
sta AARP.TmpCache+S.AARPCACHE.TTL
lda /K.AARP.TTL
sta AARP.TmpCache+S.AARPCACHE.TTL+1
lda #S.AARPCACHE.S.RESOLVED
jmp AARP.ADD.I
*--------------------------------------
AARP.IN bra .10
ldy #S.AARP.TPA+3
ldx #3
.1 lda (ZPFrameInPtr),y
cmp ETKCFG+S.ETKCFG.ADDR,x
bne AARP.IN.EXIT
dey
dex
bpl .1
.10 ldy #S.AARP.OPERATION+1 HI byte
lda (ZPFrameInPtr),y
cmp #S.AARP.OPERATION.REQ
beq AARP.IN.REQ
cmp #S.AARP.OPERATION.REP
beq AARP.IN.REP
AARP.IN.EXIT lda hFrameIn
beq .8
stz hFrameIn
>SYSCALL FreeMem
.8 clc
rts
AARP.IN.REQ ldy #S.AARP.SPA+3
ldx #3
.1 lda (ZPFrameInPtr),y
sta AARP.REP.TPA,x
dey
dex
bpl .1
ldy #S.AARP.SHA+5
ldx #5
.2 lda (ZPFrameInPtr),y
sta AARP.REP.DSTMAC,x
sta AARP.REP.THA,x
dey
dex
bpl .2
>LDYA L.AARP.REP
jsr AARP.Send
bra AARP.IN.EXIT
AARP.IN.REP lda #K.AARP.TTL
sta AARP.TmpCache+S.AARPCACHE.TTL
lda /K.AARP.TTL
sta AARP.TmpCache+S.AARPCACHE.TTL+1
ldy #S.AARP.SPA+3
ldx #3
.1 lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.ADDR,x
dey
dex
bpl .1
ldy #S.AARP.SHA+5
ldx #5
.2 lda (ZPFrameInPtr),y
sta AARP.TmpCache+S.AARPCACHE.MAC,x
dey
dex
bpl .2
lda #S.AARPCACHE.S.RESOLVED
jsr AARP.ADD.I
jmp AARP.IN.EXIT
*--------------------------------------
AARP.QUERY.I jsr AARP.FIND.BY.ADDR
bcs .3 send an AARP request
lda (ZPCachePtr) get status...
bpl .9 Pending...
ldy #S.AARPCACHE.MAC
.2 lda (ZPCachePtr),y
sta AARP.TmpCache,y
iny
cpy #S.AARPCACHE.MAC+6
bne .2
ldy #S.AARPCACHE.TTL
lda #K.AARP.TTL
sta (ZPCachePtr),y
iny
lda /K.AARP.TTL
sta (ZPCachePtr),y
clc
rts
.3 ldx #3
.4 lda AARP.TmpCache+S.AARPCACHE.ADDR,x
sta AARP.REQ.TPA,x
dex
bpl .4
>LDYA L.AARP.REQ
jsr AARP.Send
bcs .99
lda #K.AARP.PENDING.TTL
sta AARP.TmpCache+S.AARPCACHE.TTL
stz AARP.TmpCache+S.AARPCACHE.TTL+1
lda #S.AARPCACHE.S.PENDING
jsr AARP.ADD.I
.9 lda #ERR.AARP.PENDING
sec
.99 rts
*--------------------------------------
AARP.FIND.BY.ADDR
>LDYA L.AARP.CACHE
>STYA ZPCachePtr
lda #K.AARPCACHE.SIZE
sta TmpOffset
.1 lda (ZPCachePtr)
beq .3
ldx #3
ldy #S.AARPCACHE.ADDR+3
.2 lda AARP.TmpCache+S.AARPCACHE.ADDR,x
cmp (ZPCachePtr),y
bne .3
dey
dex
bpl .2
clc
rts
.3 lda ZPCachePtr
clc
adc #S.AARPCACHE
sta ZPCachePtr
bcc .8
inc ZPCachePtr+1
.8 dec TmpOffset
bne .1
sec
rts
*--------------------------------------
AARP.FIND.FREE >LDYA L.AARP.CACHE
>STYA ZPCachePtr
lda #$ff
sta TmpDWord
sta TmpDWord+1
ldx #K.AARPCACHE.SIZE
.1 lda (ZPCachePtr)
beq .8
bpl .6
ldy #S.AARPCACHE.TTL
lda (ZPCachePtr),y
sec
sbc TmpDWord
iny
lda (ZPCachePtr),y
sbc TmpDWord+1
bcc .6
lda (ZPCachePtr),y
sta TmpDWord+1
dey
lda (ZPCachePtr),y
sta TmpDWord
>LDYA ZPCachePtr
>STYA ZPTmpPtr1 save lowest TTL slot ...
.6 lda ZPCachePtr
clc
adc #S.AARPCACHE
sta ZPCachePtr
bcc .7
inc ZPCachePtr+1
.7 dex
bne .1
>LDYA ZPTmpPtr1
>STYA ZPCachePtr
lda #0
sta (ZPCachePtr)
.8 clc
rts
*--------------------------------------
AARP.EXPIRE >LDYA L.AARP.CACHE
>STYA ZPCachePtr
ldx #K.AARPCACHE.SIZE
.1 lda (ZPCachePtr)
beq .2
and #S.AARPCACHE.S.STATIC
bne .2
ldy #S.AARPCACHE.TTL
sec
lda (ZPCachePtr),y
sbc #1
sta (ZPCachePtr),y
iny
lda (ZPCachePtr),y
sbc #0
sta (ZPCachePtr),y
bcs .2
lda #0
sta (ZPCachePtr)
.2 lda ZPCachePtr
clc
adc #S.AARPCACHE
sta ZPCachePtr
bcc .3
inc ZPCachePtr+1
.3 dex
bne .1
rts
*--------------------------------------
AARP.Send >STYA IOCTL+S.IOCTL.BUFPTR
>LDYAI S.AARP
>STYA IOCTL+S.IOCTL.BYTECNT
jmp FRM.Send.IOCTL
*--------------------------------------
MAN
SAVE USR/SRC/LIB/LIBETALK.S.AARP
LOAD USR/SRC/LIB/LIBETALK.S
ASM

35
LIB/LIBETALK.S.CFG.txt Normal file
View File

@ -0,0 +1,35 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
CFG.SET >PULLW ZPTmpPtr1 ETKCFG
ldy #S.ETKCFG-1
.1 lda (ZPTmpPtr1),y
sta ETKCFG,y
dey
bpl .1
ldx #5
.2 lda ETKCFG+S.NETCFG.MAC,x
sta AARP.REQ.SRCMAC,x
sta AARP.REQ.SHA,x
sta AARP.REP.SRCMAC,x
sta AARP.REP.SHA,x
dex
bpl .2
clc
rts
*--------------------------------------
CFG.GET >LDYA L.ETKCFG
clc
rts
*--------------------------------------
MAN
SAVE USR/SRC/LIB/LIBETALK.S.CFG
LOAD USR/SRC/LIB/LIBETALK.S
ASM

12
LIB/LIBETALK.S.DDP.txt Normal file
View File

@ -0,0 +1,12 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
DDP.IN clc
rts
*--------------------------------------
MAN
SAVE USR/SRC/LIB/LIBETALK.S.DDP
LOAD USR/SRC/LIB/LIBETALK.S
ASM

11
LIB/LIBETALK.S.ELAP.txt Normal file
View File

@ -0,0 +1,11 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
*--------------------------------------
MAN
SAVE USR/SRC/LIB/LIBETALK.S.ELAP
LOAD USR/SRC/LIB/LIBETALK.S
ASM

23
LIB/LIBETALK.S.FRM.txt Normal file
View File

@ -0,0 +1,23 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
*--------------------------------------
FRM.Send ldx #3
.1 lda ZPFrameOutPtr,x Get Frame Ptr & Len
sta IOCTL+S.IOCTL.BUFPTR,x
dex
bpl .1
FRM.Send.IOCTL >PUSHW L.IOCTL
>PUSHBI IOCTL.WRITE
lda ETKCFG+S.NETCFG.DevID
>SYSCALL IOCTL
rts
*--------------------------------------
MAN
SAVE USR/SRC/LIB/LIBETALK.S.FRM
LOAD USR/SRC/LIB/LIBETALK.S
ASM

11
LIB/LIBETALK.S.RTMP.txt Normal file
View File

@ -0,0 +1,11 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
*--------------------------------------
MAN
SAVE USR/SRC/LIB/LIBETALK.S.RTMP
LOAD USR/SRC/LIB/LIBETALK.S
ASM

View File

@ -10,6 +10,7 @@ AUTO 4,1
.INB INC/A2OSX.I
.INB INC/NIC.I
.INB INC/ETH.I
.INB INC/LIB.NET.I
.INB INC/LIBETALK.I
*--------------------------------------
ZPFrameInPtr .EQ ZPLIB
@ -24,8 +25,12 @@ ZPFrameOutLen .EQ ZPLIB+10
ZPDataOutPtr .EQ ZPLIB+12
ZPDataOutLen .EQ ZPLIB+14
ZPIOCTL .EQ ZPLIB+16
ZPTmpPtr1 .EQ ZPLIB+18
ZPPtrADDR .EQ ZPLIB+16
ZPPtrMAC .EQ ZPLIB+18
ZPCachePtr .EQ ZPLIB+24
ZPTmpPtr1 .EQ ZPLIB+26
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -49,45 +54,68 @@ CS.START cld
.DA INCOMING
.DA PULSE
.DA AARP.CLEAR
.DA AARP.QUERY
.DA AARP.ADD
.DA AARP.GetCACHE
L.IOCTL .DA IOCTL
L.AARP.REQ .DA AARP.REQ
L.AARP.REP .DA AARP.REP
L.AARP.CACHE .DA AARP.CACHE
*--------------------------------------
L.ETKCFG .DA ETKCFG
.DA 0
*--------------------------------------
LIB.LOAD
*--------------------------------------
LIB.UNLOAD
LIB.LOAD ldx RefCount
bne .8
jsr AARP.CLEAR
.8 inc RefCount
clc
rts
*--------------------------------------
CFG.SET >PULLW ZPTmpPtr1 IPCFG
ldy #0
.1 lda (ZPTmpPtr1),y
sta ETKCFG,y
iny
cpy #S.ETKCFG
bne .1
clc
rts
*--------------------------------------
CFG.GET >LDYA L.ETKCFG
LIB.UNLOAD dec RefCount
clc
rts
*--------------------------------------
INCOMING sta hFrameIn
>PULLW ZPIOCTL
>PULLW ZPTmpPtr1
ldy #S.IOCTL.BUFPTR+3
.1 lda (ZPIOCTL),y Get Frame Ptr & Len
.1 lda (ZPTmpPtr1),y Get Frame Ptr & Len
sta ZPFrameInPtr-S.IOCTL.BUFPTR,y
dey
bpl .1
ldy #S.ETH.SNAP.PROTO
lda (ZPFrameInPtr),y
tax
iny
lda (ZPFrameInPtr),y
sec
cmp #S.ETH.SNAP.PROTO.AARP
bne .2
cpx /S.ETH.SNAP.PROTO.AARP
bne .2
jmp AARP.IN
.2 cmp #S.ETH.SNAP.PROTO.DDP
bne .9
cpx /S.ETH.SNAP.PROTO.DDP
bne .9
jmp DDP.IN
.9 sec
rts
*--------------------------------------
*--------------------------------------
@ -97,11 +125,57 @@ PULSE and #S.EVT.F.T1SEC
beq .9
.9 rts
*--------------------------------------
.INB USR/SRC/LIB/LIBETALK.S.AARP
.INB USR/SRC/LIB/LIBETALK.S.CFG
.INB USR/SRC/LIB/LIBETALK.S.DDP
.INB USR/SRC/LIB/LIBETALK.S.ELAP
.INB USR/SRC/LIB/LIBETALK.S.FRM
.INB USR/SRC/LIB/LIBETALK.S.RTMP
*--------------------------------------
CS.END
*--------------------------------------
AARP.REQ .HS 090007FFFFFF S.ETH.DSTMAC
AARP.REQ.SRCMAC .BS 6
.DA #0,#36 S.ETH.802.3.LENGTH
.HS AA S.ETH.802.2.DSTSAP
.HS AA S.ETH.802.2.SRCSAP
.HS 03 S.ETH.802.2.CTRL
.HS 00.00.00.80.F3 S.ETH.SNAP.PROTO
.HS 00.01.80.9B.06.04
.HS 0001 Request
AARP.REQ.SHA .BS 6
AARP.REQ.SPA .BS 4
AARP.REQ.THA .BS 6
AARP.REQ.TPA .BS 4
.BS AARP.REQ+60-*
AARP.REQ.LEN .EQ 60
*--------------------------------------
AARP.REP .EQ *
AARP.REP.DSTMAC .BS 6
AARP.REP.SRCMAC .BS 6
.DA #0,#36 S.ETH.802.3.LENGTH
.HS AA S.ETH.802.2.DSTSAP
.HS AA S.ETH.802.2.SRCSAP
.HS 03 S.ETH.802.2.CTRL
.HS 00.00.00.80.F3 S.ETH.SNAP.PROTO
.HS 00.01.80.9B.06.04
.HS 0002 Response
AARP.REP.SHA .BS 6
AARP.REP.SPA .BS 4
AARP.REP.THA .BS 6
AARP.REP.TPA .BS 4
.BS AARP.REP+60-*
AARP.REP.LEN .EQ 60
*--------------------------------------
RefCount .BS 1
IOCTL .BS S.IOCTL
hFrameIn .BS 1
ETKCFG .BS S.ETKCFG
AARP.CACHE .BS K.AARPCACHE.SIZE*S.AARPCACHE
AARP.TmpCache .BS S.AARPCACHE
TmpDWord .BS 4
TmpOffset .BS 2
*--------------------------------------
MAN
SAVE USR/SRC/LIB/LIBETALK.S

View File

@ -446,7 +446,7 @@ RefCount .DA #0
DYNPORT.LAST .DA K.DYNPORT.START
hDNSSocket .BS 1
DNS.TmpCache .BS S.DNSCACHE
ARP.TmpCache .BS S.ARP
ARP.TmpCache .BS S.ARPCACHE
*--------------------------------------
SKT.Index .BS 1
SKT.TABLE .BS K.SKTTABLE.SIZE

View File

@ -130,7 +130,6 @@ CS.INIT.LIBS lda LibCnt
ldy LibCnt
sta hLIBs,y
inc LibCnt
tay
ldx #LIBNET.GETCFG
@ -154,6 +153,16 @@ CS.INIT.LIBS lda LibCnt
dex
bpl .2
* >PUSHW pNETCFG
* ldy LibCnt
* lda hLIBs,y
* tay
* ldx #LIBNET.SETCFG
* jsr A2osX.LIBCALL
inc LibCnt
lda LibCnt
cmp #LIB.MAX
bne .1