BASIC working on ITS

150 views
Skip to first unread message

AltairArchaeology

unread,
Jun 3, 2026, 9:43:36 PM (12 days ago) Jun 3
to PiDP-10
Hey all! 

While exploring the PiDP-10, I have to say that I prefer ITS by a large margin to TOPS-10. However, TOPS-10 lacks some of the more "mainstream" programming languages of the time, and since I know next to nothing about programming in MIDAS, LISP, Muddle, etc, I wanted to get a BASIC Interpreter up and running. It took some trial and error, but over about 4 hours I was able to find one that works, and now I'll share it with the community! But first, proof that it works is below:

20260603_20h50m37s_grim.png

I used a 1981 BASIC Interpreter found here: https://pdp-10.trailing-edge.com/basic17f/index.html 

I pulled the files I was interested in (BASIC EXE and BASIC HLP) off the disk using back10. You don't have to do this part - I provided the ITS dump disk image (see basic17f.tap)

To get this up and running:

- Start up pdpcontrol for ITS in the normal manner. (pdpcontrol start with octal 001 for data switches if using a PiDP-10)

- This next part can be done at any time, but I prefer to fully load ITS first before executing. From your terminal, type in pdp , press CTRL-E to stop the simulator. 

- Attach the .tap by typing in  attach mta0 <your directory path>/basic17f.tap . As an example, for my system I type in attach mta0 home/pidp-10/BASIC/basic17f.tap 

- SIMH will give you a message saying it is attached. From there, type in CONT to continue the simulator.

- Login to ITS like normal (<your username> ALTMON U) and then type in :DUMP

- Once DUMP loads, you'll be greeted by a _ prompt. Type in LOAD CRDIR

- DUMP will give you a "FILE=" prompt, type in *; * * (this will transfer all files on the disk into a directory called BASIC)

- When DUMP gives you another _ prompt, type in QUIT to exit from DUMP.

- Now we get to the fun part. Go to BASIC (I use :listf BASIC) and you should see two files: BASIC EXE and BASIC HLP. You can read BASIC HLP using :pr basic;basic hlp . This is the help program for the BASIC interpreter, but the interpreter itself doesn't load it on ITS in it's current state. 

- To get BASIC EXE to work with the :DEC program, you'll need to do a conversion. Type in :EXECVT BASIC;BASIC EXE . This will create a BASIC BAT file in the user directory of whoever you logged in as. I recommend moving it to the BASIC directory using :move <your user directory>;BASIC BIN,BASIC;BASIC BIN (for example :move lars;basic bin,basic;basic bin)

- Now you are ready to run. Type in :DEC BASIC;BASIC BIN and watch as the interpreter greets you with a READY, FOR HELP TYPE HELP

This BASIC Interpreter works... but it doesn't work well. It is slower than running native on TOPS-10, HELP doesn't work, and trying to SAVE will cause :DEC to crash. I get around this on Windows by connecting via TELNET with TeraTerm, writing my BASIC programs on Notepad, and then transferring them as files with a 500 M/S delay between lines. Here is an example of doing that below and the resulting running program:

POPCAL.png

I wouldn't use this for "serious" projects in its current state, but it can be fun to mess with. 

For those coming from "later" versions of BASIC, such as Microsoft BASIC (3.2 for the Intel 8080 and later), C64 BASIC, etc, you will find this version of BASIC quite different. It is rooted in 1968 Dartmouth BASIC, and uses those commands. For example, you type in SCRATCH instead of NEW to remove all lines of code. NEW provides a name to the file, which you can see in my screenshot above. You will also need to end all of your programs by typing in a final line with the command END or the interpreter won't run it. For fun, here are a few basic BASIC (heh!) programs to try. I pulled these from BASIC Programming Second Edition by John G. Kemeny and Thomas E. Kurtz.

DIVIDE, written 30 AUG 1970

100 READ N, D
200 LET Q = N/D
300 PRINT N, D, Q
400 DATA 147, 69
500 END

CONVRT, written 30 AUG 1970

100 READ M, C
110 LET M1 = M + C/100
120 LET I = M1*39.37
130 LET F=INT(I/12)
140 LET I=I-12*F
150 PRINT M, "METERS ,", C, "CENTIMETERS"
160 PRINT "CONVERTS TO" 
170 IF F=0 THEN 190
180 PRINT F ,"FEET",
190 PRINT I, "INCHES"
200 PRINT
210 PRINT
220 PRINT
230 GO TO 100
240 DATA 1, 0 
250 DATA 0, 2.54, 0, 60, 2, 5
999 END

CONVRT.png

These are pretty boring programs, but they should give you confidence that the interpreter works, and cue you in to some of the Dartmouth-specific commands that weren't present in later version of BASIC.

If you want to work with something more exciting, and explore this BASIC dialect more in depth, I highly recommend My Computer Likes Me When I Speak in BASIC by Bob Albrecht (https://archive.org/details/My_Computer_Likes_Me_When_I_Speak_in_BASIC_Albrecht

Finally, this BASIC Interpreter was designed to work on a teletype, so your backspace is a "rubout," which makes your screen very messy while editing code. Use LIST <LINE NUMBER> (EX: LIST 150) to review a specific line after you type it. You can also use LIST <FROM LINE - TO LINE> to review a specific section of code (such as a subroutine!) (EX: LIST 100-200).

Enjoy!

basic17f.tap

AltairArchaeology

unread,
Jun 3, 2026, 10:11:09 PM (12 days ago) Jun 3
to PiDP-10
I stand corrected on SAVE not working. While it gave me an error when using it and the BASIC Interpreter stopped working, it DID in fact save the program to my user directory as a BAS file. I was able to open it and run it again. So it appears that SAVE and RENAME do in fact work, you just won't have the smoothest work-flow when doing it. 

Other command that are helpful are CATALOG to show the BAS files in your user directory, and OLD <FILENAME> to open a previously saved BASIC file. 

Lars Brinkhoff

unread,
Jun 4, 2026, 2:32:47 AM (12 days ago) Jun 4
to PiDP-10
Thanks for this report.  I believe you are following in the footsteps of MIT hackers, because there was a DECSYS;TS BASIC in 1976.  Probably mostly for playing games.

In 1978 there was another SYS2;TS BASIC.  It seems to have been called Somewhat-BASIC and having been written in Maclisp.

AltairArchaeology

unread,
Jun 4, 2026, 10:14:13 AM (11 days ago) Jun 4
to PiDP-10
So I did some patching and managed to get BASIC running smoothly. I have the new .tap image attached to this message, and I'll go into instructions below.

- Fixed the SAVE function. I found that while it successfully saved the file, the interpreter then tried to apply TOPS-10-style file protections. I stripped this bit of code, and now when you SAVE it saves the file, and returns you to the interpreter input as expected.

- Partially fixed the HELP function. The BASIC Interpreter now looks for BASIC HLP in what it sees as the active directory, IE the directory for your logged in username.  YOU MUST PLACE THE BASIC HLP FILE IN YOUR ACTIVE USER DIRECTORY FOR THIS TO WORK. If there is interest, I'll try to work on this pulling from a universal folder (IE the BASIC directory) so it doesn't matter which user is logged in. As before, you can simply use :PR BASIC;BASIC HLP to read it irrespective of user, but being able to call it on command in the BASIC Interpreter yields a better flow. 

Disk Contents:

ITS BASIC Tape Contents.png

BAS-81 BIN - This is the original, unpatched BIN file kept for preservation. You can :DELETE this if you want. 

BASIC BIN - This is the patched BIN file for the BASIC Interpreter. SAVE works, and HELP partially works as described above. Run with :DEC BASIC;BASIC BIN

BASIC HELP - This is the help file for BASIC; using HELP in the interpreter will look for this file in your active user directory. Use :MOVE BASIC;BASIC HLP, <YOUR USERNAME DIR>;BASIC HLP for this to work properly (EX: :MOVE BASIC;BASIC HLP,LARS;BASIC HLP

Note - These files listed next are BAS programs. :MOVE them to your active user directory to open in the BASIC Interpreter.

CVRTUI BAS - A program to convert from Meters and Centimeters to Feet and Inches, modified from the one found in BASIC Programming Second Edition by John G. Kemeny and Thomas E. Kurtz. I changed it to prompt the user for inputs instead of pulling from data, and the program also asks you if you want to run it again after executing the conversions. 

SNOOPY BAS - A program taken from an Altair 8800 collection which prints ASCII art of Snoopy kicking a football. The first line says it is a port from BP-80 SYSTEM - I don't know what this is, and if anyone knows I would love to hear it! Using a terminal that allows you to scroll lets you see the full image; it will work on Knight TV but you'll get about 3/4ths of the picture at a time before it requires you to scroll. Clear your screen (CTRL-L) before running for best results.

VICODE BAS - A modified program originally from BASIC Programming Second Edition by John G. Kemeny and Thomas E. Kurtz using a Vigenère-style repeated key cipher to encode or decode messages. You type out a message, type in the cipher key, and tell it if you want to encode or decode. The program then asks you if you want to run it again by typing "Y" or "YES." For those cryptoanalysis hobbyists out there (like me!) this is pretty easy to crack, so don't use it for anything important. If you want to give it the most security, make the key code the same character length as the message (IE: MESSAGE = "THIS IS A TEST!" KEY = "CATBATFANALTAIR") and NEVER use the same key again. 

Installation: 

- Boot ITS in the usual manner from pdpcontrol start. Once pdpcontrol start is running, you can do the steps below for mounting the disk at any time. I usually do them after ITS is already up and running as it makes it flow smoother. 

- Using your Linux Terminal, type in pdp and then press CTRL-E to stop the simulator

- Type in attach mta0 /<DIRECTORY OF TAPE IMAGE>/itsbasicv2.tap (EX: attach mta0 /home/pidp-10/BASIC/itsbasicv2.tap)

- Once SIMH tells you that the tape is attached, type cont

- Once logged in to ITS use :DUMP.

- At the "_" prompt, type in LOAD

- At "E.O.T." type in REWIND to rewind the tape, or UNLOAD if you are done using it. 

- Type in QUIT

- Check that all files on the disk are in the BASIC directory using :LISTF BASIC .Don't forget to :MOVE the BAS and the HLP file to your active user directory!

- You can run the BASIC Interpreter by using :DEC BASIC;BASIC BIN

<BREAK>

Lars, thanks for the kind words! I previously patched a version of Texas Tiny BASIC (TTX) with the help of one of the original authors, Mr. Steve Whipple, to run on a VT100-emulated terminal (Tera Term) on an Altair 8800. This was definitely a different, but no less rewarding, process! 

I'd be very curious about TS BASIC and SYS2;TS BASIC (or Somewhat BASIC). I'm a bit of a BASIC nerd. :) 
itsbasicv2.tap

Lars Brinkhoff

unread,
Jun 4, 2026, 11:22:23 AM (11 days ago) Jun 4
to AltairArchaeology, PiDP-10
Altair Archaeology wrote:
I'd be very curious about TS BASIC and SYS2;TS BASIC (or Somewhat BASIC). I'm a bit of a BASIC nerd. :) 

Me too!  It seems DECSYS;TS BASIC was a plain DEC BASIC patched for running under DECUUO.  On a cursory glance, I can't find any identification or version number in the binary.  I should just run them and see what they say.

There are also BASIC SHR and BASIC LOW binaries, but they seem to be stubs; they are both very short, and one of them doesn't have much beyond an error message.

However, the SYS;TS BASIC and JBD;TS BASIC are quite interesting, from the BASIC family tree perspective.  I figured out it was written in Maclisp by MIT Professor Jack Dennis' (JBD) son David (DHD).  There is source code and documentation.  But I haven't found a way to contact David about this.

There are also scattered BASIC code files all over the system.  Mostly games like Wumpus and the like.

AltairArchaeology

unread,
Jun 4, 2026, 2:32:46 PM (11 days ago) Jun 4
to PiDP-10
I did some more patching, and am proud of the results. With the current settings, running BASIC in ITS feels much more native. The attached .tap file is meant to be more of a plug-and-play option. Attach it on SIMH and use :DUMP and the LOAD and all of the "important stuff" (HLP file, TS, BIN for BASIC, etc) will go where they need to go. 

- Fixed the HELP command. It now looks for BASIC HLP in the user directory, and if not found, looks for it in the DECSYS directory. As long as BASIC HLP is in the DECSYS directory, any user will be able to access HELP.

- Added a TS BASIC "wrapper." This was created in EMACS and is a simple macro that automatically types :DEC BASIC;BASIC BIN when activated. If placed in the SYS directory (the .tap image does it for you) then any user can type :BASIC and access the BASIC Interpreter. 

Disk Contents:

ITS BASIC Disk Contents.png

BASIC BIN - This is the patched BIN file for the BASIC Interpreter. Run with :DEC BASIC;BASIC BIN or with :BASIC (see below under TS BASIC)

BASIC EMACS - This is an EMACS file for the macro used to build TS BASIC. Examine it with :PR BASIC;BASIC EMACS and edit with :EMACS BASIC;BASIC EMACS. Editing and rebuilding TS BASIC is required if you move BASIC BIN to a different directory than BASIC. 

BASIC HELP - This is the help file for BASIC; using HELP in the interpreter will look for this file in your active user directory OR in DECSYS. By default, the disk will place this in DECSYS when you use :DUMP and then LOAD . If you keep the BASIC HLP in DECSYS you can safely move/delete the one in BASIC. 

TS BASIC - This is a macro created from BASIC EMACS using :MIDAS BASIC EMAC and then :RENAME BASIC BIN,TS BASIC . By default it is placed in your SYS directory. This means that any user can type in :BASIC and load the BASIC Interpreter as long as it is located in the BASIC directory. If you choose to rebuild this, do it in another directory other than BASIC so you avoid overwriting BASIC BIN, which is the BASIC Interpreter! 

Note - These files listed next are BAS programs. :MOVE them to your active user directory to open in the BASIC Interpreter.

CVRTUI BAS - A program to convert from Meters and Centimeters to Feet and Inches, modified from the one found in BASIC Programming Second Edition by John G. Kemeny and Thomas E. Kurtz. I changed it to prompt the user for inputs instead of pulling from data, and the program also asks you if you want to run it again after executing the conversions. 

SNOOPY BAS - A program taken from an Altair 8800 collection which prints ASCII art of Snoopy kicking a football. The first line says it is a port from BP-80 SYSTEM - I don't know what this is, and if anyone knows I would love to hear it! Using a terminal that allows you to scroll lets you see the full image; it will work on Knight TV but you'll get about 3/4ths of the picture at a time before it requires you to scroll. Clear your screen (CTRL-L) before running for best results.

VICODE BAS - A modified program originally from BASIC Programming Second Edition by John G. Kemeny and Thomas E. Kurtz using a Vigenère-style repeated key cipher to encode or decode messages. You type out a message, type in the cipher key, and tell it if you want to encode or decode. The program then asks you if you want to run it again by typing "Y" or "YES." For those cryptoanalysis hobbyists out there (like me!) this is pretty easy to crack, so don't use it for anything important. If you want to give it the most security, make the key code the same character length as the message (IE: MESSAGE = "THIS IS A TEST!" KEY = "CATBATFANALTAIR") and NEVER use the same key again. 

Known Limitations:

- CATALOG, OLD, etc. do not work outside of either SYS (in which looks for files in DECSYS) or DSK: (which looks for files in the active user directory). If you want to share BAS programs amongst multiple users, either :COPY the files to each user directory, OR place those BAS files into DECSYS. 

- BYE is listed as a command under HELP, but is not implemented in this build of BASIC. 

- TS BASIC runs the command :DEC BASIC;BASIC BIN . If your BASIC BIN is renamed to something else, or is placed in another directory, TS BASIC will not work correctly and you will need to rebuild it. See BASIC EMACS and TS BASIC notes above. 

- This version of BASIC still uses "rubout" behavior as it was built for operating off a teletype. This can get confusing 

With the exception of changing user directories (which will be a lot more work to implement ITS-style commands under a TOPS-10 emulator running inside ITS!) I feel that this release is pretty close to what a practical port from this era would behave like. 

Here is the manual for those that want to read more onto how to operate BASIC from this era: https://www.bitsavers.org/pdf/dec/pdp10/TOPS10_softwareNotebooks/vol06/DEC-10-LBLMA-A-D_BASIC_Conversational_Language_Manual_Mar74.pdf

Questions, comments, suggestions, etc will all be answered here. 

Happy hacking! 
itsbasicdistro.tap

Lars Brinkhoff

unread,
Jun 5, 2026, 12:54:48 AM (11 days ago) Jun 5
to AltairArchaeology, PiDP-10
AltairArchaeology wrote:
- Added a TS BASIC "wrapper." This was created in EMACS and is a simple macro that automatically types :DEC BASIC;BASIC BIN when activated. If placed in the SYS directory (the .tap image does it for you) then any user can type :BASIC and access the BASIC Interpreter. 

This is all good work!

Just as a note.  You converted a BASIC.EXE using EXECVT, getting an ITS PDUMP file as a result.  That still has to be run with :DEC, because it has TOPS-10 (or 20?) system calls.  An alternative to this would be to use DECUUO to emulate the system calls; see INFO;DECUUO INFO.  This is how MACRO, F40, ADVENT, and others run on ITS, and it was probably how the historical DECSYS;TS BASIC was made.

AltairArchaeology

unread,
Jun 5, 2026, 5:17:03 AM (10 days ago) Jun 5
to PiDP-10
Lars,

Great info as always! I'll need to take a deeper dive at it for DECUUO - I'm imagining this would make it more efficient than all the patching I'm doing to the BIN file. 

I did some additional patching in the meantime. I found from the manual that CATALOG (or CAT) BAS was used on TOPS-10 to look at system-level files, and is hard-coded to look for UDF [5,1] or 000005000001. I hardcoded it to instead point to the ITS directory for BAT at  [424163,0] or 424163000000. After that, I got the idea of having a dynamic UFD conversion, so for example if you type in CAT LARS, it translates LARS into UFD [544162, 1] or 544162630000. So now when using CAT, OLD, SAVE, etc. it will look first for the name to see if it is a known device (IE BAS, DSK, mta0, etc.) If it isn't a known device, it begins a UFD lookup. So, in short, BASIC BIN can now "find" any directory on ITS, with the exception of SYS since that is hardcoded to use DECSYS instead. 

There are a few bugs here, such as typing CAT TTY0 causing the interpreter to soft-crash (you can type but it doesn't do anything), but it works pretty well for "normal" use based on the technology of today.

What doesn't work is the command REPLACE. A current workaround is to use UNSAVE (yes, really...) and then SAVE which does effectively the same thing, but it requires two commands instead of one. Not ideal. 

Need to do some more work on this. 

Lars Brinkhoff

unread,
Jun 6, 2026, 2:18:52 AM (10 days ago) Jun 6
to AltairArchaeology, PiDP-10
AltairArchaeology wrote:
Great info as always! I'll need to take a deeper dive at it for DECUUO - I'm imagining this would make it more efficient than all the patching I'm doing to the BIN file. 

So you have been binary patching the BIN file?  That's gnarly!

I'd like to update the ITS repository with a working DECSYS;TS BASIC.  I got it working with a 1975 BASIC.LOW + BASIC.SHR like this:
:CWD DECSYS
:DEC BASIC /DBUG
45$G
Command: dump
:PDUMP TS BASIC

Maybe your patches could be added to this procedure.

I'm making some notes here:

AltairArchaeology

unread,
Jun 6, 2026, 10:54:08 AM (9 days ago) Jun 6
to PiDP-10
I did a lot of work with this yesterday, and am proud to present the latest. I might make a Git repository or something based on the work I might do on this in the future. 

What we've got here is a BASIC BIN that can now find user directories on ITS, can SAVE, OLD, REPLACE, etc programs, can COPY program files from inside the interpreter, etc. I think the only command that I didn't work on was QUEUE, mainly because I don't have a line printer to test the function, nor do I want to spend the time working on it... for now :)

I stress-tested this by building a BASIC program from scratch, called INVEST that is located in the BAS directory (included on this tape.) It uses subroutines to allow you to access three separate investment simulations: an Investment Growth Simulator, a Monte-Carlo Simulator, and a Retirement Withdraw Estimate. It also includes a help section. The Monte-Carlo must be run after the Investment Growth Simulator, and it is pretty beefy with using system resources: it'll take about 30 seconds on TELNET to run 500 cycles to test a 20% spread. I built it using commands such as REPLACE, SAVE, COPY, WEAVE, etc. to give the interpreter a good workout. I had zero issues with it. You can try it out yourself by loading :BASIC and then typing in OLD INVEST*** (*** is hard-coded to go to the BAS directory). 

Below is a readme. I took some time to describe the patches required under the commands. I don't go into all aspects of BASIC, just the system-level ones that I found interesting or useful. If you really want to dive deep, checkout the BASIC Conversational Language Manual here: https://www.bitsavers.org/pdf/dec/pdp10/TOPS10_softwareNotebooks/vol06/DEC-10-LBLMA-A-D_BASIC_Conversational_Language_Manual_Mar74.pdf

Also, Lars, if you want to use this, you can. Please mention me for credit and include the BASIC;READ ME file in any distros. 

ITS BASIC Project
By AltairArchaeology
Build Date: JUN 06 2026

1. Purpose. This project’s purpose is to modify a TOPS-10 BASIC Interpreter to run effectively under ITS through the :DEC program. The goal is to both preserve the historic accuracy of how the BASIC Interpreter operates at the user level, while simultaneously patching the BASIC Interpreter to enable a near-seamless integration with ITS. This distribution is intended for historical, educational, and personal non-commercial use. Upon building a PiDP-10 and running ITS, I was struck by how advanced of an operating system ITS was during its era. I was also struck by the relative absence, in common ITS distributions, of a turnkey BASIC environment comparable to what many users experienced on minicomputers and microcomputers of the 1970s and 1980s. This project was born of a desire to experience the early forms of mainframe-based BASIC, still with a largely Dartmouth-derived syntax, while also being able to port programs written on other 8-bit computers of the 1970s-1980s.

2. License. BASIC BIN and BASIC HLP included on itsbasicdistro.tap are derived from DEC TOPS-10 BASIC material. They are not licensed under the MIT License by this project. They are believed to be governed by the DEC Personal Use License for TOPS-10 and TOPS-20, available at: https://opensimh.org/dec_36bit_license/ In summary, that license permits use and modification of DEC TOPS-10 and TOPS-20 software technology solely for personal, non-commercial use. Users are responsible for ensuring that their use of the DEC-derived files complies with that license or any other applicable rights. Original scripts, documentation, patch notes, and packaging work created for the ITS BASIC Project are licensed under the MIT License, unless otherwise noted. The MIT License does not apply to DEC-derived files, including BASIC BIN and BASIC HLP. Use of this distribution is subject to both the DEC Personal Use License terms for DEC-derived material and the MIT License terms for this project's original material.

3. Installation. To install the contents of itsbasicdistro.tap onto ITS, first run ITS from SIMH. Once ITS is running, access SIMH from the terminal by typing pdp, and then press CTRL+E to pause SIMH. Attach the .tap by typing in attach mta0 <path to the .tap image>/itsbasicdistro.tap. For example: attach mta0 /home/pidp-10/BASIC/itsbasicdistro.tap. Once attached, type cont to resume SIMH. Once logged into ITS, type in :DUMP. Upon the _ prompt appearing, type in DUMP. When prompted for FILES= type in *; * * to place all files from the .tap onto the appropriate directories. Once this is complete, type in QUIT (before this you can type in REWIND to rewind the tape, or UNLOAD to detach it from SIMH). You can now access BASIC by typing in :BASIC.

4. Operation. The following describes the commands available in the TOPS-10 BASIC Interpreter, and describes how they were patched to work with ITS, if applicable. These commands will all work with the first three letters as abbreviations. For example, CAT will work the same as typing CATALOG. For full operating instructions, please review the DECsystem-10 BASIC Conversational Language Manual published in March of 1974.  
| Command | Abbrev. | Purpose |
| HELP | HLP | Display BASIC help |
| NEW | NEW | Start a new program |
| SCRATCH | SCR | Clear the current program from core |
| RENAME | REN | Rename the program title in core |
| LENGTH | LEN | Show program length |
| LIST | LIS | List the program |
| RESEQUENCE | RES | Renumber lines |
| RUN | RUN | Execute the program |
| CATALOG | CAT | List files |
| SAVE | SAV | Save a program |
| OLD | OLD | Load a program |
| UNSAVE | UNS | Delete a saved program |
| REPLACE | REP | Overwrite a saved program |
| WEAVE | WEA | Merge a saved program into core |
| MONITOR | MON | Return to DDT, preserving BASIC |
| SYSTEM | SYS | Exit BASIC |
| BYE / GOODBYE | BYE / GOO | Exit BASIC and log out |

HELP (HLP) – This prints the contents of BASIC HLP and provides instruction on the commands available in the BASIC Interpreter. :DEC has BASIC look in DECSYS;BASIC HLP. By default, the .tap will place this file in the correct directory.

NEW – This creates a new program by removing all previously typed lines of code from core, and prompting the user to enter the name for the program. Interestingly, the program name does not correspond to the file name it is saved under, so you can, for example, have a program named HELLO that is saved as HI BAS.

SCRATCH (SCR) – This removes all previously typed lines of code from core. If you have used BASICs from the 1970s or 1980s, such as MS BASIC, C64 BASIC, etc, this will equate to their version of NEW.

RENAME (REN) – This renames the title of the program for the program loaded into core. This does NOT rename the BAS file that is saved to directories.  

LENGTH (LEN) – This tells how many characters the current program loaded into core has.

LIST (LIS) – This lists the current program in core. LIST by itself will show every line of code as loaded into core. You can modify by using LIST 500 to only print line 500, LIST 500- to print everything from line 500 to the end of the program, or LIST 500-700 to print everything from line 500 to line 700. The last example is particularly useful when building subroutines!

RESEQUENCE (RES) – This resequences your line numbers to either the default, which starts at 10, 20, 30, etc, or through a user specification, for example RES 1000 starts the first line of code at 1000, and RES 100,50,10 takes line 50, renumbers it to 100, and renumbers each successive line of code by 10. This can be very powerful for writing subroutines in different files before merging them (see WEAVE).

RUN – This runs the program written in core. Unlike the 8-bit BASICs of the 1970s-1980s, this will print the title of the program, the system date, and the total calculation time once the program ends. Also, unlike the BASICs of the 1970s-1980s, any BASIC program in core requires END as the final line of the program. Don’t worry – it will tell you if you forget it!

CATALOG (CAT) – This lists files on a recognized device or directory. Example use is CAT LARS: to view files in the LARS directory, or CAT *** to view files in the BAS directory. This has been patched to recognize ITS’ directory naming convention. It does this by first looking for hardcoded devices (SYS, BAS, etc.) before converting the typed in directory name into octal, and then finding it on ITS. As an example, typing in CAT BASIC converts the word BASIC into 424163,514300, and then goes to that ITS directory corresponding to the sixbit octal.

SAVE (SAV) – This saves the program. Defaults are to save in the active user directory with an extension of BAS. Use examples are SAVE ALTAIR:HI to save it as HI BAS in the ALTAIR directory, or SAVE TEST*** to save it as TEST in the BAS directory. *** is hardcoded to refer to the BAS directory. You cannot use SAVE to overwrite an existing program – see REPLACE below. This command was patched to remove the TOPS-10-level system protections that it would attempt to apply to the file that are incompatible with ITS. Prior to patching, the program would save, but the Interpreter would crash.
OLD – This loads a previously-saved program. A use example from above is OLD ALTAIR:HI or OLD TEST***.

UNSAVE (UNS) – Yes, really. This command deletes a program. An example is UNSAVE ALTAIR:HI or UNSAVE TEST***. The program is not currently known to be recoverable if deleted.

REPLACE (REP) – This overwrites a file that has been already saved with one of the same name. An example of use is REPLACE ALTAIR:HI or REPLACE TEST***. This was the hardest patch to get working for ITS by far. In the original, the Interpreter deletes the file from the working directory, but creates a temporary file to restore if REPLACE fails. It then saves the new file under the previous name before purging the temp file. The patch follows the spirit of this command, but removes the temporary file creation. The patched version of REPLACE effectively uses UNSAVE and then launches immediately into SAVE. In theory, this is riskier as you could lose your program if the Interpreter crashes during a REPLACE. I have never experienced this, but it could happen.  

WEAVE (WEA) – This merges the code from a specified file into core. An example of using this would be to use OLD ALTAIR:HI and WEAVE TEST***. In this case, all code from TEST*** will be loaded into core along with the code already present from using OLD ALTAIR:HI. WEAVE prioritizes the saved file over the code in core, so line numbers that conflict will be overwritten by the WEAVE file. Use RESEQUENCE on either core or the file you intend to WEAVE to help avoid this.

MONITOR (MON) – This stops BASIC and returns the user to DDT. BASIC can be continued by typing in :CONTINUE. Surprisingly, this worked as intended without any patching!

SYSTEM (SYS) – This kills BASIC and returns the user to DDT.  

BYE (GOODBYE or GOO) – This kills BASIC, returns the user to DDT, and then attempts to log the user out. The original on TOPS-10 would do this all from inside the BASIC Interpreter, but was non-functional in ITS. I patched this to both work, and to return the user to DDT before issuing :LOGOUT. This is safer, as if you are running other programs DDT will now not allow you to logout. You can observe this behavior by using :PEEK, CTR-Y, P, :BASIC, and then BYE.
itsbasicdistro.tap

AltairArchaeology

unread,
Jun 6, 2026, 1:01:25 PM (9 days ago) Jun 6
to PiDP-10
And here it is on Git: https://github.com/AltairArchaeology/ITSBASIC

I will be updating the latest versions on there from now on to make it easier for people to sort through. 

Lars Brinkhoff

unread,
Jun 11, 2026, 10:56:51 AM (4 days ago) Jun 11
to PiDP-10

The BASIC.SHR, .LOW, and .HLP files on that tape exactly match the ones found on the ITS directory DECSYS back in the mid 70s.  The tape also have .MAC source files, so I built a new TS BASIC from those.

I expect the problems AltairArchaeology found in BASIC.EXE may also be present in this version.  For example, HELP doesn't find SYS:BASIC.HLP even though it's in the right place.

Eric Swenson

unread,
Jun 11, 2026, 11:36:01 AM (4 days ago) Jun 11
to Lars Brinkhoff, PiDP-10
But I assume, since you have sources now, we can fix the issues that AltairArchaelogy patched not the binary?

— Eric (KC6EJS)

On Jun 11, 2026, at 07:56, Lars Brinkhoff <lars.br...@gmail.com> wrote:



The BASIC.SHR, .LOW, and .HLP files on that tape exactly match the ones found on the ITS directory DECSYS back in the mid 70s.  The tape also have .MAC source files, so I built a new TS BASIC from those.

I expect the problems AltairArchaeology found in BASIC.EXE may also be present in this version.  For example, HELP doesn't find SYS:BASIC.HLP even though it's in the right place.

--
You received this message because you are subscribed to the Google Groups "PiDP-10" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pidp-10+u...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/pidp-10/252bb4b9-2ea2-487a-a61e-d3b8eea7e609n%40googlegroups.com.

Lars Brinkhoff

unread,
Jun 13, 2026, 12:39:17 AM (3 days ago) Jun 13
to Eric Swenson, PiDP-10
Eric Swenson wrote:
But I assume, since you have sources now, we can fix the issues that AltairArchaelogy patched not the binary?

Yes, that is my hope as well. 
Reply all
Reply to author
Forward
0 new messages