+3e Technical Information

The extra facilities of the +3e operating system are provided as a set of calls known as IDEDOS. This document describes the various calls provided and how they can be accessed.

__________________________________________________________________

Detecting the presence of IDEDOS

Before using any of the IDEDOS calls in your application, it is important to ensure that IDEDOS is present; if not, your application should report an error to the effect that it will only run on a +3e (v1.00 and above), and not a standard +3.

To check for IDEDOS, execute the standard +3DOS call DOS_VERSION and test the sign flag. If IDEDOS is present, the sign flag will be set.

Here's an example code fragment (don't forget that the memory configuration should be ROM2/5/2/7 when performing any +3DOS or IDEDOS call):

          call  DOS_VERSION
          jp    m, gotide
          ...exit with IDEDOS not found error here...

__________________________________________________________________

Using IDEDOS calls

IDEDOS calls are made in exactly the same way as standard +3DOS calls (as described in the +3 manual). A full description of each call is provided later. They may produce any standard +3DOS error code, and the following additional IDEDOS-specific errors:

rc_invpartition (56)
Invalid partition
rc_partexist (57)
Partition already exists
rc_notimp (58)
Not implemented
rc_partopen (59)
Partition open
rc_nohandle (60)
Out of partition handles
rc_notswap (61)
Not a swap partition
rc_mapped (62)
Drive already mapped
rc_noxdpb (63)
Out of XDPBs
rc_noswap (64)
No swap partition available
rc_invdevice (65)
Invalid device
rc_8bitdata (66)
8-bit data transfer

IDEDOS will in fact never produce the rc_notimp error, but it is present so that your application can generate it if desired, and obtain a suitable error message from +3 BASIC. It is recommended that the rc_notimp error is generated if the version of IDEDOS is not high enough to provide a call or other functionality that you need.

To convert any +3DOS or IDEDOS error code into a +3 BASIC error code, and pass it to BASIC, use the following code:

         cp    $0a
         jr    c,ricerr
         add   a,$18            ; add $18 to most errors
         jr    doerr
.ricerr  add   a,$3d		; add $3d for Retry/Ignore/Cancel errors
.doerr   ld    l,$cf
         ld    h,a
         push  hl               ; places RST 8; DEFB err on stack
         ld    hl,0
         add   hl,sp
         jp    (hl)             ; cause the error

__________________________________________________________________

IDEDOS Calls

Many calls are provided by IDEDOS, although most of these will not be of interest to the average application writer. A full description of every call available can be found here.

When writing your code, use the following definition file which contains all the call and error codes for ease of use:

To use this file, I recommend the excellent z80asm cross-compiler (follow link for details).

The calls are listed here by category, and all documentation refers to IDEDOS v1.00+, except where stated:

__________________________________________________________________

Miscellaneous calls

Useful calls that don't fit any other category.

__________________________________________________________________

Swap partition services

NOTE: Swap partition calls should only be used on IDEDOS v1.06+. Previous versions contained bugs, so your application should check the version using IDE_VERSION before using these calls.

The most useful calls provided in IDEDOS v1.00 allow applications to access swap partitions in a very simple manner, providing them with a virtual memory system. Each application is advised to only open a single swap partition, as most users will not want to create more than 2 swap partitions (and the +3e uses one swap partition itself).

Applications can choose the size of the "blocks" of memory which the calls operate on; the size can be any multiple of 0.5K up to 32 (ie 16K). Blocks are numbered from 0 upwards, and if the end of the swap partition is reached, then wrapping occurs to block 0.

__________________________________________________________________

Data partition access

Access to data partitions is generally best left to +3DOS calls, as hard disk partitions created with the NEW DATA command can be accessed identically to any other +3DOS drive. However, it is possible to create and use partitions with a filesystem of your own devising, should you so desire (this is not for the faint-hearted!) using the following calls.

__________________________________________________________________

Partition management

These calls, together with the data partition access calls above, allow partitions to managed, and might be useful in hard disk utility applications (for cloning or backing up partitions, for example).

__________________________________________________________________

Drive mappings

These calls allow you to examine and alter the +3DOS drive mappings.

__________________________________________________________________

Streams and channels

These calls provide a standard way for machine-code programs to access the Spectrum's streams and channels, sadly lacking from the standard machine. Note that for these calls only, the memory configuration should be ROM2/5/2/0, rather than the usual ROM2/5/2/7 for other IDEDOS calls, and the stack should be located in the normal position for BASIC (between STKEND and RAMTOP). Also, any errors will result in a standard 48K BASIC error being invoked (usually O - invalid stream or J - invalid I/O device).

__________________________________________________________________

Internal calls

These calls are for internal use only, and are listed here for completeness.

__________________________________________________________________

Please contact me if you would like any further information, or would like to port the IDEDOS part of the +3e operating system to another Spectrum setup or Z80-based computer.

__________________________________________________________________

Back to ZX Spectrum +3e homepage