1

Temat: Instrukcje NOTE i POINT w Sparta DOS X

Dzień dobry,

Chciałbym się dowiedzieć jak działają instrukcje NOTE i POINT w Sparta DOS X ?
Chodzi mi o sytuację w której korzystam z dysku twardego 65535 sektorów po 512 bajtów.

Opis tych instrukcji dla języka Turbo Basic XL odnosi się do gęstości SS SD ED.
Czy da się korzystać z tych instrukcji pod Spartą ?

2

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Oczywiście. Polecam SDX manual rozdziały "6.3.6: Set File Position - POINT" s. 150 oraz "6.3.7: Get Current File Position - NOTE" s. 152.

Ostatnio edytowany przez mono (2015-01-21 11:45:54)

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

3

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Mono zawsze pomocny i z pelnym kagankiem oswiaty. Szac!

"Was powinny uzbrojone służby wyciągać z domów do punktów szczepień, a potem zamykać do pi* za rozpowszechnianie zagrożenia epidemicznego" - Epi 2021
"Powinno się pałować tylko tych co tego nie rozumieją. No i nie szmatki i nie chirurgiczne tylko min FFP3, to by miało jakiś sens. U mnie we firmie, to jak przychodzi bezmaskowiec, to stoi w deszczu przed firmą" - Pin 2021

4

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Jest jeszcze Atariki: TELL i SEEK.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

5

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Poczytałem manuały, ale chyba nie do końca rozumiem. Zemściła się nieznajomość asemblera, zresztą to info raczej dla kodera :-)

Ja się tak zastanawiam i "zapytowuję" (bo nie mam w chwili obecnej możliwości sprawdzenia), co zwraca NOTE w środowisku SPARTY.

W przypadku FDD i nośników SD, DD, ED w systemach DOS po NOTE dostaję numer sektora i bajt, a po POINT stacja ustawia głowicę nad tymże. Jest to związane natywnie z FDD. A czy SPARTA czasami nie robi tak, że zwraca tylko numer bajtu w pliku nad którym stoi ?

No i w drugą stronę POINT  - nie da się chyba w przypadku SPARTY zmusić do ustawienia głowicy nad konkretnym bajtem w konkretnym sektorze, tylko robi to sztucznie SPARTA przelatując od początku danego pliku do oznaczonego POINTEM miejsca?

Czy dobrze myślę ?

Ostatnio edytowany przez Yansen (2015-01-23 11:20:05)

6

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Dokładnie tak jest jak mówisz. W SDX ponadto możesz ustawić wskaźnik poza obecnym rozmiarem pliku - wtedy rozmiar pliku zostanie rozszerzony a wartości od końca pliku do miejsca wypełnione zerami. Nie spowoduje to rezerwacji sektorów ani żadnych zapisów na dysku (prócz wpisu w katalogu), dopiero kiedy zechcesz zapisać w takiej "dziurze" jakieś dane zaalokowany zostanie sektor i przypisany do pliku w odpowiednim miejscu.
Ale to dygresja.
Generalnie różnica między AtariDOS a Sparta polega na tym, że NOTE/POINT w AtariDOS działają na dysku, a w Sparcie działają na pliku. Tak więc NOTE w Sparcie zwróci 3-bajtowy numer bajtu w pliku i analogicznie POINT ustawi wskaźnik odczytu/zapisu danych w pliku (stąd nazwy funkcji - TELL/SEEK bo bliżej im do tych Unix-owych niż AtariDOS-owych).

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

7

Odp: Instrukcje NOTE i POINT w Sparta DOS X

tym sposobem "trudniej" uszkodzić np. katalog dysku ;)

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

8

Odp: Instrukcje NOTE i POINT w Sparta DOS X

jak instrukcjami NOTE/POINT mozna uszkodziac jakikolwiek sektor nie nalezacy do pliku?

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

9

Odp: Instrukcje NOTE i POINT w Sparta DOS X

otwierając pod Spartą katalog jako plik? Chyba tak się dało zrobić, choć może niefortunnie to ująłem ;)

ADRES: pin@atari.pl - konto zlikwidowane. Aktualny adres: pin(at)atari8.info

10

Odp: Instrukcje NOTE i POINT w Sparta DOS X

@xxl:

Instrukcje NOTE/POINT w AtariDOS wyglądają trochę jak projektowane na kolanie i nie do końca są przemyślane:
1. Żeby użyć NOTE/POINT musisz mieć otwarty plik.
2. Musisz wiedzieć ile bajtów zawiera sektor dysku a nie masz do tego żadnej funkcji w D:.
3. Numer sektora to numer sektora nie w pliku, ale NA DYSKU.
4. Jeśli wskazany sektor NA DYSKU nie należy do otwartego pliku dostajesz błąd 164: INTERNAL FILE # MISMATCH.
5. Zapisując dane do linku w sektorze możesz uszkodzić strukturę pliku.

TELL/SEEK:
1. Operują zawsze na PLIKU co jest logiczne, bo w końcu przed użyciem NOTE/POINT w BASIC-u musisz otworzyć plik.
2. Nie musisz znać szczegółowych danych nośnika bo jest ci do do niczego nie potrzebne (i nie powinno być).
3. Nie masz możliwości uszkodzenia struktury pliku, bo nie piszesz do sektorze, ale po pliku - DOS sam załatwia za ciebie ustawianie wskaźnika w pliku.

Takie to różnice.
Wygląda na to, że żeby poprawnie obsługiwać NOTE/POINT i pisać w jakieś miejsce w pliku w AtariDOS należy:
1. Otworzyć plik.
2. Czytać i ignorować bloki danych aż do osiągnięcia miejsc, które Cię w pliku interesują.
3. Znajdując się w każdym punkcie, którym jesteś zainteresowany wykonać NOTE i zachować wskazania eby móc się potem ustawić poprawnie w pliku za pomocą funkcji POINT.
Więc musisz przed wykonaniem czegokolwiek przelecieć część/cały plik celem uzyskania wskaźników. W przypadku TELL/SEEK nie trzeba tego robić; co więcej - jeśli znajdziesz się poza plikiem DOS sam go rozszerzy (Sparta - nie wiem jak to jest w MyDOS-ie).

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

11

Odp: Instrukcje NOTE i POINT w Sparta DOS X

To mój czysty domysł, ale zgaduję, że takie właśnie może być pochodzenie systemu plików SpartaDOS: żeby dostęp do pliku na dysku AtariDOS był swobodny i miał ręce i nogi, trzeba plik zindeksować. Czyli co najmniej raz przeczytać go od początku do końca i wygenerować oddzielny plik indeksu, zawierający kolejne numery sektorów pliku. Korzystając z tego indeksu można już wykonywać swobodne seeki po całości, oczywiście tylko do chwili, kiedy zajdzie potrzeba przekopiowania pliku na inny dysk - wtedy indeksowanie należy zrobić na nowo.

Stąd pewnie, jak się domyślam, koncepcja, żeby ten "indeks" DOS generował w locie dla każdego pliku. W postaci mapy pliku. A skoro już mamy mapę, 3-bajtowy link w sektorze danych staje się niepotrzebny i tylko zawadza.

KMK
? HEX$(6670358)

12

Odp: Instrukcje NOTE i POINT w Sparta DOS X

mono napisał/a:

Instrukcje NOTE/POINT w AtariDOS wyglądają trochę jak projektowane na kolanie i nie do końca są przemyślane:
1. Żeby użyć NOTE/POINT musisz mieć otwarty plik.

tak samo jak w innych dosach.

> 2. Musisz wiedzieć ile bajtów zawiera sektor dysku a nie masz do tego żadnej funkcji w D:.

nie musisz

> 3. Numer sektora to numer sektora nie w pliku, ale NA DYSKU.

i dlatego nie musisz (2)

> 4. Jeśli wskazany sektor NA DYSKU nie należy do otwartego pliku dostajesz błąd 164: INTERNAL FILE # MISMATCH.

i dlatego niczego nie uszkodzisz

> 5. Zapisując dane do linku w sektorze możesz uszkodzić strukturę pliku.

korzystajac z D: nie mozesz tego zrobic. get czy put nie pozwoli niczego zapisac w linku

> Wygląda na to, że żeby poprawnie obsługiwać NOTE/POINT i pisać w jakieś miejsce w pliku w AtariDOS należy:

za starymi ksiazkami - z pamieci: jesli chcesz uzywac note/point na pliku to go zindeksuj - przy atari dos zaleca sie stosowanie dodatkowego zbioru z informacjami dla note/point a dla Sparty niepotrzebne bo zbior dodatkowy zawsze jest tworzony, jest czescia fs

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

13

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Z tego wnioskuję, że:

1. wykorzystanie NOTE/POINT w Sparcie w rozumieniu ustawienia się w pliku nad określonym bajtem mija się z celem - z punktu widzenia prędkości (negatyw)

2. indeksowanie - dla plików danych o stałych rekordach jest zbędne (pozytyw)

14

Odp: Instrukcje NOTE i POINT w Sparta DOS X

W Sparcie (zarówno 3.2, jak i X) NOTE/POINT ustawia się dokładnie nad określonym bajtem w pliku - w DOS2.x trzeba dokonywać dodatkowych zabiegów (indeksowanie).

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

15

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Yansen napisał/a:

1. wykorzystanie NOTE/POINT w Sparcie w rozumieniu ustawienia się w pliku nad określonym bajtem mija się z celem - z punktu widzenia prędkości (negatyw)

Prędkość jest słaba tylko jeśli pracujesz na dyskach w formacie AtariDOS, jeśli NOTE/POINT pod Spartą operuje na dysku w formacie Sparty, to jest błyskawiczne. Za to działanie jest jednoznaczne (w stosunku do innych DOSow, gdzie po skopiowaniu pliku trzeba przygotować nowe indeksy, bo jak się tego nie zrobi.... to kaszana ;) ).

Ostatnio edytowany przez Pecus (2015-01-26 11:44:45)

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

16

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Jest błyskawiczne ? Jak to możliwe, skoro Sparta przelatuje od pierwszego bajtu do żądanego ? Może ktoś zrobić NOTE na ostatnim bajcie w pliku długości 100kB, potem POINT i zmierzyć czas ? Bo wg mnie to będzie trwało tylko trochę krócej co normalny odczyt tego bajtu. Ja ciągle nie mam dostępu do sprzętu.

17

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Kiedyś to mierzyłem, seek (czyli "point") przez całą długość pliku o wielkości 16 MB na twardym dysku trwa oidp ok. 5 sekund. Odczyt tego samego pliku trwa ok. 3 minut.

Robisz błędne założenie, że "Sparta przelatuje od pierwszego bajtu do żądanego" - wcale nie. Przesunięcie następuje od bieżącej pozycji w pliku i DOS nie czyta przy tym danych pliku, a tylko jego mapę. Mało tego: nawet w formacie AtariDOS przesunięcie nie powinno wymagać przejazdu do początku, pod warunkiem, że przesuwamy się w kierunku końca pliku. Wszelkie próby cofnięcia się (na pliku zapisanym na dysku w formacie AtariDOS) spowodują taki efekt, jak mówisz.

Zasadnicza różnica polega na formacie dysku: w formacie SpartaDOS seek/tell działa optymalnie (niezależnie od kierunku przesunięcia), a w formacie AtariDOS - nie (i to wynika z natury tego ostatniego, jak wyżej powiedziano, żeby to obejść, trzeba indeksować pliki).

Ostatnio edytowany przez drac030 (2015-01-26 13:25:39)

KMK
? HEX$(6670358)

18

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Może inaczej.
AtariDOS skonstruowany jest tak, że wpis w katalogu zawiera wyłącznie rozmiar pliku (liczony w sektorach) oraz numer pierwszego sektora pliku. Każdy z sektorów pliku zawiera 125 lub 253 (zależnie od gęstości SD, DD) bajty danych i zawsze 3 bajty wskazujące nr kolejnego sektora pliku i ilość danych, które zostały wykorzystane w bieżącym sektorze. Chcąc poruszać się po takim pliku musisz odczytać wpis w katalogu (masz nr pierwszego sektora) i czytać po kolei sektory pliku (żeby się dowiedzieć jaki jest następny) - czyli stworzyć mapę pliku. Dopiero wtedy wiesz do którego sektora skoczyć kiedy potrzebujesz ustawić wskaźnik pliku w konkretnym miejscu. To samo kiedy chciałbyś się dowiedzieć ile bajtów zawiera plik - wpis w katalogu podaje tylko ilość zajmowanych sektorów na dysku więc musisz polecieć po wszystkich sektorach pliku i sumować ilości bajtów wykorzystanych w sektorze).
SpartaDOS skonstruowany jest tak, że wpis w katalogu zawiera ilość danych w pliku w bajtach i numer pierwszego sektora mapy pliku. Mapa pliku z kolei zawiera numery kolejnych sektorów w pliku. W sektorach pliku zapisywane są tylko dane (128/256 lub 512 bajtów zależnie od gęstości). Ustawienie wskaźnika w pliku polega więc na pobraniu wpisu w katalogu (więc masz pierwszy sektor mapy pliku), przeliczenia w którym sektorze mapy pliku znajduje się numer sektora pliku, który nas interesuje, odczytaniu n sektorów mapy pliku i pobrania numeru sektora pliku. Mapa pliku jest listą dwukierunkową więc możesz się po niej poruszać dowolnie (w AtariDOS linki w sektorach pliku prowadzą tylko do następnego sektora pliku - lista jednokierunkowa więc musisz złożyć sobie indeks w pamięci sam). Dzielenie przez 128/256/512 zdaje się jest też nieco szybsze niż dzielenie przez 125/253.
Jak łatwo sobie wyobrazić, dla gęstości DD w jednym sektorze mapy pliku będziesz miał informacje o (256-2-2)/2=126 sektorach pliku czyli bez doczytywania dodatkowych sektorów dysku dostaniesz się bez problemu do 32256 (7E00 hex) bajtów pliku. Jeśli plik jest dłuższy, to przeczytany zostanie kolejny sektor mapy pliku. Jeśli chcesz cofnąć się wstecz, przeczytany zostanie poprzedni sektor mapy pliku, itd.
Sparta buforuje dane celem oszczędzenia użytkownikowi zbędnych odczytów tak więc NOTE/POINT będą śmigać bardzo szybko.
Warto sobie wyobrazić co będzie się działo z AtariDOS-em i kolegami kiedy bez samodzielnego zrobienia indeksu (gdzie go trzymać: w pamięci? - szkoda miejsca; na dysku? - redundancja a przecież mamy tylko 180KB na DD, no 360 na DSDD) - czeka nas każdorazowy odczyt od początku pliku aż do miejsca w którym chcesz się ustawić. Sparta ma po prostu indeks pliku wbudowany w filesystem i nie będzie żądać od użytkownika żeby go samodzielnie robił. Wygodniej? :)

Edit: poprawka

Ostatnio edytowany przez mono (2015-01-26 13:19:37)

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

19

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Ok, zmierzyłem jeszcze raz:

1) seek z pozycji 0 na pozycję 16777215: 2,1 sek.
2) seek z pozycji 16777215 na pozycję 0: 3,36 sek.
3) odczyt 16777215 bajtów (porcjami po 8k): 4 min. 16,26 sek.

Sprzęt: Atari 65XE (6502/1,77 MHz/320k RAM), IDE+, SDX 4.47, partycja 32 MB w formacie Sparty.

KMK
? HEX$(6670358)

20

Odp: Instrukcje NOTE i POINT w Sparta DOS X

No to bajka! Nie mogę się doczekać na zabawę na realnym Atari.

Bardzo dziękuję wszystkim za wyjaśnienia.

@drac030: te czasy uzyskałeś w TBXL czy pod DOS?

Ostatnio edytowany przez Yansen (2015-01-26 14:43:11)

21

Odp: Instrukcje NOTE i POINT w Sparta DOS X

Programem w TBXL (działającym pod DOS-em).

KMK
? HEX$(6670358)