From 0732315db8fa3d1de157e2321c9e1c959a6a285b Mon Sep 17 00:00:00 2001 From: jonnosan Date: Fri, 10 Dec 2010 13:12:18 +0000 Subject: [PATCH] more refactoring to accomodate w5100 driver git-svn-id: http://svn.code.sf.net/p/netboot65/code@289 93682198-c243-4bdb-bd91-e943c89aac3b --- client/basic/Makefile | 9 +- client/basic/bails.d64 | Bin 174848 -> 174848 bytes client/basic/bails.s | 9 +- client/basic/kipperbas.d64 | Bin 174848 -> 174848 bytes client/basic/kipperbas.s | 4 +- client/carts/Makefile | 23 ++-- client/drivers/Makefile | 11 +- client/drivers/c64timer.s | 1 - client/drivers/cs8900a.s | 32 ++---- client/drivers/rr-net.s | 4 +- client/drivers/uthernet.s | 4 +- client/drivers/w5100.i | 213 ++++++++++++++++++++++++++++++++++++ client/drivers/w5100.s | 169 ++++++++++++++++++++++++++++ client/examples/Makefile | 14 +-- client/inc/commonprint.i | 8 +- client/ip65/Makefile | 10 +- client/ip65/eth.s | 18 ++- client/kipperterm2/Makefile | 7 +- client/test/Makefile | 193 ++++++++++++++++++-------------- client/test/test_wiznet.s | 153 ++++++++++++++++++++++++++ 20 files changed, 713 insertions(+), 169 deletions(-) create mode 100644 client/drivers/w5100.i create mode 100644 client/drivers/w5100.s create mode 100644 client/test/test_wiznet.s diff --git a/client/basic/Makefile b/client/basic/Makefile index 6e6ddab..e676dab 100644 --- a/client/basic/Makefile +++ b/client/basic/Makefile @@ -11,11 +11,8 @@ INCFILES=\ ../inc/kipper_constants.i\ ../inc/version.i\ -#IP65LIB=../ip65/ip65.lib IP65LIB=../ip65/ip65_tcp.lib -#IP65TCPLIB=../ip65/ip65_tcp.lib - -C64PROGLIB=../drivers/c64prog.lib +C64RRNETLIB=../drivers/c64rrnet.lib all: ip65 kipperbas.d64 bails.d64 @@ -25,8 +22,8 @@ ip65: %.o: %.s $(INCFILES) $(AS) $(AFLAGS) $< -%.prg: %.o $(IP65LIB) $(C64PROGLIB) $(INCFILES) ../cfg/kipperbas.cfg - $(LD) -m $*.map -vm -C ../cfg/kipperbas.cfg -o $*.prg $(AFLAGS) $< $(IP65LIB) $(C64PROGLIB) +%.prg: %.o $(IP65LIB) $(C64RRNETLIB) $(INCFILES) ../cfg/kipperbas.cfg + $(LD) -m $*.map -vm -C ../cfg/kipperbas.cfg -o $*.prg $(AFLAGS) $< $(IP65LIB) $(C64RRNETLIB) bails.d64: bails.prg diff --git a/client/basic/bails.d64 b/client/basic/bails.d64 index 5996533807749911c3a55b7203bfc6b48da8d15e..e3bee185af49173a306424327d5c0394e9dea83a 100644 GIT binary patch delta 3442 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 delta 350 zcmWlUOD{uF6osu_kG6_))kKVmflve!kBEe{iBe5N#F&9U&|yd3ucCK()?*;0IR+wa zIxv=+5D}4d>~CD|Np|uj-`XqLJN4~Px$}(IkbF%S%OR}z7+S}NC{Q-w*uyBXw23Ku z1Q}+wuxgK@!pb(<3uB0a(H%UAs-xI&M0qK@hCb?Xbg`TG6y>Mv8Cg#~fjAQ<$cqY4 z_Kj?yoEkP#Pnz(+giVw)I8a0yf1)hvFk+0KLyKyrj-ZFVhjYh*eD;bIs5d%3{?}?oFqba&74T^Z>_WdBc26 sV9wK*eBr_ka$@-?d9&fCo<|2eZ}C%DL?}=kT*jM~R<&zM+$E*|A6vd~TmS$7 diff --git a/client/basic/bails.s b/client/basic/bails.s index 69babfc..647b0d2 100644 --- a/client/basic/bails.s +++ b/client/basic/bails.s @@ -77,7 +77,7 @@ crunched_line = $0200 ;Input buffer .import dhcp_server .import cfg_mac .import cfg_mac_default -.import cs_driver_name +.import eth_driver_name .import get_key_if_available .import timer_read .import native_to_ascii @@ -216,10 +216,9 @@ install_new_vectors_loop: .byte "NO RR-NET FOUND - UNINSTALLING",0 @init_ok: - lda CHAIN_FLAG - jsr $A644 ;do a "NEW" - jmp $A474 ;"READY" prompt +; jsr $A644 ;do a "NEW" +; jmp $A474 ;"READY" prompt rts ;so BASIC will LOAD & RUN INDEX.BAS welcome_banner: @@ -714,7 +713,7 @@ ipcfg_keyword: ldax #interface_type jsr print - ldax #cs_driver_name + ldax #eth_driver_name jsr print jsr print_cr diff --git a/client/basic/kipperbas.d64 b/client/basic/kipperbas.d64 index 96de627d7d2ea259aa15aa313bb067f9e45d37fb..42f5edebd9ceb72a976447389c5e45ea21ae6ab4 100644 GIT binary patch delta 3826 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
    =q^(2`bZl->Yc=Q` zHJaHpsOsj?bu{VZTzsn(23=V~3o*O(Ccb-MjEt zz=gGS?--(xiRjWTh^{r0wRNccE?cx2F3pd?P&2f^Yz=^r_v+9Rf}JStF8nLTVKR|a zJDNV-<}_{wt(z|1zs1G-tH?ukG?f8so9t)-V~ZiG9oZAza<`jyMCynn)uXBAG(PC| z{@$F%cW6IP)ipI21mq>IyAT zs^Pg#Tdc`Q=4n*+aly#Ou7?I@sk?;WLOnsI*N0aAk_}wO6 zJ#O+Bf=aKI>u)tdFnXF|^;_OJEcgnw;Su%+S{P1S+7TMrK4|HzW?E#y9oSYMzNt>~ z8qhrq;B9F@cX#ADkM@D5qesA(9(%MeESh{YQRtTEX;cs_^1UX8G4n^%94!E#+MTvI zxM))pF`nLf)A&tLOKt^qgf1D+63q2mLZgl0T8v;1Lx*Yy>uR=UO#VedQkMI=mD=E8 z=7TY;+?TEDA>r&?O>c&LpPi@abu@gQVgL={9H?j(6zL>TxQS|71l6=ig+Zol@n)%$ zK?hopzPW|xDf|B=Z5^u6e0OL=g_>`gHk41;IyA$|ZEhi1PP8r4mH_QU5}=vDzHN2O z+uXnCNkH^&b7NmQIq!rUFVl!NbS!ciF$ea!hxLEGm@K5on@ruO+;mr@2!R$C?s~H9 z_IlkgYqq%IHV9Wh5VK8a(D3}#y%}(lWT)nBG*7S0!3#!MfSI9bsLE7DUF3h>6Q%f2Ng7;r0MOIQ|O*KKue(B&!L2|JV|V z+JvfN;7$m?sR+}IW-*stB(oXKo4jm|`i|7ENeAAQ;Kx-+lej5s$ogiKoHb?5InCry z3-IV<-~uZ)1YX3d;iRQzCx4K9n#DErL37WB52+37eFYDMmt?nfR) OXC8T!Iasonjr$*{eTQxU diff --git a/client/basic/kipperbas.s b/client/basic/kipperbas.s index d6334df..d7c2441 100644 --- a/client/basic/kipperbas.s +++ b/client/basic/kipperbas.s @@ -80,7 +80,7 @@ crunched_line = $0200 ;Input buffer .import dhcp_server .import cfg_mac .import cfg_mac_default -.import cs_driver_name +.import eth_driver_name .importzp tftp_filename .import tftp_ip .import tftp_download @@ -727,7 +727,7 @@ ipcfg_keyword: ldax #interface_type jsr print - ldax #cs_driver_name + ldax #eth_driver_name jsr print jsr print_cr diff --git a/client/carts/Makefile b/client/carts/Makefile index edc0750..7237ab0 100644 --- a/client/carts/Makefile +++ b/client/carts/Makefile @@ -15,8 +15,7 @@ IP65LIB=../ip65/ip65.lib IP65TCPLIB=../ip65/ip65_tcp.lib -C64PROGLIB=../drivers/c64prog.lib -#C64NB65LIB=../drivers/c64nb65.lib +C64RRNETLIB=../drivers/c64rrnet.lib all: kipperkart.bin kipperkart_rr.bin netboot.bin kipperterm.bin kipperkart.prg kipperterm.prg kipperterm_rr.bin kippergo.bin kipperkart.prg kippergo.prg kippergo_rr.bin kipperdisk.d64 @@ -41,21 +40,21 @@ kipperterm.prg: kipperterm.bin c64_cart_ram_header.prg kippergo.prg: kippergo.bin c64_cart_ram_header.prg cat c64_cart_ram_header.prg kippergo.bin > kippergo.prg -%.prg: %.o $(IP65LIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64prg.cfg - $(LD) -m $*.map -vm -C ../cfg/c64prg.cfg -o $*.prg $(AFLAGS) $< $(IP65LIB) $(C64PROGLIB) +%.prg: %.o $(IP65LIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m $*.map -vm -C ../cfg/c64prg.cfg -o $*.prg $(AFLAGS) $< $(IP65LIB) $(C64RRNETLIB) -netboot.bin: netboot.o $(IP65LIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64_8kcart.cfg - $(LD) -m netboot.map -vm -C ../cfg/c64_8kcart.cfg -o $@ $< $(IP65LIB) $(C64PROGLIB) +netboot.bin: netboot.o $(IP65LIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64_8kcart.cfg + $(LD) -m netboot.map -vm -C ../cfg/c64_8kcart.cfg -o $@ $< $(IP65LIB) $(C64RRNETLIB) ruby fix_cart.rb $@ 8192 -kipperkart.bin: kipperkart.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64_16kcart.cfg - $(LD) -m kipperkart.map -vm -C ../cfg/c64_16kcart.cfg -o $@ $< $(IP65TCPLIB) $(C64PROGLIB) +kipperkart.bin: kipperkart.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64_16kcart.cfg + $(LD) -m kipperkart.map -vm -C ../cfg/c64_16kcart.cfg -o $@ $< $(IP65TCPLIB) $(C64RRNETLIB) ruby fix_cart.rb $@ 16384 ruby set_ip_config.rb $@ mac auto ruby dupe_cart.rb kipperkart.bin kipperkart_29c040.bin 32 -kipperterm.bin: kipperterm.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64_16kcart.cfg - $(LD) -m kipperterm.map -vm -C ../cfg/c64_16kcart.cfg -o $@ $< $(IP65TCPLIB) $(C64PROGLIB) +kipperterm.bin: kipperterm.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64_16kcart.cfg + $(LD) -m kipperterm.map -vm -C ../cfg/c64_16kcart.cfg -o $@ $< $(IP65TCPLIB) $(C64RRNETLIB) ruby fix_cart.rb $@ 16384 ruby dupe_cart.rb kipperterm.bin kipperterm_29c040.bin 32 @@ -65,8 +64,8 @@ kipperterm_rr.bin: kipperterm.bin ruby fix_cart.rb $@ 32768 -kippergo.bin: kippergo.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64_16kcart.cfg - $(LD) -m kippergo.map -vm -C ../cfg/c64_16kcart.cfg -o $@ $< $(IP65TCPLIB) $(C64PROGLIB) +kippergo.bin: kippergo.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64_16kcart.cfg + $(LD) -m kippergo.map -vm -C ../cfg/c64_16kcart.cfg -o $@ $< $(IP65TCPLIB) $(C64RRNETLIB) ruby fix_cart.rb $@ 16384 ruby dupe_cart.rb kippergo.bin kippergo_29c040.bin 32 diff --git a/client/drivers/Makefile b/client/drivers/Makefile index b401116..1f17bcb 100644 --- a/client/drivers/Makefile +++ b/client/drivers/Makefile @@ -13,8 +13,8 @@ AFLAGS= DRIVERS=\ apple2prog.lib \ - c64prog.lib \ -# c64nb65.lib \ + c64rrnet.lib \ + c64wiznet.lib \ all: $(DRIVERS) @@ -23,16 +23,13 @@ all: $(DRIVERS) apple2prog.lib: a2print.o uthernet.o a2timer.o a2kernal.o a2input.o a2charconv.o cs8900a.o ar65 a $@ $^ -c64prog.lib: c64print.o rr-net.o c64timer.o c64kernal.o c64inputs.o c64_disk_access.o c64charconv.o c64_vt100.o cs8900a.o +c64rrnet.lib: c64print.o rr-net.o c64timer.o c64kernal.o c64inputs.o c64_disk_access.o c64charconv.o c64_vt100.o cs8900a.o ar65 a $@ $^ -c64wiznet.lib: c64print.o wiznet.o c64timer.o c64kernal.o c64inputs.o c64_disk_access.o c64charconv.o c64_vt100.o +c64wiznet.lib: w5100.o c64print.o c64timer.o c64kernal.o c64inputs.o c64_disk_access.o c64charconv.o c64_vt100.o ar65 a $@ $^ - -#c64nb65.lib: c64print.o rr-net.o c64timer_nb65.o c64kernal.o c64inputs.o c64_disk_access.o c64charconv.o - # ar65 a $@ $^ diff --git a/client/drivers/c64timer.s b/client/drivers/c64timer.s index 37049e5..b1919e4 100644 --- a/client/drivers/c64timer.s +++ b/client/drivers/c64timer.s @@ -5,7 +5,6 @@ .include "../inc/common.i" - .export timer_init .export timer_read diff --git a/client/drivers/cs8900a.s b/client/drivers/cs8900a.s index 0bd314e..cfddf23 100644 --- a/client/drivers/cs8900a.s +++ b/client/drivers/cs8900a.s @@ -15,15 +15,15 @@ .export eth_rx .export eth_tx - .export eth_inp - .export eth_inp_len - .export eth_outp - .export eth_outp_len + .import eth_inp + .import eth_inp_len + .import eth_outp + .import eth_outp_len - .exportzp eth_dest - .exportzp eth_src - .exportzp eth_type - .exportzp eth_data + .importzp eth_dest + .importzp eth_src + .importzp eth_type + .importzp eth_data .import cs_init .import cs_packet_page @@ -49,21 +49,7 @@ eth_packet: .res 2 - .bss - -; input and output buffers -eth_inp_len: .res 2 ; input packet length -eth_inp: .res 1518 ; space for input packet -eth_outp_len: .res 2 ; output packet length -eth_outp: .res 1518 ; space for output packet - -; ethernet packet offsets -eth_dest = 0 ; offset of destination mac address in an ethernet packet -eth_src = 6 ; offset of source address in an ethernet packet -eth_type = 12 ; offset of packet type in an ethernet packet -eth_data = 14 ; offset of packet data in an ethernet packet - - + .code ;initialize the ethernet adaptor diff --git a/client/drivers/rr-net.s b/client/drivers/rr-net.s index 11dd36d..8e21a99 100644 --- a/client/drivers/rr-net.s +++ b/client/drivers/rr-net.s @@ -8,7 +8,7 @@ .export cs_rxtx_data .export cs_tx_cmd .export cs_tx_len - .export cs_driver_name + .export eth_driver_name rr_ctl = $de01 ;address of 'control' port on Retro-Replay cs_packet_page = $de02 ;address of 'packet page' port on RR-Net @@ -30,7 +30,7 @@ cs_init: rts .rodata -cs_driver_name: +eth_driver_name: .asciiz "RR-NET" diff --git a/client/drivers/uthernet.s b/client/drivers/uthernet.s index b56492f..8bd9b6b 100644 --- a/client/drivers/uthernet.s +++ b/client/drivers/uthernet.s @@ -9,7 +9,7 @@ .export cs_rxtx_data .export cs_tx_cmd .export cs_tx_len - .export cs_driver_name + .export eth_driver_name cs_rxtx_data = $c0b0 ;address of 'recieve/transmit data' port on Uthernet cs_tx_cmd = $c0b4;address of 'transmit command' port on Uthernet @@ -25,7 +25,7 @@ cs_init: rts .rodata -cs_driver_name: +eth_driver_name: .byte "UTHERNET",0 diff --git a/client/drivers/w5100.i b/client/drivers/w5100.i new file mode 100644 index 0000000..cf562b6 --- /dev/null +++ b/client/drivers/w5100.i @@ -0,0 +1,213 @@ + +W5100_MR = $0000 ;Mode Register + +W5100_GAR0 = $0001 ;Gateway Address Byte 0 +W5100_GAR1 = $0002 ;Gateway Address Byte 1 +W5100_GAR2 = $0003 ;Gateway Address Byte 2 +W5100_GAR3 = $0004 ;Gateway Address Byte 3 + +W5100_SUBR0 = $0005 ;Subnet Mask Address 0 +W5100_SUBR1 = $0006 ;Subnet Mask Address 1 +W5100_SUBR2 = $0007 ;Subnet Mask Address 2 +W5100_SUBR3 = $0008 ;Subnet Mask Address 3 + +W5100_SHAR0 = $0009 ;Local MAC Address 0 +W5100_SHAR1 = $000A ;Local MAC Address 1 +W5100_SHAR2 = $000B ;Local MAC Address 2 +W5100_SHAR3 = $000C ;Local MAC Address 3 +W5100_SHAR4 = $000D ;Local MAC Address 4 +W5100_SHAR5 = $000E ;Local MAC Address 5 + +W5100_SIPR0 = $000F ;Source IP Address 0 +W5100_SIPR1 = $0010 ;Source IP Address 0 +W5100_SIPR2 = $0011 ;Source IP Address 0 +W5100_SIPR3 = $0012 ;Source IP Address 0 + +W5100_IR = $0015 ;Interrupt +W5100_IMR = $0016 ;Interrupt Mask + +W5100_RTR0 = $0017 ;Retry Time High Byte +W5100_RTR1 = $0018 ;Retry Time Low Byte + +W5100_RCR = $0019 ;Retry Count + +W5100_RMSR = $001A ;RX Memory Size (per socket) +W5100_TMSR = $001B ;TX Memory Size (per socket) + +W5100_PATR0 = $001C ;PPPoE Auth Type High +W5100_PART1 = $001D ;PPPoE Auth Type Low + +W5100_PTIMER = $0028 ;PPP LCP Request Timer +W5100_PMAGIC = $0029 ;PPP LCP Magic Number + +W5100_UIPR0 = $002A ;Unreachable IP Address 0 +W5100_UIPR1 = $002B ;Unreachable IP Address 1 +W5100_UIPR2 = $002C ;Unreachable IP Address 2 +W5100_UIPR3 = $002D ;Unreachable IP Address 3 + +W5100_UPORT0 = $002E ;Unreachable Port High +W5100_UPORT1 = $002F ;Unreachable Port Low + + +;Socket Registers +W5100_S0_BASE = $0400 ;Base for socket 0 +W5100_S0_MR = $0400 ;Socket 0 Mode +W5100_S0_CR = $0401 ;Socket 0 Command +W5100_S0_IR = $0402 ;Socket 0 Interrupt +W5100_S0_SR = $0403 ;Socket 0 Status +W5100_S0_PORT0 = $0404 ;Socket 0 Source Port High +W5100_S0_PORT1 = $0405 ;Socket 0 Source Port Low +W5100_S0_DHAR0 = $0406 ;Socket 0 Dest Mac 0 +W5100_S0_DHAR1 = $0407 ;Socket 0 Dest Mac 1 +W5100_S0_DHAR2 = $0408 ;Socket 0 Dest Mac 2 +W5100_S0_DHAR3 = $0409 ;Socket 0 Dest Mac 3 +W5100_S0_DHAR4 = $040A ;Socket 0 Dest Mac 4 +W5100_S0_DHAR5 = $040B ;Socket 0 Dest Mac 5 +W5100_S0_DIPR0 = $040C ;Socket 0 Dest IP 0 +W5100_S0_DIPR1 = $040D ;Socket 0 Dest IP 1 +W5100_S0_DIPR2 = $040E ;Socket 0 Dest IP 2 +W5100_S0_DIPR3 = $040F ;Socket 0 Dest IP 3 +W5100_S0_DPORT0 = $0410 ;Socket 0 Dest Port High +W5100_S0_DPORT1 = $0411 ;Socket 0 Dest Port Low +W5100_S0_MSSR0 = $0412 ;Socket 0 Max Segment High +W5100_S0_MSSR1 = $0413 ;Socket 0 Max Segment Low +W5100_S0_PROTO = $0414 ;Socket 0 Protocol (Raw Mode) +W5100_S0_TOS = $0415 ;Socket 0 IP TOS +W5100_S0_TTL = $0416 ;Socket 0 IP TTL +W5100_S0_TX_FSR0 = $0420 ;Socket 0 TX Free Size High +W5100_S0_TX_FSR1 = $0421 ;Socket 0 TX Free Size Low +W5100_S0_TX_RD0 = $0422 ;Socket 0 TX Read Pointer High +W5100_S0_TX_RD1 = $0423 ;Socket 0 TX Read Pointer Low +W5100_S0_TX_WR0 = $0424 ;Socket 0 TX Write Pointer High +W5100_S0_TX_WR1 = $0425 ;Socket 0 TX Write Pointer Low +W5100_S0_RX_RSR0 = $0426 ;Socket 0 RX Received Size High +W5100_S0_RX_RSR1 = $0427 ;Socket 0 RX Received Size Low +W5100_S0_RX_RD0 = $0428 ;Socket 0 RX Read Pointer High +W5100_S0_RX_RD1 = $0429 ;Socket 0 RX Read Pointer Low + +W5100_S1_BASE = $0500 ;Base for socket 1 +W5100_S1_MR = $0500 ;Socket 1 Mode +W5100_S1_CR = $0501 ;Socket 1 Command +W5100_S1_IR = $0502 ;Socket 1 Interrupt +W5100_S1_SR = $0503 ;Socket 1 Status +W5100_S1_PORT0 = $0504 ;Socket 1 Source Port High +W5100_S1_PORT1 = $0505 ;Socket 1 Source Port Low +W5100_S1_DHAR0 = $0506 ;Socket 1 Dest Mac 0 +W5100_S1_DHAR1 = $0507 ;Socket 1 Dest Mac 1 +W5100_S1_DHAR2 = $0508 ;Socket 1 Dest Mac 2 +W5100_S1_DHAR3 = $0509 ;Socket 1 Dest Mac 3 +W5100_S1_DHAR4 = $050A ;Socket 1 Dest Mac 4 +W5100_S1_DHAR5 = $050B ;Socket 1 Dest Mac 5 +W5100_S1_DIPR0 = $050C ;Socket 1 Dest IP 0 +W5100_S1_DIPR1 = $050D ;Socket 1 Dest IP 1 +W5100_S1_DIPR2 = $050E ;Socket 1 Dest IP 2 +W5100_S1_DIPR3 = $050F ;Socket 1 Dest IP 3 +W5100_S1_DPORT0 = $0510 ;Socket 1 Dest Port High +W5100_S1_DPORT1 = $0511 ;Socket 1 Dest Port Low +W5100_S1_MSSR0 = $0512 ;Socket 1 Max Segment High +W5100_S1_MSSR1 = $0513 ;Socket 1 Max Segment Low +W5100_S1_PROTO = $0514 ;Socket 1 Protocol (Raw Mode) +W5100_S1_TOS = $0515 ;Socket 1 IP TOS +W5100_S1_TTL = $0516 ;Socket 1 IP TTL +W5100_S1_TX_FSR0 = $0520 ;Socket 1 TX Free Size High +W5100_S1_TX_FSR1 = $0521 ;Socket 1 TX Free Size Low +W5100_S1_TX_RD0 = $0522 ;Socket 1 TX Read Pointer High +W5100_S1_TX_RD1 = $0523 ;Socket 1 TX Read Pointer Low +W5100_S1_TX_WR0 = $0524 ;Socket 1 TX Write Pointer High +W5100_S1_TX_WR1 = $0525 ;Socket 1 TX Write Pointer Low +W5100_S1_RX_RSR0 = $0526 ;Socket 1 RX Received Size High +W5100_S1_RX_RSR1 = $0527 ;Socket 1 RX Received Size Low +W5100_S1_RX_RD0 = $0528 ;Socket 1 RX Read Pointer High +W5100_S1_RX_RD1 = $0529 ;Socket 1 RX Read Pointer Low + +W5100_S2_BASE = $0600 ;Base for socket 2 +W5100_S2_MR = $0600 ;Socket 2 Mode +W5100_S2_CR = $0601 ;Socket 2 Command +W5100_S2_IR = $0602 ;Socket 2 Interrupt +W5100_S2_SR = $0603 ;Socket 2 Status +W5100_S2_PORT0 = $0604 ;Socket 2 Source Port High +W5100_S2_PORT1 = $0605 ;Socket 2 Source Port Low +W5100_S2_DHAR0 = $0606 ;Socket 2 Dest Mac 0 +W5100_S2_DHAR1 = $0607 ;Socket 2 Dest Mac 1 +W5100_S2_DHAR2 = $0608 ;Socket 2 Dest Mac 2 +W5100_S2_DHAR3 = $0609 ;Socket 2 Dest Mac 3 +W5100_S2_DHAR4 = $060A ;Socket 2 Dest Mac 4 +W5100_S2_DHAR5 = $060B ;Socket 2 Dest Mac 5 +W5100_S2_DIPR0 = $060C ;Socket 2 Dest IP 0 +W5100_S2_DIPR1 = $060D ;Socket 2 Dest IP 1 +W5100_S2_DIPR2 = $060E ;Socket 2 Dest IP 2 +W5100_S2_DIPR3 = $060F ;Socket 2 Dest IP 3 +W5100_S2_DPORT0 = $0610 ;Socket 2 Dest Port High +W5100_S2_DPORT1 = $0611 ;Socket 2 Dest Port Low +W5100_S2_MSSR0 = $0612 ;Socket 2 Max Segment High +W5100_S2_MSSR1 = $0613 ;Socket 2 Max Segment Low +W5100_S2_PROTO = $0614 ;Socket 2 Protocol (Raw Mode) +W5100_S2_TOS = $0615 ;Socket 2 IP TOS +W5100_S2_TTL = $0616 ;Socket 2 IP TTL +W5100_S2_TX_FSR0 = $0620 ;Socket 2 TX Free Size High +W5100_S2_TX_FSR1 = $0621 ;Socket 2 TX Free Size Low +W5100_S2_TX_RD0 = $0622 ;Socket 2 TX Read Pointer High +W5100_S2_TX_RD1 = $0623 ;Socket 2 TX Read Pointer Low +W5100_S2_TX_WR0 = $0624 ;Socket 2 TX Write Pointer High +W5100_S2_TX_WR1 = $0625 ;Socket 2 TX Write Pointer Low +W5100_S2_RX_RSR0 = $0626 ;Socket 2 RX Received Size High +W5100_S2_RX_RSR1 = $0627 ;Socket 2 RX Received Size Low +W5100_S2_RX_RD0 = $0628 ;Socket 2 RX Read Pointer High +W5100_S2_RX_RD1 = $0629 ;Socket 2 RX Read Pointer Low + +W5100_S3_BASE = $0700 ;Base for socket 3 +W5100_S3_MR = $0700 ;Socket 3 Mode +W5100_S3_CR = $0701 ;Socket 3 Command +W5100_S3_IR = $0702 ;Socket 3 Interrupt +W5100_S3_SR = $0703 ;Socket 3 Status +W5100_S3_PORT0 = $0704 ;Socket 3 Source Port High +W5100_S3_PORT1 = $0705 ;Socket 3 Source Port Low +W5100_S3_DHAR0 = $0706 ;Socket 3 Dest Mac 0 +W5100_S3_DHAR1 = $0707 ;Socket 3 Dest Mac 1 +W5100_S3_DHAR2 = $0708 ;Socket 3 Dest Mac 2 +W5100_S3_DHAR3 = $0709 ;Socket 3 Dest Mac 3 +W5100_S3_DHAR4 = $070A ;Socket 3 Dest Mac 4 +W5100_S3_DHAR5 = $070B ;Socket 3 Dest Mac 5 +W5100_S3_DIPR0 = $070C ;Socket 3 Dest IP 0 +W5100_S3_DIPR1 = $070D ;Socket 3 Dest IP 1 +W5100_S3_DIPR2 = $070E ;Socket 3 Dest IP 2 +W5100_S3_DIPR3 = $070F ;Socket 3 Dest IP 3 +W5100_S3_DPORT0 = $0710 ;Socket 3 Dest Port High +W5100_S3_DPORT1 = $0711 ;Socket 3 Dest Port Low +W5100_S3_MSSR0 = $0712 ;Socket 3 Max Segment High +W5100_S3_MSSR1 = $0713 ;Socket 3 Max Segment Low +W5100_S3_PROTO = $0714 ;Socket 3 Protocol (Raw Mode) +W5100_S3_TOS = $0715 ;Socket 3 IP TOS +W5100_S3_TTL = $0716 ;Socket 3 IP TTL +W5100_S3_TX_FSR0 = $0720 ;Socket 3 TX Free Size High +W5100_S3_TX_FSR1 = $0721 ;Socket 3 TX Free Size Low +W5100_S3_TX_RD0 = $0722 ;Socket 3 TX Read Pointer High +W5100_S3_TX_RD1 = $0723 ;Socket 3 TX Read Pointer Low +W5100_S3_TX_WR0 = $0724 ;Socket 3 TX Write Pointer High +W5100_S3_TX_WR1 = $0725 ;Socket 3 TX Write Pointer Low +W5100_S3_RX_RSR0 = $0726 ;Socket 3 RX Received Size High +W5100_S3_RX_RSR1 = $0727 ;Socket 3 RX Received Size Low +W5100_S3_RX_RD0 = $0728 ;Socket 3 RX Read Pointer High +W5100_S3_RX_RD1 = $0729 ;Socket 3 RX Read Pointer Low + + +;commands +W5100_CMD_OPEN = $01 +W5100_CMD_LISTEN = $02 +W5100_CMD_CONNECT = $04 +W5100_CMD_DISCONNECT = $08 +W5100_CMD_CLOSE = $10 +W5100_CMD_SEND = $20 +W5100_CMD_SEND_MAC = $21 +W5100_CMD_SEND_KEEP = $22 +W5100_CMD_RECV = $40 + +;modes +W5100_MODE_CLOSED = $00 +W5100_MODE_TCP = $01 +W5100_MODE_UDP = $02 +W5100_MODE_IP_RAW = $03 +W5100_MODE_MAC_RAW = $04 +W5100_MODE_PPPOE = $05 + + diff --git a/client/drivers/w5100.s b/client/drivers/w5100.s new file mode 100644 index 0000000..f2a9f37 --- /dev/null +++ b/client/drivers/w5100.s @@ -0,0 +1,169 @@ +; Ethernet driver for W5100 W5100 chip +; + +.ifndef KPR_API_VERSION_NUMBER + .define EQU = + .include "../inc/kipper_constants.i" +.endif + +.include "../inc/common.i" + +.include "w5100.i" + + .export eth_init + .export eth_rx + .export eth_tx + .export eth_driver_name + .import eth_inp + .import eth_inp_len + .import eth_outp + .import eth_outp_len + + .importzp eth_dest + .importzp eth_src + .importzp eth_type + .importzp eth_data + + .export w5100_read_reg + .export w5100_write_reg + + .import cfg_mac + + .import ip65_error + + + .segment "IP65ZP" : zeropage + +W5100_BASE = $DF20 +W5100_ADDR_HI = W5100_BASE+1 +W5100_ADDR_LO = W5100_BASE+2 +W5100_DATA = W5100_BASE+3 + + + + .code + +;initialize the ethernet adaptor +;inputs: none +;outputs: carry flag is set if there was an error, clear otherwise +eth_init: + lda #$80 ;reset + sta W5100_BASE + lda W5100_BASE + bne @error ;writing a byte to the MODE register with bit 7 set should reset. + ;after a reset, mode register is zero + ;therefore, if there is a real W5100 at the specified address, + ;we should be able to write a $80 and read back a $00 + lda #$03 ;set indirect + autoincrement + sta W5100_BASE + lda W5100_BASE + cmp #$03 + bne @error ;make sure if we write to mode register without bit 7 set, + ;the value persists. + lda #$00 + sta W5100_ADDR_HI + lda #$16 + sta W5100_ADDR_LO + ldx #$00 ;start writing to reg $0016 - Interrupt Mask Register +@loop: + lda w5100_config_data,x + sta W5100_DATA + inx + cpx #$06 + bne @loop + + lda #$09 + sta W5100_ADDR_LO + ldx #$00 ;start writing to reg $0009 - MAC address +@mac_loop: + lda cfg_mac,x + sta W5100_DATA + inx + cpx #$06 + bne @mac_loop + + ;set up socket 0 for MAC RAW mode + ldax #W5100_S0_MR + ldy #W5100_MODE_MAC_RAW + jsr w5100_write_reg + + ;open socket 0 + ldax #W5100_S0_CR + ldy #W5100_CMD_OPEN + jsr w5100_write_reg + + clc + rts +@error: + sec + rts ; + +;receive a packet +;inputs: none +;outputs: +; if there was an error receiving the packet (or no packet was ready) then carry flag is set +; if packet was received correctly then carry flag is clear, +; eth_inp contains the received packet, +; and eth_inp_len contains the length of the packet +eth_rx: + + +; send a packet +;inputs: +; eth_outp: packet to send +; eth_outp_len: length of packet to send +;outputs: +; if there was an error sending the packet then carry flag is set +; otherwise carry flag is cleared +eth_tx: + + sec + rts + +; read one of the W5100 registers +; inputs: AX = register number to read +; outputs: A = value of nominated register +w5100_read_reg: + stx W5100_ADDR_HI + sta W5100_ADDR_LO + lda W5100_DATA + rts + +; write to one of the W5100 registers +; inputs: AX = register number to read +; Y = value to write to register +; outputs: none +w5100_write_reg: + stx W5100_ADDR_HI + sta W5100_ADDR_LO + sty W5100_DATA + rts + +.rodata +eth_driver_name: + .asciiz "W5100 5100" +w5100_config_data: + .byte $00 ;no interrupts + .byte $0f ;400ms retry (default) + .byte $a0 + .byte $08 ;# of timeouts + .byte $55 ;4 sockets @2K each, tx/rx + .byte $55 + +;-- LICENSE FOR w5100a.s -- +; The contents of this file are subject to the Mozilla Public License +; Version 1.1 (the "License"); you may not use this file except in +; compliance with the License. You may obtain a copy of the License at +; http://www.mozilla.org/MPL/ +; +; Software distributed under the License is distributed on an "AS IS" +; basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +; License for the specific language governing rights and limitations +; under the License. +; +; The Original Code is ip65. +; +; The Initial Developer of the Original Code is Jonno Downes (jonno@jamtronix.com) +; Portions created by the Initial Developer is Copyright (C) 2010 +; Jonno Downes. All Rights Reserved. +; -- LICENSE END -- diff --git a/client/examples/Makefile b/client/examples/Makefile index 826a985..9acb5ec 100644 --- a/client/examples/Makefile +++ b/client/examples/Makefile @@ -10,7 +10,7 @@ AFLAGS= IP65TCPLIB=../ip65/ip65_tcp.lib -C64PROGLIB=../drivers/c64prog.lib +C64RRNETLIB=../drivers/c64rrnet.lib #NT2PLAY=nt2play.o @@ -39,18 +39,18 @@ webnoter.o: webnoter.s form.html $(AS) $(AFLAGS) $< -webnoter.prg: webnoter.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64prg.cfg - $(LD) -m webnoter.map -vm -C ../cfg/c64prg.cfg -o webnoter.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64PROGLIB) $(NT2PLAY) +webnoter.prg: webnoter.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m webnoter.map -vm -C ../cfg/c64prg.cfg -o webnoter.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) $(NT2PLAY) -upnatom.prg: upnatom.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64prg.cfg - $(LD) -m upnatom.map -vm -C ../cfg/c64prg.cfg -o upnatom.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64PROGLIB) $(NT2PLAY) +upnatom.prg: upnatom.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m upnatom.map -vm -C ../cfg/c64prg.cfg -o upnatom.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) $(NT2PLAY) # cp upnatom.prg ../../server/boot/ -%.prg: %.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64prg.cfg - $(LD) -m $*.map -vm -C ../cfg/c64prg.cfg -o $*.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64PROGLIB) +%.prg: %.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m $*.map -vm -C ../cfg/c64prg.cfg -o $*.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) diff --git a/client/inc/commonprint.i b/client/inc/commonprint.i index d449c13..8ae2be1 100644 --- a/client/inc/commonprint.i +++ b/client/inc/commonprint.i @@ -26,7 +26,7 @@ .import ascii_to_native -.import cs_driver_name +.import eth_driver_name .importzp copy_src .import cfg_tftp_server ;reuse the copy_src zero page var @@ -38,7 +38,7 @@ temp_bcd: .res 3 temp_ptr: .res 2 .code .macro print_driver_init - ldax #cs_driver_name + ldax #eth_driver_name jsr print_ascii_as_native ldax #init_msg jsr print_ascii_as_native @@ -69,13 +69,13 @@ temp_ptr: .res 2 .import print_a .import print_cr -.import cs_driver_name +.import eth_driver_name print_ip_config: ldax #interface_type jsr print_ascii_as_native - ldax #cs_driver_name + ldax #eth_driver_name jsr print_ascii_as_native jsr print_cr diff --git a/client/ip65/Makefile b/client/ip65/Makefile index 770bea3..b6c9db9 100644 --- a/client/ip65/Makefile +++ b/client/ip65/Makefile @@ -39,23 +39,15 @@ ETHOBJS= \ all: ip65.lib ip65_tcp.lib ip65.lib: $(ETHOBJS) function_dispatcher.s ip.s icmp.s - $(AS) $(AFLAGS) function_dispatcher.s - $(AS) $(AFLAGS) ip.s - $(AS) $(AFLAGS) icmp.s ar65 a ip65.lib $(ETHOBJS) function_dispatcher.o ip.o icmp.o - -ip65_tcp.lib: tcp.o $(ETHOBJS) function_dispatcher.s ip.s tcp.s icmp.s - +ip65_tcp.lib: tcp.o $(ETHOBJS) function_dispatcher.s ip.s tcp.s icmp.s $(AS) $(AFLAGS) function_dispatcher.s -DTCP -DAPI_VERSION=2 - $(AS) $(AFLAGS) ip.s -DTCP - $(AS) $(AFLAGS) icmp.s -DTCP - ar65 a ip65_tcp.lib $(ETHOBJS) function_dispatcher.o ip.o tcp.o icmp.o clean: diff --git a/client/ip65/eth.s b/client/ip65/eth.s index 0976974..aab21bb 100644 --- a/client/ip65/eth.s +++ b/client/ip65/eth.s @@ -8,11 +8,27 @@ .exportzp eth_proto_ip .exportzp eth_proto_arp + .exportzp eth_dest + .exportzp eth_src + .exportzp eth_type + .exportzp eth_data - .import eth_outp + .export eth_outp + .export eth_outp_len + .export eth_inp + .export eth_inp_len .import cfg_mac + .bss + +; input and output buffers +eth_inp_len: .res 2 ; input packet length +eth_inp: .res 1518 ; space for input packet +eth_outp_len: .res 2 ; output packet length +eth_outp: .res 1518 ; space for output packet + + ; ethernet packet offsets eth_dest = 0 ; offset of destination address in ethernet packet diff --git a/client/kipperterm2/Makefile b/client/kipperterm2/Makefile index 99238fe..2066aab 100644 --- a/client/kipperterm2/Makefile +++ b/client/kipperterm2/Makefile @@ -15,8 +15,7 @@ IP65LIB=../ip65/ip65.lib IP65TCPLIB=../ip65/ip65_tcp.lib -C64PROGLIB=../drivers/c64prog.lib -#C64NB65LIB=../drivers/c64nb65.lib +C64RRNETLIB=../drivers/c64rrnet.lib all: kipperterm2.prg kipperterm2.d64 @@ -26,8 +25,8 @@ kipperterm2.o: kipperterm2.s $(INCFILES) ../inc/telnet.i ../inc/config_menu.i .. %.o: %.s $(INCFILES) $(AS) $(AFLAGS) $< -%.prg: %.o $(IP65LIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64fullprg.cfg - $(LD) -m $*.map -vm -C ../cfg/c64fullprg.cfg -o $*.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64PROGLIB) +%.prg: %.o $(IP65LIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64fullprg.cfg + $(LD) -m $*.map -vm -C ../cfg/c64fullprg.cfg -o $*.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) ruby ../carts/set_ip_config.rb $@ mac auto kipperterm2.d64: kipperterm2.prg addresses.txt abe.bas diff --git a/client/test/Makefile b/client/test/Makefile index 18d1a7f..3389c5d 100644 --- a/client/test/Makefile +++ b/client/test/Makefile @@ -4,99 +4,124 @@ LD=ld65 CFLAGS=-Oirs -t $(TARGET) AFLAGS= - -IP65LIB=../ip65/ip65.lib - -IP65TCPLIB=../ip65/ip65_tcp.lib - -C64PROGLIB=../drivers/c64prog.lib -C64PNB65LIB=../drivers/c64nb65.lib -APPLE2PROGLIB=../drivers/apple2prog.lib - -INCFILES=\ - ../inc/common.i\ - ../inc/commonprint.i\ - ../inc/net.i\ - -all: \ - test_getc.prg \ - testdns.prg \ - test_disk_io.prg \ - testdns.pg2 \ - testtftp.prg \ - testtftp.pg2\ - test_cart_api.prg\ - test_vt100.prg\ - testdottedquad.pg2\ - testdottedquad.prg\ - test_tcp.prg \ - test_xmodem.prg \ - test_xmodem.d64 \ - test_httpd.prg \ - test_parser.prg \ - test_ping.prg \ - test_sntp.prg \ - test_get_url.prg \ - test_parse_querystring.prg \ -# httpd_test.d64 \ -# ip65test.dsk \ -# test_disk_io.d64 \ + + +IP65LIB=../ip65/ip65.lib + +IP65TCPLIB=../ip65/ip65_tcp.lib + +C64RRNETLIB=../drivers/c64rrnet.lib + +C64WIZNETLIB=../drivers/c64wiznet.lib + +APPLE2PROGLIB=../drivers/apple2prog.lib + + +INCFILES=\ + ../inc/common.i\ + ../inc/commonprint.i\ + ../inc/net.i\ + +all: \ + test_getc.prg \ + testdns.prg \ + test_disk_io.prg \ + testdns.pg2 \ + testtftp.prg \ + testtftp.pg2\ + test_cart_api.prg\ + test_vt100.prg\ + testdottedquad.pg2\ + testdottedquad.prg\ + test_tcp.prg \ + test_xmodem.prg \ + test_xmodem.d64 \ + test_httpd.prg \ + test_parser.prg \ + test_ping.prg \ + test_sntp.prg \ + test_get_url.prg \ + test_wiznet.prg \ + test_parse_querystring.prg \ +# httpd_test.d64 \ +# ip65test.dsk \ +# test_disk_io.d64 \ + %.o: %.c $(CC) -c $(CFLAGS) $< %.o: %.s $(AS) $(AFLAGS) $< - -%.prg: %.o $(IP65LIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64prg.cfg - $(LD) -m $*.map -vm -C ../cfg/c64prg.cfg -o $*.prg $(AFLAGS) $< $(IP65LIB) $(C64PROGLIB) - -test_tcp.prg: test_tcp.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64prg.cfg - $(LD) -m test_tcp.map -vm -C ../cfg/c64prg.cfg -o test_tcp.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64PROGLIB) - -test_xmodem.o: test_xmodem.s ../ip65/xmodem.s - $(AS) $(AFLAGS) $< - -test_xmodem.prg: test_xmodem.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64prg.cfg - $(LD) -m test_xmodem.map -vm -C ../cfg/c64prg.cfg -o test_xmodem.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64PROGLIB) - -test_parser.prg: test_parser.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64prg.cfg - $(LD) -m test_parser.map -vm -C ../cfg/c64prg.cfg -o test_parser.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64PROGLIB) - -test_get_url.prg: test_get_url.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64prg.cfg - $(LD) -m test_get_url.map -vm -C ../cfg/c64prg.cfg -o test_get_url.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64PROGLIB) - -test_ping.prg: test_ping.o $(IP65TCPLIB) $(C64PROGLIB) $(INCFILES) ../cfg/c64prg.cfg - $(LD) -m test_ping.map -vm -C ../cfg/c64prg.cfg -o test_ping.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64PROGLIB) - -%.pg2: %.o $(IP65LIB) $(APPLE2PROGLIB) $(INCFILES) ../cfg/a2bin.cfg - $(LD) -C ../cfg/a2bin.cfg -o $*.pg2 $(AFLAGS) $< $(IP65LIB) $(APPLE2PROGLIB) - - -httpd_test.d64: test_httpd.prg index.html file1.html - cp test_httpd.prg autoexec.prg - ripxplore.rb --init CbmDos httpd_test.d64 -a autoexec.prg - ripxplore.rb httpd_test.d64 -a index.html -t C64Seq - ripxplore.rb httpd_test.d64 -a file1.html -t C64Seq - -ip65test.dsk: testdns.pg2 testdottedquad.pg2 testtftp.pg2 - ripxplore.rb --init BeautifulBoot ip65test.dsk -a testdns.pg2 -t AppleBinary - ripxplore.rb ip65test.dsk -a testdns.pg2 -t AppleBinary - ripxplore.rb ip65test.dsk -a testtftp.pg2 -t AppleBinary - ripxplore.rb ip65test.dsk -a testdottedquad.pg2 -t AppleBinary - ripxplore.rb ip65test.dsk -a testdns.pg2 -t AppleBinary - -test_disk_io.d64: test_disk_io.prg - ripxplore.rb --init CbmDos test_disk_io.d64 -a test_disk_io.prg - cp screen_prg.bin screen.prg - ripxplore.rb test_disk_io.d64 -a screen.prg - -test_xmodem.d64: test_xmodem.prg - ripxplore.rb --init CbmDos test_xmodem.d64 -a test_xmodem.prg + + +%.prg: %.o $(IP65LIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m $*.map -vm -C ../cfg/c64prg.cfg -o $*.prg $(AFLAGS) $< $(IP65LIB) $(C64RRNETLIB) + + + +test_tcp.prg: test_tcp.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m test_tcp.map -vm -C ../cfg/c64prg.cfg -o test_tcp.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) + +test_xmodem.o: test_xmodem.s ../ip65/xmodem.s + $(AS) $(AFLAGS) $< + + + +test_xmodem.prg: test_xmodem.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m test_xmodem.map -vm -C ../cfg/c64prg.cfg -o test_xmodem.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) + +test_parser.prg: test_parser.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m test_parser.map -vm -C ../cfg/c64prg.cfg -o test_parser.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) + + +test_get_url.prg: test_get_url.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m test_get_url.map -vm -C ../cfg/c64prg.cfg -o test_get_url.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) + + +test_ping.prg: test_ping.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m test_ping.map -vm -C ../cfg/c64prg.cfg -o test_ping.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) + +test_wiznet.prg: test_wiznet.o $(C64WIZNETLIB) $(IP65TCPLIB) $(INCFILES) ../cfg/c64prg.cfg + $(LD) -m test_wiznet.map -vm -C ../cfg/c64prg.cfg -o test_wiznet.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64WIZNETLIB) + cp test_wiznet.prg ../../server/boot/autoexec.prg + + +%.pg2: %.o $(IP65LIB) $(APPLE2PROGLIB) $(INCFILES) ../cfg/a2bin.cfg + $(LD) -C ../cfg/a2bin.cfg -o $*.pg2 $(AFLAGS) $< $(IP65LIB) $(APPLE2PROGLIB) + + + + +httpd_test.d64: test_httpd.prg index.html file1.html + cp test_httpd.prg autoexec.prg + ripxplore.rb --init CbmDos httpd_test.d64 -a autoexec.prg + ripxplore.rb httpd_test.d64 -a index.html -t C64Seq + ripxplore.rb httpd_test.d64 -a file1.html -t C64Seq + + +ip65test.dsk: testdns.pg2 testdottedquad.pg2 testtftp.pg2 + ripxplore.rb --init BeautifulBoot ip65test.dsk -a testdns.pg2 -t AppleBinary + ripxplore.rb ip65test.dsk -a testdns.pg2 -t AppleBinary + ripxplore.rb ip65test.dsk -a testtftp.pg2 -t AppleBinary + ripxplore.rb ip65test.dsk -a testdottedquad.pg2 -t AppleBinary + ripxplore.rb ip65test.dsk -a testdns.pg2 -t AppleBinary + + +test_disk_io.d64: test_disk_io.prg + + ripxplore.rb --init CbmDos test_disk_io.d64 -a test_disk_io.prg + cp screen_prg.bin screen.prg + ripxplore.rb test_disk_io.d64 -a screen.prg + + +test_xmodem.d64: test_xmodem.prg + ripxplore.rb --init CbmDos test_xmodem.d64 -a test_xmodem.prg clean: rm -f *.o *.pg2 *.prg - rm -f ip65test.dsk + rm -f ip65test.dsk + distclean: clean rm -f *~ diff --git a/client/test/test_wiznet.s b/client/test/test_wiznet.s new file mode 100644 index 0000000..a975158 --- /dev/null +++ b/client/test/test_wiznet.s @@ -0,0 +1,153 @@ + .include "../inc/common.i" + .include "../inc/commonprint.i" + .include "../inc/net.i" + + .import exit_to_basic + + .import cfg_get_configuration_ptr + .import copymem + .importzp copy_src + .importzp copy_dest + + .import icmp_echo_ip + .import icmp_ping + .import get_key + .import w5100_read_reg + .import __CODE_LOAD__ + .import __CODE_SIZE__ + .import __RODATA_SIZE__ + .import __DATA_SIZE__ + + .segment "STARTUP" ;this is what gets put at the start of the file on the C64 + + .word basicstub ; load address + +basicstub: + .word @nextline + .word 2003 + .byte $9e + .byte <(((init / 1000) .mod 10) + $30) + .byte <(((init / 100 ) .mod 10) + $30) + .byte <(((init / 10 ) .mod 10) + $30) + .byte <(((init ) .mod 10) + $30) + .byte 0 +@nextline: + .word 0 + +.code + +init: + jsr print_cr + init_ip_via_dhcp + jsr print_ip_config + jsr print_cr + lda #0 + sta register_page + jsr dump_wiznet_register_page + lda #$4 + sta register_page + jsr dump_wiznet_register_page + + ;our default gateway is probably a safe thing to ping + ldx #$3 +: + lda cfg_gateway,x + sta icmp_echo_ip,x + dex + bpl :- + ldax #pinging + jsr print + + ldax #icmp_echo_ip + jsr print_dotted_quad + jsr print_cr + jsr icmp_ping + bcs @error + jsr print_integer + ldax #ms + jsr print + rts +@error: + jmp print_errorcode + + +dump_wiznet_register_page: + sta register_page + lda #0 + sta current_register + jsr print_cr + +@one_row: + lda current_register + cmp #$20 + beq @done + lda register_page + jsr print_hex + lda current_register + jsr print_hex + lda #':' + jsr print_a + lda #' ' + jsr print_a + + lda #0 + sta current_byte_in_row + +@dump_byte: + lda current_register + ldx register_page + jsr w5100_read_reg + jsr print_hex + lda #' ' + jsr print_a + inc current_register + inc current_byte_in_row + lda current_byte_in_row + cmp #08 + bne @dump_byte + + jsr print_cr + jmp @one_row +@done: + jsr print_cr + jsr wait_for_keypress + rts + +wait_for_keypress: + lda #0 + sta $c6 ;set the keyboard buffer to be empty + ldax #press_a_key_to_continue + jsr print + jsr get_key + rts + +.rodata +ms: .byte " MS",13,0 +pinging: .byte "PINGING ",0 + +hello: .byte "HELLO WORLD!",13,10,0 +.bss +block_number: .res 1 +block_length: .res 2 +current_register:.res 1 +current_byte_in_row: .res 1 +register_page: .res 1 + +;-- LICENSE FOR test_ping.s -- +; The contents of this file are subject to the Mozilla Public License +; Version 1.1 (the "License"); you may not use this file except in +; compliance with the License. You may obtain a copy of the License at +; http://www.mozilla.org/MPL/ +; +; Software distributed under the License is distributed on an "AS IS" +; basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +; License for the specific language governing rights and limitations +; under the License. +; +; The Original Code is ip65. +; +; The Initial Developer of the Original Code is Jonno Downes, +; jonno@jamtronix.com. +; Portions created by the Initial Developer are Copyright (C) 2009 +; Jonno Downes. All Rights Reserved. +; -- LICENSE END --