mirror of
https://github.com/aaru-dps/docs.git
synced 2025-12-16 19:24:38 +00:00
112 lines
5.3 KiB
Plaintext
112 lines
5.3 KiB
Plaintext
|
|
|
|||
|
|
*** Binary/Raw files
|
|||
|
|
*** Document revision: 1.3
|
|||
|
|
*** Last updated: March 11, 2004
|
|||
|
|
*** Compiler/Editor: Peter Schepers
|
|||
|
|
*** Contributors/sources: none
|
|||
|
|
|
|||
|
|
This is really a non-format, as it has no specific layout whatsoever, but
|
|||
|
|
instead is simply a data file. This does make it difficult to describe any
|
|||
|
|
general layout, as there are many possibilities. It is assumed that a
|
|||
|
|
binary is a single file, usually having no special extension (like
|
|||
|
|
LNX/SFX/SDA, etc), sitting on a PC hard disk, not inside of *any* other
|
|||
|
|
file (like in a D64/T64/LNX etc). By looking at the whole file (but
|
|||
|
|
especially the beginning) with a HEX editor, and a well-trained eye, you
|
|||
|
|
can usually determine what file type it is by the BASIC code, load address,
|
|||
|
|
and text strings contained within.
|
|||
|
|
|
|||
|
|
Two possible file extensions that binary files can use are "BIN" and
|
|||
|
|
"PRG". There is a distinction in the 64 community between these two file
|
|||
|
|
types. A "BIN" (binary) file is one without a load address preceeding the
|
|||
|
|
file data, and a "PRG" (program) file has a load address in the first two
|
|||
|
|
bytes of the file.
|
|||
|
|
|
|||
|
|
If the file is a normal C64 program, then the first two bytes are the
|
|||
|
|
load address, stored in low/high byte format. If it is a BASIC program (or
|
|||
|
|
has a BASIC header), then the first two bytes might be $01 $08 (or $01 $04
|
|||
|
|
for PET, $01 $1C for C128, the numbers vary for different systems like
|
|||
|
|
VIC-20, Plus4, C61, etc), and the rest is line number pointers, line
|
|||
|
|
numbers and BASIC code.
|
|||
|
|
|
|||
|
|
If it is not a BASIC file (like part of a game loader), then it could be
|
|||
|
|
a machine language file, requiring a SYS call to execute. Many secondary
|
|||
|
|
files with multi-file games have load addresses other than $0801 (like
|
|||
|
|
$C000, or $8000 for cartridges), and some have none at all, where the
|
|||
|
|
loader program will actually specify where to load the file. Below is a
|
|||
|
|
typical header for a game, using a SYS call to start (in this case, SYS
|
|||
|
|
2064).
|
|||
|
|
|
|||
|
|
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII
|
|||
|
|
----------------------------------------------- ----------------
|
|||
|
|
0000: 01 08 0E 08 E9 03 9E 20 28 32 30 36 34 29 00 00 ....<2E>.<2E><>(2064)<29><>
|
|||
|
|
0010: 00 78 A2 FF 9A A0 00 84 01 A2 CC BD 57 08 9D 33 <20>x<EFBFBD><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E>̽W.<2E>3
|
|||
|
|
|
|||
|
|
One reason this "non-image" format is important is because of the
|
|||
|
|
filename limitations imposed by the PC architecture, and some of the
|
|||
|
|
problems that it can cause. The PC has an 8.3 filename convention (assuming
|
|||
|
|
DOS, and not OS/2 or Windows 95/NT long filenames), allowing for, at most,
|
|||
|
|
a filename of 11 characters. The PC also has character limitations on
|
|||
|
|
filenames, most of which don't apply to the C64. When converting a C64 file
|
|||
|
|
from any image/archive, you *cannot* use the C64 filename directly on the
|
|||
|
|
PC since, first of all its likely too long, and secondly it may contain
|
|||
|
|
characters illegal in the DOS world (i.e. ASCII 46, the 'extension'
|
|||
|
|
separator).
|
|||
|
|
|
|||
|
|
One other reason that binary is not a good way to keep C64 files is that
|
|||
|
|
you lose the C64 filetype. You *can* set the file extension to show the
|
|||
|
|
type (xxx.PRG, xxx.SEQ), but this is not typically done. If the DOS
|
|||
|
|
extension is not set, it is much more difficult to know what format the
|
|||
|
|
file originally was.
|
|||
|
|
|
|||
|
|
In order to convert a filename from C64 to DOS, the use of translate
|
|||
|
|
tables (translating illegal characters to legal ones) as well as an
|
|||
|
|
algorithm to reduce the filesize down to useable size (typically only 8
|
|||
|
|
characters from 16) must be used. Included within the PC64 distribution
|
|||
|
|
archive is a 'C' program which does just what I have described. It contains
|
|||
|
|
an algorithm which will remove illegal characters, then reduce the filename
|
|||
|
|
down using several different rules, all to make the filename conform to the
|
|||
|
|
DOS 8.3 naming standards.
|
|||
|
|
|
|||
|
|
There are some people who feel that with Windows95 (or OS/2, or Windows
|
|||
|
|
NT) long filename support, we should be able to have C64 files with the
|
|||
|
|
full 16 character filename on the PC hard disk. This is a fallacy as the
|
|||
|
|
useable character limitations of the C64 and those of any OS supporting
|
|||
|
|
long filenames are not the same. If you convert a C64 filename, many
|
|||
|
|
characters must be removed and or changed to allow it to be used in DOS (or
|
|||
|
|
Win95).
|
|||
|
|
|
|||
|
|
There is very little benefit or disadvantage to using binary. About the
|
|||
|
|
only thing which is important to remember is you could lose most of the
|
|||
|
|
original C64 filename, which *will* cause problems when you try to
|
|||
|
|
reconstruct them. Binaries have no way of preserving the actual long names.
|
|||
|
|
|
|||
|
|
---------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
Overall Good/Bad of BINARY Files:
|
|||
|
|
|
|||
|
|
Good
|
|||
|
|
----
|
|||
|
|
* Easily determined filesize (the DOS filesize is the C64 filesize)
|
|||
|
|
|
|||
|
|
* It is the *native* C64 file, so emulators can *easily* support it
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
Bad
|
|||
|
|
---
|
|||
|
|
* No 16 char filename, no real C64 filename at all
|
|||
|
|
|
|||
|
|
* No filetype, or special attribute bits
|
|||
|
|
|
|||
|
|
* No REL, GEOS or FRZ file support
|
|||
|
|
|
|||
|
|
* No signature or file description
|
|||
|
|
|
|||
|
|
* Difficult to support multi-file, as original C64 filenames are not
|
|||
|
|
retained
|
|||
|
|
|
|||
|
|
* Since there is no filetype, you may not always be able to determine if
|
|||
|
|
the file is a SEQ, USR or really a PRG without knowledge of the file
|
|||
|
|
contents
|
|||
|
|
|