From db067ba91c578977aa50f3524c348d36acc58ccb Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Fri, 16 Dec 2016 16:47:25 -0500 Subject: [PATCH] webserver: add faster memcpy, but comment out --- ethernet/Makefile | 8 ++++-- ethernet/ethernet.dsk | Bin 143360 -> 143360 bytes ethernet/memcpy.s | 58 ++++++++++++++++++++++++++++++++++++----- ethernet/webserver.bas | 22 +++++++++++++++- 4 files changed, 79 insertions(+), 9 deletions(-) diff --git a/ethernet/Makefile b/ethernet/Makefile index 16f9a796..b8f956ba 100644 --- a/ethernet/Makefile +++ b/ethernet/Makefile @@ -2,7 +2,10 @@ DOS33 = ../dos33fs-utils/dos33 TXT2BAS = ../asoft_basic-utils/tokenize_asoft MAKEB = ../dos33fs-utils/make_b -all: ethernet.dsk memcpy.o +all: ethernet.dsk + +memcpy: memcpy.o + ld65 -o memcpy memcpy.o -t none memcpy.o: memcpy.s ca65 -o memcpy.o memcpy.s -l memcpy.lst @@ -29,4 +32,5 @@ ethernet.dsk: SETUP.BAS \ $(DOS33) -y ethernet.dsk BSAVE -a 0x4000 ./c/vmw_logo.png clean: - rm -f *~ *.BAS R.TXT *.o *.lst + rm -f *~ *.BAS R.TXT *.o *.lst memcpy + diff --git a/ethernet/ethernet.dsk b/ethernet/ethernet.dsk index e5591fe8c964899b2c9795ae1ceb0bc4c69f7006..7a68059885318a839f41f9326c24783b9e7d64f9 100644 GIT binary patch delta 10831 zcmeHNdvp|4p1${XbyuaTx~r3ZRdsczJ4J#?XhU}=L z=ggkuoFrY{q+Cd98V1pR4Z$As+0EhQJ??&YTe0kc#L<5hzHiKCKe0^G`t_@u4!>>1& z)ou^m=sVch9*I>a_JzyK%frc*wyqR-Ah6B1t121=PX}hp`@-Z?xS_r=+?ne5QL3vO z91Gwd(mr%c5TEKh6y6@ZO5Rl$Bds3`P77(RtHP~q-QlLTAGJ1u7lUeh5{l@ZAhyqx zq|bw?P*-tA(HpH=8*W;)ZslSHY%Ii6XWkUtQrI0bLgB*FaU@i%Hr$=6Z*S`cy9@ED znIgJ4q~85B+=i|TsiD1a3fdD=7w&~o6bh@`_rjHOBz$gMQ&;Bw(pkl2pf>!MaW|wh zu_H}gpfilyUl8+p!rjGN(qK^-U;V;^*vWb*#>UVXmVB`vZD0{%^2p~e_ro{`DTZTs za`gFrSj8chaWDc6XhGaM4E6F@o+F{Vcw9YaJbH@93+9B- z8$8}LN2&aXzXuxA+t!|H4X;_XXnF5i0PXj|K84J=c5>OuE6wu?sIdPGYELJYv_Am# zr(-@Gts$6i|H=%OT-v*6d3f29@T%3lD|;7%+w8bvZn<-Z{Rh~Y%A783Y%c?Q>=wLp zo)^7p$D8L$=o34BaBdh`9r*BEA1^q@qg|7tN3ZCr1gw8IB;y9hx(c0 zDug>$`>7+2s}YXQEfs$2SdRvSf9SwJpXWnX0Y5)4V7WlJ9X~WTWSJ)1jbE7S%DUcgmRP!)joVIiwV3z+fwSDwmClrQHNP64 zR9)8J)dIeDR#|p;rC)z7dURJExp$O5#j-Elm};r-nF_f4X3MVHXdFz+ztMtUs2@LJ zX8vuKwrt$CY}^I;+bo?;nbI~hZd(i3n2#qe6p@;b(+h+CJ^7DXI_oo?v-;yzlWMf| zDz4UM`r~}Od0~S4D*q` zG+71?7eH#a7UifGh5Ys>i^0DXSg75}Oe{)Hl5w0Yu#v;pUn9qT$>NK^Cj|_(TN~lg zU9o6Y6gXY@@H8dQ=W!RRZ*Tve!t;PMbioyM^sap7FTn*H2J>pUA z@3NJPdpA}rUAy8c1sr!xr}~txRBL0pb$Yld-I7Y+*4u69V;6q7K7c%Ke5k%OsJJhq zwApX!CsPu2|Ckz@vzcxT8zk?1_w|%9-<_#sDt$=`-0r@W(iVSYr~6(?OS|eSGw(=? zOTaVkr_Bpm+DI+bdIoQ}@x^xpEa%+&@w_`^WcR2?5>U33d!EJbHu%TQ@H|KDo~_-$ zqE*UK?WUKlxctiAi5o8@Csrz;*K+`W-ynupd!DBrBdd-qkFB1Aa3Y*Op;P&F!o#W7CFMc>V-m={LiRxSf zBh({aU{$BBfnIEH3{*VpU2Gkk!Gx0Nt1kwJz00ggvI>rSe`zD>@_uQ3aalj9nt%4< zw#IT4@~Q7W0gKTjAAY3KJ-*rJqnkR1E&d)~fbLV8I#a0x8Ff=9xX!0eeG)3@S3W$@ zSc(q&@Tt4po{Voj-90>Q&JrYgPDFX4nt2iiQIV*A_9XP8<)Zq@TG;ITiMWH-mSLiy zjg0TGh`&iSIDaE%=Wq-O1Y?ICn1+JU~_DT5jCbv3kDs%`3r7yMEFG}Ciec+^|KD`dgl+DjG7^cPt zU4EJAuFrJq%d^NIW`=HNvL9bRT|$ff>V@m!`0yHk6=N(@ZOMZz{%U6M*(qR;A7`dd zK(F}K?dzc%z3*37PlEv@$T-$qE(GLfguz-}C#yfKhcdcU#vKO(XqAjlt@gTakWUK3 zv*0Nizt%hf9hKF4Hb6IbT>guotxRx6R`+axKI96h+v}lk-+eqov3V?uA$x9LH;*Wm zXYH8Z9Vp1-^Xz$!Jb?iWWDsLvDAML7)GO{smwM2q7#j!VDMgRe#1ps7P8_VMuI*1p zW+%vOEn_Re)>w62BpQiTRz|AHwxo_^p?*+94&sqmEE2DZMk=+hqFS?>nn*QxjIAQq zRmCE)+R8|*E*^=;DkF7~c(gVWn?w$3BDJKgei+>}7*uZ`10S%H$i?I$vt#`bcHrb@@sSmnz-tc9gmD{EuP#)^G=KkOZ_s+nt`XRI)3 zb@hKNOmob_w3HO4hLTJ}n}+p?gLRRHlElHtkT4xN>9>d?1RZXI$Nb?73q4$T-|hkAzBp_`35^pIJH z`pi0X#;@0*Fa0@n$Z6K03Zo7+8Fgs(h&ptWQHLHh>(DQ=b?C5JhtA4c9h!ikL2qcC z-V_`3rXx#lmX1zuuFle%TSlcfI}LiXz@Rrv2kFf}j6!dAnDl0^L2vp;r#Ec|z3CaG zH$Og~-rQ)=8@EYsx=ng>vq^8h2^sXpl1p!d9C}k`(3_}1ZxUI0Glk-L-abTcctN8# z7{&+oo#P>EM|O*yvRmyo%>QeE=dHYrr+J3YL?0 z&=?6FBcX)cj*(D8u@o>yLjP7Iw0Lw9`W97B9z=6@cl*RxMeG^KJ1h=CL!r+f?S=)j z3?-lp2nJY5S+H722}rOEft6s@z{=3#1X>_l&g?c+UyS zHV5rs9C;4b!8v#b>6(2@7!#Mq#HBHDX-r)Dn}|zwCWq_F<#6CCLf1y+aqF@a?Ov0j z9m-O)W4RRV_roaK7m_X&`Av#eHk_i>4yS0n21Wa+Nzv{%DcUOrMSCNcqJ8E!q$0aP z(Mk-8Rx^U4EjB3HwI)T|nx$wDnH24qNzvYubqDHr9Gvk3rFXH9AGBFeqB>AVo``Ptg_`6z$7G!-1+aDO#^d z(cUyDTKVZvjsx{+Xvl$L!c_4=Q#_2EDLq@d!%2)Q+W`KP5^{c@Be`fF)ea|=J=&*% zfuY~2-$_1yYk2v9+0|QRjX;)+c9e?Hc%bB;|ed)-FV=wO<@uPWG+xUEk7Et?P z8Py(wMTq6pXb6T_KVYoX8&Cc2t>57rB#E^EhM`WK{_N|o)Sri-L?OVi>iyaUj9opX z{iiJl-X;H=h=s;eUfQeaLAnkY^|D^h%lm+jh=o3jkMdc4HXrR{e0e_B$N6}l-RJNL zA`powC|X2K96Smg2jE0FfF54~EziZ_cl;E$_}7Hk3&asZY>hZvh@FeiHF*pj_6kwg zVV8=U4ttYm=&*Z4L;naI5_9yASH)cY;{$x%bU(67h722!hRLuKq+v4bY)O}4S4z4J z3-44{O@l%BJdQR`5MGgT#E;XGky*g6iLg*qA(2wu<^Jh_LJZrU-kt zUl(EFA@!bm7=b77Woa+{wqMJuZ}4^L05wiFjNO`qJgTvqlucu|M;^`Cy$1hhT13%+ z=Ie$Mfvm6F8W`#8E>+u-P=Z@AKhrNg5E#|fEeh(c?u200)twwX&(*zzBrtJx&jgK} z8eeF*y0Z%nSGT{=kUick%*m-!g+n>@U7_ykqLA+D@*&gJy^0cTqVDP*K-Uog6Y8$+ z0k|3R(87tjt9t-$fjr7{h=K$pC}mw;B4|pKWR+|ZEiqD_#7dmROLoa234Y)o^w#Z< zKMEaABbki9G7;CaNg&FUY?W;?Ei-bS%*ve1%k}^WK$SlN#hewNH){qcV65PV8N{U~ z7J4+XWd;Z^Ea>~Nw5AM9VceQlt`&`{Bk^ceZ8ULE`xhfNM7m6q%$u2yEJjHFjpc8xf>~OfWCV z205|C-|1EqE zR%lT0EjLbd|M%u;rCT>oLsQ&?=4pp}gn4=;4kta-4Q|6bg-_u2^{NtkRiY-71Ca@DGh;=nk*ul)4}Gj&Mq!#~mpN{obn^rSLQL(1ZaT(_9b>)zb%Zh=^kt{B^s636n+P8s6C`?L4 zwwQ$NVGXm)Vp0T($Of~>QlxDSjbaigvK7%qOi^ADTf`OdMfM^`k)QyDykDRY!6;i{ z6suy(Rv4$kD0vF2a0;*36^A0I{6rM6Ivq}dcp&V{NFL#BRQ_H0(PQ4m*b8?5+ZXKq E3-fL)&;S4c delta 6665 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 WHo`^th!8Ov2$|dv$R~{ied1sIO?{mJ diff --git a/ethernet/memcpy.s b/ethernet/memcpy.s index 03990e76..492f9752 100644 --- a/ethernet/memcpy.s +++ b/ethernet/memcpy.s @@ -1,20 +1,66 @@ .define EQU = PTR EQU $06 +PTRH EQU $07 - lda #0 +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 #8 + ldx #SIZEH ; number of 256-byte blocks + beq copy_remainder ; if none, skip ahead + ldy #0 -copy_loop: +copy256: lda (PTR),y - sta $5000 + 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 - bne copy_loop dex - bne copy_loop + bne copy_remainder rts + + diff --git a/ethernet/webserver.bas b/ethernet/webserver.bas index 652479f3..150f6b3f 100644 --- a/ethernet/webserver.bas +++ b/ethernet/webserver.bas @@ -28,6 +28,15 @@ 33 POKE DP,192:POKE DP,168:POKE DP,8:POKE DP,15 40 PRINT "UTHERNET II READY: 192.168.8.15" ' +' Setup Memcpy routine +' +50 FOR I=0 TO 72: READ X: POKE 768+I,X:NEXT I +51 DATA 169,0,133,6,169,64,133,7,162,11,240,36,160,0,177,6 +52 DATA 141,183,192,213,9,208,15,217,8,0,208,10,169,64,141,181 +53 DATA 192,169,0,141,182,192,200,208,229,230,7,202,208,224,162,10 +54 DATA 177,6,141,183,192,217,8,0,208,10,169,64,141,181,192,169 +55 DATA 0,141,182,192,200,202,208,232,96 +' ' Setup Socket 0 ' 100 REM *** Setup Socket 0 @@ -210,10 +219,11 @@ ' ' Check for buffer wraparound ' -1942 BW=0 +1942 BW=0:BO=0 1945 IF (SI+TA>=24576) THEN BW=1:BO=24576-TA:PRINT "TX BUFFER WRAPAROUND IN ";BO ' ' Write data to TX buffer +' First write header ' 2000 T%=TA/256 2005 POKE HA,T%: POKE LA,TA-(T%*256) @@ -222,6 +232,9 @@ 2017 IF BW=0 THEN GOTO 2020 2018 BO=BO-1: IF BO=0 THEN POKE HA,64:POKE LA,0:BW=0 2020 NEXT I +' +' Write disk part +' 2025 FOR I=1 TO FS 2026 C=C+1: IF C=50 THEN PRINT ".";:C=0 2030 POKE DP,PEEK(16383+I) @@ -230,6 +243,13 @@ 2035 NEXT I 2040 PRINT ' +' The above is slow +' Intead use our machine language routine +' +'2025 B%=BO/256:POKE 9,B%:POKE 8,BO-(B%*256) +'2027 B%=FS/256:POKE 11,B%:POKE 10,FS-(B%*256) +'2030 CALL 768 +' ' Update TX write ptr ' 2050 REM ** UPDATE TX WRITE PTR