diff --git a/Makefile b/Makefile index 01e8a236..e884707a 100644 --- a/Makefile +++ b/Makefile @@ -146,6 +146,9 @@ TOOLS_LIST = $(TOOL_GENERATE_CONSTANTS) \ # List of targets +TARGET_CHR_OR = build/chargen_openroms.rom +TARGET_CHR_PXL = build/chargen_pxlfont.rom + TARGET_CUS_B = build/basic_custom.rom TARGET_GEN_B = build/basic_generic.rom TARGET_CRT_B = build/basic_generic_crt.rom @@ -270,17 +273,17 @@ build/tools/%: tools/%.cc tools/common.h # Rules - CHARGEN -build/chargen_openroms.rom: $(TOOL_PNGPREPARE) assets/8x8font.png +$(TARGET_CHR_OR): $(TOOL_PNGPREPARE) assets/8x8font.png @$(TOOL_PNGPREPARE) charrom assets/8x8font.png $@ 1>build/pngprepare.log -build/chargen_pxlfont.rom: bin/chargen_pxlfont_2.3.rom +$(TARGET_CHR_PXL): bin/chargen_pxlfont_2.3.rom @cp $< $@ -build/chargen_openroms.patched: $(TOOL_PATCH_CHARGEN) build/chargen_openroms.rom - @$(TOOL_PATCH_CHARGEN) -i build/chargen_openroms.rom -o $@ -n 7px-OpenROMs +build/chargen_openroms.patched: $(TOOL_PATCH_CHARGEN) $(TARGET_CHR_OR) + @$(TOOL_PATCH_CHARGEN) -i $(TARGET_CHR_OR) -o $@ -n 7px-OpenROMs -build/chargen_pxlfont.patched: $(TOOL_PATCH_CHARGEN) build/chargen_pxlfont.rom - @$(TOOL_PATCH_CHARGEN) -i build/chargen_pxlfont.rom -o $@ -n 6px-PXLfont +build/chargen_pxlfont.patched: $(TOOL_PATCH_CHARGEN) $(TARGET_CHR_PXL) + @$(TOOL_PATCH_CHARGEN) -i $(TARGET_CHR_PXL) -o $@ -n 6px-PXLfont # Dependencies - BASIC, DOS, and KERNAL @@ -591,7 +594,7 @@ build/padding_64_KB: @mkdir -p build @dd if=/dev/zero bs=8192 count=8 of=$@ status=none -$(TARGET_M65_x) $(TARGET_M65_x_PXL): $(SEG_LIST_M65) build/padding_64_KB build/chargen_openroms.rom build/chargen_openroms.patched build/chargen_pxlfont.rom build/chargen_pxlfont.patched +$(TARGET_M65_x) $(TARGET_M65_x_PXL): $(SEG_LIST_M65) build/padding_64_KB $(TARGET_CHR_OR) build/chargen_openroms.patched $(TARGET_CHR_PXL) build/chargen_pxlfont.patched @echo @echo @echo @@ -602,7 +605,7 @@ $(TARGET_M65_x) $(TARGET_M65_x_PXL): $(SEG_LIST_M65) build/padding_64_KB build/c @cat $(DIR_M65)/kernal.seg_1 >> $(TARGET_M65_x) @cat $(DIR_M65)/basic.seg_1 >> $(TARGET_M65_x) @cat $(DIR_M65)/basic.seg_0 >> $(TARGET_M65_x) - @cat build/chargen_openroms.rom >> $(TARGET_M65_x) + @cat $(TARGET_CHR_OR) >> $(TARGET_M65_x) @cat build/chargen_openroms.patched >> $(TARGET_M65_x) @cat $(DIR_M65)/kernal.seg_0 >> $(TARGET_M65_x) @cat build/padding_64_KB >> $(TARGET_M65_x) @@ -616,7 +619,7 @@ $(TARGET_M65_x) $(TARGET_M65_x_PXL): $(SEG_LIST_M65) build/padding_64_KB build/c @cat $(DIR_M65)/kernal.seg_1 >> $(TARGET_M65_x_PXL) @cat $(DIR_M65)/basic.seg_1 >> $(TARGET_M65_x_PXL) @cat $(DIR_M65)/basic.seg_0 >> $(TARGET_M65_x_PXL) - @cat build/chargen_pxlfont.rom >> $(TARGET_M65_x_PXL) + @cat $(TARGET_CHR_PXL) >> $(TARGET_M65_x_PXL) @cat build/chargen_pxlfont.patched >> $(TARGET_M65_x_PXL) @cat $(DIR_M65)/kernal.seg_0 >> $(TARGET_M65_x_PXL) @cat build/padding_64_KB >> $(TARGET_M65_x_PXL) @@ -647,23 +650,23 @@ $(TARGET_X16_x): $(SEG_LIST_X16) build/chargen_openroms.rom test: test_custom test_crt: test_generic_crt -test_custom: $(TARGET_LIST_CUS) build/symbols_custom.vs - x64 -kernal $(TARGET_CUS_K) -basic $(TARGET_CUS_B) -moncommands build/symbols_custom.vs -1 $(TESTTAPE) -8 $(TESTDISK) +test_custom: $(TARGET_LIST_CUS) $(TARGET_CHR_PXL) build/symbols_custom.vs + x64 -kernal $(TARGET_CUS_K) -basic $(TARGET_CUS_B) -chargen $(TARGET_CHR_PXL) -moncommands build/symbols_custom.vs -1 $(TESTTAPE) -8 $(TESTDISK) -test_generic: $(TARGET_LIST_GEN) build/symbols_generic.vs - x64 -kernal $(TARGET_GEN_K) -basic $(TARGET_GEN_B) -moncommands build/symbols_generic.vs -1 $(TESTTAPE) -8 $(TESTDISK) +test_generic: $(TARGET_LIST_GEN)$(TARGET_CHR_PXL) build/symbols_generic.vs + x64 -kernal $(TARGET_GEN_K) -basic $(TARGET_GEN_B) -chargen $(TARGET_CHR_PXL) -moncommands build/symbols_generic.vs -1 $(TESTTAPE) -8 $(TESTDISK) -test_generic_x128: $(TARGET_LIST_GEN) build/symbols_generic.vs - x128 -go64 -kernal64 $(TARGET_GEN_K) -basic64 $(TARGET_GEN_B) -moncommands build/symbols_generic.vs -1 $(TESTTAPE) -8 $(TESTDISK) +test_generic_x128: $(TARGET_LIST_GEN) $(TARGET_CHR_PXL) build/symbols_generic.vs + x128 -go64 -kernal64 $(TARGET_GEN_K) -basic64 $(TARGET_GEN_B) -chargen $(TARGET_CHR_PXL) -moncommands build/symbols_generic.vs -1 $(TESTTAPE) -8 $(TESTDISK) -test_generic_crt: $(TARGET_LIST_CRT) build/symbols_generic_crt.vs - x64 -kernal $(TARGET_CRT_K) -basic $(TARGET_CRT_B) -cartcrt $(TARGET_CRT_X) -moncommands build/symbols_generic_crt.vs -1 $(TESTTAPE) -8 $(TESTDISK) +test_generic_crt: $(TARGET_LIST_CRT) $(TARGET_CHR_PXL) build/symbols_generic_crt.vs + x64 -kernal $(TARGET_CRT_K) -basic $(TARGET_CRT_B) -chargen $(TARGET_CHR_PXL) -cartcrt $(TARGET_CRT_X) -moncommands build/symbols_generic_crt.vs -1 $(TESTTAPE) -8 $(TESTDISK) -test_testing: $(TARGET_LIST_TST) build/symbols_testing.vs - x64 -kernal $(TARGET_TST_K) -basic $(TARGET_TST_B) -moncommands build/symbols_testing.vs -1 $(TESTTAPE) -8 $(TESTDISK) +test_testing: $(TARGET_LIST_TST) $(TARGET_CHR_PXL) build/symbols_testing.vs + x64 -kernal $(TARGET_TST_K) -basic $(TARGET_TST_B) -chargen $(TARGET_CHR_PXL) -moncommands build/symbols_testing.vs -1 $(TESTTAPE) -8 $(TESTDISK) -test_ultimate64: $(TARGET_LIST_U64) build/symbols_ultimate64.vs - x64 -kernal $(TARGET_U64_K) -basic $(TARGET_U64_B) -moncommands build/symbols_ultimate64.vs -1 $(TESTTAPE) -8 $(TESTDISK) +test_ultimate64: $(TARGET_LIST_U64) $(TARGET_CHR_PXL) build/symbols_ultimate64.vs + x64 -kernal $(TARGET_U64_K) -basic $(TARGET_U64_B) -chargen $(TARGET_CHR_PXL) -moncommands build/symbols_ultimate64.vs -1 $(TESTTAPE) -8 $(TESTDISK) test_mega65: $(TARGET_M65_x) $(TARGET_M65_x_PXL) ../xemu/build/bin/xmega65.native -dmarev 2 -besure -fontrefresh -forcerom -loadrom $(TARGET_M65_x_PXL) @@ -671,20 +674,20 @@ test_mega65: $(TARGET_M65_x) $(TARGET_M65_x_PXL) test_cx16: $(TARGET_X16_x) ../x16-emulator/x16emu -rom $(TARGET_X16_x) -test_hybrid: build/kernal_hybrid.rom build/symbols_hybrid.vs +test_hybrid: build/kernal_hybrid.rom $(TARGET_CHR_PXL) build/symbols_hybrid.vs @echo @echo $(HYBRID_WARNING) @echo - x64 -kernal build/kernal_hybrid.rom -moncommands build/symbols_hybrid.vs -1 $(TESTTAPE) -8 $(TESTDISK) + x64 -kernal build/kernal_hybrid.rom -chargen $(TARGET_CHR_PXL) -moncommands build/symbols_hybrid.vs -1 $(TESTTAPE) -8 $(TESTDISK) @echo @echo $(HYBRID_WARNING) @echo -test_hybrid_u64: build/kernal_hybrid_u64.rom build/symbols_hybrid_u64.vs +test_hybrid_u64: build/kernal_hybrid_u64.rom $(TARGET_CHR_PXL) build/symbols_hybrid_u64.vs @echo @echo $(HYBRID_WARNING) @echo - x64 -kernal build/kernal_hybrid_u64.rom -moncommands build/symbols_hybrid_u64.vs -1 $(TESTTAPE) -8 $(TESTDISK) + x64 -kernal build/kernal_hybrid_u64.rom -chargen $(TARGET_CHR_PXL) -moncommands build/symbols_hybrid_u64.vs -1 $(TESTTAPE) -8 $(TESTDISK) @echo @echo $(HYBRID_WARNING) @echo @@ -692,8 +695,8 @@ test_hybrid_u64: build/kernal_hybrid_u64.rom build/symbols_hybrid_u64.vs test_m65: build/mega65.rom m65 -b ../mega65-core/bin/mega65r1.bit -k ../mega65-core/bin/KICKUP.M65 -R build/mega65.rom -4 -testremote: build/kernal_custom.rom build/basic_custom.rom build/symbols_custom.vs - x64 -kernal build/kernal_custom.rom -basic build/basic_custom.rom -moncommands build/symbols_custom.vs -remotemonitor +testremote: build/kernal_custom.rom build/basic_custom.rom $(TARGET_CHR_PXL) build/symbols_custom.vs + x64 -kernal build/kernal_custom.rom -basic build/basic_custom.rom -chargen $(TARGET_CHR_PXL) -moncommands build/symbols_custom.vs -remotemonitor testsimilarity: $(TOOL_SIMILARITY) $(DIR_GEN)/OUTx_x.BIN kernal basic $(TOOL_SIMILARITY) kernal $(DIR_GEN)/OUTx_x.BIN diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index 370684bc..3683c857 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 index 23f011e1..0720e80e 100644 Binary files a/bin/basic_generic_crt.rom and b/bin/basic_generic_crt.rom differ diff --git a/bin/basic_ultimate64.rom b/bin/basic_ultimate64.rom index 1ea03b7b..af1dd73c 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 index 2001cc51..a2524d69 100644 Binary files a/bin/external_generic.crt and b/bin/external_generic.crt differ diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index d0858184..2f309c4e 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 index ee4b0800..933aae89 100644 Binary files a/bin/kernal_generic_crt.rom and b/bin/kernal_generic_crt.rom differ diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index e1a873fc..b4a7dcb3 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 179efd80..0e0f77bd 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 6c040c15..f0f7a8e1 100644 Binary files a/bin/mega65_pxlfont.rom and b/bin/mega65_pxlfont.rom differ diff --git a/doc/Extended-BASIC.md b/doc/Extended-BASIC.md index b82d72d2..d8c6d046 100644 --- a/doc/Extended-BASIC.md +++ b/doc/Extended-BASIC.md @@ -1,7 +1,7 @@ # Extended BASIC -NOTE: Command syntax, behaviour details, and tokens are still subject to change! Currently the availability of some depends on the build configuration, in the future most (if not all) extended commands will be available only on machines with extended ROM, like the *MEGA65* or *Ultimate 64*. +NOTE: Command syntax, behaviour details, and tokens are still subject to change! Currently the availability of some depends on the build configuration, in the future most (if not all) extended commands will be available only on machines with extended ROM, like the *MEGA65*, *Ultimate 64*, or a build utilizing cartridge with external ROM (build marked as *cart*). ## DOS Wedge @@ -42,7 +42,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` or `←HF` (MEGA65, cartridge) +### `←H` or `←HF` (cart, MEGA65) Launches a built-in tape head alignment tool. Destroys program in memory. Press `RUN/STOP` to terminate the tool. `←HF` is for compatibility with the *BlackBox v3/v4/v8* cartridges. @@ -71,7 +71,7 @@ Saves the binary data from the given memory area. NOTE: for now syntax differs f ## Additional BASIC commands - misc -### `COLD` (MEGA65) +### `COLD` (cart, MEGA65) Resets the machine. In direct mode asks for confirmation first. @@ -83,7 +83,7 @@ Tries to switch the machine to turbo mode (or back to 1MHz operation mode) - det Tries to restore program destroyed by the `NEW` command or a reset. -### `MEM` (MEGA65) +### `MEM` (cart, MEGA65) Displays BASIC memory usage information: * `TEXT` - size of BASIC program text, always at least 2 bytes are used diff --git a/src/aliases/,aliases_config.s b/src/aliases/,aliases_config.s index fbbc5c0c..4eb53819 100644 --- a/src/aliases/,aliases_config.s +++ b/src/aliases/,aliases_config.s @@ -94,6 +94,9 @@ !ifdef CONFIG_MB_M65 { !ifdef CONFIG_MEMORY_MODEL_60K { !error "Do not use CONFIG_MEMORY_MODEL_60K options for MEGA65 motherboard" } } +!ifdef ROM_LAYOUT_CRT { + !ifdef CONFIG_MEMORY_MODEL_60K { !error "Do not use CONFIG_MEMORY_MODEL_60K options for CRT ROM layout" } +} !ifdef CONFIG_PLATFORM_COMMANDER_X16 { !ifndef CONFIG_MEMORY_MODEL_38K { !error "Select CONFIG_MEMORY_MODEL_38K options for Commander X16 platform" } } @@ -445,9 +448,9 @@ ; Determine if we need space-savings in BASIC code -!ifndef CONFIG_MB_M65 { +!ifndef CONFIG_MB_M65 { !ifndef ROM_LAYOUT_CRT { !set HAS_SMALL_BASIC = 1 -} +} } @@ -469,4 +472,12 @@ !ifdef SEGMENT_BASIC_0 { !set SEGMENT_M65_BASIC_0 = 1 } !ifdef SEGMENT_BASIC_1 { !set SEGMENT_M65_BASIC_1 = 1 } !ifdef SEGMENT_KERNAL_0 { !set SEGMENT_M65_KERNAL_0 = 1 } + !ifdef SEGMENT_KERNAL_1 { !set SEGMENT_M65_KERNAL_1 = 1 } +} + +!ifdef ROM_LAYOUT_CRT { + !ifdef SEGMENT_BASIC_0 { !set SEGMENT_CRT_BASIC_0 = 1 } + !ifdef SEGMENT_BASIC_1 { !set SEGMENT_CRT_BASIC_1 = 1 } + !ifdef SEGMENT_KERNAL_0 { !set SEGMENT_CRT_KERNAL_0 = 1 } + !ifdef SEGMENT_KERNAL_1 { !set SEGMENT_CRT_KERNAL_1 = 1 } } diff --git a/src/basic/ab1e.strout.s b/src/basic/ab1e.strout.s index 3f88c657..13daaf5d 100644 --- a/src/basic/ab1e.strout.s +++ b/src/basic/ab1e.strout.s @@ -1,6 +1,7 @@ ;; #LAYOUT# STD * #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE-OFFSET 2000 ;; #LAYOUT# * BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE-FLOAT ;; #LAYOUT# M65 BASIC_1 #TAKE-FLOAT ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/assets/packed_as_1n.s b/src/basic/assets/packed_as_1n.s index 4fae3774..c8874aa6 100644 --- a/src/basic/assets/packed_as_1n.s +++ b/src/basic/assets/packed_as_1n.s @@ -1,5 +1,5 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/assets/packed_as_3n.s b/src/basic/assets/packed_as_3n.s index 1447af4d..f0d6b833 100644 --- a/src/basic/assets/packed_as_3n.s +++ b/src/basic/assets/packed_as_3n.s @@ -1,5 +1,5 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/assets/packed_dictionary.s b/src/basic/assets/packed_dictionary.s index ed6563ad..c56b26bc 100644 --- a/src/basic/assets/packed_dictionary.s +++ b/src/basic/assets/packed_dictionary.s @@ -1,5 +1,5 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/assets/packed_errors.s b/src/basic/assets/packed_errors.s index eda0257e..303bd668 100644 --- a/src/basic/assets/packed_errors.s +++ b/src/basic/assets/packed_errors.s @@ -1,5 +1,5 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/assets/packed_keywords.s b/src/basic/assets/packed_keywords.s index 0f01aab6..307e1b08 100644 --- a/src/basic/assets/packed_keywords.s +++ b/src/basic/assets/packed_keywords.s @@ -1,5 +1,5 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/assets/packed_keywords_01.s b/src/basic/assets/packed_keywords_01.s index c4260b5d..f2f77efc 100644 --- a/src/basic/assets/packed_keywords_01.s +++ b/src/basic/assets/packed_keywords_01.s @@ -1,5 +1,5 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/assets/packed_keywords_02.s b/src/basic/assets/packed_keywords_02.s index cfe22be5..dc0e993e 100644 --- a/src/basic/assets/packed_keywords_02.s +++ b/src/basic/assets/packed_keywords_02.s @@ -1,5 +1,5 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/assets/packed_keywords_03.s b/src/basic/assets/packed_keywords_03.s index 2b633ed2..916f9bdb 100644 --- a/src/basic/assets/packed_keywords_03.s +++ b/src/basic/assets/packed_keywords_03.s @@ -1,5 +1,5 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/assets/packed_misc.s b/src/basic/assets/packed_misc.s index 52e38c48..bbfc7c6c 100644 --- a/src/basic/assets/packed_misc.s +++ b/src/basic/assets/packed_misc.s @@ -1,5 +1,5 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/assets/startup_banner.s b/src/basic/assets/startup_banner.s index 1582c98c..bd0e3b9b 100644 --- a/src/basic/assets/startup_banner.s +++ b/src/basic/assets/startup_banner.s @@ -1,5 +1,5 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/basic_commands_02/cmd__jumptable_02.s b/src/basic/basic_commands_02/cmd__jumptable_02.s index deb3dc4d..d51a332d 100644 --- a/src/basic/basic_commands_02/cmd__jumptable_02.s +++ b/src/basic/basic_commands_02/cmd__jumptable_02.s @@ -21,18 +21,22 @@ !set ITEM_00 = cmd_cold !set ITEM_01 = cmd_mem -!set ITEM_02 = cmd_sysinfo +!ifdef CONFIG_MB_M65 { +!set ITEM_02 = cmd_sysinfo +} !ifndef HAS_OPCODES_65C02 { command_02_jumptable_lo: - !byte <(ITEM_00-1), <(ITEM_01-1), <(ITEM_02-1) + !byte <(ITEM_00-1), <(ITEM_01-1) + !ifdef CONFIG_MB_M65 { !byte <(ITEM_02-1) } command_02_jumptable_hi: - !byte >(ITEM_00-1), >(ITEM_01-1), >(ITEM_02-1) + !byte >(ITEM_00-1), >(ITEM_01-1) + !ifdef CONFIG_MB_M65 { !byte >(ITEM_02-1) } } else { ; HAS_OPCODES_65C02 @@ -40,5 +44,6 @@ command_02_jumptable: ; Note: 65C02 has the page boundary vector bug fixed! - !word ITEM_00, ITEM_01, ITEM_02 + !word ITEM_00, ITEM_01 + !ifdef CONFIG_MB_M65 { !word ITEM_02 } } } diff --git a/src/basic/basic_commands_02/cmd_mem.s b/src/basic/basic_commands_02/cmd_mem.s index 19c53e03..af06307a 100644 --- a/src/basic/basic_commands_02/cmd_mem.s +++ b/src/basic/basic_commands_02/cmd_mem.s @@ -1,38 +1,50 @@ ;; #LAYOUT# STD * #TAKE -;; #LAYOUT# M65 * #TAKE -;; #LAYOUT# X16 BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE +;; #LAYOUT# M65 BASIC_1 #TAKE +;; #LAYOUT# * BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE !ifndef HAS_SMALL_BASIC { + ; First perform the garbage collection - to be able to determine real values + !ifdef SEGMENT_M65_BASIC_0 { cmd_mem: - ; First perform the garbage collection - to be able to determine real values - jsr varstr_garbage_collect - jsr map_BASIC_1 jsr (VB1__cmd_mem_cont) jmp map_NORMAL +} else ifdef SEGMENT_CRT_BASIC_0 { + +cmd_mem: + + jsr varstr_garbage_collect + + jsr map_BASIC_1 + jsr JB1__cmd_mem_cont + jmp map_NORMAL + } else ifdef SEGMENT_M65_BASIC_1 { cmd_mem_cont: +} else ifdef SEGMENT_CRT_BASIC_1 { + +cmd_mem_cont: + } else { cmd_mem: - ; First perform the garbage collection - to be able to determine real values - jsr varstr_garbage_collect } -!ifndef SEGMENT_M65_BASIC_0 { +!ifndef SEGMENT_BASIC_0 { ; Print header diff --git a/src/basic/basic_commands_02/helper_ask_if_sure.s b/src/basic/basic_commands_02/helper_ask_if_sure.s index 5f52d7b9..5c5f456a 100644 --- a/src/basic/basic_commands_02/helper_ask_if_sure.s +++ b/src/basic/basic_commands_02/helper_ask_if_sure.s @@ -1,4 +1,5 @@ ;; #LAYOUT# STD * #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# * BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE @@ -19,6 +20,12 @@ helper_ask_if_sure: jsr (VB1__helper_ask_if_sure) jmp map_NORMAL +} else ifdef SEGMENT_CRT_BASIC_0 { + + jsr map_BASIC_1 + jsr JB1__helper_ask_if_sure + jmp map_NORMAL + } else { ; First check, if we are in direct mode,; if not, do not ask diff --git a/src/basic/basic_commands_02/helper_mem_tab_str.s b/src/basic/basic_commands_02/helper_mem_tab_str.s index eca887b1..b336b964 100644 --- a/src/basic/basic_commands_02/helper_mem_tab_str.s +++ b/src/basic/basic_commands_02/helper_mem_tab_str.s @@ -1,4 +1,5 @@ ;; #LAYOUT# STD * #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/basic_commands_02/helper_mem_tab_x.s b/src/basic/basic_commands_02/helper_mem_tab_x.s index 825d0a59..7b9939bc 100644 --- a/src/basic/basic_commands_02/helper_mem_tab_x.s +++ b/src/basic/basic_commands_02/helper_mem_tab_x.s @@ -1,4 +1,5 @@ ;; #LAYOUT# STD * #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/basic_commands_02/helper_mem_tab_y.s b/src/basic/basic_commands_02/helper_mem_tab_y.s index 083817d8..7735ccce 100644 --- a/src/basic/basic_commands_02/helper_mem_tab_y.s +++ b/src/basic/basic_commands_02/helper_mem_tab_y.s @@ -1,4 +1,5 @@ ;; #LAYOUT# STD * #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE ;; #LAYOUT# X16 BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE diff --git a/src/basic/board_crt/8000.crt_vectable_basic_1.s b/src/basic/board_crt/8000.crt_vectable_basic_1.s new file mode 100644 index 00000000..7e2f0fa1 --- /dev/null +++ b/src/basic/board_crt/8000.crt_vectable_basic_1.s @@ -0,0 +1,54 @@ +;; #LAYOUT# CRT BASIC_0 #TAKE-FLOAT +;; #LAYOUT# CRT BASIC_1 #TAKE +;; #LAYOUT# * * #IGNORE + +; +; Definitions for communication with cartridge segment BASIC_1 from BASIC_0 +; + + +!ifdef SEGMENT_BASIC_0 { + + + ; Label definitions + + !addr JB1__INITMSG = $8000 + 3 * 0 + !addr JB1__LINKPRG = $8000 + 3 * 1 + !addr JB1__tokenise_line = $8000 + 3 * 2 + !addr JB1__list_single_line = $8000 + 3 * 3 + !addr JB1__print_packed_error = $8000 + 3 * 4 + !addr JB1__print_packed_misc_str = $8000 + 3 * 5 + !addr JB1__do_new = $8000 + 3 * 6 + !addr JB1__do_clr = $8000 + 3 * 7 + !addr JB1__do_restore = $8000 + 3 * 8 + !addr JB1__cmd_mem_cont = $8000 + 3 * 9 + !addr JB1__prepare_direct_execution = $8000 + 3 * 10 + !addr JB1__helper_ask_if_sure = $8000 + 3 * 11 + +!ifdef CONFIG_DOS_WEDGE { + !addr JB1__wedge_dos = $8000 + 3 * 12 +} + +} else { + + ; Jump table (Open ROMs private!) + + jmp INITMSG + jmp LINKPRG + jmp tokenise_line + jmp list_single_line + jmp print_packed_error + jmp print_packed_misc_str + jmp do_new + jmp do_clr + jmp do_restore + jmp cmd_mem_cont + jmp prepare_direct_execution + jmp helper_ask_if_sure + +!ifdef CONFIG_DOS_WEDGE { + jmp wedge_dos +} + + +} diff --git a/src/basic/board_crt/8000.interop b/src/basic/board_crt/8000.interop new file mode 100644 index 00000000..7acd2a6f --- /dev/null +++ b/src/basic/board_crt/8000.interop @@ -0,0 +1 @@ +This particular address is not for interoperability - we had to choose some fixed location for the extended ROM jumptable, beginning of the mapped memory block is just sane. diff --git a/src/basic/board_crt/crt_imports.s b/src/basic/board_crt/crt_imports.s new file mode 100644 index 00000000..678029af --- /dev/null +++ b/src/basic/board_crt/crt_imports.s @@ -0,0 +1,41 @@ +;; #LAYOUT# CRT BASIC_1 #TAKE +;; #LAYOUT# * * #IGNORE + +;; #IMPORT# BASIC_0 = BASIC_0_combined.sym +;; #IMPORT# KERNAL_0 = KERNAL_0_combined.sym + +; +; Definitions for calling segments BASIC_0 and KERNAL_0 routines from BASIC_1 +; + +;; #ALIAS# peek_via_OLDTXT = BASIC_0.proxy_B1_peek_via_OLDTXT +;; #ALIAS# poke_via_OLDTXT = BASIC_0.proxy_B1_poke_via_OLDTXT +;; #ALIAS# JCHROUT = BASIC_0.proxy_B1_JCHROUT +;; #ALIAS# JCLALL = BASIC_0.proxy_B1_JCLALL +;; #ALIAS# plot_set = BASIC_0.proxy_B1_plot_set + +;; #ALIAS# JCLOSE = BASIC_0.proxy_B1_JCLOSE +;; #ALIAS# JOPEN = BASIC_0.proxy_B1_JOPEN +;; #ALIAS# JMEMTOP = KERNAL_0.JMEMTOP +;; #ALIAS# JSETFLS = KERNAL_0.JSETFLS +;; #ALIAS# JSETNAM = KERNAL_0.JSETNAM +;; #ALIAS# JGETIN = KERNAL_0.JGETIN +;; #ALIAS# JCHKIN = BASIC_0.proxy_B1_JCHKIN +;; #ALIAS# JCHRIN = BASIC_0.proxy_B1_JCHRIN +;; #ALIAS# JREADST = KERNAL_0.JREADST +;; #ALIAS# JSCREEN = KERNAL_0.JSCREEN +;; #ALIAS# SELDEV = KERNAL_0.SELDEV +;; #ALIAS# init_oldtxt = BASIC_0.init_oldtxt +;; #ALIAS# tmpstr_free_all_reset = BASIC_0.tmpstr_free_all_reset +;; #ALIAS# print_hex_byte = BASIC_0.proxy_B1_print_hex_byte +;; #ALIAS# print_integer = BASIC_0.proxy_B1_print_integer +;; #ALIAS# print_return = BASIC_0.proxy_B1_print_return +;; #ALIAS# print_space = BASIC_0.proxy_B1_print_space +;; #ALIAS# print_features = BASIC_0.proxy_B1_print_features +;; #ALIAS# do_error_fetch = BASIC_0.do_error_fetch +;; #ALIAS# do_basic_error = BASIC_0.do_basic_error +;; #ALIAS# str_rev_question = BASIC_0.str_rev_question +;; #ALIAS# fetch_character = BASIC_0.proxy_B1_fetch_character +;; #ALIAS# fetch_character_skip_spaces = BASIC_0.proxy_B1_fetch_character_skip_spaces +;; #ALIAS# fetch_uint8 = BASIC_0.proxy_B1_fetch_uint8 +;; #ALIAS# shell_main_loop = BASIC_0.proxy_B1_shell_main_loop diff --git a/src/basic/board_crt/crt_proxies.s b/src/basic/board_crt/crt_proxies.s new file mode 100644 index 00000000..200367c0 --- /dev/null +++ b/src/basic/board_crt/crt_proxies.s @@ -0,0 +1,130 @@ +;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# * * #IGNORE + +; +; Proxies for calling segment BASIC_0 and KERNAL_0 routines from BASIC_1 +; + +proxy_B1_peek_via_OLDTXT: + + jsr map_NORMAL + +!ifdef CONFIG_MEMORY_MODEL_60K { + !error "not implemented" +} else ifdef CONFIG_MEMORY_MODEL_46K_OR_50K { + jsr peek_under_roms_via_OLDTXT + cmp #$00 +} else { ; CONFIG_MEMORY_MODEL_38K + lda (OLDTXT),y +} + jmp map_BASIC_1 ; do not do 'bra' - we want this one as fast as possible + + +proxy_B1_poke_via_OLDTXT: + + jsr map_NORMAL +!ifdef CONFIG_MEMORY_MODEL_60K { + !error "not implemented" +} else { ; CONFIG_MEMORY_MODEL_38K || CONFIG_MEMORY_MODEL_46K || CONFIG_MEMORY_MODEL_50K + sta (OLDTXT),y +} + + jmp map_BASIC_1 + + +proxy_B1_JCLALL: + + jsr map_NORMAL + jsr JCLALL + jmp map_BASIC_1 + + +!ifdef CONFIG_DOS_WEDGE { + +proxy_B1_JCLOSE: + + jsr map_NORMAL + jsr JCLOSE + jmp map_BASIC_1 + +proxy_B1_JOPEN: + + jsr map_NORMAL + jsr JOPEN + jmp map_BASIC_1 +} + +proxy_B1_JCHKIN: + + jsr map_NORMAL + jsr JCHKIN + jmp map_BASIC_1 + +proxy_B1_JCHRIN: + + jsr map_NORMAL + jsr JCHRIN + jmp map_BASIC_1 + +proxy_B1_JCHROUT: + + jsr map_NORMAL + jsr JCHROUT + jmp map_BASIC_1 + +proxy_B1_print_hex_byte: + + jsr map_NORMAL + jsr print_hex_byte + jmp map_BASIC_1 + +proxy_B1_print_integer: + + jsr map_NORMAL + jsr print_integer + jmp map_BASIC_1 + +proxy_B1_print_return: + + jsr map_NORMAL + jsr print_return + jmp map_BASIC_1 + +proxy_B1_print_space: + + jsr map_NORMAL + jsr print_space + jmp map_BASIC_1 + +proxy_B1_plot_set: + + jsr map_NORMAL + jsr plot_set + jmp map_BASIC_1 + +!ifdef CONFIG_DOS_WEDGE { + +proxy_B1_fetch_character: + + jsr map_NORMAL + jsr fetch_character + jmp map_BASIC_1 + +proxy_B1_fetch_character_skip_spaces: + + jsr map_NORMAL + jsr fetch_character_skip_spaces + jmp map_BASIC_1 + +proxy_B1_fetch_uint8: + + jsr map_NORMAL + jsr fetch_uint8 + jmp map_BASIC_1 + +proxy_B1_shell_main_loop: + + jsr map_NORMAL + jmp shell_main_loop +} + diff --git a/src/basic/board_crt/dummy.s b/src/basic/board_crt/dummy.s deleted file mode 100644 index 3a3e191e..00000000 --- a/src/basic/board_crt/dummy.s +++ /dev/null @@ -1,4 +0,0 @@ -;; #LAYOUT# CRT BASIC_1 #TAKE -;; #LAYOUT# * * #IGNORE - - +nop diff --git a/src/basic/engine_editor/a533.linkprg.s b/src/basic/engine_editor/a533.linkprg.s index 8679e6a2..3e518f9e 100644 --- a/src/basic/engine_editor/a533.linkprg.s +++ b/src/basic/engine_editor/a533.linkprg.s @@ -1,5 +1,6 @@ ;; #LAYOUT# STD * #TAKE ;; #LAYOUT# CRT BASIC_0 #TAKE +;; #LAYOUT# CRT BASIC_1 #TAKE-FLOAT ;; #LAYOUT# M65 BASIC_0 #TAKE ;; #LAYOUT# M65 BASIC_1 #TAKE-FLOAT ;; #LAYOUT# X16 BASIC_0 #TAKE-OFFSET 2000 @@ -20,6 +21,12 @@ LINKPRG: jsr (VB1__LINKPRG) jmp map_NORMAL +} else ifdef SEGMENT_CRT_BASIC_0 { + + jsr map_BASIC_1 + jsr JB1__LINKPRG + jmp map_NORMAL + } else { ; Start by getting pointer to the first line @@ -31,6 +38,8 @@ linkprg_loop: !ifdef CONFIG_MB_M65 { jsr peek_via_OLDTXT +} else ifdef ROM_LAYOUT_CRT { + jsr peek_via_OLDTXT } else ifdef CONFIG_MEMORY_MODEL_60K { ldx #