OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 29.03.2024, 00:25

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 
Autor Zpráva
PříspěvekNapsal: 03.02.2021, 16:31 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1554
Has thanked: 485 times
Been thanked: 634 times
Jedná se o zápis na KryoFlux. Jak jsem reportoval před pár dny, dokázal jsem zjistit packety, které DTC posílá KryoFluxu když zapisuje jednu stopu - zapnutí motoru, najetí na cylindr, vybrání strany, čekání na index, začátek streamování, poslání dat přes pípu, flush pípy, konec streamování, čekání na dokončení.

V tuhle chvíli jsem předpokládal, že je hotovo.

Jenže - DTC přes pípu neposílá KryoFluxu soubor se Streamem (jeho specifikace), nýbrž to "předchroupe" a posílá něco, co má v hlavičce "KFW\x1" (hexa 4B 46 57 01). Co jsem vypozoroval, tak hlavička nemá pevnou délku (v obrázku níže je dlouhá 132/0x84 bajtů). Pak následujou data, který (opět co jsem vypozoroval) jsou "nějak" formulovaný násobky 2µ. Píšu "nějak," protože dlouhé fluxy (např. neformátovaná část stopy coby protipirátská ochrana) se musí řešit speciálně rychlou sekvencí "jedniček," aby signál na čtecí hlavě po danou dobu nespadnul na nulu. Čili z tohodle hlediska chápu konverzi Streamu na něco interního, ale doufal jsem, že se to děje na straně hardwaru! V oficiálním popisu KryoFluxu si k zápisu dávají rezervu s tím, že zařízení není určeno pro duplikování disket, ale jejich čtení - čili nepředpokládám, že by "KFW\x1 formát" uměl dobře reprezentovat neformátovanou oblast nebo fuzzy bity - prostě tam "něco" přidělali aby umožnili aspoň zápis "dobře vypadajích" dat (nebudu vás zbytečně zahlcovat detailama).

Obrázek


V každém případě začátek mojí uměle sestavený stopy zní "010101010101...," kde "01" trvá 2x2µ=4µ. Proč je to reprezentovaný zrovna bajtama 0x01 místo 0x02 (tu a tam přerušenýma něčím jiným) zatím netuším. Pokud 0x01 nahradím bajtama 0x02, zapíše se totéž.

Každopádně prekompenzovaná stopa pak vypadá jinak. Jednak hlavička už nemá délku 132 bajtů, ale 196/0xC4 bajtů a fluxy jsou reprezentovaný malinko jinak (u patternu "0101010101..." jsou sudý smrštěný a lichý natažený, přesně jak se požaduje u 2DD disket, "aby to pasovalo" a jeden flux trval co nejblíž cílovým 4µ).

Obrázek


Transformaci fluxů na vhodný násobky 2µ si už pořeším sám, v tom nevidím zásadní problém.

Ale nedokážu rozluštit hlavičku. Jediný, čeho se chytám je zmíněná značka "KFW\x1" a little-endian délka dat na offsetu 0x10 (výše 0xB1E8, zelenej kroužek to trochu překrývá). Co je uloženo ve zbývajících bajtech netuším. Určitě tam bude něco jako hodiny KryoFluxu (vizte výše uvedená specifikace Stream formátu). Bohužel binárku nepřečtu. Disassemblovací tooly mi nepomůžou, protože neovládám 386 assembler. Decompiler to vysype do funkcí jenom o malinko čitelnějších než disassembler (opět registry). Z dekompilerů jsem zkoušel IDA Freeware, Snowman (ten mi bohužel padal), Binary Ninja a další z této stránky. Bohužel nebyl jsem v těch toolech schopnej dohledat ani ono "KFW\x1" :-(

Nenašel by se zde někdo, mistr ve svém oboru, kdo by si na to troufnul?
Vím že zde máme velice šikovné členy!


Edit: Dá se aplikace nějak debugovat ve Visual Studiu? Že bych si najel na případné volání funkce CreateFile a odtud si to krokoval?

Obrázek


Obrázek

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
PříspěvekNapsal: 03.02.2021, 18:12 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Posli mi ten exac alebo daj nejaky link, pozriem nan.


Nahoru
 Profil  
 
PříspěvekNapsal: 03.02.2021, 19:31 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1554
Has thanked: 485 times
Been thanked: 634 times
Děkuji za aspoň jeden ohlas.

Binárka DTC je zde - soubor DTC/DTC.exe (v podadresáři DTC_x64 je 64-bitová verze, kterou nepoužívám). Další v adresáři je pak firmware firmware_kf_usb_rosalie.bin.

Veškeré dokumenty jsou pak ke stažení v sekci Download na oficiálních stránkách KryoFluxu, včetně zmíněné dokumentace Stream protokolu. Jeho implementace je pak v souboru KryoFluxBase.cpp, konkrétně metody CKryoFluxBase::StreamToTrack (pro čtení; v první fázi hledám chyby ve Streamu a pokud je to ok, pak v druhé fázi produkuju interní reprezentaci stopy), resp. CKryoFluxBase::TrackToStream (pro tvorbu, což je možná přehlednější). Typ TLogTime představuje logickej čas v nanosekundách (původně jsem ho zamýšlel jako bezrozměrnou informaci, nicméně nakonec to zakotvilo u nanosekund).

Připravil jsem k tomu i pár souborů (Uložto).

  • kfw00.0.raw je mnou sestavená stopa na počítání prekompenzace. Na začátku je preambule sestávající z 200x"01", tj. 200x4µ. Za ní následuje deset fluxů po 10µs, což je můj indikátor, že "tady začínají testovací data délky 9000 fluxů z intervalu {2,3,4}*2µs." Zbytek stopy je vyplněnej opět patternem "01". Stopu si můžeš prohlídnout jejím otevřením v SCJoe speciálu RIDE (v záložce Track Map na ni klepni).

  • kfw.txt je seznam délek fluxů. Podle něj má být například třetí testovací flux dlouhej 3x2µs (viz obrázek níže). Díky zaokrouhlování na celé tiky hodin KryoFluxu vždycky dojde k malý odchylce, takže flux má délku 5.994µs místo rovných 6µs. První číslo je pak počet všech fluxů na stopě kfw00.0.raw (45529).

  • kfw.bin je to, co DTC posílá KryoFluxu když mu kfw00.0.raw podstrčím příkazem "dtc -w -fd:\kfw00.0.raw -wi0 -g0 -s0 -e0 -wt0". Na offsetu 0x10 najdeš délku 45539/0xB1E3 - úplně to nesedí ale je to nejblíž délce.

Předem děkuji za jakýkoliv posun!


Obrázek

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
PříspěvekNapsal: 04.02.2021, 20:47 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1554
Has thanked: 485 times
Been thanked: 634 times
Ok, něco málo bych měl :-)

Zkoušel jsem spoustu variací téže stopy až mi vykristalizoval aspoň určitej pattern, o který bych se rád podělil.

  • Header může mít proměnlivou délku, protože je v ní uložena tabulka možných délek fluxů. Minimální délka headeru je 0x84 bajtů.
  • Tabulka fluxů začíná na offsetu 0x43. Její délka je (s nějakou konstantou navíc) uložena na offsetu 0x0C (v dolním obrázku žluté kolečko - zatím netuším jestli je to little- nebo big-endian, takže zakroužkován je pouze jeden bajt).
  • Každý prvek tabulky sestává ze čtyř bajtů. Zelené kolečko = asi značka prvku, vždy 0x03; zelený čtvereček = index v tabulce; černý obdélník = big-endian sample counter, aka. počet tiků hodin než byl nalezen konec fluxu, např. prvek 2 s počtem tiků 0x60 (96) odpovídá přibližně 4µs, hned další prvek 3 s počtem tiků 0x5F (95) odpovídá přibližně 3.955µs, atd. Na stopu jsem ukládal i sérii fluxů délky cca 1µs, vizte první prvek s počtem tiků 0x1A.
  • Za tabulkou následuje opakující se pattern 11 bajtů.
  • Data za hlavičkou nejsou násobky 2µs, ale indexy v tabulce. Proto jsem zcela beztrestně mohl včera nahradit data 0x01 za 0x02 aniž bych (zásadně) změnil obsah stopy. Rozdíl byl v řádu cca desítek nanosekund (jeden tik samplovacích hodin trvá cca 41ns).

Budu rád, pokud se nám podaří dešifrovat i ony žlutě podtržené bajty :like:


Obrázek

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
PříspěvekNapsal: 07.02.2021, 22:03 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1554
Has thanked: 485 times
Been thanked: 634 times
Je to až neuvěřitelné, ale HABEMUS CONSCRIPTIO - MÁME ZÁPIS !! 8-)

Zatím tedy pro 300rpm 2DD floppy - u ostatních typů budu muset ještě odzkoušet, jestli pro ně platí totéž.
A teď celou tu práci hlavně zazálohovat! :lol:


Obrázek

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 4 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz