• Please review our updated Terms and Rules here

DIY Native Tandy 1000 EX/HX-bus dual serial card

Eudimorphodon

Veteran Member
Joined
May 9, 2011
Messages
7,122
Location
Upper Triassic
Per some overloading in some other threads, one of the projects I've been working on for my Tandy 1000 EX is a native serial card based on the 16552 dual UART, which is essentially two 16550 enhanced FIFO-equipped UARTs joined at the hip. I received my prototype PCB boards and some UARTs nearly two weeks ago, but the 75185 transceivers that in retrospect were probably stupid of me to have ordered from eBay took *forever* to get through the mail, so I was just able get down to soldering one together last night.

The starting basis of the schematic for this board is the serial portion of Sergey's combo FDC and serial port board that uses a single 16550. I wasn't able to find (I'm sure it's out there) a design using the 16552, so I adopted the circuit based on the datasheet; the 16552 seems to be specifically optimized for use in PC applications so most of the work involved making a new KiCad library symbol for the part. A 7408 AND gate is used to combine the "second channel" and "chip select" signals for COM2, but otherwise the decoding hardware is essentially the same. I removed the IRQ jumpers and just hardwired IRQ4 to the first channel and IRQ3 to the second (This seems reasonable to me for a Tandy 1000 with no built in devices using those IRQs and *probably* only one serial card), but there are jumpers to select between COM1/3 and 2/4 for the two channels respectively.

Anyway, here's the board with all the sockets soldered but chips not populated:

serial_unpopulated.jpg

Here it is installed with my homebrew RAM/ROM/Calendar and IDE header boards:

serial_installed.jpg

This picture shows a slight issue; in order to save money on the prototype run I limited the board size to 100x100 mm. (Going over that bumps the price up by about a factor of ten.) Because of this the serial ports are recessed slightly from the back of the machine. I don't think in practice this will be a big problem. I did include some holes in the board for interfacing with some kind of mounting hardware, I'm going to talk to a friend who's a 3D printing guru and see if it might be possible to 3D print a mount that can make the recessed ports look "right" while stabilizing the board for plug insert/removals, etc.

Check-It! identified two serial ports as being present after the initial power on:

serial_present.jpg

So I downloaded CuteMouse 2.1b4, attached one of the new-old-stock mice:

newmouse.jpg

I scrounged up (I have 8 of them so I figured one would do do as a smoke test), and tried loading the driver:

cutemouse.jpg

And... at least so far as driving a mouse goes, the card seems to work. It passes Checkit3's input device test:

mousetest.jpg

Works in Qbasic, Edit, and Hoyle's Book of Games:

hoyle-mouse.jpg

And everything also still works when I switch the mouse to COM2 instead of COM1.

I'm going to try to scrape up the bits I need to do a null-modem test later, but working with a mouse is at least a promising sign.

As an aside, I'm impressed with the Cutemouse driver; it automatically checks to see if there is available UMB space to load itself into (you don't have to "loadhigh" from autoexec.bat), and it's working with the UMB manager I have driving the upper memory blocks provided by my custom RAM card. I still have over 609k of lower DOS memory after the mouse driver loads. (And it takes less than 4k from the UMB pool, so I still have nearly 80k free there.) I need to see if I can get some of the XT-compatible paint programs I used to while away countless hours on back in the 80's working on this system in full 16 color Tandy Graphics glory.
 
Here are a couple more pictures showing how the port alignment works out with the current prototype.

portalign.jpgbuttonedup.jpg

It's actually not bad; the ends of the male connectors are only about a millimeter or two behind the surface of the stock filler plates. There's no problem/interference with at least the mouse cable when the machine is all buttoned up. If I were to make future revisions of this I could simply place the serial connector footprints a couple more millimeters closer to the edge of the board. A 3D-printed backplate might work nicely even as-is. Should probably get some retaining nuts for the ports, I guess.

The ports also pass CheckIt's UART test that uses the internal loopback:

20190912_153300.jpg

(Edit: In case anyone's wondering, I stuck the square of electrical tape on top of the oscillator because between the socket I used for it and the not-trimmed-as-short-as-they-could-be pins it sticks up high enough that it might be a shorting hazard if it were in the middle of the stack instead of the top. I only used a socket in case I guessed wrong about a 1.8432mhz crystal being the right choice for XT compatibility with this UART.)
 
This is awesome stuff, new PLUS cards in 2019!!

I sent you a PM but could not include pics so I suppose here is good as any place.

IMG_1284.jpgIMG_1283.jpg
 
a few words,
"shut up and take my money"
when you are going to have these available?
 
I sent you a PM but could not include pics so I suppose here is good as any place.

Neat! I'll have to see about scrounging up a suitable power supply for it when it arrives. (And possibly improvise something for a keyboard, I have a few ideas along those lines.) I think HXes are more common than EXes so being able to test against both will be great.
 
I might could have a spare PS if you have a spare of that card or so....

Heh. It's the missing keyboard that's going to be the hard part. Don't have an extra of those, do you? ;)

I can definitely solder up one of these serial cards for you if you're happy with the prototype design. (I'll want to finish testing it first with real serial transfers, etc, first, of course.) I have four more of the DUART chips and... way more than I need of the serial buffer chips on hand. I will have to restock on some other parts first. I actually miscalculated and was one short of 74HCT138 decoders when I put this together and had to use one HCT and an LS I had lying around. I've also used the last of my bus connectors, etc...
 
What would you use a second serial port for in a Tandy 1000 EX/HX? One for a mouse is a must, no argument there. What about the second port? XYZMODEM-Null Modem transfer? Slow and less than 100% reliable. Modem? Who uses one these days? Internet over Serial? Ok for text, not so OK for anything else.
 
What would you use a second serial port for in a Tandy 1000 EX/HX?
It could be used for MIDI, in lieu of some MPU/Plus-adapter combination. Software compatibility is more limited, but assuming even a standard-rate clock, the COMx@38400bps ─► RS-232-bearing tone generator (─► MIDI OUT etc.) option is available.
 
What would you use a second serial port for in a Tandy 1000 EX/HX? One for a mouse is a must, no argument there. What about the second port? XYZMODEM-Null Modem transfer? Slow and less than 100% reliable. Modem? Who uses one these days? Internet over Serial? Ok for text, not so OK for anything else.

I suppose really, practically speaking what would you use a Tandy 1000 for? Name a task and it's going to be more slow and less reliable than most other options. :p

The specific use case I had in mind was file transfers, because while I'm the first to admit that using Kermit or whatnot isn't the most fun thing in the world I have hope at least that it'll be less of a massive PITA than spoon-feeding data into the machine via real/virtual floppy disks. Obviously a network card would be better, but that's a project for next... whatever. The other possible use I came up with for it would be to throw print jobs at it; it should be pretty trivial to capture that over serial (compared to parallel), and I know I've seen Epson MX and other printer emulation filters floating around I might be able to plumb into it.

And also, really, if you're going to waste your time making a Tandy Plus serial card why *not* make one with two ports? The mountain is there, climb it.

Anyway, I spent the evening checking out the serial ports with data and they seem to work. I tested basic connectivity up to 115200 baud across a null modem cable to an old Linux laptop (old enough to have a hardware serial port, not a USB dongle) and they seemed to work fine. I did scrounge up some retaining nuts because the little lip under the ports was encouraging stuff to come loose.

On the topic of "Internet over Serial", I did test that too. After a fair amount of scratching my head and swearing I got epppd from the DOSPPP collection to do its thing. It pings:

ping.jpg

And it does internet BBSes:

telnet_bbs.jpg

(This is fun and I will probably revisit that.) It also does FTP, but it is pretty darn slow to internet servers, only around 1k a second no matter what I set the PPP daemon to run at. My first crack at TCPdump-ing suggests it's not really a problem at the serial end, but more everything upstream resenting some combination of 576 byte MTUs and *significant* ACK latency. But, eh, it does technically work?

In any case I do think I at last found the thing that having upper memory blocks in a Tandy 1000 is useful for:

packet_driver.jpg

epppd's 64.8k loaded high, so I technically have Internet access while still having 609k free in lower memory, in a machine that effectively only has 624k. I still get a kick out of being able to do this on an XT class machine; first "real" machine I had with UMBs was a 486.
 
Last edited:
It could be used for MIDI, in lieu of some MPU/Plus-adapter combination. Software compatibility is more limited, but assuming even a standard-rate clock, the COMx@38400bps ─► RS-232-bearing tone generator (─► MIDI OUT etc.) option is available.

That actually brings up a question that's been gnawing on me a little: I noticed when I was scrounging around for information on building a PC serial card that there were some late-model 165x0 ISA cards that were sold as "high speed" serial cards with higher clocks. (The datasheet for the 16552 says it can handle clocks into the 20mhz ballpark.) I couldn't find a clear explanation about how/if you could use those cards under DOS. Is it possible to slap a higher speed crystal into a normal card and inform DOS about the change so you can still set baud rates "normally" while giving you more resolution for oddball speeds like MIDI, or to stay compatible would you need a card with multiple clock sources and switch between them with programs that specifically know about the different multipliers?
 
... or to stay compatible would you need a card with multiple clock sources ...
This is probably the ideal solution.

That said, if I had an EX/HX and one of your cards, and since I know I'd only be using it for mouse and MIDI purposes (using my modified game drivers), I'd probably go with a 2.0MHz crystal. This provides an exact 31250bps MIDI rate (125000/4), allowing for the use of just the passive, current-loop MIDI adapter. In addition, a 1201.9bps rate (125000/104) is available, and is well within error tolerance of 1200bps - usable by a modified/recompiled CuteMouse driver, where the rate divisor has been changed from /96 to /104.
 
I've been doing some more testing with serial transfers, and I'm starting to wish I had another ancient 8088-class computer sitting around to sanity check against. I'm curious what kind of effective speeds people usually get out of XT machines using KERMIT. I *think* the serial port hardware is working correctly, as I'm not getting any errors with RTS/CTS handshaking enabled, but I'm also finding that the transfer speeds max out at around two kilobytes a second.

(If I run at 19200 baud the transfer will run at a bit under 2K a second and the DOS client at the receiving end will tell me when the transfer is complete that the transaction was "80-plus percent" efficient. Doubling to 38400 will raise the speed *slightly*, but at the end the client will say it was 40-something percent efficient. Increasing baud rate after that doesn't increase the speed or the error count, which remains at zero, but at 115200 baud the transfers will be deemed "16%" efficient.)

Benchmarks claim the read speed at least of my CF card is close to 300k so I don't think disk I/O is likely to be the limiting factor here, is this simply how fast an XT goes with the Kermit overhead? I don't think I ever had faster than a 2400 baud modem in a real XT back in the day, so I'm not sure what to expect. (2K/second is almost ten times faster than that, I guess.)
 
Back
Top