; ; 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