📄 telnet.asm
字号:
.nolist.include "param.inc".include "8019.inc".list .global telnet .global close_telnet .text .using 0telnet:;;send max. data_len bytes to serial line mov a,data_len+1 ;LSB mov workreg+3,a ;LSB mov workreg+2,data_len ;MSB orl a,data_len ;MSB jz sendTelnetDtatgetbuf: mov Timeout1,#ethtiming ;restart retry timer;; Retry1 = ETHRETRY1; mov Retry1,#ETHRETRY1 setb flag1retry ;; NEW data in packet, send delayed Ack LCALL pcode;; copy_r2s (buf, data_addr, sizeof(buf)); .pcode pr2s BYTE buf, @data_addr, #BYTE sizeofbuf ;copy telnet data;; data_addr += sizeof(buf); .pcode paddwi BYTE data_addr, #BYTE sizeofbuf .byte 0 mov R0,#buf-1tnxtin:inc R0 mov a,#(buf + sizeofbuf) xrl a,R0 jz tgetbuf mov a,data_len jnz tdata mov a,data_len+1 jnz tdata sjmp tallsendtdata: mov a,@r0 lcall xputchar jz ttimeout;; data_len--; mov a,data_len+1 ; LSB dec a mov data_len+1,a cjne A,#0xFF,sndx dec data_len ; MSBsndx:;; FULL DUPLEX MOV A,tcpWritePointer ; MSB anl A,#0xFC ; send data only ; if tcpWritePointer < 0x0400 jnz tnxtin;; FULL DUPLEX = jsou-li v bufferu nejaka data vysli je jnb rxint,tnxtin push ar0 lcall getchar lcall sendchar pop ar0 sjmp tnxtinttimeout:;; workreg -= data_len; mov r0,#workreg+3 clr C mov a,@r0 subb a,data_len+1 mov @r0,a dec r0 mov a,@r0 subb a,data_len mov @r0,atallsend:; Acknowledge only processed data;; tx_eth_pkt.pkt.ip.ipdata.tcp.tcpheader.Ack =;; rcvSeq + sendbytes; mov R7,workreg+3 ;LSB mov R6,workreg+2 ;MSB lcall AckBytessendTelnetDta: MOV A,tcpWritePointer ; MSB anl A,#0xFC ; send data only ; if tcpWritePointer < 0x0400 jnz tnodata;; jsou-li v bufferu nejaka data vysli je jnb rxint,tnodata lcall getchar lcall sendchar sjmp sendTelnetDtatnodata: retKillTelnetChar: lcall getcharclose_telnet: ;kill all chars in serial queue jb rxint,KillTelnetChar jnb xonxoff, KillT1 ;restart serial line clr flagtxoff clr xoffrq setb xonrq ;request send XONKillT1: ret;******************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -