diff --git a/Makefile b/Makefile
index 41ebd43d..c08d2f56 100644
--- a/Makefile
+++ b/Makefile
@@ -193,7 +193,7 @@ SEG_LIST_X16 = $(DIR_X16)/basic.seg_0 \
$(DIR_X16)/kernal.seg_0 \
$(DIR_X16)/kernal.seg_1
-REL_TARGET_LIST = $(TARGET_LIST_GEN) $(TARGET_M65_x) $(TARGET_M65_x_PXL) $(TARGET_LIST_U64)
+REL_TARGET_LIST = $(TARGET_LIST_GEN) $(TARGET_LIST_CRT) $(TARGET_M65_x) $(TARGET_M65_x_PXL) $(TARGET_LIST_U64)
# Misc strings
diff --git a/bin/README.md b/bin/README.md
index 19a5b8e1..93f2ac57 100644
--- a/bin/README.md
+++ b/bin/README.md
@@ -13,7 +13,7 @@ Follow these rules, or bad things will happen!
* Don't mix ROMs from different builds/versions (again, CHARGEN is an exception).
* The generic ROM set should be compatible with any C64-compatible machine; platform-specific ROMs might not work on other platforms.
-
+
For Ultimate 64 motherboard the following settings are recommended:
@@ -22,6 +22,10 @@ For Ultimate 64 motherboard the following settings are recommended:
+The generic_crt ROM set is a special version of generic set, with some code moved to external ROM on the cartridge - thus, more features could be enabled. It needs all the 3 files (BASIC, Kernal, cartridge) to be operable.
+
+
+
Have fun!
diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom
index 57c77764..370684bc 100644
Binary files a/bin/basic_generic.rom and b/bin/basic_generic.rom differ
diff --git a/bin/basic_generic_crt.rom b/bin/basic_generic_crt.rom
new file mode 100644
index 00000000..23f011e1
Binary files /dev/null and b/bin/basic_generic_crt.rom differ
diff --git a/bin/basic_ultimate64.rom b/bin/basic_ultimate64.rom
index 7efd47c9..1ea03b7b 100644
Binary files a/bin/basic_ultimate64.rom and b/bin/basic_ultimate64.rom differ
diff --git a/bin/external_generic.crt b/bin/external_generic.crt
new file mode 100644
index 00000000..2001cc51
Binary files /dev/null and b/bin/external_generic.crt differ
diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom
index 8cf7e144..d0858184 100644
Binary files a/bin/kernal_generic.rom and b/bin/kernal_generic.rom differ
diff --git a/bin/kernal_generic_crt.rom b/bin/kernal_generic_crt.rom
new file mode 100644
index 00000000..ee4b0800
Binary files /dev/null and b/bin/kernal_generic_crt.rom differ
diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom
index 79ab55e2..e1a873fc 100644
Binary files a/bin/kernal_ultimate64.rom and b/bin/kernal_ultimate64.rom differ
diff --git a/bin/mega65.rom b/bin/mega65.rom
index f3fde96d..179efd80 100644
Binary files a/bin/mega65.rom and b/bin/mega65.rom differ
diff --git a/bin/mega65_pxlfont.rom b/bin/mega65_pxlfont.rom
index 76afe45a..6c040c15 100644
Binary files a/bin/mega65_pxlfont.rom and b/bin/mega65_pxlfont.rom differ
diff --git a/doc/Development.md b/doc/Development.md
index 9d9ad202..000dc546 100644
--- a/doc/Development.md
+++ b/doc/Development.md
@@ -95,9 +95,10 @@ List of the most important make targets:
### Code segments and ROM layouts
-Currently there are 3 ROM layouts defined:
+Currently there are 4 ROM layouts defined:
- `STD` - with 2 code segments: `BASIC` (`$A000-$E4D2`, where `$C000-$DFFF` is a skip-gap for RAM and I/O area) and `KERNAL` (`$E4D3 - $FFFF`)
+- `CRT` - where `BASIC` becames `BASIC_0` and `KERNAL` becames `KERNAL_0`, with additional `BASIC`/`KERNAL` segments are placed on the required cartridge image
- `M65` - where `BASIC` becames `BASIC_0` and `KERNAL` becames `KERNAL_0`, additional segments might be added to the build system in the future; at the moment of writing this document additional 16KB of ROM is defined as `BASIC_1` segment and additional 8KB of ROM is defined as `KERNAL_1` segment
- `X16` - memory layout for the Commander X16 machine
diff --git a/doc/Extended-BASIC.md b/doc/Extended-BASIC.md
index 09e7dd35..eac72c6d 100644
--- a/doc/Extended-BASIC.md
+++ b/doc/Extended-BASIC.md
@@ -39,7 +39,7 @@ Loads the file from tape. Depending on the configuration, it tries to load the f
Like above, but merges a BASIC program to the one already stored in memory.
-### `←H` (MEGA65)
+### `←H` (MEGA65, cartridge)
Launches a built-in tape head alignment tool. Destroys program in memory. Press `RUN/STOP` to terminate the tool.
diff --git a/tools/release.cc b/tools/release.cc
index 3bf52b82..918d3790 100644
--- a/tools/release.cc
+++ b/tools/release.cc
@@ -50,6 +50,16 @@ const std::vector ROM_DEFINITIONS =
0x1F80 // KERNAL ID offset
},
+ {
+ "CART",
+ 32896, // file size
+ 0x203C, // signature offset 1
+ 0, // signature offset 2
+ 0, // DOS date offset
+ 0, // BASIC ID offset
+ 0 // KERNAL ID offset
+ },
+
{
"MEGA65",
128 * 1024, // file size