protocol.txt
------------
Copyright (c) 1995,1996,2000 Daniel Kahlin <daniel@kahlin.net>
$Id: protocol.txt,v 1.1 2000/01/27 17:56:00 tlr Exp $

A bit incomplete, but should work for now.   
Amiga means any host.  c64 means the cbm machine.  Should be changed to
"inferior".


---------------------------------------------------------------------------
fastrs protocol specification

************************************************************
** SIMPLEREAD/WRITE      (used in FASTRS)
** serialprotocol (no handshake)
** 38400 8N2
** Daniel Kahlin (950531)
**
*****
0x00      - Head 0xE7
0x01      - startaddress (low,high)
0x03      - lastaddress+1 (low,high)
0x05      - Checksum (xor of all the bytes (including head) should be 0)
0x06      - Body (Size)
0x06+Size - Checksum (xor of body and checksum should be 0)



---------------------------------------------------------------------------
Over5 low level protocol specification
general overview by Daniel Kahlin <tlr@stacken.kth.se>


The low level end of the protocol is able to send and receive data blocks
1 to 256 bytes in size.  The protocol ensures that the data is correctly
transferred.




T  ||   name: BASIC BLOCK TRANSFER
I  ||   type: low level specification
M  ||   structures: <TRBLK>, <ACKBLK>
E  \/

       Sender                                            Receiver
       ------                                            --------

  1a  SEND <TRBLK>_   
                   \__________________________________
                                                      \_
  1b                                                    RECEIVE <TRBLK>


  2a                                                   _RESPOND <ACKBLK>
                      ________________________________/
                    _/
  2b  CHECK <ACKBLK>



 
T  ||   name: BLOCK TRANSFER WITH RESEND
I  ||   type: low level specification
M  ||   structures: <TRBLK>, <ACKBLK>
E  \/

       Sender                                            Receiver
       ------                                            --------

  1a  SEND <TRBLK>_   
                   \__________X___X___________________
                                                      \_
  1b                                                    RECEIVE <TRBLK>


  2a                                                   _RESPOND <ACKBLK>
                      ________________________________/
                    _/
  2b  CHECK <ACKBLK>


  3a  SEND <TRBLK>_   
                   \__________________________________
                                                      \_
  3b                                                    RECEIVE <TRBLK>


  4a                                                   _RESPOND <ACKBLK>
                      ________________________________/
                    _/
  4b  CHECK <ACKBLK>

 



#define HEAD 0x7e
#define CHANNEL_DATA    1
#define CHANNEL_COMMAND 15
#define ST_OK  0x10
#define ST_RESEND   0x20


<TRBLK>
0x00  UBYTE trblk_head;        (=HEAD)
0x01  UBYTE trblk_channel;      xy  y=channel  x=status  (status must be 0
                               when doing blocksend)
0x02  UBYTE trblk_blocknum;    blocknumber (0-15)
0x03  UBYTE trblk_size;        size of the data block  (0x00 => 256 bytes)
0x04  UBYTE trblk_headsum;     xor of all the bytes up to trblk_headsum and
                               including trblk_head must be 0
0x05  UBYTE trblk_body[trblk_size];    the data
0x05+trblk_size
      UBYTE trblk_bodysum;     xor of the body and trblk_bodysum must be 0


<ACKBLK>
0x00  UBYTE ackblk_head;       (=HEAD)
0x01  UBYTE ackblk_channel;     xy  y=channel  x=status 
                               (ST_OK or ST_RESEND)
0x02  UBYTE ackblk_blocknum;   blocknumber (0-15)
0x03  UBYTE ackblk_size;       size of the data block  (0x00 => 256 bytes)
0x04  UBYTE ackblk_headsum;    xor of all the bytes up to ackblk_headsum and
                               including ackblk_head must be 0



/END


---------------------------------------------------------------------------
Over5 high level protocol specification
general overview by Daniel Kahlin <tlr@stacken.kth.se>

Contents:

TYPE_MEMTRANSFER:
  WRITEMEM
  READMEM 
  SYS
  RUN

TYPE_DISKCOMMAND:
  DIRECTORY
  STATUS
  COMMAND

TYPE_FILETRANSFER:
  WRITEFILE
  READFILE

TYPE_RAWDISKTRANSFER:
  WRITETRACK
  READTRACK
  WRITESECTOR
  READSECTOR

TYPE_SERVER:
  SERVERLOAD
  SERVERSAVE
  SERVERCOMMAND
  SERVERREADSTRING


*** WRITEMEM *** WRITEMEM *** WRITEMEM *** WRITEMEM *** WRITEMEM *** WRITEM

T  ||   name: WRITEMEM (part of TYPE_MEMTRANSFER)
I  ||   type: high level specification
M  ||   structures: <WMHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <WMHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <WMHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a  SEND BODY_
                \_____________________________________
                                                      \_
  3b                                                    RECEIVE BODY


  4a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  4b  CHECK RESPONSE

 




*** READMEM *** READMEM *** READMEM *** READMEM *** READMEM *** READMEM ***

T  ||   name: READMEM (part of TYPE_MEMTRANSFER)
I  ||   type: high level specification
M  ||   structures: <RMHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <RMHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <RMHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a                                                   _SEND BODY
                    __________________________________/
                  _/
  3b  RECEIVE BODY


  4a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  4b                                                    CHECK RESPONSE

 



*** SYS *** SYS *** SYS *** SYS *** SYS *** SYS *** SYS *** SYS *** SYS ***

T  ||   name: SYS (part of TYPE_MEMTRANSFER)
I  ||   type: high level specification
M  ||   structures: <SYHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <SYHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <SYHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE





*** RUN *** RUN *** RUN *** RUN *** RUN *** RUN *** RUN *** RUN *** RUN ***

T  ||   name: RUN (part of TYPE_MEMTRANSFER)
I  ||   type: high level specification
M  ||   structures: <RUHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <RUHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <RUHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE





*** DIRECTORY *** DIRECTORY *** DIRECTORY *** DIRECTORY *** DIRECTORY *** D

T  ||   name: DIRECTORY (part of TYPE_DISKCOMMAND)
I  ||   type: high level specification
M  ||   structures: <DRHD>, <DRRS>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <DRHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <DRHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a                                                   _RESPOND <DRRS>
                      ________________________________/
                    _/
  3b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  4a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  4b                                                    CHECK RESPONSE


  5a                                                   _SEND BODY
                    __________________________________/
                  _/
  5b  RECEIVE BODY


  6a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  6b                                                    CHECK RESPONSE

 




*** STATUS *** STATUS *** STATUS *** STATUS *** STATUS *** STATUS *** STATU

T  ||   name: STATUS (part of TYPE_DISKCOMMAND)
I  ||   type: high level specification
M  ||   structures: <STHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <STHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <STHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a                                                   _SEND BLOCK
                     _________________________________/
                   _/
  3b  RECEIVE BLOCK


  4a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  4b                                                    CHECK RESPONSE




*** COMMAND *** COMMAND *** COMMAND *** COMMAND *** COMMAND *** COMMAND ***

T  ||   name: COMMAND (part of TYPE_DISKCOMMAND)
I  ||   type: high level specification
M  ||   structures: <CMHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <CMHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <CMHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a  SEND BLOCK_
                 \___________________________________
                                                     \_
  3b                                                   RECEIVE BLOCK


  4a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  4b  CHECK RESPONSE

 




*** WRITEFILE *** WRITEFILE *** WRITEFILE *** WRITEFILE *** WRITEFILE *** W

T  ||   name: WRITEFILE (part of TYPE_FILETRANSFER)
I  ||   type: high level specification
M  ||   structures: <WFHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <WFHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <WFHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a  SEND BODY_
                \_____________________________________
                                                      \_
  3b                                                    RECEIVE BODY


  4a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  4b  CHECK RESPONSE





*** READFILE *** READFILE *** READFILE *** READFILE *** READFILE *** READFI

T  ||   name: READFILE (part of TYPE_DISKCOMMAND)
I  ||   type: high level specification
M  ||   structures: <RFHD>, <RFRS>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <RFHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <RFHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a                                                   _RESPOND <RFRS>
                      ________________________________/
                    _/
  3b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  4a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  4b                                                    CHECK RESPONSE


  5a                                                   _SEND BODY
                    __________________________________/
                  _/
  5b  RECEIVE BODY


  6a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  6b                                                    CHECK RESPONSE






*** WRITETRACK *** WRITETRACK *** WRITETRACK *** WRITETRACK *** WRITETRACK 

T  ||   name: WRITETRACK (part of TYPE_RAWDISKTRANSFER)
I  ||   type: high level specification
M  ||   structures: <WTHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <WTHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <WTHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a  SEND BODY_
                \_____________________________________
                                                      \_
  3b                                                    RECEIVE BODY

  4a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  4b  CHECK RESPONSE






*** READTRACK *** READTRACK *** READTRACK *** READTRACK *** READTRACK *** R

T  ||   name: READTRACK (part of TYPE_RAWDISKTRANSFER)
I  ||   type: high level specification
M  ||   structures: <RTHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <RTHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <RTHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  3b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  4a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  4b                                                    CHECK RESPONSE


  5a                                                   _SEND BODY
                    __________________________________/
                  _/
  5b  RECEIVE BODY


  6a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  6b                                                    CHECK RESPONSE





*** WRITESECTOR *** WRITESECTOR *** WRITESECTOR *** WRITESECTOR *** WRITESE

T  ||   name: WRITESECTOR (part of TYPE_RAWDISKTRANSFER)
I  ||   type: high level specification
M  ||   structures: <WSHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <WSHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <WSHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a  SEND BODY_
                \_____________________________________
                                                      \_
  3b                                                    RECEIVE BODY


  4a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  4b  CHECK RESPONSE





*** READSECTOR *** READSECTOR *** READSECTOR *** READSECTOR *** READSECTOR 

T  ||   name: READSECTOR (part of TYPE_RAWDISKTRANSFER)
I  ||   type: high level specification
M  ||   structures: <RSHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a  SEND <RSHD>_   
                  \___________________________________
                                                      \_
  1b                                                    RECEIVE <RSHD>


  2a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  2b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  3a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  3b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  4a                                                   _SEND BODY
                    __________________________________/
                  _/
  4b  RECEIVE BODY


  5a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  5b                                                    CHECK RESPONSE





*** SERVERLOAD *** SERVERLOAD *** SERVERLOAD *** SERVERLOAD *** SERVERLOAD 

T  ||   name: SERVERLOAD (part of TYPE_SERVER)
I  ||   type: high level specification
M  ||   structures: <SRVLDHD>, <SRVLDRS>, <SRVLDRS2>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a                                                   _SEND <SRVLDHD>
                         _____________________________/
                       _/
  1b  RECEIVE <SRVLDHD>


  2a  RESPOND <SRVLDRS>_
                        \_____________________________
                                                      \_
  2b                                                    CHECK RESPONSE

--                                                   if (RESP!=OK) -> FAIL

  3a                                                   _RESPOND <SRVLDRS2>
                      ________________________________/
                    _/
  3b  CHECK RESPONSE

-- if (RESP!=OK) -> FAIL

  4a  SEND BODY_
                \_____________________________________
                                                      \_
  4b                                                    RECEIVE BODY


  5a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  5b  CHECK RESPONSE





*** SERVERSAVE *** SERVERSAVE *** SERVERSAVE *** SERVERSAVE *** SERVERSAVE 

T  ||   name: SERVERSAVE (part of TYPE_SERVER)
I  ||   type: high level specification
M  ||   structures: <SRVSVHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a                                                   _SEND <SRVSVHD>
                         _____________________________/
                       _/
  1b  RECEIVE <SRVSVHD>


  2a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  2b                                                    CHECK RESPONSE

--                                                   if (RESP!=OK) -> FAIL

  3a                                                   _SEND BODY
                    __________________________________/
                  _/
  3b  RECEIVE BODY


  4a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  4b                                                    CHECK RESPONSE




*** SERVERCOMMAND *** SERVERCOMMAND *** SERVERCOMMAND *** SERVERCOMMAND ***

T  ||   name: SERVERCOMMAND (part of TYPE_SERVER)
I  ||   type: high level specification
M  ||   structures: <SRVCMHD>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a                                                   _SEND <SRVCMHD>
                         _____________________________/
                       _/
  1b  RECEIVE <SRVCMHD>


  2a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  2b                                                    CHECK RESPONSE

--                                                   if (RESP!=OK) -> FAIL

  3a  RESPOND <RS>_
                   \__________________________________
                                                      \_
  3b                                                    CHECK RESPONSE





*** SERVERREADSTRING *** SERVERREADSTRING *** SERVERREADSTRING *** SERVERRE

T  ||   name: SERVERREADSTRING (part of TYPE_SERVER)
I  ||   type: high level specification
M  ||   structures: <SRVRSHD>, <SRVRSRS>, <RS>
E  \/

       Amiga                                             c64
       -----                                             ---

  1a                                                   _SEND <SRVRSHD>
                         _____________________________/
                       _/
  1b  RECEIVE <SRVRSHD>


  2a  RESPOND <SRVRSRS>_
                        \_____________________________
                                                      \_
  2b                                                    CHECK RESPONSE

--                                                   if (RESP!=OK) -> FAIL

  3a                                                   _RESPOND <RS>
                      ________________________________/
                    _/
  3b  CHECK RESPONSE


  4a  SEND BODY_
                \_____________________________________
                                                      \_
  4b                                                    RECEIVE BODY



/END

---------------------------------------------------------------------------
Over5 high level protocol specification
structures in detail by Daniel Kahlin <tlr@stacken.kth.se>

All information sent on CHANNEL_COMMAND should begin with the structures
<OHD> and <RS>.  This allows us to easily detect protocol errors.

<OHD>                    general request
0x00  UBYTE ohd_type;
0x01  UBYTE ohd_subtype;

<RS>                     general response
0x00  UBYTE rs_response;

The distinction between an <OHD> and an <RS> can be made using the first
byte.  If MSB is 1, it is an <RS> else it is an <OHD>.
The list below contains all types and responses.

  #define TYPE_MEMTRANSFER     0x01
  #define TYPE_FILETRANSFER    0x02
  #define TYPE_DISKCOMMAND     0x03
  #define TYPE_TESTCOMMAND     0x04
  #define TYPE_SERVER          0x05
  #define TYPE_RAWDISKTRANSFER 0x06
  #define RESP_OK              0x80
  #define RESP_NOTSUPPORTED    0x81
  #define RESP_ERROR           0x82
  #define RESP_STRING          0x83

The 'type' field can be used to easily determine if a certain chunk of
commands are supported.  When the 'type' field has been evaluated you
should jump to appropriate routine which in its turn evaluates the
'subtype' field. These subtypes apply:

  #define SUB_MT_WRITEMEM      0x01     ;TYPE_MEMTRANSFER
  #define SUB_MT_READMEM       0x02
  #define SUB_MT_SYS           0x03
  #define SUB_MT_RUN           0x04

  #define SUB_FT_WRITEFILE     0x01     ;TYPE_FILETRANSFER
  #define SUB_FT_READFILE      0x02

  #define SUB_DC_DIRECTORY     0x01     ;TYPE_DISKCOMMAND
  #define SUB_DC_STATUS        0x02
  #define SUB_DC_COMMAND       0x03

  #define SUB_TC_BLOCKTEST     0x01     ;TYPE_TESTCOMMAND
  #define SUB_TC_FILETEST      0x02

  #define SUB_SRV_LOAD         0x01     ;TYPE_SERVER
  #define SUB_SRV_SAVE         0x02
  #define SUB_SRV_COMMAND      0x03
  #define SUB_SRV_READSTRING   0x04

  #define SUB_RT_WRITETRACK    0x01     ;TYPE_RAWDISKTRANSFER
  #define SUB_RT_READTRACK     0x02
  #define SUB_RT_WRITESECTOR   0x03
  #define SUB_RT_READSECTOR    0x04


Here follows a detailed specification of all structures currently
used by the high level protocol.


<WMHD>
0x00  UBYTE wmhd_type;        (=TYPE_MEMTRANSFER)
0x01  UBYTE wmhd_subtype;     (=SUB_MT_WRITEMEM)
0x02  UBYTE wmhd_start_l; \ start address in c64 memory
0x03  UBYTE wmhd_start_h; /
0x04  UBYTE wmhd_end_l;  \ end address in c64 memory
0x05  UBYTE wmhd_end_h;  /


<RMHD>
0x00  UBYTE rmhd_type;        (=TYPE_MEMTRANSFER)
0x01  UBYTE rmhd_subtype;     (=SUB_MT_READMEM)
0x02  UBYTE rmhd_start_l; \ start address in c64 memory
0x03  UBYTE rmhd_start_h; /
0x04  UBYTE rmhd_end_l;  \ end address in c64 memory
0x05  UBYTE rmhd_end_h;  /


<SYHD>
0x00  UBYTE syhd_type;        (=TYPE_MEMTRANSFER)
0x01  UBYTE syhd_subtype;     (=SUB_MT_SYS)
0x02  UBYTE syhd_pc_l; \   6502 program counter
0x03  UBYTE syhd_pc_h; /
0x04  UBYTE syhd_memory;   $01 value for the c64
0x05  UBYTE syhd_sr;       6502 status register
0x06  UBYTE syhd_ac;       6502 accumulator
0x07  UBYTE syhd_xr;       6502 X register
0x08  UBYTE syhd_yr;       6502 Y register
0x09  UBYTE syhd_sp;       6502 stack pointer


<RUHD>
0x00  UBYTE ruhd_type;        (=TYPE_MEMTRANSFER)
0x01  UBYTE ruhd_subtype;     (=SUB_MT_RUN)
0x02  UBYTE ruhd_lowmem_l; \   start of basic program
0x03  UBYTE ruhd_lowmem_h; /
0x04  UBYTE ruhd_himem_l; \   end of basic program
0x05  UBYTE ruhd_himem_h; /


<DRHD>
0x00  UBYTE drhd_type;        (=TYPE_DISKCOMMAND)
0x01  UBYTE drhd_subtype;     (=SUB_DC_DIRECTORY)
0x02  UBYTE drhd_pad[2];
0x04  UBYTE drhd_device;        device number
0x05  UBYTE drhd_filename[24];  filename


<DRRS>
0x00  UBYTE drrs_response;    response code
0x01  UBYTE drrs_len_l; \      length of directory in bytes
0x02  UBYTE drrs_len_h; /


<STHD>
0x00  UBYTE sthd_type;        (=TYPE_DISKCOMMAND)
0x01  UBYTE sthd_subtype;     (=SUB_DC_STATUS)
0x02  UBYTE sthd_pad[2];
0x04  UBYTE sthd_device;        device number


<CMHD>
0x00  UBYTE cmhd_type;        (=TYPE_DISKCOMMAND)
0x01  UBYTE cmhd_subtype;     (=SUB_DC_COMMAND)
0x02  UBYTE cmhd_pad[2];
0x04  UBYTE cmhd_device;        device number


<WFHD>
0x00  UBYTE wfhd_type;         (=TYPE_FILETRANSFER)
0x01  UBYTE wfhd_subtype;      (=SUB_FT_WRITEFILE)
0x02  UBYTE wfhd_len_l;    \   length of file
0x03  UBYTE wfhd_len_h;    /
0x04  UBYTE wfhd_device;        device number
0x05  UBYTE wfhd_filename[24];  filename


<RFHD>
0x00  UBYTE rfhd_type;         (=TYPE_FILETRANSFER)
0x01  UBYTE rfhd_subtype;      (=SUB_FT_READFILE)
0x02  UBYTE rfhd_pad[2];
0x04  UBYTE rfhd_device;        device number
0x05  UBYTE rfhd_filename[24];  filename


<RFRS>
0x00  UBYTE rfrs_response;    response code
0x01  UBYTE rfrs_len_l; \      length of file in bytes
0x02  UBYTE rfrs_len_h; /


<WTHD>
0x00  UBYTE wthd_type;         (=TYPE_RAWDISKTRANSFER)
0x01  UBYTE wthd_subtype;      (=SUB_RT_WRITETRACK)
0x02  UBYTE wthd_track;        track to write
0x03  UBYTE wthd_numtracks;    number of tracks to be written
0x04  UBYTE wthd_device;        device number


<RTHD>
0x00  UBYTE wthd_type;         (=TYPE_RAWDISKTRANSFER)
0x01  UBYTE wthd_subtype;      (=SUB_RT_READTRACK)
0x02  UBYTE wthd_track;        track to read
0x03  UBYTE wthd_numtracks;    number of tracks to be read
0x04  UBYTE wthd_device;        device number


<RTRS>
0x00  UBYTE rtrs_response;    response code
0x01  UBYTE rtrs_sectors;      number of sectors


<WSHD>
0x00  UBYTE wshd_type;         (=TYPE_RAWDISKTRANSFER)
0x01  UBYTE wshd_subtype;      (=SUB_RT_WRITESECTOR)
0x02  UBYTE wshd_track;        track to write
0x03  UBYTE wshd_sector;       sector to write
0x04  UBYTE wshd_device;        device number


<RSHD>
0x00  UBYTE rshd_type;         (=TYPE_RAWDISKTRANSFER)
0x01  UBYTE rshd_subtype;      (=SUB_RT_READSECTOR)
0x02  UBYTE rshd_track;        track to read
0x03  UBYTE rshd_sector;       sector to read
0x04  UBYTE rshd_device;        device number


<BTHD>
0x00  UBYTE bthd_type;         (=TYPE_TESTCOMMAND)
0x01  UBYTE bthd_subtype;      (=SUB_TC_BLOCKTEST)


<FTHD>
0x00  UBYTE fthd_type;         (=TYPE_TESTCOMMAND)
0x01  UBYTE fthd_subtype;      (=SUB_TC_FILETEST)
0x02  UBYTE fthd_len_l;  \  length of test data in bytes
0x03  UBYTE fthd_len_h;  / 


<FTRS>
0x00  UBYTE ftrs_response;    response code
0x01  UBYTE ftrs_len_l; \      length of file in bytes
0x02  UBYTE ftrs_len_h; /


<SRVLDHD>
0x00  UBYTE srvldhd_type;         (=TYPE_SERVER)
0x01  UBYTE srvldhd_subtype;      (=SUB_SRV_LOAD)
0x02  UBYTE srvldhd_pad[4];
0x06  UBYTE srvldhd_filename[64];  filename to load 


<SRVLDRS>
0x00  UBYTE srvldrs_response;    response code
0x01  UBYTE srvldrs_start_l; \      start address of file
0x02  UBYTE srvldrs_start_h; / 
0x03  UBYTE srvldrs_end_h; \     end address of file
0x04  UBYTE srvldrs_end_h; /


<SRVLDRS2>
0x00  UBYTE srvldrs2_response;    response code
0x01  UBYTE srvldrs2_start_l; \      new start address
0x02  UBYTE srvldrs2_start_h; / 


<SRVSVHD>
0x00  UBYTE srvsvhd_type;         (=TYPE_SERVER)
0x01  UBYTE srvsvhd_subtype;      (=SUB_SRV_SAVE)
0x02  UBYTE srvsvhd_start_l; \      start address of file
0x03  UBYTE srvsvhd_start_h; / 
0x04  UBYTE srvsvhd_end_h; \     end address of file
0x05  UBYTE srvsvhd_end_h; /
0x06  UBYTE srvsvhd_filename[64];  filename to load 


<SRVCMHD>
0x00  UBYTE srvcmhd_type;         (=TYPE_SERVER)
0x01  UBYTE srvcmhd_subtype;      (=SUB_SRV_COMMAND)
0x02  UBYTE srvcmhd_pad[4];
0x06  UBYTE srvcmhd_command[64];  the command


<SRVRSHD>
0x00  UBYTE srvrshd_type;         (=TYPE_SERVER)
0x01  UBYTE srvrshd_subtype;      (=SUB_SRV_READSTRING)
0x02  UBYTE srvrshd_width;     width of destination screen
0x03  UBYTE srvrshd_height;    height of destination screen


<SRVRSRS>
0x00  UBYTE srvrsrs_response;    response code
0x01  UBYTE srvrsrs_rows;        number of actual rows


/END
 