diff --git a/Makefile b/Makefile index d3ab3700..c220d998 100644 --- a/Makefile +++ b/Makefile @@ -61,9 +61,7 @@ STD_TARGET_LIST_CUSTOM = build/kernal_custom.rom build/basic_custom.rom STD_TARGET_LIST_GENERIC = build/kernal_generic.rom build/basic_generic.rom STD_TARGET_LIST_TESTING = build/kernal_testing.rom build/basic_testing.rom STD_TARGET_LIST_ULTIMATE64 = build/kernal_ultimate64.rom build/basic_ultimate64.rom -STD_TARGET_LIST_MEGA65 = build/kernal_mega65.rom_0 \ - build/kernal_mega65.rom_1 \ - build/basic_mega65.rom_0 +STD_TARGET_LIST_MEGA65 = build/mega65.rom STD_TARGET_LIST = build/chargen.rom \ $(STD_TARGET_LIST_CUSTOM) \ @@ -161,10 +159,6 @@ build/target_mega65/OUTK_0.BIN build/target_mega65/KERNAL_0_combined.vs bu $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ c64/,,config_mega65.s \ $(foreach dir,$(SRCDIR_KERNAL),$(wildcard $(dir)/*.s)) -build/target_mega65/OUTK_1.BIN build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ - c64/,,config_mega65.s \ - $(foreach dir,$(SRCDIR_KERNAL),$(wildcard $(dir)/*.s)) build/target_ultimate64/OUTK.BIN build/target_ultimate64/KERNAL_combined.vs build/target_ultimate64/KERNAL_combined.sym: \ $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ c64/,,config_ultimate64.s \ @@ -222,11 +216,10 @@ build/target_mega65/OUTK_0.BIN build/target_mega65/KERNAL_0_combined.vs build/ta @rm -f $@* build/target_mega65/KERNAL_0* @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_0 -i KERNAL_0-mega65 -o OUTK_0.BIN -d build/target_mega65 -l e4d3 -h ffff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) -build/kernal_mega65.rom_1 build/target_mega65/OUTK_1.BIN build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: $(TOOL_BUILD_SEGMENT) +build/target_mega65/kernal.seg_1 build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: $(TOOL_BUILD_SEGMENT) @mkdir -p build/target_mega65 - @rm -f $@* build/kernal_mega65.rom_1 build/target_mega65/KERNAL_1* - @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_1 -i KERNAL_1-mega65 -o OUTK_1.BIN -d build/target_mega65 -l 4000 -h 5fff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) - @cp build/target_mega65/OUTK_1.BIN build/kernal_mega65.rom_1 + @rm -f $@* build/target_mega65/kernal.seg_1 build/target_mega65/KERNAL_1* + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_1 -i KERNAL_1-mega65 -o kernal.seg_1 -d build/target_mega65 -l 4000 -h 5fff c64/,,config_mega65.s $(SRCDIR_KERNAL) $(GEN_KERNAL) .PRECIOUS: build/target_%/newrom build/target_%/newrom: @@ -267,12 +260,12 @@ build/symbols_hybrid.vs: build/target_generic/KERNAL_combined.vs # Rules - platform 'Mega 65' specific -build/mega65.rom: build/kernal_mega65.rom_0 build/kernal_mega65.rom_1 build/basic_mega65.rom_0 build/chargen.rom +build/mega65.rom: build/kernal_mega65.rom_0 build/target_mega65/kernal.seg_1 build/basic_mega65.rom_0 build/chargen.rom dd if=/dev/zero bs=8192 count=1 of=build/padding_8k dd if=/dev/zero bs=8192 count=8 of=build/padding_64k cat build/padding_8k > build/mega65.rom cat build/padding_8k >> build/mega65.rom - cat build/kernal_mega65.rom_1 >> build/mega65.rom + cat build/target_mega65/kernal.seg_1 >> build/mega65.rom cat build/padding_8k >> build/mega65.rom cat build/padding_8k >> build/mega65.rom cat build/basic_mega65.rom_0 >> build/mega65.rom diff --git a/c64/kernal/banking/4000.mega65_kernal_1.s b/c64/kernal/banking/4000.mega65_jumptable_kernal_1.s similarity index 76% rename from c64/kernal/banking/4000.mega65_kernal_1.s rename to c64/kernal/banking/4000.mega65_jumptable_kernal_1.s index 9f29f67c..001d624e 100644 --- a/c64/kernal/banking/4000.mega65_kernal_1.s +++ b/c64/kernal/banking/4000.mega65_jumptable_kernal_1.s @@ -12,20 +12,15 @@ // Labels for jumps - .label KERNAL_1__TESTROUTINE = $4000 + .label KERNAL_1__RAMTAS = $4000 -#elif +#else // Jumptable (OpenROMs private!) - jmp TESTROUTINE - - -TESTROUTINE: - - rts + jmp RAMTAS #endif diff --git a/c64/kernal/banking/mega65_mapping.s b/c64/kernal/banking/mega65_map_helpers.s similarity index 96% rename from c64/kernal/banking/mega65_mapping.s rename to c64/kernal/banking/mega65_map_helpers.s index 38672f12..0009100f 100644 --- a/c64/kernal/banking/mega65_mapping.s +++ b/c64/kernal/banking/mega65_map_helpers.s @@ -12,6 +12,7 @@ map_NORMAL: + php pha phx phy @@ -33,12 +34,14 @@ map_end: ply plx pla + plp rts map_KERNAL_1: + php pha phx phy diff --git a/c64/kernal/init/fd50.ramtas.s b/c64/kernal/init/fd50.ramtas.s index 9e1b0f9d..cb135a4a 100644 --- a/c64/kernal/init/fd50.ramtas.s +++ b/c64/kernal/init/fd50.ramtas.s @@ -1,4 +1,7 @@ -#if ROM_LAYOUT_STD || (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) +// #LAYOUT# STD * #TAKE +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# M65 KERNAL_1 #TAKE-FLOAT +// #LAYOUT# * * #IGNORE // // Official Kernal routine, described in: @@ -11,6 +14,14 @@ RAMTAS: +#if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) + + jsr map_KERNAL_1 + jsr KERNAL_1__RAMTAS + jmp map_NORMAL + +#else + // C64 Programmers Reference guide p291: // Clear $0000-$0101, $0200-$03ff // PGS: $0000, $0001 are CPU IO ports, so should not get written to @@ -83,5 +94,4 @@ ramtas_32k: ldy #$80 bne !- // branch always - #endif // ROM layout diff --git a/c64/kernal/init/fda3.ioinit.s b/c64/kernal/init/fda3.ioinit.s index f55ac9d3..758b2dab 100644 --- a/c64/kernal/init/fda3.ioinit.s +++ b/c64/kernal/init/fda3.ioinit.s @@ -12,12 +12,6 @@ IOINIT: - // XXX make something useful with this - // - // jsr map_KERNAL_1 - // jsr KERNAL_1__TESTROUTINE - // jsr map_NORMAL - // // First initialize the CPU port, to make sure we have correct memory map // diff --git a/src/build_segment.cc b/src/build_segment.cc index 8ab7d925..2c281c43 100644 --- a/src/build_segment.cc +++ b/src/build_segment.cc @@ -673,12 +673,12 @@ bool SourceFile::preprocessLine(const std::string &line) // Check if segment name and rom layout match - if (iter == tokens.end()) ERROR("syntax error, missing segment name in '#LAYOUT#'"); - if (!nameMatch(*(iter++), CMD_segName)) return true; - if (iter == tokens.end()) ERROR("syntax error, missing rom layout in '#LAYOUT#'"); if (!nameMatch(*(iter++), CMD_romLayout)) return true; + if (iter == tokens.end()) ERROR("syntax error, missing segment name in '#LAYOUT#'"); + if (!nameMatch(*(iter++), CMD_segName)) return true; + // Retrieve and apply action if (iter == tokens.end()) ERROR("syntax error, missing action in '#LAYOUT#'");