Slashdot Mirror


A TCP/IP Stack and Web Server In BASIC

A writes "Back in the day, a BASIC interpreter was standard on every home computer system and everyone had to know at least a little BASIC to be able to use their computer. But who would have thought that you could write some serious networking code in BASIC over 20 years later? Just a few days ago, Lee Davison released the BASIC source code for his 6502-based Ethernet web server. The web server runs under his EhBASIC interpreter on the 1 MHz 6502 CPU and is able to blast out web pages at an amazing speed of 20-35 seconds per page!" Sure, it's not really practical, but I give it cool points.

27 of 251 comments (clear)

  1. Down in three seconds flat by mcgroarty · · Score: 5, Funny

    If you want to slashdot it, the IP address is visible in some of the screen shots. It's 169.254.226.132, but I'm not cruel enough to actually turn that into a hyperlink. :-)

    1. Re:Down in three seconds flat by ultrapenguin · · Score: 5, Informative

      NetRange: 169.254.0.0 - 169.254.255.255
      is one of those "non-routable private IP address spaces".

      RTFRFC

    2. Re:Down in three seconds flat by Anonymous Coward · · Score: 5, Funny

      If you want to slashdot it, the IP address is visible in some of the screen shots. It's 169.254.226.132, but I'm not cruel enough to actually turn that into a hyperlink. :-)

      Here you go :)

    3. Re:Down in three seconds flat by Kevinv · · Score: 4, Funny

      How could you tell if it were slashdotted? 20 seconds per page is already a slashdotted server....

    4. Re:Down in three seconds flat by FyRE666 · · Score: 5, Funny

      If you want to slashdot it, the IP address is visible in some of the screen shots. It's 169.254.226.132, but I'm not cruel enough to actually turn that into a hyperlink. :-)

      Yeah, and anyone stupid enough to believe it'll work outside of a local network should also try 127.0.0.1 for a cool Pr0n site!

    5. Re:Down in three seconds flat by beebware · · Score: 5, Funny

      Cool - you're right - there is some really good porn on http://127.0.0.1/ , but it must be a really old site and I'm sure I've seen it before...

  2. To quote Zahpod Beeblebrox... by Kevinv · · Score: 5, Funny

    ten out of ten for style, but minus several million for good thinking.

    I actually have some Apple //e's lying around. Maybe I'll dig up an ethernet card and see if i can get this to work.

  3. Imagine.. by iLEZ · · Score: 5, Funny

    Imagine a beowulf cluster of... Nah...

    --
    You cant fight in here, its a war room!
  4. 20-35 Seconds Per Page?!? by travail_jgd · · Score: 5, Funny

    "Pre-slashdotted for your convenience."

  5. I get a slightly faster transfer speed by dbleoslow · · Score: 5, Funny

    with my fax machine. It's not nearly as cool though.

  6. Looks more like assembler to me... by dioscaido · · Score: 5, Interesting

    Can the code really be called BASIC? It looks more like tons of in-line assembly code, wrapped in a few ifs and loops.

    1. Re:Looks more like assembler to me... by yellowstone · · Score: 4, Interesting
      Can the code really be called BASIC?
      Old-skool BASIC was really heinous:
      • Variable names limited to two characters
      • Only data types are integers and strings
      • No structured data types, only (fixed size) arrays
      • No names in control flow, just GOTO 100 and GOSUB 9000. No parameters for subroutines.
      • Plus, it was typically interpreted, for extra slowness at run time.
      It looks more like tons of in-line assembly code
      It's worse than assembly. At least in assembly, you can have longer identifiers, and use them in data and control flow statements.
      --
      150 Opening BINARY mode data connection for slashdot.sig (129323052 bytes).
    2. Re:Looks more like assembler to me... by yellowstone · · Score: 4, Informative
      Variable names limited to two characters

      What BASIC had that limitation? Surely none that I ever used as a kid (mid 80s).

      The BASIC on the Commodore C64/C128 did. The BASIC on the TI-99/4 did. The BASIC on the PDP-11/45 where I first programmed did by default (you could issue an EXTEND keyword to allow longer identifiers -- back then I didn't see why you'd want to bother with all that typing...)

      (mid 80s).
      Newb. ;-)
      --
      150 Opening BINARY mode data connection for slashdot.sig (129323052 bytes).
    3. Re:Looks more like assembler to me... by McDutchie · · Score: 4, Informative
      Old-skool BASIC was really heinous:

      * Variable names limited to two characters
      This restriction was not universal, it depended on the dialect (there was, and is, no such thing as a standardized BASIC language).
      * Only data types are integers and strings
      I'm pretty sure that all variants had floating point data types as well.
      * No structured data types, only (fixed size) arrays
      But you could DIM them dynamically using a variable.
      * No names in control flow, just GOTO 100 and GOSUB 9000. No parameters for subroutines.
      Mostly true, but control flow was a bit better than that: there was also ON X GOTO 10,20,50,80 (which would go to line 10 if X=1, line 20 if X=2, etc) as well as ON X GOSUB in the same way.

      Also, there were user-defined one-line functions with parameters, which could even be recursive, as in: DEF FNX(P1,P2)=Y where X is the function name, P1 and P2 are parameters and Y is an expression.
      * Plus, it was typically interpreted, for extra slowness at run time.
      No argument there!
  7. Source code has no copyright notice by Mostly+a+lurker · · Score: 5, Funny

    Isn't he worried about someone else commercialising this?

  8. I must be getting rusty. by mhandlon · · Score: 5, Funny

    I've looked at assembly and not understood it, I've looked at C and not understood it, and I think every time I have looked anything in perl I've not understood it. But, now the unthinkable has happened and I've looked at basic and not understood it.

    --
    Nyquil = Nectar of the devil
  9. data statements by magarity · · Score: 5, Informative

    It's the chuncking through those data statements at the end that helps really beats up performance. Defining all those as strings at the beginning will ameliorate that problem.

  10. EhBASIC by iantri · · Score: 5, Funny

    And here I was thinking this was some sort of obscure Canadian BASIC..

  11. BBC Basic was like that by DrSkwid · · Score: 4, Interesting

    inline-assembler
    definable functions
    re-entrant procedures

    http://www.bbcbasic.com/

    Sophie Wilson did a great job and did anyone at school in the UK who was interested in computing the biggest favour of all - she gave us the gift of learning structured programming from day 0

    --
    There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
  12. EhBasic? by headkase · · Score: 4, Funny

    When I first read its name, I thought it was Canadian. :)

    --
    Shh.
  13. Not new by wumpus188 · · Score: 4, Informative

    Actually, Parallax was doing this since what... 1992? They got TCP/IP stack for their BasicStamps too. But of course, their stuff runs a bit faster than 1MHz... :)

  14. it isn't complete by BoneFlower · · Score: 4, Funny

    Until it breaks mozilla while running fine in IE.

  15. Re:How long til it gets slashdotted? by gellenburg · · Score: 5, Funny

    Hmm... you're right.

    This "BASIC" Webserver & TCP/IP Stack will go down in the annals of History as being the first ever webserver to become /.'ed before it's address even makes it to /. to begin with. :-)

  16. Re:Next... by DrSkwid · · Score: 4, Interesting

    no problem

    %tcpserver 127.0.0.1 80 /home/www/webserver.rc

    --- webserver.rc ---

    #!/usr/local/bin/rc

    root = '/home/www/document_root'

    fn echo_response {
    echo 'HTTP/1.1 ' ^$response
    }

    fn echo_date {
    echo -n 'Date: '
    /bin/date
    }

    fn echo_content_type {
    echo -n 'Content-Type: '
    /usr/bin/file -m /usr/share/misc/magic.mime $path | /usr/bin/awk ' { print $2 } '
    }

    fn echo_content_length {
    echo -n 'Content-Length: '
    /bin/cat $path | /usr/bin/wc -c | /usr/bin/tr -d ' '
    }

    fn respond {
    echo_response
    echo_date
    echo 'Server: rc shell'
    echo_content_length
    echo_content_type
    echo 'Connection: close'
    echo
    /bin/cat $path
    }

    ifs = '
    '

    for (request in `{echo -n}) {
    url = $request(2)
    file = `{echo $url | sed 's/http:\/\/[^\/]*//' | tr -d \012}

    path = $root ^$file
    echo $path
    if (/bin/test -e $path) {
    response = '200'
    } else {
    response = '404'
    path = $root ^'/404.html'
    }

    respond
    }

    --
    There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
  17. R *this* FRFC. by L.+J.+Beauregard · · Score: 4, Informative
    There are more special IP ranges than the private network ranges in RFC 1918. They are documented in RFC 3330. The one in question is:

    169.254.0.0/16 - This is the "link local" block. It is allocated for communication between hosts on a single link. Hosts obtain these addresses by auto-configuration, such as when a DHCP server may not be found.
    --
    Ooh, moderator points! Five more idjits go to Minus One Hell!
    Delendae sunt RIAA, MPAA et Windoze
  18. oops, wrong version by DrSkwid · · Score: 4, Interesting

    unlike the others I wrote mine from scratch in response to the post

    sadly I posted a slightly wrong version

    here's the one that works

    http://www.proweb.co.uk/~matt/rc/webserver.rc

    it's only a toy, of course.

    http://server/../../../../../../etc/passwd

    will get you the passwd file

    --
    There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
  19. Re:Are you kidding? by pla · · Score: 4, Insightful

    VB is alive and well, and used for pretty much the same reason as original BASIC - simplicity.

    I would agree it still lives, but disagree about your reasons...

    VB strips away all the simplicity normally present in BASIC, in that if you know basic, you don't necessarily know VB (very similar to C vs JAVA... They have very similar atomic statements, but the different paradigm makes proficiency in one not map 1-to-1 to the other).

    VB excels in making pretty GUIs under Windows. I have yet to find a language that makes creating a spiffy user interface anywhere *near* so easy. People rave about JAVA for GUIs, but I would say that, line-for-line, it takes just as much work as using pure Win32. Tk does fairly well, as long as you like the system default of everything, but if you want more control, it makes you jump through all sorts of unpleasant hoops. But VB... Just no way to beat its level of GUI-oneness.

    Unfortunately, it crawls when it comes to execution speed. I remember writing an app for a professor back in college, did nothing but text processing and a few simple stats to compile student evaluation surveys. Running through a list of only 30-50 students took almost two minutes. Incidentally, I prototyped it in C (but he wanted a spiffy GUI, and I hadn't yet mastered raw Win32), and the same thing would finish in well under a second.