aboutsummaryrefslogtreecommitdiff
path: root/cart.txt
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2016-02-19 15:59:47 -0500
committerB. Watson <yalhcru@gmail.com>2016-02-19 15:59:47 -0500
commit8bcbde0e1515f5cfe2e96aa9d82073b83f4e4f7a (patch)
tree4cd440d71a9e39c9e9115d2901043f7d5f732577 /cart.txt
parent08fd9af5a9247f5c47b926259ed45cf6a437e67d (diff)
downloadtaipan-8bcbde0e1515f5cfe2e96aa9d82073b83f4e4f7a.tar.gz
shrink code, now 5976 bytes free. update cart.txt
Diffstat (limited to 'cart.txt')
-rw-r--r--cart.txt85
1 files changed, 62 insertions, 23 deletions
diff --git a/cart.txt b/cart.txt
index f897de9..6b81727 100644
--- a/cart.txt
+++ b/cart.txt
@@ -31,44 +31,64 @@ the 1200XL.
...so:
-Bank 7 has the startup code, uncompressed title screen, title code,
-and code to copy from the other banks to RAM.
-
-That gives me banks 0-6 to store code in. The code is 27174 bytes, so I
-have plenty of space: it'll occupy 4 banks, leaving 2 empty ones. The
-last code bank will only be 1/3 full of code... but 1K of it will be
-used for the font, so 4.5K free there.
+Bank 7 has the startup code, uncompressed title screen, title code, and
+code to copy stuff from the other banks to RAM. The main portion of the
+code gets split up into bank-sized chunks... but the last bank of code
+doesn't need to be copied to RAM: I use a custom linker script to have
+cl65 org the RODATA segment there, plus a new segment called HIGHCODE,
+which is executable code that will run directly from the cartridge. This
+bank stays selected while the game is running, so it also has the font
+in it.
+
+There are currently 3 banks of code (numbers 0, 1, 2) that need to be
+copied to RAM. The bank with RODATA and HIGHCODE is bank 3. Banks 4, 5,
+6 are unused. As I optimize the code, bank 2 will contain less and less
+code, and hopefully will disappear one day (at which point, I only need
+a 32K cart instead of a 64K one).
Code in bank 7 will copy all the chunks to correct place in RAM... and
I don't need to leave room for DOS or anything else, so the code can be
ORGed at $0400 (romable_taimain.raw target in the Makefile does this).
-$0400 + 27174 means the code ends at $6e26. The BSS is right after that,
-and is less than a page. The OS will place the GR.0 display list at $7c20,
-and the stack will grow down from there to $7a20 (except it never grows
-that much).
+Currently, romable_taimain.raw is 18739 bytes. $0400 + 18739 means the
+code ends at $4d33. The BSS is right after that, and is less than a
+page. The OS will place the GR.0 display list at $7c20, and the stack
+will grow down from there to $7a20 (except it never grows that much).
-Copying the game code to RAM causes a short delay at boot (0.43 seconds).
+Copying the game code to RAM causes a short delay at boot (about 1/3 sec).
It's barely noticeable, and lots of cartridge games have similar delays.
The copying code could maybe be optimized to speed it up a little,
but it's probably not even worth the effort.
Amusingly, the Taipan cart will work on a 32K 800. Not a 16K Atari though.
+24K might become possible, but currently isn't (AFAIK there never were
+any stock 24K Ataris anyway, they'd be 8K or 16K machines with a 3rd-party
+RAM upgrade, and exceedingly rare these days).
bank 7: fixed bank
$a000-$bxxx - title screen data, dl, menu code,
memory size checker, code to
- copy romable_taimain to RAM
+ copy romable_taimain to RAM.
+ currently 1441 bytes free in this bank.
$bffa-$bfff - cart trailer
-banks 0, 1, 2: full banks of romable_taimain code
+banks 0, 1: full banks of romable_taimain code
$8000-$9dff - 31 pages (7936 bytes, 7.75K) of code
-$9f00-$9fff - unused
-
-bank 3: last (partial) bank of romable_taimain, plus the font.
-This bank stays enabled after copying is done.
-$8000-$9bff - up to 7K of code (28 pages)
-$9c00-$9fff - font (1K)
+$9f00-$9fff - unused, filled with $ff
+
+bank 2: last (partial) bank of romable_taimain
+$8000-$9f00 - up to 31 pages (7936 bytes, 7.75K) of code.
+ currently only 2809 bytes (11 pages) are used,
+ and the number's getting smaller all the time.
+$9f00-$9fff - unused, filled with $ff
+
+bank 3: RODATA and HIGHCODE segments.
+ This bank stays enabled after copying is done.
+ currently all but 7 bytes are used.
+$8000-$9bff - up to 7K of code/data (28 pages)
+$9c00-$9fff - font (1K). The font has a nonzero byte at $9ffc,
+ so the OS doesn't think there's a cartridge here
+ if this bank happens to come up at boot.
Unused areas are filled with $ff (this is the default state for both
flash and EPROM). For the banks that map at $8000, this includes the
@@ -91,6 +111,11 @@ Changes the game needed for a cart version: Not many.
as low as possible allows room for bugfixes or new features (if I ever
add any).
+the RODATA segment is org'ed to $8000 (see cartbank3.cfg).
+
+all of the game's asm code, and a small amount of the C code, goes in
+a new segment called HIGHCODE (see cartbank3.cfg).
+
checkmem.s isn't needed any longer... though there is a new memory checker
(in bank 7) that says "32K required" if someone tries it on a 16K machine.
@@ -105,11 +130,10 @@ The title decompression is gone: it just displays the title screen DL
and data straight from ROM. The menu help text and the tail end of the
display list are in RAM though, so the menu can change them. Moving the
end of the DL to RAM means one extra black (border-colored) scanline
-appears due to the DL jump instruction. I may make the border the same
-color as the text bg, to make this less noticeable.
+appears due to the DL jump instruction.
The font is located in ROM, on a 1K boundary, so CHBAS can point
-to it, rather that $2000 like the xex version.
+to it, rather than $2000 like the xex version.
num_buf and firm are located in the BSS rather than page 6 as they
are in the .xex version.
@@ -129,6 +153,21 @@ in asm? Probably. Do I want to? Not really.
--
+A 5200 version should be possible. At the moment, the .xex version is
+just under 32K (excluding the memory-checker segment). The 5200 would
+need its own conio, since cc65's conio for 5200 uses a 20x24 GR.1 screen
+and doesn't support input at all.
+
+The 5200 cart window is 32K, so no bankswitching would be
+required. There's only 16K of RAM, but that'll be plenty.
+
+The numeric keys on the controller would be used for all input. When
+entering a firm name, it'll work like texting on a regular phone keypad,
+press 2 for A, press it again for B, etc. The * and # keys will be
+backspace and enter. Not sure what to use for A-for-all and delete.
+
+--
+
The cartridge label should look like a classic brown 1st-gen 400/800 cart,
even if the cart shell itself doesn't.