A2osX/BIN/TELNET.S.txt

318 lines
6.0 KiB
Plaintext
Raw Normal View History

2018-07-24 16:00:24 +00:00
NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/TELNET
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
*--------------------------------------
2018-09-11 21:15:15 +00:00
TIMEOUT.MAX .EQ 40 4 sec.
2018-08-27 15:26:01 +00:00
BUFSIZE .EQ 256
2018-07-24 16:00:24 +00:00
*--------------------------------------
2018-08-27 15:26:01 +00:00
ZPIPCfgPtr .EQ ZPBIN
ZPBufPtr .EQ ZPBIN+2
2018-09-03 06:01:07 +00:00
ZPBufLen .EQ ZPBIN+4
2018-07-24 16:00:24 +00:00
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
2018-09-19 15:25:42 +00:00
.DA #S.PS.F.EVENT S.PS.F
.DA #0
2018-07-24 16:00:24 +00:00
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA #16 SS
2018-09-03 06:01:07 +00:00
.DA #6 ZP
2018-07-24 16:00:24 +00:00
.DA 0
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBTCPIP .DA LIBTCPIP
L.Socket .DA Socket
L.MSG.IPKO .DA MSG.IPKO
L.MSG.USAGE .DA MSG.USAGE
L.MSG.UNKNOWN .DA MSG.UNKNOWN
L.MSG.HOSTOK .DA MSG.HOSTOK
L.MSG.SKTKO .DA MSG.SKTKO
2018-08-27 15:26:01 +00:00
L.MSG.SKTOK .DA MSG.SKTOK
2018-09-03 06:01:07 +00:00
L.MSG.SKTERR .DA MSG.SKTERR
2018-09-09 08:11:42 +00:00
L.MSG.IOERR .DA MSG.IOERR
L.MSG.USER .DA MSG.USER
2018-07-24 16:00:24 +00:00
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLib
bcs .9
sta hLIBTCPIP
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
.9 rts
*--------------------------------------
CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
>STYA ZPIPCfgPtr
lda (ZPIPCfgPtr) Configured ?
bmi CS.RUN.IPOK
>LDYA L.MSG.IPKO
2018-08-27 05:39:42 +00:00
>SYSCALL puts
2018-07-24 16:00:24 +00:00
lda #K.E.SYN
sec
rts
CS.RUN.IPOK ldy #S.PS.ARGC
lda (pPs),y
beq .9
jsr Init.Timeout
2018-08-27 15:26:01 +00:00
.2 >PUSHEA.G DST.IP
2018-07-24 16:00:24 +00:00
lda #1
>SYSCALL GetArg
>PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME
2018-09-05 06:18:50 +00:00
bcc CS.RUN.HOSTOK
>SLEEP
2018-07-24 16:00:24 +00:00
jsr Wait.Timeout
bcc .2
lda #1
>SYSCALL GetArg
>PUSHYA
2018-09-05 06:18:50 +00:00
>PUSHBI 2
2018-07-24 16:00:24 +00:00
>LDYA L.MSG.UNKNOWN
2018-08-28 15:28:34 +00:00
>SYSCALL printf
2018-07-24 16:00:24 +00:00
bra .99
.9 >LDYA L.MSG.USAGE
2018-08-28 15:28:34 +00:00
>SYSCALL puts
2018-08-27 15:26:01 +00:00
2018-08-28 15:28:34 +00:00
.99 lda #K.E.SYN
2018-07-24 16:00:24 +00:00
sec
rts
2018-09-05 06:18:50 +00:00
CS.RUN.HOSTOK ldy #S.PS.ARGC
lda (pPs),y
cmp #2
bcc CS.RUN.PORTOK
lda #2
>SYSCALL GetArg
>SYSCALL atoi
>STYA Socket.Dst.Port
CS.RUN.PORTOK lda #1
2018-07-24 16:00:24 +00:00
>SYSCALL GetArg
>PUSHYA
2018-09-05 06:18:50 +00:00
>PUSHW Socket.Dst.Port
2018-07-24 16:00:24 +00:00
ldy #DST.IP+3
ldx #3
.1 lda (pData),y
sta Socket.Dst.Addr,x
>PUSHA
dey
dex
bpl .1
2018-09-05 06:18:50 +00:00
>PUSHBI 8
2018-07-24 16:00:24 +00:00
>LDYA L.MSG.HOSTOK
>SYSCALL printf
CS.RUN.OPENSKT ldx #3
ldy #S.IPCFG.IP+3
.1 lda (ZPIPCfgPtr),y
sta Socket.Src.Addr,x
dey
dex
bpl .1
>PUSHW L.Socket
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New
bcc .2
>LDYA L.MSG.SKTKO
2018-08-27 05:39:42 +00:00
>SYSCALL puts
2018-07-24 16:00:24 +00:00
lda #K.E.SYN
sec
2018-08-27 15:26:01 +00:00
.9 rts
2018-07-24 16:00:24 +00:00
2018-09-17 15:42:38 +00:00
.2 >STA.G hSocket
2018-08-27 15:26:01 +00:00
>LDYA L.MSG.SKTOK
>SYSCALL puts
>LDYAI BUFSIZE
>SYSCALL getmem
bcs .9
>STYA ZPBufPtr
txa
>STA.G hBuf
2018-09-03 06:01:07 +00:00
CS.RUN.LOOP >SLEEP
2018-08-27 15:26:01 +00:00
>PUSHWI BUFSIZE
2018-09-11 21:15:15 +00:00
>PUSHW ZPBufPtr
>LDA.G hSocket
2018-08-27 15:26:01 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Read
bcc .1
2018-09-03 06:01:07 +00:00
2018-08-27 15:26:01 +00:00
tay
beq .2 no char
2018-09-09 08:11:42 +00:00
jmp CS.RUN.SKTERR
2018-08-27 15:26:01 +00:00
.1 >PUSHYA len
>PUSHW ZPBufPtr
ldy #S.PS.hStdOut
lda (pPs),y
>SYSCALL write
2018-09-09 08:11:42 +00:00
bcs .11
2018-08-27 15:26:01 +00:00
.2 >PUSHWI BUFSIZE
>PUSHW ZPBufPtr
ldy #S.PS.hStdIn
lda (pPs),y
>SYSCALL read
bcc .3
tay
2018-09-09 08:11:42 +00:00
beq CS.RUN.LOOP no char from STDIN
2018-09-03 06:01:07 +00:00
2018-09-09 08:11:42 +00:00
.11 jmp CS.RUN.IOERR
2018-08-27 15:26:01 +00:00
2018-09-03 06:01:07 +00:00
.3 >STYA ZPBufLen
lda (ZPBufPtr)
cmp #3 Ctrl-C
2018-09-09 08:11:42 +00:00
beq CS.RUN.USER
2018-09-03 06:01:07 +00:00
>PUSHW ZPBufLen
2018-09-11 21:15:15 +00:00
>PUSHW ZPBufPtr
>LDA.G hSocket
2018-08-27 15:26:01 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write
2018-09-18 06:28:51 +00:00
2018-09-09 08:11:42 +00:00
bcs CS.RUN.SKTERR
2018-08-27 15:26:01 +00:00
jmp CS.RUN.LOOP
2018-07-24 16:00:24 +00:00
.9 lda #0
sec
2018-09-09 08:11:42 +00:00
rts
*--------------------------------------
CS.RUN.SKTERR pha
>PUSHA
>PUSHBI 1
>LDYA L.MSG.SKTERR
>SYSCALL printf
pla
sec
rts
*--------------------------------------
CS.RUN.IOERR pha
>PUSHA
>PUSHBI 1
>LDYA L.MSG.IOERR
>SYSCALL printf
pla
sec
rts
*--------------------------------------
CS.RUN.USER >LDYA L.MSG.USER
>SYSCALL puts
lda #3
sec
rts
2018-07-24 16:00:24 +00:00
*--------------------------------------
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
*--------------------------------------
2018-09-03 06:01:07 +00:00
CS.QUIT >LDA.G hSocket
2018-07-24 16:00:24 +00:00
beq .1
2018-09-03 11:27:11 +00:00
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Close
2018-07-24 16:00:24 +00:00
2018-08-27 15:26:01 +00:00
.1 >LDA.G hBuf
beq .2
>SYSCALL freemem
.2 lda hLIBTCPIP
2018-07-24 16:00:24 +00:00
>SYSCALL UnloadLib
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
LIBTCPIP .AZ "libtcpip.o"
2018-08-27 15:26:01 +00:00
hLIBTCPIP .BS 1
2018-08-27 05:39:42 +00:00
MSG.IPKO .AZ "TCP/IP Not Loaded/Configured."
MSG.USAGE .AZ "Usage : TELNET <ip|host> [port]"
2018-07-24 16:00:24 +00:00
MSG.UNKNOWN .AZ "%s: Unknown host\r\n"
2018-09-11 21:15:15 +00:00
MSG.HOSTOK .AZ "Connecting to %d.%d.%d.%d:%D (%s)..."
2018-08-27 05:39:42 +00:00
MSG.SKTKO .AZ "Failed to Open Socket."
2018-08-27 15:26:01 +00:00
MSG.SKTOK .AZ "Connected."
2018-09-03 06:01:07 +00:00
MSG.SKTERR .AZ "Socket Error : $%h\r\n"
2018-09-09 08:11:42 +00:00
MSG.IOERR .AZ "I/O Error : $%h\r\n"
MSG.USER .AZ "User interrupt."
2018-08-27 15:26:01 +00:00
*--------------------------------------
2018-09-28 15:24:44 +00:00
Socket .DA #S.SOCKET.T.STREAM
2018-07-24 16:00:24 +00:00
.BS 1
2018-08-29 15:01:02 +00:00
.BS 1
2018-07-24 16:00:24 +00:00
.BS 1
Socket.Src.Addr .BS 4
Socket.Src.Port .DA 0 Dynamic
Socket.Dst.Addr .BS 4
Socket.Dst.Port .DA TCP.PORT.TELNET
*--------------------------------------
.DUMMY
.OR 0
DS.START
DST.IP .BS 4
2018-08-27 15:26:01 +00:00
hBuf .BS 1
2018-07-24 16:00:24 +00:00
hSocket .BS 1
TimeOut .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/BIN/TELNET.S
ASM