DEVADR := $BA IOBVEC := $AE DISCUR := $CC TEMP_A_16 := $FB ; $FC RRCTRL := $DE00 RREXTD := $DE01 RRNET_ENABLE := $DE80 RRNET_DISABLE := $DE88 ERRMSG := $A43A VALFNC := $B7B5 FL2INT := $BC9B AXOUT := $BDCD READST := $FFB7 SETLFS := $FFBA SETNAM := $FFBD OPEN := $FFC0 CLOSE := $FFC3 CHKIN := $FFC6 CHKOUT := $FFC9 CLRCHN := $FFCC BASIN := $FFCF BSOUT := $FFD2 GETIN := $FFE4 PLOT := $FFF0 INPUTAREA := $0400+(8*40) SRVIP_ON_SCREEN := $0400+(8*40)+22 IP_ON_SCREEN := $0400+(10*40)+22 MAC_ON_SCREEN := $0400+(12*40)+22 FW_IP_ADDR := MyIpAdr SERVER_IP_ADDR := DstIpAdr FW_MAC_ADDR := MyMacAdr TEMP_IP_ADDR: .byte 0,0,0,0 setserverip: jsr print .byte $02,$04+4,$16,$00 rts setcurip: jsr print .byte $02,$06+4,$16,$00 rts setcurmac: jsr print .byte $02,$08+4,$16,$00 rts enteripandmac: jsr print .byte $02,$04+4,$01 .text "server ip addr:" .byte $02,$06+4,$01 .text "c64 ip address:" .byte $02,$08+4,$01 .text "c64 mac address:" .byte $00 jsr setserverip ldy #$00 all1a: lda SERVER_IP_ADDR,y jsr print_dec iny cpy #$04 bcs askpp2a lda #'.' jsr BSOUT jmp all1a askpp2a: jsr setcurip ldy #$00 all1: lda FW_IP_ADDR,y jsr print_dec iny cpy #$04 bcs askpp2 lda #'.' jsr BSOUT jmp all1 askpp2: jsr setcurmac ldy #$00 all2: lda FW_MAC_ADDR,y jsr hexbyte_out iny cpy #$06 bcs askpp3 lda #':' jsr BSOUT jmp all2 askpp3: again2: jsr setserverip lda #SRVIP_ON_SCREEN jsr input_ip bcs again2 lda TEMP_IP_ADDR+0 sta SERVER_IP_ADDR+0 lda TEMP_IP_ADDR+1 sta SERVER_IP_ADDR+1 lda TEMP_IP_ADDR+2 sta SERVER_IP_ADDR+2 lda TEMP_IP_ADDR+3 sta SERVER_IP_ADDR+3 again1: jsr setcurip lda #IP_ON_SCREEN jsr input_ip bcs again1 lda TEMP_IP_ADDR+0 sta FW_IP_ADDR+0 lda TEMP_IP_ADDR+1 sta FW_IP_ADDR+1 lda TEMP_IP_ADDR+2 sta FW_IP_ADDR+2 lda TEMP_IP_ADDR+3 sta FW_IP_ADDR+3 jsr input_mac lda #' ' ldx #0 clp1: sta INPUTAREA,x sta INPUTAREA+$100,x dex bne clp1 rts hexbyte_out: pha lsr lsr lsr lsr jsr hexnib_out pla and #$0f hexnib_out: .( ora #$30 cmp #$3a bcc ask1 adc #$06 ask1: jmp BSOUT .) print_dec: .( tax lda #$30 cpx #$64 bcs sk2 jsr BSOUT cpx #$0a bcs sk2 jsr BSOUT sk2: tya pha lda #$00 jsr AXOUT pla tay rts .) advance_temp_a_1: inc IOBVEC+0 bne skk1 inc IOBVEC+1 skk1: rts print: pla sta IOBVEC+0 pla sta IOBVEC+1 mainloop: ldy #$00 jsr advance_temp_a_1 lda (IOBVEC),y bne evaluate lda IOBVEC+1 pha lda IOBVEC+0 pha rts evaluate: cmp #$01 ; CTRL-A number char: print number of chars bne norle jsr advance_temp_a_1 lda (IOBVEC),y tax jsr advance_temp_a_1 lda (IOBVEC),y loopout: jsr BSOUT dex bne loopout beq mainloop norle: cmp #$02 ; CTRL-B line column: position cursor bne nopos jsr advance_temp_a_1 lda (IOBVEC),y tax jsr advance_temp_a_1 lda (IOBVEC),y tay clc jsr PLOT jmp mainloop nopos: jsr BSOUT jmp mainloop ; always true input_find_non_number: ldy #$00 alp1: lda ($22),y cmp #$30 bcc ask1 cmp #$3A bcs ask1 iny bne alp1 ask1: tya rts input_string_to_ax: ; convert input to 16-bit value jsr VALFNC jsr FL2INT ldx $64 lda $65 rts input_skip_spaces: lda #$20 ldy #$00 alp3 cmp ($22),y bne ask4 inc $22 bne ask2 inc $23 ask2: bne alp3 ask4: lda $22 ldx $23 rts move_input_vector: tax inx txa clc adc $22 sta $22 bcc ask5 inc $23 ask5: rts input_ip: pha txa pha .( lda #$00 sta DISCUR aloop: jsr GETIN beq aloop sta IOBVEC ldy $D3 lda ($D1),y and #$7f sta ($D1),y lda IOBVEC cmp #$0d beq done cmp #$14 ; backspace bne sk3 lda #$9d ; same as crsr<- sta IOBVEC sk3: cmp #$1d ; crsr-> beq ok cmp #$9d ; crsr<- beq ok cmp #'0' bcc aloop cmp #'9'+1 bcs aloop ok: jsr BSOUT ldy $D3 cpy #$16 bcs sk4 ldy #$16 sk4: cpy #$24 bcc sk5 ldy #$24 sk5: sty $D3 lda ($D1),y cmp #'.' bne aloop lda IOBVEC cmp #$9d beq sk6 lda #$1d sk6: jsr BSOUT jmp aloop done: lda #$01 sta DISCUR ;lda #IP_ON_SCREEN pla sta $23 pla sta $22 jsr input_skip_spaces jsr input_find_non_number pha jsr input_string_to_ax sta TEMP_IP_ADDR+0 pla cpx #$00 bne inputerror jsr move_input_vector jsr input_skip_spaces jsr input_find_non_number pha jsr input_string_to_ax sta TEMP_IP_ADDR+1 pla cpx #$00 bne @inputerror jsr move_input_vector jsr input_skip_spaces jsr input_find_non_number pha jsr input_string_to_ax sta TEMP_IP_ADDR+2 pla cpx #$00 bne inputerror jsr move_input_vector jsr input_skip_spaces jsr input_find_non_number jsr input_string_to_ax sta TEMP_IP_ADDR+3 cpx #$00 bne inputerror clc rts inputerror: sec rts .) input_mac: .( jsr setcurmac ldy #$22 sty $D3 lda #$00 sta DISCUR aloop: jsr GETIN beq aloop sta IOBVEC ldy $D3 lda ($D1),y and #$7f sta ($D1),y lda IOBVEC cmp #$0d beq done cmp #$14 ; backspace bne sk7 lda #$9d ; same as crsr<- sta IOBVEC sk7: cmp #$1d ; crsr-> beq ok cmp #$9d ; crsr<- beq ok cmp #'a' bcc sk8 cmp #'f'+1 bcc ok sk8: cmp #'0' bcc aloop cmp #'9'+1 bcs aloop ok: jsr BSOUT ldy $D3 cpy #$16 bcs sk9 ldy #$16 sk9: cpy #$26 bcc sk10 ldy #$26 sk10: sty $D3 lda ($D1),y cmp #':' bne aloop lda IOBVEC cmp #$9d beq sk11 lda #$1d sk11: jsr BSOUT jmp aloop done: lda #$01 sta DISCUR ldx #$00 ldy #$16 hexaloop: lda ($D1),y iny jsr screentohexnibble asl asl asl asl sta IOBVEC lda ($D1),y iny iny jsr screentohexnibble ora IOBVEC sta FW_MAC_ADDR,x inx cpx #$06 bcc hexaloop rts .) screentohexnibble: cmp #'0' bcc sk12 and #$0f rts sk12 ;clc because of cmp adc #$09 rts