ROM structure

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.

The header

bytesdescription
0x00 Always: 0xE5, making this extend 'unused'.
0x01 Format: 0x37 - 'M' format, 0x50 - 'P' format
0x02 Capacity:
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.

One or two ROMs

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.

Capacity

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.

Directory Extends

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.

P-format ROMs

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:

0xDE, 0xDE, 0x00, 0x00, Ox00
for non-resident programs
0xDE, 0xDE, 0xC3, 0x0B, 0x01
for resident programs, like Basic.

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

e-mail