Autor Wątek: TOS bez tajemnic  (Przeczytany 11191 razy)

zenek

  • *
  • Wiadomości: 34
TOS bez tajemnic
« dnia: 2012.09.01, 12:22:44 »
Cześć, pierwszym komputerem z jakim się zetknąłem był ZX Spectrum.
Teraz mam TC2048. Chciałbym kiedyś napisać emulację FDD 3000.
Jako wprawkę napisałem coś takiego https://github.com/rkd77/tosfs.git
Tylko, że nie wiem jak odczytać długość pliku w TOSie. Na http://8bit.yarek.pl/system/zx.tosa2/tos_bez_tajemnic.html  jest tabelka dotycząca plików:
01..89..BCDEF10..1F
K N EOLRRA
K - numer podkatalogu w jakim jest plik
N - 8 bajtów nazwy
E - 3 bajty rozszerzenia
O - numer kolejnego rekordu przy opisie długiego pliku
L - liczba bajtów w ostatnim sektorze
R - liczba 128-bajtowych rekordów zajętych przez plik
A - 16 bajtów opisujących przypisanie jednostek

Z R chyba się nie zgadza się, bo w obrazach dyskietek, które sprawdzałem na pozycji 0xE jest zero

Jaką długość ma plik opisany takim rekordem i jak go odczytać z obrazu dysku? Liczby w systemie dziesiętnym.
0, PACKMAKE, 1, 0, 48, 0, 32, 43 44 45 46 0 0 0 0 0 0 0 0 0 0 0 0

Gdyby ktoś załączył obraz gęstej dyskietki i takiej z podkatalogami, można by usprawnić skrypt.

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: TOS bez tajemnic
« Odpowiedź #1 dnia: 2012.09.01, 16:03:27 »
Witam!
Ja pierwszy kontakt miałem z innym produktem Sinclaira - ZX81. Kolega pokazywał mi symulator lotu. A ponieważ byłem świeżo po książce opisującej szczegółowo lądowanie pasażerskim samolotem - to wylądowałem już za drugim razem!  8)

Plik ma długość 3888 bajtów razem z nagłówkiem (R*128-(256-L)).
Nagłówek ma 5 lub 7 bajtów w zależności od typu.
Plik zajmuje jednostki alokacji 43, 44, 45, 46. Czyli ścieżka 14 sektory 12-15, ścieżka 15 sektory 0-11, z tym że z sektora 11 tylko 48 bajtów.

Z R chyba się nie zgadza się, bo w obrazach dyskietek, które sprawdzałem na pozycji 0xE jest zero

Nie mam żadnej dyskietki DD, a na zwykłych na pozycji E zawsze jest zero, ponieważ na pozycji F może być maksymalnie 128 (16kB na jeden wpis w katalogu).
« Ostatnia zmiana: 2012.09.01, 16:07:57 wysłana przez Phonex »

zenek

  • *
  • Wiadomości: 34
Odp: TOS bez tajemnic
« Odpowiedź #2 dnia: 2012.09.01, 16:54:19 »
Dzięki.

A gdy L jest równe 0, bo to chyba specjalny przypadek?

Phonex

  • *****
  • Wiadomości: 1261
  • Miejsce pobytu:
    Warszawa
Odp: TOS bez tajemnic
« Odpowiedź #3 dnia: 2012.09.01, 19:07:53 »
No tak, ten wzór to tylko poglądowy. Zero w tym miejscu widziane jako 256. Jak w pętli DJNZ: B=0 to pętla wykona się 256 razy.
Tak to trzeba zrobić

LD IX, NAGL ; początek nagłówka
LD C, (IX+$0D)
DEC C
LD B, (IX+$0F)
SRL B
DEC B
INC BC ; BC - długość pliku

Nie bardzo wiem, co może się pojawić na pozycji E. Czy te dwie liczby z pozycji E i F są liczbą dwubajtową? Nie wygląda na to, bo wtedy mniej znacząca byłaby pierwsza, więc na F byłoby zero. Może więc należy je zsumować? Dla dyskietek DD jednostka alokacji to 4kB, więc w jednym wpisie w katalogu wejdzie 64kB. 65536/128=512. Czyli w obu bajtach R - 0?
Trzeba by sprawdzić.


Oczywiście to co wyżej dotyczy tego krótkiego pliku!
Pliki dłuższe niż 16kB zajmują więcej wpisów w katalogu, więc trzeba znaleźć kolejne wpisy. Mają identyczne nazwy, tylko pierwszy ma na pozycji C zero, drugi - 1, itd.
Długości otrzymane z kolejnych wpisów należy dodać.
« Ostatnia zmiana: 2012.09.01, 20:48:20 wysłana przez Phonex »