2021-04-07: Writing BASIC-8 on the TSS-8                     rak
================================================================

I recently discovered SDF’s PiDP-8 [0]. You can access it over
SSH and watch the blinkenlights over its twitch stream. It runs
TSS/8, a time-sharing operating system written in 1967 by Adrian
van de Goor while a grad student here at CMU. I’ve been having
fun tinkering with it, and I just wrote my first BASIC program
[1] since high school. It plots the graph of some user-specified
univariate function. I don’t claim that it’s elegant or
well-engineered, but it works!

   10  DEF FNC(X) = 19 * COS(X/2)
   20  FOR Y = 20 TO -20 STEP -1
   30     FOR X = -25 TO 24
   40     LET V = FNC(X)
   50     GOSUB 90
   60  NEXT X
   70  PRINT ""
   80  NEXT Y
   85  STOP
   90  REM SUBROUTINE PRINTS AXES AND PLOT
   100 IF X = 0 THEN 150
   110 IF Y = 0 THEN 150
   120 REM X != 0 AND Y != 0 SO IN QUADRANT
   130 GOSUB 290
   140 RETURN
   150 GOSUB 170
   160 RETURN
   170 REM SUBROUTINE PRINTS AXES (X = 0 OR Y = 0)
   180 IF X + Y = 0 THEN 230
   190 IF X = 0 THEN 250
   200 IF Y = 0 THEN 270
   210 PRINT "AXES INVARIANT VIOLATED"
   220 STOP
   230 PRINT "+";
   240 GOTO 280
   250 PRINT "I";
   260 GOTO 280
   270 PRINT "-";
   280 RETURN
   290 REM SUBROUTINE PRINTS FUNCTION GRAPH (X != 0 AND Y != 0)
   300 IF 0 <= Y THEN 350
   310 REM Y < 0
   320 IF V <= Y THEN 410
   330 REM Y < 0 AND Y < V SO OUTSIDE OF PLOT AREA
   340 GOTO 390
   350 REM 0 <= Y
   360 IF Y <= V THEN 410
   370 REM 0 <= Y AND V < Y SO OUTSIDE OF PLOT AREA
   380 GOTO 390
   390 PRINT " ";
   400 RETURN
   410 PRINT "*";
   420 RETURN
   430 REM COPYRIGHT 2021 RYAN KAVANAGH RAK AT RAK.AC
   440 END

It produces the following output:

                            I
                            I
   *           **           I           **
   *           **           I           **
   **          **          *I*          **          *
   **          **          *I*          **          *
   **         ***          *I*          ***         *
   **         ****         *I*         ****         *
   **         ****         *I*         ****         *
   **         ****         *I*         ****         *
   **         ****        **I**        ****         *
   ***        ****        **I**        ****        **
   ***        ****        **I**        ****        **
   ***        ****        **I**        ****        **
   ***       *****        **I**        *****       **
   ***       ******       **I**       ******       **
   ***       ******       **I**       ******       **
   ***       ******       **I**       ******       **
   ***       ******       **I**       ******       **
   ***       ******      ***I***      ******       **
   -------------------------+------------------------
       ******      ******   I   ******      ******
       ******      ******   I   ******      ******
       *****       ******   I   ******       *****
       *****       ******   I   ******       *****
       *****        *****   I   *****        *****
       *****        *****   I   *****        *****
       *****        *****   I   *****        *****
       *****        ****    I    ****        *****
       *****        ****    I    ****        *****
        ****        ****    I    ****        ****
        ****        ****    I    ****        ****
        ***         ****    I    ****         ***
        ***          ***    I    ***          ***
        ***          ***    I    ***          ***
        ***          ***    I    ***          ***
         **          **     I     **          **
         **          **     I     **          **
         *            *     I     *            *
                            I
                            I

Next up, I am going to try my hand at writing some FORTRAN or some
FOCAL69. If you like tinkering with old systems, then you should give
the TSS/8 a try.

[0] https://tss8.sdf.org/
[1] It’s written in the BASIC-8 dialect.