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 0x05 MSG_BLOCK - Next data block
90 --------------------------------
95 | -------------- | ---------------------------- |
99 Expected response: 0x00 MSG_NEXT_PART
101 0x64 MSG_DIR - List a directory (Client -> Amiga)
102 -------------------------------------------------
107 | -------------- | ---------------------------- |
112 Expected response: 0x03 MSG_MPARTH if path exists, MSG_EOF otherwise
114 Multipart data will be polled in chunks using MSG_NEXT_PART. This data is structured as follows:
117 | -------------- | ---------------------------- |
118 | 4 | number of entries |
121 Each dir entry is structured as follows:
124 | -------------- | ---------------------------- |
128 | 2 | type (0: file, 0x8000: dir) |
140 | 1 | type2 FIXME: ??? |
145 0x65 MSG_FILE_SEND - Read a file
146 --------------------------------
150 Expected response: 0x08 MSG_EXISTS if file cannot be opened, 0x03 MSG_MPARTH otherwise
153 0x66 MSG_FILE_RECV - Write a file (Client -> Amiga)
154 ---------------------------------------------------
159 | -------------- | ---------------------------- |
163 | 4 | Attributes FIXME: encoding ? |
164 | 4 | date (hours since 1/1/78) |
165 | 4 | time (mins since midnight) |
167 | 1 | file type FIXME: encoding? |
168 | header_size-29 | file name |
170 Expected response: 0x00 MSG_NEXT_PART if file does not exist (yet), 0x08 MSG_EXISTS otherwise
173 67 - Delete file/folder
174 ------------------------
179 -------|--------------------
183 Then, read type 0 for confirmation.
184 Then, sendClose() (0xa response: 5x 00).
186 If Path is a folder, it will be deleted together with its contents.
189 68 - Rename file/folder
190 ------------------------
195 -------|--------------------
196 n | Path (including old file name)
198 n | New file name (without path)
201 Then, read type 0 for confirmation.
202 Then, sendClose() (0xa response: 5x 00).
205 69 - Move file/folder
206 ----------------------
211 -------|--------------------
212 n | Path (including old file name)
214 n | New path to contain file (folder without trailing slash or file name)
218 Then, read type 0 for confirmation.
219 Then, sendClose() (0xa response: 5x 00).
221 If Path is a folder, it will be moved together with its contents.
222 This command appears to work across devices.
225 6a - Copy file/folder
226 ----------------------
231 -------|--------------------
232 n | Path (including old file name)
234 n | New path to contain file (folder without trailing slash or file name)
238 Then, read type 0 for confirmation.
239 Then, sendClose() (0xa response: 5x 00).
241 If Path is a folder, it will be moved together with its contents.
242 This command appears to work across devices.
245 6b - Set attributes and comment
246 --------------------------------
251 -------|--------------------
257 4 | Checksum? (seems to be 0x00000000 if comment empty)
259 Then, read type 0 for confirmation.
260 Then, sendClose() (0xa response: 5x 00).
263 6c - Request size on disk (?)
264 ------------------------------------
269 -------|--------------------
273 Then, read type 0 for confirmation.
274 Then, read type 9 for 12 bytes of payload (### TODO ###).
275 Then, send type 0 to request more data (no payload).
276 Then, read type 9 for 12 bytes of payload (### TODO ###).
277 Then, send type 0 to request more data (no payload).
278 Then, read type 0 signaling end of attributes (no payload).
279 Then, sendClose() (0xa response: 5x 00).
283 Then, read type 0 for confirmation.
284 Then, read type 0 signaling end of attributes (no payload).
285 Then, sendClose() (0xa response: 5x 00).
294 Then, read type 0x0a for confirmation (typical payload: 5 bytes of 0x00).
296 This is used to finish an operation, such as a directory listing
312 -------|--------------------
316 Then, read type 0 for confirmation.
317 Then, sendClose() (0xa response: 5x 00).
319 The host will create a new folder in the given path, together with a
321 The folder name cannot be chosen, and will be something like "Unnamed1".
323 To create a folder with a specific name, use 0x66.
324 Note that 0x66'ing a folder does not seem to set its time.