... albo prawie 32, w każdym razie powyżej 16.

MyDOS łączy pliki w ten sposób, że w każdym sektorze jest 3-bajtowy "link". Z tego dwa bajty (16 bitów) to numer następnego sektora pliku, a 1 bajt - wypełnienie, czyli liczba bajtów danych w sektorze (od 1 do 253).

Wynikałoby z tego, że przeniesienie tego na sektory 512-bajtowe jest niemożliwe, bo wtedy wypełnienie wynosiłoby od 1 do 509 bajtów, i tym samym braknie jednego bitu, żeby je zakodować (zakładam minimalne możliwe zmiany w kodzie istniejącego MyDOS-a).

Otóż myślę, że ten brakujący bit można byłoby zastąpić najmłodszym bitem numeru aktualnego sektora - tzn. tego, w którym znajdują się dane, a nie tego, który jest wskazany linkiem. Wtedy np. sektory o numerach parzystych mogłyby mieć wypełnienie z zakresu od 1 do 255, natomiast sektory o numerach nieparzystych - wypełnienie od 256 do 509, czyli de facto od 1 do 509.

Ergo, na pełne sektory oraz te z wypełnioną pierwszą połówką można byłoby przeznaczyć połowę takiego dysku, czyli 32768 sektorów 512-bajtowych = 16 MB. A ponadto zostałoby jeszcze drugie 16 MB na sektory z niepełną pierwszą połówką. W sumie, krótkich plików o różnym wypełnieniu ostatniego sektora można byłoby nagrać max. ok. 65535 (pomijam miejsce niezbędne na katalogi, bootbloki, bitmapę itd. - to jest tylko "teoretyczny zarys w miarę szczegółowy" :P), zajmując tym samym całem 32 MB. Im dłuższe pliki, tym wypełnienie partycji pogarszałoby się, ale wiadomo, że pliki na Atari nigdy nie są strasznie długie, więc per saldo byłby zysk => przełamana bariera 16 MB.

Worst case, to jeden plik wielkości 32768 sektorów. Gdy taki zaistnieje na dysku, można dogrywać tylko pliki o wielkości nie przekraczającej 255 bajtów, bo gigant zajmie wszystkie sektory, w których możliwe jest całkowite wypełnienie.

Czy jest gdzieś konkurs na najbardziej posraną koncepcję systemu plików? Może bym coś wygrał :D

KMK
? HEX$(6670358)

2

mozna to w praktyce zastosowac, niekiedy w awaryjnych sytuacjach mydos sie przydaje - (patrz kompoty w Glucholazach :) ) - jest np. sporo dem nie dzialajacych pod SDX a dzialajacych pod mydos;- wiec uzycie partycji powyzej 16MB znaczaco w takim przypadku poprawia komfort pracy..

Kontakt: pin@usdk.pl

3

A jeśli wykorzystać ten jeden bit numeru sektora jako najmłodszy bit wypełnienia a resztę wypełnienia pomnożyć x2 oraz założyć, że każda wartość powyżej 509 to 509? Wtedy pełne sektory można umieszczać gdziekolwiek, a niepełne w położeniu zależnym od tego, czy mają parzystą czy nieparzystą długość.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

4

moze nie calkiem na temat ale gdzie mam sie dowiedziec jesli nie przy tej okazji ;-) nie rozumiem pewnej rzeczy. mysle, ze odpowiedzi na ponizsze pytania nie tylko mnie uswiadomia wiec jesli ktos moglby na to odpowiedziec bylo by milo.

1. dwa bajty kazdego sektora to link do kolejnego sektora tego pliku, jeden bajt to ilosc danych do zaladowania z sektora, sektory maja 128 lub 256 bajtow i nie moga byc sektorow roznej wielkosci na jednej dyskietce.

2. kazdy plik ma naglowek w ktorym znajduje sie adres poczatku ladowania i adres konca danych do zaladowania.

jest to jest prawda (nie wiem) to czy na pewno potrzebny jest ten trzeci bajt z iloscia bajtow do zaladowania (nie wiem - z ostatniego sektora ladowanego pliku?) przecie to mozna obliczyc z naglowka pliku i formatu dyskietki.

pytam bo tego nie rozumiem.

http://atari.pl/hsc/ad.php?i=1.

5 Ostatnio edytowany przez drac030 (2008-08-01 18:53:12)

@xxl: odpowiedź brzmi: nie każdy plik na dysku jest plikiem binarnym. Ergo, twierdzenie zawarte w pkt. 2 twojego posta jest fałszywe.

@epi: hmm, ale załóżmy, że mamy mieć wypełnienie 509. 509*2 = 1018, a to jest 3FA hex, jednak mamy tylko 9 bitów do zapisania wartości wypełnienia (8 w linku plus LSb nru sektora), co nam obcina najstarszy bit, więc wychodzi nam 1FA hex czyli 506 w sektorze parzystym i 507 w nieparzystym. Czyi źle, bo ma być 509. Nie wiem, czy dobrze liczę ...

@pin: ja bym dyskwalifikował za niechodzenie pod SDX :) Dlaczego polskie dema mają chodzić pod całkowicie amerykańskim MyDOS-em albo całkowicie niemieckim DOS-em II/+D, a pod w większości już polską Spartą X nie? ;)

KMK
? HEX$(6670358)

6

okej... czyli problem tkwi w tym, ze nie kazdy plik ma naglowek. dobrze, to jeszcze takie pytania:

1. czy kazdy plik ladowany przez dos musi posiadac wpis w vtoc? (wszystkie dosy to maja?)
2. czy jest cos takiego jak status zapisanego pliku na dyskietke (zabezpieczony/skasowany itp. - raczej tak... hmmm na pewno) czy wszystkie bity w takim bajcie(?) statusu sa uzywane? jak sa zapisywane informacje w takim bajcie?

http://atari.pl/hsc/ad.php?i=1.

7 Ostatnio edytowany przez drac030 (2008-08-01 18:58:15)

To jest w atariki, kliknij na "Formaty systemów plików" na str. głównej.

EDIT: Jeszcze tylko dodam, że normalny program kompletnie nie potrzebuje wiedzieć, co to są bity statusu i czy istnieją. Do dostępu do dysku (np. zapisu albo odczytu plików) korzystasz z CIO (zob. atariki, hasło CIO na str. głównej). Zapenia to niezależność od formatu dysku, pojemności, wielkości sektora itede.

KMK
? HEX$(6670358)

8

dzieki, znalazlem.

jest bajt statusu, ktory ma 3 bity wolne (podejrzewam, ze mydos to klon dosa2.5) czy nie mozna wykorzystac ktoregos z tych bitow do tego o co pytales w pierwszym poscie?

http://atari.pl/hsc/ad.php?i=1.

9 Ostatnio edytowany przez drac030 (2008-08-01 19:11:34)

Naturalnie, można. Nie wiem tylko, czy w directory MyDOS-a znajdzie się wolny bit. To jest klon DOS-a 2.5, ale ma podkatalogi. Jednak, przy odrobinie szczęścia, zajmuje to tylko jeden bit (czyli dwa są wolne).

EDIT: albo jeszcze inaczej: zliczamy sektory podczas odczytu, i w ostatnim link ma inne znaczenie, tzn. mamy 24 bity wypełnienia, a w pozostałych sektorach są 24 bity linku. Ktoś zna jakieś obiekcje?

KMK
? HEX$(6670358)

10

no dobrze a nie mozna tego sprawdzic? czyli problem tkwi takze w tym ze nie ma dokumentacji do mydosa? zrodla podobno byly dostepne(?)

http://atari.pl/hsc/ad.php?i=1.

11

Gdzieś kiedyś widziałem doce do FS MyDOS-a, ale gdybym je miał pod ręką, jak grzebię w atariki, to ten artykuł by już dawno powstał...

KMK
? HEX$(6670358)

12

jeszcze jeden pomysl:

ostatni sektor ladowanego pliku tez ma 2 bajty linkujace do kolejnego sektora - kolejnego? przeciez to koniec pliku. moze by zrobic tak ze gdy bajt ilosci danych do zaladowania =0 dos zrozumie jako ostatni sektor a ilosc danych do zaladowania pobierze z dwoch bajtow linkujacych sektory. pytanie tylko czy przypadkiem te dwa majty nie maja jakiejs specjalnej wartosci w ostatnim sektorze.

http://atari.pl/hsc/ad.php?i=1.

13 Ostatnio edytowany przez drac030 (2008-08-01 19:36:57)

ALe przy 512-bajtowym sektorze ostatni bajt = $00 może równie dobrze oznaczać $0100. Raczej, jesli się nie znajdą obiekcje (których nie umiem wymyślić, ale wstałem rano ...), stawiałbym na to, co napisałem w EDIT w poście nr 9 - licznik sektorów (oddzielny dla każdego pliku) co prawda wydłuża DOS, ale to w tym wypadku i tak jest nieuchronne. A pojemność dysku zwiększa się w nieskończoność (16777216 sektorów po 16777216 bajtów :])

EDIT: obiekcja (dotycząca chyba wszystkich propozycji): w trybie odczyt/zapis (12) albo dopisywania (9), gdy plik wypełnia całkowitą liczbę sektorów, przed dodaniem nowego trzeba zmodyfikować zawartość "poprzednio ostatniego" sektora. To chyba trochę komplikuje.

KMK
? HEX$(6670358)

14

czy bajt ilosci danych do zaladowania z sektora ma znaczenie dla kazdego sektora z pliku czy tylko dla ostatniego sektora pliku? jesli tylko ostatniego to zaden licznik sektorow nie jest potrzebny, zero bajtow do zaladowania nie bedzie oznaczalo $100 tylko zero.

http://atari.pl/hsc/ad.php?i=1.

15 Ostatnio edytowany przez drac030 (2008-08-01 19:46:53)

Mamy 16-bitowy link plus niezerowy "znacznik" w "normalnym" sektorze, a w ostatnim sektorze "znacznik" = 0, a zamiast linku mamy wypełnienie, tak? To dlaczego znacznik ma zajmować cały bajt? Może zajmować 1 bit chyba. Link można wydłużyć do 23 bitów, ale obiekcja jest w mocy.

KMK
? HEX$(6670358)

16

a skad mam wiedziec? to Ty masz wiedziec.

http://atari.pl/hsc/ad.php?i=1.

17

Dlaczego niby ja "mam" to wiedzieć?

KMK
? HEX$(6670358)

18 Ostatnio edytowany przez xxl (2008-08-01 19:58:24)

wychyliles sie z pomyslem to teraz koduj i placz ;-)

zartuje...

tak czytam o tym liczniku sektorow - moze by tak w bajcie ilosci danych do zaladowania w sektorze umiescic licznik sektorow do zaladowania czyli kolejne sektory ladowanego pliku mialy by tam wartosc dla 6 sektorow: 5, 4, 3, 2, 1, i jak licznik wyzerowany to dwa bajty linkujace oznaczaja ilosc danych do zaladowania w tym sektorze?

---
ale chyba troche za malo danych tych $ff sektorow do zaladowania przy sektorze 128 bajtow :/

http://atari.pl/hsc/ad.php?i=1.

19

Nie czaję... a co z plikami krótszymi niż 6 sektorów?

Co do koduj - to nie jest pomysł na kodowanie, tylko na temat na forum. :P Jak wiadomo, ja się zajmuję SpartaDOS-em, w MyDOS-ie grzebać nie mam zamiaru, przypuszczalnie i tak nic z tego, o czym tu mowa, nie dałoby się zaimplementować z prostego powodu - MyDOS tak zmodyfikowany zająłby za dużo pamięci. Jeszcze oryginał (post 1) ma minimum zmian, ale pewnie wymagałoby dodania procedury oddzielnie wyszukującej parzyste i nieparzyste sektory, no i na tym by pewnie wszystko legło. Ale kto wie, może taki np. macgyver się zainspiruje ;D

KMK
? HEX$(6670358)

20

z plikami krotkimi nie ma problemu bedzie 3,2,1 dla 4 sektorow... no niewazne i tak pomysl z licznikiem sektorow do bani bo przy modyfikowaniu np dlugosci pliku (dopisywaniu np) trzeba by bylo modyfikowac kazdy sektor :/
za to to z postu #15 ciekawe a odnosnie obiekcji to chyba zawsze przy dopisywaniu do pliku modyfikowany jest ostatni sektor? nie wiem ale tak mi sie wydaje chociazby z racji tego ze bajt ilosci danych sie zmieni.

http://atari.pl/hsc/ad.php?i=1.

21 Ostatnio edytowany przez drac030 (2008-08-01 20:15:04)

Bajt niekoniecznie (gdy sektor już był pełny), ale link owszem. Więc w sumie obiekcja nie jest taka ważna, jak mi się wydawało na początku.

A z licznikiem inne coś miałem na myśli: jak odróżniać ostatni sektor pliku od każdego innego. Liczba sektorów zajmowanych przez plik jest w directory, wystarczy, żeby procedura odczytująca pobrała ją do pamięci i przy sekwencyjnym odczycie kolejno zmniejszała. Przy dojściu do 1 wiadomo, że jesteśmy w ostatnim sektorze i żadne znaczniki nie są potrzebne.

KMK
? HEX$(6670358)

22

pin napisał/a:

jest np. sporo dem nie dzialajacych pod SDX a dzialajacych pod mydos

Np. jakie?

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

23

np unfused (przyznaje sie bez bicia)
nie dociekalem, dlaczego pod sdx nie hula.

24

do mydosa instrukcje obslugi dawal Toms - taka zielona ksiazeczka - niestety nie pamietam ile w niej bylo istotnych informacji dla kodera.

Ci, którzy przemawiają w imieniu Boga powinni pokazać listy uwierzytelniające. J. Tuwim

25

Bober napisał/a:

np unfused (przyznaje sie bez bicia)

To chyba masz jakiegoś pirackiego SDX ;)

U mnie działa (SDX 4.39RC), pod następującym configiem:

USE BANKED
DEVICE SPARTA $8F
DEVICE SIO
DEVICE ATARIDOS
DEVICE QUICKED
SET PATH=CAR:;.;D1:;D1:\TOOLKIT;D1:\UTILS
SET PROMPT=$L$P>
Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.