From 43ab033417c68de21687b4cb09fc5884b8c557fc Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Wed, 14 Dec 2016 11:29:18 -0500 Subject: [PATCH] webserver.bas: move to slot 3, add more comments --- ethernet/webserver.bas | 124 ++++++++++++++++++++++++++++------------- 1 file changed, 85 insertions(+), 39 deletions(-) diff --git a/ethernet/webserver.bas b/ethernet/webserver.bas index 2d6c5f33..fb35d355 100644 --- a/ethernet/webserver.bas +++ b/ethernet/webserver.bas @@ -1,30 +1,33 @@ 1 REM *** Setup UTHERNET II - W5100 -2 REM *** Assumes slot 5 ($C0D0) -3 SLOT=49360: REM *** $C0D0 -4 MR=SLOT+4: REM *** MODE REGISTER C0D4 -5 HA=SLOT+5:LA=SLOT+6: REM *** HIGH/LOW ADDR $C0D5,$C0D6 -7 DP=SLOT+7: REM *** DATA PORT $C0D7 +' SLOT0=$C080 49280 SLOT4=$C0C0 49344 +' SLOT1=$C090 49296 SLOT5=$C0D0 49360 +' SLOT2=$C0A0 49312 SLOT6=$C0E0 49376 +' SLOT3=$C0B0 49328 SLOT7=$C0F0 49392 +' +' Set up the memory addresses to use +' +2 REM *** OURS IS IN SLOT3 ($C0B0) +3 SLOT=49328: REM *** $C0B0 +4 MR=SLOT+4: REM *** MODE REGISTER C0B4 +5 HA=SLOT+5:LA=SLOT+6: REM *** HIGH/LOW ADDR $C0B5,$C0B6 +7 DP=SLOT+7: REM *** DATA PORT $C0B7 +' +' Init the W5100 +' 10 REM *** Init W5100 12 POKE MR,128 : REM RESET W5100 14 POKE MR,3 : REM AUTOINCREMENT -20 REM *** Setup MAC Address -21 REM *** 41:50:50:4c:45:32 +20 REM *** Setup MAC Address 41:50:50:4c:45:32 22 POKE HA,0:POKE LA,9 -23 POKE DP,65 -23 POKE DP,80 -23 POKE DP,80 -23 POKE DP,76 -23 POKE DP,69 -23 POKE DP,50 -30 REM *** Setup IP Address -31 REM *** 192.168.8.15 +23 POKE DP,65:POKE DP,80:POKE DP,80:POKE DP,76:POKE DP,69:POKE DP,50 +30 REM *** Setup IP Address 192.168.8.15 32 POKE LA,15 -33 POKE DP,192 -34 POKE DP,168 -35 POKE DP,8 -36 POKE DP,15 +33 POKE DP,192:POKE DP,168:POKE DP,8:POKE DP,15 40 PRINT "UTHERNET II READY: 192.168.8.15" -100 REM *** Setup Socket +' +' Setup Socket 0 +' +100 REM *** Setup Socket 0 102 PRINT "** Setting up Socket 0" 105 POKE HA,0:POKE LA,26: REM RX MEMSIZE 110 POKE DP,3: REM 8kB RX buffer @@ -36,62 +39,85 @@ 303 PRINT "** Setting up to use TCP port 80" 305 POKE HA,4: POKE LA,4: REM *** 0x404 port 310 POKE DP,0:POKE DP, 80: REM *** http port 80 +' +' OPEN the socket +' 400 REM *** OPEN socket 404 PRINT "** OPENing socket" 405 POKE HA,4: POKE LA,1: REM *** 0x401 command register 410 POKE DP, 1: REM *** OPEN ' +' Check return value +' 500 REM *** Check if opened 505 POKE HA,4: POKE LA,3: REM *** 0x403 status register 510 RE=PEEK(DP) 515 PRINT "** STATUS IS ";RE; 520 IF RE=19 THEN PRINT " OPENED":GOTO 600 -530 IF RE=0 THEN PRINT " CLOSED, ERROR" -540 POKE HA,4: POKE LA,1: REM *** 0x401 command register -550 POKE DP, 16: REM *** CLOSE -560 END +530 IF RE=0 THEN PRINT " CLOSED, ERROR": GOTO 5000 +540 PRINT "UNKNOWN ERROR ";RE +550 GOTO 5000 +' +' LISTEN on the socket ' 600 REM *** Connection opened, Listen 605 POKE HA,4: POKE LA,1: REM *** 0x401 command register 610 POKE DP, 2: REM *** LISTEN +' +' Check return value +' 620 REM *** Check if successful 625 POKE HA,4: POKE LA,3: REM *** 0x403 status register 630 RE=PEEK(DP) 635 PRINT "** STATUS IS ";RE; 640 IF RE=20 THEN PRINT " LISTENING":GOTO 700 -650 IF RE=0 THEN PRINT " CLOSED, ERROR" -655 PRINT "UNKNOWN" -660 POKE HA,4: POKE LA,1: REM *** 0x401 command register -670 POKE DP, 16: REM *** CLOSE -675 END +650 IF RE=0 THEN PRINT " CLOSED, ERROR":GOTO 5000 +655 PRINT "UNKNOWN ERROR ";RE +675 GOTO 5000 +' +' Wait for incoming connection ' 700 REM *** Wait for incoming connection 705 POKE HA,4: POKE LA,1: REM *** 0x401 command register 710 POKE DP, 2: REM *** LISTEN +' +' Check for result +' 720 REM *** Check if successful 725 POKE HA,4: POKE LA,3: REM *** 0x403 status register 730 RE=PEEK(DP) 740 IF RE=23 THEN GOTO 800 -745 IF RE<>20 THEN PRINT "WAITING: STATUS=";RE +745 IF RE<>20 THEN PRINT "WAITING: UNEXPECTED STATUS=";RE 750 GOTO 700: REM *** Repeat until connected ' +' Connected, repeat waiting for incoming data +' 800 PRINT "CONNECTED" 802 POKE HA,4: POKE LA,38: REM *** 0x426 Received Size 805 SH=PEEK(DP):SL=PEEK(DP) 810 SI=(SH*256)+SL 820 IF SI<>0 THEN GOTO 900 +' +' Should we delay? busy polling seems wasteful +' 830 REM DELAY? -840 GOTO 800 +840 GOTO 802 +' +' We have some data, let's read it ' 900 POKE HA,4: POKE LA,40: REM *** 0x428 Received ptr 905 OH=PEEK(DP):OL=PEEK(DP) -910 RO=(OH*256)+OL -920 REM *** SHOULD MASK WITH 0x1ff but how? -930 RA=RO+24576:REM $6000 -940 PRINT "READ OFFSET=";RO;" READ ADDRESS=";RA;" READ SIZE=";SI +910 RF=(OH*256)+OL +920 REM *** MASK WITH 0x1ff +925 R%=RF/8192:RF=RF-(8192*R%) +930 RA=RF+24576:REM $6000 +940 PRINT "READ OFFSET=";RF;" READ ADDRESS=";RA;" READ SIZE=";SI +' +' Print received packet ' 1000 REM *** PRINT PACKET -1005 POKE HA,RA/256: POKE LA,RA-((RA/256)*256) +1003 R%=RA/256 +1005 POKE HA,R%: POKE LA,RA-(R%*256) 1010 FOR I=1 TO SI 1020 C=PEEK(DP) 1030 IF C<>13 THEN PRINT CHR$(C); @@ -99,7 +125,15 @@ ' ' TODO: handle wraparound of 8kb buffer ' +' +' TODO: Update read pointer +' 1100 REM *** Update read pointer +1110 POKE HA,4: POKE LA,40: REM *** 0x428 Received ptr +1120 RA=RA+SI +1130 R%=RA/256 +1140 POKE DP,R%: POKE DP,RA-(R%*256) +' '"HTTP/1.1 200 OK\r\n" '"Date: %s\r\n" '"Server: VMW-web\r\n" @@ -108,15 +142,17 @@ '"Content-Type: %s\r\n" '"\r\n", 1200 REM *** SEND RESPONSE +1201 M$="test

Apple2 Test

"+CHR$(13)+CHR$(10) 1205 A$="HTTP/1.1 200 OK"+CHR$(13)+CHR$(10) 1210 A$=A$+"Server: VMW-web"+CHR$(13)+CHR$(10) -1220 A$=A$+"Content-Length: 65"+CHR$(13)+CHR$(10) +1220 A$=A$+"Content-Length: "+STR$(LEN(M$))+CHR$(13)+CHR$(10) 1230 A$=A$+"Content-Type: text/html"+CHR$(13)+CHR$(10) 1250 A$=A$+CHR$(13)+CHR$(10) -1260 A$=A$+"test

Apple2 Test

" -1270 A$=A$+CHR$(13)+CHR$(10) +1270 A$=A$+M$ 1280 PRINT "SENDING:":PRINT A$ +' ' TODO: read TX free size reg (0x420) +' 1900 POKE HA,4: POKE LA,34: REM *** 0x422 TX read ptr 1905 OH=PEEK(DP):OL=PEEK(DP) 1910 TF=(OH*256)+OL @@ -138,4 +174,14 @@ 2100 REM *** SEND 2105 POKE HA,4: POKE LA,1: REM *** 0x401 command register 2110 POKE DP, 32: REM *** SEND +' +' Return to reading +' +4000 GOTO 802 +' +' Close the socket +' 5000 REM *** CLOSE +5010 POKE HA,4: POKE LA,1: REM *** 0x401 command register +5020 POKE DP, 16: REM *** CLOSE +5030 END