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.
29 FIXME: Reply if checksum doesn''t match? Re-sync/recovery?
34 | Msg | ID | Sending side | Description |
35 | ---- | ----------------- | ------------ | --------------------------------------------------------- |
36 | 0x00 | MSG_NEXT_PART | Amiga/Client | Ask for next block |
37 | 0x01 | | Amiga/Client | Transfer cancelled |
38 | 0x02 | MSG_INIT | Amiga/Client | Initialisation / Init response |
39 | 0x03 | MSG_MPARTH | Amiga/? | Multipart header |
40 | 0x04 | MSG_EOF | Amiga | EOF (no payload) |
41 | 0x05 | MSG_BLOCK | Amiga | Next data block |
43 | 0x08 | MSG_EXISTS | Amiga | File already exists (when trying to write with 0x66) |
44 | 0x09 | | Amiga | Size ? (response to 0x6c) |
45 | 0x0a | MSG_ACK_CLOSE | Amiga | Close response |
46 | 0x0b | | Amiga | Format response? |
48 | 0x64 | | Client | List directory |
49 | 0x65 | MSG_FILE_SEND | Client | File read |
50 | 0x66 | MSG_FILE_RECV | Client | File/folder write |
51 | 0x67 | | Client | File/folder delete (recursively) |
52 | 0x68 | | Client | File rename (name changes) (works on drives, too?) |
53 | 0x69 | | Client | File move (path changes) |
54 | 0x6a | | Client | File copy |
55 | 0x6b | | Client | Set attributes and comment |
56 | 0x6c | | Client | Request size on disk (?) |
57 | 0x6d | MSG_FILE_CLOSE | Client | Close file |
58 | 0x6e | | Client | Format disk (needs Kickstart 2.0 or newer) |
59 | 0x6f | | Client | New folder |
65 ----------------------
76 0x66 MSG_FILE_RECV - Write a file (Client -> Amiga)
77 ---------------------------------------------------
82 | -------------- | ---------------------------- |
86 | 4 | Attributes FIXME: encoding ? |
87 | 4 | date (hours since 1/1/78) |
88 | 4 | time (mins since midnight) |
90 | 1 | file type FIXME: encoding? |
91 | header_size-29 | file name |
93 Expected response: 0x00 MSG_NEXT_PART if file does not exist (yet), 0x08 MSG_EXISTS otherwise
96 67 - Delete file/folder
97 ------------------------
102 -------|--------------------
106 Then, read type 0 for confirmation.
107 Then, sendClose() (0xa response: 5x 00).
109 If Path is a folder, it will be deleted together with its contents.
112 68 - Rename file/folder
113 ------------------------
118 -------|--------------------
119 n | Path (including old file name)
121 n | New file name (without path)
124 Then, read type 0 for confirmation.
125 Then, sendClose() (0xa response: 5x 00).
128 69 - Move file/folder
129 ----------------------
134 -------|--------------------
135 n | Path (including old file name)
137 n | New path to contain file (folder without trailing slash or file name)
141 Then, read type 0 for confirmation.
142 Then, sendClose() (0xa response: 5x 00).
144 If Path is a folder, it will be moved together with its contents.
145 This command appears to work across devices.
148 6a - Copy file/folder
149 ----------------------
154 -------|--------------------
155 n | Path (including old file name)
157 n | New path to contain file (folder without trailing slash or file name)
161 Then, read type 0 for confirmation.
162 Then, sendClose() (0xa response: 5x 00).
164 If Path is a folder, it will be moved together with its contents.
165 This command appears to work across devices.
168 6b - Set attributes and comment
169 --------------------------------
174 -------|--------------------
180 4 | Checksum? (seems to be 0x00000000 if comment empty)
182 Then, read type 0 for confirmation.
183 Then, sendClose() (0xa response: 5x 00).
186 6c - Request size on disk (?)
187 ------------------------------------
192 -------|--------------------
196 Then, read type 0 for confirmation.
197 Then, read type 9 for 12 bytes of payload (### TODO ###).
198 Then, send type 0 to request more data (no payload).
199 Then, read type 9 for 12 bytes of payload (### TODO ###).
200 Then, send type 0 to request more data (no payload).
201 Then, read type 0 signaling end of attributes (no payload).
202 Then, sendClose() (0xa response: 5x 00).
206 Then, read type 0 for confirmation.
207 Then, read type 0 signaling end of attributes (no payload).
208 Then, sendClose() (0xa response: 5x 00).
217 Then, read type 0x0a for confirmation (typical payload: 5 bytes of 0x00).
219 This is used to finish an operation, such as a directory listing
235 -------|--------------------
239 Then, read type 0 for confirmation.
240 Then, sendClose() (0xa response: 5x 00).
242 The host will create a new folder in the given path, together with a
244 The folder name cannot be chosen, and will be something like "Unnamed1".
246 To create a folder with a specific name, use 0x66.
247 Note that 0x66'ing a folder does not seem to set its time.