Nem csak az adatátvitel volt lassú.
- Minden 256 bájos szektor eleje 2 byte-tal kezdődött, a következő sáv és szektor, vagy 0 (mint sáv) és fájl vége pozíciója. Alapból írásnál 10-esével ugrott, tehát kiírta a 0. szektort, utána a 10. szektort, a 20. szektort,... Amikor egyesével olvastad be az adatokat, 10 szektoronként kellett ugrálnod. A rafinált gyorstöltők össze-vissza küldték a szektorokat, de nekik is kellett +1 kör, amiben a teljes sávon végigmentek is kigyűjtötték, hogy honnan hová ugrálnak a szektorok.
- A leggyorsabb gyorstöltők 3 körben olvastak be egy sávot, az ugrálós, össze-vissza töltők 5 körben, a hagyományos 10 szektoronként ugrálók 10 körben.
Pusztán az átvitel gyorsításával az egy sáv 10 kör alatt olvasásig jutottál volna.
Miért nem sikerült a leggyorsabb töltőknek sem 1 sávot 1 kör alatt beolvasni?
A problémát a GCR konverzió okozta. A szektorok kezdetét szinkronjelek jelezték, 40 db 1-bit egymás után, azaz 5 * 0xFF bájt. Ahhoz, hogy a szinkron jelet az adatoktól meg tudják különböztetni, a 8 bites adatokat 10 bites GCR formátumra konvertálták. Ezzel a megoldással szinkronjeltől elkülönült a kiírt adat. A GCR konverzió eszméletlen lassú volt, az 5 körös töltőknél 3 kört elvitt.
Mekkora lett volna az elvi határ, amit el lehetett volna érni hardveres shift regiszterrel?
- a lemezvezérlő 1 bitet 3 ciklus alatt olvasott be, 1 byte-ot 24 órajel alatt, 24 órajeled volt arra, hogy beolvasd, konvertáld, továbbküldjed.
- ez a 24 órajel éppen elég lett volna arra, hogy benyomd a memóriába, de igazából C64 oldalról DMA-zni kellett volna, hogy stabilan menjen.
Az elvi határ:
- egy szektor mérete 5 szinkronjel + 5 byte szektor leíró + 5 szinkron jel + (10 * 256 / 8) byte adatblokk = 335 byte
- ha egy byte 24 órajel, akkor 1 szektor 335*24=8040 órajel, amiből 1000000 / 8040 * 256 = 32 kbyte/s maximális átviteli sebességhatár lehetett
Tehát az 50k-s fájl betöltésének elvi határa 1.7s lehetett (a fej mozgatása a sávok között szintén időbe telik, azt nem számoltam). Az elvi határhoz értelmesen kellett volna megcsinálni a kommunikációt, kitalálni a szektor szerkezetet, felhasználni a hardver adta lehetőségeket és DMA-zni.
Mondjuk úgy, hogy reálisan, egy ésszel átgondolt 1541-es lemezvezérlőnek a 10kbyte/s-et tudnia kellett volna alapszinten.