From 1f47cd7faa0030d25b3600ec67b2183be6138c14 Mon Sep 17 00:00:00 2001 From: jonnosan Date: Sat, 8 Jan 2011 06:24:34 +0000 Subject: [PATCH] added support for VIC 20 / RR-NET git-svn-id: http://svn.code.sf.net/p/netboot65/code@301 93682198-c243-4bdb-bd91-e943c89aac3b --- client/basic/bails.d64 | Bin 174848 -> 174848 bytes client/basic/kipperbas.d64 | Bin 174848 -> 174848 bytes client/cfg/vic20prg.cfg | 23 +++++++++ client/drivers/Makefile | 4 ++ client/drivers/c64_disk_access.s | 3 +- client/drivers/vic20-rr-net.s | 56 +++++++++++++++++++++ client/drivers/vic20timer.s | 81 +++++++++++++++++++++++++++++++ client/inc/commonprint.i | 26 ++++++++++ client/kipperterm2/kipperterm2.s | 8 +-- client/kipperterm2/timestamp.i | 2 +- client/test/Makefile | 28 +++++------ client/wiznet/kipperwizdisk.d64 | Bin 174848 -> 174848 bytes 12 files changed, 211 insertions(+), 20 deletions(-) create mode 100644 client/cfg/vic20prg.cfg create mode 100644 client/drivers/vic20-rr-net.s create mode 100644 client/drivers/vic20timer.s diff --git a/client/basic/bails.d64 b/client/basic/bails.d64 index da8eaccb1fa09518757539c36bfde3fb7e4d15ce..8cd50e3fc2682cce8eecd12e3db904b9b66a9abd 100644 GIT binary patch delta 6858 zcmZu$4Nw$Uw(dJK48xDugJ?z()BePN1PvH8FNqNp)K(DxiN+orW49HY-Fh^1UMf3z zDTWyIPH;D=4yhew2Z=VZC$O8{6xo`MTiY+ou)*}(eU%q?qibHG0hO`+3qOjyb9>ND zQlYH5_nv#sx#ynqopbMPU;ZrlW%&0#YR=7k%iT>6gc2gZstnq!&{ZjG7+LXAci@=( z`&{%2lI15CqXikuJ%%fKp?%`nJ4m;6_3E+S$a49m#i%4@xhHy|aj;9j(YajK7o*u| z`3D1wQAQ$qTTWeu<|e%9DT%xxFI$G5@-@4gQOA3X?`dTb1AWVP`c|{gm0)V`ph97^ z7hCp*9BI^E745Bp5!$O-_EuR4xm)l3oX>SclXIs=J-I1BpEuqmB?2KVWl z|GoP5W=bAdh9+;n=Q*iRO?CSYcFZ8Z^dQ^vJAX(0ubHb)D|MlL%%u(O3Cy0-#zf`0 z&>r^0N~IzshHRY`;*pN7Zhe4jwjKVJyZO1pAvec7x{@ht9D( z{}O%5NH}BNt6yQkqUr1_g$kI%CazRq3DUsQqydwl0k=0>I_u=WKaS@6i2pw>#C3eY z&ogU^8Xr-QRYvFLCWL7AvEwd-nZ% zyVW|r={G>of3OdWoe@2uO$ob|+B zGU*njS>mXPpvWkV7&H7vFkH-VoOm(yv_9og|x35e8_V9?u#N*+6p2MRa zmr~|mrTmedwyF!5mbG=sv!6g2KA5OqrM&E4%}^_vDRtCyq`0fKh5Q^pQhaLE!`>|- z{z_60^5NHb_Q|5o-?;zqz8gB>i~QTlrFgXBs8E(el+?d?!k>7UG7}>dc60Mrbvjrv>I~gwqGCpKNY_TA62pPnj6fAnb8PYqaoM?SZ00JZ|7!YSI^j zLPC^lv=;PnpW^_}Fzc8XcQ?|uWJvDj%Fs0S&{t{$uhYQU6X1;m^$>4-!M?DH39N1& z?dtsVo+jHqeSmahdz$KIJ*N-gU+{4Q*^i3UC0cY;x5WK@Y!QY}b@>NST+{pWnE7Zv&EnwK#4$pW3pL&=cPc+%EMaO}j2A+#jdOtTd|94N| z9}pCLn8z4aILwDJkLPHCxmuioY1zsKR+E6nLkWS0Kyu6{h1mBOPXL?+AU?>`34z!6 zSaaovfs1?`F=RggR2@$mM;zO-8Z?FKn)d;AnaC5PishXTbxX+6Y+*heWloQ_FAZ6kk4KqLNAVjx z^TDX@ypLNI#%De3-r{*H45vAeJDx&0d2jMvY_639sau~vDtlL; zNlsXfr*E0d!7}&~FaIPLP4r#jjpUA&BduMZT;jpGq{z8A@XZS1cQW#~*1w}LA&T8! zQqoYuaJ#Wx2qX%88(+|G7aIB#1um4Jj0T4fbkoDojeNrg=|sv4ryPe9y@~_dy_`aY zN`p76fkPR^>%@>Xa-Cl@3gGftW9!6Vp_p}>4;G8vbgzPNZ#Ac0tIjs6v#(cY->3$z z1!}QzJ*7FJ<3v+mHJmw|+FKn( zMvBUc;q@XDE@|Jwd|bl(cL}4d1>mK56(7Rmy<#`{v;s6-f_a99aB3_ob9XD6T40) z>$hB7>j{^T>_5?HxpcByKVQJ9(*!+5eb^^}efFrus3_oI*<9gVKd-ah^lfmtz|^k= z(-;AK3x=7F1#4p8wckR_w?<|QU})UvADZhjonXZR_x5V z5^$2k3ri$<=_Ck!GWZmycojQN^(rnFH(9Euw(%HW9|#MKC+CRUE6YcBP&er%*lHMSUDhUEL}gU!B<|>VJ!E z5kW4RLeEz>%R@zIj_)74IORWqo#|x(B?ucL{9G5oB{zubn~)5y1_1?c0s04kFeu_7 z5f6*_ju;vrybILfI6hNrfFX1mK$=<8tq&`E@E0}8EBIWEvI(EBf#E-E$R_YZQotoC zh0vQU1*Z5Uvgl@!8D^E2L2W20(zZT$!PI4iw4ERkUkm|vrWBYeDF$3M<~&Q>U;!yE zAEC#r$Z8)|^8`RC@lH>Xpd&71ixde#;z>GnAVfuG?T0+Ivf_qlzMjVN8zQs!oBTfL zN0FWhV|<;D%-N4`@R7Ou@l8H5Z$G}plWA*w`nEa!tvNklP7j*X_W1OWIX!Gn-!Z4} zn$t_;(ANZhD@d@pW)M1jMLf)jhuz}gKCweF9MK#&ESKvEu|83^ zMHlH=4J9fkhTURt4}l9O@@)aPsP>6Q5?fjd#26=b_2$wnT^gwr4LiVNkJ#(tlsdp1 zlo{U@(Xhbq?NHem(DP$E#PAMr4D1MhMf6sR%s{DHNf3XLj4zpp|M~}rSHBXYR%33| zW@G~nE{%czYtf+7K0k9&)Vn}QtWpF$(L_3xeZ5r4_mQPY4&=u>W-fqT&x+yQVy{5q zXT`v75waoxIe`F%H^jhAumIe7OAOp5Jqmv-1_ngPjDVRL0muw0vPXpE=%pRzM%lN@ z;AU|JHh)(P-UCI!5ivL_LhOC?185Tq;@JT~7~)On4=DLCPZH%m^dWE-@CgStJ|@f? zAEk^`{EdivMW|muR+kC*vIs@n%9d?Z9~S`gWgA1O5qf-{V5GVlUdj^$)YkrD}~8w87P@!ihuyF5P^!H5hF_lyiYc#i! zrWZ$-w`Z$^wc(*!^Ma7f$mOjq?;HoNz))>RYe8SGs|q9rYa6Yxq1rAz8fSKKB@K)- zqdXb@V3KDt$_bxbwie~357!3n)E2b1^bdp5*5mzmYGvVU9Bxu z@yV(?wf^Jm@p8`J;y+GmwT*U4I6=a82`5U-!e^MS&CJeS95YhhXo3A~+0;IyPA4I- zvP+(c+M)Syd(;U{ZP{?XdpIdED- zTCUKisSgYKWW^N{{O{JEQZnGon6(*@XTLxZ|HW()xGq70LQi2zQs)XiaGXz3=LtPA zUQbu&3q99(c=jw1dJNta0Hy^(bkw*NvlG!oBD#tkp%hN?d6gC9jzYm14?UXn(!F>B zIq;z>Wtdki=)352@7VQc;+jS%(T2oD&ig#^e z`h39w_xNP5;Pt~*`>i7_1wa?ld~oR@RC4cODL1}b8yKkt8<2!8k~&grkQ}5QUZJcuIZtcO2cU^J0Mn}v-c8;Vo zcWYe^m^)1wljj};j>U0~2bvE$*u$IW{)kqKL{C^V+NL7;%OIL0&t8uvPX2Vu4-RY8 zLu3`q>jdqKHUa^#HjSlxjxoOqr&C72Bx6g3(0U%HI8#Ho562dOVrbX;@&Rlaf

Y<*yt{81^Ij&kKMOW{tRVO|Ak5@pq?;ViG3 z?nD}%>QyIb_+hV_q2Xx&BB(u+wI;@^&eOB0@_@Dy*`TP`8B5%ofT0DB;t zfOeu5bP>=pjhjFsJPU;80t;La18`By3#G#?F))s-=k&6XO~j9oR^XgjkZXBn@go z$8UGsXEW#XgkYftTyJkg(|nm=5fl{vakW4opUa?H_*0qHP%mLEsBB9#J+ZaLRN`t) z6%M~*}>_jbG?##Uk!N;}8 zEFrj#s5aDWExbs>#af_5Q?muUMpGBcdO6D6(qD0(KPzrTR@`)QoHH*vZRJV^UZ9x= z`AjV^O9Lc;)`=P*0YZo~Om!19umq=TU>A03j9*@{39a<`w~-J@B-BxdF-N5(V|vG)Z+x!DLBIl7gucIco`TQa53PeGC?G4QobSRX}^_ zWMn+ykEHmBKx7;d=sl=kK0||Cv$eBaYjSxH!j;qk27^smUa%Ju8#7)!-5cAcK|S57 zsav)1HVx1424;Ezx`n&oV;JPNej74#DtVMql?3Or0+a857Nn7#?p z5csxgjMKhsXX6~Gh|Vo2b2{|x@b(}tH25H}T?_2c;3BmPJETC81SiYq^7<`k_I$`I zim~k^FC-0)EJ_=_;tg|I!Vq16Q5veCf z&>fL^QqLm6NbaWlm4oJ;Hj*XbKYJq6CENv{fFRy@krc?0PJ!Ii(>8J{b%N|7Nq0CC zJ3%@}GNyHXk}c_%W7$&EBT_@tJV|v*O<9tfE;UUDpDM2s#Rb0aXv#QvU&)w?goAW{ z0rwV(5iFF|);XK#>YOiuw$5opTjva-4ZdD~eI^@}niXpnxECsxnkj{+O3eNe0Nn%$ z;6@Jcc!7RMA_dwdK`4FdWQo-0DH23MagwS_LHzK{@73B&i2!uE*DSYF$8hm)u97;{Q0OoH*xIUr4+=qnYzNZ^K0Af%)h(Y1#V?Hbil9H zhvC!s&;esYhl(BNyWltJJpA9zrEs_2A09j)|7iz$Vj=~9cyu&2;!N?xe&vRw4!OA_ z=!R|P3TLXE@(jA2QdqiS!>Yo~tBRcCoa}x99s6K(7h)YBtbGps)>$v1cO=WB F{|}A4E5HB% delta 4788 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 diff --git a/client/basic/kipperbas.d64 b/client/basic/kipperbas.d64 index c32d536f1f384816b64c91c1889424fc6c7d696d..015a6a876d1e242dcdac60ba4ea17633562d2ffe 100644 GIT binary patch delta 7694 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 OWgXYMWnE0ug8v7_)C`RP delta 7671 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 diff --git a/client/cfg/vic20prg.cfg b/client/cfg/vic20prg.cfg new file mode 100644 index 0000000..83e2c0b --- /dev/null +++ b/client/cfg/vic20prg.cfg @@ -0,0 +1,23 @@ +#assumes a fully expanded VIC 20 +MEMORY { + ZP: start = $02, size = $1A, type = rw ; + IP65ZP: start = $5f, size = $10, type = rw; + RAM: start = $11FF, size = $6e00, file = %O; +} +SEGMENTS { + STARTUP: load = RAM, type = ro ,define = yes, optional=yes; + CODE: load = RAM, type = ro,define = yes; + DATA: load = RAM, type = rw,define = yes; + SELF_MODIFIED_CODE: load = RAM, type = rw,define = yes, optional=yes; + VIC_DATA: load = RAM, type = rw,align = $800, optional=yes; + RODATA: load = RAM, type = ro,define = yes, optional=yes; + IP65_DEFAULTS: load = RAM, type = rw,define = yes, optional=yes; + BSS: load = RAM, type = bss, optional=yes; +# SAFE_BSS: load = RAM3000, type = bss, optional=yes; + APP_SCRATCH: load = RAM, type = bss, optional=yes; + ZEROPAGE: load = ZP, type = zp, optional=yes; + IP65ZP: load = IP65ZP, type = zp, optional=yes; + TCP_VARS: load = RAM, type = bss, optional=yes; + HTTP_VARS: load = RAM, type = bss, optional=yes; + +} diff --git a/client/drivers/Makefile b/client/drivers/Makefile index 1f17bcb..dc90cb4 100644 --- a/client/drivers/Makefile +++ b/client/drivers/Makefile @@ -15,6 +15,7 @@ DRIVERS=\ apple2prog.lib \ c64rrnet.lib \ c64wiznet.lib \ + vic20rrnet.lib \ all: $(DRIVERS) @@ -28,6 +29,9 @@ c64rrnet.lib: c64print.o rr-net.o c64timer.o c64kernal.o c64inputs.o c64_disk_ac c64wiznet.lib: w5100.o c64print.o c64timer.o c64kernal.o c64inputs.o c64_disk_access.o c64charconv.o c64_vt100.o ar65 a $@ $^ + +vic20rrnet.lib: c64print.o vic20-rr-net.o vic20timer.o c64kernal.o c64inputs.o c64_disk_access.o c64charconv.o cs8900a.o + ar65 a $@ $^ # ar65 a $@ $^ diff --git a/client/drivers/c64_disk_access.s b/client/drivers/c64_disk_access.s index 21a7c2a..ffef124 100644 --- a/client/drivers/c64_disk_access.s +++ b/client/drivers/c64_disk_access.s @@ -157,6 +157,7 @@ io_read_file_with_callback: jsr set_drive_id lda #$02 ; file number 2 ldx drive_id + ldy #02 ; secondary address 2 jsr SETLFS jsr OPEN @@ -334,7 +335,7 @@ set_drive_id: clc adc #07 ;so 01->08, 02->09 etc sta drive_id -@drive_id_set: +@drive_id_set: rts ;routine to write a sector diff --git a/client/drivers/vic20-rr-net.s b/client/drivers/vic20-rr-net.s new file mode 100644 index 0000000..925ea13 --- /dev/null +++ b/client/drivers/vic20-rr-net.s @@ -0,0 +1,56 @@ +; RR-Net driver, as seen on a VIC-20 (i.e. using a MasC=uerade adapter) + + + .export cs_init + + .export cs_packet_page + .export cs_packet_data + .export cs_rxtx_data + .export cs_tx_cmd + .export cs_tx_len + .export eth_driver_name + + +rr_ctl = $9801 ;address of 'control' port on Retro-Replay +cs_packet_page = $9802 ;address of 'packet page' port on RR-Net +cs_packet_data = $9804;address of 'packet data' port on RR-Net +cs_rxtx_data = $9808 ;address of 'recieve/transmit data' port on RR-Net +cs_tx_cmd = $980c;address of 'transmit command' port on RR-Net +cs_tx_len = $980e;address of 'transmission length' port on RR-Net + + +.code + +;initialise Retro Replay so we can access the network adapter +;inputs: none +;outputs: none +cs_init: + lda rr_ctl + ora #1 + sta rr_ctl + rts + +.rodata +eth_driver_name: + .asciiz "VIC20 RR-NET" + + + +;-- LICENSE FOR vic20-rr-net.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 -- diff --git a/client/drivers/vic20timer.s b/client/drivers/vic20timer.s new file mode 100644 index 0000000..34a24ed --- /dev/null +++ b/client/drivers/vic20timer.s @@ -0,0 +1,81 @@ +; timer routines +; +; the timer should be a 16-bit counter that's incremented by about +; 1000 units per second. it doesn't have to be particularly accurate. +; this VIC20 implementation requires the routine timer_vbl_handler be called 60 times per second + + .include "../inc/common.i" + + + .export timer_init + .export timer_read + + IRQ_VECTOR=$314 + + .bss + current_time_value: .res 2 + + .data + jmp_old_handler: + .byte $4c ;JMP +old_handler: + .word $00 + + .code + +;reset timer to 0 +;inputs: none +;outputs: none +timer_init: + lda old_handler + bne @handler_installed + ldax IRQ_VECTOR + stax old_handler + ldax #timer_vbl_handler + stax IRQ_VECTOR +@handler_installed: + ldax #0 + stax current_time_value + rts + +;read the current timer value +; inputs: none +; outputs: AX = current timer value (roughly equal to number of milliseconds since the last call to 'timer_init') +timer_read: + ldax current_time_value + rts + +; tick over the current timer value - should be called 60 times per second +; inputs: none +; outputs: none (all registers preserved, by carry flag can be modified) +timer_vbl_handler: + pha + lda #$11 ; 60 HZ =~ 17 ms per 'tick' +: + adc current_time_value + sta current_time_value + bcc :+ + inc current_time_value+1 +: + pla + jmp jmp_old_handler + + +;-- LICENSE FOR c64timer_nb65.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 -- diff --git a/client/inc/commonprint.i b/client/inc/commonprint.i index d5fc475..a994f23 100644 --- a/client/inc/commonprint.i +++ b/client/inc/commonprint.i @@ -1,3 +1,8 @@ +.ifndef SCREEN_WIDTH + SCREEN_WIDTH = 40 +.endif + + .ifndef KPR_API_VERSION_NUMBER .define EQU = .include "../inc/kipper_constants.i" @@ -316,6 +321,8 @@ print_errorcode: hexdigits: .byte "0123456789ABCDEF" +.if SCREEN_WIDTH >=30 + interface_type: .byte "Interface : ",0 @@ -339,6 +346,25 @@ dhcp_server_msg: tftp_server_msg: .byte "TFTP Server : ", 0 +.else ;for small width screens e.g. VIC 20 +interface_type: +.byte "Interface",10,0 +mac_address_msg: +.byte "MAC Address",10,0 +ip_address_msg: +.byte "IP Address",10,0 +netmask_msg: +.byte "Netmask",10,0 +gateway_msg: +.byte "Gateway",10,0 +dns_server_msg: +.byte "DNS Server",10,0 +dhcp_server_msg: +.byte "DHCP Server",10,0 +tftp_server_msg: +.byte "TFTP Server",10,0 + +.endif dhcp_msg: .byte "DHCP",0 diff --git a/client/kipperterm2/kipperterm2.s b/client/kipperterm2/kipperterm2.s index fab6c26..6d420c1 100644 --- a/client/kipperterm2/kipperterm2.s +++ b/client/kipperterm2/kipperterm2.s @@ -102,9 +102,6 @@ init: sta $01 ;turn off BASIC jsr setup_screen - lda $ba - sta cfg_default_drive - ldax #menu_header_msg jsr print_ascii_as_native ldax #init_msg+1 @@ -132,6 +129,9 @@ print_main_menu: init_ok: + lda $ba + sta cfg_default_drive + main_menu: jsr print_main_menu jsr print_ip_config @@ -161,7 +161,7 @@ main_menu: jsr cls clc - jsr set_io_device_no + jsr set_io_device_no ldax #address_book_filename stax io_filename ldax #scratch_buffer diff --git a/client/kipperterm2/timestamp.i b/client/kipperterm2/timestamp.i index 1eab20e..26472d8 100644 --- a/client/kipperterm2/timestamp.i +++ b/client/kipperterm2/timestamp.i @@ -1 +1 @@ -.byte "2011-01-08" +.byte "2011-01-08" diff --git a/client/test/Makefile b/client/test/Makefile index 8c1c6c8..4ec62ad 100644 --- a/client/test/Makefile +++ b/client/test/Makefile @@ -12,6 +12,7 @@ C64RRNETLIB=../drivers/c64rrnet.lib C64WIZNETLIB=../drivers/c64wiznet.lib IP65WIZNETLIB=../ip65/ip65_wiznet.lib APPLE2PROGLIB=../drivers/apple2prog.lib +VIC20RRNETLIB=../drivers/vic20rrnet.lib INCFILES=\ ../inc/common.i\ @@ -27,21 +28,22 @@ all: \ test_disk_io.prg \ testdns.pg2 \ testtftp.prg \ - testtftp.pg2\ - test_cart_api.prg\ - test_vt100.prg\ - testdottedquad.pg2\ - testdottedquad.prg\ + testtftp.pg2 \ + test_cart_api.prg \ + test_vt100.prg \ + testdottedquad.pg2 \ + testdottedquad.prg \ test_tcp.prg \ - test_xmodem.prg \ -# test_xmodem.d64 \ + test_xmodem.prg \ + test_vic20.prg \ test_httpd.prg \ test_parser.prg \ test_ping.prg \ test_sntp.prg \ test_get_url.prg \ - test_wiznet.prg \ - test_parse_querystring.prg \ + test_wiznet.prg \ + test_parse_querystring.prg \ +# test_xmodem.d64 \ # httpd_test.d64 \ # ip65test.dsk \ # test_disk_io.d64 \ @@ -53,9 +55,6 @@ ip65: drivers: make -C ../drivers all -%.o: %.c - $(CC) -c $(CFLAGS) $< - %.o: %.s $(AS) $(AFLAGS) $< @@ -64,7 +63,6 @@ drivers: $(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) @@ -93,7 +91,9 @@ test_wiznet.prg: test_wiznet.o $(C64WIZNETLIB) $(IP65WIZNETLIB) $(INCFILES) ../c test_cifs.prg: test_cifs.o $(IP65TCPLIB) $(C64RRNETLIB) $(INCFILES) ../cfg/c64prg.cfg $(LD) -m test_cifs.map -vm -C ../cfg/c64prg.cfg -o test_cifs.prg $(AFLAGS) $< $(IP65TCPLIB) $(C64RRNETLIB) - + +test_vic20.prg: test_vic20.o $(IP65TCPLIB) $(VIC20RRNETLIB) $(INCFILES) ../cfg/vic20prg.cfg + $(LD) -m test_vic20.map -vm -C ../cfg/vic20prg.cfg -o test_vic20.prg $(AFLAGS) $< $(IP65TCPLIB) $(VIC20RRNETLIB) %.pg2: %.o $(IP65LIB) $(APPLE2PROGLIB) $(INCFILES) ../cfg/a2bin.cfg $(LD) -C ../cfg/a2bin.cfg -o $*.pg2 $(AFLAGS) $< $(IP65LIB) $(APPLE2PROGLIB) diff --git a/client/wiznet/kipperwizdisk.d64 b/client/wiznet/kipperwizdisk.d64 index cd4de3b2272bf7262c8bee20d42090c908c43fb0..88a0e9f9ce9c5ff491433055998e536d6ad6720e 100644 GIT binary patch delta 16981 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 delta 16939 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 Q+Kw0WbQOth+(9n