EDU25 Basic

If you've been following along the story from the SBC6120 and IOB6120 pages, we've got a really impressive PDP-8 system:

  • 32Kword PDP-8/E compatible CPU (less timeshare option).
  • Separate 32Kword firmware with debugger.
  • PDP-8/E style front panel switches and lights.
  • Parallel IDE interface for hard disk, CF, whatever.
  • Console terminal interface.
  • CF Interface, for even more disk storage.
  • 2MB RAM-disk with battery backup.
  • VT52 emulation using PS2 keyboard and VGA display.
  • 3 additional RS-232 terminal interfaces.
  • Parallel printer port.
  • Crystal controlled RTC and Time-of-day clock.
  • Expandable I/O bus, etc.

    The trick is to make it do something interesting, showing the capabilities of the system in the process.

    One unfortunate fact that has always disappointed me is that the H6120 chip used in the Decmates and in the SBC6120 does memory management, but does not include the time-sharing option. So it isn't immediately clear how to get all five of those terminals (VT52, original console, plus 3 more) to do something.

    I want to credit Ethan Dicks with the idea of using EDU25 BASIC to show off the SBC6120 and IOB6120. In February of 2010, Ethan Dicks and Mike Roach had a conversation about using EDU25 BASIC this way in the Spare Time Gizmos Yahoo discussion group. Mike pointed out that the known copies of EDU25 BASIC were corrupted.

    In late May of 2011, Ethan was looking in the classic computer mailing list for a valid copy of EDU25, and Dave Gesswein mentioned that the EDU20 binaries work. That got me thinking about using the EDU20 binary to reconstruct EDU25. In principle, if EDU20 and EDU25 are sufficiently similar, one need only locate the analogous code in EDU20, dis-assemble it, and use that to reconstruct the EDU25 code.

    A bit of background: Among DEC's time-sharing systems, the Edusystems were nice multi-user BASIC systems, at a variety of price points. One of these, EDU25 BASIC, is the largest time-sharing (as opposed to batch processing) BASIC that does not require the hardware time-sharing assist. Conveniently, EDU25 BASIC supports 5 users. (The manual mentions 8 users -- was there ever a patch for that?).

    The problem: EDU25 BASIC has been lost for decades. At least sort of. Someone long ago archived the source code for EDU25 basic, which was great, but somehow along the line, one disk block of the file containing the source code was over-written with zero bytes. This resulted in a file which decidedly did not compile.

    Trying to move code from EDU20 BASIC didn't work out all that well, as I wasn't able to figure out a lot of information about EDU20 (available only in binary form) that I could use in EDU25. However, I did do a bunch of searching around, and found many pieces of source code around with similarities to the EDU25 code.

    The missing code in EDU25 is mostly part of the floating point output routine. Floating point output routines are common in many larger PDP-8 software projects, and many of them follow similar logic. The remainder of the missing code are: a look-up table for the 'modify' command, part of the linked list of commands pertaining to 'stop', the floating point constant 10, and about half of a helper routine used by the corrupted floating point output routine.

    In early June 2011, I was able to publish a "restored" EDU25 BASIC, which I called 'edu25r'. It is unlikely that my 'restored' version is identical to the original EDU25. There just isn't enough information available to verify it. Moreover, my version outputs all six digits, even for small integer values, where the original almost surely printed something without all the zeroes after the decimal point.

    EDU25 is quite flexible about the terminal arrangement, allowing one to specify the type of terminal controller and the I/O addresses of the terminals. In addition, there is a dialog which allows you to assign variable amounts of memory to particular users (but that is only useful on machines without enough memory to give everyone a whole 4K memory field). The thing that isn't very flexible is that EDU25 is designed to run stand-alone, and uses it's own TC08 driver to save and load the users' BASIC programs. Moreover, the system runs with interrupts enabled, so disabling interrupts to call the OS/8 drivers is not really an option.

    What I did about this (after some study), was to replace the DECTape driver, starting at DTAPE, with a simple driver for the ram-disk, which has the same block size (128 words) as the DECTape. I also patched some locations to contain the correct default values for the addresses of the SBC6120/IOB6120 serial ports. This patched version I called 'edu25s'.

    The correct sequence of answers to the initial dialog questions is illustrated here:

    Started up, waiting for answers.

    Answers for 5 users.

    You still get the warning about the "ILLEGAL OS/8 DEVICE" because I haven't bothered to write any code to reboot OS/8 (just press reset). You should get the "READY" prompt on each active terminal.

    To create programs in the system catalog, create text files (the ^Z is important!) on VMA0: with the extension ".E8". Extensions ".E0" to ".E4" can also be used to create or retrieve files in the individual (to each terminal) catalogs.

    I also spent some time later in June 2011 porting many of the "101 Computer Games".

    All this material can be downloaded here:
    EDU25 BASIC for the SBC6120 Source code, listing file, and BIN format. You'll want to LOAD and "SAVE SYS:EDU25S;20200=1000" to create an executable.
    EduSystem Handbook Describes the dialects of BASIC and features of the various Edusystems. Original URL.
    BASIC Games The games that seem to run in EDU25 BASIC.
    SBC6120 Ramdisk patch The source code for the Ramdisk routine that overlays the original DECTape routine.
    Unported BASIC Games The games that were not feasible to port. Most are too large to fit and run in a single 4K field of memory, but a few use language features not found (nor easily emulated) in EDU25 BASIC.

    Last updated on 02/25/23 02:21