Pdp-11 and playing with printers

I got a free mainframe, when i was about 17.
It was a huge Pdp-11/34 which a had to get from Enschede to Holten using a trailer.

PDP-11/34
  • It was a 19inch rack (loads of metal)
    • 2x 8inch floppy drives
    • 2x 20MB harddisk drives (with cardridge) each 34KG!
  • multiple (3?) Decwriter III printers
  • loads of VT100 terminals
  • 2.5 meter of manuals
  • cables
  • disks (8 inch) and harddisk cartridges

I converted the power to a generic 230V connector. When booting the machine all the lights in the house dimmed.

I didn’t know anything about mainframes, but i got things working.
Sometimes i would play with it, but after a while it didn’t run anymore.

I’ve kept some of the parts of the machine.
Terminals we used for a long time to connect to a linux server.
( The VT100 where later switched for more modern Wyse terminals )

One of the two drives (34kg) (not my picture)

Some parts i’ve kept

VT100 serial terminal (gave this one to a colleage) Postit says: Could you install Windows on this for me??

Serial printer

Last Decwriter i’ve got, also gone now.

These printer we used for generic printing, and just for fun.
They made a lot of noise, and even they are serial printers they are fast!

So i resourced ms-dos into assembly and printed that, that was a sh*tload of paper.
We even made a racing game. (Can’t find the source, but i’ve recreated a lookalike in linux-bash)

Object of the game was to keep your car O character on the road.
The printer printed the lines, and you could use the keyboard to move your car, which also got printed.

Below the build-in-5-minutes bash lookalike. ( z left, x straight and c right)
Original had more intricate road, and probably the road was drawn using two lines, to speedup printing (Decwriter III could print at 180 characters per second bidirectional!)

Looked more like this i think
#!/bin/bash
i=0
j=0
car=8
while true ; do
no=$(awk "BEGIN{print sin($i*atan2(0,-1)/180)*40+40}" | cut -f1 -d.)
way=$(awk "BEGIN{print sin($j*atan2(0,-1)/180)*10+13}" | cut -f1 -d.)
#echo $way
if [ $car -lt 0 ] ; then echo "boom" ; exit ; fi
if [ $car -gt $way ] ; then echo "boom" ; exit ; fi
carr=$car
rest=$((140-$no-$way))
i=$(($i + 1))
j=$(($j + 5))
while [ $no -gt 0 ] ; do
echo -n " "
no=$(($no - 1))
done
echo -n "#"
while [ $way -gt 0 ] ; do
echo -n " "
if [ $carr -eq 0 ] ; then
echo -n "O"
fi
way=$(($way - 1))
carr=$(($carr - 1))
done
echo -n "#"
while [ $rest -gt 0 ] ; do
echo -n " "
rest=$(($rest - 1))
done
echo ""
read -r -t 0.1 -n 1 -s key
if [ "$key" == "z" ] ; then
car=$((car - 1 ))
fi
if [ "$key" == "x" ] ; then
car=$((car - 1 ))
fi
if [ "$key" == "c" ] ; then
car=$((car + 1 ))
fi
done

Changed 51 card game

I changed the rules of this game.

Fifty-one is a card game where the aim is to stay under 51 points.

Fifty-one only uses the so-called picket cards; the seven through the ace. The distribution of points is as follows;

Card Points

77 points
88 points
90 points
10+10 or -10 points
Jack2 points
Queen3 points
King4 points
Ace1 or 11 points


The ‘suit’ (hearts/diamonds/clubs/spades) is not important.

At the start of the game, the cards are shuffled, the dealer deals three cards at random to each player and places the remaining cards face down on the table. The person after the dealer now plays a (high) card face up on the table, announces the number of points and takes a new card from the face down pile. The following players now play another card and add the number of points played to the number on the table and take a new card, for example: the first player plays an 8 and says ‘8’, second player plays a 7 and says ’15 ‘, the next player plays a king and says ’19’, the next plays an ace and says ’30’ (or ’20’) etc.

As soon as the point total gets close to 51, players should start playing cards like 9 or (-)10 to prevent the point total from going over 50. The first player who can no longer do this loses the round. After this, the game starts again, the loser usually acts as the new dealer.

If a player manages to collect three identical cards in the course of a round, he can pass. He then places the cards face down on the table, says pass, and stops playing. He can then no longer lose that round. (*)

After playing a card, if a player forgets to take a new card from the stock before the next player has played a card, he must continue playing with the remaining (two) cards.

When the deck of face-down cards is exhausted, the face-up cards are shuffled, placed face-down again, and play continues.

The game is played with 3 or 4 players. With more players there is no opportunity to collect favorable cards. (**)

I’ve played this a lot while traveling with bands on the bus. So what did I change:

(*) I skipped this rule
(**) When changing to the rules below we could play with 6-7 or maybe 8?

I used two decks of cards. Same as above, but I added two sixes, one (or 2) 5 and a 4.

6 Change the direction of playing, so you could be facing another turn when you just played a card!

5 Change hands, in opposite direction of playing (all players)

4 Drop you cards and get 3 new ones OR exchange with another player

3 ? be experimental!

We sometimes just played around with these rules. Just get the rules you are playing with clear at the start of the game

8085 Machinecode at school

Funny story about learning machinelanguage at school.

It was around 1989, and was attending a class Microcomputer Programming in Machine Language.

We where given a problem we had to solve using 8085 machine code.
The machine we had to program this on was a Intel SDK-85, much like below example.

Intel SDK-85

Note it only had a hex keyboard and 7segmented display. You had to punch in the machinecode into memory slots yourself.

Problem we where given was something like searching for certain data in memory.

Normal procedure was :

  • Draw a flow of instructions (Flowchart)
  • Write the machine languages codes
  • Convert those assembly statements into Opcodes the machine could understand
  • Punch in those numbers, run and verify

Most of us knew a lot of opcodes by heart, but some knew all opcodes. And how many bytes where needed. besides that we had to remember jump and return addresses.

So our teacher presented the problem, when he stopped talking, my friend Martin and I when up to our machines … punching buttons.

” Guys .. you can’t expect it to work without writing the program down first!

A few minutes later .. we pressed enter .. and it worked.

A program like above looked like: 
01 2E 2B 21 00 00 79 BE C2 1F C0 CD 19 C0 CA 1E C0 78 BE C2 06 C0 C3 25 C0 2C C2 1E C0 24 C9 CD 19 C0 C3 06 C0 C9

Cut into opcodes:

01 2E 2B
21 00 00
79
BE
C2 1F C0
CD 19 C0
CA 1E C0
78
BE
C2 06 C0
C3 25 C0
2C
C2 1E C0
24
C9
CD 19 C0
C3 06 C0
C9

Some opcodes used 1 byte, others 2 or 3.
C2 1F C0 – means Jump to address C01F when not zero
C9 – means return, go back to a previous CALL statement

Example of machine language which is translated into above

ADDR ; INSTRUCTION
C000 ; LXI B,0X2B2E
C003 ; LXI H,0X0000
C006 ; MOV A,C
C007 ; CMP H
C008 ; JNZ C01F
C00B ; CALL CO19
COOE ; JZ CO1E
ETC
Almost 255 opcodes

Hacktic and card copier

NOTE: Cardcopier was a few years later

Somewhere this year i got a subscription on HackTic a dutch hacker magazine.

Honestly most of the things i didn’t understand ( i was not into Unix at that time.)

I still got most of the magazines, except for some i lend to others and never got back.

In number 8 (1990) there was a schematic for copying magnetic strip cards. It took a while to build this, but i got it working in the end.
I managed to get a working bank card copied onto my Film rental store card. And we managed to copy magnetic cards which would hold information about how many copies you could make at the school xerosmachines. So we copied a full card and when it was empty rewrote information on it to fill it again.

At the MTS in Hengelo we also had a hidden switch for the payphone to get our money back.

BBC Acorn

While attending the LTS (lower vocational technical school), i could often be found in the computer lab.
I was the only student who had his own key.
We had a classroom with 16 computers, 2 drives at the master station and a printer.
Everything was connected using Econet. (These where the first networked computers i’ve worked with)
https://en.wikipedia.org/wiki/Econet

So every moment we didn’t have a class, i was there.
Even when i had to do final exams, i was late entering, and sometimes one of the first leaving.

Today (2022) i ran an emulator on my machine and typed in one of my old programs found in a notebook.
(The real system above pictured, i have to repair)
By the way, this is one of the computers from school, even with its original wooden monitor stand. The school contacted me (a few years after leaving this school) if i wanted to buy one of the machines.

My notebook containing programs

One of the shorter programs in basic

   20R=.8
   30Q=.05
   40MODE0
   50X=500
   60GCOL1,3
   70Y=500
   80MOVE650,650
   90DRAW670,650:DRAW670,670:DRAW650,670:DRAW650,650
  100A=GET-48
  110IFA=1THENX=X+Q
  120IFA=2THENX=X-Q
  130IFA=3THENY=Y+Q
  140IFA=4THENY=Y-Q
  150IFA=5THENR=.8
  160IFA=6THENR=0
  170X1=200*SIN(X)+500
  180X2=200*SIN(Y+X)+X1
  190X3=50*SIN(Y+X+R)+X2
  200X4=50*SIN(Y+X-R)+X2
  210Y1=200*COS(X)+500
  220Y2=200*COS(Y+X)+Y1
  230Y3=50*COS(X+Y+R)+Y2
  240Y4=50*COS(Y+X-R)+Y2
  250CLS
  260IFX4>650ANDX4<670ANDY4>650ANDY4<670THENPRINT"RAAK"
  270MOVE450,450
  280DRAW550,450
  290DRAW500,500
  300DRAW450,450
  310MOVE500,500
  320DRAWX1,Y1
  330DRAWX2,Y2
  340DRAWX3,Y3
  350MOVEX2,Y2
  360DRAWX4,Y4
  370GOTO80
  380MODE7
  390PRINTTAB(12,10)CHR$129CHR$141"FASH-SOFT"
  400PRINTTAB(12,11)CHR$130CHR$141"FASH-SOFT"
  410A=GET
  420RUN
Keys
1,2 - first arm (left/right)
3,4 - second arm (left/right)
5,6 - open/close grabber

This program got me in trouble because my teachers didn’t believe me. It wasn’t written by me according to them. Because my math grades were terrible!

Later versions had a nicer looking robotic arm. (More 3d, not a line but a arm with thickness)

Notes:

*CAT ; list disk files
LOAD"FSHDRAW" ; load

Print to file or clipboard
LIST07 ; page formatting
VDU2 ; start output redirection (screen + "printer")
LIST
VDU3 ; stop redirection

Installing the Emulator under linux

 git clone https://github.com/stardot/b-em.git
 sudo apt-get install autotools-dev automake
 sudo apt-get install liballegro5-dev
 cd b-em/
 ./autogen.sh 
 ./configure 
 make
 ./b-em 

A board game we made

I designed with my friend Richard, a spooky board game.
It was made of two large multiplex pieces, about 75xm by 50cm. With walls 25 cm height (guessing)

There was a ground floor (graveyard) and a dungeon below that. You had to use dice to move, but there were traps.

  • Hidden trapdoors
  • A ball which knocked you over
  • Closed doors
  • Monsters
  • Puzzles
Drawing i made in 2023 from what i can remember.

The ball (4-5cm) was made of scrunched paper with a gypsum layer.
It could take two paths and depending on where you stood with your playing piece, could knock you over.

A few years later my parents bought Ghost Castle/Spookslot. Which was very much alike we’ve made.

Looking at the models i’ve been making the last few years, i could re-make this again??

"If something is worth doing, it's worth overdoing."