From c41316d482b7aeab4c544572a9c531a560da1940 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 28 Jan 2020 17:44:45 +0100 Subject: [PATCH] updated documentation, makefile, and binaries --- CONFIG.md | 6 +- Makefile | 150 +++++++++++++++++++++----------------- bin/basic_generic.rom | Bin 8192 -> 8192 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_testing.rom | Bin 8192 -> 8192 bytes bin/kernal_ultimate64.rom | Bin 8192 -> 8192 bytes bin/mega65.rom | Bin 131072 -> 131072 bytes doc/Development.md | 10 +-- 10 files changed, 93 insertions(+), 73 deletions(-) diff --git a/CONFIG.md b/CONFIG.md index a9236166..fd47a97c 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -113,7 +113,7 @@ Uses RAM under BASIC, I/O and KERNAL, takes over `$C000`-`$CFFF` area requires s Comparing to standard memory model, it needs about 180 bytes in BASIC segment and 80 bytes in KERNAL segment - at the moment of doing the test, these values are expected to change often. -## I/O devices +## IEC devices ### `CONFIG_IEC` @@ -143,6 +143,10 @@ Needs about 430 bytes in KERNAL segment. If unsure - enable. Causes screen blanking during JiffyDOS file loading to increase performance. +## Tape support + +Note: for Mega65 most of the tape support code is placed in it's extended ROM; very little of the (tiny) KERNAL segment is used. + ### `CONFIG_TAPE_NORMAL` Adds a minimal normal (standard Commodore format) tape support - just LOAD command. diff --git a/Makefile b/Makefile index 349c9d0a..439cf4d0 100644 --- a/Makefile +++ b/Makefile @@ -44,6 +44,22 @@ SRC_TOOLS = $(wildcard src/tools/*.c,src/tools/*.cc) GEN_BASIC = build/,generated/packed_messages.s GEN_KERNAL = +# List of build directories + +DIR_CUSTOM = build/target_custom +DIR_GENERIC = build/target_generic +DIR_TESTING = build/target_testing +DIR_MEGA65 = build/target_mega65 +DIR_ULTIMATE64 = build/target_ultimate64 + +# List of config files + +CFG_CUSTOM = c64/,,config_custom.s +CFG_GENERIC = c64/,,config_generic.s +CFG_TESTING = c64/,,config_testing.s +CFG_MEGA65 = c64/,,config_mega65.s +CFG_ULTIMATE64 = c64/,,config_ultimate64.s + # Dependencies - helper variables DEP_BASIC = $(SRC_BASIC) $(SRCDIR_BASIC) $(GEN_BASIC) @@ -128,54 +144,54 @@ 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) $(DEP_BASIC) c64/,,config_custom.s build/target_custom/KERNAL_combined.sym -build/target_generic/OUTB.BIN build/target_generic/BASIC_combined.vs: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_BASIC) c64/,,config_generic.s build/target_generic/KERNAL_combined.sym -build/target_testing/OUTB.BIN build/target_testing/BASIC_combined.vs: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_BASIC) c64/,,config_testing.s build/target_testing/KERNAL_combined.sym -build/target_mega65/OUTB_0.BIN build/target_mega65/BASIC_0_combined.vs: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_BASIC) c64/,,config_mega65.s build/target_mega65/KERNAL_0_combined.sym -build/target_ultimate64/OUTB.BIN build/target_ultimate64/BASIC_combined.vs: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_BASIC) c64/,,config_ultimate64.s build/target_ultimate64/KERNAL_combined.sym +$(DIR_CUSTOM)/OUTB.BIN $(DIR_CUSTOM)/BASIC_combined.vs: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_BASIC) $(CFG_CUSTOM) $(DIR_CUSTOM)/KERNAL_combined.sym +$(DIR_GENERIC)/OUTB.BIN $(DIR_GENERIC)/BASIC_combined.vs: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_BASIC) $(CFG_GENERIC) $(DIR_GENERIC)/KERNAL_combined.sym +$(DIR_TESTING)/OUTB.BIN $(DIR_TESTING)/BASIC_combined.vs: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_BASIC) $(CFG_TESTING) $(DIR_TESTING)/KERNAL_combined.sym +$(DIR_MEGA65)/OUTB_0.BIN $(DIR_MEGA65)/BASIC_0_combined.vs: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_BASIC) $(CFG_MEGA65) $(DIR_MEGA65)/KERNAL_0_combined.sym +$(DIR_ULTIMATE64)/OUTB.BIN $(DIR_ULTIMATE64)/BASIC_combined.vs: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_BASIC) $(CFG_ULTIMATE64) $(DIR_ULTIMATE64)/KERNAL_combined.sym -build/target_custom/OUTK.BIN build/target_custom/KERNAL_combined.vs build/target_custom/KERNAL_combined.sym: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) c64/,,config_custom.s -build/target_generic/OUTK.BIN build/target_generic/KERNAL_combined.vs build/target_generic/KERNAL_combined.sym: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) c64/,,config_generic.s -build/target_testing/OUTK.BIN build/target_testing/KERNAL_combined.vs build/target_testing/KERNAL_combined.sym: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) c64/,,config_testing.s -build/target_mega65/OUTK_0.BIN build/target_mega65/KERNAL_0_combined.vs build/target_mega65/KERNAL_0_combined.sym: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) c64/,,config_mega65.s -build/target_ultimate64/OUTK.BIN build/target_ultimate64/KERNAL_combined.vs build/target_ultimate64/KERNAL_combined.sym: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) c64/,,config_ultimate64.s +$(DIR_CUSTOM)/OUTK.BIN $(DIR_CUSTOM)/KERNAL_combined.vs $(DIR_CUSTOM)/KERNAL_combined.sym: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) $(CFG_CUSTOM) +$(DIR_GENERIC)/OUTK.BIN $(DIR_GENERIC)/KERNAL_combined.vs $(DIR_GENERIC)/KERNAL_combined.sym: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) $(CFG_GENERIC) +$(DIR_TESTING)/OUTK.BIN $(DIR_TESTING)KERNAL_combined.vs $(DIR_TESTING)/KERNAL_combined.sym: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) $(CFG_TESTING) +$(DIR_MEGA65)/OUTK_0.BIN $(DIR_MEGA65)/KERNAL_0_combined.vs $(DIR_MEGA65)/KERNAL_0_combined.sym: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) $(CFG_MEGA65) +$(DIR_ULTIMATE64)/OUTK.BIN $(DIR_ULTIMATE64)/KERNAL_combined.vs $(DIR_ULTIMATE64)/KERNAL_combined.sym: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) $(CFG_ULTIMATE64) -build/target_mega65/kernal.seg_1 build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: \ - $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) c64/,,config_mega65.s +$(DIR_MEGA65)/kernal.seg_1 $(DIR_MEGA65)/KERNAL_1_combined.vs $(DIR_MEGA65)/KERNAL_1_combined.sym: \ + $(TOOL_ASSEMBLER) $(TOOL_BUILD_SEGMENT) $(DEP_KERNAL) $(CFG_MEGA65) $(DIR_MEGA65)/KERNAL_0_combined.sym -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_0: build/target_mega65/OUTB_0.BIN build/target_mega65/OUTK_0.BIN -build/target_ultimate64/newrom: build/target_ultimate64/OUTB.BIN build/target_ultimate64/OUTK.BIN +$(DIR_CUSTOM)/newrom: $(DIR_CUSTOM)/OUTB.BIN $(DIR_CUSTOM)/OUTK.BIN +$(DIR_GENERIC)/newrom: $(DIR_GENERIC)/OUTB.BIN $(DIR_GENERIC)/OUTK.BIN +$(DIR_TESTING)/newrom: $(DIR_TESTING)/OUTB.BIN $(DIR_TESTING)/OUTK.BIN +$(DIR_MEGA65)/newrom_0: $(DIR_MEGA65)/OUTB_0.BIN $(DIR_MEGA65)/OUTK_0.BIN +$(DIR_ULTIMATE64)/newrom: $(DIR_ULTIMATE64)/OUTB.BIN $(DIR_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_0: build/target_mega65/newrom_0 -build/kernal_ultimate64.rom: build/target_ultimate64/newrom +build/kernal_custom.rom: $(DIR_CUSTOM)/newrom +build/kernal_generic.rom: $(DIR_GENERIC)/newrom +build/kernal_testing.rom: $(DIR_TESTING)/newrom +build/kernal_mega65.rom_0: $(DIR_MEGA65)/newrom_0 +build/kernal_ultimate64.rom: $(DIR_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_0: build/target_mega65/newrom_0 -build/basic_ultimate64.rom: build/target_ultimate64/newrom +build/basic_custom.rom: $(DIR_CUSTOM)/newrom +build/basic_generic.rom: $(DIR_GENERIC)/newrom +build/basic_testing.rom: $(DIR_TESTING)/newrom +build/basic_mega65.rom_0: $(DIR_MEGA65)/newrom_0 +build/basic_ultimate64.rom: $(DIR_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_0.vs: build/target_mega65/BASIC_0_combined.vs build/target_mega65/KERNAL_0_combined.vs -build/symbols_ultimate64.vs: build/target_ultimate64/BASIC_combined.vs build/target_ultimate64/KERNAL_combined.vs +build/symbols_custom.vs: $(DIR_CUSTOM)/BASIC_combined.vs $(DIR_CUSTOM)/KERNAL_combined.vs +build/symbols_generic.vs: $(DIR_GENERIC)/BASIC_combined.vs $(DIR_GENERIC)/KERNAL_combined.vs +build/symbols_testing.vs: $(DIR_TESTING)/BASIC_combined.vs $(DIR_TESTING)/KERNAL_combined.vs +build/symbols_mega65_0.vs: $(DIR_MEGA65)/BASIC_0_combined.vs $(DIR_MEGA65)/KERNAL_0_combined.vs +build/symbols_ultimate64.vs: $(DIR_ULTIMATE64)/BASIC_combined.vs $(DIR_ULTIMATE64)/KERNAL_combined.vs # Rules - BASIC and KERNAL @@ -195,20 +211,20 @@ build/target_%/OUTK.BIN build/target_%/KERNAL_combined.vs build/target_%/KERNAL_ @rm -f $@* build/target_$*/KERNAL* @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r STD -s KERNAL -i KERNAL-$* -o OUTK.BIN -d build/target_$* -l e4d3 -h ffff c64/,,config_$*.s $(SRCDIR_KERNAL) $(GEN_KERNAL) -build/target_mega65/OUTB_0.BIN build/target_mega65/BASIC_0_combined.vs: - @mkdir -p build/target_mega65 - @rm -f $@* build/target_mega65/BASIC_0* - @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s BASIC_0 -i BASIC_0-mega65 -o OUTB_0.BIN -d build/target_mega65 -l a000 -h e4d2 c64/,,config_mega65.s $(SRCDIR_BASIC) $(GEN_BASIC) +$(DIR_MEGA65)/OUTB_0.BIN $(DIR_MEGA65)/BASIC_0_combined.vs: + @mkdir -p $(DIR_MEGA65) + @rm -f $@* $(DIR_MEGA65)/BASIC_0* + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s BASIC_0 -i BASIC_0-mega65 -o OUTB_0.BIN -d $(DIR_MEGA65) -l a000 -h e4d2 $(CFG_MEGA65) $(SRCDIR_BASIC) $(GEN_BASIC) -build/target_mega65/OUTK_0.BIN build/target_mega65/KERNAL_0_combined.vs build/target_mega65/KERNAL_0_combined.sym: - @mkdir -p build/target_mega65 - @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) +$(DIR_MEGA65)/OUTK_0.BIN $(DIR_MEGA65)/KERNAL_0_combined.vs $(DIR_MEGA65)/KERNAL_0_combined.sym: + @mkdir -p $(DIR_MEGA65) + @rm -f $@* $(DIR_MEGA65)/KERNAL_0* + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_0 -i KERNAL_0-mega65 -o OUTK_0.BIN -d $(DIR_MEGA65) -l e4d3 -h ffff $(CFG_MEGA65) $(SRCDIR_KERNAL) $(GEN_KERNAL) -build/target_mega65/kernal.seg_1 build/target_mega65/KERNAL_1_combined.vs build/target_mega65/KERNAL_1_combined.sym: - @mkdir -p build/target_mega65 - @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) +$(DIR_MEGA65)/kernal.seg_1 $(DIR_MEGA65)/KERNAL_1_combined.vs $(DIR_MEGA65)/KERNAL_1_combined.sym: + @mkdir -p $(DIR_MEGA65) + @rm -f $@* $(DIR_MEGA65)/kernal.seg_1 $(DIR_MEGA65)/KERNAL_1* + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s KERNAL_1 -i KERNAL_1-mega65 -o kernal.seg_1 -d $(DIR_MEGA65) -l 4000 -h 5fff $(CFG_MEGA65) $(SRCDIR_KERNAL) $(GEN_KERNAL) .PRECIOUS: build/target_%/newrom build/target_%/newrom: @@ -226,35 +242,35 @@ build/basic_%.rom: build/symbols_%.vs: sort build/target_$*/BASIC_combined.vs build/target_$*/KERNAL_combined.vs | uniq | grep -v "__" > $@ -build/target_mega65/newrom_0: - cat build/target_mega65/OUTB_0.BIN build/target_mega65/OUTK_0.BIN > $@ +$(DIR_MEGA65)/newrom_0: + cat $(DIR_MEGA65)/OUTB_0.BIN $(DIR_MEGA65)/OUTK_0.BIN > $@ build/kernal_mega65.rom_0: - dd if=build/target_mega65/newrom_0 bs=8192 count=1 skip=2 of=$@ + dd if=$(DIR_MEGA65)/newrom_0 bs=8192 count=1 skip=2 of=$@ build/basic_mega65.rom_0: - dd if=build/target_mega65/newrom_0 bs=8192 count=1 skip=0 of=$@ + dd if=$(DIR_MEGA65)/newrom_0 bs=8192 count=1 skip=0 of=$@ -build/kernal_hybrid.rom: kernal build/target_generic/OUTK.BIN +build/kernal_hybrid.rom: kernal $(DIR_GENERIC)/OUTK.BIN @echo @echo $(HYBRID_WARNING) @echo (dd if=kernal bs=1140 count=1 skip=0 ; \ echo " > HYBRID ROM, DON'T DISTRIBUTE <" ; \ dd if=kernal bs=1 count=58 skip=1176 ; \ - cat build/target_generic/OUTK.BIN) > $@ + cat $(DIR_GENERIC)/OUTK.BIN) > $@ -build/symbols_hybrid.vs: build/target_generic/KERNAL_combined.vs - sort build/target_generic/KERNAL_combined.vs | uniq | grep -v "__" > $@ +build/symbols_hybrid.vs: $(DIR_GENERIC)/KERNAL_combined.vs + sort $(DIR_GENERIC)/KERNAL_combined.vs | uniq | grep -v "__" > $@ # Rules - platform 'Mega 65' specific -build/mega65.rom: build/kernal_mega65.rom_0 build/target_mega65/kernal.seg_1 build/basic_mega65.rom_0 build/chargen.rom +build/mega65.rom: build/kernal_mega65.rom_0 $(DIR_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/target_mega65/kernal.seg_1 >> build/mega65.rom + cat $(DIR_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 @@ -305,6 +321,6 @@ test_m65: build/mega65.rom 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 - $(TOOL_SIMILARITY) basic build/target_generic/newrom +testsimilarity: $(TOOL_SIMILARITY) $(DIR_GENERIC)/newrom kernal basic + $(TOOL_SIMILARITY) kernal $(DIR_GENERIC)/newrom + $(TOOL_SIMILARITY) basic $(DIR_GENERIC)/newrom diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index b8cfb3c36c64ff2b1d8ea7134e181facfb61d607..92f77191493d587177a780d190d160c826549581 100644 GIT binary patch delta 158 zcmZp0XmFU|q4D_DN_&M%|1(x8Fg#GW_iB+MkX~wa^8W{(Me<GFgw4+U(xfPxB-H!omOV`98F`8Znu%i~uJ36mAsZ6+JAvrUd=KgRfYvkFHg m3*+O-^LTWDe%(4-~pDuLuBo@Ix2? delta 158 zcmZp0XmFU|p|SJTN_&M%|1(x8Fg#G$@@kPHkX~wa^8W{(Me<GFgw4+U(xfPxA;H!omOV`AJg`8Znu%g$E}36mAsZ6+JAvrUd=KgPIovkFHg m3**ko^LTWDgZgN_&M%|1(x8Fg#GW`f8CPkX~wa^8W{(Me<>REZ}2d zyfwL=#f|0uE1#>IPqO@FWV|~0I9mYYt<4hb+>Agp>&{ delta 159 zcmZp0XmFU|p|SbZN_&M%|1(x8Fg#FL_iB+MkX~wa^8W{(Me<AgU5<>0pw>=Jh-J{-Nhe{D4an*{QKo3- z_V&HoeQ)=B?|n}-_8PlmG5yWiCC4#{p}~HVW7uT@Fgh>{ z7XcCe0^a%e4-7V1OBGNQ=}mco?j-5PD#omkpBRgNyGKOFMRZ6;wUekc=F#BT1Eh_> z;bIS*RKv&Js9J%sODAYx*3~71oz&Tnm6TFi(7I{Pt8Q+Y^z^w*K2AJA(Y=-!PuCl0 zK5+nt3#15dD5?rt<>V1<@G9Z;;#dcDfwW#tb{nW?$nIk@a`6U3jjCLcHmatbco1pJdJ)HVYhVYf`7KC(2s zYH8B>y^xjVI`@BCd!F6xU@kYQ$*ZRB8&W0TT$<75Tc4aLl`V(Sdy}Y%{3Cm5$^{wd z42p+DvX>e5$dIvDN64a_#Y>9h?z*zSo$cvCO00W-H@Fs@l+x1vE5@ZA$_y)My_Rv* z8$nAZamtvlB;4l94U;1|3(6-{Aj|>WJ^F+kS3$+L*E9788DNNd#;Ngki}lo?w@+L^ z4+=*3lqZmhoMqEXRkbfqG}D7U2_>&9A{JRr+&iB6v_D1m8#te z>r2l~33}|vF9Rt$rkxu`j>Rn}`Aa~(xB1W2vGyct6g5Dzsl=a5xD0Lz7L&i^EnNtHSAb3a z5={r^2Z%3DCcPUhy%R?q!vewo^E-p}7@x-a2K1hEg% zG4d#XIn9&uf~u*|G)L5?IShRe`l#Q%C0UN-Xu)!=N{3{ipoq}{3ey@f_m5o(xTGZon6gZRugE|}f$P|;py2K1>s~)) zi2!Rwfwe3_)Jfi+_O9t>c=rug;uy-7NN}2sj*w}E7jpW;uFQk!gRXrC&4ai_ymYa@ zqKq_JmXO)gOBh(WVft%^TS43r0xVBYf5X@Tg@A4aQ3uJGQM{-q#5Y*7N-av7s|M-g zz3|itcapr?6oST&KOIF)A^1~)tRuKHOt#D@E9ng2YeDP};@OjUk%awY_)l@X>Mp)1 zVP+KfkKuh$oF?O8;+;`EYmJE4iQ7sv+vaMv&4-Q}#sfiY8gUM~D0YqAA$|Mkoss_n DA9-u4 delta 2302 zcmYjSeNa@_6@TyT7Yi&b-wTM`ibg)7fGA>XBTUDGsXH8`k=g;mT8WfC!9ArlsS@9pl}6?uya+w;~q&Ccw7 z=brcOIp_ZF@BD6Kbz`-?g8ty_>LVKC<^bnLn*+#0zSKOUy(nN8L0WFb+Lh04T3Jp} zEQ^O-)P85mcmkhziW}D5l(lVmmDn~Goac?bX$v*I^a2TMYnXFBvR+qSF%rZ*L3C)+ zuED=ojIy;8-S)f9XnPc=NslHPu-E~!T|dCeOciTki9=VayK;H3s*DWlN~%qMd}FGf zJCDHFsc`3b4c@1q=cmB4H|)OYqR<FVjo4m3~A75vO)i&EX9xf zvrvQ9SKqzVzV%Dgs;)PY_w*JG{>vmeuP<1;$=^edwVbX(&x$U_+JW1Au{qb-OpW#P z*L`PjzmG*tqAP0caJ}-l_|qiau-go+(+6F6sO#GP%ZEGqhHA|_UU*HSbcqb&_SJj zUyduHd991Kdep@y7u?sK@x3pJ$0^!tRyexZK)WdGQM4rFegLZwML%;Crt79q^%Nff zPd6<4<|tr?E2H>l(fu{(t6+V%V|h;#({k5^T0Xa#XV}hjat443r8Fp<2XKv904;91 zOUmPyJC=B&IZao712?lay5@dmA*p$-KQ8B`Ai4T-U0jn&pp^?>kgKUrcbD8KDTX%ZTo zVfWXx)xh7ma<+Ow3BvsO>6Jg!>w?qXP zV2YHxZAQbX{=Pyx<5<4$KR9q7T(aKQRur+SGoORk`%dsWpA##7QkT3WdqM(WpALKK z7$b|$2(bw+55t}hB^Qv1YkdB-F;S!7rCqgj;#wPDW=MotDkz!y76QEF+;cl=q8{NI}# z(8#e}?O?1&aAg>d7&j{45-y3~{7Z(YMG*>c$+92p|S*tpnsCg>UKv zwZL!tDRhFYNvmBGOP&EIZauf}nuv{?k$KJa?Qy@=ywaK zfqam*Ca%>FY6BfWLTPIaTm3-0D*`D^uUM@}{kF1yoE;cIveLh=A5!xUN=Q$t4-C1Yj{F zx4>m$J?vnin}APGWqriV3M7*Cl)9qI^4xlFz+H__`+@5AMd!znz2am$cLg+Wn)^f@ zo7&-}JrlGD9(pt-;7bv%3q|N`foQNT#~&dA9^1Y003X-=Q@CV z22lAL{L!4#;G*DT^7rgDD3i~WH9G@2O!s92INh1{B=w>Hf2N1oE9h0E zIA@t!_X{~?s?z^C=Qr`!BpeDM_5oT=9_Fm0H;~HQ+AO%OCe_<&{LuwA;@TeTP;xkT zomN#VGMu}FnVTh%+`OL;3r+)X;5uXtDh_a+wbo9z9#jgidZ_LJ)N(`}z2>i8j7fz# z4uq^s15yD>;rjxQ1d%Y^`GseMGKcysa@cc=G7IPcd3Dj7@jbzYo6hJFG%XTgQ8|5; zEXuo7lc6|M4knE{_Z~Ej;yt4EI7`yvj7bOomYR1wrA5>D&Y^VEzX#jwJL~FqejOUV zR#<_G3*Hh0QM_|U6lM5{!C>TmfGk^F$Ux*Ri+^hH2)I3f2syR*Wn+5)2<;J2J4wzj zC{_Gii#fH(EGIe}k$&C_e;a>CRWd{Za6{vdr@(;QA6X`Gbe3$-FDsPh@i`wpBj9BV zSS#U?8GK+KZ@7y;lrS@e2WRl!FrJX`zlbNlU}=_!k+`c+v#VIM>q!mX7{uKIj-Pal QIw^Kz^)IEbAL`}*0i4=w5C8xG diff --git a/bin/kernal_testing.rom b/bin/kernal_testing.rom index 851c2b6df83a1220d9f9ba8ee4dbc72b620540a9..eb9aa28f3aa6cf4c2d03ea8c7f5b2c158c3344c2 100644 GIT binary patch delta 14 VcmZp0XmHqYl!eh^^D!1HX#gpN1qA>A delta 14 VcmZp0XmHqYl!eiJ^D!1HX#gpH1q1*9 diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index 194dad408a52855eefe681c180820618c5f795e9..eafc1352e8c635f77ce252d4210dd9151ddeb221 100644 GIT binary patch delta 2177 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 diff --git a/bin/mega65.rom b/bin/mega65.rom index 311197a33b66647ebf1725630031564b8a94dd83..8e2131896af2d08df42e97ed903111d013b1e208 100644 GIT binary patch delta 4946 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 QBlO*|i6j5~RdNsfKaEPj$N&HU delta 3451 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 diff --git a/doc/Development.md b/doc/Development.md index 24760240..427a037b 100644 --- a/doc/Development.md +++ b/doc/Development.md @@ -139,7 +139,7 @@ This is a very common one. For standard ROM layout just take the file. For non-s // #LAYOUT# * * #IGNORE ``` -This can be found in a private (internal) jumptable of `KERNAL_1` segmment of `M65` layout. For standard ROM part (`KERNAL_0` segment) take it as floating routine (for `KERNAL_0` segment the file provides only labels for the jumptable). For `KERNAL_1` segment of `M65` layout, take it as a fixed location-routine; in such case the file will provide a jumptable itself. For memory layout other than `M65`, just ignore the file. Yet another example: +This can be found in a private (internal) vector table of `KERNAL_1` segment of `M65` layout. For standard ROM part (`KERNAL_0` segment) take it as floating routine (for `KERNAL_0` segment the file provides only labels for the vector table). For `KERNAL_1` segment of `M65` layout, take it as a fixed location-routine; in such case the file will provide a vector table itself. For memory layout other than `M65`, just ignore the file. Yet another example: ``` // #LAYOUT# M65 KERNAL_0 #TAKE @@ -155,16 +155,16 @@ This is used for memory mapping helper routines, which are only needed for Mega6 // #LAYOUT# * * #IGNORE ``` -This is for the routine, that on Mega65 goes to `KERNAL_1` segment, but can still be transparently called using fixed location in `KERNAL_0` segement. The code might, for example, look this way: +This is for the routine, that on Mega65 goes to `KERNAL_1` segment, but can still be transparently called using fixed location in `KERNAL_0` segment. The code might, for example, look this way: ``` ROUTINE_NAME: #if (ROM_LAYOUT_M65 && SEGMENT_KERNAL_0) - jsr map_KERNAL_1 - jsr KERNAL_1__ROUTINE_NAME // execute routine from KERNAL_1 segment - jmp map_NORMAL + jsr map_KERNAL_1 + jsr_ind VK1__ROUTINE_NAME // execute routine from KERNAL_1 segment + jmp map_NORMAL #else