This isn't really said flat out anywhere, so here it is: --Archive-- The user archive differs between the 83+, 83+SE, 84+, and 84+SE. The "archive" for programs, appvars, groups, lists, REALs, matrices, and every other data type grow upwards from page 08h. Each sector (group of 4 pages) has a byte at the very beginning (4000h, pages 08h, 0Ch, etc.) which holds the status of that sector. The following values mean it is valid: 0FCh 0FFh 0F0h The swap sector is also stored in this area. NEVER WRITE TO IT. It is identified with the byte 0FEh. After the status byte for that sector, the archived data begins. The 83+ SDK has some information on this, but it's repeated here: Each variable entry begins with three bytes: Flag | sizeLow | sizeHigh The flag byte will be 0FCh (valid) or 0F0h (deleted, ignore it). The size word can be used to skip to the next variable. After this will be the variable's VAT entry: T | T2 | Version | addressLow | addressHigh | Page | Name Length | (Name) Make sure the address and page of this entry point to the variable's data, which is right after the VAT entry (including the size bytes, if there are any for that type). Data can span multiple pages, but don't forget about the status byte for each sector. --Applications-- Applications are stored at the top of the archive and grow downward. On the 83+, the top page is 15h; on the 84+, it is 29h, and on the 83+SE/84+SE it is at 69h. The following status bytes are used on each base page: 0FFh = empty. 080h = valid Flash application (this is part of the app header). 000h = deleted Flash application (this is part of the app header). If there is one multipage application on the 84+SE, for example, then the first byte of page 69h is 080h, and page 68h will contain the second page of the application. THE FIRST BYTE OF THIS PAGE HAS NO MEANING. To traverse this, you must access the Flash application's number of pages on the base page (offset 401Ch) and use this to go backwards a certain number of pages. The first page to contain 0FFh as its first byte is the first empty one. Applications are never fragmented, so when you see 0FFh, there are no more applications. --Adding to Archive-- Start at page 08h and access the status byte. If it is 0FEh, skip to the next sector (4 pages). If you find any other status byte, abort. Once you've found a valid sector, start reading each entry by checking the status byte (0FCh for exists, 0F0h for deleted). Then read the size and add it to your current location to find the next VAT entry (it can and will span to the next page and sector (don't forget the status byte)). Whenever you find 0FFh, stop and add an appropriate VAT entry and data. --Adding an Application-- Start at the last page (say, 69h). Read the first byte to see if it is 0FFh. If so, stop, you've found a page. If not, access the number of pages for this application (use the field search routines or _FindAppNumPages) and go backwards that many pages. Lather, rinse, repeat. Of course, this could all be COMPLETELY wrong, but it seems to work.