4 The AE protocol works by exchanging messages between the Amiga and the Client (e.g. an IBM PC).
6 Each message consists of a header and optionally payload data. Both parts carry CRC32 checksums
7 to ensure data integrity.
13 | -------------- | ---------------------------- |
14 | 2 | Msg (see below) |
15 | 2 | Payload length |
23 | -------------- | ---------------------------- |
27 Each message is acknowledged by the receiving side by a 4-Byte "PkOk" response if the checksum matches, "PkRs" otherwise.
29 Recovery from checksum errors: on "PkRs" non-ack, the sending side re-sends the whole message until "PkOk" is received.
30 FIXME: is this correct?
35 | Msg | ID | Sending side | Description |
36 | ---- | ----------------- | ------------ | --------------------------------------------------------- |
37 | 0x00 | MSG_NEXT_PART | Amiga/Client | Ask for next block |
38 | 0x01 | | Amiga/Client | Transfer cancelled |
39 | 0x02 | MSG_INIT | Amiga/Client | Initialisation / Init response |
40 | 0x03 | MSG_MPARTH | Amiga/? | Multipart header |
41 | 0x04 | MSG_EOF | Amiga | EOF (no payload) |
42 | 0x05 | MSG_BLOCK | Amiga | Next data block |
44 | 0x08 | MSG_EXISTS | Amiga | File already exists (when trying to write with 0x66) |
45 | 0x09 | | Amiga | Size ? (response to 0x6c) |
46 | 0x0a | MSG_ACK_CLOSE | Amiga | Close response |
47 | 0x0b | | Amiga | Format response? |
49 | 0x64 | MSG_DIR | Client | List directory |
50 | 0x65 | MSG_FILE_SEND | Client | File read |
51 | 0x66 | MSG_FILE_RECV | Client | File/folder write |
52 | 0x67 | | Client | File/folder delete (recursively) |
53 | 0x68 | | Client | File rename (name changes) (works on drives, too?) |
54 | 0x69 | | Client | File move (path changes) |
55 | 0x6a | | Client | File copy |
56 | 0x6b | | Client | Set attributes and comment |
57 | 0x6c | | Client | Request size on disk (?) |
58 | 0x6d | MSG_FILE_CLOSE | Client | Close file |
59 | 0x6e | | Client | Format disk (needs Kickstart 2.0 or newer) |
60 | 0x6f | | Client | New folder |
65 0x00 MSG_NEXT_PART - Ask for next block
66 ---------------------------------------
70 Expected repsonse: MSG_BLOCK or MSG_EOF
73 0x03 MSG_MPARTH - Multipart header
74 ----------------------------------
79 | -------------- | ---------------------------- |
82 Expected response: 0x00 MSG_NEXT_PART
89 Expected response: 0x6d MSG_FILE_CLOSE
91 0x05 MSG_BLOCK - Next data block
92 --------------------------------
97 | -------------- | ---------------------------- |
101 Expected response: 0x00 MSG_NEXT_PART
103 0x64 MSG_DIR - List a directory (Client -> Amiga)
104 -------------------------------------------------
109 | -------------- | ---------------------------- |
114 Expected response: 0x03 MSG_MPARTH if path exists, MSG_EOF otherwise
116 Multipart data will be polled in chunks using MSG_NEXT_PART. This data is structured as follows:
119 | -------------- | ---------------------------- |
120 | 4 | number of entries |
123 Each dir entry is structured as follows:
126 | -------------- | ---------------------------- |
130 | 2 | type (0: file, 0x8000: dir) |
142 | 1 | type2 FIXME: ??? |
147 0x65 MSG_FILE_SEND - Read a file
148 --------------------------------
152 Expected response: 0x08 MSG_EXISTS if file cannot be opened, 0x03 MSG_MPARTH otherwise
155 0x66 MSG_FILE_RECV - Write a file (Client -> Amiga)
156 ---------------------------------------------------
161 | -------------- | ---------------------------- |
173 | 4 | date (hours since 1/1/78) |
174 | 4 | time (mins since midnight) |
176 | 1 | file type FIXME: encoding? |
177 | header_size-29 | file name |
179 Expected response: 0x00 MSG_NEXT_PART if file does not exist (yet), 0x08 MSG_EXISTS otherwise
182 67 - Delete file/folder
183 ------------------------
188 -------|--------------------
192 Then, read type 0 for confirmation.
193 Then, sendClose() (0xa response: 5x 00).
195 If Path is a folder, it will be deleted together with its contents.
198 68 - Rename file/folder
199 ------------------------
204 -------|--------------------
205 n | Path (including old file name)
207 n | New file name (without path)
210 Then, read type 0 for confirmation.
211 Then, sendClose() (0xa response: 5x 00).
214 69 - Move file/folder
215 ----------------------
220 -------|--------------------
221 n | Path (including old file name)
223 n | New path to contain file (folder without trailing slash or file name)
227 Then, read type 0 for confirmation.
228 Then, sendClose() (0xa response: 5x 00).
230 If Path is a folder, it will be moved together with its contents.
231 This command appears to work across devices.
234 6a - Copy file/folder
235 ----------------------
240 -------|--------------------
241 n | Path (including old file name)
243 n | New path to contain file (folder without trailing slash or file name)
247 Then, read type 0 for confirmation.
248 Then, sendClose() (0xa response: 5x 00).
250 If Path is a folder, it will be moved together with its contents.
251 This command appears to work across devices.
254 6b - Set attributes and comment
255 --------------------------------
260 -------|--------------------
266 4 | Checksum? (seems to be 0x00000000 if comment empty)
268 Then, read type 0 for confirmation.
269 Then, sendClose() (0xa response: 5x 00).
272 6c - Request size on disk (?)
273 ------------------------------------
278 -------|--------------------
282 Then, read type 0 for confirmation.
283 Then, read type 9 for 12 bytes of payload (### TODO ###).
284 Then, send type 0 to request more data (no payload).
285 Then, read type 9 for 12 bytes of payload (### TODO ###).
286 Then, send type 0 to request more data (no payload).
287 Then, read type 0 signaling end of attributes (no payload).
288 Then, sendClose() (0xa response: 5x 00).
292 Then, read type 0 for confirmation.
293 Then, read type 0 signaling end of attributes (no payload).
294 Then, sendClose() (0xa response: 5x 00).
303 Then, read type 0x0a for confirmation (typical payload: 5 bytes of 0x00).
305 This is used to finish an operation, such as a directory listing
321 -------|--------------------
325 Then, read type 0 for confirmation.
326 Then, sendClose() (0xa response: 5x 00).
328 The host will create a new folder in the given path, together with a
330 The folder name cannot be chosen, and will be something like "Unnamed1".
332 To create a folder with a specific name, use 0x66.
333 Note that 0x66'ing a folder does not seem to set its time.