From 93927287505688841fef02806486ff5899e5f107 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 20 Dec 2019 17:29:06 +0100 Subject: [PATCH] small build system and config files reorganization --- CONFIG.md | 6 + Makefile | 46 ++++-- bin/basic_generic.rom | Bin 8192 -> 8192 bytes bin/basic_mega65.rom | Bin 8192 -> 0 bytes bin/basic_testing.rom | Bin 8192 -> 8192 bytes bin/basic_ultimate64.rom | Bin 8192 -> 8192 bytes bin/kernal_generic.rom | Bin 8192 -> 8192 bytes bin/kernal_mega65.rom | Bin 8192 -> 0 bytes bin/kernal_testing.rom | Bin 8192 -> 8192 bytes bin/kernal_ultimate64.rom | Bin 8192 -> 8192 bytes bin/{newc65.rom => mega65.rom} | Bin 131072 -> 131072 bytes c64/,,config_custom.s | 133 ++++++++++++++++++ c64/,,config_generic.s | 7 +- c64/,,config_mega65.s | 13 +- c64/,,config_ultimate64.s | 6 +- c64/aliases/,aliases_config.s | 11 +- c64/basic/init/initmsg_real.s | 24 ++++ c64/basic/init/startup_banner.s | 9 +- .../rom_revision/bf52.rom_revision_basic.s | 5 + .../rom_revision/e4b7.rom_revision_kernal.s | 5 + 20 files changed, 224 insertions(+), 41 deletions(-) delete mode 100644 bin/basic_mega65.rom delete mode 100644 bin/kernal_mega65.rom rename bin/{newc65.rom => mega65.rom} (86%) create mode 100644 c64/,,config_custom.s diff --git a/CONFIG.md b/CONFIG.md index 3df98c2d..13effa95 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -3,9 +3,11 @@ It's not possible to provide ROM builds that suit everyone needs - therefore configuration files were introduced, few predefined configurations are provided with sane defaults: +* [`c64/,,config_custom.s`](c64/,,config_custom.s) * [`c64/,,config_generic.s`](c64/,,config_generic.s) * [`c64/,,config_mega65.s`](c64/,,config_mega65.s) * [`c64/,,config_ultimate64.s`](c64/,,config_ultimate64.s) +* [`c64/,,config_testing.s`](c64/,,config_testing.s) Just edit them and recompile the project. To enable particular option - uncomment it by removing leading `//` from before `#define` directive (as you probably guessed, commenting out disables it). Some options are followed by constants - you can change them too to further fine-tune the build. @@ -27,6 +29,10 @@ Since Open ROMs is highly modular, it should be possible to add other platforms Select if the ROM is going to be used exclusively on the specific motherboard. It prevents from enabling options not having sense, skips initialization of C128-only registers, etc. +### `CONFIG_BRAND_CUSTOM` + +Intended for custom builds, which are not to be redistributed. Allows to configure branding with `CONFIG_CUSTOM_BRAND` varaible + ### `CONFIG_BRAND_GENERIC` If you don't know which variant to choose - select this one. diff --git a/Makefile b/Makefile index 39733b14..6e5edbf5 100644 --- a/Makefile +++ b/Makefile @@ -55,13 +55,14 @@ TOOLS_LIST = $(pathsubst src/tools/%,build/tools/%,$(basename $(SRC_TOOLS))) # List of targets -STD_TARGET_LIST = build/kernal_generic.rom build/basic_generic.rom \ +STD_TARGET_LIST = build/kernal_custom.rom build/basic_custom.rom \ + build/kernal_generic.rom build/basic_generic.rom \ build/kernal_testing.rom build/basic_testing.rom \ build/kernal_mega65.rom build/basic_mega65.rom \ build/kernal_ultimate64.rom build/basic_ultimate64.rom \ build/chargen.rom -EXT_TARGET_LIST = build/newc65.rom +EXT_TARGET_LIST = build/mega65.rom REL_TARGET_LIST = $(pathsubst build/%,bin/%, $(STD_TARGET_LIST)) @@ -85,7 +86,7 @@ clean: updatebin: $(MAKE) -j64 --output-sync=target $(STD_TARGET_LIST) $(EXT_TARGET_LIST) $(TOOL_RELEASE) - $(TOOL_RELEASE) -i ./build -o ./bin basic_generic.rom kernal_generic.rom basic_testing.rom kernal_testing.rom basic_mega65.rom kernal_mega65.rom basic_ultimate64.rom kernal_ultimate64.rom newc65.rom + $(TOOL_RELEASE) -i ./build -o ./bin basic_generic.rom kernal_generic.rom basic_testing.rom kernal_testing.rom basic_ultimate64.rom kernal_ultimate64.rom mega65.rom cp build/chargen.rom bin/chargen.rom # Rules - tools @@ -113,6 +114,10 @@ build/chargen.rom: $(TOOL_PNGPREPARE) assets/8x8font.png # Dependencies - BASIC and KERNAL +build/target_custom/OUTB.BIN build/target_custom/BASIC_combined.vs: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_BASIC) $(SRCDIR_BASIC) \ + c64/,,config_custom.s build/target_custom/KERNAL_combined.sym \ + $(foreach dir,$(SRCDIR_BASIC),$(wildcard $(dir)/*.s)) build/target_generic/OUTB.BIN build/target_generic/BASIC_combined.vs: \ $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_BASIC) $(SRCDIR_BASIC) \ c64/,,config_generic.s build/target_generic/KERNAL_combined.sym \ @@ -130,6 +135,10 @@ build/target_ultimate64/OUTB.BIN build/target_ultimate64/BASIC_combined.vs: \ c64/,,config_ultimate64.s build/target_ultimate64/KERNAL_combined.sym \ $(foreach dir,$(SRCDIR_BASIC),$(wildcard $(dir)/*.s)) +build/target_custom/OUTK.BIN build/target_custom/KERNAL_combined.vs build/target_custom/KERNAL_combined.sym: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ + c64/,,config_custom.s \ + $(foreach dir,$(SRCDIR_KERNAL),$(wildcard $(dir)/*.s)) build/target_generic/OUTK.BIN build/target_generic/KERNAL_combined.vs build/target_generic/KERNAL_combined.sym: \ $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(GEN_KERNAL) $(SRCDIR_KERNAL) \ c64/,,config_generic.s \ @@ -147,21 +156,25 @@ build/target_ultimate64/OUTK.BIN build/target_ultimate64/KERNAL_combined.vs bu c64/,,config_ultimate64.s \ $(foreach dir,$(SRCDIR_KERNAL),$(wildcard $(dir)/*.s)) +build/target_custom/newrom: build/target_custom/OUTB.BIN build/target_custom/OUTK.BIN build/target_generic/newrom: build/target_generic/OUTB.BIN build/target_generic/OUTK.BIN build/target_testing/newrom: build/target_testing/OUTB.BIN build/target_testing/OUTK.BIN build/target_mega65/newrom: build/target_mega65/OUTB.BIN build/target_mega65/OUTK.BIN build/target_ultimate64/newrom: build/target_ultimate64/OUTB.BIN build/target_ultimate64/OUTK.BIN +build/kernal_custom.rom: build/target_custom/newrom build/kernal_generic.rom: build/target_generic/newrom build/kernal_testing.rom: build/target_testing/newrom build/kernal_mega65.rom: build/target_mega65/newrom build/kernal_ultimate64.rom: build/target_ultimate64/newrom +build/basic_custom.rom: build/target_custom/newrom build/basic_generic.rom: build/target_generic/newrom build/basic_testing.rom: build/target_testing/newrom build/basic_mega65.rom: build/target_mega65/newrom build/basic_ultimate64.rom: build/target_ultimate64/newrom +build/symbols_custom.vs: build/target_custom/BASIC_combined.vs build/target_custom/KERNAL_combined.vs build/symbols_generic.vs: build/target_generic/BASIC_combined.vs build/target_generic/KERNAL_combined.vs build/symbols_testing.vs: build/target_testing/BASIC_combined.vs build/target_testing/KERNAL_combined.vs build/symbols_mega65.vs: build/target_mega65/BASIC_combined.vs build/target_mega65/KERNAL_combined.vs @@ -215,11 +228,11 @@ build/symbols_hybrid.vs: build/target_generic/KERNAL_combined.vs # Rules - platform 'Mega 65' specific -build/newc65.rom: build/kernal_mega65.rom build/basic_mega65.rom build/chargen.rom - dd if=/dev/zero bs=4096 count=10 of=build/newc65.rom - cat build/basic_mega65.rom build/chargen.rom build/chargen.rom build/kernal_mega65.rom >> build/newc65.rom +build/mega65.rom: build/kernal_mega65.rom build/basic_mega65.rom build/chargen.rom + dd if=/dev/zero bs=4096 count=10 of=build/mega65.rom + cat build/basic_mega65.rom build/chargen.rom build/chargen.rom build/kernal_mega65.rom >> build/mega65.rom dd if=/dev/zero bs=65536 count=1 of=build/padding - cat build/padding >> build/newc65.rom + cat build/padding >> build/mega65.rom rm -f build/padding # Rules - tests @@ -229,7 +242,10 @@ build/newc65.rom: build/kernal_mega65.rom build/basic_mega65.rom build/chargen.r test_ultimate64 \ testremote testsimilarity -test: test_generic +test: test_custom + +test_custom: 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 -1 $(TESTTAPE) -8 $(TESTDISK) test_generic: build/kernal_generic.rom build/basic_generic.rom build/symbols_generic.vs x64 -kernal build/kernal_generic.rom -basic build/basic_generic.rom -moncommands build/symbols_generic.vs -1 $(TESTTAPE) -8 $(TESTDISK) @@ -240,11 +256,11 @@ test_generic_x128: build/kernal_generic.rom build/basic_generic.rom build/symbol test_testing: build/kernal_testing.rom build/basic_testing.rom build/symbols_testing.vs x64 -kernal build/kernal_testing.rom -basic build/basic_testing.rom -moncommands build/symbols_testing.vs -1 $(TESTTAPE) -8 $(TESTDISK) -test_mega65: build/kernal_mega65.rom build/basic_mega65.rom build/symbols_mega65.vs +test_mega65_vice: build/kernal_mega65.rom build/basic_mega65.rom build/symbols_mega65.vs x64 -kernal build/kernal_mega65.rom -basic build/basic_mega65.rom -moncommands build/symbols_mega65.vs -1 $(TESTTAPE) -8 $(TESTDISK) -test_mega65_xemu: build/newc65.rom - ../xemu/build/bin/xmega65.native -dmarev 2 -forcerom -loadrom build/newc65.rom +test_mega65: build/mega65.rom + ../xemu/build/bin/xmega65.native -dmarev 2 -forcerom -loadrom build/mega65.rom test_ultimate64: build/kernal_ultimate64.rom build/basic_ultimate64.rom build/symbols_ultimate64.vs x64 -kernal build/kernal_ultimate64.rom -basic build/basic_ultimate64.rom -moncommands build/symbols_ultimate64.vs -1 $(TESTTAPE) -8 $(TESTDISK) @@ -258,11 +274,11 @@ test_hybrid: build/kernal_hybrid.rom build/symbols_hybrid.vs @echo $(HYBRID_WARNING) @echo -test_m65: build/newc65.rom - m65 -b ../mega65-core/bin/mega65r1.bit -k ../mega65-core/bin/KICKUP.M65 -R build/newc65.rom -4 +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_generic.rom build/basic_generic.rom build/symbols_generic.vs - x64 -kernal build/kernal_generic.rom -basic build/basic_generic.rom -moncommands build/symbols_generic.vs -remotemonitor +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 testsimilarity: build/target_generic/newrom $(TOOL_SIMILARITY) kernal basic $(TOOL_SIMILARITY) kernal build/target_generic/newrom diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index 3dd8d88d25d45ce19ff050158ec953db09c92b2b..e5b98544964b25ca2d62911f6e69e2c72711d294 100644 GIT binary patch delta 177 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 diff --git a/bin/basic_testing.rom b/bin/basic_testing.rom index 8ed4678612985b13e090034ab8d1c08a850cd7f1..0f7c76c66ee5cc893c3a3b3b7498495620c3b465 100644 GIT binary patch delta 64 zcmZp0XmHrz$HJoZ*5|?GAQl}){mu0(YRruKlb5j@at6F#xNo*`kfBD>9G19rB}vFzW)xtU#D!}JU-4ULQpCdbP!1ON!|3>N?Z delta 41 xcmZp0XmHpd&d$>Qo*`kfBD>9G19rB}vFzW)xtUyC!}JU-4UG)VCdbP!1ONy#3>5$X diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index af43bd23b69a0b618e132c1126c67d660cd17f72..06c23b71106b077f3a7cbb12d9e3623754ee5a15 100644 GIT binary patch delta 2545 zcmZ8jdr(x@8Q*&^u^*MBt|!t5kw4-QE$XrP<$mWBpJDTSRT8}Yx~{ZzNYt& zd%ttecfRvIe&6rhn$nt5?+s47hKgRahNAn!q>uZ$klDEDl@-O`FJ85(XvIq#RurpL zJdbaCRQp|qM{}fM+A5C!J3i2eOgefCAi3K}4!ssp8w}3(^BWC)oPY~@WF!*M&a>oXS*4R!!HDV6)duj+BsYtfJqIHZVbl; zxHyP6L~&hM{7ms@OVkn9M_Xs*M>$RblS@CRPo|LlRj4H^v%nTzO^n)k@1&wGg zER{IX&08#3JxD%HdO77S*%K8SJik&b6Pb@V=JOViFJL)it5=EU|QVQ9pF){)2p{9pjJ@xTx+6s=` zOw}#)q~cpqw9${>7(zQ_cssRL{S3ccb${y=->kY{bR?~4r`T((ED(BmSM;E2;NVJ$ zuc~$KJ1Mxf@y!NFqqiAg#_c?HQiK_$R>B=TJY%e^v9pzz@x~#s9`Lk&1pjhGw9^Dn zs*%SnvRSO72_@(Ov883bcsJxx*$%UCyr)K*5F299EuO@$kGOu;e2S&4YYR3(jNPon zd7`{%=b@QmU|FYh&7HK3%RP+Hh;m1kG}k*Zq57{B{SWLpbG7)w8xqB(37Lv^?29m4L-y^6cg2skX zU8Dfa4C!90w#g829UOBSPIH*u4yv_6pP`N@wopqGdUh0hEQ6A)wrUt6;J(5mOw z7H2Pe#+FKwveL*^{gQM?So8s?p!kk3;0o^>C9ftS7VjaYhCGH6-Z1Zn;5fJ+nQ$4v z_ENpBM+%|yVRR{iWM##r_NdGdU2JjE@;kHB6ce@9n4Sfbxj%_&~T#g}02l9c@~$YYmGR>$kJwXZ01V=&RqucGWtd zzhV)yBSr;#|8byHa4R^(duc{$j#b$ASHrVEFMDpsPd`30H-TC21#<0H!vVr1da5KW zdk}Aqf)lreK5(PT&R%PXVH1GG2h5_oP}3(W$Jmgw4rOl0-Et4gu;Q~zZU8Yd(UmlB=9lv5EBPj=6jLZYjC zi!=f;xP+7RTaVdxi1kEBc2@bue_t@a^+OVi1NisBSVM}9(6-}19!?H5g{;zKk2DT~ zOM?~#x>*W6@T5_aVbCK@@Z`@~E7_N)$eFAhcI`O%A}c>1$a|&K`ZbM{cQ%lBZk)X5 z#K^m{tO-|QNW}OX<}TT3D%jo_se)A6lhEWae34VZyGt#p z#Rkfub5wNyNN{_Tpbv2Rq|zb46rfWHXur436;;xb+#`jHl)lB~v?^9HC>I(d_e~{+ z^I=Fvozj{XTc!j}awI8Z=O-a210fy$sH-he;y`N4lmcja3N4%Veg*o+QF};P@7Q!4 zWMK6mj822Xlj9PHznsSRro~=;=CwQe1kk>NR>-lk>p76flZU|Jo4eW+a20}Gr3I)~YyrH9XED64C{nv3ozP!* z6@d!oq9C`s76KBN<(afG>Q)H6iInH%WOPMhRamN517j6H6%_KV&NCL=7{-fdG5rR= zJ%kU;;6KXv?Eq$nfIjh?L2MnxpUYS!V>P*)my^Fv#y^pF7jV0ma=Vvv7=>`}FxL8= Q11=S>QoSDdYMT4*pXm7IasU7T delta 2590 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 diff --git a/bin/kernal_testing.rom b/bin/kernal_testing.rom index d0b82a3c0658b4a5ff12d91b8dc41bb8e181c236..b34d40ec42a4ed660fd394a3b38bcde36374e64b 100644 GIT binary patch delta 2425 zcmYjTdrVYk7N2|Xz|63Y3=d@#g<};2s{*5J(W>B^nr}n9?u$*`UZbgFqPy*GcGq<` z1+#k%HK7cCHqnahbet<(QgqNJUD}f1BgjyVS5S&!ZLN{VnBF^=8JQVOVfNfX6X%cb zp6_wacOJj<`=+*{w!*cJDQaAwkHg+wI9yqQgSM6_qAxS0Owpy?OoW|Rq)6q^7k9S8 zCvA{5>RF_JixeoL?-;kQ*b=MyrM6}3Z&sG9DRDT8S8m(9vczEEd9v=I;g~1w!O!Gb zE#jS|LCtuQ)X_)A6;^Z9+kb9=2lp^Z8K*f(OREn@y>!)3tHW(*=eE9o;Z_2-FSMWDA6%LPU znx+JUQTlOGi38Sa`ORXppOq(gPu$JHt>HTPX|Ftig2w{uR6natx($z-WfdpAa)hUW zjLMqRBk;rouLsG8BdD4UIDftb-e-HbqHk-i?84NRnQdX}*>}2qYDOD#r=QCoQ723? zr$$VC+k~ksz|>Ee+9IZap&nQGt55G%iagr4gzl8fLsfs&wffkwUYj$bA+n6$6AFfa4aJ_HNXHHR{dBdD{13nJeQSl?tB|;)RERRvn@CtlugxgMt{Wo<>vRZNV@03B52G zY3ZpezTAG>4_dV6KRxKP>^5j$p@PSF->7M`dTlZ29Y;0tUZ68uYwfgXG-`R3iPKdn zt23{wh{zpkM>T8VVS6Mox%AJJRyGSAyuo|^N*tqc%n^Aw4u95LC^uqx zK=v^j{mHthwDhShT3CZFV(iU{rf^M)&AhY43FQ&&I}}Jp#xex^woX zw>E}GP7tpu-jLJ8Te211y(!#+coYrYTfgsF;5(qm)T6caR&s+Vdu= zrg^rth(F$zpZ>g}`-U-q9V+=th~7(Dx=?zrzJZmrdKasQDBO_Zp5!wW`|@f1=LTxc z$>PXyg>FpCVc!kV-Dz|3F&2zy=VMP=!l6`j2+AVR8G{Oa$77NVm9ULAr2*4PJJWKK z6L62wAJR%|K!?^&wPO#frOvcL^TC zNjFE`Rc%Mv#;^p9x9hr=${~6tGdJnzBpeJ}x|~_cum=M)Hs{yb&j_>}-w$4V;vbSH z#jw9iOF=%M&bj|aRuLO*Mk#LR%OnHu9q71cuyIn=a%rh>mxue4^pz9KggSw}9kfvr; zz+UCtAlA1|IoB`SyaQTE_W){%caiD#1a#N_lr=9K&FDJa{iubVSJ8dbwhp^54}GR* zvvy`XRHv3z>0#Y0%o=u9;#=cHj!5#n4Gx-SFK3468}@?gme?VLr7IZ@PvaLp)dA@- z$tLlv#=*s)=-nZBeaQ$^k};`67&{-&5T(~P^t(iN+04CitXS_n?9@YvLSdB<%kGTV zjwffnIW+8M@Y!s<*wd9Hb0{I_2jR&mEFSYc#8y5HW5fFX)vc#dMwEnb)`|xnot8P` zA0z!^V!v%p_W+i`APhiV_*oTDq7Url^n-Z~^xFJlX6L1e`70TwhAvrfjZIhS;{_#* zlP*{&Cp9ZXjMJ00)if`sK;Np$5f}%(o3p6Yp?V7OJwlo^X({3bOp;BZBkF6+`6 z+f7d~9wA&D<;(c*#z9}sePw==(s7XW^K!EO#C{q|n&B~gt*Yt2a+hUvDx^sz>?pDf yIT9k*Rq`Y4$X&doMj;240|nfHW!!<~9Qi~e{wE}5*!@3`fj1c5S0DbwJ^nvQAf65Y delta 2429 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 BjQ0Ql diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index 79bef138456baf1b47def4399908a21380457d6c..c1d6bd4f784c0e5a545a616f47e65149d7d4d0de 100644 GIT binary patch delta 2667 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 X_}>FKwa;og4%{`Ov| diff --git a/bin/newc65.rom b/bin/mega65.rom similarity index 86% rename from bin/newc65.rom rename to bin/mega65.rom index 2da9301940c75b4c5f85826232f7d713413e9c42..aad0e85b415a32877f5999afabfa54fa5d9c9f51 100644 GIT binary patch delta 5478 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 delta 5550 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 Mt5f%RjXL&!0n>S$9RL6T diff --git a/c64/,,config_custom.s b/c64/,,config_custom.s new file mode 100644 index 00000000..b3e0bc11 --- /dev/null +++ b/c64/,,config_custom.s @@ -0,0 +1,133 @@ + +.const CONFIG_ID = $00 // should be 1 byte, different for each config file! +.encoding "petscii_upper" + +// +// Please read CONFIG.md before modifying this file! +// + +// Idea: +// - configuration for custom builds and for development +// - file contains options to enable unfinished functionalities + + +// Hardware platform and brand + +#define CONFIG_PLATFORM_COMMODORE_64 + +// #define CONFIG_MB_MEGA_65 +// #define CONFIG_MB_ULTIMATE_64 + +#define CONFIG_BRAND_CUSTOM_BUILD +// #define CONFIG_BRAND_GENERIC +// #define CONFIG_BRAND_TESTING +// #define CONFIG_BRAND_MEGA_65 +// #define CONFIG_BRAND_ULTIMATE_64 + +.const CONFIG_CUSTOM_BRAND = @"CUSTOM BUILD" + + +// Processor instruction set + +#define CONFIG_CPU_MOS_6502 +// #define CONFIG_CPU_WDC_65C02 +// #define CONFIG_CPU_CSG_65CE02 +// #define CONFIG_CPU_WDC_65816 + + +// Memory model + +#define CONFIG_MEMORY_MODEL_38K +// #define CONFIG_MEMORY_MODEL_60K + + +// I/O devices + +#define CONFIG_IEC +#define CONFIG_IEC_BLANK_SCREEN +// #define CONFIG_IEC_DOLPHINDOS // please keep disabled for now +#define CONFIG_IEC_JIFFYDOS + +#define CONFIG_TAPE_NORMAL // not finished yet! +#define CONFIG_TAPE_TURBO + +// #define CONFIG_RS232_UP2400 // please keep disabled for now +// #define CONFIG_RS232_UP9600 // please keep disabled for now + + +// Multiple SID support + +// #define CONFIG_SID_2ND +.const CONFIG_SID_2ND_ADDRESS = $D420 + +// #define CONFIG_SID_3RD +.const CONFIG_SID_3RD_ADDRESS = $D440 + +// #define CONFIG_SID_D4XX +// #define CONFIG_SID_D5XX + + +// Keyboard settings + +// #define CONFIG_LEGACY_SCNKEY +// #define CONFIG_KEYBOARD_C128 +// #define CONFIG_KEYBOARD_C128_CAPS_LOCK +// #define CONFIG_KEYBOARD_C65 // untested +// #define CONFIG_KEYBOARD_C65_CAPS_LOCK // untested +// #define CONFIG_KEY_REPEAT_DEFAULT +// #define CONFIG_KEY_REPEAT_ALWAYS +#define CONFIG_KEY_FAST_SCAN +#define CONFIG_JOY1_CURSOR +#define CONFIG_JOY2_CURSOR + +#define CONFIG_PROGRAMMABLE_KEYS + +.const CONFIG_KEYCMD_RUN = @"\$5FL" + +.const CONFIG_KEYCMD_F1 = @"@" +.const CONFIG_KEYCMD_F2 = @"" +.const CONFIG_KEYCMD_F3 = @"RUN:" +.const CONFIG_KEYCMD_F4 = @"" +.const CONFIG_KEYCMD_F5 = @"LOAD" +.const CONFIG_KEYCMD_F6 = @"" +.const CONFIG_KEYCMD_F7 = @"@$" +.const CONFIG_KEYCMD_F8 = @"" + +.const CONFIG_KEYCMD_HELP = @"LIST" + +.const CONFIG_KEYCMD_F9 = @"" +.const CONFIG_KEYCMD_F10 = @"" +.const CONFIG_KEYCMD_F11 = @"" +.const CONFIG_KEYCMD_F12 = @"" +.const CONFIG_KEYCMD_F13 = @"" +.const CONFIG_KEYCMD_F14 = @"" + + +// Screen editor + +#define CONFIG_EDIT_STOPQUOTE +#define CONFIG_EDIT_TABULATORS + + +// Software features + +#define CONFIG_PANIC_SCREEN +#define CONFIG_DOS_WEDGE +#define CONFIG_TAPE_WEDGE +#define CONFIG_BCD_SAFE_INTERRUPTS + + +// Eye candy + +// #define CONFIG_COLORS_BRAND +// #define CONFIG_BANNER_SIMPLE +#define CONFIG_BANNER_FANCY +// #define CONFIG_BANNER_BRAND +#define CONFIG_SHOW_FEATURES +#define CONFIG_SHOW_PAL_NTSC + + +// Debug options + +// #define CONFIG_DBG_STUBS_BRK +// #define CONFIG_DBG_PRINTF diff --git a/c64/,,config_generic.s b/c64/,,config_generic.s index 14803a88..de3116f0 100644 --- a/c64/,,config_generic.s +++ b/c64/,,config_generic.s @@ -1,5 +1,5 @@ -.const CONFIG_ID = $00 // should be 1 byte, different for each config file! +.const CONFIG_ID = $01 // should be 1 byte, different for each config file! .encoding "petscii_upper" // @@ -42,15 +42,10 @@ #define CONFIG_IEC #define CONFIG_IEC_BLANK_SCREEN -// #define CONFIG_IEC_DOLPHINDOS // please keep disabled for now #define CONFIG_IEC_JIFFYDOS -#define CONFIG_TAPE_NORMAL // not finished yet! #define CONFIG_TAPE_TURBO -// #define CONFIG_RS232_UP2400 // please keep disabled for now -// #define CONFIG_RS232_UP9600 // please keep disabled for now - // Multiple SID support diff --git a/c64/,,config_mega65.s b/c64/,,config_mega65.s index 0c04da31..9d1e9de7 100644 --- a/c64/,,config_mega65.s +++ b/c64/,,config_mega65.s @@ -1,5 +1,5 @@ -.const CONFIG_ID = $01 // should be 1 byte, different for each config file! +.const CONFIG_ID = $02 // should be 1 byte, different for each config file! .encoding "petscii_upper" // @@ -9,8 +9,6 @@ // Idea: // - sane defaults for the Mega 65 FPGA computer // - do not enable features which are a significant compatibility risk -// - unless VICE gains Commodore 65 (or at least Flash8 cartridge) emulation support, -// do not enable CPU-specific optimizations; ROMs would be hard to test // Hardware platform and brand @@ -28,9 +26,9 @@ // Processor instruction set -#define CONFIG_CPU_MOS_6502 +// #define CONFIG_CPU_MOS_6502 // #define CONFIG_CPU_WDC_65C02 -// #define CONFIG_CPU_CSG_65CE02 +#define CONFIG_CPU_CSG_65CE02 // #define CONFIG_CPU_WDC_65816 @@ -44,15 +42,10 @@ #define CONFIG_IEC #define CONFIG_IEC_BLANK_SCREEN -// #define CONFIG_IEC_DOLPHINDOS // please keep disabled for now #define CONFIG_IEC_JIFFYDOS -// #define CONFIG_TAPE_NORMAL // please keep disabled for now // #define CONFIG_TAPE_TURBO -// #define CONFIG_RS232_UP2400 // please keep disabled for now -// #define CONFIG_RS232_UP9600 // please keep disabled for now - // Multiple SID support diff --git a/c64/,,config_ultimate64.s b/c64/,,config_ultimate64.s index 1ba117be..08741cab 100644 --- a/c64/,,config_ultimate64.s +++ b/c64/,,config_ultimate64.s @@ -1,5 +1,5 @@ -.const CONFIG_ID = $02 // should be 1 byte, different for each config file! +.const CONFIG_ID = $03 // should be 1 byte, different for each config file! .encoding "petscii_upper" // @@ -42,14 +42,10 @@ #define CONFIG_IEC #define CONFIG_IEC_BLANK_SCREEN -// #define CONFIG_IEC_DOLPHINDOS // please keep disabled for now #define CONFIG_IEC_JIFFYDOS -// #define CONFIG_TAPE_NORMAL // please keep disabled for now #define CONFIG_TAPE_TURBO -// #define CONFIG_RS232_UP2400 // please keep disabled for now -// #define CONFIG_RS232_UP9600 // please keep disabled for now // Multiple SID support diff --git a/c64/aliases/,aliases_config.s b/c64/aliases/,aliases_config.s index f0b303ae..7ed7990a 100644 --- a/c64/aliases/,aliases_config.s +++ b/c64/aliases/,aliases_config.s @@ -47,6 +47,9 @@ { .var selected = 0; +#if CONFIG_BRAND_CUSTOM_BUILD + .eval selected++ +#endif #if CONFIG_BRAND_GENERIC .eval selected++ #endif @@ -62,11 +65,11 @@ .if (selected != 1) .error "Please select exactly one CONFIG_BRAND_* option" -#if CONFIG_MB_MEGA_65 && !(CONFIG_BRAND_MEGA_65 || CONFIG_BRAND_TESTING) - .error "Please select brand either matching the CONFIG_MB_*, or a testing one" +#if CONFIG_MB_MEGA_65 && !(CONFIG_BRAND_MEGA_65 || CONFIG_BRAND_TESTING || CONFIG_BRAND_CUSTOM_BUILD) + .error "Please select brand either matching the CONFIG_MB_*, or a testing/custom one" #endif -#if CONFIG_MB_ULTIMATE_64 && !(CONFIG_BRAND_ULTIMATE_64 || CONFIG_BRAND_TESTING) - .error "Please select brand either matching the CONFIG_MB_*, or a testing one" +#if CONFIG_MB_ULTIMATE_64 && !(CONFIG_BRAND_ULTIMATE_64 || CONFIG_BRAND_TESTING || CONFIG_BRAND_CUSTOM_BUILD) + .error "Please select brand either matching the CONFIG_MB_*, or a testing/custom one" #endif } diff --git a/c64/basic/init/initmsg_real.s b/c64/basic/init/initmsg_real.s index e919ae04..923b74a6 100644 --- a/c64/basic/init/initmsg_real.s +++ b/c64/basic/init/initmsg_real.s @@ -10,6 +10,8 @@ initmsg_real: ldy #>startup_banner jsr STROUT +#if !CONFIG_BRAND_CUSTOM_BUILD + ldx #$01 ldy #$04 jsr plot_set @@ -18,13 +20,23 @@ initmsg_real: ldy #>rom_revision_basic_string jsr STROUT +#endif // no CONFIG_BRAND_CUSTOM_BUILD + +#if !CONFIG_BRAND_CUSTOM_BUILD ldx #$03 +#else + ldx #$02 +#endif ldy #$04 jsr plot_set jsr initmsg_bytes_free +#if !CONFIG_BRAND_CUSTOM_BUILD ldx #$06 +#else + ldx #$05 +#endif ldy #$00 #if CONFIG_SHOW_PAL_NTSC && CONFIG_SHOW_FEATURES jsr plot_set @@ -54,6 +66,8 @@ initmsg_real: ldy #>startup_banner jsr STROUT +#if !CONFIG_BRAND_CUSTOM_BUILD + ldx #$01 ldy #$0A jsr plot_set @@ -66,13 +80,23 @@ initmsg_real: ldy #>rom_revision_basic_string jsr STROUT +#endif // no CONFIG_BRAND_CUSTOM_BUILD + +#if !CONFIG_BRAND_CUSTOM_BUILD ldx #$03 +#else + ldx #$02 +#endif ldy #$0A jsr plot_set jsr initmsg_bytes_free +#if !CONFIG_BRAND_CUSTOM_BUILD ldx #$06 +#else + ldx #$05 +#endif ldy #$00 #if CONFIG_SHOW_PAL_NTSC && CONFIG_SHOW_FEATURES jsr plot_set diff --git a/c64/basic/init/startup_banner.s b/c64/basic/init/startup_banner.s index 8736df64..7543ef0a 100644 --- a/c64/basic/init/startup_banner.s +++ b/c64/basic/init/startup_banner.s @@ -8,7 +8,10 @@ .macro BANNER_TEXT() { -#if CONFIG_BRAND_GENERIC +#if CONFIG_BRAND_CUSTOM_BUILD + .text "OPEN ROMS " + .text CONFIG_CUSTOM_BRAND +#elif CONFIG_BRAND_GENERIC .text "OPEN ROMS GENERIC BUILD" #elif CONFIG_BRAND_TESTING .text "OPEN ROMS TESTING BUILD" @@ -61,11 +64,15 @@ rainbow_logo: .byte SET_COLOR_0, $00 } +#if !CONFIG_BRAND_CUSTOM_BUILD + pre_revision_string: .text "RELEASE " .byte $00 +#endif // no CONFIG_BRAND_CUSTOM_BUILD + #elif CONFIG_BANNER_BRAND && CONFIG_BRAND_MEGA_65 // Fancy Mega65 banner - from Retrofan diff --git a/c64/basic/rom_revision/bf52.rom_revision_basic.s b/c64/basic/rom_revision/bf52.rom_revision_basic.s index 30c9e65d..8fe574c8 100644 --- a/c64/basic/rom_revision/bf52.rom_revision_basic.s +++ b/c64/basic/rom_revision/bf52.rom_revision_basic.s @@ -21,7 +21,12 @@ rom_revision_basic_string: // $BF55 +#if !CONFIG_BRAND_CUSTOM_BUILD .text "(DEVEL SNAPSHOT)" // actual ROM revision string; up to 16 characters +#else + .text "(CUSTOM BUILD)" +#endif + .byte $00 // marks the end of string __rom_revision_basic_end: diff --git a/c64/basic/rom_revision/e4b7.rom_revision_kernal.s b/c64/basic/rom_revision/e4b7.rom_revision_kernal.s index 996baeec..e98bb1a8 100644 --- a/c64/basic/rom_revision/e4b7.rom_revision_kernal.s +++ b/c64/basic/rom_revision/e4b7.rom_revision_kernal.s @@ -35,7 +35,12 @@ rom_revision_kernal_string: // $E4BC +#if !CONFIG_BRAND_CUSTOM_BUILD .text "(DEVEL SNAPSHOT)" // actual ROM revision string; up to 16 characters +#else + .text "(CUSTOM BUILD)" +#endif + .byte $00 // marks the end of string __rom_revision_kernal_end: