Okay, it appears you know what your are doing. The 8255 was the "go to" device for I/O interface back in the day and, as a plus, supported vectored interrupts if you need those.
When I was involved with Intel 8080 and 8085 microprocessors back in the late 1970s and throughout the 1980s, I had available a full-blown Intel MDS (Microprocessor Development System) complete with an In-Circuit Emulator (ICE) and an EPROM programmer. This turned out to be overkill. The ICE in particular was more trouble than it was worth, so I quickly abandoned it. I worked for an exclusively DEC (Digital Equipment Corporation) shop and most of the engineers and software analysts regarded microprocessors as "toy computers" not worth the effort to pursue. IIRC, I purchased an Intel MACRO cross-assembler that ran on a PDP-11/34 minicomputer under RSX-11M OS. We had perhaps a dozen or so DEC "dumb" video terminals hardwired to the PDP-11. There were several of these minicomputers and a couple VAX-11/780s, but all I needed was the one "general purpose" PDP-11 for program development.
My assembly code generated re-locatable object files that were passed off to a relocatable linker/loader which then generated a loadable-into-memory hex code file in ASCII format. That hex code was then downloaded to an EPROM programmer, which IIRC was part of the Intel MDS, although later I believe I also had a stand-alone programmer. All this communication was through RS-232 comm links because USB didn't exist yet. It took maybe five minutes to program and verify an EPROM and maybe fifteen or twenty minutes to erase several of them under a UV light source, procured for just that purpose. I always had several erased EPROMs in the pipeline. My strategy was to write code, assemble it, link the relocatable object files, download the hex load file to the EPROM programmer, burn an EPROM, and then insert it in the target board for test and debug on the bench using real hardware. This turned out to be more efficient than trying to use the ICE, which IIRC was not only a real kludge to set up and use, but also introduced unacceptable time delays during emulation.
My first 8085 project was inherited from an employee who had to leave because of a perceived conflict of interest between his full-time job and his entrepreneurial side business. His side business was very successful, so he held onto it and left the company with short notice. I was hired about a week before he left, and a year after I graduated with a BEE degree while working full time almost twelve years in a university research institute environment. Not a bad deal: they paid all my tuition. In the last few years at the research institute, I had been busy building and programming embedded 8080 and 8085 microprocessors into various laboratory instruments. I guess the folks who hired me thought that was qualification enough to replace their entrepreneurial engineer.
The engineer I replaced was developing a digital cassette tape controller interface that would accept digitized light-intensity readings from a precision radiometer sensor and record the information on digital cassette tapes. This was to replace an existing system that basically used discrete TTL circuitry and a modem to record audio tones, representing digital data, on audio tape cassettes. That was reminiscent of early Radio Shack TRS-80 recorders and similar schemes in use for personal computers at that time. I think my son's Commodore 64 used such a scheme. It was slow and totally unreliable.
The digital cassette tape recorder used NRZI coding of the magnetic domains on the tape with CRC check-sums at the end of each data block. Data block formatting was the responsibility of the end user (me) so there was a fairly steep learning curve. There were other details regarding tape motion control, optical filter insertion in the light path using solenoid steppers, and an external telephone acoustic modem interface, but that was about the extent of it. The hardest part was programming the digital tape controller interface. Needless to say, this was a real-time data acquisition system by the time I finished it. And nary an operating system in sight.
This was a "field portable" instrument in two parts: a large fiberglass backpack holding lead-acid cells and the electronics; an optical device containing optical filters, mirrors and lenses, the radiometer head, and a mechanism for selecting the angle at which the radiometer "viewed" a target material placed on the ground under it. The customer called these measurements "ground truth" data. Our company laid out huge targets on the ground to measure the resolution and gray-scale response of overhead imaging systems. The crews on the ground went over the targets to measure how much light they reflected during certain times of the day and during certain times of the year, said data being used later to calibrate the overhead imagery data. We always hired some husky local types out in the field to carry the instruments around and take measurements during the day. During the night, back at a local motel, they would connect to an audio modem and send the collected data back. I had to program this protocol too, with error correcting, so as to get good data back over noisy long-distance telephone lines.
I think there are a number of cross-assemblers available, for free now, for Intel microprocessor program development in a Windows or, maybe, Linux environment. You may not even need a re-locatable code assembler, but it sure makes program development easier. At one time IBM published the source code for their DOS BIOS that included an editor and features that allowed insertion of break-points and bit-banging. You might want to consider including some variation of this in your ROM to allow program debugging. With re-locatable code, you can temporarily move some ROM code into RAM and execute it from there with the ability to insert break-points for debugging purposes.
I doubt I can be much help on your project... too many years have passed since I messed around with this technology. I admire your effort to resurrect it.
73 de AC8NS
Hop