5t4nd1ng @ th3 3dg3 0f 5p3ct4t10n!
Welcome to Walt Perko's ZAltair Z80c Computer
Join the Altair 8800 Google Group
Join the S-100 Google Group

HOME . . . . .

Tim Geuy's OP-80A SetUp
...
This project started when I discovered that Adwater & Stir had made Altair Microsoft Basic 1.0 available on punch tape for the 50th anniversary of its release in 1975. O ordered a copy and once I had a copy in my hands, the obvious question was "can I run this?".
...
A little digging turned up a reproduction of the OP-80A tape reader from JM Precision in the UK. While they no longer sell the kits listed on their website, they do still sell the board and the sensor. Unfortunately, they have stopped shipping outside the UK so you'll need a friend there to purchase one for you and forward it. After building the OP-80A, the next question was "how do I pull the punch tape through the reader?"
...
After a few hours (days?) designing all the necessary parts in onshape and the usual print-test-tweak-reprint process, I had the transport mechanism shown here. Now the question was "how do I connect the OP-80A to my Altair 8800C?"
...
I based my approach on a YouTube video by Mike Douglas where he used the parallel ports on a Solid State Music IO4 board to make the OP-80A look like a cassette player connected to an Altair 88-ACR board at ports 0x06 and 0x07 to the 8800C. Since I have an IO4 that I built back in the 80s, I added the modifications from Mike's how-to (files below).
If you decide to go down this path, email MIke for an adapter board that is used to connect the OP-80A 16 pin connector to the IO4 14 pin parallel port connector. Now I just needed a way to see the Basic console.
...
Altair Basic 1.0 is hard coded to use an Altair 88-SIO serial board at ports 0x00 and 0x01 as the console. Since I don't have one of those, I used MIke's how-to for making the serial ports on a Solid State Music IO4 look like an Altair 88-SIO (files below). He used this modification in one of his YouTube videos to connect his Altair Cassette Interface board to an Altair 8800.
I modified my SSM IO4 using this process only changing the serial port address block to start at address from 0x04 to 0x00. This board is now the perfect substitute for a real Altair 88-SIO.
...
The final piece of the puzzle was to use the appropriate version of Mike's loader (LOAD10.HEX) for Basic 1.0. I used the version configured to support an Altair 88-ACR interface at port 0x06 and 0x07. This was necessary since this version of Basic is from way before Altair published their Multi Boot Loader. It should be noted that the loader shows no indication that it's working, that the load is complete, or that the load was successful so a little faith is required.
...
Pay close attention to illumination. I have found that too much or too little light results in the OP-80A either not being able to differentiate one byte from the next on the tape (too much) or the optical sensor not triggering (too little). My solution was the reading light you can see in the picture in combination with low lighting in the room. This takes a little experimentation.
Here's the load process I used. It assumes two console connections (a 2SIO console at 0x10 and 0x11 and an SIO console at 0x00 and 0x01) and the OP-80A at ports 0x06 and 0x07 configired to emulate a cassette player and Altair 88-ACR.
...
1. Boot the Altair into Altmon
... 2. Use Hexload to load the loader
... 3. Run the loader now residing at 0x1800
4. Crank on the tape throught the reader to the end
... 5. Reset the Altair back into Altmon
... 6. Run Basic now residing at 0x0000
All of this is done from the 2SIO console. If everything goes to plan and with a little luck you will see MEMSIZ on the SIO console. Once you get here you can enjoy the (slightly buggy) wonder that is Microsoft's very first product.
...
88-SIO Replacement Boards.pdf
BASIC Ver 1-0.pdf
OP_80A_Manual_V2.pdf
OP80A as Altair Cassette on SSM-IO4.pdf
OP80a_Kit_Assembly_Guide_V1.pdf
...

LOAD10.HEX . . . . . BASIC Ver 1-0.tap
...

How to Boot the Altair 8800 into AltMon

Set the Front Panel Switches to F800

EXAMINE and then Depress the "RUN" Switch to BOOT into AltMon
...


AltMon BOOT Screen


...


Use Hexload to Load the Paper Tape Loader . . . . . LOAD10.HEX


...


DUMPing the LOADER10.HEX to display on the console . . . . . 20 Bytes


...


Run Loader

Now Spin the Paper Tape through the OP-80A
...


Back to Altmon


...


First 100 Bytes of BASIC v1.0


...


Run BASIC v1.0 at Address 0000


...


BASIC v1.0 is Running

Hit [ENTER] for Maximum RAM


...


Choose Y/N for Extended Math Functions

and BASIC v1.0 is READY for your first program.


...


The Hexload.10 Paper Tape Loader Assembly Listings

Octal Assembly Listing from Mike's website

;-----------------------------------------------------------------------
;
; Bootstrap loader for Altair BASIC 1.0 (ACR SIO Version)
;
; This loader loads BASIC 1.0 through an 88-SIO at I/O address 6/7 (the Altair cassette SIO address)
;
; 1) Enter this bootstrap loader at 1800h (014000 octal).
;
; 2) Examine 1800h (014000 octal) on the front panel.
;
; 3) Position the tape in the NULL leader and start the tape reader.
;
; 4) Immediately depress RUN on the front panel.
;
; 5) After the tape finishes reading, STOP-RESET the machine and then depress RUN.
; . . The BASIC initialization dialog is then displayed on the console.
;
; . . . . . . . . . . Version Date Description
; . . . . . 1.0 14-Aug-2016 M. Douglas, Original
;
;-----------------------------------------------------------------------

; Equates

0006 = . . . SIOST . . . equ . . . 06h . . . . . . . . . . ;SIO status register
0007 = . . . SIODR . . .equ . . . 07h . . . . . . . . . . ;SIO data register

1800 . . . . . . . . . . .. . . org . . . 1800h . . . . . . . . ;location of this loader

; Store bytes in sequentially increasing memory pointed to by HL.
; If the SYNC byte is detected (6Ah, ends the leader, marks the start of data), HL is reset to zero.
; This code assumes the start of data), HL is reset to zero.
; This code assumes the leader is less than 255 bytes long.

1800 2600 . . . . . . . . . mvi.. . . h,0 . . . . . . . . . . ;HL->where to load binary (L set later)

1802 311218 . loop . . lxi . . . . . . . . . sp,stack . ;init SP so a RET jumps to loop
1805 DB06 . . . . . . . . in SIOST . . . . . . . . . .. . ;get sio status
1807 0F . . . ... . . . . . . rrc . . . . . . . . . . . . . . .. . ;new byte available?
1808 D8 . . .. . . . . . . . rc . . . . . . . . . . . . . . . . . ;no (jumps back to loop)

1809 DB07 . . . . . . . . in SIODR . . . . . . . . . . . ;get the byte and store in memory
180B 77 . . . . . . .. . . . mov m,a
180C 23 . . . . . . . . . . .inx h

180D D66A . . . . . . . .sui 6Ah . . . . . . . . . . . . . ;sync byte?
180F C0 . . . . . . . . . . .rnz . . . . . . . . . . . . . . . . .;no (jumps back to loop)

1810 6F . . . . . . . . . . . mov l,a . . . . . . . . . . . .. .;restart hl at zero (sync in 1st 256 bytes)
1811 C9 . . . . . . . . . .. .ret . . . . . . . . . . . . . . . .. ;jump back to loop

1812 0218 . . . . . . . . . stack dw . . . . . loop . . .;stack content jumps to loop when RET executed

1814 . . . . . . . . . . . . . .end


Program in Octal

14000: 046 000 061 022 030 333 006 017
14010: 330 333 007 167 043 326 152 300
14020: 157 311 002 030



Hexadecimal Lisiting of the same program

;-----------------------------------------------------------------------
;
; Bootstrap loader for Altair BASIC 1.0 (ACR SIO Version)
;
;This loader loads BASIC 1.0 through an 88-SIO at I/O address 6/7 (the Altair cassette SIO address)
;
;1) Enter this bootstrap loader at 1800h (014000 octal).
;
;2) Examine 1800h (014000 octal) on the front panel.
;
;3) Position the tape in the NULL leader and start the tape reader.
;
;4) Immediately depress RUN on the front panel.
;
;5) After the tape finishes reading, STOP-RESET the machine and then depress RUN.
; . . . The BASIC initialization dialog is then displayed on the console.
;
; . . . . . . . . Version Date Description
; . . . . . . . . 1.0 14-Aug-2016 M. Douglas, Original
;
;-----------------------------------------------------------------------

; Equates

SIOST . . . . . equ . . . . . 06h . . . . . ;SIO status register
SIODR . .. . . equ . . . . . 07h . . . . . ;SIO data register

. . . . . . . . . . . org . . . . . 1800h . . . ;location of this loader

; Store bytes in sequentially increasing memory pointed to by HL.
; . . . . . If the SYNC byte is detected (6Ah, ends the leader, marks the start of data),
; . . . . . HL is reset to zero. This code assumes the leader is less than 255 bytes long.

. . . . . . . . . . . .mvi . . . . . h,0 . . . . . ;HL->where to load binary (L set later)

loop . . . .. . . . lxi . . . . . sp,stack . . ;init SP so a RET jumps to loop
. . . . . . . . . . . .in . . . . .. SIOST . . . ;get sio status
. . . . . . . . . . . .rrc . . . . . . . . . . . . . . ;new byte available?
. . . . . . . . . . . .rc . . . . . . . . . . . . . . .;no (jumps back to loop)

. . . . . . . . . . . .in . . . . . SIODR . . . ;get the byte and store in memory
. . . . . . . . . . . .mov . . . m,a
. . . . . . . . . . . .inx . . . . h

. . . . . . . . . . . .sui . . . . 6Ah . . . . . . ;sync byte?
. . . . . . . . . . . .rnz . . . . . . . . . . . . . .;no (jumps back to loop)

. . . . . . . . . . . .mov . . . l,a . . . . . . . ;restart hl at zero (sync in 1st 256 bytes)
. . . . . . . . . . . .ret . . . . . . . . . . . . .. .;jump back to loop

stack . . . . . . .dw . . . . . loop . . . . . ;stack content jumps to loop when RET executed

. . . . . . . . . . . .end


Intel HEX Format:
:101800002600311218DB060FD8DB077723D66AC013
:041810006FC9021882
:0000000000


...
The Important Links to further Support:

Altair Basic 1.0
Tape Transport - TBD
Mike Douglas' YouTube video
Mike Douglas' website
...

The OP-80A Paper Tape Reader


...


The Solid State Music IO4 board


...


The Solid State Music IO4 board


...


The Cable Connections on the Solid State Music IO4 board


...


The OP-80A 3D Printed Paper Tape Transport SetUp


...


The OP-80A 3D Printed Paper Tape Transport SetUp with Small Table Lamp Illumination Over the Hole Reader Elements


...


OP80a_Kit_Assembly_Guide_V1.pdf
...

88-SIO Replacement Boards.pdf
...

OP80A as Altair Cassette on SSM-IO4.pdf
...

LOAD10.ASM . . . . . . . . . . LOAD10.HEX
...

BASIC Ver 1-0.tap
...

My Normal

1. Boot the Altair into Altmon
2. Hexload LOAD10.HEX
3. GOTO 1800
4. Crank the tape
5. Reset (restarts Altmon)
6. GOTO 0000
...


Using the front panel with Altmon

1. Boot the Altair into Altmon
2. Hexload LOAD10.HEX
3. Stop/Reset (hard reset)
4. Set address switches to 0x1800
5. Examine
6. Run
7. Crank the tape
8. Stop/Reset (hard reset)
9. Set address switches to 0x0000
10. Examine
11. Run
...


Hardcore using the front panel only

1. Power on the Altair
2. Stop/Reset (hard reset)
3. Set address switches to 0x1800
4. Examine
5. Hand load the loader (20 bytes)
6. Examine [to reset the Program Counter (PC) to 0x1800]
7. Run
8. Crank the tape
9. Stop/Reset (hard reset)
10. Set address switches to 0x0000
11. Examine
12. Run
...

88-SIO Replacement Boards.pdf
BASIC Ver 1-0.pdf
OP_80A_Manual_V2.pdf
OP80A as Altair Cassette on SSM-IO4.pdf
OP80a_Kit_Assembly_Guide_V1.pdf
LOAD10.HEX . . . . . BASIC Ver 1-0.tap
SIO - 0x00 and 0x01 (SSM OI4 Serial A)
... Parallel - 0x06 and 0x07 (SSM IO4 Parallel B)
...
SSM IO4 Addressing
... Serial block start - 0x00
... Parallel block start - 0x06
...
This makes the OP-80A/SSM IO4 parallel port combination appear as a vintage Altair 88-ACR and cassette player and the SSM IO4 serial port look like an Altair 88-SIO console from an early Altair 8800.

... My understanding is that in an early Altair 8800 the console would have been an 88-SIO at port address 0x00/0x01.
This could have probably been one of the cheaper "glass terminals". When I built my first S100 system in the early 80s I used a Televideo 910 as the coveted DEC VT100 was way too expensive for hobbyists.

... As far as I can tell, there was no standard for connecting the OP-80A. The original manual (attached) has the following unhelpful suggestion on page 3 "THE OP-80A MAY BE CONNECTED TO ANY MICROPROCESSOR SYSTEM WITH A PARALLEL INTERFACE."
So I think this was left as an exercise for the user. There is also a suggested serial card modification on page 10, but again, you would need a lot more than the manual to make this change to an 88-SIO serial card successfully.
.....
...
Tim's 3D Printer Files
Tape Transport STL.zip
OP-80A Bambu Printer Kit.zip

.....
...

.....
...

.....
...

.....
...