adapted BASIC to CRT memory layout, updated binaries

This commit is contained in:
FeralChild64 committed 2020-10-23 14:38:14 +02:00
1 parent 222b72cf7e
commit 732ba36d87
54 files changed
+461 -91

No files matched your search

+30 -27
View File
@@ -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
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
+4 -4
View File
@@ -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
+13 -2
View File
@@ -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 }
}
+1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -1,5 +1,5 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_0 #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# X16 BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -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 }
} }
+20 -8
View File
@@ -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
@@ -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
@@ -1,4 +1,5 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# M65 BASIC_1 #TAKE
;; #LAYOUT# X16 BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -1,4 +1,5 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# M65 BASIC_1 #TAKE
;; #LAYOUT# X16 BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -1,4 +1,5 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# M65 BASIC_1 #TAKE
;; #LAYOUT# X16 BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -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
}
}
+1
View File
@@ -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.
+41
View File
@@ -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
+130
View File
@@ -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
}
-4
View File
@@ -1,4 +0,0 @@
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# * * #IGNORE
+nop
+15
View File
@@ -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 #<OLDTXT+0
jsr peek_under_roms
@@ -55,6 +64,8 @@ linkprg_end_of_line_search:
!ifdef CONFIG_MB_M65 {
jsr peek_via_OLDTXT
} else ifdef ROM_LAYOUT_CRT {
jsr peek_via_OLDTXT
} else ifdef CONFIG_MEMORY_MODEL_60K {
ldx #<OLDTXT+0
jsr peek_under_roms
@@ -91,6 +102,8 @@ linkprg_end_of_line_search:
!ifdef CONFIG_MB_M65 {
jsr poke_via_OLDTXT
} else ifdef ROM_LAYOUT_CRT {
jsr poke_via_OLDTXT
} else ifdef CONFIG_MEMORY_MODEL_60K {
ldx #<OLDTXT+0
jsr poke_under_roms
@@ -105,6 +118,8 @@ linkprg_end_of_line_search:
!ifdef CONFIG_MB_M65 {
jsr poke_via_OLDTXT
} else ifdef ROM_LAYOUT_CRT {
jsr poke_via_OLDTXT
} else ifdef CONFIG_MEMORY_MODEL_60K {
jsr poke_under_roms
} else {
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+9 -1
View File
@@ -1,6 +1,8 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_0 #TAKE
;; #LAYOUT# M65 * #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# M65 BASIC_0 #TAKE
;; #LAYOUT# M65 BASIC_1 #TAKE
;; #LAYOUT# X16 BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -20,6 +22,12 @@ tokenise_line:
jsr (VB1__tokenise_line)
jmp map_NORMAL
} else ifdef SEGMENT_CRT_BASIC_0 {
jsr map_BASIC_1
jsr JB1__tokenise_line
jmp map_NORMAL
} else {
; Initialize variables
+9 -3
View File
@@ -1,4 +1,5 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# M65 BASIC_1 #TAKE
;; #LAYOUT# * BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -46,6 +47,8 @@ do_kernal_error: ; .A = KERNAL error code, also almost mat
dex
!ifdef SEGMENT_M65_BASIC_1 {
jmp do_basic_error
} else ifdef SEGMENT_CRT_BASIC_1 {
jmp do_basic_error
} else {
bpl do_basic_error ; branch always
}
@@ -152,9 +155,9 @@ do_TO_MANY_FILES_error:
!byte $EA
!ifdef SEGMENT_M65_BASIC_1 {
jmp do_error_fetch
} else ifdef SEGMENT_CRT_BASIC_1 {
jmp do_error_fetch
} else {
; FALLTROUGH
@@ -185,8 +188,11 @@ do_error_fetch:
do_basic_error: ; error code in .X
!ifdef ROM_LAYOUT_M65 {
; Make sure we are back with normal memory map
!ifdef ROM_LAYOUT_M65 {
jsr map_NORMAL
} else ifdef ROM_LAYOUT_CRT {
jsr map_NORMAL
}
+21 -1
View File
@@ -1,6 +1,8 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_0 #TAKE
;; #LAYOUT# M65 * #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# M65 BASIC_0 #TAKE
;; #LAYOUT# M65 BASIC_1 #TAKE
;; #LAYOUT# X16 BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -33,6 +35,24 @@ do_restore_end:
jmp map_NORMAL
} else ifdef SEGMENT_CRT_BASIC_0 {
jsr map_BASIC_1
jsr JB1__do_new
jmp map_NORMAL
do_clr:
jsr map_BASIC_1
jsr JB1__do_clr
jmp map_NORMAL
do_restore:
jsr map_BASIC_1
jsr JB1__do_restore
jmp map_NORMAL
} else {
; See Computes Mapping the Commodore 64 - page 96
@@ -1,4 +1,5 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# M65 BASIC_1 #TAKE
;; #LAYOUT# * BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -1,4 +1,5 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# M65 BASIC_1 #TAKE
;; #LAYOUT# * BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -15,6 +16,12 @@ prepare_direct_execution:
jsr (VB1__prepare_direct_execution)
jmp map_NORMAL
} else ifdef SEGMENT_CRT_BASIC_0 {
jsr map_BASIC_1
jsr JB1__prepare_direct_execution
jmp map_NORMAL
} else {
; Setup pointer to the statement
+6
View File
@@ -29,6 +29,12 @@ INITMSG_autoswitch:
jsr (VB1__INITMSG_autoswitch)
bra INITMSG_end
} else ifdef ROM_LAYOUT_CRT {
jsr map_BASIC_1
jsr JB1__INITMSG
jmp map_NORMAL
} else {
jmp initmsg_real
+1 -1
View File
@@ -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
+9 -1
View File
@@ -1,5 +1,5 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_0 #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# X16 BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -7,8 +7,16 @@
; Routine is too long to fit in the original location
!ifdef ROM_LAYOUT_CRT {
INITMSG:
} else {
initmsg_real:
}
; Clear the screen first, some cartridges (like IEEE-488) are leaving a mess on the screen
lda #147
jsr JCHROUT
+17 -3
View File
@@ -1,7 +1,7 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_0 #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
@@ -13,6 +13,12 @@ list_single_line:
jsr (VB1__list_single_line)
jmp map_NORMAL
} else ifdef SEGMENT_CRT_BASIC_0 {
jsr map_BASIC_1
jsr JB1__list_single_line
jmp map_NORMAL
} else {
; Print line number - in a new line
@@ -21,6 +27,8 @@ list_single_line:
!ifdef CONFIG_MB_M65 {
jsr peek_via_OLDTXT
} else ifdef ROM_LAYOUT_CRT {
jsr peek_via_OLDTXT
} else ifdef CONFIG_MEMORY_MODEL_60K {
jsr peek_under_roms
} else ifdef CONFIG_MEMORY_MODEL_46K_OR_50K {
@@ -34,6 +42,8 @@ list_single_line:
!ifdef CONFIG_MB_M65 {
jsr peek_via_OLDTXT
} else ifdef ROM_LAYOUT_CRT {
jsr peek_via_OLDTXT
} else ifdef CONFIG_MEMORY_MODEL_60K {
jsr peek_under_roms
} else ifdef CONFIG_MEMORY_MODEL_46K_OR_50K {
@@ -58,6 +68,8 @@ list_print_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 #<OLDTXT
jsr peek_under_roms
@@ -261,6 +273,8 @@ list_fetch_subtoken:
iny
!ifdef CONFIG_MB_M65 {
jsr peek_via_OLDTXT
} else ifdef ROM_LAYOUT_CRT {
jsr peek_via_OLDTXT
} else ifdef CONFIG_MEMORY_MODEL_60K {
ldx #<OLDTXT
jsr peek_under_roms
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+17 -3
View File
@@ -1,7 +1,7 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_0 #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
; This routine prints strings that have been packed using the 'generate_trings' tool.
@@ -22,6 +22,20 @@ print_packed_misc_str:
jsr (VB1__print_packed_misc_str)
jmp map_NORMAL
} else ifdef SEGMENT_CRT_BASIC_0 {
print_packed_error:
jsr map_BASIC_1
jsr JB1__print_packed_error
jmp map_NORMAL
print_packed_misc_str:
jsr map_BASIC_1
jsr JB1__print_packed_misc_str
jmp map_NORMAL
} else {
!ifndef CONFIG_COMPRESSION_LVL_2 {
+1 -1
View File
@@ -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
+7 -1
View File
@@ -1,5 +1,5 @@
;; #LAYOUT# STD * #TAKE
;; #LAYOUT# CRT BASIC_0 #TAKE
;; #LAYOUT# CRT BASIC_1 #TAKE
;; #LAYOUT# M65 BASIC_1 #TAKE
;; #LAYOUT# * BASIC_0 #TAKE
;; #LAYOUT# * * #IGNORE
@@ -18,6 +18,12 @@ wedge_dos:
jsr (VB1__wedge_dos)
jmp map_NORMAL
} else ifdef SEGMENT_CRT_BASIC_0 {
jsr map_BASIC_1
jsr JB1__wedge_dos
jmp map_NORMAL
} else {
; Prepare buffer - finish it with '0'
+12 -11
View File
@@ -200,8 +200,8 @@ const StringEntryList GLOBAL_Keywords_01 = { ListType::KEYWORDS, "keywords_01",
const StringEntryList GLOBAL_Keywords_02 = { ListType::KEYWORDS, "keywords_02",
{
// STD CRT M65 U64 X16
{ false, false, true, false, false, "K02_07", "COLD", }, // Not present in CBM BASIC dialects, but common to some extensions (*)
{ false, false, true, false, false, "K02_08", "MEM", }, // Not present in CBM BASIC dialects, Open ROMs specific
{ false, true, true, false, false, "K02_07", "COLD", }, // Not present in CBM BASIC dialects, but common to some extensions (*)
{ false, true, true, false, false, "K02_08", "MEM", }, // Not present in CBM BASIC dialects, Open ROMs specific
{ false, false, true, false, false, "K02_09", "SYSINFO", }, // Not present in CBM BASIC dialects, Open ROMs specific
// (*) see https://sourceforge.net/p/vice-emu/code/HEAD/tree/trunk/vice/src/petcat.c
@@ -290,7 +290,7 @@ const StringEntryList GLOBAL_MiscStrings = { ListType::STRINGS_BASIC, "misc",
{ true, true, true, true, true, "STR_READY", "\rREADY.\r" }, // https://www.ibm.com/support/knowledgecenter/zosbasics/com.ibm.zos.zconcepts/zconc_whatistsonative.htm https://github.com/stefanhaustein/expressionparser
{ true, true, true, true, true, "STR_ERROR", " ERROR" }, // simply the word error that is attached to the other parts of messages https://fjkraan.home.xs4all.nl/comp/apple2faq/app2asoftfaq.html
{ true, true, true, true, true, "STR_IN", " IN " },
{ false, false, true, false, false, "STR_IF_SURE", "\rARE YOU SURE? " }, // https://docs.microsoft.com/en-us/windows/win32/uxguide/mess-confirm
{ false, true, true, false, false, "STR_IF_SURE", "\rARE YOU SURE? " }, // https://docs.microsoft.com/en-us/windows/win32/uxguide/mess-confirm
// STD CRT M65 U64 X16 --- misc strings specific to Open ROMs, not present in CBM ROMs
{ true, true, true, true, true, "STR_BRK_AT", "\rBRK AT $" },
@@ -298,14 +298,14 @@ const StringEntryList GLOBAL_MiscStrings = { ListType::STRINGS_BASIC, "misc",
{ false, false, true, false, false, "STR_ORS_LEGACY_1", "OPEN ROMS " },
{ false, false, true, false, false, "STR_ORS_LEGACY_2", "\r\rLEGACY MODE " },
{ false, false, true, false, false, "STR_MEM_HDR", "\r\x12 AREA START SIZE \r" },
{ false, false, true, false, false, "STR_MEM_1", " $" },
{ false, false, true, false, false, "STR_MEM_2", " " },
{ false, false, true, false, false, "STR_MEM_TEXT", "\r TEXT" },
{ false, false, true, false, false, "STR_MEM_VARS", "\r VARS" },
{ false, false, true, false, false, "STR_MEM_ARRS", "\r ARRS" },
{ false, false, true, false, false, "STR_MEM_STRS", "\r STRS" },
{ false, false, true, false, false, "STR_MEM_FREE", "\r\r FREE" },
{ false, true, true, false, false, "STR_MEM_HDR", "\r\x12 AREA START SIZE \r" },
{ false, true, true, false, false, "STR_MEM_1", " $" },
{ false, true, true, false, false, "STR_MEM_2", " " },
{ false, true, true, false, false, "STR_MEM_TEXT", "\r TEXT" },
{ false, true, true, false, false, "STR_MEM_VARS", "\r VARS" },
{ false, true, true, false, false, "STR_MEM_ARRS", "\r ARRS" },
{ false, true, true, false, false, "STR_MEM_STRS", "\r STRS" },
{ false, true, true, false, false, "STR_MEM_FREE", "\r\r FREE" },
{ false, false, true, false, false, "STR_SI_HEADER", "OPEN ROMS, " },
{ false, false, true, false, false, "STR_SI_MODE64", "LEGACY MODE" },
@@ -1879,6 +1879,7 @@ void writeStrings()
dataSetCRT.addStrings(GLOBAL_Keywords_V2);
dataSetCRT.addStrings(GLOBAL_Keywords_01);
dataSetCRT.addStrings(GLOBAL_Keywords_02);
dataSetCRT.addStrings(GLOBAL_Errors);
dataSetCRT.addStrings(GLOBAL_MiscStrings);