last summer I started to write a simple terminal emulator to work with the HP 1000 A-Series via the terminal multiplexer card. I don't know whether this is useful for older HP 1000 systems.
My software emulates something like a 2627 graphics terminal and I have implemented most function to work with EDIT/1000 and graphics programs. The 264X terminals are very similar. My plan was not to make a perfect simulation, just a tool for my purposes.
There are professional tools like the various HPTerminal Emulators for MS-DOS or QCTerm and Reflection for Windows.
I have also added the basic VT-100 sequences to have a more versatile tool.
I found some aspects a bit tricky but not really difficult:
- ENQ/ACK must be implemented,
- line/block mode was necessary for EDIT/1000,
- the inquire escape sequences need proper handling of e.g. DC1 flow control, i.e. store the result and send it only after DC1.
- memory-relative versus screen-relative addressing can be confusing at times.
- for graphics you must implement a font - I chose to go towards a vector font representation
- the serial port should be buffered - I use a ring buffer filled by an event handler and a separate routine to parse and handle the escape sequences.
Besides these items the implementation is straightforward and mostly a matter of time and testing.
There are really many escape sequences and most have some variations.
For simplicity and because I did not (yet) have a need for all details I took a few shortcuts:
- fixed straps so that I have only DC1 handling, not the other DC1/DC2 variants,
- page mode not implemented yet,
- forms mode not implemented yet,
- no tape, HP-IB or printer functions,
- the graphics screen is in a second window - I liked this better than overlaying Alpha/Graphics overlay planes.
I used QCTerm's logging mode to look at some sequences to understand what the HP-1000 sends and receives. In some cases the HP was rather picky about returned coordinates, e.g. row/column position inquiries had to return exactly 3 digits, not 2 or 1 as the terminals accept for input.
The software is written in Java and the serial interface library supports Windows, Linux and MacOS. I am currently testing it on a Raspberry Pi which seems to work (but a bit sluggish).
My normal development and operating platform is an older Windows laptop with an USB-Serial cable.
A C/C++ implementation would probably be faster but more difficult to maintain for different platforms.
Send me a note if you want to have a look. A description of the implemented escape sequences is attached.