The ROM BIOS (ROS)
The ROS in Amstrad XTs tends to be very compatible with the genuine IBM ROM BIOS. However, some XTs do provide additional functions using the "cassette" interrupt - INT 15h.
PC1512
The 1512 ROS provides these functions:
- AH=0
- Read mouse X and Y counters.
- AH=1
- Read a byte from the non-volatile RAM.
- AH=2
- Write a byte to the non-volatile RAM.
- AH=3
- Set plane read mask in 640x200 graphics mode.
- AH=4
- Set plane read mask in 640x200 graphics mode.
- AH=5
- Set border colour in 640x200 graphics mode.
- AH=6
- Get ROS version number (check for PC1512/PC1640 ROS).
For full details of these calls, see the technical manual, section 2.3.12.
PC1640
The PC1640 ROS provides the same INT 15h functions as the PC1512:
- AH=0
- Read mouse X and Y counters.
- AH=1
- Read a byte from the non-volatile RAM.
- AH=2
- Write a byte to the non-volatile RAM.
- AH=3
- Set plane read mask (on PC1512 hardware).
- AH=4
- Set plane read mask (on PC1512 hardware).
- AH=5
- Set border colour (on PC1512 hardware).
- AH=6
- Get ROS version number (check for PC1512/PC1640 ROS).
For full details of these calls, see the technical manual, section 2.3.13. Note that AH=3 to AH=5 are implemented even though they have no effect on PC1640 video hardware. Possibly the PC1640 ROS will work when fitted to a PC1512, but I have not put this to the test.
PPC512, PPC640, PC20, PC200
These systems do not provide any services on INT 15h. The interrupt returns leaving all registers untouched.
PC2086, PC3086
The ROS supports INT 15h with AH=0C0h ("Get configuration table"). The table it returns is as follows:
dw 8 ;Size of table (8 bytes). db 0FAh ;Model (PS/2 model 25 or 30) db 0 ;Submodel (PS/2 model 30) db 1 ;BIOS revision (2nd) db 0B0h ;Feature byte 10110000b ; * DMA channel 3 used by hard drive BIOS ; * RTC installed ; * INT 15h/AH=4Fh called on INT 09h
Bug: Although the table claims to be 8 bytes long, it is in fact only 4 bytes. The next 4 are a subroutine. If the subroutine is interpreted as feature bytes, it looks as if the PC2086/3086 support 32-bit DMA, data streaming, various INT 15h/INT 16h functions, SCSI, loading the BIOS from floppy, flash EPROM and so on. None of these is actually supported.
PC5086
The ROS supports INT 15h with AH=0C0h ("Get configuration table"). The table it returns is as follows:
dw 8 ;Size of table (8 bytes). db 0FAh ;Model (PS/2 model 25 or 30) db 0 ;Submodel (PS/2 model 30) db 0 ;BIOS revision (1st) db 20h ;Feature byte 00100000b ; * RTC installed db 0,0,0,0 ;Other feature bytes
It also supports INT 15h with AH=0C2h (PS/2 mouse control) and AH=80h-92h (joystick support and OS hooks).
BIOS identifiers
PCs have a machine type at 0FFFFEh and a BIOS date at 0FFFF5h. For Amstrad XTs, these are:
- PC1512, PC1640, PPC, PC20: Machine type code is 0FFh. The byte at 0FFFF5h seems to be set to a random value (a checksum)? There is no BIOS date.
- PC2086: BIOS date is 08/30/88, machine type code is 0FFh (PC).
- PC3086: BIOS date is 03/01/90, machine type code is 0FFh (PC).
- PC5086: BIOS date is 04/23/91, machine type code is 0FEh (XT).
John Elliott 15 June 2004