• Please review our updated Terms and Rules here

Interfacing a HD44780-compatible Display to the S-100 Bus

glitch

Veteran Member
Joined
Feb 1, 2010
Messages
5,051
Location
Central VA
I had some time to hack around tonight, so I cobbled together something I'd been wanting to do for a little while: I wanted to rethink a previous attempt to interface a HD44780-compatible character display to my S-100 system. My previous attempt had failed due to timing limitations of my unknown-manufacturer surplus 16x2 LCD display, which I'd attempted to interface almost directly to the bus (that is, no PIA chips or anything, only 7400 series logic).

This time around, I decided to let an 8255 PIA do the interfacing with the display...this means that set-up times for the various HD44780 signals doesn't depend on the bus timing. As luck would have it, the S100computers/N8VEM Serial IO board I'd recently started building has an 8255 on-board with Port A and Port B brought out to a header, along with four signals from Port C and +5/GND. I put together a wedge board that connected the Serial IO board to my character display, a Noritake ITRON Vacuum Flourescent Display that's pin-compatible with the HD44780:

hd44780-s100.jpg


I connected the 8 data bits from 8255 Port A to the display's 8 data bits, PC4 to Register Select, and PC5 to Enable. R//W got tied to ground, since I didn't want to bother polling the display to see if it was finished. The little wedge board also contains a 22 uF capacitor and a LED with dropping resistor to indicate power is on.

My Serial IO board is still jumpered as recommended for initial test in the s100computers.com documentation, so the 8255 PIA is addressed at 0xA8-0xAB. To do a simple test, I brought up SID86 under CP/M-86 on my CompuPro 8/16 and did the following:

Code:
QOAB,80        ;Output 0x80 to the 8255 control reg, all bits output
QOAA,20        ;0x20 -> Port C, set Enable, RS = 0
QOA8,30        ;0x30 -> Port A
QOAA,00        ;Clear Enable, cause the HD44780 to process the command
QOAA,20        ;Set Enable for next command
QOAA,00        ;Process 0x30 again
QOAA,20        
QOAA,00        ;And once more
QOAA,20
QOA8,38        ;0x38 -> Port A, set 8 bit mode, 2 lines
QOAA,00
QOAA,20
QOA8,08        ;Set no shift, no cursor
QOAA,00
QOAA,20
QOA8,01        ;Clear display and move to home pos
QOAA,00
QOAA,20
QOA8,06        ;Move cursor right
QOAA,00
QOAA,20
QOA8,0C        ;Turn display on
QOAA,30        ;0x30 -> Port C, Set Enable and RS=1
QOA8,49        ;0x49 -> Port A, ASCII "I"
QOAA,10        ;Write char to display
QOAA,30

Kind of tedious, but if you look closely at the picture, you will see "IIIIVVV" printed on the first line -- success! I'll probably write up some ROM routines for initializing the display and pushing chars out to it at some point. I'm thinking of building a more involved board that would contain the HD44780 wedge as well as a set of pushbuttons on Port B and using it as a sort of advanced front panel a la KIM-1 with a monitor in ROM.
 
Hi Glitch! Cool project! That is a great application of those spare GPIO pins on the S-100 Serial IO board.

BTW, I still have *many* of those PCBs left in case anyone wants some. I've been offering them on eBay in order to reduce the surplus down to a more manageable level.

John's great design for the S-100 Serial IO board is *much* more than a generic dual serial port board.

It can also add USB, voice synthesis, and the general purpose IO pins for projects like yours.

A very handy and useful S-100 board for all sorts of applications. Highly flexible and configurable for all sorts of IO expansion and hobbyist projects.

Good luck! Thanks and have a nice day!

Andrew Lynch
 
Thanks Andrew!

I definitely recommend this board to basically anyone with a S-100 system who doesn't mind a non-vintage board being plugged in there. I purchased mine to save development time for my 8085 SBC's serial board, since it will use the Zilog 8530 SCC as well.

This is also a great board for anyone that needs serial/parallel I/O with a system that uses a 16-bit I/O space. There's decoding available for the upper byte (you'll notice it's not populated on my board yet...only had one 74LS682 in the parts box!) or you can jumper it for 8-bit I/O space. And, if you're running CP/M-86 on your S-100 box, there will be a Kermit-86 I/O module for this board before too long -- I'm going to write one as a beginning project in x86 Assembly, which as far as I can tell, will increase the directly supported CP/M-86 configurations for Kermit-86 by 50%! (only the DEC Rainbow and NEC APC seem to have "official"/available I/O modules)
 
Hi! Thanks! Yes, that's a great point. All of the S-100 boards including the S-100 Serial IO board and S-100 4MB SRAM board are being designed with 16-bit operation in mind for 16-bit operating systems like CP/M-86+ etc.

The first 16 bit S-100 CPU board will be the S-100 8086 CPU board which has more or less just completed its third prototype board build and test. John has just recently gotten CP/M-86+ running on the S-100 8086 CPU board prototype. I think it is ready for a "production" board and should be out fairly soon. It will take some time for it to complete its trace routing then ordering PCBs etc should take 6-8 weeks or so I am guessing.

Following the S-100 8086 CPU board is the S-100 68K CPU board which is also 16 bit and the plan is for it to use the S-100 4MB SRAM board, S-100 Serial IO board, etc for a full blown 16 bit system with multiple CPUs. The S-100 8086 CPU board already supports the multi-master TMAxx logic and the plan is to upgrade the S-100 68K CPU board also.

The S-100 Serial IO board is very flexible and serves as nice platform for all sorts of 8 bit and 16 bit IO expansion and prototype projects like yours. Although it fits into a larger plan it is quite usable on its own in a variety of roles like for the LCD display.

Thanks and have a nice day!

Andrew Lynch
 
Perhaps this needs a new thread, but will the 68K S-100 board provide some sort of memory to I/O space mapping so that the same option boards are useable regardless of whether the processor supports I/O space? I've got a circuit drawn up for my 8-bit bus machine that does this for the 8-bit memory only processors like the 6502 -- it maps 256 bytes of memory address space into I/O space, and can be located on any 256 byte boundary via DIP switch. Thus, one may enable the mapping board and an option board addressable by an 8085 at I/O space address 0x05 will become available at memory space address 0xBB05, where BB = DIP switch settings.

I suppose, with the 8086 CPU board, you could substitute a NEC V30 and get CP/M-80 up and running without having an actual 8080/8085/Z80 in there -- sort of like the CompuPro 85/88 CPU board, but easier software switching I'd imagine! Now /that/ would be nifty!
 
Hi! Yes, the S-100 68K CPU board does allocate a memory region to the IO map. Accessing memory in the region is equivalent to the IO instructions for 8080/Z80 CPUs. The S-100 68K CPU board second prototype board is due out soon (probably ordering the PCBs this weekend) will include a whole bunch of fixes and improvements like a 16C550 UART for local console IO, uses Flash instead of EPROMs, eliminates the funky local SRAMs, adds configuration jumpers, etc.

We are doing something similar on the S-100 6502 CPU board since the Motorola based CPUs use memory mapped IO only. Hopefully Rich can start on the build and test of the first prototype board soon.

I believe the V30 is pin compatible with the 8086 so if that is the case I do not see why CP/M-80 couldn't be modified for it. However a CP/M-80 CBIOS would have to be written and boot disks, etc. I don't think John is planning anything like that though. However once the "production" boards are available they'll be home brew parts for hobbyists to pursue their interesting projects which could include a V30 CP/M-80 development. Personally, I would use a S-100 Z80 CPU board with a S-100 8086 CPU board as a multiple CPU system but I can see the advantages of a single board to do both.

Thanks and have a nice day!

Andrew Lynch
 
I'd assumed that John would have taken into consideration the need for an I/O space mapper -- sounds like basically the same thing I've got drawn up.

My interest in using a V30 would be for a small, portable benchtop system I've been thinking about putting together. I'm planning on using my Thinker Toys 8-slot backplane and building a custom case for it with a minimum of extras -- just a card cage and power supply. Originally, I'd thought about looking for another CompuPro 85/88 CPU card, but I think it would be more fun/challenging to get a "dual processor" system running with the V30. Two CPU cards are out due to power and number-of-slot constraints. Of course, one could always swap cards back and forth.
 
Hi! Actually the S-100 68K CPU board started out as a replica of the Alan Wilcox S-100 68K CPU board from his book. I contacted him and received permission to reproduce the design. However during the initial build and test (with Pontus, also on this forum) we identified a number of improvements, corrections, tweaks, etc. Those went into the second iteration of the board design which is coming out in about 3-4 weeks or so.

The basic design is still intact although we dumped the SRAMs, added the UART, changed to the Flash chips, converted the CPU from DIP-64 to PLCC-68, etc. John helped out during the initial build and test quite a bit though and there is a lot of cross feed on the designs. Mike Sharkey is using the initial design as a basis for the MMU he is working on too. The plan is convert them all over to the second design in early July.

That's a good idea on the V30 for the CPU. A lot like the CompuPro dual CPU board but with out using so much PCB real estate. Neat! Thanks and have a nice day!

Andrew Lynch

PS, the N8VEM S-100 backplane is a bench top design too. 8 slots with active termination all in a 10"x10" square so it doesn't take over the whole bench or introduce any of the large parallel bus funkiness you see on those 22 or more slot monsters.
 
PS, the N8VEM S-100 backplane is a bench top design too. 8 slots with active termination all in a 10"x10" square so it doesn't take over the whole bench or introduce any of the large parallel bus funkiness you see on those 22 or more slot monsters.

I'm not set on the design of my benchtop box yet (currently it's just the 8-slot Wunderbuss connected to a Lambda bench supply), and have been considering getting a N8VEM backplane if I can find a cheap supply of S-100 edge connectors. That way, I'm not using fairly well-worn S-100 connectors on the Wunderbuss to troubleshoot boards that might have problems as-is. Of course, admitting to the use of a /vintage/ backplane as a test fixture has gotten me a little criticism from some in and of itself!
 
Hi! There are some sources of S-100 connectors in the S-100 backplane folder on the N8VEM wiki. The best I've found is on eBay. There is a vendor from Bulgaria (?) selling wire wrap connectors fairly inexpensively. Those can be soldered in place and leads trimmed to make for a very solid connector.

Thanks and have a nice day!

Andrew Lynch
 
Back
Top