Immediate operations

From BeebWiki
Jump to: navigation, search
10.9 Peek                                  OSWORD A=&10 (Control byte=&81)
==========================================================================

General description
-------------------
This returns a block of memory from a remote machine into the local machine.  
See section 10.15 for information on polling the transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &81              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+
           |     Pointer to start of     |
           |        local buffer         |
         8 +-----------------------------+
           |      Pointer to end of      |
           |        local buffer         |
        12 +-----------------------------+
           |     Pointer to start of     |
           |   remote machine's buffer   |
        16 +-----------------------------+

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+


Poke                                       OSWORD A=&10 (Control byte=&82)
==========================================================================

General description
-------------------
This sends a block of memory from the local machine into the remote machine.  
See section 10.15 for information on polling the transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &82              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+
           |     Pointer to start of     |
           |        local buffer         |
         8 +-----------------------------+
           |      Pointer to end of      |
           |        local buffer         |
        12 +-----------------------------+
           |     Pointer to start of     |
           |   remote machine's buffer   |
        16 +-----------------------------+

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+


Remote JSR                                 OSWORD A=&10 (Control byte=&83)
==========================================================================

General description
-------------------
This call sends an argument block to a remote machine, then jumps to a
location in the remote machine. See section 10.15 for information on polling
the transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &83              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+
           |     Pointer to start of     |
           | local buffer for arguments  |
         8 +-----------------------------+
           |      Pointer to end of      |
           | local buffer for arguments  |
        12 +-----------------------------+
           |  Address to CALL in remote  |
           |           machine           |
        16 +-----------------------------+

After this call the remote machine is protected against procedure calls and
OS procedure calls until the parameter block is read. The program in the
remote machine must read the parameter block (OSWORD A=&12) before exiting
(with a RTS), otherwise the remote machine will remain protected. If the
remote machine is a BBC microcomputer then the address to call must be in
the I/O processor.

Although interrupts are disabled in the remote machine, they should be
enabled if the routine is going to take much longer than 1ms to complete.

The maximum size of the argument block is 128 bytes.

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+


Remote procedure                           OSWORD A=&10 (Control byte=&84)
==========================================================================

General description
-------------------
This passes a block of memory to a remote machine and causes an event
(number 8) in that machine. The program in the remote machine must intercept
the event number (procedure number held in YX) and read the argument block
(OSWORD A=&12) before exiting with an RTS.

Note that the argument block must be read even if there are no arguments,
because the Rx control block will not be reopened until this has happened.

Machines with Econet version 3.34 may crash, because stations greater than
240 can override the machine protection, therefore they can overwrite the
argument block before it is read. See section 10.15 for information on
polling the transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &84              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+
           |     Pointer to start of     |
           | local buffer for arguments  |
         8 +-----------------------------+
           |      Pointer to end of      |
           | local buffer for arguments  |
        12 +-----------------------------+
           |      Procedure number       |
        16 +-----------------------------+

In the remote machine the Accumulator (A register) holds the event number
(which will be 8). X will hold the low byte of the procedure number and Y
will hold the high byte.

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+


Remote Insert key                          OSWORD A=&10 (Control byte=&85)
==========================================================================

General description
-------------------
This call inserts a byte into a remote machine's keyboard buffer and is used
by the 'send a line of text' command (OSWORD A=&14 Control byte=1), which
should usually be used in preference to this call See section 10.15 for
information on polling the transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &85              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+
           |     Pointer to buffer       |
         8 +-----------------------------+
           |   Pointer to buffer + 1     |
        12 +-----------------------------+
           |            &00              |
        16 +-----------------------------+

The buffer (which is 1 byte long) holds the byte to send to the remote station.

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+


Start REMOTE                               OSWORD A=&10 (Control byte=&85)
==========================================================================

General description
-------------------
This call is used to start a REMOTE. See section 10.15 for information on
polling the transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &85              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+
           |     Pointer to buffer       |
         8 +-----------------------------+
           |   Pointer to buffer + 1     |
        12 +-----------------------------+
           |            &01              |
        16 +-----------------------------+

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+


Update workspace                           OSWORD A=&10 (Control byte=&85)
==========================================================================

General description
-------------------
This call causes a remote machine to write the state of its screen to a
position in its Econet workspace (whence it can be read by the local machine
by PEEKing this workspace). See section 10.15 for information on polling the
transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &85              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+
           |     Pointer to buffer       |
         8 +-----------------------------+
           |   Pointer to buffer + 1     |
        12 +-----------------------------+
           |            &02              |
        16 +-----------------------------+

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+

In the remote machine the data is written to the address (in the I/O
processor) pointed to by locations &9E and &9F plus &E9. This data is shown
below:

         0 +-----------------------------+
           |  Address of top of screen   |
         2 +-----------------------------+
           |  Palette (physical colours  |
           |     defined on screen)      |
        18 +-----------------------------+
           |      Mode number (0-7)      |
        19 +-----------------------------+
           | Address of start of screen  |
        21 +-----------------------------+
           |   Mark/Space for colours    |
        23 +-----------------------------+


Fatal Error                                OSWORD A=&10 (Control byte=&85)
==========================================================================

General description
-------------------
This causes a fatal error in a remote machine. It is easier to use the high
level fatal error call (OSWORD A=&14 Control byte=2). See section 10.15 for
information on polling the transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &85              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+
           |     Pointer to buffer       |
         8 +-----------------------------+
           |   Pointer to buffer + 1     |
        12 +-----------------------------+
           |            &03              |
        16 +-----------------------------+

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+


Halt                                       OSWORD A=&10 (Control byte=&86)
==========================================================================

General description
-------------------
Halts all non-interrupt operations in the I/O processor of a remote machine.
If a Tube is running on the remote machine, then that will continue running
until it tries to communicate with the I/O processor. See section 10.15 for
information on polling the transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &86              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+


Continue                                   OSWORD A=&10 (Control byte=&87)
==========================================================================

General description
-------------------
Restarts the I/O processor of a remote machine after a Halt command (OSWORD
A=&10 Control byte=&86). See section 10.15 for information on polling the
transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &87              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+


Identify Machine                           OSWORD A=&10 (Control byte=&88)
==========================================================================

General description
-------------------
This call interrogates a remote machine returning codes containing values to
distinguish between manufacturers, machine types and software versions. See
section 10.15 for information on polling the transmit for success.

On entry
--------
A=&10
YX point to the address of the control block shown below:

         0 +-----------------------------+
           |            &88              |
         1 +-----------------------------+
           |             0               |
         2 +-----------------------------+
           |       Remote station        |
           |  (station number, network)  |
         4 +-----------------------------+
           |  Pointer to start of local  |
           |           buffer            |
         8 +-----------------------------+
           |   Pointer to end of local   |
           |       buffer (start+4)      |
        12 +-----------------------------+

On exit
-------
A,X,Y undefined

         0 +-----------------------------+
           |          Modified           |
         1 +-----------------------------+
           |          Unchanged          |
        16 +-----------------------------+

The first four bytes of the buffer are relevant. The meaning of these bytes
are shown below:

Byte 0
This is defined by manufacturers and is intended to indicate the hardware
design of the machine. The following are currently defined:

Value        Type of machine

SJ Research
  FF        Z80 CP/M
  FE        SJ Research File Server
  FD        RM480Z
  FC        Nascom 2 (running CP/M)
  FB        IBM Interface board
  FA        SCSI Interface
  F9        SJ Research 80386 UNIX
  F8        SJ Research GP server

Acorn
  00        Reserved
  01        BBC Microcomputer (OS 1 or 2)
  02        Atom
  03        System 3 or System 4
  04        System 5
  05        Master 128 (OS 3)
  06        Electron
  07        Archimedes (OS 6)
  08        Reserved for future machine
  09        Communicator
  0A        Master 128 ET
  0B        Filestore
  0C        Master Compact (OS 5)
  0D        EcoLink card for PCs
  0F        UNIX workstation
  0F        RISC PC
  10        Iyonix
  11        A9

  40        ZX Spectrum
  41        Amstrad CPC

  50        Econet-Ethernet Gateway

Other values Reserved

Byte 1
This byte indicates the manufacturer. The following are currently defined:

    Value        Manufacturer
      00         Acorn
      01         Torch
      02         Reuters
      40         J.G.Harston
      50         Phillip Blundell
      FF         SJ Research

Bytes 2 & 3
These contain the low and high bytes of the software release version in
packed Binary Coded Decimal, byte 2 contains the version number and byte 3
the release. The easiest way to display packed BCD is to print it as if it
were hexadecimal.

Releases &00, &01 and &02 were development versions. Release &03 is 8-bit NFS
with no local buffering (eg, BBC, Electron), release &04 is 8-bit NFS with
local buffering (eg ANFS), release &05 is 32-bit NFS (eg RISC OS).

Examples:
byte 0,1: &0001 Acorn BBC
byte 2,3: &0360 Version 3.60

See also

Networking calls