P855/P860 Disk support: the X1210 Moving Head Disk


Disk Support

The P855 and P860 supported various fixed head disks (SAGEM) and a moving head disk, the Philips X1210, later complemented with the faster Philips X1215. The single spindle X1210 had a removable cardridge with a single platter, supporting 2 moving heads, one for side 0 and one for side 1, with a capacity of 2.7 Mbyte. An X1215 had two moving head spindles per unit, of which one was implemented as a removable cardridge. The capacity of each spindle was similar to the capacity of the X1210 disk: 2.7 Mbytes. Also the data format of the X1210 and X1215 disks was completely compatible. The hardware however was different: the cardridges could not be exchanged between the X1219 and X1215, the X1210 could be connected to the Multiplex or DMA channel, the X1215 only to the DMA channel.

Each disk side supported 203 tracks, with 16 sectors of 205 data words per track. 200 data words per sector could be used to store user data. A single disk control unit supported 2 spindles maximum. Further details can be found in P800 Disk Organization. All software uses logical sector numbers, which are mapped to physical sector numbers by the software (physical-sector-in-track = modulo-16 (logical-sector-in-track * 3))).

Disk space allocation

Space on disk is allocated dynamically. Space on disk is organized therefore in so called granules, where each granule is 8 consecutive (logical) sectors. The granule is the unit of space allocation to a file. Space allocation to a file is maintained in an allocation table of 200 entries in the file, one entry for each allocated granule. This limits the maximum file length to 200*8 sectors of 400 bytes = 640 kbytes. The allocation table takes sector 1 of the file (sector 0 of the file is unused by the system). Free and allocated granules for the whole disk is maintained in the Granule Allocation Table, located in sector 0 of the disk (together with the Volume Label

System Disk Boot Sequence (IPL)

The disk bootstrap (located in memory locations 0..3E(hex)) loads the Initial Program Loader (IPL), located in logical sector 1 of the disk in memory (location of defined by the content of address 3C(hex) of the bootstrap). After loading, the bootstrap starts IPL. IPL then loads a relocatable load module (normally the Operating System kernel) from a predefined location (logical sector 16) from disk into memory and starts that load module.

P860 Simulator Disk Support

The simulator supports two X1210 disk units (device addresses 2 (hex) and 12 (hex)) connected to a single control unit. The control unit is connected to the CPU via a Multiplex channel. Before a disk can be used on a disk unit it must be premarked. The utility premark writes and initializes, on an empty disk, the logical disk structure which is recognized by the disk software (sector identifiers, volume label, IPL, system catalogue, etc.).

Premark for the simulator is written as a Perl program and creates with the help of the ipl2disk utility a X1210 disk image. With the mon2disk utility a loadmodule file can be moved to the disk image to the location where IPL expects it when executing the boot process. The IPL program written to the premarked disk is a replacement of the original one, because the original IPL is not available at this moment (Boot itself is the original one). The replacement is however functional compatible with the original IPL. In the software archive is a premarked disk image available which can be booted by the simulator. The booted loadmodule is a testprogram (tipl3) which shows the operation of the boot process and with that, the operation of the simulated disk/control unit and the IPL program. The comments in the disk support programs (premark, ipl2disk, mon2disk, ipl) show implementation details, but also the question marks about some details because, with the documentation I have, some implementation details are guessed and can only be verified with a real system cq. the original software. The result so far however is something that looks like the original disk operation.


The simulator supports two X1210 moving head disks units (md0 and md1)

The disk units are connected with a singe control unit to the CPU

The control unit is connected to the CPU via a Multiplex channel

Disk images are initialized with the utility premark (premark.pl <image file name>.img)

As part of the image initialization, premark executes the utility ipl2disk to store the disk ipl program (IPL.abs) in logical sector 1

The loadmodule to boot/ipl can be stored/replaced on the image with the utility mon2ipl (mon2ipl.pl <image file name>.img)

The zip file disk1 (d1.img after decompression) contains a bootable disk image, which ipl's the test program tipl3.rel after booting

Emulation session of a Boot example:

[01]# ./p860-09.pl
[02]P855/860 Emulator, version 0.9
[03]> attach md0 d1.img
[04]File d1.img attached to device MD0
[05]> boot md0
[06]File d1.img reattached to device MD0
[14]Keyboard interrupt

On line [01] the simulator is started under Linux with on line [02] the welcome message.
On line [03] the disk image d1.img is attached to the disk unit md0.
On line [05] the system is booted via disk unit md0. IPL is started.
Line [07] shows the proceding IPL process. With each sector from disk being loaded, a dot is printed.
When the characters IPL are displayed, the IPL process is complete and control is taken over by the IPLed program.
Starting with line [08], output is displayed of the IPLed program (tipl3.rel in this case).
During the output on line [13] a keyboard interrupt (CntrE) stops the simulation.
And on line [15] the simulator is waiting for a next command.



Page last updated on: 3 July 2008 | Contact: Info@theoengel.nl