aboutsummaryrefslogtreecommitdiff
path: root/cart2xex.rst
diff options
context:
space:
mode:
Diffstat (limited to 'cart2xex.rst')
-rw-r--r--cart2xex.rst203
1 files changed, 203 insertions, 0 deletions
diff --git a/cart2xex.rst b/cart2xex.rst
new file mode 100644
index 0000000..aff6272
--- /dev/null
+++ b/cart2xex.rst
@@ -0,0 +1,203 @@
+.. RST source for cart2xex(1) man page. Convert with:
+.. rst2man.py cart2xex.rst > cart2xex.1
+.. rst2man.py comes from the SBo development/docutils package.
+
+========
+cart2xex
+========
+
+----------------------------------------------------------------
+Convert an Atari 8-bit ROM cartridge image to a binary load file
+----------------------------------------------------------------
+
+.. include:: manhdr.rst
+
+SYNOPSIS
+========
+
+**cart2xex** [*-cdhn*] [**-i** *addr*] [**-r** *addr*] [**-p** *pages*] [**-t** *title*] *infile.rom* [*outfile.xex*]
+
+DESCRIPTION
+===========
+
+**cart2xex** creates an Atari executable (XEX/COM/BIN/etc) file from
+an 8K or 16K non-bankswitched cartridge ROM dump. The resulting
+executable will (by default) have a title screen that displays
+**LOADING** and the filename while the rest of the file loads.
+
+Input ROM files may be either raw dumps or Atari800 **.CAR** format.
+
+OPTIONS
+=======
+
+-c
+ Check ROM and print info only; do not create an executable.
+
+-d
+ Don't include code to make the Atari reboot when RESET is
+ pressed. Generally, there's no advantage to using this option,
+ as the Atari either locks up or reboots anyway when reset.
+
+-h
+ Print help (usage) message and exit.
+
+-i address
+ Sets the init address of the executable. Default is to use the
+ init address in the ROM image, at addresses $BFFE/BFFF. An init
+ address of zero means "no init address"; in this case, the output
+ won't contain an init address at all. Executables created
+ with this option probably won't run without further modifica‐
+ tions.
+
+-l address
+ Sets the load address of the executable. Default is to use the
+ standard Atari cartridge address ($8000 for a 16K cart, $A000
+ for 8K). Executables created with this option **will not run** without
+ further modifications.
+
+-r address
+ Sets the run address of the executable. Default is to use the
+ run address in the ROM image, at addresses $BFFA/BFFB. A run address
+ of zero means "no run address"; in this case, the output
+ won't contain a run address at all. Executables created with
+ this option probably won't run without further modifications.
+
+-R
+ ROM image is a "right cartridge", meant to be used in the right
+ slot on an 800. Sets the load address to $8000, equivalent to **-l "$8000"**.
+ Very few right cartridges were ever made. **.CAR** images
+ with type 21 (8K right cartridge) will automatically set this
+ option.
+
+-n
+ Do not prepend the code for the **LOADING** title screen. Without
+ the title screen, the Atari's display will become corrupted during
+ the loading process, although this doesn't always cause any
+ real problems.
+
+-p pages
+ Reserve extra memory below RAMTOP, in 256-byte pages. Maximum
+ value for *pages* is 16 for a 16K ROM, or 48 for an 8K ROM.
+
+-t title
+ Set the title to be displayed during the *LOADING* screen, up to
+ 20 characters. Default: use the output filename as the title
+ (minus any extension), or leave the title blank if writing to
+ standard output.
+
+NOTES
+=====
+
+**cart2xex** can't handle cartridges that use bankswitching (such
+as most Atari XEGS-era releases, or OSS super carts such as Basic
+XL or Action!). Only standard 8K and 16K cartridge images are
+usable. For raw dumps, this means the input must be exactly 8192 or
+16384 bytes. For **.CAR** images, the image type is read from the
+CART header; it must be type 1, 2, or 21 (Standard 8K, 16K, or 8K
+right-slot image, respectively).
+
+*infile* may be **-** to read from standard input. *outfile*
+may be **-** to write to standard output. **cart2xex**
+will refuse to write binary data to a terminal.
+
+If *outfile* is omitted, but *infile* is provided,
+the output filename will be constructed from
+*infile* by replacing the filename extension with *.xex*, or by
+appending *.xex* if there is no extension.
+
+The **LOADING** screen consists of around 200 bytes of 6502 object code,
+loaded at $6000.
+The title (**-t** argument, or output filename) will be transformed
+so that it will be displayed in green on a GRAPHICS 2 screen. Any
+~ (tilde) or ] (right square bracket) characters will be replaced with
+spaces, since the tilde doesn't exist in the ATASCII character set, and
+a green ] would be the Atari clear-screen code (CHR$(125)).
+
+With the **-n** option (suppress **LOADING** screen), the Atari's
+display will get corrupted during the load. This is because the display
+list and screen RAM in use during the load is located in the RAM where the
+executable will be loaded, which gets overwritten with code/data. Even
+without the title screen, **cart2xex** emits code that sets RAMTOP
+to point below the cartridge area, so the screen corruption shouldn't
+cause any problems for most games (since the first thing they do is set
+up their own graphics display). However, languages such as BASIC don't
+necessarily re-open the E: device. In fact, the first thing BASIC does
+is print a READY prompt, which (with **-n**) causes it to overwrite
+part of its own code, and lock up (since the screen address points to a
+location within BASIC).
+
+Not all cartridges will run correctly if loaded into RAM. In particular,
+many commercial games contain "self-destruct" code which attempts to
+write to the cartridge's own ROM (either by accident or
+as a copy-protection measure). This of course fails when running from
+ROM, but will succeed if running from RAM. Converting such an image into
+a binload file requires disassembling the code, finding the self-destruct
+sequence, and removing it (the Atari800 built-in debugger is very handy
+for this). If you're looking for an example of a
+self-destructing ROM, try the Parker Brothers version of Frogger, or
+Atari Pac-Man or Millipede.
+
+Sometimes, the executable won't work properly when loaded from a regular
+DOS, but will work fine with a game DOS such as Fenders 3-sector loader
+or HiassofT's MyPicoDOS. This seems to happen because the cart code
+assumes that portions of memory will be initialized to zero, but with
+DOS loaded, they actually contain DOS's code and data. The reason they
+work with bootloaders is that a bootloader is specifically designed to use as
+little memory as possible. An example of this type of ROM image is
+Imagic's Atlantis.
+
+The opposite is also possible: sometimes the executable will work fine
+when loaded from DOS, but will not work when loaded via a bootloader
+(or the "Load XEX" option in an emulator). This seems to happen for
+carts that want to boot DOS (example: Atari Artist). This isn't a very
+serious problem though: normally if a cartridge allows DOS boot, you will
+want to be using DOS with it (e.g. so you can save and load your
+drawings in Atari Artist).
+
+Normally, the load/run/init addresses are best left alone. The **-l**,
+**-i** and
+**-r** options are included for expert users, who may find them useful
+for bypassing "self-destruct" copy protection code. **cart2xex** will
+print warnings if the user sets the addresses outside the address range
+of the cartridge ($8000-$CFFF for 16K carts, or $A000-$CFFF for 8K), but
+will create the executable anyway (always assume the user knows what he's
+doing). These might also be useful if you want to disassemble the ROM's
+code with a cartridge-based disassembler (in which case, you probably
+need **-i0 -r0** as well, to create a file that doesn't execute
+when loaded).
+
+Addresses for **-l** / **-i** / **-r** and the
+number of pages for **-p**
+may be given in decimal,
+hex prefixed with **$** (don't forget to quote it for the shell!),
+or hex prefixed with **0x**. Hex digits may be given in upper or lowercase.
+
+Without the **-p** option, the title screen
+routine will still lower RAMTOP (location 106) to make room for the image.
+Text-mode cartridges such as BASIC or ASM/ED may need some "breathing
+room" between RAMTOP and the start of the cartridge code, because some
+versions of the Atari OS contain a bug that causes "clear screen" to
+clear an extra 64 bytes past RAMTOP. This isn't a problem for real ROM
+cartridges (since ROM can't be overwritten), but when running from RAM,
+this will clear the first 64 bytes of "cartridge" code!
+
+Some versions of the Atari OS ROM also contain a bug that causes 800 bytes
+of memory above RAMTOP to be scrolled, when scrolling the text window in
+graphics modes. When using a real cartridge, this doesn't hurt anything,
+but if running from RAM, the code will be scrambled and the Atari will
+lock up. Reserving 4 pages (**-p 4**) will avoid this, though of course
+it will reduce the amount of free memory available to the cartridge.
+
+Without the **-d** option, the output executable will contain a one-byte
+segment that loads a value of 1 into location $0244 (equivalent to the BASIC
+**POKE 580,1** command). It's possible that the cartridge's code may
+reset this location when it runs, so reboot-on-RESET may not be 100%
+reliable. The **-d** option is probably only useful for languages like
+BASIC or ASM/ED.
+
+EXIT STATUS
+===========
+
+Exit status is zero for success, non-zero for failure.
+
+.. include:: manftr.rst