From c497e3b03c20c87276bcf9ae806b45c536f73802 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 24 Dec 2019 16:38:05 +0100 Subject: [PATCH] LOAD for normal (standard system) tapes works, still needs a lot of work --- CONFIG.md | 6 ++ STATUS.md | 2 +- 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 c64/,,config_custom.s | 3 +- c64/,,config_generic.s | 2 + c64/,,config_mega65.s | 2 + c64/,,config_testing.s | 6 +- c64/,,config_ultimate64.s | 3 +- c64/aliases/,aliases_config.s | 4 +- c64/kernal/tape/load_tape_normal.s | 41 ++++++++++-- c64/kernal/tape/tape_normal_get_block.s | 74 ---------------------- c64/kernal/tape/tape_normal_get_data.s | 80 ++++++++++++++++++++++++ 18 files changed, 134 insertions(+), 89 deletions(-) delete mode 100644 c64/kernal/tape/tape_normal_get_block.s create mode 100644 c64/kernal/tape/tape_normal_get_data.s diff --git a/CONFIG.md b/CONFIG.md index 13effa95..31c8437a 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -119,6 +119,12 @@ Adds support for JiffyDOS fast protocol to the IEC bus. Needs about 430 bytes in KERNAL segment. If unsure - enable. +### `CONFIG_TAPE_LOAD` + +Adds a minimal normal (standard Commodore format) tape support - just LOAD command. + +Needs some space in KERNAL segment. If unsure - enable. + ### `CONFIG_TAPE_TURBO` Adds a minimal turbo tape support - just LOAD command (device 7, like on _Action Replay_ and _Final_ cartridges) diff --git a/STATUS.md b/STATUS.md index 110815b5..31ed9acc 100644 --- a/STATUS.md +++ b/STATUS.md @@ -52,7 +52,7 @@ The following ROM features are currently missing: | Driver | Status | Remarks | | :-----------: | :------: | :------------------------------------------------: | -| normal | NOT DONE | | +| normal | PARITAL | works, but needs improvements, no error correction | | turbo | PARTIAL | works, to do: use sync to calibrate read speed | ## IEC bus (disk drives, etc.) diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index e5b98544964b25ca2d62911f6e69e2c72711d294..b616aec83ba944e707e58e5dbab8becb37c69457 100644 GIT binary patch delta 173 zcmZp0XmFU|q1pdtrM<$X{~4Ks7)#xs|P-wd;+~#J8Iz*|``&I#fAqn3-O`n4HWV1msTM&ixcb o&EwGlQD=B8K@>Z$35c@gZ3C*@e3W;lAfw6Tc=>ve-~)LD0MaN0?c7g6 p)I1&?5Os#f5=61{nt&)<-Zr4h%}04>3Nji@j+d_o2|kcl000^?QtAKz diff --git a/bin/basic_testing.rom b/bin/basic_testing.rom index 0f7c76c66ee5cc893c3a3b3b7498495620c3b465..1b0d3c9bcd2a1c24b07039a176dc6d31c531c8de 100644 GIT binary patch delta 78 zcmZp0XmHrz$HJoh*5}*gAQl})gU$6UXPKBx-%j>p4`(!(yo}wDv-17Y4GNX-6$~an gV0Q+pP~nJR0aCR*Zj3;Mn~(C&6l64+9525R06iNT<^TWy delta 78 zcmZp0XmHrz$HJoZ*5|?GAQl}){mu0(XPKD9pHKE<4`=%ZF$%^bYlMUF}CdaZL18G&|uwiD3e>*vu xI|#^~yq)_gh?>Wv1ES9GSb`{aUK0>y%i9K2x%nvXOhHDI$?@{_Ai)Rn3IOMgO!5E# delta 182 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 Gzy2SEoGnHG delta 3334 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 delta 2984 zcmZuzeNa@_6@MQK%Mu6=(d;V99yLa=C?CdlV@)K{MB?05C&{#$PMVjRChLspr0ujN znNC=zK4$9-ammG06wCVD2P_S`#F-j2G)SznB#sY3Bx8xz2`t#`?t|6c#gyHix5zYq zWM}8Tb3e|x=bm$Zzk3}OjtbX?!jhnOBV0+^+n}i(%mH~RewFq9q?RRHQ)2UDkmZJw zx>sLfOX_-7W23ESOX&C5b!^G0SJ)`G@ViVvNf1itn}#i`H^;X9o?tAl=9L=rc9S7>?XRm$i^2H;r zr=BoOe|_u4q0cs+?Fiy;W+oDu)HE#^4##4&DXp{&9@ideQCj?*dRLT_ZXPa=I@No9 z>Rl9M6Kn|iIc?g_eAS|cu+yhT>3H6=)kntQjuEzp$-yzy%m?hx4T0zW9FFMInk&C3 zr*(E(nz{c?bj-|ZWBB!TkBo)x8dW|NHHz(bjkXE4_O7u#YMfwdaYX#I=aQ{dUek4D z>}V_3C&aw8H+_9IGzPs%>A3f0$penCk0;|{QS<`2k|djw#2i)5z(|N}OWJ1zV^le< z@?>QcE+uee@04%Y%V02l{TN2y6&$)4@_ptNXRY4efF zorH-53EYLS%AM^k=w? zeuInmTSXgv%d}#LDU5rs2r3t}tL=Z_{MqU%D2&6S2`G*${gPj~BK5&^w6)h+dak42 z4_d5uUoRd|bu-#oRFDlL22IQA6XMV}iE8AXiLQLDt;DG)&x5~q{0NtKx&bt^wG;Ixa?&M4&Y>DcfQ*USfjjP6`pNsPENO{PcjWq?EN6Bjw z@M;iSccxRA5sR6T?ca#mNgn?qQ{ixQcRL)YH7E_^8vW$b5Xp#DdECv%6nTf(o~xRK z+FVtv+UKr0CgF%>x5LHl{)DWaP#Ul_pPD2;pR82sHG>UqRLAXNJ2PSuimuf%BjT)G z=^_SGacKr`wnZd^K`&EV$LX6n)TnaY&!Um?Y4YZz{6c#(r*ZN&^jyZ9DH$jCI|=Pg~Y~&X?e~H^RlqL71l<` z+9=wuM{nD(@LGcOS2-2)YvW*;!DtJZgfQw_$XJ~Azjr!wq5|^wJjD2dX z5Z9q;DhNv!x|#E*wfXW{_<-v@f7+t5HgxI9DYA_ILRc|xF38#(OYNi$!g|Empzz4N zxw?CO6wkLcM1DI()69kJJ9Le?oFnhiid^gCI>tz725CY%z3=0iv#CQ?>8HapK7U)z zO*xf=PJt~7U2&+;XJn(7sf1@}V=i!Aar%$kB?T!%@nE5Tbeov^pwZMcxaZ&@Cu;`h`>dDaSPBRpe8yIU>-stDn>uq6)$c{AV0%q`}Ke zhs6gFTO9T-BFyO4ymdcFg>lQMMN|eXy9=cOvC73=IG(C|th={Dm5Qe*r>$#uO3*5s z>oG}iZ<1~?KALR{BbE^uNW*VSny;_ucn zkvpmVp+6x3D|Ldwn?yK!8PPM;`2{2J-fhL+mC{uaMyBa5^YXHXVo13W<%%unz=4 z&(h@Apqvg`HgebFbiu-vyISK_7*AI^yq(bFdQ2~O*{B+o;~Ebih853N$>U2$7?8Ya z9Uw?WxP}D#gzGy}_!Tnx)Oe|mb7BiurP78uLpULfif**&nQB^CQGE`tirTahZ=%*P z0(SzC48ZkKH;Yf8x(|E1)A0V-5W?Futj{eU_uaw@IRfLO`uwL)A3+(*YzljAxZtZJ zDo_05WMEtw5Efh*!aOk25I7_E)9`;Om5_f9_)PRnUI|^d=o9w&Q+F4wVcBZ>@Z$6A zJUX$soVC-%OH>Y-E41Wg9QtuVaXR{5`i)3$r4^@-olv>4lQcVh*-!D_*QqHhMNRtk zPlgksa#Z+6&QU1d4rY8A$VJ%T6=Bpem6I5BbbBo%D~^RpzcBX$%oAfG-2GcZysLk*|Y< siPA2s_2KFuc_X-|kl(Y4-&4$!CXM*-kjzo{zhp*am_LVZ{g=P}Kc_&np#T5? diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index c1d6bd4f784c0e5a545a616f47e65149d7d4d0de..7d3f9735d3d83017e0c09b0469b9e922f57e1503 100644 GIT binary patch delta 3778 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 delta 3440 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 delta 2321 zcmY*b4^R}>8Q;4-I1VMOsN^sqJp9X9wP-?%9gWV|6dK<|r=7OSOebqPjU;Mj+Hpqe z=!lWE#0iLbI6W4$FT5j^I`TB0{5;g1}tWDz~lN`rsya;K)g1G(Kh;I`j#X=i$~ z^S<}K?|t9C_xrxzcUxJRR#}Y21B<35kBnl5X=z7gu67_Vu%x3fB5b0~)YAhFg5;lV*DXl9E@p9{0L%i4eieYrM zrkgUqk67NC3`xA7+6~*SPi-cM-4C~KD_r%nO{-Qj4A0{OPUe_6XLOb_yG6Q@GE6NE_#SN-c{iZgytRQ+?}0!m z-_Ly`W{%tmDXFzb&A4!)pBsbGZLJzQ>PG_s*HE*cN6rA=OL7B6Z*11^nX!~n!G-o| zZWbXGmONe;BXiSi&((gEmD@Py1Y3E$eqKiP`*UY`TBfv%=gyqG{9t&~DTdNWL{+2F z82qTFJ&H$&GvG)Ox8iJ-3mV6@psi``#ZzJGahf!u_G>hhTy$h^z!5+ zCoWx7SiCll{0Y$P3A=}72Ca#?2hp>L`#Pw0Xzs6MK6%J5(G|_@MQ4LTyD^-XI+Zl( z3!z>5QaF#ECM2TRq_aK~1pLiZ2-zdnKy9QlINbQb1CH)RMoIu}2-ACe5ons>% zLC@>SW31PW-8Mt3u#$@}FUPhZZ>z(PRp}qf#@=h(I_Ya=2^t{%!Cx;sPSKM|w2O*! z+L)2$TxP$bqSxanHi-@z7SSp*rRX>%CEq#^{eeC)-Bn7ZDBa-H5%Wm2dfR9XbJu%; zW|;2!bei+It}J$1Z?{p!)?hy<(H6WgRLwmt%XEZ+J~T_c*FG@2%gNiJ`PQu}c7{4j$@`&q zmmqvyM;pdvT{tUmfMi#+%~1f{R}yd)hgGPDL&C}Dgtuok1bNtqiXwF^UKzI`{2ncXy$K_8-OUsa!M5)>yxFSqS8izy@C7@ghEX{bMfa;I@+*!xYa z)!P*#YB)Cy?m5f2CwcLaBezWTZBf!&X2P&gs?KG}Df;mQD)YSc$dXDb=u2EL1snQl z0LB%}$ks{n3C(vfl??p2#WEw@5Qf17lOe&62Lcr?XLFMzZsRMeoJX4kGD@@U_K0)~ zwdmyE4E|Rn=^|Xkff&h&EXnYt)meR(I@XuR7xU!RNd6CsBE*~l6$_}?ILECTW`vi9 zxcR+)&H~PU)JR?a&f5&fqDFEovW0{FFX#pPY1;1{?1Hi0jT6@s*fF-PLSneE9Ze_C}CLU8kXtVV7WwgjV(*JsP3hpH?)5l%Rl7I z5ep0+{g*R~jPeD}JdsTXX95OiMw6=B@{S~D6d;Jpj@GF_k{O9EC!hy*eZS~QDC6Kk zLo;sjy%{Iy1v5H3kMlGJT~guBr(~9_8{cGsqwMt@8DC?{UmYQDNAS;eR1$*{Ssk~H zLOr2yP`cIX;DLif#Q*G9)<6t84=N&SCK^lwRDPFd6W-%@fzUAV#Mboh$K-ziJ0Kv`1;kAcmD zlLg>fD%C62V7D8Uv&8SPqh!kmP?S1tafG#H+CqM<@{U1{{ z3NC|Qc%OEs4EZLJWg4o8W3ivqYHLip$QRmz6u$~@B%|7jLu(B1R>mQ9xN02UGt<6a z9y7AOL-Vj2sBApC81!f=UOx6etZ6d4EJiBtIdy6H=3J zfuc$xkj$ugQD~xJ*<5qnEJthV%)r@e0{L@nF1Z|AMvf#3$nL<8$P4jp zm*ydbbNT7&UOy^RrJKSKUJ1lhT|?bB>4NIMj=|~^gMA(2)hEXLx^F5^Q5m@&FEC}3 z$#~A5Y*l1xkrLvj#Z-`w6bf)WoUDMxS(l3TQIKfFXqlo_u}WttizH2Qy)L-isnAOC zwn-y7kXhKXKhe+qbDLe4EId3p9b5ROizum1=0v+4 zz7+=BsaDJf+ZA*0JP%Cj0v2`i!7f;LOWi%^6^qo>)6Pqc+&qy%*{YN2zDR8ym*9({ z58q1|hDk9~BGfEC4`$JUvdM3QFJ@$`nAO2}6+Sq!$E9Ff zT!rz-mxQ8|Cs6~?mqxYzxDtC diff --git a/c64/,,config_custom.s b/c64/,,config_custom.s index b3e0bc11..226ad47a 100644 --- a/c64/,,config_custom.s +++ b/c64/,,config_custom.s @@ -11,6 +11,7 @@ // - file contains options to enable unfinished functionalities + // Hardware platform and brand #define CONFIG_PLATFORM_COMMODORE_64 @@ -48,7 +49,7 @@ // #define CONFIG_IEC_DOLPHINDOS // please keep disabled for now #define CONFIG_IEC_JIFFYDOS -#define CONFIG_TAPE_NORMAL // not finished yet! +#define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO // #define CONFIG_RS232_UP2400 // please keep disabled for now diff --git a/c64/,,config_generic.s b/c64/,,config_generic.s index de3116f0..8049f2c2 100644 --- a/c64/,,config_generic.s +++ b/c64/,,config_generic.s @@ -11,6 +11,7 @@ // - do not enable features which are a significant compatibility risk + // Hardware platform and brand #define CONFIG_PLATFORM_COMMODORE_64 @@ -44,6 +45,7 @@ #define CONFIG_IEC_BLANK_SCREEN #define CONFIG_IEC_JIFFYDOS +#define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO diff --git a/c64/,,config_mega65.s b/c64/,,config_mega65.s index 9d1e9de7..87586d45 100644 --- a/c64/,,config_mega65.s +++ b/c64/,,config_mega65.s @@ -11,6 +11,7 @@ // - do not enable features which are a significant compatibility risk + // Hardware platform and brand #define CONFIG_PLATFORM_COMMODORE_64 @@ -44,6 +45,7 @@ #define CONFIG_IEC_BLANK_SCREEN #define CONFIG_IEC_JIFFYDOS +// #define CONFIG_TAPE_NORMAL // #define CONFIG_TAPE_TURBO diff --git a/c64/,,config_testing.s b/c64/,,config_testing.s index 911c9d38..2134a928 100644 --- a/c64/,,config_testing.s +++ b/c64/,,config_testing.s @@ -43,15 +43,11 @@ #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_NORMAL #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 08741cab..4295ccdd 100644 --- a/c64/,,config_ultimate64.s +++ b/c64/,,config_ultimate64.s @@ -11,6 +11,7 @@ // - do not enable features which are a significant compatibility risk + // Hardware platform and brand #define CONFIG_PLATFORM_COMMODORE_64 @@ -44,10 +45,10 @@ #define CONFIG_IEC_BLANK_SCREEN #define CONFIG_IEC_JIFFYDOS +#define CONFIG_TAPE_NORMAL #define CONFIG_TAPE_TURBO - // Multiple SID support // #define CONFIG_SID_2ND diff --git a/c64/aliases/,aliases_config.s b/c64/aliases/,aliases_config.s index b3ff8bfe..e07297f0 100644 --- a/c64/aliases/,aliases_config.s +++ b/c64/aliases/,aliases_config.s @@ -297,13 +297,13 @@ .var features_str = "" #if CONFIG_TAPE_NORMAL && !CONFIG_TAPE_TURBO - .eval features_str = ADD_FEATURE(features_str, "TAPE LOAD NORMAL-DEV") + .eval features_str = ADD_FEATURE(features_str, "TAPE LOAD NORMAL") #endif #if !CONFIG_TAPE_NORMAL && CONFIG_TAPE_TURBO .eval features_str = ADD_FEATURE(features_str, "TAPE LOAD TURBO") #endif #if CONFIG_TAPE_NORMAL && CONFIG_TAPE_TURBO - .eval features_str = ADD_FEATURE(features_str, "TAPE LOAD NORMAL-DEV TURBO") + .eval features_str = ADD_FEATURE(features_str, "TAPE LOAD NORMAL TURBO") #endif .eval feature_new_line = true diff --git a/c64/kernal/tape/load_tape_normal.s b/c64/kernal/tape/load_tape_normal.s index a28bea37..cd2b0254 100644 --- a/c64/kernal/tape/load_tape_normal.s +++ b/c64/kernal/tape/load_tape_normal.s @@ -63,6 +63,31 @@ load_tape_normal: load_tape_normal_header: +/* XXX try to reuse block retrieeval rooutine, like this: + + // Try to load header into tape buffer + + lda TAPE1+1 + sta MEMUSS+1 + lda TAPE1+0 + sta MEMUSS+0 + + // Initialize checksum (RIPRTY, see http://sta.c64.org/cbm64mem.html) + + lda #$00 + sta RIPRTY + + // Retrieve the header XXX limit it to 192 bytes + + jsr tape_normal_get_block + bcs load_tape_normal_header // unable to read block, try again + + // Handle the header + + jsr tape_handle_header + bcs load_tape_normal_header // if name does not match, look for other header +*/ + // Read pilot and sync of the first header jsr tape_normal_pilot @@ -117,9 +142,15 @@ load_tape_normal_header_loop: load_tape_normal_payload: - // Retrieve block + // Initialize checksum (RIPRTY, see http://sta.c64.org/cbm64mem.html) + + lda #$00 + sta RIPRTY - jsr tape_normal_get_block // XXX handle errors + // Retrieve data + + jsr tape_normal_get_data + bcs_far tape_load_error // Advance MEMUSS (see Mapping the C64, page 36), check if end @@ -130,9 +161,9 @@ load_tape_normal_payload: bcc !+ inc MEMUSS+1 !: - - jsr lvs_check_EAL - bne load_tape_normal_payload + // XXX check below does not work - why? + // jsr lvs_check_EAL + // bne_far tape_load_error // amount of data read does not match header info jmp tape_load_success diff --git a/c64/kernal/tape/tape_normal_get_block.s b/c64/kernal/tape/tape_normal_get_block.s deleted file mode 100644 index f4e3798d..00000000 --- a/c64/kernal/tape/tape_normal_get_block.s +++ /dev/null @@ -1,74 +0,0 @@ - -// -// Tape (normal) helper routine - block reading -// -// Stores data starting from MEMUSS, Carry set means error, on 0 bit .A is 0 too -// - - -// XXX does not detect block end - find out why -// XXX improve error handling - do not ignore second copy, handle damaged checksum byte, handle damaged sync part - - -tape_normal_get_block: - - // Read the pilot and sync of the block - - jsr tape_normal_pilot - ldy #$89 - jsr tape_normal_sync // XXX handle result - - // Initialize byte counter and block checksum (RIPRTY, see http://sta.c64.org/cbm64mem.html) - ldy #$00 - sty RIPRTY - -tape_normal_get_block_loop: - - jsr tape_normal_get_marker - bcs tape_normal_get_block_checksum // end of data for the block - jsr tape_normal_get_byte - - bcs tape_normal_get_block_done // error reading byte - fatal for now - - // Store byte, calculate checksum - sta (MEMUSS), y - eor RIPRTY - sta RIPRTY - - iny - bne tape_normal_get_block_loop - - // FALLTROUGH - if we are here, it means the block is too long - -tape_normal_get_block_done_fail: - - sec - rts - -tape_normal_get_block_checksum: -.break - jsr tape_normal_get_byte - bcs tape_normal_get_block_done // cannot get block checksum - fatal for now - - eor RIPRTY - cmp #$01 - bcs tape_normal_get_block_done // checksum error - fatal for now - - // Read trailing pulses - - jsr tape_normal_sync // XXX handle result - - // Read the pilot and sync of the backup block - - jsr tape_normal_pilot - ldy #$09 - jsr tape_normal_sync // XXX handle result - - // For now we ignore the backup block - clc - - // FALLTROUGH - -tape_normal_get_block_done: - - rts diff --git a/c64/kernal/tape/tape_normal_get_data.s b/c64/kernal/tape/tape_normal_get_data.s new file mode 100644 index 00000000..71efb6f7 --- /dev/null +++ b/c64/kernal/tape/tape_normal_get_data.s @@ -0,0 +1,80 @@ + +// +// Tape (normal) helper routine - data block reading +// +// Stores data starting from MEMUSS, Carry set means error, on 0 bit .A is 0 too +// + + +// XXX improve error handling - do not ignore second copy, handle damaged sync part + + +#if CONFIG_TAPE_NORMAL + + +tape_normal_get_data: + + // Read the pilot and sync of the block + + jsr tape_normal_pilot + ldy #$89 + jsr tape_normal_sync + bcs tape_normal_get_block_done // XXX make it more erroor resistant + + // Initialize byte counter + ldy #$00 + +tape_normal_get_data_loop: + + jsr tape_normal_get_marker + bcs tape_normal_get_data_2nd_copy // end of data for the block + jsr tape_normal_get_byte + + bcs tape_normal_get_block_done // error reading byte - fatal for now + + // Store byte, calculate checksum + sta (MEMUSS), y + eor RIPRTY + sta RIPRTY + + iny + bne tape_normal_get_data_loop + + // 256 bytes read + + inc MEMUSS+1 + jmp tape_normal_get_data_loop + +tape_normal_get_data_2nd_copy: + + // Read the pilot and sync of the block + + jsr tape_normal_pilot + ldy #$09 + jsr tape_normal_sync + bcs tape_normal_get_block_done // XXX make it more error resistant + + // For now skip the error correction data +!: + jsr tape_normal_get_marker + bcs tape_normal_get_checksum + jsr tape_normal_get_byte + tay + jmp !- + +tape_normal_get_checksum: + + tya + eor RIPRTY + cmp #$01 // sets Carry if checksum verification failed + + clc // XXX checksum calculation fails - why? + + // FALLTROUGH + +tape_normal_get_block_done: + + rts + + +#endif