|Synthetic Programming on the HP-9815A/S|
Message #1 Posted by John Ioannidis on 1 Dec 2005, 10:37 p.m.
Before there was Synthetic Programming on the HP41 (and even the 67/97), there could have been SP on the 9815. To wit:
The HP-IB interface for the 9815 has some commands that allow you to manipulate individual bytes in storage registers and then transfer them to program memory! (The reason for this was to allow character strings to be sent to and from the HPIB interface under program control). Some interesting facts so far:
* Most instructions occupy one byte; some are two bytes, with a prefix and an argument. Storage register operations and GOTO/GOSUBs are examples of the two-byte instructions.
* There are several one-byte instructions that are undocumented.
- One instruction appears to be a NOP, except it doesn't print onthe printer. There does not seem to be a way to enter it from the keyboard.
- CALL A through CALL E can actually be typed on the keyboard, but they make no sense; CALL A tries to access the cartridge drive, but it's unclear what it's doing (it reports "WRONG FILE TYPE"). CALL B through CALL D appear to be no-ops, and CALL E must be trying to access some I/O device unsuccessfully.
* Some 2-byte instructions have interesting properties
- FIX n, SCI n, and SCI3 n (they hadn't invented the term Engineering Notation yet) with n not in the range 0-9 just set the mode to FIX, SCI, and SCI3 without changing the number of visible digits, thus behaving like the HP-67/97 FIX, SCI, and ENG.
- LBL xx, GOTO L xx and GOSUB L xx are prefixes that take the actual label number (00 through 99) as an argument. With SP you can set the argument to any number between 0 and 255, so in effect you have 256 labels, rather than "only" 99. It's also amusing how these print on the printer.
- For some weird reason, the argument for the register operations is only 7 bits; there are separate prefixes for RCL Rxx and RCL R+128xx. The high bit of the argument appears to be ignored.
- The prefix for STO I A through STO I J can be used with arguments other than A through J (101-110). I'm still trying to decipher the results.
I'm in the process of formatting properly a complete "byte table", which I'll post here. Let's see if we can uncover some more secrets :)