• Please review our updated Terms and Rules here

Solid State Music IO4 nibble error. Troubleshooting assistance?

jhalbrecht

Experienced Member
Joined
Mar 25, 2015
Messages
93
Location
Mesa, Az
I'm repairing a Solid State Music (SSM) IO4 card. I'm configuring it as an Altair 88-2SIO which I've accomplished previously on another board. I verified my cables and TeraTerm config using Martin's 88-2SIOJ card first.

I cleaned up some questionable solder spots, checked voltages. The board I'm currently working on has a problem with a nibble. Any suggestions for further troubleshooting? I used a logic probe to verify S2 and S1 configuration switches.

SSM IO4 Repair Bad Nibble Board.jpg

Check out this table of what I typed and what is displayed along with the characters in binary and bad bits circled.

SSM IO4 Repair Bad Nibble.jpg

I've tried this with identical results on both serial ports.

This is the echo program I used for testing.

Code:
                ; 5/8/2015 JHA SIOECHO.ASM 
                ; Testing the SSM IO4 for Mits 88-sio compatibility. 
                ; Should echo characters on serial A port. Or B port see CTLPORT/DATAPORT EQUates.
                ; disassembled from Mits SIO code and recompiled to run under cp/m
                ; works on my S100 running JAIR cp/m 2.2
                
 0005 =         BDOS		EQU 5				; BDOS entry
 0006 =         RAWIO		EQU	6
 0009 =         WRITESTR	EQU 09h				; BDOS write string call. Terminate string with $
 000D =         CR			EQU 0dh
 000A =         LF			EQU 0ah
                
 0010 =         CTRLPORT	EQU	20o	
                ;CTRLPORT	EQU	22o	; Second serial port 'B'
 0011 =         DATAPORT	EQU	CTRLPORT+1
                
                ;		ORG	0		; start at 0 to compare / verify against opcode listings.
 0100           		ORG	0100h	; cp/m tpa I'm running my test under cp/m.
 0100 0E09      		mvi C, WRITESTR			; setup for BDOS string print call
 0102 112401    		lxi D, MSG1
 0105 CD0500    		call	BDOS			
                INIT:
 0108 3E03      		MVI	A,3	; disable interrupts for both ports A and B.
 010A D310      		OUT	CTRLPORT
 010C 3E11      		MVI	A,17
                		;mvi	A, 021	; Set port 1 to 8,2,n
 010E D310      		OUT	CTRLPORT
                LOOP:
 0110 0E06      		mvi	c, RAWIO	; give operator a chance to cancel with ^c (NOT WORKING)
 0112 1EFF      		mvi e, 0FFh
 0114 CD0500    		call bdos
                		
 0117 DB10      		IN	CTRLPORT
 0119 0F        		RRC
 011A D21001    		JNC	LOOP	; wait for input.
 011D DB11      		IN	DATAPORT
 011F D311      		OUT	DATAPORT
 0121 C31001    		JMP	LOOP
 0124 4563686F20MSG1:	DB		'Echo from IO4 serial data Port.',CR,LF,'$'
 0146           		END
 
I'm repairing a Solid State Music (SSM) IO4 card.

Check out this table of what I typed and what is displayed along with the characters in binary and bad bits circled.

View attachment 44570

I've tried this with identical results on both serial ports.

I decided to take another closer look at the bit pattern. I built up an Excel spread sheet. I'm only seeing what I'm calling bit 0 and 3 changing in the least significant nibble. I'm not seeing any change in the more significant nibble (MSN), on the left hand side, I did try to use several ASCII groups where that MSN changes for the actual character.

My thinking is that it's not a buffer as there doesn't appear to be a 'stuck' bit. I'm thinking configuration or clocking. The consistency of the error is interesting. Guess I'll go read the manual again.

Excel code
Code:
Column C =DEC2BIN(CODE(A2),8)
Column D =TEXT(C2,"0000 0000")

The spread sheet
Code:
enter echo	binary        nibbleized	a-b (errors)
a		01100001	0110 0001	
	`	01100000	0110 0000	 1
b		01100010	0110 0010	
	b	01100010	0110 0010	 
c		01100011	0110 0011	
	b	01100010	0110 0010	 1
d		01100100	0110 0100	
	d	01100100	0110 0100	 
e		01100101	0110 0101	
	d	01100100	0110 0100	 1
f		01100110	0110 0110	
	f	01100110	0110 0110	 
g		01100111	0110 0111	
	f	01100110	0110 0110	 1
h		01101000	0110 1000	
	`	01100000	0110 0000	 1000
i		01101001	0110 1001	
	i	01101001	0110 1001	 
j		01101010	0110 1010	
	b	01100010	0110 0010	 1000
k		01101011	0110 1011	
	k	01101011	0110 1011	 
l		01101100	0110 1100	
	d	01100100	0110 0100	 1000
m		01101101	0110 1101	
	m	01101101	0110 1101	 
n		01101110	0110 1110	
	f	01100110	0110 0110	 1000
o		01101111	0110 1111	
	o	01101111	0110 1111	 
p		01110000	0111 0000	
	p	01110000	0111 0000	 
q		01110001	0111 0001	
	p	01110000	0111 0000	 1
r		01110010	0111 0010	
	r	01110010	0111 0010	 
s		01110011	0111 0011	
	r	01110010	0111 0010	 1
t		01110100	0111 0100	
	t	01110100	0111 0100	 
u		01110101	0111 0101	
	t	01110100	0111 0100	 1
v		01110110	0111 0110	
	v	01110110	0111 0110	 
w		01110111	0111 0111	
	v	01110110	0111 0110	 1
x		01111000	0111 1000	
	p	01110000	0111 0000	 1000
y		01111001	0111 1001	
	y	01111001	0111 1001	 
z		01111010	0111 1010	
	r	01110010	0111 0010	 1000
 		00100000	0010 0000	
	 	00100000	0010 0000	 
!		00100001	0010 0001	
	 	00100000	0010 0000	 1
"		00100010	0010 0010	
	"	00100010	0010 0010	 
#		00100011	0010 0011	
	"	00100010	0010 0010	 1
$		00100100	0010 0100	
	$	00100100	0010 0100	 
%		00100101	0010 0101	
	$	00100100	0010 0100	 1
&		00100110	0010 0110	
	&	00100110	0010 0110	 
'		00100111	0010 0111	
	&	00100110	0010 0110	 1
(		00101000	0010 1000	
	 	00100000	0010 0000	 1000
)		00101001	0010 1001	
	)	00101001	0010 1001	 
*		00101010	0010 1010	
	"	00100010	0010 0010	 1000
+		00101011	0010 1011	
	+	00101011	0010 1011	 
,		00101100	0010 1100	
	$	00100100	0010 0100	 1000
-		00101101	0010 1101	
	-	00101101	0010 1101	 
.		00101110	0010 1110	
	&	00100110	0010 0110	 1000
/		00101111	0010 1111	
	/	00101111	0010 1111	 
0		00110000	0011 0000	
	0	00110000	0011 0000	 
1		00110001	0011 0001	
	0	00110000	0011 0000	 1
2		00110010	0011 0010	
	2	00110010	0011 0010	 
3		00110011	0011 0011	
	2	00110010	0011 0010	 1
4		00110100	0011 0100	
	4	00110100	0011 0100	 
5		00110101	0011 0101	
	4	00110100	0011 0100	 1
6		00110110	0011 0110	
	6	00110110	0011 0110	 
7		00110111	0011 0111	
	6	00110110	0011 0110	 1
8		00111000	0011 1000	
	0	00110000	0011 0000	 1000
9		00111001	0011 1001	
	9	00111001	0011 1001
 
Plug it into something with a working front panel, and execute an OUT instruction -- drop the OUT instruction somewhere in writable memory, examine, then single step. The OUT lamp should be lit on the front panel, high and low address bytes will show the I/O address, and the data lights will show the byte you're writing. Trace through the data paths and look for incorrect data.
 
D0 and D3 appear to be shorted to each other. Since it affects both serial ports, the short is on the internal data bus on the IO4 board. Verify a short is present with a meter looking between D0 and D3 on most any chip on the board that connects to the internal data bus. I’m guessing you’ll find another ugly joint or bent pin on the bottom somewhere.

Mike
 
D0 and D3 appear to be shorted to each other. Since it affects both serial ports, the short is on the internal data bus on the IO4 board. Verify a short is present with a meter looking between D0 and D3 on most any chip on the board that connects to the internal data bus. I’m guessing you’ll find another ugly joint or bent pin on the bottom somewhere.

Mike


Found the short on the W1 Status header. Inspecting the schematic I noticed that D0 and D3 came up on the W1 and W2 Status header/jumper on pin 9 an 12. Short on W2 9 and 12. For grins I tried pin 12 on W1 but couldn't get to the pin because the, to long, wires were crunched onto the header. I moved them out of the way. No more short. Check out the USB scope image, you can see where the white wire was pierced.

SSM IO4 D0D3 Short Culprit.jpg

Thank you all! I've got two more SSM IO4s to work on next. :)


Note; This SSM IO4 is s/n: 4269ar (4 may be an L)
 
The SSM IO-4 is definitely a nice little board to have. I may end up running reproductions of it at some point. I really like SSM's products :)
 
Wouldn't be surprised, it's a pretty complete "old style" S-100 I/O solution. SSM stuff is also usually of pretty clean/good design, so it's easy to adapt for your needs. I assume that's part of why it's currently popular, you can make it look like an Altair 88-2SIO or an IMSAI SIO.
 
Back
Top