PDA

View Full Version : 8080 serial port questions



litterbox99
December 20th, 2010, 05:31 PM
I'm working on repairing my SSM IO4 (2 serial / 4 parallel) card.
I only care about the serial ports for now. I plan to use
one port for a console and the other to drive a DECtalk Express
speech synthesizer.

After replacing a few regulators, I powered it up and used the
following code to send ASCII "A" to Serial A on the SSM PCB.
(Using XP and HyperTerminal, 96008N1)

0011 1110 3E 076 MVIA Move into Accumulator;
0100 0001 41 101 an ASCII "A"
1101 0011 D3 323 Out on port;
0000 0001 01 001 port 1 referred as Serial A on PCB <--- note*
1100 0011 C3 303 JMP to start address;
0000 0000 00 000
0000 0000 00 000 address 000h

This worked fine, I admit I was excited :-) Continuous A's on my
HyperTerminal screen ! So I moved to serial B on the PCB
and changed one line of code; (note* )

0000 0011 03 003 port 3 referred as Serial B on PCB

This works, however, I get a continuous stream of chars
but not an ASCII "A". I get a dots, not punctuation, but an ASCII
char that looks like a dot. I should look it up...

If I change the value that I place into the accumulator, the
output changes as well on HyperTerminal.

My question is this..

Is it my program ?

Remember guys, I'm still learning.

Or, is it a fault on my PCB ?


These are my following assumptions as I understand.

The manual states the serial ports are as follows;
The board is strapped to match as directed in the
manual.


port 0 Serial A Status
port 1 Serial A Data

port 2 Serial B Status
port 3 Serial B Data

I assumed Serial B Data would be port 3, from
what I read in the manual, so that's why I changed
the code above to match.

Is my logic sound or do I have an issue on the PCB ?

I did swap the UARTS but the behavior remained the same.

I just don't want to chase my tail in circles.

I have a week off at the end of the year, so I'd like to get
some good "me time" with my Imsai and if I get the serial ports
working, I can start working on getting a ROM monitor up.

RichCini
December 20th, 2010, 06:09 PM
I'm encouraged by the fact that you're seeing something and your test program is fine for showing activity. SSM boards with UAR/Ts (like the AY3-1015) are pretty easy to use, requiring no initialization like other chips (like the 8250). I've used the 2P+2S (two parallel and two serial) version on several of my machines with great success and it's what I use in my IMSAI now.

I would just make sure that port B is physically configured for the the same baud rate and word length, etc., as port A. If they are, I'd try swapping the UAR/T chip between A and B -- that will eliminate the UAR/T chip itself from being the problem. If it works with the chips swapped, the problem is somewhere else on the board in the logic supporting the second UAR/T.

Chuck(G)
December 20th, 2010, 06:15 PM
Are the ports set up the same way (i.e. baud/bits/parity/stop)? (Check the jumpers at W3 and S1 and S2).

Also, I don't see any code in your example to check to see if the UART can accept the next character. You need to check the UART status. Since the IO4 can be set up a number of ways, I can't tell you what's what (see the jumpers for W1 and W2), but generally, you should be doing:

Start:
IN STATUS
ANI Status_mask for TBMT
JZ/JNZ Start (Wait until TBMT asserted)
MVI A,'A"
OUT DATA (send out your "A")
JMP Start (Lather, rinse, repeat)

RichCini
December 21st, 2010, 06:00 PM
I've used the straight "send a bunch of characters" thing before as a basic first stage test, but Chuck is correct -- the more proper way is to poll the status register in a loop until the transmitter is ready to send the next character before actually sending it. Usually the manual for the board has test routines in it which you can use to verify that the board works.

litterbox99
December 21st, 2010, 08:00 PM
I will add the code to poll the status registers before sending
the data. I don't understand what valid 'status' bits I should
expect so I can mask it. I'll have to read up on it, I
have a few code samples I can study.

Currently the board is strapped (W1 & W2) for 8251 emulation.
If this is not correct, how should I strap it for the proper
Status Word ?

What I've done tonight is make sure serial A = serial B as far
as all settings and jumpers. I've swapped the UARTs and
checked all the glue logic. I checked the baud rate clock
at the pins of the UARTs (153.8Khz) I even went as far as
checking the pull up resistors and dip switches! Visually the
board has no cuts or solder bridges.

I'll give it a rest for tonight.

Thanks for the input !

litterbox99
December 26th, 2010, 03:03 PM
Well I solved the issue with Serial B not working on this card !

Since the output was not as expected, I started looking at the
data bus on the card. After looking at the schematics and seeing
how the data buses were tied together at the UARTs, I probed
around on the board and found that RD8/DB8 - RD4/DB4 were not
tied to the data bus (for the UART on Serial B).

The way the PCB was designed and trace routed, Serial B relied on
PTH VIA's on the component side of W2 (for D3-D7) to carry it over to
the solder side of W2 to tie the data buses together.

With the absence of the Via's at this location, Serial B would NEVER
have worked from day one. Must have drove the original owner/builder
crazy as it did me. I can only guess it was a defect in the Electroless
process when the board was manufactured. (FWIW: in my youth I worked
in the 'wet lab' at a circuit board manufacturer for many years)

I simply took a machine pin socket, melted away the plastic, and soldered
the individual pins on both sides the board to W2. I now get output
on Serial B.

I wasn't going to let the board kick my a$$, go figure !

Now I just have to figure out the 'Status Bits' and I'm one step closer :-)

The traces in red are where the VIA failure existed on the PCB.

http://home.mchsi.com/~litterbox99/temp/ssm.jpg