From e410bc0900a77f716ddb33b363e9f043ceae245a Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 27 Jan 2020 21:08:35 +0100 Subject: [PATCH] completed tape format autodetection, updated binaries --- CONFIG.md | 10 ++++-- STATUS.md | 1 + 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 | 2 +- c64/,,config_generic.s | 5 +-- c64/,,config_mega65.s | 3 +- c64/,,config_testing.s | 1 + c64/,,config_ultimate64.s | 1 + c64/kernal/tape/load_tape_normal.s | 41 +++++++++++++++++------ c64/kernal/tape/load_tape_turbo.s | 2 +- c64/kernal/tape/tape_common_autodetect.s | 3 -- c64/kernal/tape/tape_normal_get_pilot.s | 13 ++++--- 18 files changed, 57 insertions(+), 25 deletions(-) diff --git a/CONFIG.md b/CONFIG.md index 73c20b49..a9236166 100644 --- a/CONFIG.md +++ b/CONFIG.md @@ -147,13 +147,19 @@ Causes screen blanking during JiffyDOS file loading to increase performance. Adds a minimal normal (standard Commodore format) tape support - just LOAD command. -Needs about 850 bytes in KERNAL segment (if both normal and turbo are enabled, about 900 bytes are needed, as they share some code). If unsure - enable. +Needs about 1050 bytes in KERNAL segment (if both normal and turbo are enabled, about 900 bytes are needed, as they share some code). If unsure - enable. ### `CONFIG_TAPE_TURBO` Adds a minimal turbo tape support - just LOAD command (device 7, like on _Action Replay_ and _Final_ cartridges), up to 250 blocks -Needs about 700 bytes in KERNAL segment (if both normal and turbo are enabled, about 1050 bytes are needed, as they share some code). If unsure - enable. +Needs about 700 bytes in KERNAL segment (if both normal and turbo are enabled, about 1300 bytes are needed, as they share some code). If unsure - enable. + +### `CONFIG_TAPE_AUTODETECT` + +Tape format (normal/turbo) is always autodetected. + +Needs about 100 more bytes in KERNAL segment. ### `CONFIG_TAPE_NO_KEY_SENSE` diff --git a/STATUS.md b/STATUS.md index d4891fe6..d1cdaa6c 100644 --- a/STATUS.md +++ b/STATUS.md @@ -13,6 +13,7 @@ Here are the features of the Open ROMs not found in the original ROMs from the 8 * turbo tape load support (as device 7, or using `←L`), quite sophisticated: up to 250 blocks (can store bytes under I/O), automatically adjusts for tape speed differences * normal tape load error log is limited by free stack space only (no artificial limitation like in original ROMs) +* tape format autodetection; normal vs turbo is mostly transparent to user * improved support for tape adapters (for using regular casette players and other audio devices instead of Datasette) and emulators * extended `LOAD` command diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index e3d073acbe56d49a574c70cb50146e083db16466..b8cfb3c36c64ff2b1d8ea7134e181facfb61d607 100644 GIT binary patch delta 167 zcmZp0XmFU|p}F(bN_&M%|1(x8Fg#G$@@kPHkX~wa^8W{(Me<L_rZ%7;5N%$_qRPay<<;a9Z2l}eUoj+1R%ExCY{1SoIhOqx6Hs22 nqk;uUPoB@C1ES9ISb``HUK5a{9k09)qtWCz`38{S19=4i7A#1# delta 167 zcmZp0XmFU|q3QE_rM<$X{~4)W0k_H)e4y(7b${huQv)_ zlT}$F8NDXgvo!LfshP~rD#7TrS%Y;w6Q}L_r5hA%-z#`+e!%{hnJM$*=KI|GLO@x5 TIX^~5qsejd4M0Qg%PRr^4z4kX delta 132 zcmZp0XmFU2!00_OQ5Q(`TLFnvri|X37)W0k_H)d~S`7Ab;g?>7qG zlT}$F8NDahvo!LfshP~rD#7TzS%Y;w6Q{}hr5hAX-Ya--e!%{hnJM7S=KI|GLO@x5 TIX^~5!^v^-4M0Qg%PRr^`<*c; diff --git a/bin/basic_ultimate64.rom b/bin/basic_ultimate64.rom index 6bbbab86d774bc6d7cdbcf32c6efb9d55fe4ec3b..d83c3f6fe35c9a2a28bb2a0829d24e7472e05626 100644 GIT binary patch delta 172 zcmZp0XmFU|p}G0hN_&M%|1(x8Fg#FL_iB+MkX~wa^8W{(Me<0Gf~K44@zoO>UO21pt#FNs#~m delta 172 zcmZp0XmFU|p{ep_rM<$X{~4)U0D28SuK)l5 diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index 90a888be89e665f69f51562da95bec5f40e56eb1..ce28b37e9aabfeee71aa89aed6dda507949346f0 100644 GIT binary patch delta 4597 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 aLw+}e8$vkE@9Y&Q_W8nJM*jMBiuylU=`1(^ delta 4419 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 delta 1925 zcmYjR4{Q_H8TZ}Ab{w4e@`uC;B>7SjFp!0qq|_2H0^Pu+uPdYr8e|fO&{U%lX+xtz zVkxA>W6cOPdTEpuR?OiGxs+sXQ56DoWFe!N7IKg(g$zqsRXYj0voEH@cDIndbF^yG z>C<=b-F@%(e!t)M9j!ZB=dsh<h{4@#Lt2dMTeF77lve9fb|#xoJu=5D~G-MRoUpBkjHTGExNCTKJgZPvW3PI`WCh} zD)b=|hJb{>qFVfG!)Cq7gBDEUYlbc6kSxx*&x^aY!q{R2Y7ee9)@Q7Wpq{WxxB{#2 z38Qt4)I61V7iS3$9>|x23oZ4Ml9|as+)47WyRyjmP0l?a-E(Ulu7Kh(j9UiTS06 z;+}cL5Fa9AOGTb^1;c{qZZj2#sNJLv#LYORe8?4`*?$&EI~$fAjZ{&4CA z*<+X9%(y~fmPyOMF?7dKO)!4J@dweONih@MpA!Ki^J=OPA2By9Bw$VK@~_%-LCz_( zt7#5sNV@Q}*-po1@#4(#??s*<+WAHYZJxBwXvWEhu8 zM3*tnEO)qiT;0M&r_kpVdY!_b$rr6o?F`8nZnwJJ?{QXmDH(1@pDV&2VV&Y>YT6#pUK`}NL5&g z|B=12VS5 zkT%@B!>$!Zq$NZTHvhS@dPTT<>R#`0`qUF5#)z2bzQb_@XKK`JAYR9><(C@{M2Jr| z;^zEX(k>t8JC_J^urnl_X#)xUNj^mWyx9wq`wSG%qTM0!y1N5PadANbRf?Z4SeZ|M zciOY*hn*K%TUy6%BtCoP@iRr9oyBhyl(Y59;4+CJcDr?Kl${`;dJ48JdRtcYguWM( zP#EbN`{W^;162u)19%%RwC*BP=vUS=#4nkJ_9MHdVSfk|1nDEQi_Ae>F050fOq>oRYYjKX=9fugA3+v@iD4Wwz%*`#I_ z($D0ZCiyn|_n)Pv8k01I!egjeCBxD;Ht;oGwrZcM~@b!#oB46 zttQxPdZLGyERq01j>~Pr#s(H02M!w>$Pcp-^kEPaO-AbUF3J7MUIOf00$jgu15^KK z=JNKv@B8(A-=Cjvb$NBU_a5eGWDtK<`C_K~t>i2dnS?>5uRJzQMq8 z_=05E<=0?0a+BmXTCAN-JYDLEpwSwzszxL;id^tueyK5PoobG2Q zp_Q#Q1GN{?woqW8?IVlfH2J~V`K96z|@@GK$ zDkgs{akF=wfs4_RgivmAuKR6TcB93k^54Qo2@^gh9xYu$@^)3AWE{n>0=wq0tL-lD zlV6~{^kBI2pQ8x&*hFt>IWdU=&gH`C5XT?ngj1I9ls^=2H;&XDEkln-C5CUtjbVK( z20Vt5K5{mE4EKdOl)fru_-1MIt*0MJa2$WKCRlq)D7M~LwPW08=suy^j(>nY%k<%= zM>+8zJLAt21(oqHKs(0$rO=3{6r(y~9hxy+SuEk^^#92|OE!<8Cs-I^$n_s(0_7@69bkY{_ms@*|K8IOa21whxv zkSPwB8tYhpmDNhC@MjscA&UMOMO)&i_691|WE0k=kvR#X)24lfx_A4KQ-!uOipl@82edGGRY?yIK77{HJ zUd~x26y`2)>==hb&T?I6&XqaQPeM2`jh?5i@JMcvMQnZa9sV8RncO?>ZqFw+){{@T z${JtoVcx%ys|@&B4vWx%11|7`AY8}RYA>_(U-;y-(2~3OUcaH%Sl2~cPO2shEc*x+ zNe17deTEBecA9H9jM&)HFTkwe3{M^PQ^9UuXxHrmTvEz#qE{%lFZ$Unue*d_3;DA; zOw}W&BgE8Cu5f`yx6?WV4xDm;EqE>ec$GQ2lX>G+X7^5p+f~t6fkF{f9fcNq}K<|@QJ#2Vh?aPe<( z4m3Oy-h)rZ#Iqz{{FK&ZW@iH&`<=OOO*iE{&_15BTwe_lN5SO zLswF0AOiEk$lQk>_;cKK1l==*y&CYc$92Tj2D+|}-WpKTc_P-cS5D(6VraW=6)6~M z-U(q%UNP5`LgwqB1=fW3$Kgx|o|uuUJ%-_Sa`Nu!#>ptNi z#xh`hcn0StKuW%)^o%)fk`kNQIg&xmLVvyiGHDimXS=<~XFz7{yRBlYk|9}r?4;A8 zFeC!n5`1|}*UgJo0=K>Gi12Tt;_G;G=%x^iX@3TeUCvtjiBj!8e^?!tMm=vbk|rEu7cWta z#DpKzv&L63(EF{dAw~3oke9zocrj~LRUKb1y}<94s#i$n6(E)mr8)2l@k74DS5Ce1 ziV~FPfOgy@+1o*)4lr9-)v8O)n|8IeH!+UwKBg>GuinPyi1o_*YHn{m$%dYyGU0l$ zm4o#Mq$=36AtK+YS|vTwls(@nC(s6CM0j(-f+vJ|*|xd6>kEnx=GU33-`sPXz4vVW zuIDyw-}+7R!pAFDE?oYd9g#>hIzAqas_++`m`F`0#EUA^dl4ifUQ`?qW+G!@Iuba? zoooKZ*Q1RI+3D}}nQI#$o>9HJ$>o-YeiElM^ZhoRs-}I0|Fn`A4Eo7c2Zz^2g|+#M zb$7#yLy!&EFjj-7iIFm8ad_-+JU#{#_uBtCVZrPPcZ9xm z!hU@JB;8Q0{V!h3*K7!n#o%(egklgq_*_c}hYMCSLlNQ2g0)qUiowCDPeB^aC$#~{ z%D6IaKnG$lu}?Db`yp1UW`|_w@Nd)bmO!J*x&g-YoP-B&(>e`!{Zyc_GY8)1(!`Vd zHZkI*5fFIwE4P`g!}G7{yK=LH!!K_Xhez6VLOC z_!-|HxCkN9nI|e`<0ZTzGrj%3Cy5y)V|{MtKaML3QnkLCK6o$j8Ppay#cv+Dlu&c~ z*%aze!dW=`a)*{^>j))OKTyWVm74C_u5C^eFFYl7@u$V^nlm5;3NYaPe;HS-`UmyV zz-|xYzR_C<<`Kv#?HMmn2Okq z!%9Xi>dcV4eAXdTl-L>_FVBez>kF3_J`_{UZZ^dQAC2)>f{(@ctHHG~;kCk*%+{oE zvhaQ@z*z0}^d?Q5VKsds> z`N!r$N>a^bXl%yCLG%!QnRDlZdO!j09RQ8_1|OxvPbu-L%9tEef}qF-r9o!G4Pt|G zUA4K{OJakQ(WB;0M?EtW5ekbQtV&M99W58%A7Tp-my%H3dGxcZstIknMgzbARn@@F z2@-c7pX#fdavwk6S9jjsJwPVHgA@t8!yn?Ce6OMIgj|k}#34+37oEC_`|f=tgCxLnwo7TO`(uT!AkFm!wf^L0Awrh$+X`p8E&4o zoSk<4rovaGr1En^Jl1o(IQ4KSgN36@!zaiVv>kIVminu<_@MifApdZP80Pfr-jNe`Y`WCMrZ0eV^%! z3&q7X45+2K_$j73Dx``xFfg}%@qNpoprb&Y_1_2X43(H1p<{9dB;N^jEpAL8Ps0Bg zObSOAZ_H^-K-7FMf*KP7y9A1cxLC&)!2Vo+HL_gqhkrL2r!EV-ppv6SoF^e{T=K(J zC&E|>VJU)_-oQ7ac<3^I<2rt13d=Ffi~>HxJ16m1F?=kF7mQ-}l+d|k(Orw8cxiN7 hiD}z%)3y~Ryk-IiA~+}H8}=KxAC+&8eRGXW{1;m1>JR_` delta 3810 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 takeover #endif - // FALLTROUGH - -load_tape_normal_header: - jsr load_MEMUSS_to_STAL // Try to load header into tape buffer (we will restore MEMUSS later) jsr tape_normal_get_pilot_header +#if CONFIG_TAPE_AUTODETECT + bcs load_tape_normal_switch_turbo // failed, try turbo +#endif jsr load_TAPE1_to_MEMUSS jsr tape_normal_get_data_1 - bcs load_tape_normal_header // unable to read block, try again XXX jump to turbo detection +#if !CONFIG_TAPE_AUTODETECT + bcs load_tape_normal_header // unable to read block, try again +#else + bcc !+ +load_tape_normal_switch_turbo: + jsr lvs_STAL_to_MEMUSS + jmp load_tape_turbo_takeover // unable to read block, try turbo instead +!: +#endif #if CONFIG_TAPE_NO_ERROR_CORRECTION lda RIPRTY @@ -77,11 +84,15 @@ load_tape_normal_header: jsr load_TAPE1_to_MEMUSS jsr tape_normal_get_data_2 #endif - bcs load_tape_normal_header // block load error, try again XXX jump to turbo detection +#if !CONFIG_TAPE_AUTODETECT + bcs load_tape_normal_header // block load error, try again +#else + bcs load_tape_normal_switch_turbo // block load error, try turbo instead +#endif // Check header type - ldy #$00 // XXX probably can be optimized for 65C02 + ldy #$00 lda (TAPE1),y cmp #$05 @@ -90,7 +101,11 @@ load_tape_normal_header: cmp #$01 beq !+ cmp #$03 +#if !CONFIG_TAPE_AUTODETECT bne load_tape_normal_header // header types 1 and 3 are loadable, see Mapping the C64, page 77 +#else + bne load_tape_normal_takeover +#endif lda #$01 sta SA // this file is non-relocatable; override secondary address with 1 @@ -99,7 +114,11 @@ load_tape_normal_header: jsr lvs_STAL_to_MEMUSS jsr tape_handle_header +#if !CONFIG_TAPE_AUTODETECT bcs load_tape_normal_header // if name does not match, look for other header +#else + bcs load_tape_normal_takeover +#endif // FALLTROUGH diff --git a/c64/kernal/tape/load_tape_turbo.s b/c64/kernal/tape/load_tape_turbo.s index 7f8a3d9d..88feba45 100644 --- a/c64/kernal/tape/load_tape_turbo.s +++ b/c64/kernal/tape/load_tape_turbo.s @@ -37,7 +37,7 @@ load_tape_auto: #if CONFIG_TAPE_AUTODETECT -load_tape_turbo_takeover: // entry point for turbo->normal takeover +load_tape_turbo_takeover: // entry point for normal->turbo takeover jsr tape_common_autodetect bcc_16 load_tape_normal_takeover diff --git a/c64/kernal/tape/tape_common_autodetect.s b/c64/kernal/tape/tape_common_autodetect.s index 7ce2b048..88e87310 100644 --- a/c64/kernal/tape/tape_common_autodetect.s +++ b/c64/kernal/tape/tape_common_autodetect.s @@ -8,9 +8,6 @@ // Carry clear - normal, Carry set - turbo // -// XXX implement fallback to autodetection in normal - - #if CONFIG_TAPE_AUTODETECT diff --git a/c64/kernal/tape/tape_normal_get_pilot.s b/c64/kernal/tape/tape_normal_get_pilot.s index 801a2fb1..17734f33 100644 --- a/c64/kernal/tape/tape_normal_get_pilot.s +++ b/c64/kernal/tape/tape_normal_get_pilot.s @@ -16,8 +16,6 @@ #if CONFIG_TAPE_NORMAL -// XXX in tape_normal_get_pilot_header also try to detect turbo - tape_normal_get_pilot_header: // entry point, reset calibration, require 128x $40 pulses // Reading the pilot header is the first action performed, @@ -71,9 +69,14 @@ tape_normal_get_pilot_common_loop_outer: tape_normal_get_pilot_common_loop_inner: jsr tape_common_get_pulse - // XXX check for short pulses of turbo here bcc tape_normal_get_pilot_common_restart // not a pilot - try again - + +#if CONFIG_TAPE_AUTODETECT + // Try to distinguish turbo by cheecking for short signals + cmp #$B9 // see comment in tape_common_autodetect.s + bcs !+ +#endif + jsr tape_normal_calibrate_during_pilot dey @@ -82,6 +85,8 @@ tape_normal_get_pilot_common_loop_inner: dec ROPRTY bne tape_normal_get_pilot_common_loop_outer + clc +!: rts