.define EQU = PTR EQU $06 PTRH EQU $07 WRAPL EQU $08 WRAPH EQU $09 SIZEL EQU $0A SIZEH EQU $0B tx_copy: lda #0 ; always copying from 0x4000 sta PTR lda #$40 sta PTR+1 ldx #SIZEH ; number of 256-byte blocks beq copy_remainder ; if none, skip ahead ldy #0 copy256: lda (PTR),y sta $C0B7 ; change based on uthernet slot cmp WRAPH,x bne nowrap256 cmp WRAPL,y bne nowrap256 lda #$40 sta $C0B5 lda #$00 sta $C0B6 ; wrap tx buffer address to 0x4000 nowrap256: iny bne copy256 inc PTR+1 ; update 16-bit pointer dex ; finish a 256 byte block bne copy256 ldx #SIZEL copy_remainder: lda (PTR),y sta $C0B7 ; change based on uthernet slot cmp WRAPL,y bne nowrap_r lda #$40 sta $C0B5 lda #$00 sta $C0B6 ; wrap tx buffer address to 0x4000 nowrap_r: iny dex bne copy_remainder rts