mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-29 00:31:52 +00:00
142 lines
4.2 KiB
QBasic
142 lines
4.2 KiB
QBasic
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
|
|
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
|
|
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
|
|
32 POKE LA,15
|
|
33 POKE DP,192
|
|
34 POKE DP,168
|
|
35 POKE DP,8
|
|
36 POKE DP,15
|
|
40 PRINT "UTHERNET II READY: 192.168.8.15"
|
|
100 REM *** Setup Socket
|
|
102 PRINT "** Setting up Socket 0"
|
|
105 POKE HA,0:POKE LA,26: REM RX MEMSIZE
|
|
110 POKE DP,3: REM 8kB RX buffer
|
|
115 POKE DP,3: REM 8kB TX buffer
|
|
200 REM *** Setup TCP MODE on SOCKET 0
|
|
205 POKE HA,4: POKE LA,0: REM *** 0x400 mode
|
|
210 POKE DP,65 : REM *** 0x41 MAC FILTER (non-promisc) TCP
|
|
300 REM ** Setup Source PORT
|
|
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
|
|
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
|
|
'
|
|
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
|
|
'
|
|
600 REM *** Connection opened, Listen
|
|
605 POKE HA,4: POKE LA,1: REM *** 0x401 command register
|
|
610 POKE DP, 2: REM *** LISTEN
|
|
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
|
|
'
|
|
700 REM *** Wait for incoming connection
|
|
705 POKE HA,4: POKE LA,1: REM *** 0x401 command register
|
|
710 POKE DP, 2: REM *** LISTEN
|
|
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
|
|
750 GOTO 700: REM *** Repeat until connected
|
|
'
|
|
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
|
|
830 REM DELAY?
|
|
840 GOTO 800
|
|
'
|
|
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
|
|
'
|
|
1000 REM *** PRINT PACKET
|
|
1005 POKE HA,RA/256: POKE LA,RA-((RA/256)*256)
|
|
1010 FOR I=1 TO SI
|
|
1020 C=PEEK(DP)
|
|
1030 IF C<>13 THEN PRINT CHR$(C);
|
|
1040 NEXT I
|
|
'
|
|
' TODO: handle wraparound of 8kb buffer
|
|
'
|
|
1100 REM *** Update read pointer
|
|
'"HTTP/1.1 200 OK\r\n"
|
|
'"Date: %s\r\n"
|
|
'"Server: VMW-web\r\n"
|
|
'"Last-Modified: %s\r\n"
|
|
'"Content-Length: %ld\r\n"
|
|
'"Content-Type: %s\r\n"
|
|
'"\r\n",
|
|
1200 REM *** SEND RESPONSE
|
|
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)
|
|
1230 A$=A$+"Content-Type: text/html"+CHR$(13)+CHR$(10)
|
|
1250 A$=A$+CHR$(13)+CHR$(10)
|
|
1260 A$=A$+"<html><head>test</head><body><h3>Apple2 Test</h3></body></html>"
|
|
1270 A$=A$+CHR$(13)+CHR$(10)
|
|
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
|
|
1920 REM *** SHOULD MASK WITH 0x1ff
|
|
1925 T%=TF/8192:TF=TF-(8192*T%)
|
|
1930 TA=TF+16384:REM $4000
|
|
1935 SI=LEN(A$)
|
|
1940 PRINT "TX OFFSET=";TF;" TX ADDRESS=";TA;" TX SIZE=";SI
|
|
2000 T%=TA/256
|
|
2005 POKE HA,T%: POKE LA,TA-(T%*256)
|
|
2010 FOR I=1 TO SI
|
|
2020 POKE DP,ASC(MID$(A$,I,1))
|
|
2040 NEXT I
|
|
2050 REM ** UPDATE TX WRITE PTR
|
|
2060 POKE HA,4: POKE LA,36: REM *** 0x424 TX write ptr
|
|
2075 TA=TA+SI
|
|
2080 T%=TA/256
|
|
2085 POKE HA,T%: POKE LA,TA-(T%*256)
|
|
2100 REM *** SEND
|
|
2105 POKE HA,4: POKE LA,1: REM *** 0x401 command register
|
|
2110 POKE DP, 32: REM *** SEND
|
|
5000 REM *** CLOSE
|