Radič diskety s Arduinom

Klasické bastlení z domácích zásob

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
nixdorf
Příspěvky: 540
Registrován: 06 kvě 2017, 02:00

Radič diskety s Arduinom

#1 Příspěvek od nixdorf »

Šuflíkový bastl jak remeň - Arduino s radičom diskety so švábom z PC karty.
Inšpirácia? Pripojiť (takmer) akúkoľvek predpotopnú mechaniku cez USBčko do dnešnej techniky a mať možnosť čítania, ako aj zápisu, dát - či už obrazu celých diskov, alebo jednotlivých súborov. Samozrejme, nejedná sa o profi archivačný nástroj, jedná sa o bastl, vôbec prvý pokus z mojej strany o fotocestu, osadenie SMT švábom vyfúkaného teplovzdušnou pištolou, a nadrátovanie adresných a dátových liniek do niečoho, kde nemusím študírovať datasheety.. Aspoň som si to myslel. Opak bol pravdou. :D

Napísal som o tom traktát v EN, ktorý nikto čítať nebude, takže tu to zhrniem v kocke - použil som FDC radič z PC karty, šikmákom opajcovaný DP8473 za tri doláre kus, pôvodne od National Semiconductor. S kódom, ktorým Arduhnilo komunikuje, je možné použiť bárjaký PC kompatibilný radič, iba sa musí správne zapojiť - mikrokód je kompatibilný s NEC uPD765, taký kvázištandard. To DPčko som tu použil preto, lebo som ho mal ako zopár náhrad do SCSI kariet Adaptec a Seagate, kde v jednej bol vadný a musel som ho nahradiť. K rozbehaniu stačí kryštál a bižutéria pre diskriminátor PLL.

Arduino dosku som použil Mega2560, znova šikmácky pajc, čo mi ostal ešte z experimentov 3D tlačiarne RAMPS/RepRap, aj s displejom - originál tu ozaj netreba. Komunikuje to cez 128x64 displej, možno použiť bárjaký ktorý podporuje Oli Krausova u8g2 knižnica, plus PS/2 klávesnica. Oboje sa dajú vypnúť, potom sa komunikuje priamo cez USB alebo sériový port, príkazovým riadkom "a la" DOS. So zapnutým displejom a klávesnicou sa sériák používa iba prenos súborov a obrazov diskov, počítač to nutne nevyžaduje - základné "dosovské" operácie to zvládne na displej - formátovanie, verifikácia, čítanie súborov, mazanie, jednoduchý traverz cez adresáre, výsyp obsahu. (Nie na CP/M diskoch, tam adresáre neexistujú.)

Pôvodná inšpirácia vychádzala z projektu ArduinoFDC, ktorý nadrátoval floppy mechaniku na arduhnilo napriamo bez radiča, konkrétne pre Uno, lenže to nebolo úplne spolahlivé, diskové prenosy častokrát skapali na CRC chybách či "vadných sektoroch" (ktoré neboli vadné, iba ich časovanie rozbilo), a navyše to bolo šeredne pomalé - dokázalo to pracovať iba s jedným sektorom naraz a odzrkadliť jednu stupidnú disketu trvalo vyše desať minút. Plus, podporovalo to iba 4 formáty diskov.
S týmto bastlom, kde používam AVR Mega2560, je k dispozícii trocha viac RAM, takže je možné použiť väčší diskový buffer a riešiť viac sektorov naraz - 1.44MB 3.5" idú za tri minúty a štyridsať sekúnd miesto desiatich, päťpalce do dvoch minút, osmipalce do minuty. Ako experiment som tomu dorobil podporu na čítanie 250K CP/M (MIKROS) osmipalcov + jednoduchý zápis (mazanie). Je možné ešte nahodiť úplne divné geometrie či veľkosti sektorov + to uložiť do EEPROM, aby si ich arduhnilo pamatalo i po reštarte.

To pre začiatok stačí. Koho to zaujíma - takto to pracuje s 8", 5.25" a 3.5" mechanikami, schéma je tu (podstatný je iba ten šváb, zvyšok je podporná bižuteria); ako vznikal plošák som riešil vo "vkladaní zaujimavých obrázkov".
Maximálny počet mechaník, ktoré sa dajú na jeden radič nastaviť naraz, je 4 - ja používam 2, nechcelo sa mi letovať dve kolíkové lišty.
No a keďže Arduhnilo na rozdiel od PC nemá DMA radič, takto nejak vyzerá komunikácia s FDC. Pol kódu je čakanie na Godota, druhá ošetrovanie chýb. Obsluhu prerušenia som radšej napísal v asembleri, pretože by sa mala vrátiť do 6 mikrosekúnd - toľko trvá arduiňáckemu overhead pred tým, než vôbec odovzdá riadenie samotnej obsluhe :D

Summa summarum:
,,Teda, to muselo dát příšernou práci. Přitom taková blbost, co?''
Přílohy
fdc-5.png

Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

#2 Příspěvek od samec »


nixdorf
Příspěvky: 540
Registrován: 06 kvě 2017, 02:00

#3 Příspěvek od nixdorf »

Ano, zapojenie mi funguje i s 1.2MB mechanikou, konkrétne svojou Teac FD-55GFR, + dá sa tam nastaviť aj ak náhodou vypadol DISK CHANGE signál, to isté ide v DOS cez DRIVER.SYS/DRIVPARM. Iba sa o sekundu-dve predlži čas prístupu na disketu.

V tvojom prípade, ak ti tá mechanika nefunguje, tak pred tým než sa s ňou začneš crcať s Arduinom, zapoj tú svoju pod DOS (na nejaký Knoppix sa vyser), stiahni Dave Dunfieldov ImageDisk (IMD); dnu vlož buď 360K alebo 1.2M disk a spusti Test RPM. Musí ukázať 360 ot/min u oboch, PC otáčky na 300 neznižovalo, iba prepínalo prenosovú rýchlosť podľa hustoty záznamu. Ak neukazuje nič, FDC nedostáva prerušenie - disk neindexuje, napríklad nefunguje infrazávora pre signál INDEX (overí sa osciloskopom), ap.
Následne Alignment/test musí prečítať obidve hlavy bez problémov. Ak zle číta, alebo nesprávne ukazuje číslo stopy v prvom stlpci, tak sú rozkalibrované hlavy alebo je nesprávne nastavený doraz stopy 0; ak sú na každej stope a na oboch hlavách otazníky a nečíta nič, mechanika/hlavy sú KO - to rozlíšiš prepípaním hlav multimetrom na spojitosť.
Ak máš v tej 1.2MB mechanike vložený 360K disk, musíš zapnúť Double Stepping, aby fungovalo čítanie i zápis. Ale pozor - zapisovať s 80stopou mechanikou na 40stopý disk sa neodporúča, pretože potom 40stopé mechaniky (s hustotou 48 stôp na palec) ich budú mať potom problém prečítať. Čítanie každopádne musí fungovať.

34pin rozhranie disketových mechaník 5,25" a 3,5" kompatibilných s PC je dostupné tu, neplatí to pre 8", ktoré majú vlastnú zbernicu - väčšinou Shugart, ale niekedy i vlastné poprehadzované vývody...

Uživatelský avatar
Habesan
Příspěvky: 6924
Registrován: 12 led 2009, 01:00
Bydliště: Plzeňsko
Kontaktovat uživatele:

#4 Příspěvek od Habesan »

Gratuluji a děkuji.
Možná to také někdy využiju.

Uživatelský avatar
ZdenekHQ
Administrátor
Administrátor
Příspěvky: 25593
Registrován: 21 črc 2006, 02:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#5 Příspěvek od ZdenekHQ »

Už jste ty hlavy zkusili někdy vyčisti třeba isopropanolem? Je to mechanika jako každá jiná.

Mimochodem, to "snímání" otáček jsem řešil u 3" mechaniky pro Amstrad/Schneider CPC6128 a tam to ty diskety dokázalo i poškodit. Studeňák na optické závoře.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]

Uživatelský avatar
Celeron
Příspěvky: 16140
Registrován: 02 dub 2011, 02:00
Bydliště: Nový Bydžov

#6 Příspěvek od Celeron »

Nixdorfe, znáš se s Romanem B. z Košic? Ten taky už před dlouhým časem dělal na ATmega 328P řadič SD karet jako virtuální diskety pro PMD85. Já to 2011 předělal na Sapi1-CP/M, 4 "mechaniky". Buď 8" SS/SD IBM kompatibilní že to šlo vrazit do Altair simulátoru na PC a nebo nekompatibil velikost.
Připojení přes paralelní port.
To připojit k Sapi1 HDD přes IDE s PIO0 byla proti tomu celkem prkotina. Na jednom fyzickým HDD bylo 16 logických disků 16 MB, součastně aktivní jen dva ale dalo se volit který z těch 16. Větší kapacitu jsem nedával, takulky zabíraly strašně místa i když bylo použitý stránkování RAM.
Jirka

Proč mi nemůže všechno chodit hned ?!!

nixdorf
Příspěvky: 540
Registrován: 06 kvě 2017, 02:00

#7 Příspěvek od nixdorf »

@Habešan, rado sa stalo. Preto som zverejnil i zdrojáky, nech každý, koho to chytí, potom svojou troškou prispeje. Ale veľa RAM už v Arduine neostalo, jedine už iba ukrojiť zo statického diskového bafra, čím sa spomalia prenosy. Ideálne k tomu pripojiť DMA a dynamickú pamäť, ale to už sa človek zastaví nad tým, že vymýšla koleso nad bohom zabudnutou technologiou.
Okrem toho DPčka tam ide pripojiť i klasický ATčkový Intel 82077, teda radiče, ktoré majú 8 paralelných dátových, a 3 adresné linky. Zbytok sa zapojí už podľa katalogu - PLL filter pre zvolené prenosové rýchlosti atd. To DPčko v schéme bude fungovať od osmipalcov až po bohom zabudnuté PS/2 2.88MB :D
V súčasnom "prevedení" si to avšak neporadí s diskami, ktoré majú rozlišnú geometriu na druhej strane (ak nemajú do plášťa spravenú druhú dieru a patrične sa "neotočia"), prípadne rôzne geometrie sektorov na rôznych stopách - napríklad nepôjde odzrkadliť obraz starého MS Flight Simulatora, ten toto využíval ako dobovú ochranu proti dosovskému kopírovaniu. Čiže aká geometria sa zvolí na začiatku, tá platí potom pre celý disk. Čo sa týka kódovania dát, DPčko ide nastaviť na FM a MFM, M2FM a GCR zatím nepôjdu.

@Zdeněk: FDC použitý v PC (a tiež riešenie s Arduinom hore, viď fdc.cpp) nevráti prerušenie, ak absentuje indexový signál - po timeoute Not ready error. Ani sa nesnaží pristupovať na stopy, takže tam je v suchu.
Ale boli stroje, ktoré na ten signál hádzali šumák a tam už hrozilo, že mohlo dôjsť k poškodeniu dát, ak sa tie sektory správne nečasovali, ako píšeš.
Špinavú hlavu by poznal - vrstvy oxidov, najmä z navlhlých diskiet (niečo na spôsob škrípavých kotúčových pások, kde sa odliepa vrstva od základného pásku). Hneď by sa to prejavilo škripotom a v horších prípadoch by videl v diskovom médiu vyoranú špirálu. Každopádne, ak mechanika nečíta stopu 0 (viď ten RPM check/alignment test), potom je to o niečo horšie - treba zistiť, či sú hlavy poškodené, alebo bolo s azimutom manipulované, alebo je vada v separátori dát na DPS ap.

@Celeron: stránky Bórikovcov poznám, myslím že tam mali i disketový emulátor k PMD-SD jak píšeš. Ale osobne ich nepoznám, osmibity ma tak trocha obišli. Ku starému hardware proste ten Abort, Retry, Fail patrí :D
Naposledy upravil(a) nixdorf dne 20 bře 2023, 17:11, celkem upraveno 1 x.

Uživatelský avatar
Celeron
Příspěvky: 16140
Registrován: 02 dub 2011, 02:00
Bydliště: Nový Bydžov

#8 Příspěvek od Celeron »

nixdorf píše: osmibity ma tak trocha obišli.
Jak to obisli? AtMega2560 je přeci taky osmibit. :lol:
Jirka

Proč mi nemůže všechno chodit hned ?!!

nixdorf
Příspěvky: 540
Registrován: 06 kvě 2017, 02:00

#9 Příspěvek od nixdorf »

Ano, ale chápeš jak to myslím, staré "domáce počítače". Ostatne, 8088 jv IBM PC je tiež svojim spôsobom "osmibit", pretože má osembitovú dátovú zbernicu, aby veľká modrá ušetrila :D

nixdorf
Příspěvky: 540
Registrován: 06 kvě 2017, 02:00

#10 Příspěvek od nixdorf »

a takto nejak to vie vyzerať, keď sa z jednostranného bastlu osvicovaného doma na kolene, navrhne normálny obojstranný plošák ako "shield" na Arduino, teda DPS na zacvakávanie zvrchu, s FDC v sokli. Sa hovorí že kdo umí, ten umí... a kdo neumí, ten čumí. :D
Týpek si to spravil pre imaging osmipalcov z Consulov, zdá sa, že úspešne. No a ja som konečne objavil i "nepodporovaný" formát diskiet, ktoré ten čip neprekúsne - napríklad 880K z Amigy/Atari ako double density (DD). To vychádza v prepočte 11 sektorov na stopu pri prenosovej rýchlosti 250 kb/s - na radič FDD z PC ako je tento DP8473 bez šance, pretože sú tam zahrnuté celé stopy aj s odskokmi (gaps) medzi sektormi.
Čo ešte takýto PC FDC zvládol pri 250kbps DD, je 10 sektorov na stopu s malými odskokmi (7 a 27), teda 800K. Ale nulovými odskokmi ten šváb naprogramovať žiaľ nejde.
Přílohy
Clipboard02.jpg
Clipboard01.jpg

Odpovědět

Zpět na „Zapojení ze šuplíku“