Az emulátorok alá többféle fájlformátum létezik, ezek leírása olvasható itt.

A .PTP FORMÁTUM

A PTP egy olyan fájlformátum, amely majdnem egy az egyben megfeleltethető a PRIMO kazettás tárolásának, mindössze a szinkronizáló blokkok azok, melyek nincsennek be. Egy teljes PRIMO kazetta tárolható benne, ezért a legjobb megnevezése szalagállomány. Ezek a fájlok egyszerűségük és zártságuk miatt DOS parancssorból összefűzhetők, tehát egy fájlban tárolható akár az összes .PTP fájl tartalma. Ez a formátum elöszőr a Primoemu-nál jelent meg, de támogatja az Ultimo emulátor is. Előnye, hogy a kazetták visszalakíthatóak.

Az összefűzés a következő DOS paranccsal végezhető el:
(A /b kapcsoló nagyon fontos, ez utasítja a copy parancsot a bináris összefűzésre.)

copy /b elso.ptp + masodik.ptp + harmadik.ptp + negyedik.ptp eredmeny.ptp

A PTP fájl belső felépítése

1 - 3
FFh sizeL sizeH
Az első bájt minden esetben FFh, ezt jelzi a primo fájl kezdetét. A következő két bájt a teljes primo fájl mérete ezzel a három adminisztrációs bájttal együtt. A hossz nem a teljes PTP hossza, csak ezé a PRIMO szalagállományé! Lehetséges, hogy a PTP-ben újabb PRIMO szalagállomány következik majd!
A PTP fájl ezután blokkokból épül fel, minden blokknak tároljuk a hosszát és egy azonosítót.
  55h sizeL sizeH normál blokk
  AAh sizeL sizeH záró blokk
A méret itt is egy WORD, aminek a felső bájtja legtöbbször 00h, mert a blokk kisebb, mint 256 bájt, de ez nem szükségszerű. Ez a méret viszont a három adminisztrációs bájt nélkül tartalmazza a PRIMO blokk hosszát, amit be kell olvasni. A PTP fájl utolsó blokkja az AAh azonosítóval kezdődik, ha egy program a ROM rutinokkal lett felvéve (vagyis PRIMO-n lett létrehozva), akkor ez a blokk a PRIMO END blokkot tartalmazza.
Az előző 3 bájt után következik mindig maga a PRIMO kazetta blokk, ez lehet név blokk, adat-blokk és záró blokk.
Név-blokk felépítése
Feladata az állomány elejének jelzése, az állomány azonosítását célzó - maximálisan 16 karakter hosszúságú - állományév tárolása
1
83h
vagy
87h

Blokk típus
83h, BASIC program név-blokk
Az állomány BASIC, gépi kódú és képernyő tartalom blokkokat is tartalmazhat
87h Adat állomány név-blokk
Az állomány csak BASIC adat-blokkokból áll.

2
00h
Blokk sorszám
értéke kötelezően 00h
3
ns (01h-10h)
(namesize)
Állománynév-hossz
értéke 1-16 lehet.
4 - (4+ns)
name
Állománynév
tetszőleges karaktereket tartalmazó 1-16 hosszú karaktersorozat, a név-hossz adja meg hogy hány karakter hosszú is.
(4+ns+1)
crc
Ellenőrző-összeg
A blokk típus utáni összes bájt (2 - n) összegének legalsó bájtja.
Adat-blokk felépítése
Feladata tetszőleges bináris adatsorozat tárolása
1
F1h, F5h, F7h vagy F9h

Blokk típus
F1h, BASIC program-blokk
F5h, képernyő tartalom-blokk
F7h, BASIC adat-blokk
F9h, Gépi kódú program-blokk

2
bn (00h-99h)
(block number)
Blokk-sorszám
Értéke 00h-99h közötti BCD szám.
3 - 4
laL laH
(load address)
Betöltési cím
Betöltési cím, BASIC program-blokk, BASIC program-adat blokk és képernyő tartalom-blokk esetén relatív cím (a blokkban lévő 1. bájt állományon belüli sorszáma), gépi kódú program-blokk esetén abszolút cím (a blokkban lévő 1. bájt betöltés utáni címe).
5
nb
(number of bytes)
Blokkban lévő bájtok száma
Értéke 0 - 255 közötti értéket vehet fel, ha 0 az értéke, akkor 256 bájtból álló blokkot jelez.
6 - (6+nb)
databytes
Adatbájtok
1-256 darab
(6+nb+1)
crc
Ellenőrző-összeg
A blokk típus utáni összes bájt (2 - n) összegének legalsó bájtja.
Záró-blokk felépítése
Feladata az állomány végének jelzése
1
B1h, B5h, B7h vagy B9h

Blokk típus
B1h, BASIC vagy gépi kódú program-állomány vég
B5h, képernyő tartalom-állomány vég
B7h, BASIC adat-állomány vég
B9h, Automatikusan indulóGépi kódú program-blokk

Az első három esetben a PRIMO a vezérlést a BASIC interpreternek adja vissza, az utolsó esetben a 3 - 4 bájtokban megadott kezdőcímre.

2
bn (00h-99h)
(block number)
Blokk-sorszám
Értéke 00h-99h közötti BCD szám.


ha
1 = B9h
saL saH
(start address)
Indítási cím
(csak gépi kódú állomány esetén, vagyis ha az első byte=B9h !)

3 - 4


3

5
crc
Ellenőrző-összeg
A blokk típus utáni összes bájt (2 - n) összegének legalsó bájtja.
     

Legvégül egy példa:

A Primoemu default PTP fájlja:

00000000: FF 41 00 55 0F 00 83 00 : 0B 68 65 6C 6C 6F 20 77
00000010: 6F 72 6C 64 67 55 23 00 : F1 01 00 00 1D F0 43 0A
00000020: 00 84 00 05 44 14 00 B2 : 20 22 48 65 6C 6C 6F 20
00000030: 57 6F 72 6C 64 21 22 00 : 00 00 8F AA 03 00 B1 02
00000040: 02

A .PRI (.PRG) FORMÁTUM

A Primo-hoz A típus esetén kis munkával, B és C típusok esetén pedigkönnyedén illeszthető Commodore VC-1541-es floppy drive, mely az egyik megoldás volt a lemezegység használatára a Primo számítógépeken. Egy ilyen fájl betöltéséhez vagy egy lemezkezelő program betöltése szükséges kazettáról, vagy egy ROM csere kell hozzá. (A ROM cseréje után a Primo Break gombját nyomvatartva bekapcsolás/Reset alatt, a csatlakoztatott floppy drive-ról berántja magát a lemezkezelő részt.) A Commmodore floppyn a programok PRG típusú fáljként voltak tárolva, és bár egy ilyen lemezen másfajta fájlok is tárolhatók, a SEQ és USR típusú fájlok kezeléséről egyelőre nincs információnk. Az adatfájlokat DD-s 5,25-ös lemezre Star Commanderrel visszamásolva, újra használhatjuk őket. (A CDOS .ptp programot természetesen le kell töltenünk, és kazettára másolni, vagy ROM csere és loader a lemezre a megoldás.) A .pri (.prg) megoldás hátránya, hogy utántöltős programokat nem kezel, ezért ajánlott a .D64 formátum bevezetése is.)

 

A .PRI (.PRG) fájl belső felépítése

Egy Primo fájl felépítése a következő:

Egy .PRI (.PRG) fájl adatblokkokból és záróblokkból épül fel. Az adatblokkok nagyon hasonlítanak a kazettás adatblokkokhoz, eltekintve attól hogy a szokásos méretű kazettás adatblokktól sokkal hosszabbak is lehetnek.
Adat-blokk felépítése
Feladata tetszőleges bináris adatsorozat tárolása
1
D1h, D5h vagy D9h

Blokk típus
D1h, BASIC program-blokk
D 5h, képernyő tartalom-blokk
D 9h, Gépi kódú program-blokk

2 - 3
laL laH
(load address)
Betöltési cím
Gépi kódú programblokk esetén betöltési cím, BASIC program-blokk és képernyő tartalom-blokk esetén (valószínüleg) relatív cím. (a blokkban lévő 1. bájt állományon belüli sorszáma), gépi kódú program-blokk esetén abszolút cím (a blokkban lévő 1. bájt betöltés utáni címe).
4 - 5
nb
(number of bytes)
Blokkban lévő bájtok száma
6 - x
databytes
Adatbájtok

A záró-blokk felépítése
Feladata az állomány végének jelzése, indítás módjának meghatározása.

1
C3h
vagy
C9h

Indítás módja
C3h, A program gépi kódú hívással indul a következő két bájtban meghaározott címről.

C9h, A program visszadja a vezérlést a basic interpreternek.

2 - 3
saL saH
(start address)
Indítási cím
(csak ha az első byte=C3h!)
Egyes fájlok ezek után még tartalmaznak egy 0Dh értéket, de mivel használatuk nem jellemző egyik típusra sem, és nem következetes, ezért valószínüleg konvertálási marad is lehet.

A .PP FORMÁTUM

A PP egy olyan fájlformátum, amely nem más mint egy bináris memória snapshot, és az Ultimo emulátor tartalmazza. Felépítése egyszerű, mert néhány bevezető bájt után csak simán a program bájtjai következnek.

1 - 2
load address
A program betöltési címe a memóriában
3 - 4
start address
A program indítási címe a memóriában
4 - EOF-ig
program
A program

A program betöltésekor annyit történik, hogy egyszerűen beírásra kerül a fájl az emulátor RAM-jába, majd az IP átállításra kerül, az indítási címre. Igazából gépi kódra jó főleg, BASIC progik esetén valószínüleg a RUN parancs ROM-beli indítócímét kellene megadni (meg nem volt kipróbálva).


(László József, Varga Viktor, Grósz Attila)