From 4b2d99a399d97342e753d53c656df6aa120cf62b Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 28 Oct 2020 21:50:36 +0100 Subject: [PATCH 1/6] more work on SD card support on MEGA65 --- src/dos_m65/,aliases_dos.s | 4 +-- src/dos_m65/sdcard/sdcard_init.s | 13 +++++--- src/dos_m65/sdcard/sdcard_writesector.s | 42 ++++++++++++++++++++++--- 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index 954435dd..9a00472e 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -31,8 +31,8 @@ !addr CARD_TMP_STEP = $12 ; 4 bytes !addr CARD_TMP_RETRIES = $16 ; 1 byte - !addr CARD_BUFPNT = $FC ; 4 bytes - pointer to hardware sector buffer XXX replace copy routines with DMAgic - + !addr CARD_BUFPNT1 = $17 ; 4 bytes - pointer to hardware sector buffer XXX replace copy routines with DMAgic + !addr CARD_BUFPNT2 = $1B ; 4 bytes - as above, but points to the 2nd page of the hardware buffer ; diff --git a/src/dos_m65/sdcard/sdcard_init.s b/src/dos_m65/sdcard/sdcard_init.s index 9ed9878d..37cb383b 100644 --- a/src/dos_m65/sdcard/sdcard_init.s +++ b/src/dos_m65/sdcard/sdcard_init.s @@ -18,13 +18,18 @@ sdcard_init: sta CARD_IS_SDHC lda #SD_SECBUF_0 - sta CARD_BUFPNT+0 + sta CARD_BUFPNT1+0 + sta CARD_BUFPNT2+0 lda #SD_SECBUF_1 - sta CARD_BUFPNT+1 + sta CARD_BUFPNT1+1 + inc + sta CARD_BUFPNT2+1 lda #SD_SECBUF_2 - sta CARD_BUFPNT+2 + sta CARD_BUFPNT1+2 + sta CARD_BUFPNT2+2 lda #SD_SECBUF_3 - sta CARD_BUFPNT+3 + sta CARD_BUFPNT1+3 + sta CARD_BUFPNT2+3 ; Reset the card diff --git a/src/dos_m65/sdcard/sdcard_writesector.s b/src/dos_m65/sdcard/sdcard_writesector.s index 833719fe..e4e1ac25 100644 --- a/src/dos_m65/sdcard/sdcard_writesector.s +++ b/src/dos_m65/sdcard/sdcard_writesector.s @@ -99,13 +99,47 @@ sdcard_writesector_verify: and #$03 bne @3 - ; XXX verify - compare buffer + ; FALLTROUGH +sdcard_writesector_verify_loop: + ; Compare buffers + phx + phz + ldx #$00 + ldz #$00 + lda [CARD_BUFPNT1],z + cmp CARD_BUF, x + bne sdcard_writesector_verify_fail + + lda [CARD_BUFPNT2],z + cmp CARD_BUF+$100, x + bne sdcard_writesector_verify_fail + inz + inx + bne sdcard_writesector_verify_loop + + ; FALLTROUGH + +sdcard_writesector_verify_success: + + plz + plx + + clc + rts + +sdcard_writesector_verify_fail: + + plz + plx + + sec + rts ; @@ -124,11 +158,9 @@ sdcard_writesector_copy_data: @1: lda CARD_BUF,x - sta [CARD_BUFPNT],z - inc CARD_BUFPNT+1 + sta [CARD_BUFPNT1],z lda CARD_BUF+$100,x - sta [CARD_BUFPNT],z - dec CARD_BUFPNT+1 + sta [CARD_BUFPNT2],z inz inx From 240e59b43d76b58daf775a246d7502c7f3970dbf Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 6 Nov 2020 22:15:12 +0100 Subject: [PATCH 2/6] more lowlevel SD card code --- src/dos_m65/sdcard/sdcard_init.s | 128 +++++++++++++++++++++++++++---- 1 file changed, 115 insertions(+), 13 deletions(-) diff --git a/src/dos_m65/sdcard/sdcard_init.s b/src/dos_m65/sdcard/sdcard_init.s index 37cb383b..7103ca38 100644 --- a/src/dos_m65/sdcard/sdcard_init.s +++ b/src/dos_m65/sdcard/sdcard_init.s @@ -44,11 +44,7 @@ sdcard_init: sta SD_ADDR+3 jsr sdcard_init_read - bcc sdcard_init_operable - - ; XXX if we are here, mark card as not operable and quit - -sdcard_init_operable: + bcs sdcard_init_getsize_fail ; if failure, mark card as not operable and quit ; Work out if this is SD or SDHC card - SD cards can't read at non-sector aligned addresses @@ -88,22 +84,128 @@ sdcard_init_getsize: ; (binary search of sector numbers is NOT safe for some reason. ; It frequently reports bigger than the size of the card) - lda #$00 + ; step (and first sector) = 16*2048 + + sta CARD_TMP_STEP+0 + sta CARD_SECNUM+0 + sta CARD_TMP_STEP+2 + sta CARD_SECNUM+2 + sta CARD_TMP_STEP+3 + sta CARD_SECNUM+3 + lda #$08 + sta CARD_TMP_STEP+1 + sta CARD_SECNUM+1 + + ; FALLTROUGH + +sdcard_init_getsize_read: + + ; Try to read sector + + jsr sdcard_readsector + bcc sdcard_init_getsize_next ; XXX original code checks PEEK(sd_ctl)&0x63;... + + ; Failed to read - restore card state and sector number + + jsr sdcard_reset + + sec + lda CARD_SECNUM+0 + sbc CARD_TMP_STEP+0 + sta CARD_SECNUM+0 + lda CARD_SECNUM+1 + sbc CARD_TMP_STEP+1 + sta CARD_SECNUM+1 + lda CARD_SECNUM+2 + sbc CARD_TMP_STEP+2 + sta CARD_SECNUM+2 + lda CARD_SECNUM+3 + sbc CARD_TMP_STEP+3 + sta CARD_SECNUM+3 + + ; Divide step by 2, skip bytes which are always 0 + + clc + ; ror CARD_TMP_STEP+3 + ; ror CARD_TMP_STEP+2 + ror CARD_TMP_STEP+1 + ror CARD_TMP_STEP+0 + + ; FALLTROUGH + +sdcard_init_getsize_next: + + ; Increment sector number by step + + clc + lda CARD_SECNUM+0 + adc CARD_TMP_STEP+0 + sta CARD_SECNUM+0 + lda CARD_SECNUM+1 + adc CARD_TMP_STEP+1 + sta CARD_SECNUM+1 + lda CARD_SECNUM+2 + adc CARD_TMP_STEP+2 + sta CARD_SECNUM+2 + lda CARD_SECNUM+3 + adc CARD_TMP_STEP+3 + sta CARD_SECNUM+3 + + ; If sector number is 0 - report failure + + lda CARD_SECNUM+0 + ora CARD_SECNUM+1 + ora CARD_SECNUM+2 + ora CARD_SECNUM+3 + beq sdcard_init_getsize_fail + + ; If step is 0 - this is the end, we know maximum size + + lda CARD_TMP_STEP+0 + ora CARD_TMP_STEP+1 + ora CARD_TMP_STEP+2 + ora CARD_TMP_STEP+3 + beq sdcard_init_getsize_done + + ; Check sector number, should be below $10:$00:$00:$00 + + lda CARD_SECNUM+3 + and #$F0 + bne sdcard_init_getsize_read + + ; It is not - report maximum size + + lda #$FF sta CARD_SECNUM+0 sta CARD_SECNUM+1 sta CARD_SECNUM+2 + lda #$0F sta CARD_SECNUM+3 - ; step = 16*2048 + ; FALLTROUGH - sta CARD_TMP_STEP+0 - sta CARD_TMP_STEP+2 - sta CARD_TMP_STEP+3 - lda #$08 - sta CARD_TMP_STEP+1 +sdcard_init_getsize_done: - ; XXX finish the implementation + ; Return sector number as maximum readable sector + lda CARD_SECNUM+0 + sta CARD_SIZE+0 + lda CARD_SECNUM+1 + sta CARD_SIZE+1 + lda CARD_SECNUM+2 + sta CARD_SIZE+2 + lda CARD_SECNUM+3 + sta CARD_SIZE+3 + + clc + rts + +sdcard_init_getsize_fail: + + ; XXX mark card as inoperable + + sec + rts From 89a2b467dd18b1bf56dbf2d8119cc1443e83316d Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 27 Nov 2020 22:55:58 +0100 Subject: [PATCH 3/6] temporary workaround for MEGA65 DevKit vs XEMU behaviour difference, fixes C64 mode --- bin/mega65.rom | Bin 131072 -> 131072 bytes bin/mega65_pxlfont.rom | Bin 131072 -> 131072 bytes src/,,config_mega65.s | 5 +++++ src/kernal/screen_m65/mega65_scrmodeset.s | 3 +++ 4 files changed, 8 insertions(+) diff --git a/bin/mega65.rom b/bin/mega65.rom index 2b08841d6f21ee98036f0bee0fda1481fa9d16a0..08a2d57bd569197d611eeeb9742c81ad4b39fecb 100644 GIT binary patch delta 1301 zcmY+EeN5bR7{{;2l{-WPjp1dtV^0{!h$tIdrjBI3BuGs9M|;=y+H&rWU{FlvVwRYV znC%R9_%hI1)c4% zflfxfCDhww-n(tPN7B!!N5H`un>&Wu9fyuXnKx!PXFo8PP948s-m*H`9cjsGe5Kts z(`n8@8IgUjXW}#7F6_*5#LgP&h=Ba)^EePjBZ>RorRvFUzA`PJGhTo>79o7g=WUo{ zBRR%8%p<8Fu}q4fbt0@ww=lUr%#4#oUU>=?+mZ@z#BR8uMTk2wHL@d_*2(!lMJ;I% z3ZJO6xHZ$ghv?=zbZ-;gyh6hPQ3uG7;0v+$ki8@mLoyF zKMe5ro@eec5!uRQ!B}Xw_4UVIp%*ziM#WvR6!Q|!>?~dbxdCGozVRWB0X|wz!_d8n zQrc?BLUbd|d>+uE>WJ2_4u`Z6^}IH$eiwo|67e@YB1++O1h7m)g#;qWmENJQl24@E zm##{hUzIgURmS|994j_|(v(=4c~RFPA?Y?;U|!Ng3?_q^Xnt#vtX`WH$&es7rQ!{3 z{_qX>TL}NwTW_Yhn(NK*6h;UzRQ`nXKaJGfU)GQdIt_R0^q-uNYaB7Cd@5xNm! z#pHy!7=j=REi4SOFjWm10rQ9+$Q<0uw%Mo)S<4#Ly!9bUx2dh*^%)72fi3C$>%&OVoX0{J-g2gO@k=|? z6^Nx6&MW&MgB(^^@~85o=ZZ3|neoEWaWexqG1W;uBhj#$8@geB1vMm7@i=#I;JFJs z$yTL+sv)9MYHw0VcJ+r_^5uygX{i4Nx@|f781;A0xok*>YBx*aBUwr1@PQ~Nw&id=g3Il z4Tmb}-$ysUdWy>5$!SwvC85Q`w?Bf=Y}Yh86{#cfq>stct{}CC@WK5>2SgYY!DD>_ q{|1(ClaoQ`TjR)Dg{tU6@Xet0+lvOzy;fuejbk%s#%8D;?tcL5U@_$Y delta 1355 zcmY+EeQeZp7{}Y&y1PNxrXl0-HhhAEWrz;v#Kk2F8bC-*+PmIe+nroBivs_Un1u{7 zLyhYYlOrcT1Y~Y(r{(O(pxga{m=LDhE!<*E=P(dZgD~C}kjq}&8=F2oA;$jk{GOM7 ze{Da{^Q)@5RMiz-oVBK+vTMoR*OpBQVP8E@;q`%JhJM*PDskQoT%+9LKM+&`UF%B= zh`@bORL3O`o6~F^2Qz-C-ZOQK`2V<1OvBu~xfdyrkWQdLH^G;l9^!KvZU1{06Nx8+)}lwDacjw9}wBG;7UO z@5RkOp`D!e7Udq};20O9;262+Eu-Hh^WMs}d7^P%I|vh;xhB@rmfds&z?*VdBcE8~ zCyoqQ_w7nyEH{%)Pq$ISaqAuc+2(scAK!bTBwmo6I%_UOEaZ1zaW(>~BY*oEXqhw! z8`kIZ<~sO|gGO((=(}qWeep!A-rGXacl18nHnn0gx&(pXk^`GLc3jZo2zBs21~+=y zv&7+-pTk`$AMN5WJ<#M&J25m1qxtsY{GUP~`~4*=gErp?)7ivCrkKusOk|pYodE-2 zJ_v^bolTCie00f>-%A5o8R*(uD8NYIiWd$DlS^euFCcV%z(tW)e zlO8p#fWYfRY4_uP|0jMV^M_e~7_=ZX`%D)!1R*Zqcb=JNKa%Wdi{Bh=qq@3No0&0% zNzrLnD$5$gKAy#Uz#TG^VE7P6Tu7{Epl5!lnz0L8{D}&NZ4c=QtxxaPdKJA-`$6y3 zzE>bfjtBSTZ4%Xm2w;+d)go*nrQ$AnkhF^K*9S#Cs7bo0$^AiHN|jna>vF2x`q41p zo@h{L;F@SCEC%N=(1W%S?OKcNNpO!$iKR~;2&%W>wqO0DbGw!6ifp&kOX!tNs^d8L zIPb4YOZV1F83ve`g<9z`*ISp>qw3*mMCd_;)fb1XF$Fjdnm9Pc!KE5l6oSh>(mDq# ze2JrTZPaJo7jX8__Api!dObZBp1Q8?w5yD^vNNbqi>Q8z<)5qNaH<9hCUrXU<^tNF zv}Sn2XU?JwsLW}&(TfzV2bk!ID;0D$8_UsfQ@ZmAO2mz0ERIL}Ad89YmB@lfs() zFXT&$B}$qTpOKbIe~Duv&kKBzm-#P+7NJ!*F0={lLQMEd_*z&cIi+)ft;DL?NZ%w& zLhqp69V%Nsz{BV)J2MLdJe%{-CRFmU9;O5+o`NJ7bAUnGjCgWSfv_gdN?iD)&a4GY3* dsuH8&9bx-tnFyb+U12*P_Ya@xAEsaN`~!Y#Ql|g_ diff --git a/bin/mega65_pxlfont.rom b/bin/mega65_pxlfont.rom index 4c18426b18af275edf78f3993412b284301d5bd5..016048093554faa37f9b9294845e0b992761dfdc 100644 GIT binary patch delta 1301 zcmY+EeN5bR7{{;2l{-WPjp1dtV^0{!h$tIdrjBI3BuGs9M|;=y+H&rWU{FlvVwRYV znC%R9_%hI1)c4% zflfxfCDhww-n(tPN7B!!N5H`un>&Wu9fyuXnKx!PXFo8PP948s-m*H`9cjsGe5Kts z(`n8@8IgUjXW}#7F6_*5#LgP&h=Ba)^EePjBZ>RorRvFUzA`PJGhTo>79o7g=WUo{ zBRR%8%p<8Fu}q4fbt0@ww=lUr%#4#oUU>=?+mZ@z#BR8uMTk2wHL@d_*2(!lMJ;I% z3ZJO6xHZ$ghv?=zbZ-;gyh6hPQ3uG7;0v+$ki8@mLoyF zKMe5ro@eec5!uRQ!B}Xw_4UVIp%*ziM#WvR6!Q|!>?~dbxdCGozVRWB0X|wz!_d8n zQrc?BLUbd|d>+uE>WJ2_4u`Z6^}IH$eiwo|67e@YB1++O1h7m)g#;qWmENJQl24@E zm##{hUzIgURmS|994j_|(v(=4c~RFPA?Y?;U|!Ng3?_q^Xnt#vtX`WH$&es7rQ!{3 z{_qX>TL}NwTW_Yhn(NK*6h;UzRQ`nXKaJGfU)GQdIt_R0^q-uNYaB7Cd@5xNm! z#pHy!7=j=REi4SOFjWm10rQ9+$Q<0uw%Mo)S<4#Ly!9bUx2dh*^%)72fi3C$>%&OVoX0{J-g2gO@k=|? z6^Nx6&MW&MgB(^^@~85o=ZZ3|neoEWaWexqG1W;uBhj#$8@geB1vMm7@i=#I;JFJs z$yTL+sv)9MYHw0VcJ+r_^5uygX{i4Nx@|f781;A0xok*>YBx*aBUwr1@PQ~Nw&id=g3Il z4Tmb}-$ysUdWy>5$!SwvC85Q`w?Bf=Y}Yh86{#cfq>stct{}CC@WK5>2SgYY!DD>_ q{|1(ClaoQ`TjR)Dg{tU6@Xet0+lvOzy;fuejbk%s#%8D;?tcL5U@_$Y delta 1355 zcmY+EeQeZp7{}Y&y1PNxrXl0-HhhAEWrz;v#Kk2F8bC-*+PmIe+nroBivs_Un1u{7 zLyhYYlOrcT1Y~Y(r{(O(pxga{m=LDhE!<*E=P(dZgD~C}kjq}&8=F2oA;$jk{GOM7 ze{Da{^Q)@5RMiz-oVBK+vTMoR*OpBQVP8E@;q`%JhJM*PDskQoT%+9LKM+&`UF%B= zh`@bORL3O`o6~F^2Qz-C-ZOQK`2V<1OvBu~xfdyrkWQdLH^G;l9^!KvZU1{06Nx8+)}lwDacjw9}wBG;7UO z@5RkOp`D!e7Udq};20O9;262+Eu-Hh^WMs}d7^P%I|vh;xhB@rmfds&z?*VdBcE8~ zCyoqQ_w7nyEH{%)Pq$ISaqAuc+2(scAK!bTBwmo6I%_UOEaZ1zaW(>~BY*oEXqhw! z8`kIZ<~sO|gGO((=(}qWeep!A-rGXacl18nHnn0gx&(pXk^`GLc3jZo2zBs21~+=y zv&7+-pTk`$AMN5WJ<#M&J25m1qxtsY{GUP~`~4*=gErp?)7ivCrkKusOk|pYodE-2 zJ_v^bolTCie00f>-%A5o8R*(uD8NYIiWd$DlS^euFCcV%z(tW)e zlO8p#fWYfRY4_uP|0jMV^M_e~7_=ZX`%D)!1R*Zqcb=JNKa%Wdi{Bh=qq@3No0&0% zNzrLnD$5$gKAy#Uz#TG^VE7P6Tu7{Epl5!lnz0L8{D}&NZ4c=QtxxaPdKJA-`$6y3 zzE>bfjtBSTZ4%Xm2w;+d)go*nrQ$AnkhF^K*9S#Cs7bo0$^AiHN|jna>vF2x`q41p zo@h{L;F@SCEC%N=(1W%S?OKcNNpO!$iKR~;2&%W>wqO0DbGw!6ifp&kOX!tNs^d8L zIPb4YOZV1F83ve`g<9z`*ISp>qw3*mMCd_;)fb1XF$Fjdnm9Pc!KE5l6oSh>(mDq# ze2JrTZPaJo7jX8__Api!dObZBp1Q8?w5yD^vNNbqi>Q8z<)5qNaH<9hCUrXU<^tNF zv}Sn2XU?JwsLW}&(TfzV2bk!ID;0D$8_UsfQ@ZmAO2mz0ERIL}Ad89YmB@lfs() zFXT&$B}$qTpOKbIe~Duv&kKBzm-#P+7NJ!*F0={lLQMEd_*z&cIi+)ft;DL?NZ%w& zLhqp69V%Nsz{BV)J2MLdJe%{-CRFmU9;O5+o`NJ7bAUnGjCgWSfv_gdN?iD)&a4GY3* dsuH8&9bx-tnFyb+U12*P_Ya@xAEsaN`~!Y#Ql|g_ diff --git a/src/,,config_mega65.s b/src/,,config_mega65.s index 823fb077..63e33307 100644 --- a/src/,,config_mega65.s +++ b/src/,,config_mega65.s @@ -110,3 +110,8 @@ ; --- Other ;; #CONFIG# COMPRESSION_LVL_2 NO + + +; --- Temporary hotfixes + +;; #CONFIG# HOTFIX_CHARPTR YES diff --git a/src/kernal/screen_m65/mega65_scrmodeset.s b/src/kernal/screen_m65/mega65_scrmodeset.s index b060e736..56b2d3b4 100644 --- a/src/kernal/screen_m65/mega65_scrmodeset.s +++ b/src/kernal/screen_m65/mega65_scrmodeset.s @@ -91,6 +91,8 @@ m65_scrmodeset_internal: ; entry point for M65_MODE65 stx VIC_COLPTR+0 stx VIC_COLPTR+1 +!ifndef CONFIG_HOTFIX_CHARPTR { + ; Set the following location: ; - VIC_CHARPTR - for character generator location @@ -100,6 +102,7 @@ m65_scrmodeset_internal: ; entry point for M65_MODE65 sta VIC_CHARPTR+1 lda #$01 sta VIC_CHARPTR+2 +} ; Set the following locations: ; - M65_SCRGUARD, M65_COLGUARD - guards for virtual screen end From 196560604f565ac278f888570e2b98849935976c Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 28 Nov 2020 16:10:46 +0100 Subject: [PATCH 4/6] documentation update --- Makefile | 15 ++++++++++++++- src/,,config_mega65.s | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 11cf3ac2..c67641f5 100644 --- a/Makefile +++ b/Makefile @@ -679,11 +679,24 @@ $(TARGET_U64CRT_X): $(SEG_LIST_U64CRT) $(CRT_BIN_LIST) build/padding_8_KB # Rules - MEGA65 platform specific +# $0:$0000 - 16 KB - DOS +# $0:$4000 - 8 KB - KERNAL segment 1 +# $0:$6000 - 16 KB - BASIC segment 1 (wrong, $9000 should be alternative chargen) +# $0:$A000 - 8 KB - BASIC segment 0 +# $0:$C000 - 4 KB - C64 mode charset (wrong) +# $0:$D000 - 4 KB - native mode charset (wrong, should be C64 mode charset) +# $0:$E000 - 9 KB - KERNAL segment 0 +# $1:$0000 - 64 KB - unused for now, padding + build/padding_64_KB: @mkdir -p build @dd if=/dev/zero bs=8192 count=8 of=$@ status=none -$(TARGET_M65_x_ORF) $(TARGET_M65_x_PXL): $(SEG_LIST_M65) build/padding_64_KB $(TARGET_CHR_ORF) build/chargen_openroms.patched $(TARGET_CHR_PXL) build/chargen_pxlfont.patched +build/padding_4_KB: + @mkdir -p build + @dd if=/dev/zero bs=4096 count=1 of=$@ status=none + +$(TARGET_M65_x_ORF) $(TARGET_M65_x_PXL): $(SEG_LIST_M65) build/padding_64_KB build/padding_4_KB $(TARGET_CHR_ORF) build/chargen_openroms.patched $(TARGET_CHR_PXL) build/chargen_pxlfont.patched @echo @echo @echo diff --git a/src/,,config_mega65.s b/src/,,config_mega65.s index 63e33307..1796acfd 100644 --- a/src/,,config_mega65.s +++ b/src/,,config_mega65.s @@ -114,4 +114,4 @@ ; --- Temporary hotfixes -;; #CONFIG# HOTFIX_CHARPTR YES +;; #CONFIG# HOTFIX_CHARPTR YES ; workaround for https://github.com/MEGA65/mega65-core/issues/308 From c35195ed5fbc266935861bab84eabdb767898e51 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 28 Nov 2020 17:11:45 +0100 Subject: [PATCH 5/6] more compatible MEGA65 memory map --- Makefile | 19 +++++++++++-------- doc/Development.md | 2 +- src/kernal/board_m65/mega65_native_meminit.s | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index c67641f5..60849db9 100644 --- a/Makefile +++ b/Makefile @@ -505,7 +505,7 @@ $(DIR_M65)/OUTK_0.BIN $(DIR_M65)/KERNAL_0_combined.vs $(DIR_M65)/KERNAL_0_combin $(DIR_M65)/basic.seg_1 $(DIR_M65)/BASIC_1_combined.vs $(DIR_M65)/BASIC_1_combined.sym: @mkdir -p $(DIR_M65) @rm -f $@* $(DIR_M65)/basic.seg_1 $(DIR_M65)/BASIC_1* - @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s BASIC_1 -i BASIC_1-mega65 -o basic.seg_1 -d $(DIR_M65) -l 4000 -h 7fff $(CFG_M65) $(GEN_STR_M65) $(SRCDIR_BASIC) $(GEN_BASIC) + @$(TOOL_BUILD_SEGMENT) -a ../../$(TOOL_ASSEMBLER) -r M65 -s BASIC_1 -i BASIC_1-mega65 -o basic.seg_1 -d $(DIR_M65) -l 4000 -h 6fff $(CFG_M65) $(GEN_STR_M65) $(SRCDIR_BASIC) $(GEN_BASIC) $(DIR_M65)/dos.seg_1 $(DIR_M65)/DOS_1_combined.vs $(DIR_M65)/DOS_1_combined.sym: @mkdir -p $(DIR_M65) @@ -681,10 +681,11 @@ $(TARGET_U64CRT_X): $(SEG_LIST_U64CRT) $(CRT_BIN_LIST) build/padding_8_KB # $0:$0000 - 16 KB - DOS # $0:$4000 - 8 KB - KERNAL segment 1 -# $0:$6000 - 16 KB - BASIC segment 1 (wrong, $9000 should be alternative chargen) +# $0:$6000 - 12 KB - BASIC segment 1 +# $0:$9000 - 4 KB - native mode chargen # $0:$A000 - 8 KB - BASIC segment 0 -# $0:$C000 - 4 KB - C64 mode charset (wrong) -# $0:$D000 - 4 KB - native mode charset (wrong, should be C64 mode charset) +# $0:$C000 - 4 KB - unused for now, padding +# $0:$D000 - 4 KB - legacy mode chargen # $0:$E000 - 9 KB - KERNAL segment 0 # $1:$0000 - 64 KB - unused for now, padding @@ -706,9 +707,10 @@ $(TARGET_M65_x_ORF) $(TARGET_M65_x_PXL): $(SEG_LIST_M65) build/padding_64_KB bui @cat $(DIR_M65)/dos.seg_1 > $(TARGET_M65_x_ORF) @cat $(DIR_M65)/kernal.seg_1 >> $(TARGET_M65_x_ORF) @cat $(DIR_M65)/basic.seg_1 >> $(TARGET_M65_x_ORF) - @cat $(DIR_M65)/basic.seg_0 >> $(TARGET_M65_x_ORF) - @cat $(TARGET_CHR_ORF) >> $(TARGET_M65_x_ORF) @cat build/chargen_openroms.patched >> $(TARGET_M65_x_ORF) + @cat $(DIR_M65)/basic.seg_0 >> $(TARGET_M65_x_ORF) + @cat build/padding_4_KB >> $(TARGET_M65_x_ORF) + @cat $(TARGET_CHR_ORF) >> $(TARGET_M65_x_ORF) @cat $(DIR_M65)/kernal.seg_0 >> $(TARGET_M65_x_ORF) @cat build/padding_64_KB >> $(TARGET_M65_x_ORF) @echo @@ -720,9 +722,10 @@ $(TARGET_M65_x_ORF) $(TARGET_M65_x_PXL): $(SEG_LIST_M65) build/padding_64_KB bui @cat $(DIR_M65)/dos.seg_1 > $(TARGET_M65_x_PXL) @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 $(TARGET_CHR_PXL) >> $(TARGET_M65_x_PXL) @cat build/chargen_pxlfont.patched >> $(TARGET_M65_x_PXL) + @cat $(DIR_M65)/basic.seg_0 >> $(TARGET_M65_x_PXL) + @cat build/padding_4_KB >> $(TARGET_M65_x_PXL) + @cat $(TARGET_CHR_PXL) >> $(TARGET_M65_x_PXL) @cat $(DIR_M65)/kernal.seg_0 >> $(TARGET_M65_x_PXL) @cat build/padding_64_KB >> $(TARGET_M65_x_PXL) @echo diff --git a/doc/Development.md b/doc/Development.md index a63ed9b9..b50e1213 100644 --- a/doc/Development.md +++ b/doc/Development.md @@ -101,7 +101,7 @@ Currently there are 4 ROM layouts defined: - `STD` - with 2 code segments: `BASIC` (`$A000-$E4D2`, where `$C000-$DFFF` is a skip-gap for RAM and I/O area) and `KERNAL` (`$E4D3 - $FFFF`) - `CRT` - where `BASIC` becames `BASIC_0` and `KERNAL` becames `KERNAL_0`, with additional `BASIC`/`KERNAL` segments are placed on the required cartridge image -- `M65` - where `BASIC` becames `BASIC_0` and `KERNAL` becames `KERNAL_0`, additional segments might be added to the build system in the future; at the moment of writing this document additional 16KB of ROM is defined as `BASIC_1` segment and additional 8KB of ROM is defined as `KERNAL_1` segment +- `M65` - where `BASIC` becames `BASIC_0` and `KERNAL` becames `KERNAL_0`, additional segments might be added to the build system in the future; at the moment of writing this document additional 12KB of ROM is defined as `BASIC_1` segment and additional 8KB of ROM is defined as `KERNAL_1` segment - `X16` - memory layout for the Commander X16 machine Expect at least one more, `U64`, if the planned additional ROM banks support for Ultimate 64 gets implemented. To check for current ROM layout or code segment use KickAssembler preprocessor defines, like `ROM_LAYOUT_STD`, `SEGMENT_M65_BASIC_0`, `SEGMENT_X16_KERNAL_1`. diff --git a/src/kernal/board_m65/mega65_native_meminit.s b/src/kernal/board_m65/mega65_native_meminit.s index 034c9c37..6ff5e8e2 100644 --- a/src/kernal/board_m65/mega65_native_meminit.s +++ b/src/kernal/board_m65/mega65_native_meminit.s @@ -32,7 +32,7 @@ m65_native_meminit: sta M65_DMAJOB_SRC_3 lda #$02 sta M65_DMAJOB_SRC_2 - lda #$D0 + lda #$90 sta M65_DMAJOB_SRC_1 lda #$00 sta M65_DMAJOB_SRC_0 From dd4306288b41ad4bdfe1a65b1dc2eb796da00709 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 28 Nov 2020 17:19:11 +0100 Subject: [PATCH 6/6] updated binaries, PXLfont MEGA65 build is not the default --- Makefile | 4 ++-- bin/extrom_generic_crt.crt | Bin 32896 -> 32896 bytes bin/mega65.rom | Bin 131072 -> 131072 bytes bin/{mega65_pxlfont.rom => mega65_orfont.rom} | Bin 131072 -> 131072 bytes 4 files changed, 2 insertions(+), 2 deletions(-) rename bin/{mega65_pxlfont.rom => mega65_orfont.rom} (92%) diff --git a/Makefile b/Makefile index 60849db9..523b5a52 100644 --- a/Makefile +++ b/Makefile @@ -169,8 +169,8 @@ TARGET_U64CRT_K = build/kernal_ultimate64_crt.rom TARGET_GENCRT_X = build/extrom_generic_crt.crt TARGET_U64CRT_X = build/extrom_ultimate64_crt.crt -TARGET_M65_x_ORF = build/mega65.rom -TARGET_M65_x_PXL = build/mega65_pxlfont.rom +TARGET_M65_x_ORF = build/mega65_orfont.rom +TARGET_M65_x_PXL = build/mega65.rom TARGET_X16_x = build/cx16-dummy.rom TARGET_LIST_CUS = $(TARGET_CUS_B) $(TARGET_CUS_K) diff --git a/bin/extrom_generic_crt.crt b/bin/extrom_generic_crt.crt index 1dbfdc03e80510ded36b4350319410b12f96b2ed..a68b68b7ef12bcdd9710c3d3c571731b9390096e 100644 GIT binary patch delta 18 ZcmZo@WNK(++Tf9l2 zx$ls2g`#NQl04K06c5kOJ?HRV-j7F&M7BpF+b8!5{)I0+cuJUDY&~_|yN|!XvputY zmj=%88E*GH-21iOw|YH&-&P*)d39*vo5ELXJblIi zmtw`qos!OzJ1FLnm-lFW(#S{2Z3!lIr;_zhN3Ot&YL{Lb`aIM=1M z#Gv$&l3)w%tqsNFxrXAQ`3qV=L2zh_#r9mWxbp;P{z5>B)UPhI&tEu8*46ym`O15Nb(2M1|wlYLiV*Bp;@#_Ef5pP%`c%Ry^NIj(ed#*ZNLk`@7M; z;qlr5J+4$}&Egqh13F0#PivMK)IYB7$wDw|qdhkV` z^o`!hC(_SB=y8Q-)9nxxSNK-?v8vD^jr2yAf6?_i6U2eYuUU1{#-7=hdSVhzd!Q6 z^y9(zcAa1EmVU#>B5#o-oWI&Fy~ZO&S6Jzm=6PgeRr>Gm=ZiI0LZ^er2N$(jpU|X8 zgDI@SSSihNEu|$U^(e;buUd{M=O0*I7|R{ad!)yE7XQtpQdqiROJ7bc-eA(sl++PE z$7*tN{@Ig4P5xByUtwe4+({v949y+Hd1~&drh(s17MI}~oJe(n^#`YV7E5yv)M_li zhlfJ}2F_K^85`&0oR2fs83J{Z41%nN#zP^s!b4;q<{Wls7{&!e5aR6jcsK{=;nC4B z^c051DL>VQ6b1Sb6$71o@Y9?Gh`g!TO$l*84vp^jP+|%!QX&uqCI(qihK4jB$$695_KP7gQ|(^26_fN-Lh z602?nkf@#j-`&*AoCXc|u^Q$xW|yT7JQ6A*isHyH7S~fD#}R9Q?6!^5 z<;${6KU_M*7^cqn@NXUB+FDy1{e%ip7Ltvw%p01WF{h^D85`WxP1Cj~%n8$+uB#il9P}|A1D$;E z)0_l|ys7wr65@aykFJ*~F$FGAA`k^826=97dODILIg=rO(vqKEDp-^-V}anm@mDKq zkz4{nE@UX8ZQrzX-O_H_pOBLVhFtC+jxHC;;lO|mD^toA?3dEUjVm*@oi(zP=4I#$ z?%)C?!ngt@0JqHy%b*}QAd?%uP_XC%Ww=CoI2SYvdMrVV?yQhS32=$RLKW+!jWW$Z zsgN`EGG;11;mDadCJ6p|84(aDV`2gz(UNF8`2bVMu^VpCY$a)lg6tO2q!hSRZQmPJ2YI%M0JI^)B4 zIz;!$TU-0MLX?GcMpyQYD(r;~6j6drMK&H+Bi9-oVE*d;3A<9>M@+Z>N?r@PA> ze~#TVibq~$UKd|RSqQ*KxaX&xK$}q=0)b=C5=_x9b#Tv7jE9_n!#-^95x*>tl0!(P zT`#N1w;wW%LqWs|_gDq@05hTkGi0W1Pr#>QIKdIbE!?{U?rERGJuJyRe)nm#n0M{n zhbQmzaoOi%ZKh|9x0!4F%vJdg5dD`}eQo{Qw?}1WT+bZR2rC@8wln1=g5S6ibKu#* zYslrC3(IiS3D(!G37`{p-I5Cqj=zabAH`19?UD$D@1d>)oO3G+IPLxUa7X)w=0BK?pCY4^@+jx#PG#zwKxBKR$J{%wblMCL~pg) xTVF=1Uq-%|t@h@(!fLCXt+v{qeY03GkK1Z5Ui;^N>IDD9%8fs*+z^gF`hUjxp+o=x delta 6623 zcmeHLacmRk75^@TBS4yDOJUc|Y=;yo0%$U$2^q1RttUwdfNK0}IdMuq?tJ~}dHnM1HnG}d?mBbxdtf3aVe^z8BSNmfzvZ~Zo%kB5R zGf5?+ZGX^K>hjL{-o5v}@4a{LzVG*aIm4(ijGD2n!v5(meC~*ln`u6BqjsCtugwR} z1}`6*(4N=qz=Qo??SHLb41QbP6?pMy)87>KRf$1!`%s6Vnm-&`*sT5Lz&p9!iS_dH zn)%4_b3(wpd3+mM`}m?;i&tOTu6Dtc*o-FBb!oTyM?pT2bnY1L619%OtzO)%ns-j@ zsMF+Vacq+u(GnZU=iXK#yInJB~zySwPdO~ ze#{q8<)<_ZhuL>1nW#bk#11s6$Ksb^OjX67$+=Sf@o;Wy>WO$D*N|$7tGP|7htXE2 z^ms@fRpV^BrMbR%Fk4^TIW?<$R5*vGSZv7_i<=ICre-~=v0-7lWoq^uSr>ADp$>oQ zgsQn-dWH#SD;D4Dnjg6&K2M3`(bgpz_aq*qthQ9Ll94i=C0e}DOdYpEeZKk4c+FeG z!Q%RnhW8$dZ@e@X{2SEozb)rP*r;&ZA)DVHZW6UblMlDU!)=EL&I>|ON$DqAQlS&A z^4I&v_N1PG5O9RYQ!NlwNBCCi;Z>ns*7}WCPj>!}3DQ%>3#>}Mu9~$YO+wJzJMvJq z>U$|@erII+X0=#1l6x<{^{sR2OlTw^2qAMRxqn~UQ8ddq} zB;G=(lw#SYQkuy>R?UUyn)a#}9$1(TWe?;;c~@ZOpG+l zB_gtmBK234-hp2D^AllQcTm@Ry1Sv*!Wc;YL0+8#gwcg7p6+d}B%m;_|0kZhIt1p9 zB?_b{eIDX_Jd(t^yL)s!NDe&`oPqa2Eg^wg$*ti5+(aJu^$)n+kZXxNtj6Vaff#G( z&^sD*wnA-0tc~^dcCP5?Mhg4GVpw87BFD->O4JkR^D;?l;Qd@Ykc+kP0Bx*hmrHl; zs=+`BxjU{T2{L0IM?wojl?Z>j{~K`F7uFOHliKJ}!>EAha-(G6wIaCR-y4Q+D*d2{ z(xUVznwLubWl_m4Yt~Oh zt6FvQ?1bE|Jo+eQCWY}R9)@U~oQ^fnOSX+B{ypcS{E6VptC{cqwOyKe%(>Q8h+>h( z>@;7|GuHTc%u3rC%ZgZ*We-^vei4#mq=x_+vLjY(I0ilEv6!8mntZd2T#y7Ya+fU!Dib+w(lYyuJKJ z-pIePY@-8mcia~WkZn8TNN8dBund2C>@pmVN1|57F3i)TMo@urei0=DFO|V#F*5?+ zRQjPZN{iB?XlW|-&2qWS6RNzjG}*~H56n3NBTk{@#OE16DlFPGzSM}WWTDwdr7_a^ zv{`>TT9q}-v!~^DYj&10D@5=p85_|!IUSdwFEEDY$=^E{8Sbco9$9%>P>x6 zA&Nyhv-8X=E4YV6DSENUu*wLDXyyWqz(uIJ>;XPOu9G;tzz((Oar!G*Y_tk6<7*k# zXzu{?bKs*z2%_Z{?jhV`Sk54D;0NIzR{;4c4nmO-z~|^ad_7}T-v``lZPjtLeztK>|0wR^jeOF3pU&SY%{Y4JG$rom-iL|9ad~de z?WRAPibQwOc%LO+RrXm|m5FQa73IAU{mbYEVco&rwgzV2Fn8*A;Tl*{P6HbN4g{dI z-~giFWvIEF0jxs4UErt)JJjWj)87I{(Bj2HE!lt;bJ&h?ye8}b5lTc(5nS6qArLrV zkKmds0N53WWr7hzhCWR&2?qq&dB`*_?eISnA^@;Y&5=xa?dUTch5$xuaE*fe4{)u2 z6t3|`KItu6=kJte9KCaz68Ce<#>C;+b)sv&5ns z?tF03oL{od8)tT|>@uGM!Vti$ovuH_r|XH;)3s0`90t}-*K4QikNz6gD+UzR?d(>1`?tKlD~)zh`Pdb++BqSsE>Yac^aKZg8&p02TH qq@(!GwR*ZfvwFI|cV~%3Mdx%qbN%oCsuuPSUAgu0m0QArFZ~+=Hl0@h diff --git a/bin/mega65_pxlfont.rom b/bin/mega65_orfont.rom similarity index 92% rename from bin/mega65_pxlfont.rom rename to bin/mega65_orfont.rom index 016048093554faa37f9b9294845e0b992761dfdc..57418010051a35867c106a1af8b67b9fe62a5c57 100644 GIT binary patch delta 6627 zcmeHLZ){sv6~8Y{U(+^A0$Ix&xbP~{sc9?Z(j_vDsJMVsO`4*?3@^F)XCj2U ztcr@?v!an0kVyKnEicQku?E;t3k?z4ij+2vwK(1?Y*B6P_`)g|y@?ORl{ICawmyF6 zJvW&&Y4D-jq>*F$9-njWJ?Ff0@BQ7Yr)f2sRx`d^@XUSgGpB^{`Q}qMYWMKRd8TW+ z=Str>KEqz9D?MO6<}1>g|G}|3F{a$$xkB&HTamR(Xo+ z4^5sIy7Zfqd(c{wIX910U*4;9!W7?$X1Me6LFLbad^F+wWB3=ZbqsFh(m_SP^VGgN zE=P*vJLE8rZzrFJpWdbR$V2bMx5k*gfD)ytiEBSbAFuyzbXsj#WkZg%5`5nmz(N-tb zSik&BCC27jn(K?lv-QROvkR(Mfpchz#g=TbxZ?z9cEPJ?+g9dUW*5$rbtV5->hPBi zsG94gpE6;(V)4Js1IQ)*SxOv_wk6(pD1JX>wX2eqjFj;#k>bT>>bM)~3(c>^YF;1h zDQ+EWc>96a_RHfve~0>=H{`qs8x?LZWc_>3G>JUkP}KoNfqp22f#e_LQz<|QU2H{vu(gr^XTHFXy>)d6Y&(`H5a)wl;)lGF#1v&f zRi7Y-UJ1^?2cedbK&|8+!UMR8yzm=1<90)?CGxTwm(K-atf5_PZ&2Afd5D;Y1%n;y zI{G7p0wFOZu^*CSew-5Zo*wiuNouhBx$HnL=CK2KSj_>K>N-$^ff90eTuBmS#=MS% z7KSPj{?x$N;czfC#Jx=N(4&S>0nz0~$-rwx@IW9Kf^RDQSrMg0=}|NvmHLaKDB1~C zrp!lna&8BI1ki{THlm|Z=xrX2S}7wsVZaWfJuYk#k-c1|{)VBC>hKpO!nm0+ zO`DvVfj$z(K=KbtsT3fLF1F$+JzGh@uu{=qrElLxVB4`tfed3JP5fHgG_9GLNlhCg zhiMbez$c(KkwD4JMeqPQqBQ(QM{_yIC8D&oR!9{uxjXJn6S8Hc z9SJQA@0HgW@5sEkj(gaYq7R!4 zyNr;CRxZ#8T!h+|y}&2Pb&?G)utP0+o&Fq~jdlT6d@aKs4W3~E8~A7wf@r&i1_<{U zwlfGE_(8a5D}a0zha&AqM26l+cmoH7d@jf|&gbxlXlnua2HHs`;B)j|dp~1W-viuh zZB_AU{dD7=`hMKQjC|Z@pK8x3tvH%wuh#_9( zM~tid+%@-yK=dn-ZNir0K~DqIZ>0CDci|dXQceLI01gD8wBZ1v;AN<7ISp8aeA~29 z5q7A{X{WydjG)bnjasq*E&8Yxwegy;14Jkho+P-ofI=W}z#hT1tpH$G9F_@25E=Ru z!6Y0IU>6|MxRk?RAw&RRPcD*7cvDi>+P95K#acYnyql8bD+^X?@*vuf!#GW-7& z`~H^%kN((|_}nq8e*Mh(1n`F7X7jH7DZXnjZQQlDR0wFldDq^&Yk%~2?d6TT_PZ4V zY;NAQ|NA?J&AT?vLcAaPNZ&JkGI#B}Z$38e+UbqE_6H$)^RB)5YGmWp$p7bE`|b;y ljk|Vce7{{cV4o-6Z}44fUi zd~{knqd9@cM!z)r#;9xT>*`a1U;Je5t3p?UYs}ga-7l!t_o7Riv{(1NTiBgiC!Nu( zFCRN61gw=~+i-V|T9;(fKswb7rSy^}9Zb{pFEzCx$$SIpj3qsj&NL;D z`U0x-f`)LIeFxL2_3%&a#4Yp9J{c&qX1bGVVPob=+?z5+ zG9*o?NjBHr*-|=?YbouTy=Ztduu)8xMkJFM8ET^U_@R?8S3rT`Igu4u9x} zsIhn#1|qjvj*vgYPrWdgfVN+_~T8g z@0Bs@8{<1Rsin>1g*(ZuZ=X}=L*oHK2wAt|I|a?!a-!pa8j3U>p|QAr%JCmL5_wnp zap;{*7gh$OpKGDW8zc!At`A7BXpvG?xH=%sYLV3?>7T!vEj3*8kNXaU=8Y2`p-q*3 zn8qxG${CjHC@(PS`>M6{(~dprg-4d=Lb-hfm-JL%{_jjGhoy^-^o8{NEhcSDOTFRq ztRW{Co;xHo6b}3T7Phuc91_CT(8NyMrzW0lJNnDX((7>bMbrIYM|@L(`SQdgjlW5L z=ZnH#>${gzhF2LG@p~EbDvGWsjD?l3qJ$ai^Mm?G20_;SVZUFmaX;Bd6a{u3hB&VX zLZ0m|m!g0x!@=M%^pu9;2FHw{!9nOX9f7EJq# z;lYJ~cG>Ih5t;g};U~I(z*x_4&ySS-(2K3yPozSK6R7|=Q@oBB4Z#7GxCy1U&)Bj6T2itfTx_`_WG`Y~qk*ImefL|z3002%i_ z7dWcXRpTgtbfTLI>(ve*Q9oW~bNi!=cj!1|#?a`Z*J_!LH!zQNc3SGiE1@H!C~6~^ zTvv^_Bjy0r9S657S7e!fc;v(whR%BbPrc&ua#t7q8f!#VNVfW|*9<3XPfaDV4!CXF zw&O(YsBK3bXCVPvAQ=SNOhgk2v&Iu-pR#S(c^KldMG*3=R4TR&ZUZ1J=qU}w&5TD* z&dfj`HxbC|!O!3YkolhCJt~L`aw4`;p~957NQFR@m>A@lnUg0YIg+zk@+U3%ndM@h z3TE>l_^;1QS#p;{4ynMGtRE2a_|LNBZT67%unAg=uIOZSLIL>k4gY5ED@ePhT z;p28WjAf43x39X&xW9tc6T~a8Gj|nVg3J%#Bi!qul|YM89|D16%@Rz}DpkA$JEREv zdBPD7mbca;%RzGR>$K`+9rd@Nf0=ohR~J3g~K&hL=!yWR1T;VU(DxY+Nr@c(6PwTk<5fvgx4m*2}L2U!S#LM+V~h;V@e+KmTk~vKCmqt zZ{DYFC-)98%ZiH@OqV@l886oy|bq=mUpb1r+3wNnTL-s1TffTu*p0Kgjw5V z{+rWv+sAg9|MBU1x_-JAYD63Q+Ua`jbp60j*Qe^I>kn&$U3TqsUHhuAcDnv7p04>< z508h{PuEucbp1()UOQc{eGI984Eb!HuKCBBT+XSVu20ub*Pq;35^-1cbUlCLum5Ng Q_C~MX`rXxA!oDZ|4SMXMZvX%Q