Section 1 | Index | Section 3 |
This section describes the AMSTRAD PC1512 Resident Operating System (ROS). It defines the interfaces to all the interrupt service routines provided by the AMSTRAD PC1512 ROS firmware (ROM) and all RAM locations used by the ROS.
The following copyright message is stored at the beginning of the ROS starting at location 0003 (relative to the origin):
(C) Copyright 1986 Amstrad Consumer Electronics plc
The ROS physically occupies the highest 16K bytes (in the address range FC000 to FFFFF) in the 1 Mega Byte addressing range of the 8086-2 CPU (See Figure 1.1). The total 64K byte address range from hexadecimal F0000 to FFFFF is reserved for system ROM and this contains the reset and initialisation address FFFF0. For this reason the system ROM always spans the highest locations and extends downward. Also address wraparound (block repeat) occurs in the 64K byte range. Note that all address constants in this document are in hexadecimal form unless otherwise noted.
All calls to the ROS firmware should be made through the software interrupts disclosed in this manual. Application programs should not attempt to access the locations within the ROM area directly. AMSTRAD reserves the right to modify the coding within the Resident Operating System ROM as it sees fit.
The ROS provides a set of service routines which perfrom various I/O functions:
To ensure hardware independence of application programs all I/O processes should be done using the ROS. This avoids possible problems due to any hardware modifications and/or enhancements.
Note that all ROS messages will be displayed in the language selected by the language links (see section 3.1).
The Power-Up initialisation and Self Test function is entered at location FFFF0, the CPU reset entry point. This routine performs all necessary hardware initialisation and self tests, sets up the BIOS RAM variable area, initialises all the interrupt locations used by the ROS, initialises external ROMs then loads and runs the disk bootstrap.
The ROS does not use the SYSTEM RAM (User RAM Area) for stack or program variables until it has been successfully tested. If a RAM error is found an error message should be displayed correctly, assuming there is no other fault that may result in incorrect operation of the CPU or VDU.
The Power-Up initialisation and Self Test process is as follows:
After a system reset all the self tests except the RAM tests are rerun. If the three option links in the least significant part of the system printer status register are set to all ones then only the keyboard and disk tests are run.
Refer to section 2.3 for the individual power-up self test details.
If the checksum of the NVR is incorrect then it is loaded with its default values (see section 2.5).
Set up counter 0 to interrupt every 54.9337 milliseconds. Set up counter 1 to generate an output signal with a period of 15.13 microseconds. Disable counter 2.
Set up DMA channel 0 for memory refresh. Disable channel 1, 2 and 3.
Disable (mask) all interrupt levels. Note that levels 0, 1 and 6 are enabled (unmasked) later.
Write Status-1 is initialised from a byte in the NVR defining the number of drives fitted and the default VDU mode. The ROS also sets or resets bit 1 in the status register depending on whether or not an 8087 NDP is installed. See section 1.8 for further System Status-1 information.
Write Status-2 is initialised according to the amount of memory installed. The ROS assumes a minimum of 512K bytes and that additional RAM may be added in contiguous 32k byte increments up to the maximum of 640K bytes. The additional memory is sized according to the following procedure. The segment address of each of the four 32K byte RAM blocks is written to the first two bytes of each respective block. The segments are then verified from low to high until a non matching segment address or the last block is encountered. The setting of the Write Status-2 register is according to the RAM0-RAM4 table in section 1.8.3.
The ROS uses variables in the address range of 00300 to 00500. Refer to section 2.4 (RAM Variables) for a complete description of these variables and their respective initialised values.
The first 32 interrupt vectors are set up to reference the ROS routines as listed below. Software interrupt routines which do not perform any function reference a dummy routine that simply does a return from interrupt (IRET) instruction. Hardware service interrupts which do not perform any function reference a dummy (HWIRET) routine which issues a nonspecific end-of-interrupt to the 8259 interrupt controller and then executes an IRET instruction.
Interrupt | Purpose | Type |
---|---|---|
0 | Divide by Zero | Hardware (HWIRET) |
1 | Single Step | Hardware (HWIRET) |
2 | Parity error routine (NMI) | Hardware |
3 | Break | Hardware (HWIRET) |
4 | Overflow | Hardware (HWIRET) |
5 | Print Screen | Software |
6 | Mouse button control | Software |
7 | Reserved | Software |
8 | System Clock interrupt | Hardware |
9 | Keyboard interrupt | Hardware |
10 | RTC interrupt | Hardware (HWIRET) |
11 | COMMS | Hardware (HWIRET) |
12 | COMMS | Hardware (HWIRET) |
13 | Hard Disk | Hardware (HWIRET) |
14 | Floppy Disk interrupt routine | Hardware |
15 | Printer interrupt | Hardware (HWIRET) |
16 | VDU I/O | Software |
17 | System Configuration | Software |
18 | Memory Size | Software |
19 | Disk I/O | Software |
20 | Serial I/O | Software |
21 | Enhanced Function | Software |
22 | Keyboard I/O | Software |
23 | Printer I/O | Software |
24 | System Restart | Software |
25 | Disk Bootstrap | Software |
26 | System Clock and RTC I/O | Software |
27 | Keyboard Break | Software (IRET) |
28 | External Ticker interrupt | Software (IRET) |
29 | VDU initialisation parameter table | Software |
30 | Disk Parameter table | Software |
31 | External VDU matrix table | Software |
The interfaces to the above routines are detailed in section 2.3.
The initialise function of interrupt 19 in invoked followed by the disk test (see 2.2.14).
The Keyboard microcontroller returns 0AAh upon successful completion of its power-up self test (See 2.2.15).
The initial VDI setting is done according to the Port-A value as described in section 1.8.2
Enable 8259 interrupt controller on levels 0 (8253 counter 0), 1 (keyboard scan code receiver) and 6 (765 floppy disk controller). All other 8259 interrupt levels are masked.
During power-up the ROS checksums the NVR. After the sign-on message has been displayed, the ROS outputs a warning message if the NVR sum was incorrect. In the case that the NVR is OK (and last startup data are valid) the time and date of last switch-on are displayed.
If a NMI occurs the default ROS interrupt handler displays a RAM parity error message and hangs the system. This condition can only be rectified by switching the machine off.
The ROS checks for external ROMs between addresses C0000 and F4000 in 800h (2k) byte increments. An external ROM which conforms to the following specification will be initialised by the ROS:
When a ROM conforming to this specification is located then the initialisation entry is called. If the sum test fails then an error message is displayed and initialisation is not called.
The ROS attempts to load the bootstrap sector (from drive A, side 0, track 0, sector 1) into memory at 07C00h. If the bootstrap sector loads successfully it is given control (far jump to segment 0000 offset 7C00). If after 10 retrys the bootstrap sector cannot be loaded then the ROS displays a message prompting the user to insert a system disk into drive A and press a key. The ROS then waits for the key press and repeats the bootstrap procedure.
On Power-Up or following a system reset, the ROS performs a series of self tests on the hardware to verify proper operation. When a test failure occurs, the ROS displays an error message on the VDU and the system is locked up. The keyboard interface is treated differently in that the ROS repeats keyboard self test until it is successful.
The ROS executes all self tests except when the option links (LK1 - LK3) are all set (See section 1.10.3), the ROS will only run the keyboard interface test and the disk test. If either of these two tests fail an error message is displayed but the error is ignored. This allows the system to be brought up for diagnostic testing.
When a soft reset (Control, Alt and Del) is issued the ROS performs all the self tests except the system RAM (User Area RAM) test and the VDU RAM test.
Upon completion of the VDU RAM and 6845 VDU Controller test the ROS displays a message ("Please wait") on the first line of the screen to indicate that self testing is in progress and as each successive self test is started a dot is displayed on the screen.
The tests are run in the following order:
The ROS uses the stack during the Disk test, the Keyboard interface test and the Programmable Interrupt Controller test. All other self tests are executed without using either the stack or any RAM variables.
Most of the device diagnostic tests consist of a Data Path test and a Waveform test as described below:
The data path test checks the read/write path between the CPU and a particular device. A pattern is written to a device and then read back to verify the integrity of the data path. The patterns are as follows:
All zeros.
All ones.
Sliding single bit and complement across 8 bits.
The waveform test detects address decoding errors in a hardware device. The waveform test consists of selecting a specific address in a device, writing a test pattern (usually 0FFFFh) and verifying that the same pattern can be read back. The waveform test is done in both ascending sequential order (upwards) and descending sequential order (downwards) in order to check that the address decoding logic works correctly.
All bytes in the Resident Operating System ROM are summed and then checked that the least significant byte of the sum is zero. If the check fails then an error message indicating faulty ROM checksum is displayed.
The following tests are performed to test the VDU RAM and the VDU controller:
The upwards/downwards waveform test is used to confirm that the registers in the DMA controller chip can be addressed. Any failure will cause the faulty DMA error message to be displayed.
The fiest 8253 test is a read/write data path test to counter 2 followed by a check that counter 1 counts at the correct rate. If either test fails a interval timer error message is displayed.
The 8255 PPI tests consists of a data path test on each of the two system status channels (Status-1 and Status-2). The 8253 PIT OUT2 (Status-2) bit is also checked for proper operation. If either test fails the faulty real time clock error message is displayed.
The RTC seconds counter is tested to be counting at the correct rate. Next a data path test on the checksum byte of the NVR is run (and the checksum byte is restored). If either test fails the faulty real time clock error message is displayed.
This test confirms that the transmitter and receiver of the 8250 (i. e. the system serial port) are functioning correctly (at least in diagnostic mode).
The 8250 is configured in loop mode, 9600 baud, 8 data bits, 1 stop bit and no parity. Two test patterns are transmitted and the received patterns are checked. The status register is monitored for no parity, framing or overrun errors. If either received pattern does not equal the sent pattern or an error is set in the status register the faulty system serial port error message is displayed.
A data path test is performed on the printer data latch. If any incorrect test pattern is returned, the faulty printer port error message is displayed.
The X and Y registers are cleared and then read to verify that they both contain zero. If the test fails the faulty mouse coordinate register error message is displayed.
The amount of System (User Area) RAM is determined using the procedure described in section 2.1. The data path test is run on all available RAM followed by an upwards/downwards waveform test. If either test fails the faulty RAM error message is displayed.
The 8259 tests consist of a data path test on the interrupt mask register and an interrupt acknowledge test to confirm that interrupts can occur and be serviced. If the test tails the faulty interrupt controller message is displayed.
The disk test attempts to establish whether the drives fitted to the system seek correctly. The test moves the read/write heads to track 10 on each drive. The ROS does not verify that the correct track was attained. If any errors are reported then a floppy disk controller error message is displayed.
Upon power-up or reset, the keyboard self test is performed by the keyboard controller firmware. The keyboard returns keycode 0AAh to signify the successful completion of its testing. If any key code other than 0AAh is returned the keyboard error message is displayed amd keyboard reset is issued (which reruns the keyboard self test). The Keyboard test is repeated until the keyboard test passes. When test pass is received, the error message is removed from the screen and the test is exited as normal. During the keyboard test a short beep is sounded every five seconds to indicate that the test is in progress.
The first 32 interrupt vectors are initialised by Power-Up initialisation. The software IRET and hardware HWIRET entries are dummy routines which require no entry or exit conditions and are not detailed here.
Any application program which replaces a default interrupt vector with its own entry point must not invoke any ROS interrupts from within its own interrupt service routine.
The Interrupt 2 routine deals with system RAM parity error. The screen is switched to the default display mode, cleared and a RAM parity error message is displayed. The machine cannot be used until the power switch is cycled off and on again.
This routine does not use RAM for stack or program variables.
An application program which makes use of the 8087 NDP must supply an interrupt 2 service routine for the 8087 NDP.
CPU registers are used as follows:
The Interrupt 5 routine dumps the screen in character mode to the primary printer port. Since the screen dump is character based, attempting to dump graphic pictures to the printer may produce incorrect results. Characters that cannot be read back from the screen in graphics mode (using the VDU interrupt read character sub-function) are printed as spaces.
If a screen print is already in progress the interrupt takes no action.
The Print Screen Status variable (at address 00500) is set to 1 while the screen dump is in progress. When complete the variable is set to zero. If the screen dump is abandoned due to printer port timeout, the variable is set to 255.
CPU registers are used as follows:
The ROS interrupt 6 routine provides default mouse button services. The keyboard firmware generates a set of make/break keycodes when either of the two mouse buttons is pressed and released. When the keyboard interrupt routine recognizes a mosue button keycode it invokes interrupt 6. The default ROS routine will either obtain the appropriate keycode from the NVR and return with the carry flag set in the case of a make code or return with the carry flag clear in response to a mouse button break code.
CPU registers are used as follows:
Note: A key token value of FFFFh is ignored and is not put in the keyboard buffer.
The interrupt 8 routine is invoked by the system clock (counter 0 of the 8253). The default ROS routine does the following:
CPU registers are used as follows:
The ROS Keyboard hardware interrupt reads a key code from the keyboard interface, translates the key code into a 16-bit key token using an internal translation table and the key token is put into the key token buffer. If the buffer is full the key token is discarded and a bleep is output on the speaker.
The ROS Keycode translation table is as follows:
Key Code | (UK) Key Name | Normal | ALT | CTRL | SHIFT | Num Lock |
---|---|---|---|---|---|---|
01 | ESC | 011B | Ignored | 011B | 011B | N/A |
02 | 1 and ! | 0231 | 7800 | Ignored | 0221 | N/A |
03 | 2 and " | 0332 | 7900 | 0300 | 0340 | N/A |
04 | 3 and £ | 0433 | 7A00 | Ignored | 0423 | N/A |
05 | 4 and $ | 0534 | 7B00 | Ignored | 0524 | N/A |
06 | 5 and % | 0635 | 7C00 | Ignored | 0625 | N/A |
07 | 6 and ^ | 0736 | 7D00 | 071E | 075E | N/A |
08 | 7 and & | 0837 | 7E00 | Ignored | 0826 | N/A |
09 | 8 and * | 0938 | 7F00 | Ignored | 092A | N/A |
OA | 9 and ( | 0A39 | 8000 | Ignored | 0A28 | N/A |
0B | 0 and ) | 0B30 | 8100 | Ignored | 0B29 | N/A |
0C | - and _ | 0C2D | 8200 | 0C1F | 0C5F | N/A |
0D | = and + | 0D3D | 8300 | Ignored | 0D2B | N/A |
0E | <-DEL | 0E08 | Ignored | 0E7F | 0E08 | N/A |
0F | TAB | 0F09 | Ignored | Ignored | 0F00 | N/A |
10 | Q | 1071 | 1000 | 1011 | 1051 | N/A |
11 | W | 1177 | 1100 | 1117 | 1157 | N/A |
12 | E | 1265 | 1200 | 1205 | 1245 | N/A |
13 | R | 1372 | 1300 | 1312 | 1352 | N/A |
14 | T | 1474 | 1400 | 1414 | 1454 | N/A |
15 | Y | 1579 | 1500 | 1519 | 1559 | N/A |
16 | U | 1675 | 1600 | 1615 | 1655 | N/A |
17 | I | 1769 | 1700 | 1709 | 1749 | N/A |
18 | O | 186F | 1800 | 180F | 184F | N/A |
19 | P | 1970 | 1900 | 1910 | 1950 | N/A |
1A | [ and { | 1A5B | Ignored | 1A1B | 1A7B | N/A |
1B | ] and } | 1B5D | Ignored | 1B1D | 1B7D | N/A |
1C | CR ← | 1C0D | Ignored | 1C0A | 1C0D | N/A |
1D | CTRL | Ignored | Ignored | ---- | Ignored | N/A |
1E | A | 1E61 | 1E00 | 1E01 | 1E41 | N/A |
1F | S | 1F73 | 1F00 | 1F13 | 1F53 | N/A |
20 | D | 2064 | 2000 | 2004 | 2044 | N/A |
21 | F | 2166 | 2100 | 2106 | 2146 | N/A |
22 | G | 2267 | 2200 | 2207 | 2247 | N/A |
23 | H | 2368 | 2300 | 2308 | 2348 | N/A |
24 | J | 246A | 2400 | 240A | 244A | N/A |
25 | K | 256B | 2500 | 250B | 254B | N/A |
26 | L | 266C | 2600 | 260C | 264C | N/A |
27 | ; and : | 273B | Ignored | Ignored | 273A | N/A |
28 | ' and @ | 2827 | Ignored | Ignored | 2822 | N/A |
29 | # and ~ | 2960 | Ignored | Ignored | 297E | N/A |
2A | LEFT SHIFT | Ignored | Ignored | Ignored | ---- | N/A |
2B | \ and | | 2B5C | Ignored | 2B1C | 2B7C | N/A |
2C | Z | 2C7A | 2C00 | 2C1A | 2C5A | N/A |
2D | X | 2D78 | 2D00 | 2D18 | 2D58 | N/A |
2E | C | 2E63 | 2E00 | 2E03 | 2E43 | N/A |
2F | V | 2F76 | 2F00 | 2F16 | 2F56 | N/A |
30 | B | 3062 | 3000 | 3002 | 3042 | N/A |
31 | N | 316E | 3100 | 310E | 314E | N/A |
32 | M | 326D | 3200 | 320D | 324D | N/A |
33 | , and < | 332C | Ignored | Ignored | 333C | N/A |
34 | . and > | 342E | Ignored | Ignored | 343E | N/A |
35 | / and ? | 352F | Ignored | Ignored | 353F | N/A |
36 | RIGHT SHIFT | Ignored | Ignored | Ignored | ---- | N/A |
* 37 | * and PRTSC | 372A | Ignored | 7200 | Prnt Scrn | N/A |
38 | ALT | Ignored | ---- | Ignored | Ignored | N/A |
39 | SPACE | 3920 | 3920 | 3920 | 3920 | N/A |
* 3A | CAPS LOCK | Ignored | Ignored | Ignored | Ignored | N/A |
3B | F1 | 3B00 | 6800 | 5E00 | 5400 | N/A |
3C | F2 | 3C00 | 6900 | 5F00 | 5500 | N/A |
3D | F3 | 3D00 | 6A00 | 6000 | 5600 | N/A |
3E | F4 | 3E00 | 6B00 | 6100 | 5700 | N/A |
3F | F5 | 3F00 | 6C00 | 6200 | 5800 | N/A |
40 | F6 | 4000 | 6D00 | 6300 | 5900 | N/A |
41 | F7 | 4100 | 6E00 | 6400 | 5A00 | N/A |
42 | F8 | 4200 | 6F00 | 6500 | 5B00 | N/A |
43 | F9 | 4300 | 7000 | 6600 | 5C00 | N/A |
44 | F10 | 4400 | 7100 | 6700 | 5D00 | N/A |
* 45 | NUM LOCK | Ignored | Ignored | PAUSE | Ignored | N/A |
* 46 | SCROLL LOCK | Ignored | Ignored | BREAK | Ignored | N/A |
47 | KEY PAD 7 | 4700 | Ignored | 7700 | N/A | 4737 |
48 | KEY PAD 8 | 4800 | Ignored | Ignored | N/A | 4838 |
49 | KEY PAD 9 | 4900 | Ignored | 8400 | N/A | 4939 |
4A | KEY PAD - | 4A2D | Ignored | Ignored | N/A | 4A2D |
4B | KEY PAD 4 | 4B00 | Ignored | 7300 | N/A | 4B34 |
4C | KEY PAD 5 | Ignored | Ignored | Ignored | N/A | 4C35 |
4D | KEY PAD 6 | 4D00 | Ignored | 7400 | N/A | 4D36 |
4E | KEY PAD + | 4E2B | Ignored | Ignored | N/A | 4E2B |
4F | KEY PAD 1 | 4F00 | Ignored | 7500 | N/A | 4F31 |
50 | KEY PAD 2 | 5000 | Ignored | Ignored | N/A | 5032 |
51 | KEY PAD 3 | 5100 | Ignored | 7600 | N/A | 5133 |
* 52 | KEY PAD 0 (INS) | 5200 | Ignored | Ignored | N/A | 5230 |
53 | KEY PAD . | 5300 | Ignored | Ignored | N/A | 532E |
54 - 6F | UNDEFINED | Ignored | Ignored | Ignored | Ignored | Ignored |
* 70 | DEL -> | N/A | N/A | N/A | N/A | N/A |
71 - 73 | UNDEFINED | Ignored | Ignored | Ignored | Ignored | Ignored |
* 74 | ENTER | N/A | N/A | N/A | N/A | N/A |
75 - 76 | UNDEFINED | Ignored | Ignored | Ignored | Ignored | Ignored |
* 77 | JOY FIRE2 | N/A | N/A | N/A | N/A | N/A |
* 78 | JOY FIRE1 | N/A | N/A | N/A | N/A | N/A |
* 79 | JOY RIGHT | 4D00 | 4D00 | 4D00 | 4D00 | 4D00 |
* 7A | JOY LEFT | 4B00 | 4B00 | 4B00 | 4B00 | 4B00 |
* 7B | JOY DOWN | 5000 | 5000 | 5000 | 5000 | 5000 |
* 7C | JOY UP | 4800 | 4800 | 4800 | 4800 | 4800 |
* 7D | MOUSE M2 | N/A | N/A | N/A | N/A | N/A |
* 7E | MOUSE M1 | N/A | N/A | N/A | N/A | N/A |
7F | UNDEFINED | Ignored | Ignored | Ignored | Ignored | Ignored |
Joystick keys produce their respective cursor keys.
Key codes marked with '*' cause special actions as explained on the next page.
Some keys or set of keys invoke a special action as detailed below. Unless otherwise stated they do not result in any key tokens being inserted into the buffer.
The translation of various key codes into their respective tokens is affected by the current states of these keys (which is stored in location 00417). The SHIFT key, while pressed, reverses the current state of the CAPS LOCK and NUM LOCK. If more than one of ALT,CTRL, SHIFT,NUM LOCK or CAPS LOCK is active at one time then the order of precedence for key code translation is ALT, then CTRL, then SHIFT, then CAPS LOCK or NUM LOCK.
CAPS LOCK, when active, converts the key tokens for the lower case alphabetic keys (a - z) to their upper case counterparts.
Note that some operating systems (such as DOS Plus) install their own entry points into the interrupt vectors and these interrupt routines may exhibit different characteristics than those of the ROS routines described here.
The ROS service routine for interrupt 14 sets bit 7 of the RAM DRIVE RESTORE FLAG, to indicate that the Floppy Disk Controller interrupt has occurred.
CPU registers are used as follows:
The ROS interrupt 16 service routine provides a set of routines for reading and writing characters in alpha and graphics mode. In graphics mode the characters are constructed using a character matrix table (see section 2.3.20). It also provides facilities for scrolling the screen up or down, reading and writing pixels (graphics only) and reading the light pen.
CPU registers are used as follows:
All other registers as required by the sub-function.
If selector is greater than 15 then carry is set, else carry is clear.
All other flags and registers as specified by the sub-function.
Alpha modes 0 and 1 require 2000 bytes of VDU RAM while alpha modes 2 and 3 require 4000 bytes of the VDU RAM. The ROS takes advantage of all the (16K bytes) VDU RAM available in alpha modes by supporting multiple display pages. This means that application programs can set up a number of display pages and switch them as required.
In general parameters passed to ROS routines are not checked and care should be taken when choosing unusual parameters as unexpected results may occur. In particular be careful of boundary conditions such as setting the top of the display window equal to the bottom of the display window (for sub-functions 6 and 7) effectively creating a one line display. In this instance the scroll screen routines may not perform as expected.
CPU registers are used as follows:
In mode 4 palette 0 may be selected by writing the colour select register using VDU sub-function 11. The definition of the palettes is contained in Section 1.11.2.1, Graphics Mode 1.
When mode 5 is selected it must be followed by a selection of palette zero (VDU Colour select register - See 1.11.3) in order to enable palette 2.
If the Status-1 default display mode bits (see 1.8.2: DDM1-DDM0) are both set, indicating an external monochrome adapter, then mode 7 is selected regardless of the mode in AL.
To select the VDU mode the ROS does the following:
Set up the VDU colour select register:
Set the border colour to the default background colour.
In graphics modes except mode 6 set intensified foreground colours.
In mode 6 (Graphics 640 Mode) set white foreground colour.
NOTE: The mode 6 setting of white foreground colour is done by setting the VDU Colour Select Register (I/O Address 3D9) to 7. This means that in order to subsequently make use of the full 16 colour display capability the VDU Colour Select Register must be set to 0F.
This function is only relevant in alpha modes as the hardware cursor is not supported in graphics modes. It sets the start and end scan numbers of the cursor.
CPU registers are used as follows:
To hide the cursor specify a starting scan value of 31. Also Values greater than 31 will be interpetered as 'hide cursor' by the ROS.
This function sets the current row and column addresses of the cursor in the specified page.
CPU registers are used as follows:
In modes 0 and 1 (25 X 40 alpha mode) eight pages (0-7) are supported.
In modes 2 and 3 (25 X 80 alpha mode) four pages (0-3) are supported.
This function returns the current row and column address of the cursor in the specified page.
CPU registers are used as follows:
In modes 0 and 1 (25 X 40 alpha mode) eight pages (0-7) are supported.
In modes 2 and 3 (25 X 80 alpha mode) four pages (0-3) are supported.
This function returns the address of the light pen.
CPU registers are used as follows:
This function sets the active display page.
CPU registers are used as follows:
In modes 0 and 1 (25 X 40 alpha mode) eight pages (0-7) are supported.
In modes 2 and 3 (25 X 80 alpha mode) four pages (0-3) are supported.
This function scrolls the active display page, or part of the active display page up a specified number of lines.
CPU registers are used as follows:
Scrolling always takes effect on the current active display page.
Hardware scrolling is not supported. Scrolling is achieved by copying areas of VDU RAM.
In graphics modes blank lines are filled with attribute byte specified in BH to display the current background colour.
Note this function will fail to operate properly if on entry CH equals DH and AL is not zero. This is also true for all other compatible ROM environments.
This function scrolls the active display page, or part of the active display page down a specified number of lines.
CPU registers are used as follows:
Scrolling always takes effect on the current active display page.
Hardware scrolling is not supported. Scrolling is achieved by copying areas of VDU RAM.
Note this function will fail to operate properly if on entry CH equals DH and AL is not zero.
This function reads the character and its associated attribute byte at the current cursor address in a specified display page.
In graphics modes, the character pixel data is generated either from an internal character matrix table for characters 0 to 127 or from an external character matrix table for characters 128 to 255, the address of which is held in interrupt vector 31. See 2.3.22 for additional details.
CPU registers are used as follows:
Refer to 1.11.1 for the definition of the character attributes byte.
This function writes a character (or a block of the same character) and its associated attribute byte to the current cursor position in a specified display page.
In graphics modes, the character pixel data is generated either from an internal character matrix table for characters 0 to 127 or from an external character matrix table for characters 128 to 255, the address of which is held in interrupt vector 31. See 2.3.22 for additional details.
CPU registers are used as follows:
The repeat count specifies the number of consecutive locations to which the character and attributes are written. In graphics modes all characters must fit on the current line.
In graphics mode if bit 7 of BL is set then the data for the specified character is exclusive ORed with the data already in the VDU RAM at the cursor address.
This function writes a character (or a block of the same character) to the current cursor position in a specified display page. In alpha modes the attribute bytes for all characters written remains unchanged.
In graphics modes, the character pixel data is generated either from an internal character matrix table for characters 0 to 127 or from an external character matrix table for characters 128 to 255, the address of which is held in interrupt vector 31. See 2.3.22 for additional details.
CPU registers are used as follows:
The repeat count specifies the number of consecutive locations to which the character is written.
In graphics mode if bit 7 of BL is set then the data for the specified character is exclusive ORed with the data already in the VDU RAM at the cursor address.
This function writes the VDU Colour Select Register IRGB bits or the Palette select bits.
CPU registers are used as follows:
Changing the palette number (BH non-zero) only has effect in modes 4 and 5 (320 pixel graphics mode). Refer to section 1.11.3 for further details.
This function writes an individual pixel (only valid in graphics modes).
CPU registers are used as follows:
The pixel colour specified in AL should be in the range 0 to 3 in modes 4 and 5 (graphics 320 pixel mode) and in the range 0 to 1 for mode 6 (graphics 640 pixel mode).
This function is used for reading an individual pixel (only in graphics modes).
CPU registers are used as follows:
This function writes the specified character in Teletype emulation mode at the current cursor address in the active display page.
CPU registers are used as follows:
Upon completion of the write the cursor column is incremented by one. If the column address is greater than the line length then the column address is set to zero and the cursor row address is incremented by one.
If the incremented row address is greater than the last visible line then it is decremented to its original value and the entire page is scrolled up one line. In alpha modes the line added to the bottom of the page is cleared to spaces with the attributes the same as the first character in previous line. In graphic modes the bottom line is cleared to zeroes.
The following display characters are executed rather than displayed symbolically:
All other control characters are displayed.
This function returns the current VDU mode, the current display page and number of visible columns.
CPU registers are used as follows:
This software interrupt returns the current system configuration status ad defined in RAM locations 00410 and 00411 hex (see section 2.4).
CPU registers are used as follows:
Bit(s) | Function |
---|---|
14 & 15 | Number of printers (1-3). |
13 | Not used. |
12 | Set if an optional games adapter is fitted. |
11 | Always zero. |
9 & 10 | Number of serial interfaces (1 or 2). |
8 | Not used. |
7 | Always zero. |
6 | Set if second floppy disk drive is fitted. |
4 & 5 | Default VDU mode. |
2 & 3 | Always set. |
1 | Set if 8087 NDP is installed. |
0 | Always set. |
All flags and other registers preserved.
Section 1.8.2 (Port A - Status-1 Input) contains the default mode states as defined in the DDM1 and DDM0 bits.
This software interrupt returns the system RAM size as held in system locations 00413 and 00414 hex.
CPU registers are used as follows:
This software interrupt provides disk read, write, verify, and format functions for the drives fitted to the standard floppy disk controller.
CPU registers are used as follows:
All other registers as specified by the selected sub-function.
For all disk sub-functions the Carry Flag (CF) will be clear if no error else it is set if an error (and AH = error number). All other flags are corrupt.
This sub-function performs a total initialisation of the disk interface as follows:
CPU registers are used as follows:
When an error is returned by any other disk I/O sub-function, the Initialise Disk sub-function should be called prior to the next disk I/O operation.
This sub-function returns the status byte and Carry Bit of the last disk I/O operation.
CPU registers are used as follows:
This sub-function reads a number of consecutive sectors. All sectors to be read must be on the same track.
CPU registers are used as follows:
This sub-function writes a number of consecutive sectors. All sectors to be written must be on the same track.
CPU registers are used as follows:
This sub-function verifies a number of consecutive sectors. All sectors to be verified must be on the same track.
CPU registers are used as follows:
Since the verification process is halted upon the first occurrence of an error, AL represents the number of sectors successfully verified prior to the occurrence of an error or total sectors verified if no error.
This sub-function formats an entire track.
CPU registers are used as follows:
The format buffer contains four bytes of information for each sector on the track:
The gap length, filler byte and sectors per track required by the FDC Format command are obtained from the DPT (See Disk Parameter Table - Section 2.3.21).
This software interrupt provides functions for character I/O to one of the two serial channels and functions for configuring the serial parameters.
Two channels are supported, logical serial device 0 (COM1:) which is always configured and logical serial device 1 (COM2:) which is optional. Power-up initialisation determines whether serial device 1 is installed.
CPU registers are used as follows:
If logical channel number is out of range (greater than 1) or is not fitted then the function is abandoned and the timeout error status (bit 7 of AH) is returned and all other bits in AX are undefined.
The Logical Serial Device Timeout Count RAM variables (locations 0047C & 0047D) specify the time out delay (in half seconds) used for channel timeout. See section 2.4.
This sub-function performs a complete reinitialisation of a serial channel. Setting the Baud Rate, Data Bits, Stop Bits and Parity.
CPU registers are used as follows:
Bit(s) | Function |
---|---|
5 - 7 | Baud Rate Code (0 - 7). |
4 | Set for Even Parity / Clear for Odd Parity. |
3 | Set Parity Enable. |
2 | Set for 2 Stop Bits / Clear for 1 Stop Bit. |
1 | Always set. |
0 | Set for 8 Data Bits/Clear for 7 Data Bits. |
The Baud Rate code (bits 5 thru 7) is one of the following:
If the hardware flow control bit in the NVR default VDU mode byte is set then RTS is raised true and DTR is set false. Otherwise the current state of the control lines is preserved.
This sub-function performs a character out sequence to the selected port. The character is output when CTS and the 8250 Tx Holding Register Empty status is also true. If the character cannot be sent within the time specified in the logical serial device timeout count RAM variable then the command is abandoned and AH is returned with bit 7 set.
CPU registers are used as follows:
All flags and other registers preserved.
When this sub-function is called, RTS is raised true and if the hardware flow bit is disabled then DTR is set as well.
Upon exit both the RTS and DTR control lines are left in their current state.
The Logical Serial Device Timeout Count RAM variables (locations 0047C and 0047D) specify the time out delay (in half seconds) used for channel timeout.
This sub-function attempts to read a character from the specified serial port. The character is not read until both Data Ready (DR) and Data Set Ready (DSR) status bits are both true. If a character is not received within the time specified by the logical device timeout count then the command is abandoned and timeout status is flagged.
CPU registers are used as follows:
Bit(s) | Meaning |
---|---|
7 - 5 | Always '0'. |
4 | Break status. |
3 | Set if framing error. |
2 | Set if parity error. |
1 | Set if overrun error. |
0 | Always '0'. |
If the character is received with no errors then AH = 0 on exit.
Upon entry, if no character is available at the serial port DTR is set in the Modem Control Register. When a character is read or timeout occurs DTR is set false only if hardware flow control is enabled.
If logical channel number is out of range or is not fitted then the function is abandoned and the timeout error status (bit 7 of AH) is returned and all other bits in AX are undefined.
The Logical Serial Device Timeout Count RAM variables (locations 0047C and 0047D) specify the time out delay (in half seconds) used for channel timeout.
This function returns the status of the specified logical channel.
CPU registers are used as follows:
All flags and other registers preserved.
If logical channel number is out of range or is not fitted then the function is abandoned and the timeout error status (bit 7 of AH) is returned and all other bits in AX are undefined.
This software interrupt provides access to the enhanced hardware features of the AMSTRAD PC1512.
CPU registers are used as follows:
Read and reset the mouse X and Y count registers. Each register is read twice. If the data from two consecutive reads differs then the process is repeated until two consecutive reads produce the same data. Upon completion of the read procedure the registers are cleared to zero.
CPU registers are used as follows:
This sub-function writes a specified location in the Real Time Clock Non-Volatile RAM (NVR), re-computes and stores the new checksum value. The location written is then read back and compared with the new value and if different an error code is returned.
CPU registers are used as follows:
Although locations 0-13 may be accessed using this function, they are used by the RTC hardware and should not be modified with this function.
Section 2.5 (Non Volatile RAM) contains the NVR information layout.
This sub-function reads a specified location in the Real Time Clock Non-Volatile RAM (NVR). The checksum is computed and compared with the actual value and if the NVR checksum is incorrect an error code is returned.
CPU registers are used as follows:
Section 2.5 (Non Volatile RAM) contains the NVR information layout.
This sub-function writes an 8-bit value to the VDU Colour Plane Write register. Section 1.11.3 contains the details of this register.
CPU registers are used as follows:
This sub-function writes an 8-bit value to the VDU Colour Plane Read register. Section 1.11.3 contains the details of this register.
CPU registers are used as follows:
This sub-function writes an 8-bit value to the VDU Graphics Mode 2 Border register. Section 1.11.3 contains the details of this register.
CPU registers are used as follows:
This sub-function returns the two part ROS version number.
CPU registers are used as follows:
The Release Number is incremented only when the interface to the ROS is changed. The Issue Number is incremented for each version of a particular release. A new release always starts with issue number zero.
Note that this function call can be used to detect whether a program is running on an Amstrad PC1512. Prior to entry clear the carry flag and set BX to zero. Upon return if carry is set or BX is zero then the program is not running in an Amstrad PC1512.
This software interrupt provides access to the keyboard buffer and the current toggle status.
CPU registers are used as follows:
Return the next token from the key token buffer. If no key token is available then wait until a key token is available.
CPU registers are used as follows:
Test whether the key token buffer is empty. If it is not empty return the next key token to be taken out of the buffer without removing it from the buffer.
CPU registers are used as follows:
Return the current value of the shift states (from 00417h).
CPU registers are used as follows:
Bit(s) | Function (Set if key active) |
---|---|
7 | INS |
6 | CAPS LOCK |
5 | NUM LOCK |
4 | SCROLL LOCK |
3 | ALT |
2 | CTRL |
1 | LEFT SHIFT |
0 | RIGHT SHIFT |
All flags and other registers preserved.
This software interrupt provides access to the three printer channels.
CPU registers are used as follows:
Bit(s) | Function (Bit Set True) |
---|---|
7 | Printer Idle. |
6 | Printer Acknowledge |
5 | Paper Out. |
4 | Printer Selected. |
3 | I/O Error. |
1 & 2 | Always Zero. |
0 | Zero if I/O successful or set if Timeout. (see sub-functions). |
All flags and other registers preserved.
Three logical channels are supported. Logical printer device 0 is the system port and is standard to all machines. The power-up initialisation sequence determines if additional external printer ports are present. When both additional printer interfaces are present, device 1 is the external printer port and device 2 is the printer port on the external monochrome VDU controller. If only one additional printer interface is present it is always logical device 1.
Locations 0478h - 047Ah contain the Logical Printer Device timeout counts (see section 2.4).
This Sub-function attempts to output a character to the specified printer port. If the character cannot be sent within the time specified by the logical printer timout count RAM variable then the command is abandoned and AH is returned with bit 0 set.
CPU registers are used as follows:
This Sub-function performs a complete reinitialisation of a specified printer channel (if present). The printer INIT signal is held low for approximately 4 milliseconds. Printer interrupts and auto linefeed are disabled.
CPU registers are used as follows:
This Sub-function returns the status register of the specified logical printer channel (if present).
CPU registers are used as follows:
This software interrupt is intended to provide an orderly system restart capability. A message is displayed on the active VDU requesting that the user "Insert a SYSTEM disk into Drive A" and "Then press any key." When the keypress is received, the Disk Bootstrap process (Interrupt 25) is invoked.
CPU registers are used as follows:
This software interrupt to provide access to the disk bootstrap process which is normally executed after power-up initialisation tests.
The ROS attempts to load the bootstrap sector (from drive A, side 0, track 0, sector 1) into memory at 07C00. If the bootstrap sector is loaded successfully it is given control (far jump to segment 0000 offset 7C00). If the bootstrap sector cannot be loaded after 10 retries, the ROS will display a message prompting the user to "Insert a SYSTEM disk into drive A" and "Then press any key." The ROS then waits for the keypress and repeats the bootstrap procedure.
CPU registers are used as follows:
This software interrupt routine provides access to both the system (software maintained) clock location as well the Real Time Clock (RTC) hardware.
CPU registers are used as follows:
This sub-function returns the current value of the 32 bit system clock value.
CPU registers are used as follows:
The 32 but system clock is incremented every 54 milliseconds by the ticker hardware interrupt routine. When the count reaches the 24 hour value (000185000h) the 24 Hour flag is set and the system clock count is reset to zero.
Note that the 24 hour flag is reset to zero after it has been read.
This sub-function sets the current value of the 32 bit system clock value.
CPU registers are used as follows:
This sub-function gets the current time from the Real Time Clock.
CPU registers are used as follows:
This sub-function sets the Real Time Clock time.
CPU registers are used as follows:
When the daylight savings option is set it enables two special updates of the current time. On the last Sunday in April, the time increments from 1:59:59 AM to 3:00:00 AM. Also on the last Sunday in October the time increments from 1:59:59 AM to 1:00:00 AM.
Note that this option also disables the alarm function.
This sub-function gets the current date from the Real Time Clock.
CPU registers are used as follows:
The century byte is set to 19 (BCD) if the year is 80 (BCD) or above otherwise it is set to 20 (BCD).
This sub-function sets the Real Time Clock time.
CPU registers are used as follows:
Century is ignored and is computed as described in clock sub-function 4.
This sub-function sets the alarm time and arms the Real Time Clock alarm interrupt. The alarm interrupt will occur then the current time matches the alarm time. An application program which uses this function must first write the address of its alarm interrupt routine into interrupt vector 10.
CPU registers are used as follows:
This sub-function disarms the Real Time Clock alarm function.
CPU registers are used as follows:
This software interrupt is invoked by the keyboard hardware interrupt routine when a keyboard break ([CTRL] + [NUM LOCK]) is detected.
The power-up initialisation process loads the address of a dummy break handler routine which does an interrupt return (IRET) instruction.
Application programs which supply a keyboard break interrupt must conform to the following register conventions:
The supplied interrupt routine must not invoke any other ROS interrupts from within itself but may modify any of the system RAM locations used by the ROS.
This software interrupt is called from within the System Clock hardware interrupt routine. It is initialised by power-up with a dummy handler which returns from interrupt by doing an IRET instruction. It can be used by application programs which require a process to be run at a regular interval.
Application programs which supply an external ticker interrupt must conform to the following register conventions:
The supplied interrupt routine must not invoke any other ROS interrupts from within itself but may modify any of the system RAM locations used by the ROS.
This interrupt vector location contains the 32-bit address of the VDU parameter table used in setting up the video hardware when changing VDU mode. Upon power-up or after a reset, the initialisation process loads the ROM table address into this vector location (0074-0077 hex).
The VDU parameter table consists of four consecutive 16 byte entries. Each entry contains an initialisation quantity for each of the emulated MC6845 CRTC registers (See section 1.11.5). When a new VDU mode is selected the table entry used to initialise the VDU is as follows:
Table Entry | VDU Mode |
---|---|
0 | 0 - Alpha 25 by 40 Chars. |
0 | 1 - Alpha 25 by 40 Chars. |
1 | 2 - Alpha 25 by 80 Chars. |
1 | 3 - Alpha 25 by 80 Chars. |
2 | 4 - Graphics 200 by 320 Pixels, palettes 0 or 1. |
2 | 5 - Graphics 200 by 320 Pixels, palette 2. |
2 | 6 - Graphics 200 by 640 Pixels. |
3 | 3 - Alpha 25 by 80 chars using monochrom adapter. |
The table contains the following initialisation data:
Register Number | Function | Entry 0 | Entry 1 | Entry 2 | Entry 3 |
---|---|---|---|---|---|
R0 | * Horizontal Total | 56 | 113 | 56 | 97 |
R1 | Horizontal Displayed | [ 40 ] | [ 80 ] | [ 40 ] | 80 |
R2 | * Horizontal Sync Posn. | 45 | 90 | 45 | 82 |
R3 | * Horizontal Sync Width | 10 | 10 | 10 | 15 |
R4 | * Vertical Total | 31 | 31 | 127 | 25 |
R5 | * Vertical Total Adj. | 06 | 06 | 06 | 06 |
R6 | Vertical Displayed | [ 25 ] | [ 25 ] | [ 100 ] | 25 |
R7 | * Vertical Sync Posn. | 28 | 28 | 112 | 25 |
R8 | * Interlace | 02 | 02 | 02 | 02 |
R9 | Max. Raster Address | 07 | 07 | 01 | 13 |
R10 | Cursor Start Raster | 06 | 06 | 06 | 11 |
R11 | Cursor End Raster | 07 | 07 | 07 | 12 |
R12 | Start Address (H) | 00 | 00 | 00 | 00 |
R13 | Start Address (L) | 00 | 00 | 00 | 00 |
R14 | Cursor Location (H) | 00 | 00 | 00 | 00 |
R15 | Cursor Location (L) | 00 | 00 | 00 | 00 |
Registers marked '*' are not software programmable in the emulated MC6845 CRTC implementation and their corresponding values are place holders in the table.
The two sets of values marked by '[ ]' have no effect on the display, but a zero value in either register will cause the whole screen to display the border colour.
This interrupt vector location contains the 32-bit address of the parameter table of configuration parameters for the disk interface. Upon power-up or after a reset, the initialisation process loads the ROM table address into this vector location (0078 - 007B hex).
The Disk Parameter Table consists of 11 bytes as follows:
Byte | Function | Value |
---|---|---|
0 | 2nd byte of the disk controller specify command. (6 Ms Step Rate, Head Unload delay disabled.) | 208 |
1 | 3rd byte of the disk controller specify command. (Head Load delay disabled.) | 0 |
2 | Motor off timeout (approx 5 seconds). | 100 |
3 | Sector size selector (512 bytes) | 2 |
4 | End of Track (sector 9) | 9 |
5 | Gap length for Read/Write commands. | 42 |
6 | DTL - Data Length | 255 |
7 | Gap Length for format command. | 80 |
8 | Filler byte for format command. | 246 |
9 | Head Settling Delay (15 Ms) | 15 |
10 | Motor on Delay (500 Ms) | 4 |
This interrupt vector location contains the 32-bit address of the VDU matrix table used in graphics modes for generating pixel data for characters 128 to 255.
Upon power-up or after a reset, the initialisation process loads this vector (007C-007F) with all zeros to indicate that no external VDU matrix table is loaded.
Each of the 128 character table entries consists of eight bytes, one for each character scan. The first byte is the top scan value and the last byte is the button scan value. The MSB, bit 7, is the left most pixel and the LSB, bit 0, is the right most pixel of the scan. A set bit displays the foreground colour and a reset bit displays the background colour.
The System RAM address space from 00300 to 00500 is used by the ROS for variable storage. The following table lists the variables and their usage. They are either classified as Byte (8-bit), Word (16-bit), Long Word (32-bit) or Buffer (greater than 32-bit) storage locations.
Location(s) | Usage | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
00300-003FF | Initialisation Stack (Buffer). Used as stack area only during initialisation. | ||||||||||||||||||||||||||
00400 | Logical Serial Device 0 Base I/O Address (Word). Contains the base address of logical serial device 0. Initally the System Asynchronous Serial port address. | ||||||||||||||||||||||||||
00402 | Logical Serial Device 1 Base I/O Address (Word). Contains the base address of logical serial device 1. Initally the external asynchronous serial port or zero if it is not present at initialisation. | ||||||||||||||||||||||||||
0404 - 0407 | Reserved. | ||||||||||||||||||||||||||
00408 | Logical Printer Device 0 Base I/O Address (Word). The base address of logical printer device 0. Initally the System Parallel Printer port. | ||||||||||||||||||||||||||
0040A | Logical Printer Device 1 Base I/O Address (Word). The base address of logical printer device 0. Initially the external parallel printer port if it is present else it points to the external monochrome VDU controller if it is present. If neither is present it is initialised to zero. | ||||||||||||||||||||||||||
0040C | Logical Printer Device 2 Base I/O Address (Word). Initially points to the external monochrome VDU controller if both the external parallel printer port and the external monochrome VDU controller are present. If either is not installed initialised to zero. | ||||||||||||||||||||||||||
0040E | Reserved (Word). | ||||||||||||||||||||||||||
00410 | System Configuration Status (Word). Contains the System Configuration as follows:
| ||||||||||||||||||||||||||
00412 | Reserved (Byte). | ||||||||||||||||||||||||||
00413 | Total RAM Size (Word). Initially set to the number of 1K User (System) RAM Blocks installed. | ||||||||||||||||||||||||||
00415 | Extra RAM Size (Word). Initially set to the number of 1K User (System) RAM Blocks installed minus 64 | ||||||||||||||||||||||||||
00417 | Key Toggles and Key States (Byte). This byte is used to record the state of the Key Toggles (bits 4-7) and Key States (bits 0-3) as follows:
| ||||||||||||||||||||||||||
00418 | Keys down (Byte). This byte is used to record the state of the toggle keys so that they do not repeat when the key is held down.
| ||||||||||||||||||||||||||
00419 | Absolute Key Token Number (Byte). When an absolute key token numbered is entered via ALT and the numeric key pad, this variable holds the current state of the token. | ||||||||||||||||||||||||||
0041A | Key Token Buffer Out Pointer (Word). This variable holds the absolute offset to the next key token to be removed from the key token buffer. Note that the ROS assumes that the buffer has a segment paragraph address of 0040h. | ||||||||||||||||||||||||||
0041C | Key Token Buffer In Pointer (Word). This variable holds the absolute offset to the next empty position in the key token buffer. The buffer is empty when this location is the same as the Out Pointer. | ||||||||||||||||||||||||||
0041E | Key Token Buffer (Buffer). The Key Token Buffer is a 16 word circular buffer used to store up to 16 key tokens. | ||||||||||||||||||||||||||
0043E | Drive Restore Flag (Byte). Each floppy disk drive has a restore flag associated with it (bit 0 for drive 0 and bit 1 for drive 1). If the restore flag for the specified drive is reset prior to any disk access (read/write/verify/format), then the restore command is issued to the FDC for that drive. If successful then the associated flag bit is set. When the initialise sub-function of the disk interrupt is called the restore flag is cleared. Bit 7 is used for handling FDC hardware interrupts. | ||||||||||||||||||||||||||
0043F | Drive Motor Flag (Byte). When a disk drive motor is running then either bit 0 or bit 1 will be set to which drive (0 or 1 respectively) is selected. | ||||||||||||||||||||||||||
00440 | Drive Motor Timeout Counter (Byte). After each disk operation the the motor off timeout count is copied from the Disk Parameter table (See interrupt 30) into this variable. Each time the system clock interrupt is executed, the count is decremented. When it reaches zero the Drive Motor Flag is reset. | ||||||||||||||||||||||||||
00441 | Disk Status (Byte). This byte holds the status returned by the last disk operation. (See section 2.3.19 Disk I/O Interrupt - Sub-Function 1.) | ||||||||||||||||||||||||||
00442 | FDC Results Buffer (Buffer). This seven byte buffer is used for storage of the FDC status information returned upon the completion of a disk I/O operation. | ||||||||||||||||||||||||||
00449 | Current VDU Mode (Byte). The current VDU mode in the range of 0 - 7 is stored here. | ||||||||||||||||||||||||||
0044A | Visible VDU Columns (Word). The number of visible character columns currently being displayed is stored here. | ||||||||||||||||||||||||||
0044C | VDU Display Buffer Size (Word). This word holds the amount of VDU RAM used by the ROS to display one page as defined below:
| ||||||||||||||||||||||||||
0044E | VDU Display Start Address (Word). Contains the origin of the currently active VDU display page. | ||||||||||||||||||||||||||
00450 | Cursor Address Buffer (Buffer) This 16 byte buffer contains the row and column addresses for up to eight display pages. | ||||||||||||||||||||||||||
00460 | Cursor End Scan (Byte). This byte contains the current end scan number that was programmed into the VDU controller. | ||||||||||||||||||||||||||
00461 | Cursor Start Scan (Byte). This byte contains the current start scan number that was programmed into the VDU controller. | ||||||||||||||||||||||||||
00462 | VDU Active Display Page (Byte). This byte contains the selected display page number. | ||||||||||||||||||||||||||
00463 | VDU I/O Address (Word). This word contains the I/O address of the VDU interface currently in use. For all modes except mode 7 this is the internal emulated MC6845 CRTC device. For mode 7 it is the external Monochrome VDU controller. | ||||||||||||||||||||||||||
00465 | Current VDU Mode Control Register (Byte). This byte contains the current contents of the VDU Mode Control Register (See 1.11.3.1). | ||||||||||||||||||||||||||
00466 | Current VDU Colour Select Register (Byte). This byte contains a copy of the data loaded into VDU colour select register. | ||||||||||||||||||||||||||
0467-046B | Reserved | ||||||||||||||||||||||||||
0046C | System Clock (Long Word). The 32 bit system clock count | ||||||||||||||||||||||||||
00470 | 24 Hour Flag (Byte). When the system clock reaches 000185000h then it is cleared and this flag byte is set to 0FFh. Note that reading the clock via interrupt 26 clears this flag. | ||||||||||||||||||||||||||
00471 | Break (Byte). This byte is initially set to zero. Each time Break ([CTRL]+[NUM LOCK]) is detected, bit 7 is set. An application program using this bit to detect break must reset bit 7 when it detects the break event. | ||||||||||||||||||||||||||
00472 | System Reset Flag (Word). When system reset is ([CTRL]+[ALT]+[DEL]) detected this location is set to 01234h prior to issuing a system reset. The power-up self test routine then recognizes this pattern and does not repeat the RAM tests. | ||||||||||||||||||||||||||
0474-0477 | Reserved for Hard Disk BIOS ROM. | ||||||||||||||||||||||||||
00478 | Logical Printer Device 0 Timeout Count (Byte). (See box below) | ||||||||||||||||||||||||||
00479 | Logical Printer Device 1 Timeout Count (Byte). (See box below) | ||||||||||||||||||||||||||
0047A | Logical Printer Device 2 Timeout Count (Byte). (See box below) | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
0047B | Reserved. | ||||||||||||||||||||||||||
0047C | Logical Serial Device 0 Timeout Count (Byte). (See box below) | ||||||||||||||||||||||||||
0047D | Logical Serial Device 1 Timeout Count (Byte). (See box below) | ||||||||||||||||||||||||||
| |||||||||||||||||||||||||||
0047E | Reserved. | ||||||||||||||||||||||||||
00480 | Key Token Buffer Start Address (Word). Offset pointer to the start of the key token buffer. Note that the assumed buffer segment paragraph address is 0040h. | ||||||||||||||||||||||||||
00482 | Key Token Buffer End Address (Word). Offset pointer to the start of the key token buffer. | ||||||||||||||||||||||||||
00500 | Print Screen Status (Byte).
|
The first 40 bytes of the battery backed RAM within the RTC hardware are for system parameter storage as follows:
Byte(s) | Usage | Default |
---|---|---|
0-9 | Time and Date parameters. | -- |
1 | RTC Control Register A. | 070 |
11 | RTC Control Register B. | 002 |
12 | RTC Control Register C. | -- |
13 | RTC Control Register D. | -- |
14 - 19 | Time and Date when machine last used. | -- |
20 | User RAM Checksum. | |
21 - 22 | Enter Key translation token. | 1C0D |
23 - 24 | Forward Delete Key translation token. | 2207 |
25 - 26 | Joystick Fire Button 1 translation token. | FFFF |
27 - 28 | Joystick Fire Button 2 translation token. | FFFF |
29 - 30 | Mouse Button 1 translation token. | FFFF |
31 - 32 | Mouse Button 2 translation token. | FFFF |
33 | Mouse X direction scaling factor. | 00A |
34 | Mouse Y direction scaling factor. | 00A |
35 | Initial VDU mode and drive count | 020 |
36 | Initial VDU Character attributes. | 007 |
37 | Size of RAM disk in 2K blocks. | 000 |
38 | Initial system UART hardware setup byte. | 0E3 |
39 | Initial external UART hardware setup byte. | 0E3 |
40-63 | Unused | -- |
After power-up or upon system reset the NVR is checksummed as part of initialisation. If the lower byte of the sum is not 0AAh or if the battery voltage low bit is set in the RTC status register, then the values in the default column are loaded into their respective locations and a warning message is displayed on the VDU. Those locations without defaults (marked with '--') are not changed.
The default key token value in bytes 25 to 32 is a special value (FFFF) which signals the keyboard hardware interrupt to ignore the key press rather than to insert the key token into the buffer.
The initial VDU mode (byte 35) is used to set up the system status-1 channel. (DDM - bits 4 & 5. See 1.8.2 for the valid combinations.) Bits 4 and 5 of byte 35 are set up correspondingly. Bit 6 is set if two drives are fitted else it is cleared. The default version of byte 35 has bit 6 set (two drives) and bits 4 & 5 set to 1 & 0 (Colour, alpha, 80 x 25 chars).
Bit 7 of byte 35 is used to enable or disable the serial I/O flow control option. Refer to section 2.3.11 for serial I/O and flow control details.
The initial VDU character attribute (byte 36) is written to all the attribute bytes of the VDU buffer when one of the alpha modes is selected. The default value selects a white foreground on a black background.
The RAM disk size (byte 37) is used by the MS-DOS and DOS Plus operating systems to specify their RAM disk setup size.
The initial UART parameters (bytes 38 and 39) specifies 9600 baud, 8 data bits, 1 stop bit and no parity. These values are loaded to their respective serial channel by the Serial I/O Initialise sub-function (See Section 2.3.11: Interrupt 20).
The ROS outputs a number of messages during initialisation and self test as detailed below. The language in which these messages are displayed is dependent of the three option links connected to the three least significant bits of the system printer port status. (See Table 3.1 for the interpretation of the three link bits.)
The following messages are displayed on the VDU (in the default display mode as specified by the NVR) in the situations as described. The initialisation process is allowed to complete even though some of them may represent self test failures.
nnn | = the RAM size in kilobytes. |
v.i | = the ROS Version (v) and Issue (i) number. |
hh:mm | = the hours (hh) and the minutes (mm) of last on time. |
dd mn yy | = the day (dd), the calendar month (mn) and the year (yy) of the last date used. |
The following messages indicate that a self test segment has failed and that initialisation cannot continue. In this situation the machine must be switched off an on again in order to reinitiate operations. The VDI us switched to 80 column alpha mode and cleared prior to displaying any of these messages.
As is evident from the message content, the faulty system component is named. When one of these failures occurs, no other testing is run since further testing may require use of the failing component. For this reason the system is placed in a non-interruptible loop. Failures of this sort are not expected to occur even intermittently. When any self test failure does occur it should be referred to a qualified AMSTRAD service facility for further diagnostic testing.
Section 1 | Index | Section 3 |