Emuláció: SpeccyDOS emulátor

4 csillagos Cikk értékelése: 4,97 (36 szavazatból)

Tartalom

  1. Bevezetés
  2. Az emulátor rendszerigénye és telepítése
  3. Az emulátor funkcionális részei
    1. általános áttekintés
    2. A mount parancs
    3. A list parancs
    4. A load parancs
  4. Gyakorlati példák
    1. Lemez beolvasása image fájlba
    2. Image fájl listázása
    3. Unniversal Hero c. játék betöltése image fájlból a unihero.tap állományba
  5. Hibák, tesztek
    1. Az emulátor lehetséges hibajelzései
    2. Tesztek
  6. Letöltés
    1. A SpeccyDOS emulátor v1.03 letöltése

Speccy-Dos interface


Bevezetés

A Speccy-Dos emulátor egy olyan programgyűjtemény, ami képes kezelni a Speccy-Dos fájlrendszert és importálni tudja a PC-s környezetbe. Klasszikus értelemben nem nevezhető emulátornak, hisz nem futtató környezetet biztosít, csak a lemezkezelő funkciókat valósítja meg. Mégis több, mint egy egyszerű konverter program. Az 1.0 verzió célja az adatmentés és az olvasófunkciók megvalósítása. A következő verzió már képes lesz virtuális lemezek kiírására fizikai diszkre, és tervben van egy Spectrum emulátorba való beintegrálás is.

Az emulátor elkészítését már 1999 óta tervezem, de valahogy nem került rá sor egészen mostanáig. Hogy mégis belevágtam, nagyban köszönhető az egyre aktívabb magyar Spectrumos élet oszlopos tagjainak, akik részben az emulátor iránti érdeklődésükkel, részben a Spectrum iránti töretlen lelkesedésük révén biztatást adtak a program megírásához. Egy-két nevet ki is ragadnék a teljesség igénye nélkül: Náray Józsi (Tőle vettem a képen látható Speccy-Dos interfészt, ami a későbbi fejlesztésekhez elengedhetetlen lesz), sAGA (Tőle kaptam meg a teljes Speccy-Dos dokumentációt, amely nélkül elég nehezen készült volna el az emulátor), Kardos Balázs (SSW), Tarján Richárd (mostanában Ricsibubus), Nyitrai Laci Bá (A játékgyáros), PGyuri. Ajánlom még ezt az emulátort a régi WSS tagoknak: Horváth László (Leslie), Asztalos András (Andrew), Farkas Krisztián (Roger) és minden aktív Spectrumos figyelmébe.

Az emulátor rendszerigénye és telepítése

Az emulátor jelen pillanatban 16-bites DOS módban képes futni akár Windows operációs rendszer alól is MS-DOS ablakban. A programok parancssorból futtathatók különböző paraméterezéssel. Az emulátor egyidőben max. 128 Kb ram memóriát foglal el és ugyanennyi lemezterület elég neki. Ez utóbbiba nem számítanak bele a naplófájlok, diskimage-k és a tap állományok.

Az emulátort egy ZIP állomány tartalmazza. Ennek pontos tartalma a következő:

    • list.exe
    • load.exe
    • mount.exe
    • src könyvtár a forrásfájloknak
      • load.c
      • list.c
      • mount.c
      • fdc_api.h, fdc_api.c
      • sdd_api.h, sdd_api.c
      • tap_api.h, tap_api.c

Az említett fájlokat tömörítsük ki a merevlemezre egy mappába. Pl.: c:\sdemu

Ezután módosítsuk a PATH környezeti változót az autoexec.bat fájlban.
írjuk be új sorba:

        PATH=%PATH%;c:\sdemu;
        DOSKEY

A doskey egy nagyon hasznos program. Megjegyzi a parancssori beviteleket, így ha elgépelünk valamit, akkor nem kell újra beírni a teljes parancsot, hanem a fel-le nyilakkal kiválaszthatjuk a korábbi bevitelek közül.

Ezután a program a fájlrendszer bármely pontjáról hívható lesz.

Az emulátor funkcionális részei
  1. Általános áttekintés
  2. Az emulátor több különálló kis programra tagolódik, melyek egy-egy parancsot hajtanak végre. Ezen parancsok használata egyszerű annak ellenére, hogy parancssorból kell "bepötyögni" őket.

    A parancsok általános színtaktikája:

        parancs -kapcsoló paraméter [-kapcsoló paraméter [...]]

    A parancsok output-ját átiránytíhatjuk tetszőleges fájlokba a > filenév.kit módszerrel. Ez nagyon hasznos lehet logfájlok és a diszkek listáinak kimentésére.

        parancs -kapcsoló paraméter [-kapcsoló paraméter [...]] [> filenév.kit]

    A kapcsolókat mindig - jellel kell kezdeni. A kapcsoló-paraméter párok tetszőleges sorrendben megadhatók, de fontos, hogy a logikai függést nem lehet felcserélni. Vagyis a logikailag az egyik kapcsolóhoz tartozó paramétert nem cserélhetjük fel egy másik kapcsolóhoz tartozó paraméterrel.

    A paraméter nélkül vagy rossz paraméterezéssel hívott fájl kiírja paramétereit és azok jelentését az outputra.

    A diskimage fájlok kiterjesztésének a .SDD-t (Speccy-dos disk) javaslom. Az emulátor bármilyen kiterjesztést elfogad, de nem biztos, hogy ez a jövőben is így marad.

    Fájlneveknél ne felejtsük el megadni a kiterjesztést. DOS-ban a fájlnév max 8 karakter hosszú lehet, míg a kiterjesztés 3 karakter ponttal elválasztva.

    Az emulátor létrehoz különböző temp és log fájlokat a műveletek során (összesen 4-et) mindíg az aktuális könyvtárba. Ezeket nyugodtan lehet törölni a parancs terminálása után.
    Ezen fájlok a következők:

    • _CONV_.OBJ - az utojára konvertált fájl tap formátumban
    • _TEMP.OBJ_ - az utojára konvertált fájl bináris formátumban header nélkül
    • SECPTR.LOG - az utoljára konvertált fájl szektorpointereinek tulajdonságai
    • SDLOAD.LOG - az utoljára konvertált fájl adatatait tartalmazó szektorok címei

  3. A mount parancs
  4. Ez a parancs teszi lehetővé egy valós Speccy-Dos diszk image fájlba való konvertálását. A program kiírja az esetlegesen fellépő rendellenességeket az aktuális outputra. Végzetes hiba esetén a program befejezi futását. Ezt az Action aborted! üzenettel jelzi. Ha a betöltés sikeres volt, az Action completed! üzenetet kapjuk.

    Paraméterezés:

        mount -d <drive kód A:=0, B:=1> [-f <image.sdd>] [> <naplo.log>]

    Példák:

        mount -d 0
        => A: meghajtóban lévő diszk tulajdonságainak kiírása az outputra

        mount -d 0 -f WSS-50.SDD
        => A: meghajtóban lévő diszk beolvasása a WSS-50.SDD imagefájlba.
        Figyelem! Ha már létezik a megadott fájl, akkor automatikusan törlődni fog a parancs hatására!

        mount -d 0 -f WSS-50.SDD > WSS-50.LOG
        => ua. mint az előző, csak a beolvasás során jelentkező hibaüzeneteket a WSS-50.LOG fájlba írja

    Gyakori hibák :

      • 0x01 : bad command passed to driver *
      • 0x02 : address mark not found or bad sector *
      • 0x06 : diskette changed or removed
      • 0x10 : ECC/CRC error on disk read
      • 0x11 : recoverable fixed disk data error, data fixed by ECC
      • 0x40 : seek failure *
      • 0x80 : time out, drive not ready

      A *-al jelölt hibák végzetesek. A legsúlyosabb 0x02 és a 0x40. Ha ezek a hibakódok jelennek meg többszöri próbálkozás után is, akkor sajnos nem fogja tudni olvasni az aktuális lemezt. A hibákkal kapcsolatban bővebb információk a Hibák, tesztek fejezetben találhatók.

  5. A list parancs
  6. Ezzel a paranccsal jeleníthetjük meg egy diszk tartartalmát és tulajdonságait. A parancs  értelmezve van valós- és virtuális lemezekre egyaránt. Alapértelmezetten a listát egy az egyben kiküldi az outputra. Képernyőre íráskor használjuk a -s <n> kapcsolót (ahol n egy pozitív egész szám) amellyel meghatározhatjuk az egyszerre kiírandó sorok számát. Ezután a lista minden n. sornál meg lesz törve egy scroll? felirattal, amely Enter-re tovább listáz, míg n+Enter hatására megszakítja a listázást.

    Paraméterezés:

      list -d <drive kód A:=0, B:=1> [-s konzol függ. méret][-p][> lista.txt]

      vagy

      list -f <image.sdd> [-p] [-s konzol függ. méret][> lista.txt]

    Példák:

      list -d 0 -s 25
      => az A: meghajtóban lévő SDD listázása normál dos konzolon

      list -f wss-50.sdd -p > wss-50.txt 
      => a wss-50.sdd image listázása tulajdonságokkal együtt a wss-50.txt fájlba

    ábra:

    Lista fejléc attribútumai

  7. A load parancs
  8. Ezzel a parancsal tölthetők be az egyes fájlok  a valós- és virtuális lemezekről. A program a beolvasott fájlokat rögtön tap kiterjesztésű állományba konvertálja. A tap-ba konvertált fájlok a diszken lévő tulajdonságaikat megőrzik (típus, név, hossz, autostart stb. ).

     A -c kapcsoló megadásával a program automatikusan átírja a basic típusú fájlokban a SD hivatkozásokat TAPE hivatkozásra. Ez nem vonatkozik a basic állományban szereplő gépi kódú loader-re és a MAG2.2M által lementett állományokra sem. Ez utóbbi funkció egy későbbi verzióban kerül megvalósításra.

    A betöltendő fájlokat nem nevük alapján kell megadni, hanem a SDD-en található könyvtárbejegyzési számuk alapján. Az emulátornak a -n kapcsolóval jelezzük, hogy a betöltendő fájlok sorszámai következnek.

    Paraméterezés:

      load -d <drive kód A:=0, B:=1> -o <filenév>.tap -n <0..59> [-c][> load.log]

      vagy

      load -f <image.sdd> -o <filenév>.tap -n <0..59> [-c][> load.log]

    Példák:

      load -d 0 -o teszt.tap -n 41 42
      => a  41. és 42. könyvtárbejegyzési számon található fájlok betöltése és tap-ba konvertálása az A: meghajtóban lévő SDD-ről.

      load -f wss-50.sdd -o teszt.tap -c -n 41 42 > teszt.log
      => a  41. és 42. könyvtárbejegyzési számon található fájlok betöltése és tap-ba konvertálása a wss-50.sdd fájlból. A konvertálás során az esetleges basic fájl SD parancsai át lesznek írva TAPE parancsokra, az üzenetek pedig a teszt.log fájlba íródnak be.

Gyakorlati példák

Egy példasoron keresztül bemutatom a az emulátor 1.0-s verziójának működését. A példát a 2. ponttól bárki kipróbálhatja, ha letölti az acidprgs.sdd fájlt.

  1. Lemez beolvasása image fájlba
    • SDD behelyezése az A: drive-ba
    • Lemez azonosítása: mount -d 0
    • Eredmény a képernyőn:
      • *SPECCY-DOS EMULATOR* v1.0 by EDY - (c) 2002. HUNGARY
        -----------------------------------------------------
        disk name:        Acidprgs
        autoboot:         true
        write protect:    off
        write density:    double
        num. of sides:    double
        tracks/side:      80
        sectors/track:    16
        all datasectors:  2480 (634880 bytes)
        used datasectors: 1167 (298752 bytes)
        bad sectors:      0
        max files:        60
        number of files:  21

    • Lemez beolvasása.
      Az image fájl neve az SDD nevét veszi fel: mount -d 0 -f acidprgs.sdd
    • Eredmény a képernyőn:
      • *SPECCY-DOS EMULATOR* v1.0 by EDY - (c) 2002. HUNGARY
        -----------------------------------------------------
        disk name:        Acidprgs
        autoboot:         true
        write protect:    off
        write density:    double
        num. of sides:    double
        tracks/side:      80
        sectors/track:    16
        all datasectors:  2480 (634880 bytes)
        used datasectors: 1167 (298752 bytes)
        bad sectors:      0
        max files:        60
        number of files:  21

        please wait, i'm mounting...
        read fdd|side: 0|track:79|sector: 7|10-ECC/CRC error on disk read
        Action completed!

    • A beolvasás során CRC hibajelzést kaptunk, a 0. oldal 79. track 7. szektorának beolvasása során. Az image fájlba 256 bájtnyi rossz adat került a (79*16+7)*256 címtől kezdve. Ha valamelyik program a lemezen használja ezt a szektort, akkor valószínű, hogy rendellenessen fog működni, vagy lehet, hogy betöltődéskor elszáll.
    • Tipp: Hiba esetén érdemes többször is megpróbálni a diszk beolvasását image fájlba. Jó esély van rá, hogy 2.-3. alkalommal hibátlan lesz az áttöltés.

  2. Image fájl listázása
    • image fájl tartalmának kiírása text fájlba: mount -f acidprgs.sdd -p > acidprgs.txt
    • Eredmény az acidprgs.txt fájlban:
      • *SPECCY-DOS EMULATOR* v1.0 by EDY - (c) 2002. HUNGARY
        -----------------------------------------------------
        disk name:        Acidprgs
        autoboot:         true
        write protect:    off
        write density:    double
        num. of sides:    double
        tracks/side:      80
        sectors/track:    16
        all datasectors:  2480 (634880 bytes)
        used datasectors: 1167 (298752 bytes)
        bad sectors:      0
        max files:        60
        number of files:  21
         
        NR| filename | T|length|memsa|memlo|aline|AB|DR|I|WP|
        -----------------------------------------------------
         0|fejolv    | C|   400|64000|    0|    -| N| 1|N| N|
         1|HERO      | B|   301|    -|    -|    0| N| 1|N| N|
         2|hero_c    | C| 36770|24500|    0|    -| N| 1|N| N|
         3|SKOOL     | B|    99|    -|    -|    1| N| 1|N| N|
         4|sko_c     | C| 41250|24286|    0|    -| N| 1|N| N|
         5|sko       | C|  9964|24286|    0|    -| N| 1|N| N|
         6|sko2      | C| 30535|35000|    0|    -| N| 1|N| N|
         7|MENU4     | B|  1627|    -|    -|    1| Y| 1|N| N|
         8|skoco     | C| 41250|24286|    0|    -| N| 1|N| N|
         9|KWIKSNAX  | B|   453|    -|    -|    0| N| 1|N| N|
        10|KWIKS.2   | C| 33574|24500|    0|    -| N| 1|N| N|
        11|skosc     | C|  6912|30000|    0|    -| N| 1|N| N|
        12|KWIKS.3   | C| 12134|49152|    0|    -| N| 1|N| N|
        13|KWIKS.4   | C| 11374|49152|    0|    -| N| 1|N| N|
        14|KWIKS.5   | C| 13729|49152|    0|    -| N| 1|N| N|
        15|KWIKS.6   | C|  5991|49152|    0|    -| N| 1|N| N|
        16|KWIKS.7   | C|   692|25000|    0|    -| N| 1|N| N|
        23|hard      | C| 41400|24000|    0|    -| N| 1|N| N|
        25|HARD      | B|    73|    -|    -|    1| N| 1|N| N|
        29|menu40    | C|   658|62500|    0|    -| N| 1|N| N|
        30|SPECCY    | C|  6912|16384|    0|    -| N| 1|N| N|

    • Listázás képernyőre: list -f acidprgs.sdd -s 25
    • Eredmény a képernyőn:
      • *SPECCY-DOS EMULATOR* v1.0 by EDY - (c) 2002. HUNGARY
        -----------------------------------------------------
        NR| filename | T|length|memsa|memlo|aline|AB|DR|I|WP|
        -----------------------------------------------------
         0|fejolv    | C|   400|64000|    0|    -| N| 1|N| N|
         1|HERO      | B|   301|    -|    -|    0| N| 1|N| N|
         2|hero_c    | C| 36770|24500|    0|    -| N| 1|N| N|
         3|SKOOL     | B|    99|    -|    -|    1| N| 1|N| N|
         4|sko_c     | C| 41250|24286|    0|    -| N| 1|N| N|
         5|sko       | C|  9964|24286|    0|    -| N| 1|N| N|
         6|sko2      | C| 30535|35000|    0|    -| N| 1|N| N|
         7|MENU4     | B|  1627|    -|    -|    1| Y| 1|N| N|
         8|skoco     | C| 41250|24286|    0|    -| N| 1|N| N|
         9|KWIKSNAX  | B|   453|    -|    -|    0| N| 1|N| N|
        10|KWIKS.2   | C| 33574|24500|    0|    -| N| 1|N| N|
        11|skosc     | C|  6912|30000|    0|    -| N| 1|N| N|
        12|KWIKS.3   | C| 12134|49152|    0|    -| N| 1|N| N|
        13|KWIKS.4   | C| 11374|49152|    0|    -| N| 1|N| N|
        14|KWIKS.5   | C| 13729|49152|    0|    -| N| 1|N| N|
        15|KWIKS.6   | C|  5991|49152|    0|    -| N| 1|N| N|
        16|KWIKS.7   | C|   692|25000|    0|    -| N| 1|N| N|
        23|hard      | C| 41400|24000|    0|    -| N| 1|N| N|
        25|HARD      | B|    73|    -|    -|    1| N| 1|N| N|

        scroll?

    • n + Enter gombok hatására leáll a listázás.

  3. Unniversal Hero c. játék betöltése image fájlból a unihero.tap állományba
    • load -f acidprgs.sdd -o unihero.tap -c -n 1 2
    • Eredmény a képernyőn:
      • *SPECCY-DOS EMULATOR* v1.0 by EDY - (c) 2002. HUNGARY
        -----------------------------------------------------
         1|HERO      | B|   301|    -|    -|    0| N| 1|N| N|
         2|hero_c    | C| 36770|24500|    0|    -| N| 1|N| N|

        files converted: 2
        length: 37071 bytes
        length in tap: 37117 bytes 

    • Nincs más dolgunk, mint a unihero.tap fájlt betölteni kedvenc emulátorunkba.
    • Figyelem! A Speccy-Dos-ról átkonvertált 128 Kb-os játékokat a következő módon tölthetjük be:
      • Válasszuk a 128 Basic menüt (+2A és + 3 esetén +3 Basic menü).
      • gépeljük be: usr 0 majd enter
      • A látszólag 48K-s üzemmódban a hagyományos LOAD "" parancsot használjuk a betöltéshez.
    • Jó játékot!
Hibák, tesztek
  1. Az emulátor lehetséges hibajelzései

Hibajelzés:

Jelentés:

mount

list

load

Missing arguments!

Hibás vagy hiányos paraméterezés

igen

igen

igen

ERROR : Unable to read from drive: <drájv cimke>

Nem tud olvasni a megadott drájvról

igen

igen

igen

ERROR : unable to open file for [read][write][append]: <fájlnév>

Nem tudja olvasni a megadott fájlt

igen

igen

igen

WARNING : This disk has not a real speccy dos filesystem!

A SDD vagy a IF nem valós SD fájlrendszer

igen

igen

igen

Action aborted!

Mount parancs futása megszakadt.

igen

nem

nem

ERROR : Invalid directory nubmer: <nr>

A megadott könyvtári szám hibás, vagy nem tartalmaz létező fájlt

nem

nem

igen

ERROR : Unable to allocte memory at <függvénynév>

Nem tud lefoglalni memóriát

igen

igen

igen

Tesztek

Az emulátor tesztelésére Windows 98 és ME környezetben került sor. Az emulátor mindkét Windows-on hibátlanul futott MS DOS ablakból. A tesztekhez 3.5" DS HD floppy diszk drájv-ot és 5.25" DS HD Chinon Fdz-506 típusú fdd-t használtam. Utóbbi esetében azért fontos megemlíteni a típust, mert a jumperelés gyártók szerint változik.

Teszteredmények:

SD fájlrendszer

3.5" DS HD

5.25" DS HD

SS SD 35 track

-

Sikertelen minden konfigurációban. Nem állt rendekezésemre semmilyen jumperelési útmutató a fent említett fdd-hoz. További tesztek folyamatban.

DS DD 80 track

Sikeres minden parancsban. Gyors beolvasás, kevés hibával.

DS DD 82 track

Sikeres minden parancsban. Lassú és bizonytalan a beolvasás, kevés hibával.


Letöltés
  1. A SpeccyDOS emulátor v1.03 letöltése (185 kbytes)

Publikálás a portálon: 2002-11-20 17:07:45