• Please review our updated Terms and Rules here

Info on Solid State Music IO4 serial card

Hi King;
One other thing I have found helpful, when I an trying something new or different.. I Clear ALL Ram memory, with a small Routine, that I got from one of my Bug Books.. I call it Wipe-out, You need to manually stop it after letting it run a few seconds. But, it clears all memory.. That way when You are trying to find out just what got loaded and what didn't, it is easy to tell.. You don't have to guess when random bits are all over the place in memory.. Here is the program.. starting at Location 00H...
00 97
01 2e
02 0c
03 26
04 00
05 77
06 23
07 c3
08 05
09 00
Start it at 00H and let it run..
THANK YOU Marty
 
Hi King;
The Echo program, was a generic one, it needed to be configured for the type of boards and ports you have.. Also, make sure that Your speed (Baud Rate) and configuration (8Bits, No Parity, 1 stop bit, and NO Hardware Shaking) are what you are set up for.. Also, I used to get From Radio Shack or you can find them online is a Led Signal Box or a Breakout Box, for the Serial ports.. I have them for Rs-232 (DB-25) pinout, I don't know If you can get them for DB-9 Pinout.. But, it would be a good Idea to get yourself one.. Then set the Baud rate to very SLOOOOOW (like 110 Baud) and you can see the LED's change color, as the Bits go by.. That would help locate Your Trouble..
THANK YOU Marty

Marty,

I know the serial device you're talking about, I did look around for one a while back but couldn't find one, I'll have another look. I was sure this time round to solder a db25 connector on the cable, I wanted to get it exactly the same as your specs. I'll go another round with the Altair on the weekend, I suspect that I'm fairly close now, just a matter of sorting out the echo program.
 
I've finally managed to get some success with IO4 and the Altair. I've managed to get a successful echo on serial port B. I can't get port A to work aside from getting a continuous stream of garbage coming through the terminal. But I've set up port B as per the Altair revision 0 instructions and I have a reliable echo at 9600 baud. This is kind of bitter sweet though because I can't see a way to set port B to port 20 for loading Basic.
 
dumb question - have you tried a null model connector in port A or straight through?

Was a good suggestion Bill, I tried it out, but no go, I didn't get any response at all with a null modem cable. The port headers on the card should be wired the same for both port A & B and since I can get port B working with my cable, port A should work the same. I've only got one cable from the card to the DB25 connector and I've tried the same cable in both headers on the card. In any case here's proof that the SSM IO4 can emulate an 88-2SIO. I'm using the exact same echo program as I used for the 88-2SIO byte for byte an it works. It seems to work better too, the echo is more reliable through Tera Term and I'm not using any kind of delay.
 
I did some more testing on serial port A on the IO4, and I've noticed a couple of things. As soon as I run the echo program I start to get a continuous flow of noise characters through the terminal, but if I press a key, the key is echoed back. The flow of "noise" seems to increase with higher baud rates. I've tried several different baud rates, but none seem to make it come good. I've also noticed that when I run the echo program configured for serial port A, the following front panel lights are on: A12, A4,A3,A2 and A1. But when I run the echo program configured for serial B, I get an additional light on the front panel: A9.

Does anyone have any idea why A9 is on with serial B and not A?

I'm hoping that one of the chips driving port A may be defective and that I can simply swap it out with one from port B. I've already tried swapping the UART chips and the 74367's and both sets work on port B. I'll do a bit of trial and error with the others.
 
You may be seeing activity with the A9 line due to how the board is decoding addressing. The IO-4 uses standard 40-pin LSI UARTs, so you should be able to isolate the UART from the RS-232 level converters (OP-AMPs or transistors on the IO-4, I don't remember). Pull the UART from its socket and jump the send and receive pins with a bit of wire. Your terminal should then echo as long as power is applied -- obviously you won't be able to use channel A with the UART pulled. If you're still getting garbage there's a good chance it's in the level converters.
 
You may be seeing activity with the A9 line due to how the board is decoding addressing. The IO-4 uses standard 40-pin LSI UARTs, so you should be able to isolate the UART from the RS-232 level converters (OP-AMPs or transistors on the IO-4, I don't remember). Pull the UART from its socket and jump the send and receive pins with a bit of wire. Your terminal should then echo as long as power is applied -- obviously you won't be able to use channel A with the UART pulled. If you're still getting garbage there's a good chance it's in the level converters.

Ok thanks, sounds like a good test I'll give it a go.
 
Had some time today to re-visit the SSM IO4, and I'm glad to report that I've now got both ports working. As a last ditch effort I shuffled some of the IC's on the bottom right section of the card and bingo, port A now echoes fine. And better still port B works fine too. So nothing defective it must have been one of those IC's just requiring a re-seat.

That's the good news, bad news is I tried to load basic using the same process as the 88-2SIO and I couldn't get it to work. I had another look at the SSM IO4 manual, and it indicates that the Altair revision 0 and revision 1 modes replicate an SIOA because the suggested console port to configure the card to is 0,1.

Edit: I double checked things and found a problem with the 1st stage boot loader I have on one of my PROMS, one byte was incorrect. So I fixed that and set the card back to ports 20,21 and now when I transfer 4k Basic, I can get it to load and run through Tera Term, but instead of a MEMORY SIZE message I just get a Z. But Basic does function, I can respond to the initial questions with Y and N, but the text is garbled through the terminal. I can type in commands and even program lines and they are saved, but when I run the program, I only partial output. I am very close to getting this working, but something is still not right.

I suspect the status word configuration is not right. Does anyone know what bits correspond to DAV and TBMT on the 88-2SIO?

The SSM IO4 is currently set so that DAV (data available) is set to bit 0, and TBMT (transmit buffer empty) is set to bit 7. Reading Marty's post above he said this his card was set to DAV 1 and TBMT 7. I tried that but just got a streaming echo of whatever character I typed through the echo program.
 
Last edited:
2SIO (Motorola ACIA) is DAV on bit 0 and TMBT on bit 1, both positive logic. The SIO cards had different flag locations than the 2SIO and were also in different bit locations between rev 0 and rev 1. The rev 1 flags were negative logic in the SIO.
 
2SIO (Motorola ACIA) is DAV on bit 0 and TMBT on bit 1, both positive logic. The SIO cards had different flag locations than the 2SIO and were also in different bit locations between rev 0 and rev 1. The rev 1 flags were negative logic in the SIO.

Great info. Going by this, the SSM card can be configured for positive or negative status sensing. Installing the 7367's sets it up for positive sensing as with the 2SIO and SIOA rev 0. This is how my card is currently configured.

I tried this morning setting the status bits to DAV: 0 and TBMT: 5, but I still get the wonky terminal output with Basic. It loads ok, terminal input is ok but terminal output is not right.

Another thing that may be an issue is that the I04 has dip switches on it to set the bits and parity, which means that they cannot be switched in software like the 2SIO. In the instructions for loading 4k basic, once you get the memory prompt you are instructed to switch the serial port to 7 bits, even parity. I can't see how this can be done with the IO4 as these are set via the switches on the card. Still it doesn't affect Basic loading or running how I've got it so far.

On the plus side with the IO4, I can now get Basic to load consistently at 9600 with no delay and it is definitely working inside the Altair, it just seems the terminal output is the issue.
 
Tell me again exactly what your configuration is now: Are you loading version 4 or version 3.2 of 4K BASIC? Are you loading through a 2SIO-style port at octal address 20/21, or an SIO at 0/1? If SIO, did you wire it up to look like a rev 0 or rev 1 SIO?
 
Tell me again exactly what your configuration is now: Are you loading version 4 or version 3.2 of 4K BASIC? Are you loading through a 2SIO-style port at octal address 20/21, or an SIO at 0/1? If SIO, did you wire it up to look like a rev 0 or rev 1 SIO?

Details are as follows:

- Loading 4K Basic v3.2 from tape file: 4kbas32m.tap, (the one from the Altair32 emulator). Using Tera Term on pc to send file to Altair in binary mode.

- SSM IO4 configured as follows:

- Port A set to octal address 20,21 via dip switches on card
- Port A set to 8 data bits, 2 stop bits, no parity and 9600 baud. Set via switches and jumpers on card
- Card set so that status port is first data port last, (MITS standard)
- Card set so that status word is positive sensing, (74367's installed in slots U16 & U18 )
- Status word is configurable, currently set to DAV: bit 0, TBMT bit: 1
- Boot loader being used is the one from the 1977 MITS manual for 88-2SIO
- Switch 11 up on front panel of Altair to indicate serial 1 of 88-2SIO, all other switches down
- Memory cards in Altair, I have tried both a MITS 4k and CCS64k outcome is the same.

With things set up like this, I can run the echo routine with perfect echo.

And also when I load Basic using the 1st stage boot loader, Basic loads and runs. Once Basic runs I get the prompts but output is garbled. But I can still input responses and input is fine. I can also input commands like PRINT "TTTTTTT", and terminal will output: TTT. Other commands also work, for example I entered a simple basic program:

10 A = 1
20 IF A = 1 THEN PRINT "TTTTTTTTTT"
RUN

The program outputs: TTTT

If I then change line 10 to:

10 A = 2
RUN

Nothing is output (as it should).

So Basic is definitely working, it just seems the terminal output is not right.
 
Last edited:
Everything looks about right. One possible issue: The BASIC 1977 manual has the version 4.0 bootstrap loader with the byte at octal location 011 set to octal 302 (this is the leader and loader length byte). This byte should be octal 256 for loading the 4K BASIC 3.2 tape.

Regarding changing data length to 7 bits with even parity in TeraTerm once BASIC is loaded: This is a "trick" simply to make TeraTerm ignore bit 7 from BASIC (this fixes the garbage characters seen from 4K BASIC). BASIC does not put valid parity into bit 7, so technically TeraTerm is receiving many bytes with parity errors. However TeraTerm ignores parity errors and displays the 7 bit character anyway. Meanwhile, Teraterm is sending 7 bit characters plus a parity bit to BASIC, but BASIC ignores bit 7 (the parity bit), so everyone is happy! What this all means is that your IO4 card does not need to be configured to match the change we make to TeraTerm after booting -- it should be left 8N2 as it was for booting.
 
Everything looks about right. One possible issue: The BASIC 1977 manual has the version 4.0 bootstrap loader with the byte at octal location 011 set to octal 302 (this is the leader and loader length byte). This byte should be octal 256 for loading the 4K BASIC 3.2 tape.

Regarding changing data length to 7 bits with even parity in TeraTerm once BASIC is loaded: This is a "trick" simply to make TeraTerm ignore bit 7 from BASIC (this fixes the garbage characters seen from 4K BASIC). BASIC does not put valid parity into bit 7, so technically TeraTerm is receiving many bytes with parity errors. However TeraTerm ignores parity errors and displays the 7 bit character anyway. Meanwhile, Teraterm is sending 7 bit characters plus a parity bit to BASIC, but BASIC ignores bit 7 (the parity bit), so everyone is happy! What this all means is that your IO4 card does not need to be configured to match the change we make to TeraTerm after booting -- it should be left 8N2 as it was for booting.

I'll try the suggestion with the loader and I'll keep tinkering with different settings. But I'm not too far off, considering how well things are working internally. Appreciate your help, you obviously have a wealth of knowledge regarding this stuff.

I should get my 88-2SIO back from the tech this week, so I'll be able to get stuck into that again will be good to have both cards to work with.
 
Everything looks about right. One possible issue: The BASIC 1977 manual has the version 4.0 bootstrap loader with the byte at octal location 011 set to octal 302 (this is the leader and loader length byte). This byte should be octal 256 for loading the 4K BASIC 3.2 tape.

Regarding changing data length to 7 bits with even parity in TeraTerm once BASIC is loaded: This is a "trick" simply to make TeraTerm ignore bit 7 from BASIC (this fixes the garbage characters seen from 4K BASIC). BASIC does not put valid parity into bit 7, so technically TeraTerm is receiving many bytes with parity errors. However TeraTerm ignores parity errors and displays the 7 bit character anyway. Meanwhile, Teraterm is sending 7 bit characters plus a parity bit to BASIC, but BASIC ignores bit 7 (the parity bit), so everyone is happy! What this all means is that your IO4 card does not need to be configured to match the change we make to TeraTerm after booting -- it should be left 8N2 as it was for booting.

deramp,

With a clear head I went back over everything again and I realized that I connected TBMT to the wrong status bit. I fixed that and what do you know SUCCESS!

I now have 4k basic loading. Them SSM IO4 is now fully replicating a MITS 88-2SIO.

Thanks again for your help.
 
deramp,

With a clear head I went back over everything again and I realized that I connected TBMT to the wrong status bit. I fixed that and what do you know SUCCESS!

I now have 4k basic loading. Them SSM IO4 is now fully replicating a MITS 88-2SIO.

Thanks again for your help.

Great news! Good work.
 
Thanks. After the success with 4k Basic v3.2, I also tried v4, 4k & 8k Basic, and they both load fine. SSM IO4 is great, it loads basic consistently every time. This morning I wired up another connector cable so now I can make use of both ports. I want to try and load CP/M via the APE disk emulator.
 
Last edited:
In order to run disk-based Altair software, I'm going to work on an S100 board this summer that duplicates the Altair floppy controller interface along with several Altair floppy drives implemented in NVRAM. Altair software will run unmodified (Altair Disk BASIC, Altair DOS, Lifeboat and Burcon CP/M for Altair, etc.).
 
In order to run disk-based Altair software, I'm going to work on an S100 board this summer that duplicates the Altair floppy controller interface along with several Altair floppy drives implemented in NVRAM. Altair software will run unmodified (Altair Disk BASIC, Altair DOS, Lifeboat and Burcon CP/M for Altair, etc.).

Sounds great, keep us posted on progress. I've had a look at your Altair clone, it's very impressive.
 
Back
Top