Welcome, Guest. Please login or register.


Author Topic: EP128emu (Read 400017 times)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14733
  • Country: hu
    • http://enterprise.iko.hu/
Re: EP128emu
« Reply #300 on: 2013.April.27. 16:17:44 »
Quote from: Zozosoft
Most fordítottam egy ilyet, de működésben nem látok változást. Ami alapján nekem nagyon gyanús, hogy ez az errorflag nincs feldolgozva :oops:
Hoppá mégis találtam valamit!!!
Amikor FISH-en keresztül van kezelve a lemez, azaz normál EXOS/EXDOS fájlműveletek, vagy az EPDOS Disk Editor SECTOR EDIT módja, akkor hibátlannak látszik.
Viszont amikor DISKIO-n keresztül van kezelve, azaz az TRACK/SECTOR EDITOR-ban nézve, már vannak Data Error-ok!
De! Mindig csak akkor ha változott az sáv vagy oldal (azaz a sáv puffer tartalma). Ha ismételten ugyanott olvasunk, akkor már nincs hiba!

Így már úgy tűnik az a pufferbe olvasásból még jól megjön a hibajelzés, csak az első szektorolvasás után veszik el.

A FISH pedig nyom egyből egy Retry-t amikor hibát talál, és mivel a második szektorolvasás már nem kap hibajelzést az emutól, ezért nem látszott a dolog normál használat során.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14733
  • Country: hu
    • http://enterprise.iko.hu/
Re: EP128emu
« Reply #301 on: 2013.April.27. 16:30:14 »
Már látom is hol a hiba!
Code: [Select]
      if (currentTrack != bufferedTrack || currentSide != bufferedSide)
        (void) updateBufferedTrack();   // FIXME: errors are ignored here
      if (!flagsBuffer[bufPos >> 9]) {
        if (!readTrack()) {
          setError(0x08);               // CRC error
          dataRegister = 0x00;
          return 0x00;
        }
      }
A readTrack akkor fut le, amikor változott a sáv vagy oldal, azaz frissíteni kell a puffert.
De a visszaadott errorFlag csak itt van vizsgálva! Ha hiba volt vissza is megy hibajelzés, de nincs letárolva a hiba ténye, ezért az ismételt olvasásnál, amikor már a pufferből dolgozik, nem lesz hibajelzés.

Tehát akkor a readTrackben kéne egyből megnézni, hogy volt-e hiba, ha igen, akkor szektoronként újraolvasni, és egy tömbben letárolni, hogy melyik szektor hibás.
Majd itt a szektor olvasó rutinban ezt a tömböt nézni mindig, és annak megfelelően generálni a hibát.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: EP128emu
« Reply #302 on: 2013.April.27. 16:41:11 »
Quote from: Zozosoft
A readTrack akkor fut le, amikor változott a sáv vagy oldal, azaz frissíteni kell a puffert.
De a visszaadott errorFlag csak itt van vizsgálva! Ha hiba volt vissza is megy hibajelzés, de nincs letárolva a hiba ténye, ezért az ismételt olvasásnál, amikor már a pufferből dolgozik, nem lesz hibajelzés.
A hiba valójában nem itt van, mert az ismételt olvasásnál újra kellene hívnia a readTrack()-et. Már most is van egy flagsBuffer[] tömb, amely azt tárolja, hogy az egyes szektorok a pufferben jók-e, és hogy tartalmaznak-e kiíratlan adatot. A readTrack() csak azokat a szektorokat próbálja újraolvasni, amelyek még nem jók. Itt azonban hiba van:
Code: [Select]
     else {
        size_t  bytesRead =
            std::fread(&(tmpBuffer[offs]), sizeof(uint8_t), nBytes, imageFile);
        errorFlag = (bytesRead != nBytes);
      }
    }
    for (uint8_t i = firstSector; i <= lastSector; i++)
      copySector(i);
    return (!errorFlag);
A copySector() az, ahol a "szektor OK" jeélzőbit beállítódik, de ez azokon a szektorokon is lefut, amelyeket az std::fread() esetleg nem tudott beolvasni. Tehát hiba esetén a lastSector változót a sikeresen beolvasott adat mennyiségének megfelelően csökkenteni kellene, de ez kimaradt. :oops:

További javítandó hiba, hogy a readTrack() hívása után CRC hibát csak akkor kellene jelezni, ha az adott - olvasandó - szektor még mindig rossz, és nem akkor, ha a sáv bármelyik szektora hibás. Tehát nem a readTrack() visszatérési értékét kellene vizsgálni, hanem a flagsBuffer[] tartalmát újra.

Azt is meg lehetne még oldani, hogy a hibás szektor után a többi szektort próbálja újra olvasni, akkor nem veszne el egy hibás szektor után az összes többi a sávban.
« Last Edit: 2013.April.27. 16:49:21 by IstvanV »

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: EP128emu
« Reply #303 on: 2013.April.28. 16:13:54 »
És akkor most a WD emulációja az emunak valahogy úgy egyszerűsít, hogy fejléptetéseknél, ilyesmiknél csak magának regisztrál, de a floppy meghajtót nem bizergálja, hisz nincs is neki rá interfésze jelenleg az OS felé, hanem file olvasással a beolvasást track szinten cache -elve elkerülvén a továbbforgások miatti, forgásonkénti 1 szektor beolvasási lassulást, a track bufferből szolgálja ki az "adatolvasási" hívásokat az EXDOS felől ?

Amiből (ha majd ki lesznek javítva a jelenlegi hibák, akkor is) az eredeti EP/WD floppy IC kezeléshez képest olyan hátrányok származnak, mint:

- A floppy fej/motor/mittudoménmégmik nem pont ugyanúgy mozognak, működnek, mint ahogy azt az EP működtette volna a vas WD IC -n keresztül. (Tehát ha valaki írt valami floppy kattogtató/zenéltető programot, az itt nem működne, nem beszélve az értelmesebb felhasználás különbségeiről
- Mikor egy szektort beolvas az EXDOS akkor a WD emuláció egy teljes track -et betölt a floppy -ról, ami jelentős lassulást eredményezhet az első szektor kiolvasásáig, ha a file -ok töredezettek és több track -en vannak elszórt szektorokban, akkor meg még sokkal nagyobb lassulást
- Előbbi jelenség kiírásnál ugyanúgy megvan
- Ráadásul mivel egész track -eket írunk ki, egy bizonyos szektor kiírásakor bekövetkező CRC/bad sector hibáról csak később szerzünk tudomást, mint mikor az eredeti VAS -on a szektor írása megtörtént volna, és ahol a szektor írási hibát az eredeti EXDOS kód, vagy akár az alkalmazás kezelni tudta volna
- Ha viszont a track -en belül ír/olvas szektorokat az EXDOS, akkor fejmozgás, lassulások, ilyesmik elmaradnak, és a vasnál sokkal gyorsabb lesz minden
- Mivel kiírni csak akkor írja ki a track -et a floppy -ra az emulált WD, mikor másik track -re léptünk, ezért olyankor lesznek floppy írásra várakozások, mikor az eredeti EP -ben nem voltak. Ettől lehet zozo szívfájdalma, hogy mikor valamit ráírunk egy lemezre, és a funkcióból rég kiléptünk, az emu még csak akkor blokkolódik, ráadásul egy egesz track floppy -ra írásának erejéig, talán épp azért, mert a fej csak akkor lett még elmozgatva onnan, ahol az utolsó írás történt, és ekkor ír csak track -et az emu.

Mindezeket teljesen megszüntetni gondolom csak úgy lehetne, ha valami driver szinten OS alól hozzáférnénk WD szintű lemezkezelési parancsokhoz, és azokra fordítanánk a WD -hez érkező parancsokat.

Na mindennek vajon hány % -a igaz ? :)
« Last Edit: 2013.April.28. 16:22:20 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: EP128emu
« Reply #304 on: 2013.April.28. 16:22:57 »
Hopp még egy (talán legsúlyosabb) hiba eszembe jutott, beírom ide külön is:

- Ráadásul mivel egész track -eket írunk ki, egy bizonyos szektor kiírásakor bekövetkező CRC/bad sector hibáról csak később szerzünk tudomást, mint mikor az eredeti VAS -on a szektor írása megtörtént volna, és ahol a szektor írási hibát az eredeti EXDOS kód, vagy akár az alkalmazás kezelni tudta volna
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: EP128emu
« Reply #305 on: 2013.April.28. 16:28:00 »
Ha mindaz igaz amit leírtam, ha magamnak írnám az emut, en elfelejteném ezt az egész track cache dolgot, és megírnám normálisan szektorosra.

Akkor az maradna, hogy a fej/motor/akármik nem pont ugyanúgy mozognának mint a vas esetében, illetve sokkal lassabb lenne, de a többi hiba magától eltűnne, és szoftveres értelemben minden program ugyanúgy működne mint az eredeti EP -n.

Lévén ez egy emulátor, sztm az a legmagasabb prioritás. Nem ?
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14733
  • Country: hu
    • http://enterprise.iko.hu/
Re: EP128emu
« Reply #306 on: 2013.April.28. 17:04:52 »
Nagyjából igaz amit írsz.
Olvasásnál legrosszabb esetben (fájl minden szektora más sávon) lenne kétszer lassabb, mint az eredeti, ami kb annyi mintha 9/10 szektoros lemez helyett az interleave-s 11 szektorosat használnánk.
Gyakorlatban ilyen lemezt már úgy is rég formáznánk vagy defragmentálnánk.
Írásnál akkor írja ki, ha másik sávra megyünk, vagy 1 másodperce nem volt lemezművelet.

Az igaz, hogy az esetleges írási hibáról nem értesül az emulált EP. De talán nem túlzó elvárás, hogy jól leformázott lemezt használjon aki floppyzni akar :-)
Esetleg lehetne, hogy ilyen esetben feldob egy Retry/Abort/Ignore választást az emu.
De windows alatt nagy általánosságban szintén lehetetlen észrevenni az írási hibát.
Nagyjából úgy oldható meg, hogy írás után kicseréled a lemezt, majd vissza, és ezután összehasonlítod tartalomra a fájlokat.

A rendes szektoros jó lenne, ha nem lenne brutálisan lassú. Anno amikor még nem rakta be a pufferelést István, kb 10x lassabb volt mint az igazi...
Most érzésre kb ugyanolyan gyors mint az igazi, és ez szerintem így jó.

Ebbe szerintem nem érdemes több energiát fektetni, mint az István által már vázolt hibákat kijavítani, plusz még az íráshoz betenni egy hibaüzenet ablakot.

Esetleg amit érdemes lenne pluszban berakni, hogy csináltak egy pluszban telepítendő "Floppy API"-t, amivel közvetlenül lehet kezelni a meghajtót, mint a normál Windows módon, így lehetséges nem Microsoft formátumú lemezek kezelése is. Pl EP esetén lehetne a plusz sávokat tartalmazó lemezeket kezelni.
Ennek főleg akkor lenne értelme, ha a Spectrum emulációs módba is lennének lemezkezelések beépítve, ezeknek a lemezeit csak így lehet használni.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14733
  • Country: hu
    • http://enterprise.iko.hu/
Re: EP128emu
« Reply #307 on: 2013.April.28. 17:09:56 »

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: EP128emu
« Reply #308 on: 2013.April.28. 17:29:45 »
Quote
A rendes szektoros jó lenne, ha nem lenne brutálisan lassú. Anno amikor még nem rakta be a pufferelést István, kb 10x lassabb volt mint az igazi...
Most érzésre kb ugyanolyan gyors mint az igazi, és ez szerintem így jó.
Hát ha így, akkor így. Én ezekről a történelmi előzményekről nem tudtam ... Nekem még biztos mindíg a lassú verzió lenne ilyen megkötésekkel, de nyilván ez azért van, mert kb. te vagy az egyetlen, aki használja is a fizikai floppy -t PC -n ... :) De ha nem, akkor is biztos, hogy nem én, szal a sebesség engem legkevésbé zavarna.


Quote
Ezt emlegettem.

Na, ez pont annak a driver -nek tűnik, amit emlegettem, azzal a plussz további opcióval, ha jól értem, hogy a PC lemezvezérlőbe ezek szerint nincsenek huzalozva a CRC kezelés részletei úgy ahogy a WD -ben vannak, és így szoftveresen (a driver -ből) lehetőséget tudnak adni nekünk nem csak az EP által használt elterjedt, hanem mindenféle más szektor formázások kezelésére is, nem ?

Ebből viszont az következik, hogy ennek használatával mindkét legyet lehetne ütni egy csapásra:

- Megvalósíthatóvá válna a WD kommunikáció szintjén végzett lemez kezelés, tehát a valóságban, a WD szintjén lehetne emulálni a WD -t, vagyis pont ugyanúgy tudnánk vele sztm a floppy -t kezelni, mint ahogy a WD is kezeli a vas floppy -t. Minden pont ugyanúgy mozogna, olvasna, időzítene, hisz a gyakorlatban pont azt csinalnánk a driver -en keresztül a floppy -val, mint amit a WD is csinálna.

- Mellesleg lehetne írni más (nem WD) floppy vezérlő logika emulációkat is ( egy másik osztályba mondjuk ), ami jó lenne a spectrumhoz, vagy akármihez, amit még emulál az ep128emu
« Last Edit: 2013.April.28. 21:35:06 by Z80System »
Z80 System

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: EP128emu
« Reply #309 on: 2013.April.28. 17:39:53 »
És mellesleg itt a válasz a tegnapi USB floppy -s kérdésre is a driver FAQ -jából:


Can I use a USB floppy drive?
No — USB floppy drives contain a separate floppy controller chip, which is not directly accessible from the host PC. Without access to that it's simply not possible to support formats beyond what the drive chooses to expose (typically DOS 720K and 1.44M formats only).



Én ezt úgy értem, hogy az USB floppy valahogy másképp kommunikál mint a floppy vezérlő, így nem lehetne ezzel a driver -rel hajtani. Magában az eszközben, az USB géppel ellentétes oldalán van a floppy vezérlő IC, amiben huzalozva van valószínűleg a nekünk szükséges szektor kezelés és formázás.

Persze fentiektől esetleg még az is lehetséges, hogy alacsonyszintű ("lemezvezérlő szintű") parancsokat attól még esetleg átvisz az USB, csak a CRC paraméterek vannak belehuzalozva a vezérlőbe, és azon nem tudnak változtatni a driver -ükkel. Inkább az elsőre tippelnék sajnos.

Tehát ha ezt a driver -t használnánk akkor félig vagy egészen, de az USB floppy -kat elbuknánk úgy tűnik, ami a fejlődés irányát nézve (gépekből sorra maradnak ki a floppy meghajtók, szinte nem is gyártják őket már) lehet gázos lesz a jövőben.

De a jelenlegi file -os módszer 99% menne akkor az USB floppy -kon is, sztm ...
Z80 System

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14733
  • Country: hu
    • http://enterprise.iko.hu/
Re: EP128emu
« Reply #310 on: 2013.April.28. 17:45:00 »
Quote from: Z80System
Tehát ha ezt a driver -t használnánk akkor félig vagy egészen, de az USB floppy -kat elbuknánk úgy tűnik, ami a fejlődés irányát nézve (gépekből sorra maradnak ki a floppy meghajtók, szinte nem is gyártják őket már) lehet gázos lesz a jövőben.

De a jelenlegi file -os módszer 99% menne akkor az USB floppy -kon is, sztm ...
Igen, ez így van, tehát a mostanit (kijavítva) meg kéne tartani, és plusz lehetőségként lehetne berakni ezt (Mondjuk lenne egy Fdraw direct access pipácska a lemez választó menüben.)

LS120-as IDE-s floppyval is ugyanaz lehet a helyzet mint az USB-sel.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14733
  • Country: hu
    • http://enterprise.iko.hu/
Re: EP128emu
« Reply #311 on: 2013.April.28. 17:57:12 »
Fontossági sorrendre én ezt mondanám:
-kijavítani a tegnap felderített hibás szektor vs pufferbe olvasás problémát
-így akkor ki lehetne adni 2.0.9.2 verziót, ebben frissíteni a ROM és konfig fájlokat is
-WD emulációban a szektor méretet is beállítható paraméterré tenni
-ezután image fájlokkal már használhatóak lennének a Spectrumos lemezek, be lehetne tenni a zx128emu-ba a SpeccyDOS-t, és Beta Disk-et. (Ez lehetne 2.0.9.3)
-ezután jöhetne ez az új fajta API

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: EP128emu
« Reply #312 on: 2013.May.01. 14:59:39 »
Egyébként filerendszer szinten ugyanaz a FAT12 van a floppy -kon is, mint az EP winyón ?

Amiből az is következik, hogy ha olvassa az EP floppy -kat egy mai modern OS (márpedig tudtommal az összes olvassa), akkor egy mai modern OS -ben még mindíg benne kell legyen az ős régi FAT12 fájlrendszer írása/olvasása (ha már a formázására nem is képesek) ?
Z80 System

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: EP128emu
« Reply #313 on: 2013.May.01. 15:20:26 »
Quote from: Z80System
Egyébként filerendszer szinten ugyanaz a FAT12 van a floppy -kon is, mint az EP winyón ?

Amiből az is következik, hogy ha olvassa az EP floppy -kat egy mai modern OS (márpedig tudtommal az összes olvassa), akkor egy mai modern OS -ben még mindíg benne kell legyen az ős régi FAT12 fájlrendszer írása/olvasása (ha már a formázására nem is képesek) ?

Szerintem igen ... Engem az is erdekelne, hogy mi a helyzet a FAT16-el. Zozo mintha azt mondta volna, hogy valoszinu megoldhato lenne az is EP-n tobb-kevesebb munkaval. Ez azert is erdekes, mert ha HDD-t nezzuk, ott azert a FAT12 limitacioi komolyabbak, jol jonne a FAT16. Floppy eseten ez kevesbe problema persze :)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14733
  • Country: hu
    • http://enterprise.iko.hu/
Re: EP128emu
« Reply #314 on: 2013.May.01. 16:05:49 »
Quote from: Z80System
Egyébként filerendszer szinten ugyanaz a FAT12 van a floppy -kon is, mint az EP winyón ?
Igen.