• Please review our updated Terms and Rules here

Software Design for a 38.4 kbaud Data Terminal - AP-270

Best I could do, Myke. Here in the northwest it is so dark that it's hard to get a good photo!

Maybe it would be better to forget about the line drivers (and +/- 12v) and just use a MAX232 (or even set up TTL output to enable USB)? Conventional RS-232 might be a thing of the past?
"Thing of the past"? Sat it ain't so..... Besides, I have a bunch of 1488/89's that are just taking up space. As we speak, KiCAD is auto-routing the board right now. Then create the Gerbers, and off to fab. Then I'm gonna tackle the 38.4K Terminal from the National Semi Application note. That one is gonna take more times as I will have to data enter the code from the document, or get it converted from what's in the PDF to text. And the design will need to be modified to use a Z-80 instead of the 8080. And for this one, I'll use the KR2376 for the matrix keyboard decoder. I'll keep the same footprint so I can use which either board works out best.
 
Besides, I have a bunch of 1488/89's that are just taking up space.

I apparently need to build a few dozen terminals one of these days because I made the mistake of buying several tubes of SN75185s "real cheap" when I ultimately only needed six of them. They're a good 1-chip alternative.

Not to say a MAX232 isn't a decent option if you don't need +/-12v anywhere else in your device, but it's certainly not hard to find the regular old drivers yet.
 
While KiCAD auto-routes to it's heart's content, I figured I'd start getting the listing for the 38.4K terminal into a state I can use. Now, while I do dabble in the Z-80 stuff, 8080 is a whole different game, hence my need to get this converted. Nor do I have any knowledge of the Starplex Macro-Assembler. So I was left scratching my head when I cam across this:

RWRG equ low RR4B-low RR1+2

I have no earthly idea what the 'low' part of that is, or is supposed to do. Apparently, the listing shows a value of 60h, but that was obviously derived by whatever that formula is. The ones with a variable plus or minus some value makes sense, but the 'low' part.... Anyone have any ideas?
 
While KiCAD auto-routes to it's heart's content, I figured I'd start getting the listing for the 38.4K terminal into a state I can use. Now, while I do dabble in the Z-80 stuff, 8080 is a whole different game, hence my need to get this converted. Nor do I have any knowledge of the Starplex Macro-Assembler. So I was left scratching my head when I cam across this:

RWRG equ low RR4B-low RR1+2

I have no earthly idea what the 'low' part of that is, or is supposed to do. Apparently, the listing shows a value of 60h, but that was obviously derived by whatever that formula is. The ones with a variable plus or minus some value makes sense, but the 'low' part.... Anyone have any ideas?
I'd assume that meant the low-order byte of a 16-bit quantity. Other assemblers have similar operations.

Why bother with converting 8080 to Z80? 8080 code runs just fine on a Z80, with very few and rare exceptions.
 
FWIW, here's the ROM content from my ZRT-80. I'm pretty sure (it was a looong time ago) that they came from DRC and I never modified any of the code. So they are as close to original as anything out there.

Roger
 

Attachments

FWIW, here's the ROM content from my ZRT-80. I'm pretty sure (it was a looong time ago) that they came from DRC and I never modified any of the code. So they are as close to original as anything out there.

Roger
Thanks, I have binary files from somewhere, and the source, but it is always good to compare against 'as built' stuff. You just never know......
 
I'd assume that meant the low-order byte of a 16-bit quantity. Other assemblers have similar operations.

Why bother with converting 8080 to Z80? 8080 code runs just fine on a Z80, with very few and rare exceptions.
Chuck, you were correct... First I started trying some of the math out on the values them selves. Nope, dead end. Then I did the math on the location the values are stored at per the listing. Bingo... The location of RR48 is 01E0h and the location of RR1 is 0182h. If you subtract the low bytes of both, you get 5Eh. Add 2 to that and you get the value of 60h the listing has. Thanks....
 
Last edited:
While I am going through the process of getting the code listed in the App Note for the 38.4K Data Terminal from National Semi, I came across this bit of code. In Z-80 mnemonics it is a LD A,nn. But the code says '03h' but the listing shows '1E'. And the line of code contains 'XOR 01Dh' which doesn't fit either. Looks like another head scratcher for me. Anyone have any ideas, or point me to the 'error of my ways'.....

1738362262003.png
 
While I am going through the process of getting the code listed in the App Note for the 38.4K Data Terminal from National Semi, I came across this bit of code. In Z-80 mnemonics it is a LD A,nn. But the code says '03h' but the listing shows '1E'. And the line of code contains 'XOR 01Dh' which doesn't fit either. Looks like another head scratcher for me. Anyone have any ideas, or point me to the 'error of my ways'.....

View attachment 1294107
If I had an actual brain, I'd be very dangerous.... I looked at that many times earlier and never saw it. I just did again; once I changed the 'XRI' 8080 mnemonic to the 'XOR' Z-80 equivalent.... Curious now how/why it was written like that, and how it actually assembled.....
 
Last edited:
While I am going through the process of getting the code listed in the App Note for the 38.4K Data Terminal from National Semi, I came across this bit of code. In Z-80 mnemonics it is a LD A,nn. But the code says '03h' but the listing shows '1E'. And the line of code contains 'XOR 01Dh' which doesn't fit either. Looks like another head scratcher for me. Anyone have any ideas, or point me to the 'error of my ways'.....
03 xor 1D = 1E

in other words MVI A, (03h xor 1dh)
 
Well, lest anyone think I have skipped on on this little project, I just finished up converting the code listed in the National Semi App Note. I did it page by page in order to be able to make sure there were no transcribing typos. What is in that App note seems to be a scanned copy of something from a dot matrix line printer. And converting those pages into text caused a lot of G, Q, C characters to get flipped; and quite a few others as well. It now assembles with no errors but I still want to compare the code byte by byte and confirm the symbol tables match. Once that is complete, I'll post it all here in case anyone wants to use it for something.... I will eventually do a board for this as well, like the one I did for the ZRT-80. And maybe I'll even do a comparison. Who knows. Turns out the binary for the National Semi terminal is 2,044 bytes; 4 bytes shy of the limit for the EPROM they had. That's cutting it close....
 
I do have, maybe, a dumb question...... Once I get this 8080 to Z-80 conversion done, where is a good place to put it? I don't have a GitHub and don't really want to go down that path. Would bitavers.org be a good place? I looked in their National Semi folder and didn't see anything on this terminal listed. If that is a good idea, I guess I'd need to figure out how to get it to the folks that run the site.
 
I do have, maybe, a dumb question...... Once I get this 8080 to Z-80 conversion done, where is a good place to put it? I don't have a GitHub and don't really want to go down that path. Would bitavers.org be a good place? I looked in their National Semi folder and didn't see anything on this terminal listed. If that is a good idea, I guess I'd need to figure out how to get it to the folks that run the site.

The original National app note is already on Bitsavers:

I don't know if Bitsavers is interested in archiving derivative work like your conversion to Z80 code. You can find out by emailing the contact address for bitsavers.org which can be found at the bottom of the home page: aek at bitsavers dot org
 
Okay, I have finally gotten, what I hope, is all the stuff together to build out a 'retro' version of the ZRT-80. All the software related stuff I have is there, all the documentation I have is in there, the KiCAD drawings and the Gerber files. I'll probably put an order in with JCLPCB in a few weeks to get some boards built. And I'll let you know how it turns out. As for the one from National Semi that started this topic; I have the code converted to Z-80 mnemonics, and I'll be doing the same with spinning up a board. It'll have the same footprint as the ZRT-80, so I can swap them in and out to see how they compare. Since both say they emulate a Hazeltine 1500 terminal, it should be an interesting comparison....

Well, so much for that, it says the ZIP files is too big..... I guess if anyone if interested, DM me and we'll figure something out. Never mind, I got rid of a couple large TIFF files.
 

Attachments

I'm now working on getting the schematic of the NS 38.4 Kbaud Data Terminal in KiCAD so I can get a board, or five, made. I came across what I think is an omission in their included schematic. The 8080 has an INTE pin (16) that is missing. Given how the software appears to work, this pin should be part of the circuit, and I can't see it anywhere. Am I missing something? I confess I know 'zip' when it comes to 8080's.
8080schematic.jpg
 
The 8080 has an INTE pin (16) that is missing. Given how the software appears to work, this pin should be part of the circuit, and I can't see it anywhere.

From the datasheet it appears thar INTE is just an output that can allow external circuitry to know if the CPU’s internal interrupt disable flag is set. It’s not vital for the functioning of interrupts. (I could imagine some possible scenarios where it might be useful for the hardware designer, but yeah, in most cases it’s not going to be necessary.)
 
From the datasheet it appears thar INTE is just an output that can allow external circuitry to know if the CPU’s internal interrupt disable flag is set. It’s not vital for the functioning of interrupts. (I could imagine some possible scenarios where it might be useful for the hardware designer, but yeah, in most cases it’s not going to be necessary.)
I was hoping that would be the case. I guess what threw me off was that the schematic lists 'WAIT' as NC, but the INTE pin isn't even mentioned. I'm gonna flag it as no connection in KiCad so I don't get a design error message. Thanks
 
Back
Top