aboutsummaryrefslogtreecommitdiff
path: root/src/uip_asm_output.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/uip_asm_output.s')
-rw-r--r--src/uip_asm_output.s5253
1 files changed, 5253 insertions, 0 deletions
diff --git a/src/uip_asm_output.s b/src/uip_asm_output.s
new file mode 100644
index 0000000..7f8c38c
--- /dev/null
+++ b/src/uip_asm_output.s
@@ -0,0 +1,5253 @@
+;
+; File generated by cc65 v 2.12.9
+;
+ .fopt compiler,"cc65 v 2.12.9"
+ .setcpu "6502"
+ .smart on
+ .autoimport on
+ .case on
+ .debuginfo off
+ .importzp sp, sreg, regsave, regbank, tmp1, ptr1, ptr2
+ .macpack longbranch
+ .import _resolv_appcall
+ .import _telnet_app
+ .export _uip_init
+ .export _uip_setipid
+ .export _uip_buf
+ .export _uip_listen
+ .export _uip_unlisten
+ .export _uip_connect
+ .export _uip_send
+ .export _uip_udp_new
+ .export _htons
+ .export _uip_appdata
+ .export _uip_len
+ .export _uip_conn
+ .export _uip_conns
+ .export _uip_acc32
+ .export _uip_udp_conn
+ .export _uip_udp_conns
+ .export _uip_flags
+ .export _uip_process
+ .export _uip_hostaddr
+ .export _uip_netmask
+ .export _uip_draddr
+ .export _uip_chksum
+ .export _uip_ipchksum
+ .export _uip_tcpchksum
+ .import _memcpy
+ .import _memset
+ .export _uip_ethaddr
+ .export _uip_sappdata
+ .export _uip_slen
+ .export _uip_listenports
+ .export _uip_add32
+
+.segment "DATA"
+
+_all_ones_addr:
+ .word $FFFF
+ .word $FFFF
+_all_zeroes_addr:
+ .word $0000
+ .word $0000
+_uip_ethaddr:
+ .byte $00
+ .byte $00
+ .byte $00
+ .byte $00
+ .byte $00
+ .byte $00
+
+.segment "BSS"
+
+_uip_hostaddr:
+ .res 4,$00
+_uip_draddr:
+ .res 4,$00
+_uip_netmask:
+ .res 4,$00
+_uip_buf:
+ .res 578,$00
+_uip_appdata:
+ .res 2,$00
+_uip_sappdata:
+ .res 2,$00
+_uip_len:
+ .res 2,$00
+_uip_slen:
+ .res 2,$00
+_uip_flags:
+ .res 1,$00
+_uip_conn:
+ .res 2,$00
+_uip_conns:
+ .res 35,$00
+_uip_listenports:
+ .res 2,$00
+_uip_udp_conn:
+ .res 2,$00
+_uip_udp_conns:
+ .res 11,$00
+_ipid:
+ .res 2,$00
+_iss:
+ .res 4,$00
+_lastport:
+ .res 2,$00
+_uip_acc32:
+ .res 4,$00
+_c:
+ .res 1,$00
+_opt:
+ .res 1,$00
+_tmp16:
+ .res 2,$00
+
+; ---------------------------------------------------------------
+; void __near__ uip_init (void)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_init: near
+
+.segment "CODE"
+
+;
+; for(c = 0; c < UIP_LISTENPORTS; ++c) {
+;
+ lda #$00
+ sta _c
+L00BF: lda _c
+ cmp #$01
+ bcs L00C0
+;
+; uip_listenports[c] = 0;
+;
+ ldx #$00
+ lda _c
+ jsr aslax1
+ clc
+ adc #<(_uip_listenports)
+ tay
+ txa
+ adc #>(_uip_listenports)
+ tax
+ tya
+ sta sreg
+ stx sreg+1
+ lda #$00
+ tay
+ sta (sreg),y
+ iny
+ sta (sreg),y
+;
+; for(c = 0; c < UIP_LISTENPORTS; ++c) {
+;
+ inc _c
+ jmp L00BF
+;
+; for(c = 0; c < UIP_CONNS; ++c) {
+;
+L00C0: lda #$00
+ sta _c
+L00CA: lda _c
+ cmp #$01
+ bcs L00CB
+;
+; uip_conns[c].tcpstateflags = UIP_CLOSED;
+;
+ lda _c
+ jsr pusha0
+ lda #$23
+ jsr tosmula0
+ clc
+ adc #<(_uip_conns)
+ tay
+ txa
+ adc #>(_uip_conns)
+ tax
+ tya
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$19
+ sta (sreg),y
+;
+; for(c = 0; c < UIP_CONNS; ++c) {
+;
+ inc _c
+ jmp L00CA
+;
+; lastport = 1024;
+;
+L00CB: ldx #$04
+ lda #$00
+ sta _lastport
+ stx _lastport+1
+;
+; for(c = 0; c < UIP_UDP_CONNS; ++c) {
+;
+ sta _c
+L00D7: lda _c
+ cmp #$01
+ bcs L00D8
+;
+; uip_udp_conns[c].lport = 0;
+;
+ lda _c
+ jsr pusha0
+ lda #$0B
+ jsr tosmula0
+ clc
+ adc #<(_uip_udp_conns)
+ tay
+ txa
+ adc #>(_uip_udp_conns)
+ tax
+ tya
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$04
+ sta (sreg),y
+ iny
+ sta (sreg),y
+;
+; for(c = 0; c < UIP_UDP_CONNS; ++c) {
+;
+ inc _c
+ jmp L00D7
+;
+; }
+;
+L00D8: rts
+
+.endproc
+
+; ---------------------------------------------------------------
+; void __near__ uip_setipid (unsigned int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_setipid: near
+
+.segment "CODE"
+
+;
+; void uip_setipid(u16_t id) { ipid = id; }
+;
+ jsr ldax0sp
+ sta _ipid
+ stx _ipid+1
+ jmp incsp2
+
+.endproc
+
+; ---------------------------------------------------------------
+; void __near__ uip_listen (unsigned int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_listen: near
+
+.segment "CODE"
+
+;
+; for(c = 0; c < UIP_LISTENPORTS; ++c) {
+;
+ lda #$00
+ sta _c
+L01AF: lda _c
+ cmp #$01
+ jcs incsp2
+;
+; if(uip_listenports[c] == 0) {
+;
+ ldx #$00
+ lda _c
+ jsr aslax1
+ clc
+ adc #<(_uip_listenports)
+ tay
+ txa
+ adc #>(_uip_listenports)
+ tax
+ tya
+ jsr ldaxi
+ cpx #$00
+ bne L01B1
+ cmp #$00
+ bne L01B1
+;
+; uip_listenports[c] = port;
+;
+ lda _c
+ jsr aslax1
+ clc
+ adc #<(_uip_listenports)
+ tay
+ txa
+ adc #>(_uip_listenports)
+ tax
+ tya
+ sta sreg
+ stx sreg+1
+ jsr ldax0sp
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; return;
+;
+ jmp incsp2
+;
+; for(c = 0; c < UIP_LISTENPORTS; ++c) {
+;
+L01B1: inc _c
+ jmp L01AF
+
+.endproc
+
+; ---------------------------------------------------------------
+; void __near__ uip_unlisten (unsigned int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_unlisten: near
+
+.segment "CODE"
+
+;
+; for(c = 0; c < UIP_LISTENPORTS; ++c) {
+;
+ lda #$00
+ sta _c
+L01A0: lda _c
+ cmp #$01
+ jcs incsp2
+;
+; if(uip_listenports[c] == port) {
+;
+ ldx #$00
+ lda _c
+ jsr aslax1
+ clc
+ adc #<(_uip_listenports)
+ tay
+ txa
+ adc #>(_uip_listenports)
+ tax
+ tya
+ jsr pushw
+ ldy #$03
+ jsr ldaxysp
+ jsr tosicmp
+ bne L01A2
+;
+; uip_listenports[c] = 0;
+;
+ ldx #$00
+ lda _c
+ jsr aslax1
+ clc
+ adc #<(_uip_listenports)
+ tay
+ txa
+ adc #>(_uip_listenports)
+ tax
+ tya
+ sta sreg
+ stx sreg+1
+ lda #$00
+ tay
+ sta (sreg),y
+ iny
+ sta (sreg),y
+;
+; return;
+;
+ jmp incsp2
+;
+; for(c = 0; c < UIP_LISTENPORTS; ++c) {
+;
+L01A2: inc _c
+ jmp L01A0
+
+.endproc
+
+; ---------------------------------------------------------------
+; __near__ struct uip_conn* __near__ uip_connect (__near__ unsigned int[2]*, unsigned int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_connect: near
+
+.segment "CODE"
+
+;
+; again:
+;
+ jsr decsp4
+;
+; ++lastport;
+;
+L00E3: inc _lastport
+ bne L00E5
+ inc _lastport+1
+;
+; if(lastport >= 32000) {
+;
+L00E5: ldx _lastport+1
+ cpx #$7D
+ bcc L00E6
+;
+; lastport = 4096;
+;
+ ldx #$10
+ lda #$00
+ sta _lastport
+ stx _lastport+1
+;
+; for(c = 0; c < UIP_CONNS; ++c) {
+;
+L00E6: lda #$00
+ sta _c
+L00EA: lda _c
+ cmp #$01
+ bcs L00EB
+;
+; conn = &uip_conns[c];
+;
+ lda _c
+ jsr pusha0
+ lda #$23
+ jsr tosmula0
+ clc
+ adc #<(_uip_conns)
+ tay
+ txa
+ adc #>(_uip_conns)
+ tax
+ tya
+ ldy #$02
+ jsr staxysp
+;
+; if(conn->tcpstateflags != UIP_CLOSED &&
+;
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ beq L00EC
+;
+; conn->lport == htons(lastport)) {
+;
+ ldy #$03
+ jsr ldaxysp
+ ldy #$05
+ jsr pushwidx
+ lda _lastport
+ ldx _lastport+1
+ jsr pushax
+ jsr _htons
+ jsr tosicmp
+ beq L00E3
+;
+; for(c = 0; c < UIP_CONNS; ++c) {
+;
+L00EC: inc _c
+ jmp L00EA
+;
+; conn = 0;
+;
+L00EB: ldx #$00
+ txa
+ ldy #$02
+ jsr staxysp
+;
+; for(c = 0; c < UIP_CONNS; ++c) {
+;
+ sta _c
+L00FC: lda _c
+ cmp #$01
+ bcs L00FD
+;
+; cconn = &uip_conns[c];
+;
+ lda _c
+ jsr pusha0
+ lda #$23
+ jsr tosmula0
+ clc
+ adc #<(_uip_conns)
+ tay
+ txa
+ adc #>(_uip_conns)
+ tax
+ tya
+ jsr stax0sp
+;
+; if(cconn->tcpstateflags == UIP_CLOSED) {
+;
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ bne L0107
+;
+; conn = cconn;
+;
+ jsr ldax0sp
+ ldy #$02
+ jsr staxysp
+;
+; break;
+;
+ jmp L00FD
+;
+; if(cconn->tcpstateflags == UIP_TIME_WAIT) {
+;
+L0107: jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ cmp #$07
+ bne L00FE
+;
+; if(conn == 0 ||
+;
+ ldy #$02
+ lda (sp),y
+ iny
+ ora (sp),y
+ beq L010E
+;
+; cconn->timer > conn->timer) {
+;
+ jsr ldax0sp
+ ldy #$1A
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ jsr pusha0
+ ldy #$05
+ jsr ldaxysp
+ ldy #$1A
+ sta ptr1
+ stx ptr1+1
+ ldx #$00
+ lda (ptr1),y
+ jsr tosicmp
+ beq L00FE
+ bcc L00FE
+;
+; conn = cconn;
+;
+L010E: jsr ldax0sp
+ ldy #$02
+ jsr staxysp
+;
+; for(c = 0; c < UIP_CONNS; ++c) {
+;
+L00FE: inc _c
+ jmp L00FC
+;
+; if(conn == 0) {
+;
+L00FD: ldy #$02
+ lda (sp),y
+ iny
+ ora (sp),y
+ bne L0113
+;
+; return 0;
+;
+ tax
+ jmp incsp8
+;
+; conn->tcpstateflags = UIP_SYN_SENT;
+;
+L0113: jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda #$02
+ ldy #$19
+ sta (sreg),y
+;
+; conn->snd_nxt[0] = iss[0];
+;
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda _iss
+ ldy #$0C
+ sta (sreg),y
+;
+; conn->snd_nxt[1] = iss[1];
+;
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda _iss+1
+ ldy #$0D
+ sta (sreg),y
+;
+; conn->snd_nxt[2] = iss[2];
+;
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda _iss+2
+ ldy #$0E
+ sta (sreg),y
+;
+; conn->snd_nxt[3] = iss[3];
+;
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda _iss+3
+ ldy #$0F
+ sta (sreg),y
+;
+; conn->initialmss = conn->mss = UIP_TCP_MSS;
+;
+ ldy #$05
+ jsr pushwysp
+ ldy #$07
+ jsr pushwysp
+ ldx #$00
+ lda #$78
+ ldy #$12
+ jsr staxspidx
+ ldy #$14
+ jsr staxspidx
+;
+; conn->len = 1; /* TCP length of the SYN is one. */
+;
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda #$01
+ ldy #$10
+ sta (sreg),y
+ iny
+ lda #$00
+ sta (sreg),y
+;
+; conn->nrtx = 0;
+;
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$1B
+ sta (sreg),y
+;
+; conn->timer = 1; /* Send the SYN next time around. */
+;
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda #$01
+ ldy #$1A
+ sta (sreg),y
+;
+; conn->rto = UIP_RTO;
+;
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda #$03
+ ldy #$18
+ sta (sreg),y
+;
+; conn->sa = 0;
+;
+ tay
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$16
+ sta (sreg),y
+;
+; conn->sv = 16; /* Initial value of the RTT variance. */
+;
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ lda #$10
+ ldy #$17
+ sta (sreg),y
+;
+; conn->lport = htons(lastport);
+;
+ ldy #$05
+ jsr pushwysp
+ lda _lastport
+ ldx _lastport+1
+ jsr pushax
+ jsr _htons
+ ldy #$04
+ jsr staxspidx
+;
+; conn->rport = rport;
+;
+ dey
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ ldy #$05
+ jsr ldaxysp
+ ldy #$06
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; uip_ipaddr_copy(&conn->ripaddr, ripaddr);
+;
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ ldy #$07
+ jsr ldaxysp
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ ldy #$03
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ ldy #$07
+ jsr ldaxysp
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; return conn;
+;
+ jsr ldaxysp
+;
+; }
+;
+ jmp incsp8
+
+.endproc
+
+; ---------------------------------------------------------------
+; void __near__ uip_send (__near__ const void*, int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_send: near
+
+.segment "CODE"
+
+;
+; if(len > 0) {
+;
+ jsr pushw0sp
+ lda #$01
+ jsr tosgea0
+ jeq incsp4
+;
+; uip_slen = len;
+;
+ jsr ldax0sp
+ sta _uip_slen
+ stx _uip_slen+1
+;
+; if(data != uip_sappdata) {
+;
+ ldy #$05
+ jsr pushwysp
+ lda _uip_sappdata
+ ldx _uip_sappdata+1
+ jsr tosicmp
+ jeq incsp4
+;
+; memcpy(uip_sappdata, (data), uip_slen);
+;
+ lda _uip_sappdata
+ ldx _uip_sappdata+1
+ jsr pushax
+ ldy #$07
+ jsr pushwysp
+ lda _uip_slen
+ ldx _uip_slen+1
+ jsr _memcpy
+;
+; }
+;
+ jmp incsp4
+
+.endproc
+
+; ---------------------------------------------------------------
+; __near__ struct uip_udp_conn* __near__ uip_udp_new (__near__ unsigned int[2]*, unsigned int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_udp_new: near
+
+.segment "CODE"
+
+;
+; again:
+;
+ jsr decsp2
+;
+; ++lastport;
+;
+L0151: inc _lastport
+ bne L0153
+ inc _lastport+1
+;
+; if(lastport >= 32000) {
+;
+L0153: ldx _lastport+1
+ cpx #$7D
+ bcc L0154
+;
+; lastport = 4096;
+;
+ ldx #$10
+ lda #$00
+ sta _lastport
+ stx _lastport+1
+;
+; for(c = 0; c < UIP_UDP_CONNS; ++c) {
+;
+L0154: lda #$00
+ sta _c
+L0158: lda _c
+ cmp #$01
+ bcs L0159
+;
+; if(uip_udp_conns[c].lport == htons(lastport)) {
+;
+ lda _c
+ jsr pusha0
+ lda #$0B
+ jsr tosmula0
+ clc
+ adc #<(_uip_udp_conns)
+ tay
+ txa
+ adc #>(_uip_udp_conns)
+ tax
+ tya
+ ldy #$05
+ jsr pushwidx
+ lda _lastport
+ ldx _lastport+1
+ jsr pushax
+ jsr _htons
+ jsr tosicmp
+;
+; goto again;
+;
+ beq L0151
+;
+; for(c = 0; c < UIP_UDP_CONNS; ++c) {
+;
+ inc _c
+ jmp L0158
+;
+; conn = 0;
+;
+L0159: ldx #$00
+ txa
+ jsr stax0sp
+;
+; for(c = 0; c < UIP_UDP_CONNS; ++c) {
+;
+ sta _c
+L0166: lda _c
+ cmp #$01
+ bcs L0167
+;
+; if(uip_udp_conns[c].lport == 0) {
+;
+ lda _c
+ jsr pusha0
+ lda #$0B
+ jsr tosmula0
+ clc
+ adc #<(_uip_udp_conns)
+ tay
+ txa
+ adc #>(_uip_udp_conns)
+ tax
+ tya
+ ldy #$05
+ jsr ldaxidx
+ cpx #$00
+ bne L0168
+ cmp #$00
+ bne L0168
+;
+; conn = &uip_udp_conns[c];
+;
+ lda _c
+ jsr pusha0
+ lda #$0B
+ jsr tosmula0
+ clc
+ adc #<(_uip_udp_conns)
+ tay
+ txa
+ adc #>(_uip_udp_conns)
+ tax
+ tya
+ jsr stax0sp
+;
+; break;
+;
+ jmp L0167
+;
+; for(c = 0; c < UIP_UDP_CONNS; ++c) {
+;
+L0168: inc _c
+ jmp L0166
+;
+; if(conn == 0) {
+;
+L0167: ldy #$00
+ lda (sp),y
+ iny
+ ora (sp),y
+ bne L0175
+;
+; return 0;
+;
+ tax
+ jmp incsp6
+;
+; conn->lport = HTONS(lastport);
+;
+L0175: jsr ldax0sp
+ sta ptr1
+ stx ptr1+1
+ ldx _lastport
+ stx sreg+1
+ ldx #$00
+ lda _lastport+1
+ sta sreg
+ txa
+ ora sreg+1
+ tax
+ lda sreg
+ ldy #$04
+ sta (ptr1),y
+ iny
+ txa
+ sta (ptr1),y
+;
+; conn->rport = rport;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ ldy #$03
+ jsr ldaxysp
+ ldy #$06
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; if(ripaddr == NULL) {
+;
+ ldy #$04
+ lda (sp),y
+ iny
+ ora (sp),y
+ bne L0184
+;
+; memset(conn->ripaddr, 0, sizeof(uip_ipaddr_t));
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$03
+L087D: sta (sreg),y
+ dey
+ bpl L087D
+;
+; } else {
+;
+ jmp L018E
+;
+; uip_ipaddr_copy(&conn->ripaddr, ripaddr);
+;
+L0184: jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ ldy #$05
+ jsr ldaxysp
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ ldy #$05
+ jsr ldaxysp
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; conn->ttl = UIP_TTL;
+;
+L018E: jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$40
+ ldy #$08
+ sta (sreg),y
+;
+; return conn;
+;
+ jsr ldax0sp
+;
+; }
+;
+ jmp incsp6
+
+.endproc
+
+; ---------------------------------------------------------------
+; unsigned int __near__ htons (unsigned int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _htons: near
+
+.segment "CODE"
+
+;
+; return HTONS(val);
+;
+ ldy #$00
+ lda (sp),y
+ tax
+ stx sreg+1
+ ldx #$00
+ iny
+ lda (sp),y
+ sta sreg
+ txa
+ ora sreg+1
+ tax
+ lda sreg
+;
+; }
+;
+ jmp incsp2
+
+.endproc
+
+; ---------------------------------------------------------------
+; void __near__ uip_process (unsigned char)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_process: near
+
+.segment "CODE"
+
+;
+; register struct uip_conn *uip_connr = uip_conn;
+;
+ lda _uip_conn
+ ldx _uip_conn+1
+ jsr pushax
+;
+; if(flag == UIP_UDP_SEND_CONN) {
+;
+ ldy #$02
+ lda (sp),y
+ cmp #$04
+;
+; goto udp_send;
+;
+ jeq L01D6
+;
+; uip_sappdata = uip_appdata = &uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN];
+;
+ lda #<(_uip_buf+40)
+ ldx #>(_uip_buf+40)
+ sta _uip_appdata
+ stx _uip_appdata+1
+ sta _uip_sappdata
+ stx _uip_sappdata+1
+;
+; if(flag == UIP_POLL_REQUEST) {
+;
+ lda (sp),y
+ cmp #$03
+ bne L01DC
+;
+; if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED &&
+;
+ jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ and #$0F
+ cmp #$03
+ jne L01EA
+;
+; !uip_outstanding(uip_connr)) {
+;
+ jsr ldax0sp
+ ldy #$11
+ jsr ldaxidx
+ stx tmp1
+ ora tmp1
+ jne L01EA
+;
+; uip_flags = UIP_POLL;
+;
+ lda #$08
+ sta _uip_flags
+;
+; goto appsend;
+;
+ jmp L0888
+;
+; } else if(flag == UIP_TIMER) {
+;
+L01DC: lda (sp),y
+ cmp #$02
+ jne L01EC
+;
+; if(++iss[3] == 0) {
+;
+ inc _iss+3
+ lda _iss+3
+ bne L01F4
+;
+; if(++iss[2] == 0) {
+;
+ inc _iss+2
+ lda _iss+2
+ bne L01F4
+;
+; if(++iss[1] == 0) {
+;
+ inc _iss+1
+ lda _iss+1
+ bne L01F4
+;
+; ++iss[0];
+;
+ inc _iss
+;
+; uip_len = 0;
+;
+L01F4: lda #$00
+ sta _uip_len
+ sta _uip_len+1
+;
+; uip_slen = 0;
+;
+ sta _uip_slen
+ sta _uip_slen+1
+;
+; if(uip_connr->tcpstateflags == UIP_TIME_WAIT ||
+;
+ jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ cmp #$07
+ beq L01FE
+;
+; uip_connr->tcpstateflags == UIP_FIN_WAIT_2) {
+;
+ jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ cmp #$05
+ bne L01FD
+;
+; ++(uip_connr->timer);
+;
+L01FE: jsr ldax0sp
+ sta ptr1
+ stx ptr1+1
+ ldy #$1A
+ lda #$01
+ clc
+ adc (ptr1),y
+ sta (ptr1),y
+;
+; if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) {
+;
+ jsr ldax0sp
+ ldy #$1A
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ cmp #$78
+ jne L01EA
+;
+; uip_connr->tcpstateflags = UIP_CLOSED;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$19
+ sta (sreg),y
+;
+; } else if(uip_connr->tcpstateflags != UIP_CLOSED) {
+;
+ jmp L01EA
+L01FD: jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ jeq L01EA
+;
+; if(uip_outstanding(uip_connr)) {
+;
+ jsr ldax0sp
+ ldy #$10
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ iny
+ ora (ptr1),y
+ jeq L0209
+;
+; if(uip_connr->timer-- == 0) {
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ ldy #$1A
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ pha
+ sec
+ sbc #$01
+ sta (sreg),y
+ pla
+ jne L01EA
+;
+; if(uip_connr->nrtx == UIP_MAXRTX ||
+;
+ jsr ldax0sp
+ ldy #$1B
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ cmp #$08
+ beq L0210
+;
+; ((uip_connr->tcpstateflags == UIP_SYN_SENT ||
+;
+ jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ cmp #$02
+ beq L0212
+;
+; uip_connr->tcpstateflags == UIP_SYN_RCVD) &&
+;
+ jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ cmp #$01
+ bne L020F
+;
+; uip_connr->nrtx == UIP_MAXSYNRTX)) {
+;
+L0212: jsr ldax0sp
+ ldy #$1B
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ cmp #$05
+ bne L020F
+;
+; uip_connr->tcpstateflags = UIP_CLOSED;
+;
+L0210: jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$19
+ sta (sreg),y
+;
+; uip_flags = UIP_TIMEDOUT;
+;
+ lda #$80
+ sta _uip_flags
+;
+; UIP_APPCALL();
+;
+ jsr _telnet_app
+;
+; BUF->flags = TCP_RST | TCP_ACK;
+;
+ lda #$14
+;
+; goto tcp_send_nodata;
+;
+ jmp L0889
+;
+; uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4?
+;
+L020F: jsr pushw0sp
+ jsr push3
+ ldy #$05
+ jsr ldaxysp
+ ldy #$1B
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ cmp #$05
+;
+; 4:
+;
+ bcc L0224
+ lda #$04
+;
+; uip_connr->nrtx);
+;
+ jmp L0226
+L0224: ldy #$05
+ jsr ldaxysp
+ ldy #$1B
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+L0226: jsr tosaslax
+ ldy #$1A
+ jsr staspidx
+;
+; ++(uip_connr->nrtx);
+;
+ jsr ldax0sp
+ sta ptr1
+ stx ptr1+1
+ ldy #$1B
+ lda #$01
+ clc
+ adc (ptr1),y
+ sta (ptr1),y
+;
+; switch(uip_connr->tcpstateflags & UIP_TS_MASK) {
+;
+ jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ and #$0F
+;
+; }
+;
+ cmp #$01
+ jeq L0230
+ cmp #$02
+ beq L0232
+ cmp #$03
+ beq L0239
+ cmp #$04
+ jeq L0244
+ cmp #$06
+ jeq L0244
+ cmp #$08
+ jeq L0244
+ jmp L01EA
+;
+; BUF->flags = 0;
+;
+L0232: lda #$00
+;
+; goto tcp_send_syn;
+;
+ jmp L088A
+;
+; uip_flags = UIP_REXMIT;
+;
+L0239: lda #$04
+ sta _uip_flags
+;
+; UIP_APPCALL();
+;
+ jsr _telnet_app
+;
+; goto apprexmit;
+;
+ jmp L023D
+;
+; } else if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) {
+;
+L0209: jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ and #$0F
+ cmp #$03
+ jne L01EA
+;
+; uip_flags = UIP_POLL;
+;
+ lda #$08
+ sta _uip_flags
+;
+; goto appsend;
+;
+ jmp L0888
+;
+; if(flag == UIP_UDP_TIMER) {
+;
+L01EC: lda (sp),y
+ cmp #$05
+ bne L024D
+;
+; if(uip_udp_conn->lport != 0) {
+;
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$05
+ jsr ldaxidx
+ cpx #$00
+ bne L0895
+ cmp #$00
+ jeq L01EA
+;
+; uip_conn = NULL;
+;
+L0895: lda #$00
+ sta _uip_conn
+ sta _uip_conn+1
+;
+; uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];
+;
+ lda #<(_uip_buf+28)
+ ldx #>(_uip_buf+28)
+ sta _uip_appdata
+ stx _uip_appdata+1
+ sta _uip_sappdata
+ stx _uip_sappdata+1
+;
+; uip_len = uip_slen = 0;
+;
+ lda #$00
+ sta _uip_slen
+ sta _uip_slen+1
+ sta _uip_len
+ sta _uip_len+1
+;
+; uip_flags = UIP_POLL;
+;
+ lda #$08
+ sta _uip_flags
+;
+; goto udp_send;
+;
+ jmp L088B
+;
+; if(BUF->vhl != 0x45) { /* IP version and header length. */
+;
+L024D: lda _uip_buf
+ cmp #$45
+;
+; goto drop;
+;
+ jne L01EA
+;
+; if((BUF->len[0] << 8) + BUF->len[1] <= uip_len) {
+;
+ ldx _uip_buf+2
+ lda #$00
+ clc
+ adc _uip_buf+3
+ bcc L087E
+ inx
+L087E: jsr pushax
+ lda _uip_len
+ ldx _uip_len+1
+ jsr tosicmp
+ beq L0891
+ jcs L01EA
+;
+; uip_len = (BUF->len[0] << 8) + BUF->len[1];
+;
+L0891: ldx _uip_buf+2
+ lda #$00
+ clc
+ adc _uip_buf+3
+ bcc L087F
+ inx
+L087F: sta _uip_len
+ stx _uip_len+1
+;
+; if((BUF->ipoffset[0] & 0x3f) != 0 ||
+;
+ lda _uip_buf+6
+ and #$3F
+ jne L01EA
+;
+; BUF->ipoffset[1] != 0) {
+;
+ lda _uip_buf+7
+ jne L01EA
+;
+; if(uip_ipaddr_cmp(uip_hostaddr, all_zeroes_addr)) {
+;
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ jsr pushw
+ lda #<(_all_zeroes_addr)
+ ldx #>(_all_zeroes_addr)
+ jsr ldaxi
+ jsr tosicmp
+ bne L0282
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ ldy #$03
+ jsr pushwidx
+ lda #<(_all_zeroes_addr)
+ ldx #>(_all_zeroes_addr)
+ ldy #$03
+ jsr ldaxidx
+ jsr tosicmp
+ beq L0290
+;
+; if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr)) {
+;
+L0282: lda #<(_uip_buf+16)
+ ldx #>(_uip_buf+16)
+ jsr pushw
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ jsr ldaxi
+ jsr tosicmp
+ bne L0299
+ lda #<(_uip_buf+16)
+ ldx #>(_uip_buf+16)
+ ldy #$03
+ jsr pushwidx
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ ldy #$03
+ jsr ldaxidx
+ jsr tosicmp
+ beq L0292
+L0299: lda #$00
+ jmp L02A0
+L0292: lda #$01
+L02A0: jsr bnega
+;
+; goto drop;
+;
+ jne L01EA
+;
+; checksum. */
+;
+L0290: jsr _uip_ipchksum
+ cpx #$FF
+ jne L01EA
+ cmp #$FF
+;
+; goto drop;
+;
+ jne L01EA
+;
+; processing. */
+;
+ lda _uip_buf+9
+ cmp #$06
+;
+; goto tcp_input;
+;
+ jeq L02A8
+;
+; if(BUF->proto == UIP_PROTO_UDP) {
+;
+ lda _uip_buf+9
+ cmp #$11
+;
+; goto udp_input;
+;
+ jeq L02AD
+;
+; here. */
+;
+ lda _uip_buf+9
+ cmp #$01
+;
+; goto drop;
+;
+ jne L01EA
+;
+; if(ICMPBUF->type != ICMP_ECHO) {
+;
+ lda _uip_buf+20
+ cmp #$08
+;
+; goto drop;
+;
+ jne L01EA
+;
+; ICMPBUF->type = ICMP_ECHO_REPLY;
+;
+ lda #$00
+ sta _uip_buf+20
+;
+; if(ICMPBUF->icmpchksum >= HTONS(0xffff - (ICMP_ECHO << 8))) {
+;
+ lda _uip_buf+22+1
+ cmp #$FF
+ bne L02C7
+ lda _uip_buf+22
+ cmp #$F7
+L02C7: bcc L02BA
+;
+; ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8) + 1;
+;
+ lda #$09
+;
+; } else {
+;
+ jmp L089F
+;
+; ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8);
+;
+L02BA: lda #$08
+L089F: clc
+ adc _uip_buf+22
+ sta _uip_buf+22
+ bcc L02E0
+ inc _uip_buf+22+1
+;
+; uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr);
+;
+L02E0: lda #<(_uip_buf+16)
+ sta sreg
+ lda #>(_uip_buf+16)
+ sta sreg+1
+ lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ lda #<(_uip_buf+16)
+ sta sreg
+ lda #>(_uip_buf+16)
+ sta sreg+1
+ lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+;
+ lda #<(_uip_buf+12)
+ sta sreg
+ lda #>(_uip_buf+12)
+ sta sreg+1
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ lda #<(_uip_buf+12)
+ sta sreg
+ lda #>(_uip_buf+12)
+ sta sreg+1
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; goto send;
+;
+ jmp L030D
+;
+; uip_len = uip_len - UIP_IPUDPH_LEN;
+;
+L02AD: lda _uip_len
+ ldx _uip_len+1
+ ldy #$1C
+ jsr decaxy
+ sta _uip_len
+ stx _uip_len+1
+;
+; for(uip_udp_conn = &uip_udp_conns[0];
+;
+ lda #<(_uip_udp_conns)
+ sta _uip_udp_conn
+ lda #>(_uip_udp_conns)
+ sta _uip_udp_conn+1
+;
+; uip_udp_conn < &uip_udp_conns[UIP_UDP_CONNS];
+;
+L0311: lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ jsr pushax
+ lda #<(_uip_udp_conns+11)
+ ldx #>(_uip_udp_conns+11)
+ jsr tosicmp
+ jcs L01EA
+;
+; if(uip_udp_conn->lport != 0 &&
+;
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$05
+ jsr ldaxidx
+ cpx #$00
+ bne L0896
+ cmp #$00
+ jeq L0313
+;
+; UDPBUF->destport == uip_udp_conn->lport &&
+;
+L0896: lda _uip_buf+22
+ ldx _uip_buf+22+1
+ jsr pushax
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$05
+ jsr ldaxidx
+ jsr tosicmp
+ jne L0313
+;
+; (uip_udp_conn->rport == 0 ||
+;
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$07
+ jsr ldaxidx
+ cpx #$00
+ bne L0897
+ cmp #$00
+ beq L0322
+;
+; UDPBUF->srcport == uip_udp_conn->rport) &&
+;
+L0897: lda _uip_buf+20
+ ldx _uip_buf+20+1
+ jsr pushax
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$07
+ jsr ldaxidx
+ jsr tosicmp
+ jne L0313
+;
+; (uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_zeroes_addr) ||
+;
+L0322: lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ jsr pushw
+ lda #<(_all_zeroes_addr)
+ ldx #>(_all_zeroes_addr)
+ jsr ldaxi
+ jsr tosicmp
+ bne L0885
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$03
+ jsr pushwidx
+ lda #<(_all_zeroes_addr)
+ ldx #>(_all_zeroes_addr)
+ ldy #$03
+ jsr ldaxidx
+ jsr tosicmp
+ beq L034F
+;
+; uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_ones_addr) ||
+;
+L0885: lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ jsr pushw
+ lda #<(_all_ones_addr)
+ ldx #>(_all_ones_addr)
+ jsr ldaxi
+ jsr tosicmp
+ bne L0886
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$03
+ jsr pushwidx
+ lda #<(_all_ones_addr)
+ ldx #>(_all_ones_addr)
+ ldy #$03
+ jsr ldaxidx
+ jsr tosicmp
+ beq L034F
+;
+; uip_ipaddr_cmp(BUF->srcipaddr, uip_udp_conn->ripaddr))) {
+;
+L0886: lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ jsr pushw
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ jsr ldaxi
+ jsr tosicmp
+ bne L0313
+ lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ ldy #$03
+ jsr pushwidx
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$03
+ jsr ldaxidx
+ jsr tosicmp
+ beq L034F
+;
+; ++uip_udp_conn) {
+;
+L0313: lda #$0B
+ clc
+ adc _uip_udp_conn
+ sta _uip_udp_conn
+ jcc L0311
+ inc _uip_udp_conn+1
+ jmp L0311
+;
+; uip_conn = NULL;
+;
+L034F: lda #$00
+ sta _uip_conn
+ sta _uip_conn+1
+;
+; uip_flags = UIP_NEWDATA;
+;
+ lda #$02
+ sta _uip_flags
+;
+; uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];
+;
+ lda #<(_uip_buf+28)
+ ldx #>(_uip_buf+28)
+ sta _uip_appdata
+ stx _uip_appdata+1
+ sta _uip_sappdata
+ stx _uip_sappdata+1
+;
+; uip_slen = 0;
+;
+ lda #$00
+ sta _uip_slen
+ sta _uip_slen+1
+;
+; UIP_UDP_APPCALL();
+;
+L088B: jsr _resolv_appcall
+;
+; if(uip_slen == 0) {
+;
+L01D6: lda _uip_slen
+ ora _uip_slen+1
+;
+; goto drop;
+;
+ jeq L01EA
+;
+; uip_len = uip_slen + UIP_IPUDPH_LEN;
+;
+ lda _uip_slen
+ ldx _uip_slen+1
+ ldy #$1C
+ jsr incaxy
+ sta _uip_len
+ stx _uip_len+1
+;
+; BUF->len[0] = (uip_len >> 8);
+;
+ lda _uip_len+1
+ sta _uip_buf+2
+;
+; BUF->len[1] = (uip_len & 0xff);
+;
+ lda _uip_len
+ sta _uip_buf+3
+;
+; BUF->ttl = uip_udp_conn->ttl;
+;
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$08
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_buf+8
+;
+; BUF->proto = UIP_PROTO_UDP;
+;
+ lda #$11
+ sta _uip_buf+9
+;
+; UDPBUF->udplen = HTONS(uip_slen + UIP_UDPH_LEN);
+;
+ lda _uip_slen
+ clc
+ adc #$08
+ tax
+ lda #$00
+ jsr pushax
+ lda _uip_slen
+ ldx _uip_slen+1
+ jsr incax8
+ txa
+ ldx #$00
+ jsr tosorax
+ sta _uip_buf+24
+ stx _uip_buf+24+1
+;
+; UDPBUF->udpchksum = 0;
+;
+ lda #$00
+ sta _uip_buf+26
+ sta _uip_buf+26+1
+;
+; BUF->srcport = uip_udp_conn->lport;
+;
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$05
+ jsr ldaxidx
+ sta _uip_buf+20
+ stx _uip_buf+20+1
+;
+; BUF->destport = uip_udp_conn->rport;
+;
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$07
+ jsr ldaxidx
+ sta _uip_buf+22
+ stx _uip_buf+22+1
+;
+; uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+;
+ lda #<(_uip_buf+12)
+ sta sreg
+ lda #>(_uip_buf+12)
+ sta sreg+1
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ lda #<(_uip_buf+12)
+ sta sreg
+ lda #>(_uip_buf+12)
+ sta sreg+1
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; uip_ipaddr_copy(BUF->destipaddr, uip_udp_conn->ripaddr);
+;
+ lda #<(_uip_buf+16)
+ sta sreg
+ lda #>(_uip_buf+16)
+ sta sreg+1
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ lda #<(_uip_buf+16)
+ sta sreg
+ lda #>(_uip_buf+16)
+ sta sreg+1
+ lda _uip_udp_conn
+ ldx _uip_udp_conn+1
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN];
+;
+ lda #<(_uip_buf+40)
+ sta _uip_appdata
+ lda #>(_uip_buf+40)
+ sta _uip_appdata+1
+;
+; goto ip_send_nolen;
+;
+ jmp L03B9
+;
+; checksum. */
+;
+L02A8: jsr _uip_tcpchksum
+ cpx #$FF
+ jne L01EA
+ cmp #$FF
+;
+; goto drop;
+;
+ jne L01EA
+;
+; for(uip_connr = &uip_conns[0]; uip_connr <= &uip_conns[UIP_CONNS - 1];
+;
+ lda #<(_uip_conns)
+ ldx #>(_uip_conns)
+ jsr stax0sp
+L03BD: jsr pushw0sp
+ lda #<(_uip_conns)
+ ldx #>(_uip_conns)
+ jsr tosicmp
+ beq L0892
+ bcs L03BE
+;
+; if(uip_connr->tcpstateflags != UIP_CLOSED &&
+;
+L0892: jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ beq L03BF
+;
+; BUF->destport == uip_connr->lport &&
+;
+ lda _uip_buf+22
+ ldx _uip_buf+22+1
+ jsr pushax
+ ldy #$03
+ jsr ldaxysp
+ ldy #$05
+ jsr ldaxidx
+ jsr tosicmp
+ bne L03BF
+;
+; BUF->srcport == uip_connr->rport &&
+;
+ lda _uip_buf+20
+ ldx _uip_buf+20+1
+ jsr pushax
+ ldy #$03
+ jsr ldaxysp
+ ldy #$07
+ jsr ldaxidx
+ jsr tosicmp
+ bne L03BF
+;
+; uip_ipaddr_cmp(BUF->srcipaddr, uip_connr->ripaddr)) {
+;
+ lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ jsr pushw
+ ldy #$03
+ jsr ldaxysp
+ jsr ldaxi
+ jsr tosicmp
+ bne L03BF
+ lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ ldy #$03
+ jsr pushwidx
+ ldy #$03
+ jsr ldaxysp
+ ldy #$03
+ jsr ldaxidx
+ jsr tosicmp
+ jeq L03DE
+;
+; ++uip_connr) {
+;
+L03BF: ldx #$00
+ lda #$23
+ jsr addeq0sp
+ jmp L03BD
+;
+; if((BUF->flags & TCP_CTL) != TCP_SYN) {
+;
+L03BE: lda _uip_buf+33
+ and #$3F
+ cmp #$02
+;
+; goto reset;
+;
+ bne L03E5
+;
+; tmp16 = BUF->destport;
+;
+ lda _uip_buf+22
+ sta _tmp16
+ lda _uip_buf+22+1
+ sta _tmp16+1
+;
+; for(c = 0; c < UIP_LISTENPORTS; ++c) {
+;
+ lda #$00
+ sta _c
+L03EA: lda _c
+ cmp #$01
+ bcs L03E5
+;
+; if(tmp16 == uip_listenports[c])
+;
+ lda _tmp16
+ ldx _tmp16+1
+ jsr pushax
+ ldx #$00
+ lda _c
+ jsr aslax1
+ clc
+ adc #<(_uip_listenports)
+ tay
+ txa
+ adc #>(_uip_listenports)
+ tax
+ tya
+ jsr ldaxi
+ jsr tosicmp
+;
+; goto found_listen;
+;
+ jeq L03F5
+;
+; for(c = 0; c < UIP_LISTENPORTS; ++c) {
+;
+ inc _c
+ jmp L03EA
+;
+; if(BUF->flags & TCP_RST) {
+;
+L03E5: lda _uip_buf+33
+ and #$04
+;
+; goto drop;
+;
+ jne L01EA
+;
+; BUF->flags = TCP_RST | TCP_ACK;
+;
+ lda #$14
+ sta _uip_buf+33
+;
+; uip_len = UIP_IPTCPH_LEN;
+;
+ ldx #$00
+ lda #$28
+ sta _uip_len
+ stx _uip_len+1
+;
+; BUF->tcpoffset = 5 << 4;
+;
+ lda #$50
+ sta _uip_buf+32
+;
+; c = BUF->seqno[3];
+;
+ lda _uip_buf+27
+ sta _c
+;
+; BUF->seqno[3] = BUF->ackno[3];
+;
+ lda _uip_buf+31
+ sta _uip_buf+27
+;
+; BUF->ackno[3] = c;
+;
+ lda _c
+ sta _uip_buf+31
+;
+; c = BUF->seqno[2];
+;
+ lda _uip_buf+26
+ sta _c
+;
+; BUF->seqno[2] = BUF->ackno[2];
+;
+ lda _uip_buf+30
+ sta _uip_buf+26
+;
+; BUF->ackno[2] = c;
+;
+ lda _c
+ sta _uip_buf+30
+;
+; c = BUF->seqno[1];
+;
+ lda _uip_buf+25
+ sta _c
+;
+; BUF->seqno[1] = BUF->ackno[1];
+;
+ lda _uip_buf+29
+ sta _uip_buf+25
+;
+; BUF->ackno[1] = c;
+;
+ lda _c
+ sta _uip_buf+29
+;
+; c = BUF->seqno[0];
+;
+ lda _uip_buf+24
+ sta _c
+;
+; BUF->seqno[0] = BUF->ackno[0];
+;
+ lda _uip_buf+28
+ sta _uip_buf+24
+;
+; BUF->ackno[0] = c;
+;
+ lda _c
+ sta _uip_buf+28
+;
+; if(++BUF->ackno[3] == 0) {
+;
+ inc _uip_buf+31
+ lda _uip_buf+31
+ bne L044D
+;
+; if(++BUF->ackno[2] == 0) {
+;
+ inc _uip_buf+30
+ lda _uip_buf+30
+ bne L044D
+;
+; if(++BUF->ackno[1] == 0) {
+;
+ inc _uip_buf+29
+ lda _uip_buf+29
+ bne L044D
+;
+; ++BUF->ackno[0];
+;
+ inc _uip_buf+28
+;
+; tmp16 = BUF->srcport;
+;
+L044D: lda _uip_buf+20
+ sta _tmp16
+ lda _uip_buf+20+1
+ sta _tmp16+1
+;
+; BUF->srcport = BUF->destport;
+;
+ lda _uip_buf+22
+ sta _uip_buf+20
+ lda _uip_buf+22+1
+ sta _uip_buf+20+1
+;
+; BUF->destport = tmp16;
+;
+ lda _tmp16
+ sta _uip_buf+22
+ lda _tmp16+1
+ sta _uip_buf+22+1
+;
+; uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr);
+;
+ lda #<(_uip_buf+16)
+ sta sreg
+ lda #>(_uip_buf+16)
+ sta sreg+1
+ lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ lda #<(_uip_buf+16)
+ sta sreg
+ lda #>(_uip_buf+16)
+ sta sreg+1
+ lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+;
+ lda #<(_uip_buf+12)
+ sta sreg
+ lda #>(_uip_buf+12)
+ sta sreg+1
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ lda #<(_uip_buf+12)
+ sta sreg
+ lda #>(_uip_buf+12)
+ sta sreg+1
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; goto tcp_send_noconn;
+;
+ jmp L049A
+;
+; uip_connr = 0;
+;
+L03F5: ldx #$00
+ txa
+ jsr stax0sp
+;
+; for(c = 0; c < UIP_CONNS; ++c) {
+;
+ sta _c
+L049D: lda _c
+ cmp #$01
+ jcs L049E
+;
+; if(uip_conns[c].tcpstateflags == UIP_CLOSED) {
+;
+ lda _c
+ jsr pusha0
+ lda #$23
+ jsr tosmula0
+ clc
+ adc #<(_uip_conns)
+ sta ptr1
+ txa
+ adc #>(_uip_conns)
+ sta ptr1+1
+ ldy #$19
+ lda (ptr1),y
+ bne L04A5
+;
+; uip_connr = &uip_conns[c];
+;
+ lda _c
+ jsr pusha0
+ lda #$23
+ jsr tosmula0
+ clc
+ adc #<(_uip_conns)
+ tay
+ txa
+ adc #>(_uip_conns)
+ tax
+ tya
+ jsr stax0sp
+;
+; break;
+;
+ jmp L049E
+;
+; if(uip_conns[c].tcpstateflags == UIP_TIME_WAIT) {
+;
+L04A5: lda _c
+ jsr pusha0
+ lda #$23
+ jsr tosmula0
+ clc
+ adc #<(_uip_conns)
+ sta ptr1
+ txa
+ adc #>(_uip_conns)
+ sta ptr1+1
+ ldy #$19
+ lda (ptr1),y
+ cmp #$07
+ bne L049F
+;
+; if(uip_connr == 0 ||
+;
+ ldy #$00
+ lda (sp),y
+ iny
+ ora (sp),y
+ beq L04AF
+;
+; uip_conns[c].timer > uip_connr->timer) {
+;
+ lda _c
+ jsr pusha0
+ lda #$23
+ jsr tosmula0
+ clc
+ adc #<(_uip_conns)
+ sta ptr1
+ txa
+ adc #>(_uip_conns)
+ sta ptr1+1
+ ldy #$1A
+ lda (ptr1),y
+ jsr pusha0
+ ldy #$03
+ jsr ldaxysp
+ ldy #$1A
+ sta ptr1
+ stx ptr1+1
+ ldx #$00
+ lda (ptr1),y
+ jsr tosicmp
+ beq L049F
+ bcc L049F
+;
+; uip_connr = &uip_conns[c];
+;
+L04AF: lda _c
+ jsr pusha0
+ lda #$23
+ jsr tosmula0
+ clc
+ adc #<(_uip_conns)
+ tay
+ txa
+ adc #>(_uip_conns)
+ tax
+ tya
+ jsr stax0sp
+;
+; for(c = 0; c < UIP_CONNS; ++c) {
+;
+L049F: inc _c
+ jmp L049D
+;
+; if(uip_connr == 0) {
+;
+L049E: ldy #$00
+ lda (sp),y
+ iny
+ ora (sp),y
+;
+; goto drop;
+;
+ jeq L01EA
+;
+; uip_conn = uip_connr;
+;
+ jsr ldax0sp
+ sta _uip_conn
+ stx _uip_conn+1
+;
+; uip_connr->rto = uip_connr->timer = UIP_RTO;
+;
+ jsr ldax0sp
+ sta ptr1
+ stx ptr1+1
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$03
+ ldy #$1A
+ sta (sreg),y
+ ldy #$18
+ sta (ptr1),y
+;
+; uip_connr->sa = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$16
+ sta (sreg),y
+;
+; uip_connr->sv = 4;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$04
+ ldy #$17
+ sta (sreg),y
+;
+; uip_connr->nrtx = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$1B
+ sta (sreg),y
+;
+; uip_connr->lport = BUF->destport;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_buf+22
+ ldx _uip_buf+22+1
+ ldy #$04
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; uip_connr->rport = BUF->srcport;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_buf+20
+ ldx _uip_buf+20+1
+ ldy #$06
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; uip_ipaddr_copy(uip_connr->ripaddr, BUF->srcipaddr);
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; uip_connr->tcpstateflags = UIP_SYN_RCVD;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$01
+ ldy #$19
+ sta (sreg),y
+;
+; uip_connr->snd_nxt[0] = iss[0];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _iss
+ ldy #$0C
+ sta (sreg),y
+;
+; uip_connr->snd_nxt[1] = iss[1];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _iss+1
+ ldy #$0D
+ sta (sreg),y
+;
+; uip_connr->snd_nxt[2] = iss[2];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _iss+2
+ ldy #$0E
+ sta (sreg),y
+;
+; uip_connr->snd_nxt[3] = iss[3];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _iss+3
+ ldy #$0F
+ sta (sreg),y
+;
+; uip_connr->len = 1;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$01
+ ldy #$10
+ sta (sreg),y
+ iny
+ lda #$00
+ sta (sreg),y
+;
+; uip_connr->rcv_nxt[3] = BUF->seqno[3];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_buf+27
+ ldy #$0B
+ sta (sreg),y
+;
+; uip_connr->rcv_nxt[2] = BUF->seqno[2];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_buf+26
+ ldy #$0A
+ sta (sreg),y
+;
+; uip_connr->rcv_nxt[1] = BUF->seqno[1];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_buf+25
+ ldy #$09
+ sta (sreg),y
+;
+; uip_connr->rcv_nxt[0] = BUF->seqno[0];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_buf+24
+ ldy #$08
+ sta (sreg),y
+;
+; uip_add_rcv_nxt(1);
+;
+ jsr push1
+ jsr _uip_add_rcv_nxt
+;
+; if((BUF->tcpoffset & 0xf0) > 0x50) {
+;
+ lda _uip_buf+32
+ and #$F0
+ cmp #$51
+ jcc L0230
+;
+; for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) {
+;
+ lda #$00
+L088C: sta _c
+L0514: lda _c
+ jsr pusha0
+ lda _uip_buf+32
+ jsr asrax4
+ jsr decax5
+ jsr aslax2
+ jsr tosicmp
+ jcs L0230
+;
+; opt = uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + c];
+;
+ ldx #$00
+ lda _c
+ ldy #$28
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ lda (ptr1),y
+ sta _opt
+;
+; if(opt == TCP_OPT_END) {
+;
+ lda _opt
+;
+; break;
+;
+ jeq L0230
+;
+; } else if(opt == TCP_OPT_NOOP) {
+;
+ lda _opt
+ cmp #$01
+ bne L0526
+;
+; ++c;
+;
+ inc _c
+;
+; } else if(opt == TCP_OPT_MSS &&
+;
+ jmp L0514
+L0526: lda _opt
+ cmp #$02
+ jne L052A
+;
+; uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) {
+;
+ ldx #$00
+ lda _c
+ ldy #$29
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ lda (ptr1),y
+ cmp #$04
+ bne L052A
+;
+; tmp16 = ((u16_t)uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) |
+;
+ ldx #$00
+ lda _c
+ ldy #$2A
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ lda (ptr1),y
+ tax
+ tya
+;
+; (u16_t)uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + 3 + c];
+;
+ jsr pushax
+ tax
+ lda _c
+ ldy #$2B
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ ldx #$00
+ lda (ptr1),y
+ jsr tosorax
+ sta _tmp16
+ stx _tmp16+1
+;
+; uip_connr->initialmss = uip_connr->mss =
+;
+ jsr pushw0sp
+ ldy #$05
+;
+; tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16;
+;
+ jsr pushwysp
+ lda _tmp16+1
+ cmp #$00
+ bne L053C
+ lda _tmp16
+ cmp #$79
+L053C: bcc L053D
+ ldx #$00
+ lda #$78
+ jmp L0541
+L053D: lda _tmp16
+ ldx _tmp16+1
+L0541: ldy #$12
+ jsr staxspidx
+ ldy #$14
+ jsr staxspidx
+;
+; break;
+;
+ jmp L0230
+;
+; if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) {
+;
+L052A: ldx #$00
+ lda _c
+ ldy #$29
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ lda (ptr1),y
+;
+; break;
+;
+ beq L0230
+;
+; c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c];
+;
+ ldx #$00
+ lda _c
+ ldy #$29
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ lda (ptr1),y
+ clc
+ adc _c
+;
+; }
+;
+ jmp L088C
+;
+; BUF->flags = TCP_ACK;
+;
+L0230: lda #$10
+L088A: sta _uip_buf+33
+;
+; BUF->flags |= TCP_SYN;
+;
+ ora #$02
+ sta _uip_buf+33
+;
+; BUF->optdata[0] = TCP_OPT_MSS;
+;
+ lda #$02
+ sta _uip_buf+40
+;
+; BUF->optdata[1] = TCP_OPT_MSS_LEN;
+;
+ lda #$04
+ sta _uip_buf+41
+;
+; BUF->optdata[2] = (UIP_TCP_MSS) / 256;
+;
+ lda #$00
+ sta _uip_buf+42
+;
+; BUF->optdata[3] = (UIP_TCP_MSS) & 255;
+;
+ lda #$78
+ sta _uip_buf+43
+;
+; uip_len = UIP_IPTCPH_LEN + TCP_OPT_MSS_LEN;
+;
+ ldx #$00
+ lda #$2C
+ sta _uip_len
+ stx _uip_len+1
+;
+; BUF->tcpoffset = ((UIP_TCPH_LEN + TCP_OPT_MSS_LEN) / 4) << 4;
+;
+ lda #$60
+;
+; goto tcp_send;
+;
+ jmp L088D
+;
+; uip_conn = uip_connr;
+;
+L03DE: jsr ldax0sp
+ sta _uip_conn
+ stx _uip_conn+1
+;
+; uip_flags = 0;
+;
+ lda #$00
+ sta _uip_flags
+;
+; if(BUF->flags & TCP_RST) {
+;
+ lda _uip_buf+33
+ and #$04
+ beq L057D
+;
+; uip_connr->tcpstateflags = UIP_CLOSED;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$19
+ sta (sreg),y
+;
+; uip_flags = UIP_ABORT;
+;
+ lda #$20
+ sta _uip_flags
+;
+; UIP_APPCALL();
+;
+ jsr _telnet_app
+;
+; goto drop;
+;
+ jmp L01EA
+;
+; c = (BUF->tcpoffset >> 4) << 2;
+;
+L057D: tax
+ lda _uip_buf+32
+ jsr asrax4
+ asl a
+ asl a
+ sta _c
+;
+; uip_len = uip_len - c - UIP_IPH_LEN;
+;
+ lda _uip_len
+ ldx _uip_len+1
+ jsr pushax
+ lda _c
+ jsr tossuba0
+ ldy #$14
+ jsr decaxy
+ sta _uip_len
+ stx _uip_len+1
+;
+; if(!(((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_SENT) &&
+;
+ jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ and #$0F
+ cmp #$02
+ bne L0593
+;
+; ((BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)))) {
+;
+ lda _uip_buf+33
+ and #$3F
+ cmp #$12
+ beq L058F
+L0593: lda #$00
+ jmp L059A
+L058F: lda #$01
+L059A: jsr bnega
+ jeq L058D
+;
+; if((uip_len > 0 || ((BUF->flags & (TCP_SYN | TCP_FIN)) != 0)) &&
+;
+ lda _uip_len
+ ora _uip_len+1
+ bne L059D
+ lda _uip_buf+33
+ and #$03
+ beq L058D
+;
+; (BUF->seqno[0] != uip_connr->rcv_nxt[0] ||
+;
+L059D: lda _uip_buf+24
+ jsr pusha0
+ ldy #$03
+ jsr ldaxysp
+ ldy #$08
+ sta ptr1
+ stx ptr1+1
+ ldx #$00
+ lda (ptr1),y
+ jsr tosicmp
+ jne L05BA
+;
+; BUF->seqno[1] != uip_connr->rcv_nxt[1] ||
+;
+ lda _uip_buf+25
+ jsr pusha0
+ ldy #$03
+ jsr ldaxysp
+ ldy #$09
+ sta ptr1
+ stx ptr1+1
+ ldx #$00
+ lda (ptr1),y
+ jsr tosicmp
+ jne L05BA
+;
+; BUF->seqno[2] != uip_connr->rcv_nxt[2] ||
+;
+ lda _uip_buf+26
+ jsr pusha0
+ ldy #$03
+ jsr ldaxysp
+ ldy #$0A
+ sta ptr1
+ stx ptr1+1
+ ldx #$00
+ lda (ptr1),y
+ jsr tosicmp
+ jne L05BA
+;
+; BUF->seqno[3] != uip_connr->rcv_nxt[3])) {
+;
+ lda _uip_buf+27
+ jsr pusha0
+ ldy #$03
+ jsr ldaxysp
+ ldy #$0B
+ sta ptr1
+ stx ptr1+1
+ ldx #$00
+ lda (ptr1),y
+ jsr tosicmp
+ jne L05BA
+;
+; if((BUF->flags & TCP_ACK) && uip_outstanding(uip_connr)) {
+;
+L058D: lda _uip_buf+33
+ and #$10
+ jeq L05C7
+ jsr ldax0sp
+ ldy #$10
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ iny
+ ora (ptr1),y
+ jeq L05C7
+;
+; uip_add32(uip_connr->snd_nxt, uip_connr->len);
+;
+ jsr ldax0sp
+ ldy #$0C
+ jsr incaxy
+ jsr pushax
+ ldy #$03
+ jsr ldaxysp
+ ldy #$11
+ jsr pushwidx
+ jsr _uip_add32
+;
+; if(BUF->ackno[0] == uip_acc32[0] &&
+;
+ lda _uip_buf+28
+ jsr pusha0
+ lda _uip_acc32
+ jsr tosicmp
+ jne L05C7
+;
+; BUF->ackno[1] == uip_acc32[1] &&
+;
+ lda _uip_buf+29
+ jsr pusha0
+ lda _uip_acc32+1
+ jsr tosicmp
+ jne L05C7
+;
+; BUF->ackno[2] == uip_acc32[2] &&
+;
+ lda _uip_buf+30
+ jsr pusha0
+ lda _uip_acc32+2
+ jsr tosicmp
+ jne L05C7
+;
+; BUF->ackno[3] == uip_acc32[3]) {
+;
+ lda _uip_buf+31
+ jsr pusha0
+ lda _uip_acc32+3
+ jsr tosicmp
+ jne L05C7
+;
+; uip_connr->snd_nxt[0] = uip_acc32[0];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_acc32
+ ldy #$0C
+ sta (sreg),y
+;
+; uip_connr->snd_nxt[1] = uip_acc32[1];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_acc32+1
+ ldy #$0D
+ sta (sreg),y
+;
+; uip_connr->snd_nxt[2] = uip_acc32[2];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_acc32+2
+ ldy #$0E
+ sta (sreg),y
+;
+; uip_connr->snd_nxt[3] = uip_acc32[3];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_acc32+3
+ ldy #$0F
+ sta (sreg),y
+;
+; if(uip_connr->nrtx == 0) {
+;
+ jsr ldax0sp
+ ldy #$1B
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ jne L05EB
+;
+; m = uip_connr->rto - uip_connr->timer;
+;
+ jsr decsp1
+ ldy #$02
+ jsr ldaxysp
+ ldy #$18
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ jsr pusha0
+ ldy #$04
+ jsr ldaxysp
+ ldy #$1A
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ jsr tossuba0
+ ldy #$00
+ sta (sp),y
+;
+; m = m - (uip_connr->sa >> 3);
+;
+ ldx #$00
+ lda (sp),y
+ bpl L05F1
+ dex
+L05F1: jsr pushax
+ ldy #$04
+ jsr ldaxysp
+ ldy #$16
+ sta ptr1
+ stx ptr1+1
+ ldx #$00
+ lda (ptr1),y
+ jsr asrax3
+ jsr tossubax
+ ldy #$00
+ sta (sp),y
+;
+; uip_connr->sa += m;
+;
+ ldy #$02
+ jsr ldaxysp
+ sta ptr2
+ stx ptr2+1
+ ldy #$16
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta sreg
+ ldy #$00
+ lda (sp),y
+ clc
+ adc sreg
+ ldy #$16
+ sta (ptr2),y
+;
+; if(m < 0) {
+;
+ ldy #$00
+ lda (sp),y
+ tax
+ bpl L05F6
+;
+; m = -m;
+;
+ ldx #$00
+ lda (sp),y
+ bpl L05FB
+ dex
+L05FB: jsr negax
+ sta (sp),y
+;
+; m = m - (uip_connr->sv >> 2);
+;
+L05F6: ldx #$00
+ lda (sp),y
+ bpl L05FE
+ dex
+L05FE: jsr pushax
+ ldy #$04
+ jsr ldaxysp
+ ldy #$17
+ sta ptr1
+ stx ptr1+1
+ ldx #$00
+ lda (ptr1),y
+ jsr asrax2
+ jsr tossubax
+ ldy #$00
+ sta (sp),y
+;
+; uip_connr->sv += m;
+;
+ ldy #$02
+ jsr ldaxysp
+ sta ptr2
+ stx ptr2+1
+ ldy #$17
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta sreg
+ ldy #$00
+ lda (sp),y
+ clc
+ adc sreg
+ ldy #$17
+ sta (ptr2),y
+;
+; uip_connr->rto = (uip_connr->sa >> 3) + uip_connr->sv;
+;
+ ldy #$04
+ jsr pushwysp
+ ldy #$04
+ jsr ldaxysp
+ ldy #$16
+ sta ptr1
+ stx ptr1+1
+ ldx #$00
+ lda (ptr1),y
+ jsr asrax3
+ sta sreg
+ ldy #$04
+ jsr ldaxysp
+ ldy #$17
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ clc
+ adc sreg
+ iny
+ jsr staspidx
+;
+; }
+;
+ jsr incsp1
+;
+; uip_flags = UIP_ACKDATA;
+;
+L05EB: lda #$01
+ sta _uip_flags
+;
+; uip_connr->timer = uip_connr->rto;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ jsr ldax0sp
+ ldy #$18
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ ldy #$1A
+ sta (sreg),y
+;
+; uip_connr->len = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$10
+ sta (sreg),y
+ iny
+ sta (sreg),y
+;
+; switch(uip_connr->tcpstateflags & UIP_TS_MASK) {
+;
+L05C7: jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ and #$0F
+;
+; goto drop;
+;
+ cmp #$01
+ beq L0610
+ cmp #$02
+ beq L0624
+ cmp #$03
+ jeq L0699
+ cmp #$04
+ jeq L0746
+ cmp #$05
+ jeq L076B
+ cmp #$06
+ jeq L0784
+ cmp #$07
+ jeq L05BA
+ cmp #$08
+ jeq L073D
+ jmp L01EA
+;
+; if(uip_flags & UIP_ACKDATA) {
+;
+L0610: lda _uip_flags
+ and #$01
+ jeq L01EA
+;
+; uip_connr->tcpstateflags = UIP_ESTABLISHED;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$03
+ ldy #$19
+ sta (sreg),y
+;
+; uip_flags = UIP_CONNECTED;
+;
+ lda #$40
+ sta _uip_flags
+;
+; uip_connr->len = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$10
+ sta (sreg),y
+ iny
+ sta (sreg),y
+;
+; if(uip_len > 0) {
+;
+ lda _uip_len
+ ora _uip_len+1
+ jeq L089D
+;
+; uip_flags |= UIP_NEWDATA;
+;
+ lda _uip_flags
+ ora #$02
+ sta _uip_flags
+;
+; uip_add_rcv_nxt(uip_len);
+;
+ lda _uip_len
+ ldx _uip_len+1
+ jsr pushax
+ jsr _uip_add_rcv_nxt
+;
+; goto appsend;
+;
+ jmp L089D
+;
+; if((uip_flags & UIP_ACKDATA) &&
+;
+L0624: lda _uip_flags
+ and #$01
+ jeq L0625
+;
+; (BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)) {
+;
+ lda _uip_buf+33
+ and #$3F
+ cmp #$12
+ jne L0625
+;
+; if((BUF->tcpoffset & 0xf0) > 0x50) {
+;
+ lda _uip_buf+32
+ and #$F0
+ cmp #$51
+ jcc L0636
+;
+; for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) {
+;
+ lda #$00
+L088E: sta _c
+L0635: lda _c
+ jsr pusha0
+ lda _uip_buf+32
+ jsr asrax4
+ jsr decax5
+ jsr aslax2
+ jsr tosicmp
+ jcs L0636
+;
+; opt = uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + c];
+;
+ ldx #$00
+ lda _c
+ ldy #$28
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ lda (ptr1),y
+ sta _opt
+;
+; if(opt == TCP_OPT_END) {
+;
+ lda _opt
+;
+; break;
+;
+ jeq L0636
+;
+; } else if(opt == TCP_OPT_NOOP) {
+;
+ lda _opt
+ cmp #$01
+ bne L0647
+;
+; ++c;
+;
+ inc _c
+;
+; } else if(opt == TCP_OPT_MSS &&
+;
+ jmp L0635
+L0647: lda _opt
+ cmp #$02
+ jne L064B
+;
+; uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) {
+;
+ ldx #$00
+ lda _c
+ ldy #$29
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ lda (ptr1),y
+ cmp #$04
+ bne L064B
+;
+; tmp16 = (uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) |
+;
+ ldx #$00
+ lda _c
+ ldy #$2A
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ lda (ptr1),y
+ tax
+ tya
+;
+; uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 3 + c];
+;
+ jsr pushax
+ tax
+ lda _c
+ ldy #$2B
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ ldx #$00
+ lda (ptr1),y
+ jsr tosorax
+ sta _tmp16
+ stx _tmp16+1
+;
+; uip_connr->mss = tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16;
+;
+ jsr pushw0sp
+ ldy #$05
+ jsr pushwysp
+ lda _tmp16+1
+ cmp #$00
+ bne L065D
+ lda _tmp16
+ cmp #$79
+L065D: bcc L065E
+ ldx #$00
+ lda #$78
+ jmp L0662
+L065E: lda _tmp16
+ ldx _tmp16+1
+L0662: ldy #$12
+ jsr staxspidx
+ ldy #$14
+ jsr staxspidx
+;
+; break;
+;
+ jmp L0636
+;
+; if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) {
+;
+L064B: ldx #$00
+ lda _c
+ ldy #$29
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ lda (ptr1),y
+;
+; break;
+;
+ beq L0636
+;
+; c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c];
+;
+ ldx #$00
+ lda _c
+ ldy #$29
+ jsr incaxy
+ clc
+ adc #<(_uip_buf)
+ sta ptr1
+ txa
+ adc #>(_uip_buf)
+ sta ptr1+1
+ ldy #$00
+ lda (ptr1),y
+ clc
+ adc _c
+;
+; }
+;
+ jmp L088E
+;
+; uip_connr->tcpstateflags = UIP_ESTABLISHED;
+;
+L0636: jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$03
+ ldy #$19
+ sta (sreg),y
+;
+; uip_connr->rcv_nxt[0] = BUF->seqno[0];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_buf+24
+ ldy #$08
+ sta (sreg),y
+;
+; uip_connr->rcv_nxt[1] = BUF->seqno[1];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_buf+25
+ ldy #$09
+ sta (sreg),y
+;
+; uip_connr->rcv_nxt[2] = BUF->seqno[2];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_buf+26
+ ldy #$0A
+ sta (sreg),y
+;
+; uip_connr->rcv_nxt[3] = BUF->seqno[3];
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_buf+27
+ ldy #$0B
+ sta (sreg),y
+;
+; uip_add_rcv_nxt(1);
+;
+ jsr push1
+ jsr _uip_add_rcv_nxt
+;
+; uip_flags = UIP_CONNECTED | UIP_NEWDATA;
+;
+ lda #$42
+ sta _uip_flags
+;
+; uip_connr->len = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$10
+ sta (sreg),y
+ iny
+ sta (sreg),y
+;
+; uip_len = 0;
+;
+ sta _uip_len
+ sta _uip_len+1
+;
+; goto appsend;
+;
+ jmp L089B
+;
+; uip_flags = UIP_ABORT;
+;
+L0625: lda #$20
+ sta _uip_flags
+;
+; UIP_APPCALL();
+;
+ jsr _telnet_app
+;
+; uip_conn->tcpstateflags = UIP_CLOSED;
+;
+ lda _uip_conn
+ sta sreg
+ lda _uip_conn+1
+ sta sreg+1
+ lda #$00
+ ldy #$19
+ sta (sreg),y
+;
+; goto reset;
+;
+ jmp L03E5
+;
+; if(BUF->flags & TCP_FIN && !(uip_connr->tcpstateflags & UIP_STOPPED)) {
+;
+L0699: lda _uip_buf+33
+ and #$01
+ beq L069A
+ jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ and #$10
+ bne L069A
+;
+; if(uip_outstanding(uip_connr)) {
+;
+ jsr ldax0sp
+ ldy #$10
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ iny
+ ora (ptr1),y
+;
+; goto drop;
+;
+ jne L01EA
+;
+; uip_add_rcv_nxt(1 + uip_len);
+;
+ lda _uip_len
+ ldx _uip_len+1
+ jsr incax1
+ jsr pushax
+ jsr _uip_add_rcv_nxt
+;
+; uip_flags |= UIP_CLOSE;
+;
+ lda _uip_flags
+ ora #$10
+ sta _uip_flags
+;
+; if(uip_len > 0) {
+;
+ lda _uip_len
+ ora _uip_len+1
+ beq L06A9
+;
+; uip_flags |= UIP_NEWDATA;
+;
+ lda _uip_flags
+ ora #$02
+ sta _uip_flags
+;
+; UIP_APPCALL();
+;
+L06A9: jsr _telnet_app
+;
+; uip_connr->len = 1;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$01
+ ldy #$10
+ sta (sreg),y
+ iny
+ lda #$00
+ sta (sreg),y
+;
+; uip_connr->tcpstateflags = UIP_LAST_ACK;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$08
+ ldy #$19
+ sta (sreg),y
+;
+; uip_connr->nrtx = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$1B
+ sta (sreg),y
+;
+; BUF->flags = TCP_FIN | TCP_ACK;
+;
+L0244: lda #$11
+;
+; goto tcp_send_nodata;
+;
+ jmp L0889
+;
+; if((BUF->flags & TCP_URG) != 0) {
+;
+L069A: lda _uip_buf+33
+ and #$20
+ beq L06B9
+;
+; uip_appdata = ((char *)uip_appdata) + ((BUF->urgp[0] << 8) | BUF->urgp[1]);
+;
+ lda _uip_appdata
+ sta ptr1
+ lda _uip_appdata+1
+ sta ptr1+1
+ ldx _uip_buf+38
+ stx sreg+1
+ ldx #$00
+ lda _uip_buf+39
+ sta sreg
+ txa
+ ora sreg+1
+ tax
+ lda sreg
+ clc
+ adc ptr1
+ sta ptr1
+ txa
+ adc ptr1+1
+ tax
+ lda ptr1
+ sta _uip_appdata
+ stx _uip_appdata+1
+;
+; uip_len -= (BUF->urgp[0] << 8) | BUF->urgp[1];
+;
+ ldx _uip_buf+38
+ stx sreg+1
+ ldx #$00
+ lda _uip_buf+39
+ sta sreg
+ txa
+ ora sreg+1
+ tax
+ lda sreg
+ sec
+ eor #$FF
+ adc _uip_len
+ sta _uip_len
+ txa
+ eor #$FF
+ adc _uip_len+1
+ sta _uip_len+1
+;
+; if(uip_len > 0 && !(uip_connr->tcpstateflags & UIP_STOPPED)) {
+;
+L06B9: lda _uip_len
+ ora _uip_len+1
+ beq L06D3
+ jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ and #$10
+ bne L06D3
+;
+; uip_flags |= UIP_NEWDATA;
+;
+ lda _uip_flags
+ ora #$02
+ sta _uip_flags
+;
+; uip_add_rcv_nxt(uip_len);
+;
+ lda _uip_len
+ ldx _uip_len+1
+ jsr pushax
+ jsr _uip_add_rcv_nxt
+;
+; tmp16 = ((u16_t)BUF->wnd[0] << 8) + (u16_t)BUF->wnd[1];
+;
+L06D3: ldx _uip_buf+34
+ lda #$00
+ clc
+ adc _uip_buf+35
+ bcc L0880
+ inx
+L0880: sta _tmp16
+ stx _tmp16+1
+;
+; if(tmp16 > uip_connr->initialmss ||
+;
+ jsr pushax
+ ldy #$03
+ jsr ldaxysp
+ ldy #$15
+ jsr ldaxidx
+ jsr tosicmp
+ beq L0894
+ bcs L06E7
+;
+; tmp16 == 0) {
+;
+L0894: lda _tmp16
+ ora _tmp16+1
+ bne L06E6
+;
+; tmp16 = uip_connr->initialmss;
+;
+L06E7: jsr ldax0sp
+ ldy #$15
+ jsr ldaxidx
+ sta _tmp16
+ stx _tmp16+1
+;
+; uip_connr->mss = tmp16;
+;
+L06E6: jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _tmp16
+ ldx _tmp16+1
+ ldy #$12
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; if(uip_flags & (UIP_NEWDATA | UIP_ACKDATA)) {
+;
+ lda _uip_flags
+ and #$03
+ jeq L01EA
+;
+; uip_slen = 0;
+;
+L089D: lda #$00
+L089B: sta _uip_slen
+ sta _uip_slen+1
+;
+; UIP_APPCALL();
+;
+L0888: jsr _telnet_app
+;
+; if(uip_flags & UIP_ABORT) {
+;
+ lda _uip_flags
+ and #$20
+ beq L06F4
+;
+; uip_slen = 0;
+;
+ lda #$00
+ sta _uip_slen
+ sta _uip_slen+1
+;
+; uip_connr->tcpstateflags = UIP_CLOSED;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$19
+ sta (sreg),y
+;
+; BUF->flags = TCP_RST | TCP_ACK;
+;
+ lda #$14
+;
+; goto tcp_send_nodata;
+;
+ jmp L0889
+;
+; if(uip_flags & UIP_CLOSE) {
+;
+L06F4: lda _uip_flags
+ and #$10
+ beq L06FE
+;
+; uip_slen = 0;
+;
+ lda #$00
+ sta _uip_slen
+ sta _uip_slen+1
+;
+; uip_connr->len = 1;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$01
+ ldy #$10
+ sta (sreg),y
+ iny
+ lda #$00
+ sta (sreg),y
+;
+; uip_connr->tcpstateflags = UIP_FIN_WAIT_1;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$04
+ ldy #$19
+ sta (sreg),y
+;
+; uip_connr->nrtx = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$1B
+ sta (sreg),y
+;
+; BUF->flags = TCP_FIN | TCP_ACK;
+;
+ lda #$11
+;
+; goto tcp_send_nodata;
+;
+ jmp L0889
+;
+; if(uip_slen > 0) {
+;
+L06FE: lda _uip_slen
+ ora _uip_slen+1
+ beq L071E
+;
+; if((uip_flags & UIP_ACKDATA) != 0) {
+;
+ lda _uip_flags
+ and #$01
+ beq L070F
+;
+; uip_connr->len = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$10
+ sta (sreg),y
+ iny
+ sta (sreg),y
+;
+; if(uip_connr->len == 0) {
+;
+L070F: jsr ldax0sp
+ ldy #$11
+ jsr ldaxidx
+ cpx #$00
+ bne L0715
+ cmp #$00
+ bne L0715
+;
+; if(uip_slen > uip_connr->mss) {
+;
+ lda _uip_slen
+ ldx _uip_slen+1
+ jsr pushax
+ ldy #$03
+ jsr ldaxysp
+ ldy #$13
+ jsr ldaxidx
+ jsr tosicmp
+ bcc L0718
+ beq L0718
+;
+; uip_slen = uip_connr->mss;
+;
+ jsr ldax0sp
+ ldy #$13
+ jsr ldaxidx
+ sta _uip_slen
+ stx _uip_slen+1
+;
+; uip_connr->len = uip_slen;
+;
+L0718: jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda _uip_slen
+ ldx _uip_slen+1
+ ldy #$10
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; } else {
+;
+ jmp L071E
+;
+; uip_slen = uip_connr->len;
+;
+L0715: jsr ldax0sp
+ ldy #$11
+ jsr ldaxidx
+ sta _uip_slen
+ stx _uip_slen+1
+;
+; uip_connr->nrtx = 0;
+;
+L071E: jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$1B
+ sta (sreg),y
+;
+; uip_appdata = uip_sappdata;
+;
+L023D: lda _uip_sappdata
+ sta _uip_appdata
+ lda _uip_sappdata+1
+ sta _uip_appdata+1
+;
+; if(uip_slen > 0 && uip_connr->len > 0) {
+;
+ lda _uip_slen
+ ora _uip_slen+1
+ beq L0725
+ jsr ldax0sp
+ ldy #$11
+ jsr ldaxidx
+ cpx #$00
+ bne L0726
+ cmp #$00
+ beq L0725
+;
+; uip_len = uip_connr->len + UIP_TCPIP_HLEN;
+;
+L0726: jsr ldax0sp
+ ldy #$11
+ jsr ldaxidx
+ ldy #$28
+ jsr incaxy
+ sta _uip_len
+ stx _uip_len+1
+;
+; BUF->flags = TCP_ACK | TCP_PSH;
+;
+ lda #$18
+ sta _uip_buf+33
+;
+; goto tcp_send_noopts;
+;
+ jmp L0732
+;
+; if(uip_flags & UIP_NEWDATA) {
+;
+L0725: lda _uip_flags
+ and #$02
+ jeq L01EA
+;
+; uip_len = UIP_TCPIP_HLEN;
+;
+ ldx #$00
+ lda #$28
+ sta _uip_len
+ stx _uip_len+1
+;
+; BUF->flags = TCP_ACK;
+;
+ lda #$10
+ sta _uip_buf+33
+;
+; goto tcp_send_noopts;
+;
+ jmp L0732
+;
+; if(uip_flags & UIP_ACKDATA) {
+;
+L073D: lda _uip_flags
+ and #$01
+ jeq L01EA
+;
+; uip_connr->tcpstateflags = UIP_CLOSED;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$19
+ sta (sreg),y
+;
+; uip_flags = UIP_CLOSE;
+;
+ lda #$10
+ sta _uip_flags
+;
+; UIP_APPCALL();
+;
+ jsr _telnet_app
+;
+; break;
+;
+ jmp L01EA
+;
+; if(uip_len > 0) {
+;
+L0746: lda _uip_len
+ ora _uip_len+1
+ beq L0747
+;
+; uip_add_rcv_nxt(uip_len);
+;
+ lda _uip_len
+ ldx _uip_len+1
+ jsr pushax
+ jsr _uip_add_rcv_nxt
+;
+; if(BUF->flags & TCP_FIN) {
+;
+L0747: lda _uip_buf+33
+ and #$01
+ beq L074C
+;
+; if(uip_flags & UIP_ACKDATA) {
+;
+ lda _uip_flags
+ and #$01
+ beq L0750
+;
+; uip_connr->tcpstateflags = UIP_TIME_WAIT;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$07
+ ldy #$19
+ sta (sreg),y
+;
+; uip_connr->timer = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$1A
+ sta (sreg),y
+;
+; uip_connr->len = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$10
+ sta (sreg),y
+ iny
+;
+; } else {
+;
+ jmp L088F
+;
+; uip_connr->tcpstateflags = UIP_CLOSING;
+;
+L0750: jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$06
+ ldy #$19
+L088F: sta (sreg),y
+;
+; uip_add_rcv_nxt(1);
+;
+ jsr push1
+ jsr _uip_add_rcv_nxt
+;
+; uip_flags = UIP_CLOSE;
+;
+ lda #$10
+ sta _uip_flags
+;
+; UIP_APPCALL();
+;
+ jsr _telnet_app
+;
+; goto tcp_send_ack;
+;
+ jmp L05BA
+;
+; } else if(uip_flags & UIP_ACKDATA) {
+;
+L074C: lda _uip_flags
+ and #$01
+ beq L0761
+;
+; uip_connr->tcpstateflags = UIP_FIN_WAIT_2;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$05
+ ldy #$19
+ sta (sreg),y
+;
+; uip_connr->len = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$10
+ sta (sreg),y
+ iny
+ sta (sreg),y
+;
+; goto drop;
+;
+ jmp L01EA
+;
+; if(uip_len > 0) {
+;
+L0761: lda _uip_len
+ ora _uip_len+1
+ jeq L01EA
+;
+; goto tcp_send_ack;
+;
+ jmp L05BA
+;
+; if(uip_len > 0) {
+;
+L076B: lda _uip_len
+ ora _uip_len+1
+ beq L076C
+;
+; uip_add_rcv_nxt(uip_len);
+;
+ lda _uip_len
+ ldx _uip_len+1
+ jsr pushax
+ jsr _uip_add_rcv_nxt
+;
+; if(BUF->flags & TCP_FIN) {
+;
+L076C: lda _uip_buf+33
+ and #$01
+ beq L0771
+;
+; uip_connr->tcpstateflags = UIP_TIME_WAIT;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$07
+ ldy #$19
+ sta (sreg),y
+;
+; uip_connr->timer = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$1A
+ sta (sreg),y
+;
+; uip_add_rcv_nxt(1);
+;
+ jsr push1
+ jsr _uip_add_rcv_nxt
+;
+; uip_flags = UIP_CLOSE;
+;
+ lda #$10
+ sta _uip_flags
+;
+; UIP_APPCALL();
+;
+ jsr _telnet_app
+;
+; goto tcp_send_ack;
+;
+ jmp L05BA
+;
+; if(uip_len > 0) {
+;
+L0771: lda _uip_len
+ ora _uip_len+1
+ jeq L01EA
+;
+; goto tcp_send_ack;
+;
+ jmp L05BA
+;
+; if(uip_flags & UIP_ACKDATA) {
+;
+L0784: lda _uip_flags
+ and #$01
+ jeq L01EA
+;
+; uip_connr->tcpstateflags = UIP_TIME_WAIT;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$07
+ ldy #$19
+ sta (sreg),y
+;
+; uip_connr->timer = 0;
+;
+ jsr ldax0sp
+ sta sreg
+ stx sreg+1
+ lda #$00
+ ldy #$1A
+ sta (sreg),y
+;
+; goto drop;
+;
+ jmp L01EA
+;
+; BUF->flags = TCP_ACK;
+;
+L05BA: lda #$10
+L0889: sta _uip_buf+33
+;
+; uip_len = UIP_IPTCPH_LEN;
+;
+ ldx #$00
+ lda #$28
+ sta _uip_len
+ stx _uip_len+1
+;
+; BUF->tcpoffset = (UIP_TCPH_LEN / 4) << 4;
+;
+L0732: lda #$50
+L088D: sta _uip_buf+32
+;
+; BUF->ackno[0] = uip_connr->rcv_nxt[0];
+;
+ jsr ldax0sp
+ ldy #$08
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_buf+28
+;
+; BUF->ackno[1] = uip_connr->rcv_nxt[1];
+;
+ jsr ldax0sp
+ ldy #$09
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_buf+29
+;
+; BUF->ackno[2] = uip_connr->rcv_nxt[2];
+;
+ jsr ldax0sp
+ ldy #$0A
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_buf+30
+;
+; BUF->ackno[3] = uip_connr->rcv_nxt[3];
+;
+ jsr ldax0sp
+ ldy #$0B
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_buf+31
+;
+; BUF->seqno[0] = uip_connr->snd_nxt[0];
+;
+ jsr ldax0sp
+ ldy #$0C
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_buf+24
+;
+; BUF->seqno[1] = uip_connr->snd_nxt[1];
+;
+ jsr ldax0sp
+ ldy #$0D
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_buf+25
+;
+; BUF->seqno[2] = uip_connr->snd_nxt[2];
+;
+ jsr ldax0sp
+ ldy #$0E
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_buf+26
+;
+; BUF->seqno[3] = uip_connr->snd_nxt[3];
+;
+ jsr ldax0sp
+ ldy #$0F
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_buf+27
+;
+; BUF->proto = UIP_PROTO_TCP;
+;
+ lda #$06
+ sta _uip_buf+9
+;
+; BUF->srcport = uip_connr->lport;
+;
+ jsr ldax0sp
+ ldy #$05
+ jsr ldaxidx
+ sta _uip_buf+20
+ stx _uip_buf+20+1
+;
+; BUF->destport = uip_connr->rport;
+;
+ jsr ldax0sp
+ ldy #$07
+ jsr ldaxidx
+ sta _uip_buf+22
+ stx _uip_buf+22+1
+;
+; uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr);
+;
+ lda #<(_uip_buf+12)
+ sta sreg
+ lda #>(_uip_buf+12)
+ sta sreg+1
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ lda #<(_uip_buf+12)
+ sta sreg
+ lda #>(_uip_buf+12)
+ sta sreg+1
+ lda #<(_uip_hostaddr)
+ ldx #>(_uip_hostaddr)
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; uip_ipaddr_copy(BUF->destipaddr, uip_connr->ripaddr);
+;
+ lda #<(_uip_buf+16)
+ sta sreg
+ lda #>(_uip_buf+16)
+ sta sreg+1
+ jsr ldax0sp
+ jsr ldaxi
+ ldy #$00
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+ lda #<(_uip_buf+16)
+ sta sreg
+ lda #>(_uip_buf+16)
+ sta sreg+1
+ jsr ldax0sp
+ ldy #$03
+ jsr ldaxidx
+ ldy #$02
+ sta (sreg),y
+ iny
+ txa
+ sta (sreg),y
+;
+; if(uip_connr->tcpstateflags & UIP_STOPPED) {
+;
+ jsr ldax0sp
+ ldy #$19
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ and #$10
+ beq L07FB
+;
+; BUF->wnd[0] = BUF->wnd[1] = 0;
+;
+ lda #$00
+ sta _uip_buf+35
+ sta _uip_buf+34
+;
+; } else {
+;
+ jmp L049A
+;
+; BUF->wnd[0] = ((UIP_RECEIVE_WINDOW) >> 8);
+;
+L07FB: sta _uip_buf+34
+;
+; BUF->wnd[1] = ((UIP_RECEIVE_WINDOW) & 0xff);
+;
+ lda #$78
+ sta _uip_buf+35
+;
+; BUF->ttl = UIP_TTL;
+;
+L049A: lda #$40
+ sta _uip_buf+8
+;
+; BUF->len[0] = (uip_len >> 8);
+;
+ lda _uip_len+1
+ sta _uip_buf+2
+;
+; BUF->len[1] = (uip_len & 0xff);
+;
+ lda _uip_len
+ sta _uip_buf+3
+;
+; BUF->urgp[0] = BUF->urgp[1] = 0;
+;
+ lda #$00
+ sta _uip_buf+39
+ sta _uip_buf+38
+;
+; BUF->tcpchksum = 0;
+;
+ sta _uip_buf+36
+ sta _uip_buf+36+1
+;
+; BUF->tcpchksum = ~(uip_tcpchksum());
+;
+ jsr _uip_tcpchksum
+ jsr complax
+ sta _uip_buf+36
+ stx _uip_buf+36+1
+;
+; BUF->vhl = 0x45;
+;
+L03B9: lda #$45
+ sta _uip_buf
+;
+; BUF->tos = 0;
+;
+ lda #$00
+ sta _uip_buf+1
+;
+; BUF->ipoffset[0] = BUF->ipoffset[1] = 0;
+;
+ sta _uip_buf+7
+ sta _uip_buf+6
+;
+; ++ipid;
+;
+ inc _ipid
+ bne L084D
+ inc _ipid+1
+;
+; BUF->ipid[0] = ipid >> 8;
+;
+L084D: lda _ipid+1
+ sta _uip_buf+4
+;
+; BUF->ipid[1] = ipid & 0xff;
+;
+ lda _ipid
+ sta _uip_buf+5
+;
+; BUF->ipchksum = 0;
+;
+ lda #$00
+ sta _uip_buf+10
+ sta _uip_buf+10+1
+;
+; BUF->ipchksum = ~(uip_ipchksum());
+;
+ jsr _uip_ipchksum
+ jsr complax
+ sta _uip_buf+10
+ stx _uip_buf+10+1
+;
+; uip_flags = 0;
+;
+L030D: lda #$00
+;
+; return;
+;
+ jmp L0890
+;
+; uip_len = 0;
+;
+L01EA: lda #$00
+ sta _uip_len
+ sta _uip_len+1
+;
+; uip_flags = 0;
+;
+L0890: sta _uip_flags
+;
+; }
+;
+ jmp incsp3
+
+.endproc
+
+; ---------------------------------------------------------------
+; unsigned int __near__ uip_chksum (__near__ unsigned int*, unsigned int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_chksum: near
+
+.segment "CODE"
+
+;
+; return htons(chksum(0, (u8_t *)data, len));
+;
+ jsr push0
+ ldy #$07
+ jsr pushwysp
+ ldy #$07
+ jsr pushwysp
+ jsr _chksum
+ jsr pushax
+ jsr _htons
+;
+; }
+;
+ jmp incsp4
+
+.endproc
+
+; ---------------------------------------------------------------
+; unsigned int __near__ uip_ipchksum (void)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_ipchksum: near
+
+.segment "CODE"
+
+;
+; sum = chksum(0, &uip_buf[UIP_LLH_LEN], UIP_IPH_LEN);
+;
+ jsr decsp2
+ jsr push0
+ lda #<(_uip_buf)
+ ldx #>(_uip_buf)
+ jsr pushax
+ lda #$14
+ jsr pusha0
+ jsr _chksum
+ jsr stax0sp
+;
+; return (sum == 0) ? 0xffff : htons(sum);
+;
+ cpx #$00
+ bne L0090
+ cmp #$00
+ bne L0090
+ dex
+ txa
+ jmp incsp2
+L0090: jsr pushw0sp
+ jsr _htons
+ jmp incsp2
+
+.endproc
+
+; ---------------------------------------------------------------
+; unsigned int __near__ uip_tcpchksum (void)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_tcpchksum: near
+
+.segment "CODE"
+
+;
+; return upper_layer_chksum(UIP_PROTO_TCP);
+;
+ lda #$06
+ jsr pusha
+ jmp _upper_layer_chksum
+
+.endproc
+
+; ---------------------------------------------------------------
+; void __near__ uip_add32 (__near__ unsigned char*, unsigned int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_add32: near
+
+.segment "CODE"
+
+;
+; uip_acc32[3] = op32[3] + (op16 & 0xff);
+;
+ ldy #$03
+ jsr ldaxysp
+ ldy #$03
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta sreg
+ ldy #$00
+ lda (sp),y
+ clc
+ adc sreg
+ sta _uip_acc32+3
+;
+; uip_acc32[2] = op32[2] + (op16 >> 8);
+;
+ ldy #$03
+ jsr ldaxysp
+ ldy #$02
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta sreg
+ dey
+ lda (sp),y
+ clc
+ adc sreg
+ sta _uip_acc32+2
+;
+; uip_acc32[1] = op32[1];
+;
+ ldy #$03
+ jsr ldaxysp
+ ldy #$01
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_acc32+1
+;
+; uip_acc32[0] = op32[0];
+;
+ ldy #$03
+ jsr ldaxysp
+ ldy #$00
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ sta _uip_acc32
+;
+; if(uip_acc32[2] < (op16 >> 8)) {
+;
+ lda _uip_acc32+2
+ jsr pusha0
+ ldy #$03
+ lda (sp),y
+ jsr tosicmp
+ bcs L0045
+;
+; ++uip_acc32[1];
+;
+ inc _uip_acc32+1
+;
+; if(uip_acc32[1] == 0) {
+;
+ lda _uip_acc32+1
+ bne L0045
+;
+; ++uip_acc32[0];
+;
+ inc _uip_acc32
+;
+; if(uip_acc32[3] < (op16 & 0xff)) {
+;
+L0045: lda _uip_acc32+3
+ jsr pusha0
+ ldy #$02
+ lda (sp),y
+ jsr tosicmp
+ jcs incsp4
+;
+; ++uip_acc32[2];
+;
+ inc _uip_acc32+2
+;
+; if(uip_acc32[2] == 0) {
+;
+ lda _uip_acc32+2
+ jne incsp4
+;
+; ++uip_acc32[1];
+;
+ inc _uip_acc32+1
+;
+; if(uip_acc32[1] == 0) {
+;
+ lda _uip_acc32+1
+ jne incsp4
+;
+; ++uip_acc32[0];
+;
+ inc _uip_acc32
+;
+; }
+;
+ jmp incsp4
+
+.endproc
+
+; ---------------------------------------------------------------
+; unsigned int __near__ chksum (unsigned int, __near__ const unsigned char*, unsigned int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _chksum: near
+
+.segment "CODE"
+
+;
+; dataptr = data;
+;
+ jsr decsp6
+ ldy #$09
+ jsr ldaxysp
+ ldy #$02
+ jsr staxysp
+;
+; last_byte = data + len - 1;
+;
+ ldy #$09
+ jsr ldaxysp
+ sta sreg
+ stx sreg+1
+ ldy #$07
+ jsr ldaxysp
+ clc
+ adc sreg
+ sta sreg
+ txa
+ adc sreg+1
+ tax
+ lda sreg
+ jsr decax1
+ jsr stax0sp
+;
+; while(dataptr < last_byte) { /* At least two more bytes */
+;
+L0065: ldy #$05
+ jsr pushwysp
+ ldy #$03
+ jsr ldaxysp
+ jsr tosicmp
+ bcs L0066
+;
+; t = (dataptr[0] << 8) + dataptr[1];
+;
+ ldy #$03
+ jsr ldaxysp
+ ldy #$00
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ tax
+ stx sreg+1
+ ldy #$03
+ jsr ldaxysp
+ ldy #$01
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ clc
+ adc #$00
+ ldx sreg+1
+ bcc L08A2
+ inx
+L08A2: ldy #$04
+ jsr staxysp
+;
+; sum += t;
+;
+ ldy #$0A
+ jsr addeqysp
+;
+; if(sum < t) {
+;
+ ldy #$0D
+ jsr pushwysp
+ ldy #$07
+ jsr ldaxysp
+ jsr tosicmp
+ bcs L006F
+;
+; sum++; /* carry */
+;
+ ldy #$0B
+ jsr ldaxysp
+ jsr incax1
+ ldy #$0A
+ jsr staxysp
+;
+; dataptr += 2;
+;
+L006F: ldy #$02
+ ldx #$00
+ tya
+ jsr addeqysp
+;
+; }
+;
+ jmp L0065
+;
+; if(dataptr == last_byte) {
+;
+L0066: ldy #$05
+ jsr pushwysp
+ ldy #$03
+ jsr ldaxysp
+ jsr tosicmp
+ bne L007C
+;
+; t = (dataptr[0] << 8) + 0;
+;
+ ldy #$03
+ jsr ldaxysp
+ ldy #$00
+ sta ptr1
+ stx ptr1+1
+ lda (ptr1),y
+ tax
+ tya
+ ldy #$04
+ jsr staxysp
+;
+; sum += t;
+;
+ ldy #$0A
+ jsr addeqysp
+;
+; if(sum < t) {
+;
+ ldy #$0D
+ jsr pushwysp
+ ldy #$07
+ jsr ldaxysp
+ jsr tosicmp
+ bcs L007C
+;
+; sum++; /* carry */
+;
+ ldy #$0B
+ jsr ldaxysp
+ jsr incax1
+ ldy #$0A
+ jsr staxysp
+;
+; return sum;
+;
+L007C: ldy #$0B
+ jsr ldaxysp
+;
+; }
+;
+ ldy #$0C
+ jmp addysp
+
+.endproc
+
+; ---------------------------------------------------------------
+; unsigned int __near__ upper_layer_chksum (unsigned char)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _upper_layer_chksum: near
+
+.segment "CODE"
+
+;
+; upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - UIP_IPH_LEN;
+;
+ jsr decsp4
+ ldx _uip_buf+2
+ lda #$00
+ clc
+ adc _uip_buf+3
+ bcc L08A3
+ inx
+L08A3: ldy #$14
+ jsr decaxy
+ ldy #$02
+ jsr staxysp
+;
+; sum = upper_layer_len + proto;
+;
+ sta sreg
+ stx sreg+1
+ ldy #$04
+ lda (sp),y
+ clc
+ adc sreg
+ ldx sreg+1
+ bcc L08A4
+ inx
+L08A4: jsr stax0sp
+;
+; sum = chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t));
+;
+ jsr pushax
+ lda #<(_uip_buf+12)
+ ldx #>(_uip_buf+12)
+ jsr pushax
+ lda #$08
+ jsr pusha0
+ jsr _chksum
+ jsr stax0sp
+;
+; sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN],
+;
+ jsr pushax
+ lda #<(_uip_buf+20)
+ ldx #>(_uip_buf+20)
+ jsr pushax
+;
+; upper_layer_len);
+;
+ ldy #$09
+ jsr pushwysp
+ jsr _chksum
+ jsr stax0sp
+;
+; return (sum == 0) ? 0xffff : htons(sum);
+;
+ cpx #$00
+ bne L00B5
+ cmp #$00
+ bne L00B5
+ dex
+ txa
+ jmp incsp5
+L00B5: jsr pushw0sp
+ jsr _htons
+ jmp incsp5
+
+.endproc
+
+; ---------------------------------------------------------------
+; void __near__ uip_add_rcv_nxt (unsigned int)
+; ---------------------------------------------------------------
+
+.segment "CODE"
+
+.proc _uip_add_rcv_nxt: near
+
+.segment "CODE"
+
+;
+; uip_add32(uip_conn->rcv_nxt, n);
+;
+ lda _uip_conn
+ ldx _uip_conn+1
+ jsr incax8
+ jsr pushax
+ ldy #$05
+ jsr pushwysp
+ jsr _uip_add32
+;
+; uip_conn->rcv_nxt[0] = uip_acc32[0];
+;
+ lda _uip_conn
+ sta sreg
+ lda _uip_conn+1
+ sta sreg+1
+ lda _uip_acc32
+ ldy #$08
+ sta (sreg),y
+;
+; uip_conn->rcv_nxt[1] = uip_acc32[1];
+;
+ lda _uip_conn
+ sta sreg
+ lda _uip_conn+1
+ sta sreg+1
+ lda _uip_acc32+1
+ iny
+ sta (sreg),y
+;
+; uip_conn->rcv_nxt[2] = uip_acc32[2];
+;
+ lda _uip_conn
+ sta sreg
+ lda _uip_conn+1
+ sta sreg+1
+ lda _uip_acc32+2
+ iny
+ sta (sreg),y
+;
+; uip_conn->rcv_nxt[3] = uip_acc32[3];
+;
+ lda _uip_conn
+ sta sreg
+ lda _uip_conn+1
+ sta sreg+1
+ lda _uip_acc32+3
+ iny
+ sta (sreg),y
+;
+; }
+;
+ jmp incsp2
+
+.endproc
+