Kernel 0.92

This commit is contained in:
Rémy GIBERT 2019-01-05 20:33:08 +00:00
parent 145217f291
commit 6480b38e1a
11 changed files with 467 additions and 256 deletions

Binary file not shown.

View File

@ -26,7 +26,7 @@
<Keywords name="Folders in comment, close"></Keywords>
<Keywords name="Keywords1">.BS&#x000D;&#x000A;.DA&#x000D;&#x000A;.AS&#x000D;&#x000A;.AT&#x000D;&#x000A;.AZ&#x000D;&#x000A;.EQ&#x000D;&#x000A;.MA&#x000D;&#x000A;.EM&#x000D;&#x000A;.OR&#x000D;&#x000A;.TF&#x000D;&#x000A;.LIST&#x000D;&#x000A;.HS&#x000D;&#x000A;.IN&#x000D;&#x000A;.INB&#x000D;&#x000A;.OP&#x000D;&#x000A;.TA&#x000D;&#x000A;.EM&#x000D;&#x000A;.PH&#x000D;&#x000A;.EP&#x000D;&#x000A;.DUMMY&#x000D;&#x000A;.ED</Keywords>
<Keywords name="Keywords2">adc&#x000D;&#x000A;and&#x000D;&#x000A;asl&#x000D;&#x000A;bit&#x000D;&#x000A;brk&#x000D;&#x000A;clc&#x000D;&#x000A;cld&#x000D;&#x000A;cli&#x000D;&#x000A;clv&#x000D;&#x000A;cmp&#x000D;&#x000A;cpx&#x000D;&#x000A;cpy&#x000D;&#x000A;dec&#x000D;&#x000A;dex&#x000D;&#x000A;dey&#x000D;&#x000A;eor&#x000D;&#x000A;inc&#x000D;&#x000A;inx&#x000D;&#x000A;iny&#x000D;&#x000A;lda&#x000D;&#x000A;ldx&#x000D;&#x000A;ldy&#x000D;&#x000A;lsr&#x000D;&#x000A;nop&#x000D;&#x000A;ora&#x000D;&#x000A;rmb&#x000D;&#x000A;rol&#x000D;&#x000A;ror&#x000D;&#x000A;rti&#x000D;&#x000A;rts&#x000D;&#x000A;sbc&#x000D;&#x000A;sec&#x000D;&#x000A;sed&#x000D;&#x000A;sei&#x000D;&#x000A;smb&#x000D;&#x000A;sta&#x000D;&#x000A;stp&#x000D;&#x000A;stx&#x000D;&#x000A;sty&#x000D;&#x000A;stz&#x000D;&#x000A;tax&#x000D;&#x000A;tay&#x000D;&#x000A;trb&#x000D;&#x000A;tsb&#x000D;&#x000A;tsx&#x000D;&#x000A;txa&#x000D;&#x000A;txs&#x000D;&#x000A;tya&#x000D;&#x000A;wai</Keywords>
<Keywords name="Keywords3">$&#x000D;&#x000A;%&#x000D;&#x000A;/&#x000D;&#x000A;#&#x000D;&#x000A;&amp;</Keywords>
<Keywords name="Keywords3">$&#x000D;&#x000A;%&#x000D;&#x000A;/&#x000D;&#x000A;#&#x000D;&#x000A;&amp;&#x000D;&#x000A;^</Keywords>
<Keywords name="Keywords4">.1&#x000D;&#x000A;.2&#x000D;&#x000A;.3&#x000D;&#x000A;.4&#x000D;&#x000A;.5&#x000D;&#x000A;.6&#x000D;&#x000A;.7&#x000D;&#x000A;.8&#x000D;&#x000A;.9&#x000D;&#x000A;</Keywords>
<Keywords name="Keywords5">AUTO&#x000D;&#x000A;MAN&#x000D;&#x000A;LOAD&#x000D;&#x000A;SAVE&#x000D;&#x000A;ASM&#x000D;&#x000A;CREATE&#x000D;&#x000A;INC&#x000D;&#x000A;LOMEM&#x000D;&#x000A;PREFIX&#x000D;&#x000A;PR#&#x000D;&#x000A;NEW&#x000D;&#x000A;BLOAD&#x000D;&#x000A;BSAVE&#x000D;&#x000A;TEXT&#x000D;&#x000A;DELETE&#x000D;&#x000A;.DO&#x000D;&#x000A;.ELSE&#x000D;&#x000A;.FIN</Keywords>
<Keywords name="Keywords6">pha&#x000D;&#x000A;php&#x000D;&#x000A;phx&#x000D;&#x000A;phy&#x000D;&#x000A;pla&#x000D;&#x000A;plp&#x000D;&#x000A;plx&#x000D;&#x000A;ply</Keywords>

View File

@ -9,6 +9,7 @@ DEV.Bind >PUSHBI 0
>LDYA L.DEVNAME
>SYSCALL open
bcc .1
inc DEVNAME+8
lda DEVNAME+8
cmp #'8'
@ -21,7 +22,8 @@ DEV.Bind >PUSHBI 0
sec
rts
.1 sta IPCFG+S.IPCFG.hFD
.1 ldy #S.IPCFG.hFD
sta (pIPCFG),y
>PUSHW L.DEVNAME
>PUSHBI 2

View File

@ -3,47 +3,17 @@ PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.IPCFG .DA IPCFG
L.SA.LOCAL .DA SA.LOCAL
L.SA.REMOTE .DA SA.REMOTE
L.MSG.CFG1 .DA MSG.CFG1
L.MSG.CFG2 .DA MSG.CFG2
L.MSG.CFG.KO .DA MSG.CFG.KO
L.MSG.CFG.OK .DA MSG.CFG.OK
L.MSG.CFG.ND .DA MSG.CFG.ND
L.MSG.CFG.NA .DA MSG.CFG.NA
L.DHCP.DISC .DA DHCP.DISC
L.DHCP.REQ .DA DHCP.REQ
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib
bcs .9
sta hLIBTCPIP
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
bcs .9
>STYA ZPIPCfgPtr
lda (ZPIPCfgPtr)
DHCP.INIT lda (pIPCFG)
and #S.IPCFG.STATUS.OK
bne .99 Already Configured, exit
ldy #S.IPCFG.hFD
lda (ZPIPCfgPtr),y
lda (pIPCFG),y
beq .98
ldy #S.IPCFG-1
.1 lda (ZPIPCfgPtr),y
.1 lda (pIPCFG),y
sta IPCFG,y
dey
bne .1
@ -69,20 +39,20 @@ CS.INIT >LDYA L.LIBTCPIP
clc
.9 rts
.98 >LDYA L.MSG.CFG.ND
.98 >LDYA L.MSG.DHCP.ND
bra .90
.99 >LDYA L.MSG.CFG.NA
.99 >LDYA L.MSG.DHCP.NA
.90 >SYSCALL puts
lda #0
sec
rts
*--------------------------------------
CS.RUN >PUSHBI 0 no protocol
DHCP.RUN >PUSHBI 0 no protocol
lda #S.SOCKET.T.DGRAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcc .1
.9 jmp CS.RUN.KO
.9 jmp DHCP.RUN.KO
.1 >STA.G hSocket
pha
@ -100,105 +70,108 @@ CS.RUN >PUSHBI 0 no protocol
>LIBCALL hLIBTCPIP,LIBTCPIP.Connect
bcs .9
>LDYA L.MSG.CFG1
>LDYA L.MSG.DHCP.CFG1
>SYSCALL puts
jsr Init.Timeout
CS.RUN.SDISC >PUSHWI DHCP.DISC.LEN
DHCP.RUN.SDISC >PUSHWI DHCP.DISC.LEN
>PUSHW L.DHCP.DISC
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcc .1
jmp CS.RUN.KO
jmp DHCP.RUN.KO
.1 lda #S.IPCFG.STATUS.SDISC
sta IPCFG
CS.RUN.ROFFER >SLEEP
DHCP.RUN.ROFFER >SLEEP
jsr CS.RUN.SKT.RCVD
jsr DHCP.RUN.SKT.RCVD
bcc .1
jsr Wait.Timeout
bne CS.RUN.ROFFER
bne DHCP.RUN.ROFFER
lda #1
jmp CS.RUN.KO
jmp DHCP.RUN.KO
.1 jsr CheckDHCPOffer
bcs CS.RUN.ROFFER
bcs DHCP.RUN.ROFFER
lda #S.IPCFG.STATUS.ROFFER
sta IPCFG
CS.RUN.SREQ ldx #3
DHCP.RUN.SREQ ldx #3
.1 >PUSHB IPCFG+S.IPCFG.DHCPSRVR,x
dex
bpl .1
>PUSHBI 4
>LDYA L.MSG.CFG2
>LDYA L.MSG.DHCP.CFG2
>SYSCALL printf
>PUSHWI DHCP.REQ.LEN
>PUSHW L.DHCP.REQ
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcs CS.RUN.KO
bcs DHCP.RUN.KO
lda #S.IPCFG.STATUS.SREQ
sta IPCFG
CS.RUN.RACK >SLEEP
DHCP.RUN.RACK >SLEEP
jsr CS.RUN.SKT.RCVD
jsr DHCP.RUN.SKT.RCVD
bcc .1
jsr Wait.Timeout
bne CS.RUN.RACK
bne DHCP.RUN.RACK
lda #2
bra CS.RUN.KO
bra DHCP.RUN.KO
.1 jsr CheckDHCPAck
bcs CS.RUN.RACK
bcs DHCP.RUN.RACK
CS.RUN.OK lda #S.IPCFG.STATUS.OK
DHCP.RUN.OK lda #S.IPCFG.STATUS.OK
sta IPCFG
>PUSHW L.IPCFG
>LIBCALL hLIBTCPIP,LIBTCPIP.SET.IPCFG
ldx #3
.1 lda IPCFG+S.IPCFG.MASK,x
>PUSHA
dex
bpl .1
ldx #3
.2 lda IPCFG+S.IPCFG.IP,x
>PUSHA
dex
bpl .2
>PUSHBI 8
>LDYA L.MSG.CFG.OK
>LDYA L.MSG.DHCP.OK
>SYSCALL printf
lda #0 Leave with NO ERROR
sec
rts
CS.RUN.KO pha
DHCP.RUN.KO pha
>PUSHA
>PUSHBI 1
>LDYA L.MSG.CFG.KO
>LDYA L.MSG.DHCP.KO
>SYSCALL printf
pla
sec
rts
*--------------------------------------
CS.RUN.SKT.RCVD >LDA.G hSocket
DHCP.RUN.SKT.RCVD
>LDA.G hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcs .9
>STA.G hFrame
@ -207,29 +180,12 @@ CS.RUN.SKT.RCVD >LDA.G hSocket
>STYA ZPFrameBase
.9 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.G hSocket
DHCP.QUIT >LDA.G hSocket
beq .1
>LIBCALL hLIBTCPIP,LIBTCPIP.Shutdown
.1 lda hLIBTCPIP
beq .8
>SYSCALL UnloadLib
.8 clc
.1 clc
rts
*--------------------------------------
CheckDHCPOffer jsr CheckDHCPXID
@ -307,10 +263,6 @@ CheckDHCPOffer jsr CheckDHCPXID
sec
rts
*--------------------------------------
CS.RUN.DISCARD >LDA.G hFrame
>SYSCALL FreeMem
rts
*--------------------------------------
GetDHCPOption cmp #S.DHCP.OPTIONS.MASK
bne .1
ldx #S.IPCFG.MASK
@ -400,6 +352,10 @@ CheckDHCPAck jsr CheckDHCPXID
sec
rts
*--------------------------------------
CS.RUN.DISCARD >LDA.G hFrame
>SYSCALL FreeMem
rts
*--------------------------------------
CheckDHCPXID ldy #S.DHCP.XID+3
ldx #3
@ -416,79 +372,6 @@ CheckDHCPXID ldy #S.DHCP.XID+3
.9 sec
rts
*--------------------------------------
Init.Timeout ldy #TimeOut
lda #TIMEOUT.MAX
sta (pData),y
rts
*--------------------------------------
Wait.TimeOut ldy #TimeOut
lda (pData),y
rts
*--------------------------------------
CS.END
LIBTCPIP .AZ "libtcpip"
MSG.CFG1 .AZ "DHCPCLNT:Searching for DHCP servers..."
MSG.CFG2 .AZ "DHCPCLNT:Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n"
MSG.CFG.KO .AZ "DHCPCLNT:Time Out [%h].\r\n"
MSG.CFG.OK .AZ "DHCPCLNT:Success:[IP=%d.%d.%d.%d/%d.%d.%d.%d]\r\n"
MSG.CFG.ND .AZ "DHCPCLNT:No Device, exiting."
MSG.CFG.NA .AZ "DHCPCLNT:TCPIP Already configured, exiting."
hLIBTCPIP .BS 1
IPCFG .BS S.IPCFG
*--------------------------------------
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.BS 1
.HS 00.00.00.00 S.SOCKADDR.ADDR
.DA UDP.PORT.DHCPC S.SOCKADDR.PORT
*--------------------------------------
SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
.BS 1
.HS FF.FF.FF.FF S.SOCKADDR.ADDR
.DA UDP.PORT.DHCPS S.SOCKADDR.PORT
*--------------------------------------
DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS
DHCP.DISC.XID .BS 4
.HS 0000 SECS
.DA S.DHCP.FLAGS.BRDCST
.HS 00000000 CIADDR
DHCP.DISC.YIADDR .HS 00000000
.HS 00000000 SIADDR
DHCP.DISC.GIADDR .HS 00000000
DHCP.DISC.CHADDR .HS 00000000.00000000.00000000.00000000
.BS 64 SNAME
.BS 128 FILE
.HS 63825363 COOKIE
.HS 3501 OPT
.DA #S.DHCP.OPTIONS.DHCPDiscover
.HS 37040103060FFF
DHCP.DISC.LEN .EQ *-DHCP.DISC
*--------------------------------------
DHCP.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS
DHCP.REQ.XID .BS 4
.HS 0000 SECS
.DA S.DHCP.FLAGS.BRDCST
.HS 00000000 CIADDR
DHCP.REQ.YIADDR .HS 00000000
.HS 00000000 SIADDR
DHCP.REQ.GIADDR .HS 00000000
DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000
.BS 64 SNAME
.BS 128 FILE
.HS 63825363 COOKIE
.HS 3501 OPT
.DA #S.DHCP.OPTIONS.DHCPRequest
.HS 3204
DHCP.REQ.OPT.REQIP .BS 4
.HS 3604
DHCP.REQ.OPT.SVRIP .BS 4
.HS FF
DHCP.REQ.LEN .EQ *-DHCP.REQ
*--------------------------------------
DS.START
TimeOut .BS 1
hSocket .BS 1
hFrame .BS 1
DS.END
MAN
SAVE USR/SRC/SBIN/IPCONFIG.S.DHCP
LOAD USR/SRC/SBIN/IPCONFIG.S

View File

@ -48,7 +48,7 @@ CFG.EtcFiles >LDYAI 256
jsr CFG.Read.PrintF
jsr CFG.Read.HOSTS
jsr SET.IPCFG.I
>LIBCALL hLIBTCPIP,LIBTCPIP.Set.IPCFG
lda CFG.hBuf1
>SYSCALL freemem
@ -326,7 +326,7 @@ CFG.DNS.ADD >STYA ZPTmpPtr1
>PUSHYA
>PUSHW ZPTmpPtr1
jsr DNS.Add
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.Add
*--------------------------------------
CFG.Read.Result bcc .1
>PUSHA
@ -405,92 +405,6 @@ CFG.A2CharAX pha
adc #6
.8 rts
*--------------------------------------
SET.IPCFG >PULLW ZPTmpPtr1 IPCFG
ldy #0
.1 lda (ZPTmpPtr1),y
sta IPCFG,y
iny
cpy #S.IPCFG
bne .1
SET.IPCFG.I >LDYA L.DCB.NIC
>STYA IOCTL+S.IOCTL.BUFPTR
lda #S.IOCTL.STATCODE.GETDCB
sta IOCTL+S.IOCTL.STATCODE
>PUSHW L.IOCTL
>PUSHBI IOCTL.STATUS
lda IPCFG+S.IPCFG.hFD
>SYSCALL IOCTL
bcs *
ldx #5
.10 lda DCB.NIC+S.DCB.NIC.MAC,x
sta IPCFG+S.IPCFG.MAC,x
sta ARP.REQ.SRCMAC,x
sta ARP.REQ.SHA,x
sta ARP.REP.SRCMAC,x
sta ARP.REP.SHA,x
dex
bpl .10
ldx #3
.11 lda IPCFG+S.IPCFG.IP,x
sta SA.LOCAL+S.SOCKADDR.ADDR,x
sta ARP.REQ.SPA,x
sta ARP.REP.SPA,x
dex
bpl .11
lda DCB.NIC+S.DCB.NIC.FLAGS
and #S.DCB.NIC.FLAGS.ARPOFFLOAD
beq .2
ldx #11
.1 lda IPCFG+S.IPCFG.IP,x
sta DCB.NIC+S.DCB.NIC.IP,x
dex
bpl .1
lda S.IOCTL.CTRLCODE.SETDCB
sta S.IOCTL.CTRLCODE
>PUSHW L.IOCTL
>PUSHBI IOCTL.CONTROL
lda IPCFG+S.IPCFG.hFD
>SYSCALL IOCTL
bcs .9
.2 lda hDNSSocket
beq .3
jsr SKT.Shutdown
stz hDNSSocket
.3 lda IPCFG+S.IPCFG.DNS1
beq .8
>PUSHBI 0 no protocol
lda #S.SOCKET.T.DGRAM
jsr SKT.Socket
bcs .9
sta hDNSSocket
stz SA.LOCAL+S.SOCKADDR.PORT
stz SA.LOCAL+S.SOCKADDR.PORT+1
>PUSHW L.SA.LOCAL
lda hDNSSocket
jsr SKT.Bind
.8 clc
.9 rts
*--------------------------------------
* grab a copy on the fly for lib function
* OUT :
* Y,A = PTR to S.IPCFG

View File

@ -8,10 +8,15 @@ AUTO 4,1
*--------------------------------------
.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/LIBTCPIP.I
.INB INC/NET.DHCP.I
*--------------------------------------
TIMEOUT.MAX .EQ 200 20 sec.
*--------------------------------------
.DUMMY
.OR ZPBIN
@ -20,6 +25,13 @@ ZPPtr1 .BS 2
pIPCFG .BS 2
pFD .BS 2
pDEV .BS 2
ZPIPCfgPtr .BS 2
ZPFrameBase .BS 2
ZPFramePtr .BS 2
ZPTmpPtr1 .BS 2
ZPTmpPtr2 .BS 2
ZPTmpPtr3 .BS 2
*--------------------------------------
ZS.END
.ED
*--------------------------------------
@ -73,8 +85,33 @@ L.MSG.DNS.ADD .DA MSG.DNS.ADD
L.HOSTNAME .DA HOSTNAME
L.TCPIP.CONF .DA TCPIP.CONF
L.HOSTS .DA HOSTS
L.IPCFG .DA IPCFG
L.IOCTL .DA IOCTL
L.DCB.NIC .DA DCB.NIC
L.CFG.IP .DA CFG.IP
L.HST.SScanF .DA HST.SScanF
L.CFG.HOSTS.SScanF .DA CFG.HOSTS.SScanF
L.CFG.Keywords .DA CFG.Keywords
J.CFG.Keywords .DA CFG.Read.address
.DA CFG.Read.netmask
.DA CFG.Read.gateway
.DA CFG.Read.nameserver
.DA CFG.Read.dnsdomain
.DA 0
*--------------------------------------
* DHCP
*--------------------------------------
L.SA.LOCAL .DA SA.LOCAL
L.SA.REMOTE .DA SA.REMOTE
L.MSG.DHCP.CFG1 .DA MSG.DHCP.CFG1
L.MSG.DHCP.CFG2 .DA MSG.DHCP.CFG2
L.MSG.DHCP.KO .DA MSG.DHCP.KO
L.MSG.DHCP.OK .DA MSG.DHCP.OK
L.MSG.DHCP.ND .DA MSG.DHCP.ND
L.MSG.DHCP.NA .DA MSG.DHCP.NA
L.DHCP.DISC .DA DHCP.DISC
L.DHCP.REQ .DA DHCP.REQ
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib
bcs .9
@ -164,13 +201,15 @@ CS.RUN.DUMP >LDYA L.MSG0.L
>PUSHEA.G DIB+S.DIB.IDS
lda #S.FD.DEV.NAME
clc
adc pFD
tay
lda /S.FD.DEV.NAME
adc pFD+1
>LDA.G FD.ETH
ldx #$ff
.11 inx
cmp Dev.Table.hFD,x
bne .11
lda Dev.Table.hPath,x
>SYSCALL GetMemPtr
>PUSHYA
>PUSHB.G FD.ETH
@ -323,7 +362,16 @@ CS.RUN.DONE lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory
rts
*--------------------------------------
CS.DOEVENT sec
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 hLIBTCPIP
@ -332,8 +380,19 @@ CS.QUIT lda hLIBTCPIP
.8 clc
rts
*--------------------------------------
Init.Timeout ldy #TimeOut
lda #TIMEOUT.MAX
sta (pData),y
rts
*--------------------------------------
Wait.TimeOut ldy #TimeOut
lda (pData),y
rts
*--------------------------------------
.INB USR/SRC/SBIN/IPCONFIG.S.DEV
.INB USR/SRC/SBIN/IPCONFIG.S.DHCP
.INB USR/SRC/SBIN/IPCONFIG.S.ETC
*--------------------------------------
CS.END
LIBTCPIP .AZ "libtcpip"
@ -351,7 +410,7 @@ MSG0.L .AZ "Loaded"
MSG0.NL .AZ "Not Loaded"
*--------------------------------------
MSG1.DEV .AS "Device Configuration :\r\n"
.AS " FD.ETH : $%h\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"
@ -385,6 +444,7 @@ MSG.DNS.ADD .AZ " - Adding static host %d.%d.%d.%d %s..."
HOSTNAME .AZ "${ROOT}ETC/HOSTNAME"
TCPIP.CONF .AZ "${ROOT}ETC/TCPIP.CONF"
HOSTS .AZ "${ROOT}ETC/HOSTS"
HST.SScanF .AZ "%d.%d.%d.%d"
*--------------------------------------
CFG.DefaultHost .AZ "a2osx-XXXX"
CFG.Keywords >PSTR "address"
@ -400,6 +460,62 @@ CFG.hCfgPath .BS 1
CFG.hCfgFile .BS 1
CFG.IP .BS 4
CFG.HOSTS.SScanF .AZ "%d.%d.%d.%d %s %s"
IPCFG .BS S.IPCFG
*--------------------------------------
MSG.DHCP.CFG1 .AZ "Searching for DHCP servers..."
MSG.DHCP.CFG2 .AZ "Reply from DHCP Server at %d.%d.%d.%d, requesting...\r\n"
MSG.DHCP.KO .AZ "Time Out [%h].\r\n"
MSG.DHCP.OK .AZ "Success:[IP=%d.%d.%d.%d/%d.%d.%d.%d]\r\n"
MSG.DHCP.ND .AZ "No Device, exiting."
MSG.DHCP.NA .AZ "TCPIP Already configured, exiting."
*--------------------------------------
SA.LOCAL .DA #AF.INET S.SOCKADDR.AF
.BS 1
.HS 00.00.00.00 S.SOCKADDR.ADDR
.DA UDP.PORT.DHCPC S.SOCKADDR.PORT
*--------------------------------------
SA.REMOTE .DA #AF.INET S.SOCKADDR.AF
.BS 1
.HS FF.FF.FF.FF S.SOCKADDR.ADDR
.DA UDP.PORT.DHCPS S.SOCKADDR.PORT
*--------------------------------------
DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS
DHCP.DISC.XID .BS 4
.HS 0000 SECS
.DA S.DHCP.FLAGS.BRDCST
.HS 00000000 CIADDR
DHCP.DISC.YIADDR .HS 00000000
.HS 00000000 SIADDR
DHCP.DISC.GIADDR .HS 00000000
DHCP.DISC.CHADDR .HS 00000000.00000000.00000000.00000000
.BS 64 SNAME
.BS 128 FILE
.HS 63825363 COOKIE
.HS 3501 OPT
.DA #S.DHCP.OPTIONS.DHCPDiscover
.HS 37040103060FFF
DHCP.DISC.LEN .EQ *-DHCP.DISC
*--------------------------------------
DHCP.REQ .HS 01010600 OP,HTYPE,HLEN,HOPS
DHCP.REQ.XID .BS 4
.HS 0000 SECS
.DA S.DHCP.FLAGS.BRDCST
.HS 00000000 CIADDR
DHCP.REQ.YIADDR .HS 00000000
.HS 00000000 SIADDR
DHCP.REQ.GIADDR .HS 00000000
DHCP.REQ.CHADDR .HS 00000000.00000000.00000000.00000000
.BS 64 SNAME
.BS 128 FILE
.HS 63825363 COOKIE
.HS 3501 OPT
.DA #S.DHCP.OPTIONS.DHCPRequest
.HS 3204
DHCP.REQ.OPT.REQIP .BS 4
.HS 3604
DHCP.REQ.OPT.SVRIP .BS 4
.HS FF
DHCP.REQ.LEN .EQ *-DHCP.REQ
*--------------------------------------
.DUMMY
.OR 0
@ -412,6 +528,9 @@ FD.ETH .BS 1
IOCTL .BS S.IOCTL
DIB .BS S.DIB
DCB.NIC .BS S.DCB.NIC
TimeOut .BS 1
hSocket .BS 1
hFrame .BS 1
DS.END .ED
*--------------------------------------
MAN

View File

@ -397,7 +397,7 @@ READ php
bcs .9
>STYA ZPBufPtr
stx .8+1
phx
phy
ldy #S.IOCTL.BUFPTR+1
@ -433,7 +433,7 @@ READ php
inc ZPBufPtr+1
bne .2
.8 lda #$ff SELF MODIFIED hMem
.8 pla hMem
plp
clc

16
INC/LIBETALK.I.txt Normal file
View File

@ -0,0 +1,16 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
*--------------------------------------
LIBETALK.SETCFG .EQ 4
LIBETALK.GETCFG .EQ 6
LIBETALK.INCOMING .EQ 8
LIBETALK.PULSE .EQ 10
*--------------------------------------
MAN
SAVE INC/LIBETALK.I
LOAD USR/SRC/LIB/LIBETALK.S
ASM

93
LIB/LIBETALK.S.txt Normal file
View File

@ -0,0 +1,93 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF LIB/LIBETALK
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/NIC.I
.INB INC/ETH.I
*--------------------------------------
ZPFrameInPtr .EQ ZPLIB
ZPFrameInLen .EQ ZPLIB+2
ZPDataInPtr .EQ ZPLIB+4
ZPDataInLen .EQ ZPLIB+6
ZPFrameOutPtr .EQ ZPLIB+8
ZPFrameOutLen .EQ ZPLIB+10
ZPDataOutPtr .EQ ZPLIB+12
ZPDataOutLen .EQ ZPLIB+14
ZPIOCTL .EQ ZPLIB+16
*--------------------------------------
* 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
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA SETCFG
.DA GETCFG
.DA INCOMING
.DA PULSE
*--------------------------------------
.DA 0
*--------------------------------------
LIB.LOAD clc
rts
*--------------------------------------
LIB.UNLOAD clc
rts
*--------------------------------------
SETCFG
*--------------------------------------
GETCFG
*--------------------------------------
INCOMING sta hFrameIn
>PULLW ZPIOCTL
ldy #S.IOCTL.BUFPTR+3
ldx #3
.1 lda (ZPIOCTL),y
sta ZPFrameInPtr,x
dey
dex
bpl .1
sec
rts
*--------------------------------------
* Expire = every sec
* Retry = every 100 msec
*--------------------------------------
PULSE and #S.EVT.F.T1SEC
beq .1
.1 clc
rts
*--------------------------------------
CS.END
*--------------------------------------
hFrameIn .BS 1
*--------------------------------------
MAN
SAVE USR/SRC/LIB/LIBETALK.S
ASM

176
SBIN/NETWORKD.S.txt Normal file
View File

@ -0,0 +1,176 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF SBIN/NETWORKD
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.E.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
.INB INC/LIBETALK.I
*--------------------------------------
* Zero Page Segment, up to 32 bytes
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
* MyPtr .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.DEVNAME .DA DEVNAME
L.MSG.DEV.OK .DA MSG.DEV.OK
L.MSG.DEV.KO .DA MSG.DEV.KO
L.LIBTCPIP .DA LIBTCPIP
L.LIBETALK .DA LIBETALK
L.IOCTL .DA IOCTL
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN >PUSHBI 0
>LDYA L.DEVNAME
>SYSCALL open
bcc .1
inc DEVNAME+8
lda DEVNAME+8
cmp #'8'
bne CS.RUN
>LDYA L.MSG.DEV.KO
>SYSCALL puts
lda #MLI.E.NODEV
sec
rts
.1 sta hFD
>PUSHW L.DEVNAME
>PUSHBI 2
>LDYA L.MSG.DEV.OK
>SYSCALL printf
* >LDYA L.LIBTCPIP
* >SYSCALL LoadLib
* bcs .2
* sta hLIBTCPIP
.2 >LDYA L.LIBETALK
>SYSCALL LoadLib
bcs .3
sta hLIBETALK
.3
CS.RUN.LOOP >SLEEP
>PUSHW L.IOCTL
>PUSHBI IOCTL.READ
lda hFD
>SYSCALL IOCTL
bcs CS.RUN.LOOP No Frame
sta hFrameIn
ldx hLIBTCPIP
beq .1
* >PUSHW L.IOCTL
* lda hFrameIn
* >LIBCALL hLIBTCPIP,LIBTCPIP.INCOMING
* bcc CS.RUN.LOOP
.1 ldx hLIBETALK
beq .9
>PUSHW L.IOCTL
lda hFrameIn
>LIBCALL hLIBETALK,LIBETALK.INCOMING
bcc CS.RUN.LOOP
.9 lda hFrameIn
>SYSCALL freemem
bra CS.RUN.LOOP
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .9
ldx hLIBTCPIP
beq .1
* >LIBCALL hLIBTCPIP,LIBTCPIP.PULSE
.1 ldx hLIBETALK
beq .9
lda (pEvent)
>LIBCALL hLIBETALK,LIBETALK.PULSE
.9 sec never discard TIME event
rts
*--------------------------------------
CS.QUIT lda hLIBTCPIP
beq .1
>SYSCALL UnloadLib
.1 lda hLIBETALK
beq .2
>SYSCALL UnloadLib
.2 >PUSHWI 0
>PUSHBI IOCTL.CLOSE
lda hFD
>SYSCALL IOCTL
clc
rts
*--------------------------------------
CS.END
*--------------------------------------
DEVNAME .AZ "/DEV/ETH1"
MSG.DEV.KO .AZ "No Device Found, exiting."
MSG.DEV.OK .AZ "Bound To Device : %s\r\n"
LIBTCPIP .AZ "libtcpip"
LIBETALK .AZ "libetalk"
hFD .BS 1
hLIBTCPIP .BS 1
hLIBETALK .BS 1
IOCTL .BS S.IOCTL
hFrameIn .BS 1
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.END .ED
*--------------------------------------
MAN
SAVE USR/SRC/SBIN/NETWORKD.S
ASM

View File

@ -88,13 +88,21 @@ CS.RUN jsr Init.Timeout
CS.RUN.INIT ldx #3
ldy #S.IPCFG.IP+3
.1 lda (ZPIPCfgPtr),y
sta SA.LOCAL+S.SOCKADDR.ADDR,x
dey
dex
bpl .1
>PUSHBI 0 no protocol
lda #1
>SYSCALL ArgV
bcs CS.RUN.PORTOK
>SYSCALL atoi
>STYA SA.LOCAL+S.SOCKADDR.PORT
CS.RUN.PORTOK >PUSHBI 0 no protocol
lda #S.SOCKET.T.STREAM
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9