A floppy emulációt egyelőre nem tervezem, talán SD-t ha az EP verzió alapján egyszerűen megoldható.
A magnós programok problémásnak tűnnek, mert nem szabványos 1 bites WAV formátumot használnak, a fejléc azonban normál 8 bites 44100 Hz mono PCM formátumot jelez. Így az ep128emu audio file kezelését megvalósító libsndfile is ilyenként próbálja olvasni ezeket, és természetesen nem sikerül betölteni semmit.
A fejlécben tárolt 44100 Hz is hibásnak tűnik, némi próbálkozás után 22050 Hz-en tudtam betölteni egy programot, legalábbis részben, mert a PRG részét már nem találta (ez lehet az időzítő vagy megszakítás emulációjának a hibája is). Tehát ha az ilyen formátum használata elterjedt, akkor file konvertálásra lesz szükség.
Snapshot eseten a formatum azonos reszei minden gepen azonosak? Pl Z80 blokk az total ugyanolyan TVC, EP128, CPC, stb snapshot-ban? Azert is kerdem, mert probalnam az Xemu-ban levo Z80 state load/save handler-t vele kompatibilisre irni, igy legalabb van egy kis kozos nevezo :-]
A Z80 az például azonos minden gépnél. A fileio.hpp tartalmazza az összes blokk típust, nem mindegyik ténylegesen használt:
0x00000000 - file vége (üres blokk)
0x45508001 - Z80 állapot: Enterprise, CPC, Spectrum, TVC
0x45508002 - memória: Enterprise
0x45508003 - I/O állapot (a portokra utoljára írt értékek): Enterprise, TVC
0x45508004 - DAVE: Enterprise
0x45508005 - NICK: Enterprise
0x45508006 - debugger töréspontok (nem használt)
0x45508007 - emulátor konfiguráció (minden géphez, snapshotban nem fordul elő ilyen)
0x45508008 - Enterprise gép konfiguráció (órajelek és időzítési paraméterek, csak demo file esetén)
0x45508009 - Enterprise gép állapot
0x4550800A - Enterprise demo (a demo formátum valójában minden gépnél azonos, bár EP esetén egér eseményeket is támogat)
0x4550800B - 6502 kompatibilis CPU állapota (csak a plus4emu használja)
0x4550800C - Plus/4 TED állapot (a memóriát is tartalmazza)
0x4550800D - Plus/4 gép konfiguráció (órajelek demo file-hoz)
0x4550800E - Plus/4 gép állapot (itt található a 6551 ACIA is)
0x4550800F - Plus/4 demo (ugyanaz a formátum mint az EP esetén, de az egér nem támogatott)
0x45508010 - Plus/4 .PRG file ep128emu bináris formátumban "csomagolva", nem sok gyakorlati haszna van, bár ha beépítem a plus4emu-ba a tömörített file támogatást, akkor az ezeken is működni fog
0x45508011 - SID hanggenerátor állapot: Plus/4
0x45508018 - SDEXT állapot és Flash/SRAM memória: Enterprise (később talán TVC is)
0x45508020 - Spectrum memória
0x45508021 - Spectrum I/O állapot (nem használt)
0x45508022 - Spectrum és CPC AY hanggenerátor állapot
0x45508023 - Spectrum ULA
0x45508024 - Spectrum gép konfiguráció csak demo file-okhoz
0x45508025 - Spectrum gép állapot
0x45508026 - Spectrum demo
0x45508027 - Spectrum .SNA file ep128emu formátumban
0x45508028 - Spectrum .Z80 file ep128emu formátumban
0x45508030 - CPC memória
0x45508031 - CPC I/O portok (nem használt)
0x45508032 - 6845 CRTC állapot: CPC, TVC
0x45508033 - CPC video megjelenítő állapot (nem használt)
0x45508034 - CPC gép konfiguráció demo file esetén
0x45508035 - CPC gép állapot
0x45508036 - CPC demo
0x45508037 - "csomagolt" CPC .SNA file
0x45508040 - TVC memória
0x45508041 - TVC video megjelenítő állapot (nem használt)
0x45508042 - TVC gép konfiguráció (csak demo file-ban)
0x45508043 - TVC gép állapot
0x45508044 - TVC demoAz egyes gépek snapshotjaiban ténylegesen használt blokkok, és azok sorrendje (az első blokk típusából megállapítható az emulált gép):
Enterprise:
0x45508003 - I/O állapot (a portokra utoljára írt értékek): Enterprise, TVC
0x45508002 - memória: Enterprise
0x45508005 - NICK: Enterprise
0x45508004 - DAVE: Enterprise
0x45508001 - Z80 állapot: Enterprise, CPC, Spectrum, TVC
0x45508018 - SDEXT állapot és Flash/SRAM memória: Enterprise (később talán TVC is) (opcionális)
0x45508009 - Enterprise gép állapot (ha van SDEXT a snapshotban, akkor a blokk verzió - jelenleg 0x01000005 - 16. bitje beállított)
0x00000000 - EOFCPC:
0x45508030 - CPC memória
0x45508032 - 6845 CRTC állapot: CPC, TVC
0x45508022 - Spectrum és CPC AY hanggenerátor állapot
0x45508001 - Z80 állapot: Enterprise, CPC, Spectrum, TVC
0x45508035 - CPC gép állapot
0x00000000 - EOFSpectrum:
0x45508020 - Spectrum memória
0x45508023 - Spectrum ULA
0x45508022 - Spectrum és CPC AY hanggenerátor állapot
0x45508001 - Z80 állapot: Enterprise, CPC, Spectrum, TVC
0x45508025 - Spectrum gép állapot
0x00000000 - EOFTVC (még fejlesztés alatt):
0x45508040 - TVC memória
0x45508003 - I/O állapot (a portokra utoljára írt értékek): Enterprise, TVC
0x45508032 - 6845 CRTC állapot: CPC, TVC
0x45508001 - Z80 állapot: Enterprise, CPC, Spectrum, TVC
0x45508043 - TVC gép állapot
0x00000000 - EOFPlus/4:
0x4550800C - Plus/4 TED állapot (a memóriát is tartalmazza)
0x4550800B - 6502 kompatibilis CPU állapota (csak a plus4emu használja)
0x45508011 - SID hanggenerátor állapot: Plus/4
0x4550800E - Plus/4 gép állapot (itt található a 6551 ACIA is)
0x00000000 - EOFBlokk formátum:
- típus (4 byte)
- adat méret (4 byte)
- adat
- ellenőrző összeg (4 byte), a típuson és adat méreten is számítani kell
Minden 8 bitesnél nagyobb értéknél a legmagasabb helyiértékű byte az első.
A 32 bites blokk ellenőrző összeg számítása:
- a kezdőértéke 1
- az adatot 4 byte-onként kell feldolgozni, ha a mérete nem 4 byte egész számú többszöröse, akkor a végén 0 byte-okkal kiegészítve
- minden 4 byte egy 32 bites előjel nélküli egész, itt (kivételesen) a legalacsonyabb helyiértékű byte az első
- az ellenőrző összeget XOR-olni kell a beolvasott 32 bites értékkel, majd szorozni 0xC2B0C3CC-vel; az új ellenőrző összeg a 64 bites eredmény alsó és felső 32 bitje közötti XOR művelet eredménye. Az EOF blokknál mindig 0x6A50085E lesz
A tömörített formátum leírása
itt található, és
ez a file végzi a kicsomagolását.