The structure of the ROMs usable in both PX-4 and PX-8 is very like that of the floppy disks, with some adaptions to make optimal use of the limited space. The ROM starts with a variable size directory, of which the first entry is the header. The actual directory size is specified in this header and is always a multiple of four extends, up to 32. The 'disk' geometry uses 1 kByte blocks, so one extend can address 16 kByte.
|0x00||Always: 0xE5, making this extend 'unused'.|
|0x01||Format: 0x37 - 'M' format, 0x50 - 'P' format|
0x08 single 8 kByte ROM
0x88 double 8 kByte ROMs
0x10 single 16 kByte ROM
0x90 double ROMs, first part 16 kByte
0x20 single 32 kByte ROM
0xA0 double ROMs, first part 32 kByte
|0x03 - 0x04||Checksum: sum of the data area bytes && 0xFF. Big-endian. Not checked by the system.|
|0x05 - 0x07||System Name: Epson used 'H80', even for PX-4 ROMs.|
|0x08 - 0x15||ROM Name|
|0x16||Number of directory entries. One of: 0x04, 0x08, 0x0C, 0x10, 0x14, 0x18, 0x1C, 0x20|
|0x17||Always: 0x56 - 'V'|
|0x18 - 0x19||Version number|
|0x1A - 0x1F||ROM Production date in 'MMDDYY' format|
The organisation of the data in the ROM is not straight forward for all sizes. The 8 kByte and 16 kByte ROMs have the directory at the start, but the more popular 32 kByte has it halfway, at 0x4000.
The PX-4 and PX-8 support several configurations of single and double ROMs. In case of a double ROM configuration, both ROMs appear as one drive, usually B:. Curiously, only the size of the first ROM is specified in the header, the size of the second is implicit in the highest block number used.
As the allocation block size is one kByte, and the directory size can vary from 128 byte to one kByte, the number of available data space is the ROM size minus 1 kByte. As the data begins directly after the latest used set of four extends, there could be the part of a block available after the last complete one. Unclear is wheather this space (128 bytes to 896 bytes) can be used as partial block.
The directory extends are identical to the original CP/M format using 1 kByte allocation blocks and one logical extend in a physical one. This is different from the format used on floppy disks.
Apart from the format indicator the smaller P-format ROMS look very much like the M-format types. The ROM-based programs have a special header:
For resident programs the header is extended with a cold start entry, a warm start entry (both three bytes), 68 bytes of fixed data, the program name (eight bytes) and the extension (3 bytes).
Another difference with the 32 kByte ROMs is the directory location. For P-format ROMs the directory starts at 0x6000 (M-format ROMs use 0x4000).
Latest update: 2011-12-25