From 2973d0c78e9b8eed3c5af239927c6bd36af64604 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Wed, 13 Mar 2019 02:50:42 -0400 Subject: initial commit --- src/uip_asm_output.s | 5253 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 5253 insertions(+) create mode 100644 src/uip_asm_output.s (limited to 'src/uip_asm_output.s') 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 + -- cgit v1.2.3