mirror of
https://github.com/aaru-dps/docs.git
synced 2025-12-16 19:24:38 +00:00
138 lines
7.9 KiB
Plaintext
138 lines
7.9 KiB
Plaintext
|
|
|
|||
|
|
*** CVT (ConVerT containers)
|
|||
|
|
*** Document revision: 1.3
|
|||
|
|
*** Last updated: Oct 1, 2007
|
|||
|
|
*** Compiler/Editor: Peter Schepers
|
|||
|
|
*** Contributors/sources: Joe Forster/STA
|
|||
|
|
|
|||
|
|
These are sequential representations of GEOS files, both sequential and
|
|||
|
|
VLIR. In order to be transmitted and up/downloaded, they must be converted
|
|||
|
|
to this intermediate format because the file's INFO block (and record block
|
|||
|
|
for a VLIR) must be included. Note that the track/sector references at the
|
|||
|
|
beginning of each sector are not included here, making the block size 254
|
|||
|
|
bytes. Also, any values in track/sector references are invalid, since the
|
|||
|
|
value is sure to change once the file is converted back from CVT to a GEOS
|
|||
|
|
format.
|
|||
|
|
|
|||
|
|
I will not include much of the GEOS file layout details here, as you can
|
|||
|
|
read the GEOS.TXT document to get the information.
|
|||
|
|
|
|||
|
|
With CVT's that contain VLIR files, there are four distinct sections:
|
|||
|
|
signature, info, record and data. CVT's that contain non-VLIR files (i.e.
|
|||
|
|
standard GEOS sequential) do not include the record block.
|
|||
|
|
|
|||
|
|
The first part, which exists in both CVT types, is the signature block.
|
|||
|
|
It contains the complete directory entry and CVT file signature.
|
|||
|
|
|
|||
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII
|
|||
|
|
----------------------------------------------- ----------------
|
|||
|
|
0000: 83 00 00 44 45 53 4B 20 54 4F 50 A0 A0 A0 A0 A0 <20><><EFBFBD>DESK<53>TOP<4F><50><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0010: A0 A0 A0 00 00 01 04 58 08 13 0D 23 78 00 50 52 <20><><EFBFBD><EFBFBD><EFBFBD>..X...#x<>PR
|
|||
|
|
0020: 47 20 66 6F 72 6D 61 74 74 65 64 20 47 45 4F 53 G<>formatted<65>GEOS
|
|||
|
|
0030: 20 66 69 6C 65 20 56 31 2E 30 00 00 00 00 00 00 <20>file<6C>V1.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
00F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .. .. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
|
|||
|
|
|
|||
|
|
Byte:$00-1D: Complete directory entry. Note that the first two bytes of
|
|||
|
|
*any* directory entry are never used, and thus are not
|
|||
|
|
incuded here either.
|
|||
|
|
1E-39: File signature. It can contain "PRG formatted..." or "SEQ
|
|||
|
|
formatted...". Here we can check that the CVT is really
|
|||
|
|
what it claims.
|
|||
|
|
3A-FD: Usually $00
|
|||
|
|
|
|||
|
|
What follows the signature block is the complete GEOS file INFO block.
|
|||
|
|
|
|||
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII
|
|||
|
|
----------------------------------------------- ----------------
|
|||
|
|
00F0: .. .. .. .. .. .. .. .. .. .. .. .. .. .. 03 15 ................
|
|||
|
|
0100: BF FF FF FF 92 49 01 FF FF 01 80 00 1D BF FF DD <20><><EFBFBD><EFBFBD><EFBFBD>I.<2E><>.<2E><>.<2E><><EFBFBD>
|
|||
|
|
0110: A0 00 5D BF FF C1 A0 00 5D A1 C6 55 A0 29 5D A0 <20><>]<5D><><EFBFBD><EFBFBD><EFBFBD>]<5D><>U<EFBFBD>)]<5D>
|
|||
|
|
0120: C9 41 A1 09 41 B9 D6 41 A8 00 41 BF FF C1 80 00 <20>A<EFBFBD>.A<><41>A<EFBFBD><41>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0130: 1D 9C 00 15 9C 00 15 80 00 1D 80 00 01 FF FF FF .<2E><>.<2E><>.<2E><>.<2E><>.<2E><><EFBFBD>
|
|||
|
|
0140: 83 04 01 56 19 55 19 75 51 64 65 73 6B 54 6F 70 <20>..V.U.uQdeskTop
|
|||
|
|
0150: 20 41 4D 20 20 56 32 2E 30 00 00 00 00 42 72 69 <20>AM<41><4D>V2.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Bri
|
|||
|
|
0160: 61 6E 20 44 6F 75 67 68 65 72 74 79 00 00 00 00 an<61>Dougherty<74><79><EFBFBD><EFBFBD>
|
|||
|
|
0170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0180: 00 00 00 00 00 4C 2A 5B 4C 59 5D 4C A7 61 4C 3A <20><><EFBFBD><EFBFBD><EFBFBD>L*[LY]L<>aL:
|
|||
|
|
0190: 62 AD 8A 84 D0 01 60 20 7E 23 20 9C 55 73 65 20 b<><62><EFBFBD><EFBFBD>.`<60>~#<23><>Use<73>
|
|||
|
|
01A0: 74 68 65 20 64 65 73 6B 54 6F 70 20 74 6F 20 6D the<68>deskTop<6F>to<74>m
|
|||
|
|
01B0: 61 6E 61 67 65 20 61 6E 64 20 6D 61 6E 69 70 75 anage<67>and<6E>manipu
|
|||
|
|
01C0: 6C 61 74 65 20 79 6F 75 72 20 66 69 6C 65 73 2E late<74>your<75>files.
|
|||
|
|
01D0: 00 03 20 E3 5C 68 85 FB 20 4F 61 20 13 61 20 32 <20>.<2E><>\h<><68><EFBFBD>Oa<4F>.a<>2
|
|||
|
|
01E0: 61 20 F2 5C A9 0C 20 CC 49 A9 2E 85 13 A9 F9 85 a<><61>\<5C>.<2E><>I<EFBFBD>.<2E>.<2E><><EFBFBD>
|
|||
|
|
01F0: 12 A9 2F 85 15 A9 01 85 14 A9 84 85 .. .. .. .. .<2E>/<2F>.<2E>.<2E>.<2E><><EFBFBD>....
|
|||
|
|
|
|||
|
|
The third block is the RECORD block. In the sequential version of the
|
|||
|
|
CVT, this block won't exist. The way to tell if the file is VLIR or
|
|||
|
|
sequential is to look at byte position 23 of the directory entry (from
|
|||
|
|
above, it's value is $01). If it's a $00, the file is sequential, if it's
|
|||
|
|
$01 it's VLIR.
|
|||
|
|
|
|||
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII
|
|||
|
|
----------------------------------------------- ----------------
|
|||
|
|
01F0: .. .. .. .. .. .. .. .. .. .. .. .. 43 41 0A 0B ............CA..
|
|||
|
|
0200: 0B F4 0A 8C 0B A1 09 70 00 00 00 00 00 00 00 00 .<2E><><EFBFBD>.<2E><>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0230: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0250: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0260: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
0290: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
02A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
02B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
02C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
02D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
02E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
02F0: 00 00 00 00 00 00 00 00 00 00 .. .. .. .. .. .. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>......
|
|||
|
|
|
|||
|
|
Note that the RECORD block is modified from the original GEOS entry.
|
|||
|
|
Instead of containing the track and sector references, we now have the
|
|||
|
|
sector count and the size of the last sector in the chain. Looking over the
|
|||
|
|
block above, we get the following usage chart:
|
|||
|
|
|
|||
|
|
Count Size Comment
|
|||
|
|
----- ---- --------------------------------------
|
|||
|
|
43 41 Sector count=67, last sector index=$41
|
|||
|
|
0A 0B Sector count=10, last sector index=$0B
|
|||
|
|
0B F4 Sector count=11, last sector index=$F4
|
|||
|
|
0A 8C Sector count=10, last sector index=$8C
|
|||
|
|
0B A1 Sector count=11, last sector index=$A1
|
|||
|
|
09 70 Sector count=9, last sector index=$70
|
|||
|
|
00 00 No more records.
|
|||
|
|
|
|||
|
|
Two things of interest can be noted from the record block...
|
|||
|
|
|
|||
|
|
1. When a 00/00 is encountered, the record block is done.
|
|||
|
|
2. When a 00/FF is encountered, the record does not exist (see the
|
|||
|
|
GEOS.TXT format for more info on invalid records), but the entry must
|
|||
|
|
still be made in the re-created RECORD block.
|
|||
|
|
|
|||
|
|
From here on we have the actual data, all of the record chains strung
|
|||
|
|
together to form one long file. All of this data must be broken apart to
|
|||
|
|
form the original records that GEOS expects.
|
|||
|
|
|
|||
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII
|
|||
|
|
----------------------------------------------- ----------------
|
|||
|
|
02F0: .. .. .. .. .. .. .. .. .. .. A9 00 8D EE 04 A4 ..........<2E><><EFBFBD><EFBFBD>.<2E>
|
|||
|
|
0300: FE B9 86 84 30 06 29 0F C9 02 D0 12 A4 70 B9 86 <20><><EFBFBD><EFBFBD>0.).<2E>.<2E>.<2E>p<EFBFBD><70>
|
|||
|
|
0310: 84 30 06 29 0F C9 02 D0 05 A9 07 8D A0 1D 20 1E <20>0.).<2E>.<2E>.<2E>.<2E><>.<2E>.
|
|||
|
|
0320: 23 20 04 1A 8A D0 20 20 12 1A 18 A9 00 6D F4 03 #<23>..<2E><><EFBFBD><EFBFBD>...<2E><>m<EFBFBD>.
|
|||
|
|
0330: 8D F4 03 A9 03 6D F5 03 8D F5 03 20 C5 22 20 7C <20><>.<2E>.m<>.<2E><>.<2E><>"<22>|
|
|||
|
|
0340: 1B 20 04 1A 20 6B 1A A9 08 8D A0 1D B8 50 53 8D .<2E>..<2E>k.<2E>.<2E><>.<2E>PS<50>
|
|||
|
|
0350: EE 04 20 12 1A A2 00 A4 70 20 3F 24 C9 04 B0 3F <20>.<2E>..<2E><><EFBFBD>p<EFBFBD>?$<24>.<2E>?
|
|||
|
|
|