SpartaDOS X - instrukcja (12-14)


Odczyt długości pliku

Zadanie: określa długość aktualnie otwartego pliku.
Składnia: XIO 39,#IOCB,aux1,aux2,"Dd:"
              A=PEEK(844+IOCB*16)
              B=PEEK(845+IOCB*16)
              C=PEEK(846+IOCB*16)
              LENGHT=A+B*256+C*65536

Uwagi: Zwraca długość aktualnie otwartego pliku. IOCB, aux1 i aux2 powinny mieć takie same wartości, jak użyte przy otwieraniu pliku.

Odczyt pliku binarnego (LOAD).

Zadanie: odczytuje i uruchamia plik binarny z innego programu.
Składnia: XIO 40,#IOCB,4,0,"Dd:[path]fname.ext"

Uwagi: instrukcja ta odczytuje plik binarny i uruchamia go, korzystając z wektorów INIT i/lub RUN. IOCB powinien być zamknięty. Odczyt pliku binarnego z dyskietki Atari DOS trwa nieco dłużej niż odczyt tego samego pliku z dyskietki SpartaDOS.

Tworzenie katalogu (MKDIR)

Zadanie: tworzy nowy podkatalog
Składnia: XIO 42,#IOCB,0,0,"Dd:[path]newdir"

Uwagi: Katalog "newdir" jest tworzonym podkatalogiem. Szlak podany przed nim musi być poprawny. Na przykład, jeżeli użyjesz:

     XIO 42,#1,0,0,"D1:LARRY>MOE>CURLY>SHEMP"


to szlak "LARRY>MOE>CURLY>" musi rzeczywiście znajdować się w bieżącym katalogu, aby został utoworzony podkatalog "SHEMP". IOCB powinien być po takiej operacji zamknięty. Działa to tylko na dyskietkach w formacie SpartaDOS.

Kasowanie katalogu (RMDIR)

Zadanie: usuwa istniejący podkatalog.
Składnia: XIO 43,#IOCB,0,0,"Dd:[path]olddir"

Uwagi: Podkatalog "olddir" jest kasowany. Aby wykonanie operacji było możliwe, to musi on być pusty. Zasady użycia szlaku i IOCB są podane w opisie XIO 42.

Zmiana bieżącego katalogu (CHDIR)

Zadanie: Zmienia bieżący katalog na dyskietce.
Składnia: XIO 44,#IOCB,0,0,"Dd:path"

Uwagi: Zmienia to katalog, który jest stosowany, gdy określona została stacja dysków bez podania katalogu. Zasady użycia szlaku i IOCB są podane w opisie XIO 42.

Ustalenie odczytu wstępnego (BOOT)

Zadanie: określa plik, który będzie odczytywany po włączeniu komputera bez SpartaDOS X.
Składnia: XIO 45,#IOCB,0,0,"Dd:[path]fname.ext"

Uwagi: Powoduje to odczyt wskazanego pliku, gdy komputer jest włączany lub ponownie uruchamiany bez użycia modułu SpartaDOS X. We wcześniejszych wersjach SpartaDOS odczytywany był plik *.DOS. W SpartaDOS X instrukcja ta ma pewne ograniczenia. IOCB powinien być zamknięty, a dyskietka musi mieć format SpartaDOS. Uwaga: BOOT nie działa ze wszystkimi plikami binarnymi. Gdy odczytywany jest plik bez DOS'u, musi być spełnione kilka specjalnych warunków. Podstawowym zastosowaniem tej instrukcji jest odczyt pliku DOS.

Ustawienie atrybutów (ATR)

Zadanie: ustala status zabezpieczenia, ukrycia i archiwizacji plików.
Składnia: XIO 49,#IOCB,aux1,aux2,"Dd:fname.ext"

Uwagi: Instrukcja ta służy do modyfikacji atrybutów pliku lub plików. W nazwie pliku dozwolone są jokery. Aux1 wskazuje zmieniane atrybuty i określa sposób ich zmiany. Aux2 wybiera pliki, których atrybuty będą zmieniane W celu dokonania żądanej modyfikacji atrybutów, należy do aux1 dodać następujące wartości, zakładając, że początkową wartością jest 0:

zabezpieczony+1            niezabezpieczony+16
ukryty+2            nieukryty+32
archiwalny+4            niearchiwalny+64
podkatalog+8            nie podkatalog+128

Na przykład, w celu ukrycia wszystkich plików z rozszerzeniem "BAK" w stacji nr.1 użyj:
     XIO 46,# 1,2,0,"D1:*.BAK"


Aby zabezpieczyć i ustawić archiwalność wszystkich ukrytych plików w stacji 1, użyj:
     XIO 49,#1,1+4,2,"D1:*.*"


zaś dla ujawnienia i odbezpieczenia wszystkich ukrytych plików z rozszerzeniem ".BAK" w stacji nr.1, użyj:
     XIO 49,#1,16+32,2,"D1:*.BAK"


Dla tej operacji IOCB powinien być zamknięty.

Formatowanie dyskietki (FORMAT)

Zadanie: inicjuje dyskietkę, ustalając odpowiednie dane dla ścieżek, sektorów i katalogu.
Składnia: XIO 254,#IOCB,0,0,"Dd:"

Uwagi: Parametr "Dd:" jest ignorowany ponieważ instrukcja ta powoduje skok do menu formatera SpartaDOS X. Numer stacji format, gęstość i inne wartości mogą być wybrane z tego menu. Gdy formater jest opuszczany, przez naciśnięcie ESC, to sterowanie jest przekazywane ponownie do realizowanego programu. Wybrany IOCB powinien być zamknięty. UWAGA! Formatowanie dyskietki niszczy wszystkie zawarte na niej dane. Ukrycie i zabezpieczenie nie chroni pliku przed zniszczeniem podczas formatowania dyskietki. Następne dwie operacje nie są dostępne poprzez instrukcję XIO. Muszą one być wywołane bezpośrednio przez CIO. Po programie w Basic'u demonstrującym ich użycie zamieszczony jest wydruk procedury w języku maszynowym, która pozwala na wykorzystanie tych operacji.

Odczyt danych dyskietkie (CHKDSK)

Zadanie: Odczytuje dane o dyskietce.

Dane: iccom=47
icbal=młodszy bajt adresu "Dd:"
icbah=starszy bajt adresu "Dd:"
icbll=młodszy bajt adresu bufora
icblh=starszy bajt adresu bufora

Wyniki:

Bufor      Wynik operacji CHKDSK (17 bajtów)
+0
      numer wersji dyskietki, 0 dla formatu Atari DOS
+1
      liczba bajtów w sektorze, 0 dla 256 bajtów
+2
      całkowita liczba sektorów na dyskietce (2 bajty)
+4
      liczba wolnych sektorów na dyskietce (2 bajty)
+6
      nazwa dyskietki, zawsze "AtariDOS" dla formatu Atari DOS (8 bajtów)
+14
      sekwencyjny numer dyskietki, 0 dla formatu Atari DOS
+16
      losowy numer dyskietki, 0 dla formatu Atari DOS

Odczyt bieżącego katalogu (CHDIR)

Zadanie: Odczytuje szlak od katalogu głównego do bieżącego katalogu stacji.

Dane: iccom=48
icbal=młodszy bajt adresu "Dd:[path]
icbah=starszy bajt adresu "Dd:[path]
icbll=młodszy bajt adresu bufora
icblh=starszy bajt adresu bufora

      Przykład:

Poniżej znajduje się krótki program w Basic'u demonstrujący użycie dwóch ostatnich wywołań CIO. Dalej umieszczony jest wydruk w assemblerze procedury zawartej w instrukcjach DATA (a później w zmiennej tekstowej CIO$).

10 DIM CIO$(32),BUFFER$(64),DRIVE$(4),CHKDSK$(17)
20 DRIVE$="D1: ":DRIVE$(4)=CHR$(155)
30 RESTORE 50
40 FOR X=1 TO 32:READ Y:CIO$(X)=CHR$(Y):NEXT X
50 DATA 104,104,104,10,10,10,10,170,104,104,157
60 DATA 66,3,104,157,69,3,104,157,68,3,104,157
70 DATA 73,3,104,157,72,3,76,86,228
80 REM PETLA GLOWNA
90 BUFFER$(1)=CHR$(0):BUFFER$(64)=CHR$(0)
100 BUFFER$(2)=BUFFER$
110 ?:?"Demonstracja wywołania CIO"
120 ?:?"1->CHKDSK"
130 ?:?"Szlak do bieżącego katalogu"
140 INPUT CHOICE
150 IF CHOICE <>1 AND CHOICE <>2 THEN 120
160 ICCOM=CHOICE+46
170 ?:?"która stacja";:INPUT D
180 D=INT(D):IF D<1 OR D>9 THEN 170
190 DRIVE$(2,2)=STR$(D):IOCB=1:?
200 X=USR(ADR(CIO$),IOCB,IOCOM,ADR(DRIVE$),ADR(BUFFER$))
210 IF CHOICE=1 THEN 270
220 IF BUFFER$(1,1)=CHR$(0) THEN ? "Katalog główny":GOTO 80
230 FOR X=1 TO LEN(BUFFER$)
240 IF BUFFER$(X,X)=CHR$(0) THEN BUFFER$(X,X)=">":BUFFER$=BUFFER$S(1,X):POP:GOTO 260
250 NEXT X
260 ? BUFFER$:GOTO 80
270 FOR X=1 TO 17:Y=ASC(BUFFER$(X,X)):CHKDSK(X-1)=Y: NEXT X
280 ?"      Volume: ";BUFFER$(7,14)
290 ?"Bytes/sectoe: ";
300 IF CHKDSK(1)=0 THEN CHKDSK(1)=256
310 ? CHKDSK(1)
320 ?" Total bytes: ";
330 ?CHKDSK(1)*(CHKDSK(2)+256*CHKDSK(3))
340 ?"  Bytes free: ";
350 ?CHKDSK(1)*(CHKDSK(4)+256*CHKDSK(5))
360 GOTO 80
 * adres początkowy jest dowolny,
 * gdyż procedura będzie w ciągu

 ciov  equ $e456
 iccom equ $342
 icbal equ $344
 icbah equ $345
 icbll equ $348
 icblh equ $349

       org $500      lub gdziekolwiek

       pla           liczba argumentów
       pla           powinno być zero
       pla           numer iocb
       asl @         mnożony przez 16
       asl @         dla uzyskania
       asl @         poprawnej formy
       asl @
       tax           do X gdzie pozostaje
       pla           znowu 0
       pla           numer rozkazu
       sta iccom,x
       pla           adres ciągu "Dx:"
       sta icbah,x
       pla
       sta icbal,x
       pla           adres bufora
       sta icblh,x
       pla
       sta icbll,x
       jmp ciov      wszystko. Skok do CIO.


Tablica danych SpartaDOS

      Liczne zmienne SpartaDOS są dostępne dla programisty, co pozwala na łatwe korzystanie z nich przez programy użytkowe i aplikacyjne. Ta tablica danych jest określona jako COMTAB i jest wskazywana przez zmienną DOSVEC systemu operacyjnego znajdującą się pod adresem 10 ($A). Sposób korzystania z niej jest pokazany w zamieszczonym na końcu przykładzie napisanym w assemblerze. Tablica COMTAB jest jednakowa dla wszystkich wersji SpartaDOS, a wyjątki są wskazane w opisie. Ponadto rejestry COMTAB, ZCRNAME, BUFOFF, COMFNAM i LBUF są wykorzystywane przez OS/A+ i DOS XL.

DECOUT COMTAB-19Tylko SpartaDOS X. Zawiera uzupełniony spacjami, przesunięty w prawo wynik procedury "misc_convdc", czyli ciąg znaków ASCII reprezentujący trzybajtową liczbę z DIVEND (patrz "Wartości tablicy na stronie 7"). 8 bajtów.
LSIO COMTAB-10Wektor wskazujący szybką procedurę obsługi SIO SpartaDOS. Możesz użyć zawartego tu adresu zamiast $E459 (OS SIOV) do wykonania szybkich operacji sektorowych I/O w Twoich programach.
DIVEND COMTAB-6Tylko SpartaDOS X. Zawarta tu trzybajtowa liczba jest zmieniana przez procedurę "misc_convdc" na ciąg zapisywany w DECOUT (patrz "Wartości tablicy na stronie 7").
WRTCMD COMTAB-2Ten rejesrt zawiera rozkaz zapisu SIO. "W" wskazuje zapis z weryfikacją, a "P" wskazuje zapis bez weryfikacji.
COMTAB COMTAB+0Znajduje się tu rozkaz skoku 6502, po którym następuje adres wejściowej procedury DOS. Skok tutaj wywołuje DOS.
ZCRNAME COMTAB+3Znajduje się tu rozkaz skoku 6502, po którym następuje adres procedury rozpoznającej nazwę pliku. Jest to stosowane do interpretacji wiersza polecenia. Skok tutaj powoduje pobranie następnego polecenia z LBUF, przetłumaczenie identyfikatora urządzenia, jeśli nie jest podany, dodanie ustalonego identyfikatora, jeśli nie został podany, oraz umieszczenie wyniku w COMFNAM. Każde wywołanie przesuwa wskaźnik BUFOFF na następny wpis w wierszu polecenia, więc każde wywołanie odczytuje następną część wiersza. Jeżeli nie ma więcej wpisów, to przy powrocie ustawiony jest bit Zero w 6502. Ponieważ 6502 nie ma względnego wywołania procedury (jsr) to konieczne jest użycie kilku wierszy assemblera, aby uzyskać dostęp do tej procedury. Jest to pokazane w przykładzie.
BUFOFF COMTAB+10Wskazuje pozycję w LBUF, gdzie umieszczony jest następny parametr, który będzie odczytywany. Można zmienić tą wartość w celu ponownego odczytania wiersza polecenia.
DATER COMTAB+13Data w formacie hh/mm/rr (3 bajty). Zmieniany przez VGETTD. Ciągle zmieniany, gdy włączone jest wyświetlanie czasu i daty.
_800FLG COMTAB+27Tylko SpartaDOS X. Jeżeli komputer jest Atari 800, to $FF. W przeciwnym wypadku zero.
NBANKS COMTAB+29Tylko SpartaDOS X. Liczba wolnych dodatkowych banków pamięci. Ta liczba jest podawana przez polecenie MEM.
BANKFLG COMTAB+30Tylko SpartaDOS X. Jeżeli DOS używa dodatkowej pamięci (USE BANKED), to zawiera $FF. W przeciwnym wypadku zero.
OSRMFLG COMTAB+31Tylko SpartaDOS X. Jeżeli DOS używa pamięci RAM pod systemem operacyjnym (USE OSRAM), to zawiera $FF. W przeciwnym wypadku zero. UWAGA: USE NONE jest wskazywane przez równe zero wartości BANKFLG i OSRMFLG.
COMFNAM COMTAB+33Docelowy bufor procedury ZCRNAME. Zawsze zaczyna się od Dd:, ponieważ ustalona stacja jest dodawana, gdy żadna inna nie została podana. Ten bufor ma 28 bajtów długości.
LBUF COMTAB+63Wejściowy bufor Command Processor. Tu zapisany jest cały wiersz polecenia. LBUF ma 64 bajty długości.
COPYBUF COMTAB+127Główny bufor systemu SpartaDOS X.

      Poniższy przykład w assemblerze demonstruje sposób odczytu wiersza poleceń SpartaDOS. Kopiuje on po prostu wiersz poleceń, w razie konieczności z dodaniem lub tłumaczeniem specyfikacji stacji. Ustawia on także BUFOFF na zero, więc nazwa polecenia jest wyświetlana.
 * wartości CIO i IOCB

 ciov     equ $e456
 iocom    equ $342
 icbal    equ $344
 icbah    equ $345
 icbll    equ $348
 icblh    equ $349
 write    equ $9

 * wartości SpartaDOS

 comtab   equ 10
 zcrname  equ 3
 bufoff   equ 10
 comfnam  equ 33

 * Program

          org $4000       lub gdziekolwiek

 init     equ *           szlak twojej procedury
          ldy #zcrname+2  jest taki jak COMTAB
          ldx #2
 loop1    equ *
          lda (comtab),y
          sta crunch,x
          dey
          dex
          bpl loop1

 * zerowanie BUFOFF

          lda #0
          ldy #bufoff
          sta (comtab),y
 mainloop equ *
          jsr crunch      odczyt następnego wpisu
          beq exit        koniec gdy nie ma.

 * ustawienie danych w COMFNAM dla CIO

          ldx #0          IOCB #0 (E:)
          lda #63         max długość bufora
          sta icbll,x
          lda #0
          sta icblh,x
          lda comtab      zapis comtab+33 w icba
          clc
          adc #comfnam
          sta icbal,x
          lda comtab+1
          adc #0
          sta icbah,x
          lda #write      rozkaz "print strig"
          sta iccom,x
          jsr ciov        wświetlenie
          jmp mainloop
 exit     equ *
          rts
 crunch   equ *
          jmp $ffff       zmieniane przez INIT

          org $2e0

          dta a(init)     wektor uruchomienia


Wektory pod OS ROM

      Poniższe wektory są dostępne tylko w komputerach XL/XE. Znajdują się one pod ROM systemu operacyjnego i są niszczone przez każdy program wykorzystujący ten obszar, jak Tutbo Basic XL. Dobrą praktyką jest sprawdzenie _800FLG dla upewnienia się, czy jest to komputer XL/XE i sprawdzenie każdego wektora przed użyciem.

      Ponieważ te wektory są pod ROM, to konieczne jest włączenie RAM zamiast ROM w tym obszarze pamięci. Oto jeden z możliwych sposobów:

     lda $d301  zapis stanu PIA
     pha        wybierającego banki.
     and #$fe   kasowanie bitu 0.
     sta $d301  włączenia RAM pod ROM.
     jsr VGETTD wywołanie procedury
     pla
     sta $d301  odtworzenie PIA

Każda z tych funkcji zawiera rozkaz skoku (JMP), po którym następuje adres procedury. Dobrą praktyką jest sprawdzenie istnienia JMP przed wywołaniem procedury.

VGETTD $FFC0Umieszcza aktualne wartości czasu idaty w rejestrach TIMER i DATER w COMTAB.
VSETTD $FFC3Ustawia aktualny czas i datę według wartości umieszczonych w rejestrach TIMER i DATER w COMTAB.
VTDON $FFC6Włącza i wyłącza wyświetlanie czasu i daty. Jeżeli przy wywołaniu rejestr Y 6502 zawiera 1, to wyświetlanie jest włączane. Jeżeli zawiera 0, to jest wyłączane. Po zakończeniu procedury bit Carry 6502 jest ustawiony, gdy operacja nie została wykonana poprawnie (TD.COM nie był uruchomiony i procedura nie jest zainstalowana).
VXCOMLI $FFD2Powoduje wykonanie wiersza zawartego w buforze LBUF w COMTAB. Przy wywołaniu BUFOFF powinien zawierać zero.
VKEYON $FFDBWłącza i wyłącza bufor klawiatury. Jeżeli przy wywołaniu rejestr Y 6502 zawiera 1, to bufor jest włączany. Jeżeli zawiera 0, to jest wyłączany.

Wartości tablicy na stronie 7

      Liczne rejestry na stronie 7 umożliwiają dostęp do systemu operacyjnego SpartaDOS X. Dokładne wyjaśnienia znaczenia wszystkich rejestrów wykracza poza ramy tej instrukcji, lecz poniżej podane jest kilka najbardziej interesujących.

NazwaAdresFunkcja
sparta_flg$0700"S" jeśli SpartaDOS
sparta_version$0701wersja $32=3.2, $40=4.0, itd.
krenel$0703skok (JMP) do wejścia do sytemu
misc$0709skok (JMP) do wejścia "misc"
sio_index$070ftabela swapp(9 bajtów)
device$0761numer urządzenia systemu
name$0762nazwa i rozszerzenie (11 bajtów)
date$077Bpatrz niżej (3 bajty)
time$077Epatrz niżej (3 bajty)
dateset$0781patrz niżej
path$07A0szlak (64 bajty)

      Procedury systemowe są wykonywane przez wykonanie skoku do procedury (JSR) pod adres $703 z kodem żądanego rozkazu w rejestrze Y 6502 i numerem żądanego urządzenia w device. Na przykład, z $10 w device wartość 100 w Y powoduje ustawienie aktualnego czasu i daty według wartości zawartych w zmiennych time i date.

      kd_gettd   100   odczyt czasu i daty
      kd_settd   101   ustawienie czasu i daty

      Poniżej znajduje się wykaz poprawnych rozkazów wektora "misc". Muszą one być wpisane do akumulatora 6502 przed wykonaniem JSR $0709. Rejstr Y jest używany jako index w COPYBUF dla operacji, które korzystają z tego bufora.

      misc_intz   0   inicjowanie "misc"
      misc_getfina   1   zmiana szlaku z COPYBUF na device, path, name
      misc_getpath   2   zmiana szlaku z COPYBUF na device, path
      misc_convdc   4   zmiana liczby z DIVEND na tekst w DECOUT

cztery młodsze bity w liczbie device są numerem urządzenia, na przykład, 2 dla D2:. Cztery starsze bity mają następujące znaczenie:

      0   blok SIO (SPARTA.SYS, ATARIDOS.SYS)
      1   zegar (CLOCK.SYS, JIFFY.SYS)
      2   procedura obsługi modułu ROM
      3   procedura obsługi konsoli
      4   procedura obsługi drukarki
      5   procedura obsługi RS 232 (COM.SYS)
      6   zarezerwowane
      7   zarezerwowane

Za każdym razem gdy otwierany jest plik czas i data dla pliku są umieszczane w time i date. Gdy plik jest otwierany tylko do zapisu i dataset jest równy 0, to bieżący czas i data są odczytywane do time i date oraz przypisywane do pliku. Jeżeli dataset jest $FF, to plik otrzymuje czas i datę, które były w rejestrach gdy plik został otwarty. Dataset, inaczej niż rejestr TDOVER we wcześniejszych wersjach SpartaDOS, jest automatycznie kasowany po użyciu. Przy kopiowaniu pliku pozostawia to orginalny czas i datę. Także w ten sposób programy (jak ARC) przypisuą zapamiętane o czasie i datcie do nowego pliku.

Rozdział 7

INFORMACJE TECHNICZNE

Format dyskietki SpartaDOS

      Istnieją cztery wyróżniające się rodzaje sektorów na dyskietce w formacie SpartaDOS. Są to sektory odczytu wstępnego, mapy bitowej, mapy sektorów i danych. Sektory danych mogą zawierać zarówno dane katalogów jak i dane plików. Poniżej znajduje się szczegółowy opis sektorów każdego rodzaju.

Sektory odczytu wstępnego

      Jak w większości innych DOS'ów dla 8 bitowych komputerów Atari, pierwsze trzy sektory dyskietki są sektorami odczytu wstępnego. Zawierają one program odczytujący wskazany plik przy uruchamianiu systemu oraz inne informacje konieczne do zapisu i odczytu danych z dyskietki. Sektory odczytu wstępnego są zawsze w pojedyńczej gęstości, niezależnie od gęstości pozostałej części dyskietki. Sektor 1 od bajtu $30 do $7f i całe sektory 2 i 3 zawierają program, który odczytuje plik pod SpartaDOS 2.x i 3.x, jeśli został określony (przez polecenie BOOT). Program ten nie jest wykorzystywany przez SpartaDOS x. Pierwszą częścią sektora 1 jest tablica danych zawierająca wartości opisane poniżej. Dyskietka może być dyskietką elastyczną ramdyskiem lub partycją twardego dysku, chyba że w opisie zostało podane inaczej. Wszystkie liczby dwu i trzybajtowe są zapisywane w standardowym formacie młodszy/starszy bajt.

Oto wartości sektora 1 , podane według położenia w sektorze (pierwszy bajt sektora ma numer 0):

9   Numer pierwszego sektora mapy sektorów katalogu głównego (2 bajty)
11   Całkowita liczba sektorów na dyskietce (2 bajty)
13   Liczba wolnych sektorów na dyskietce (2 bajty)
15   Liczba sektorów mapy bitowej na dyskietce
16   Numer pierwszego sektora mapy bitowej (2 bajty)
18   Numer sektora rozpoczynającego poszukiwanie przypisania sektorów pliku (2 bajty). Jest to pierwszy sektor sprawdzany, gdy konieczny jest sektor nieprzypisany. Służy to do dwóch celów: uwalnia od konieczności przeszukiwania mapy bitowej odpoczątku za każdym razem, gdy na dyskietce umieszczany jest plik oraz pozwala na rezerwację sektorów za głównym katalogiem dla rozszerzenia katalogu
20   Numer sektora rozpoczynającego poszukiwanie przypisania sektorów katalogu (2 bajty). Jest to pierwszy sektor sprawdzany, gdy rozszerzany jest katalog lub dodawany jest podkatalog. Oddzielenie tej wartości od wyżej podanej umożliwia przyspieszenie przeszukiwania katalogu
22   Nazwa dyskietki (8 bajtów). SpartaDOS wykorzystuje to jako część procedury rozpoznającej zmianę dyskietki
30   Liczba ścieżek na dyskietce. Jeżeli stacja dysków jest dwustronna to bit 7 jest ustawiony. Jeżeli nie jest to dyskietka elastyczna (na przykład ramdysk lub partcja twardego dysku), to rejestr ten zawiera wartość 1
31   Rozmiar sektorów na dyskietce (poza sektorami wstępnego odczytu). Zero wskazuje 256 bajtów w sektorze, a 128 oznacza 128 bajtów w sektorze
32   Podstawowy numer wersji formatu dyskietki. Dyskietki w formacje SpartaDOS 1.1 mają tu $11. Dyskietki sformatowane przez SpartaDOS 2.x i 3.x i SpartaDOS X mają to $20, ponieważ wszystkie one używają identycznego formatu dyskietek
38   Sekwencyjny numer dyskietki. Liczba to jest zwiększana przez SpartaDOS po każdym otwarciu pliku na dyskietce do zapisu. Jest on wykorzystywany do identyfikacji dyskietki
39   Losowy numer dyskietki. Jest to losowa liczba tworzona gdy dyskietka jest formatowana. Wraz z nazwą dyskietki i jej numerem sekwencyjnym jest używany do identyfikacji dyskietki w celu określenia czy dane zawarte w buforze dyskowym są poprawne
40   Numer sektora, który jest pierwszym sektorem zamowanym przez program odczytywany podczas odczytu wstępnego. Zwykle jest to plik "*.DOS". Wartość ta jest ustalana przez program XINIT.COM ze SpartaDOS Construction Set i przez polecenie BOOT

Mapa bitowa

      Mapa bitowa jest stosowana do określenia przypisania każdego sektora dyskietki. Każdy bit w każdym bajcie mapy bitowej pokazuje, czy odpowiadający mu sektor jest zajęty, więc każdy bajt zawiera informację o stanie ośmiu sektorów. Bit 7 reprezentuje pierwszy sektor każdej grupy, a bit 0 ósmy sektor grupy. Bajt 0 pierwszego sektora mapy bitowej reprezentuje sektory od 0 do 7 (pomimo iż sektor 0 nie istnieje), bajt 1 reprezentuje sektory od 8 do 15 itd. Jeżeli bit reprezentujący sektor jest USTAWIONY (1), to sektor nie jest wykorzystany. Jeżeli bit jest SKASOWANY (0) to sektor jest zajęty (przypisany do pliku). Jeżeli potrzeba więcej niż jeden sektor mapy bitowej, to mapa zajmuje kolejno następujące sektory.

Mapa sektorów

      Mapa sektorów jest wykazem wszystkich sektorów zajętych przez plik. Pierwsze dwa wpisy są numerami następnego i poprzedniego sektora mapy sektorów pliku. Reszta sektora zawiera listę numerów sektorów z danymi pliku lub katalogu. Są one opisane poniżej według położenia w sektorze:

0   Numer następnego sektora zawierającego mapę sektorów pliku lub katalogu (2 bajty). Znajduje się tu zero, jeżeli jest to ostatni sektor mapy
2   Numer poprzedniego sektora zawierającego mapę sektorów pliku lub katalogu (2 bajty). Znajduje się tu zero, jeżeli jest to pierwszy sektor mapy
4   Numery sektorów zawierających dane pliku lub katalogu w poprawnej kolejności. Wszystkie numery sektorów są dwubajtowe. Jeżeli numer sektora jest zerem, to ta część pliku nie ma przypisanego sektora. Pliki takie są opisane razem z instrukcją POINT w rozdziale "Programowanie ze SpartaDOS X"

Struktura katalogu

      Katalog jest specjalnym plikiem, który zawiera informacje o grupie plikow i podkatalogów. Każdy wpis katalogu ma długość 23 bajtów i zawiera nazwę pliku, czas i datę, numer pierwszego sektora mapy i status wpisu. Pierwszy wpis jest inny niż pozostałe, gdyż znajdują się w nim informacje o samym katalogu. Poniżej podane są informację zawarte w pierwszym wpisie (licząc od jego początku):

1   Numer pierwszego sektora mapy sektorów katalogu nadrzędnego (2 bajty). Zero wskazuje, że jest to główny katalog dyskietki (MAIN)
3   Długość katalogu w bajtach (3 bajty). Jest to wielkość pliku katalogu a nie liczba wpisów
6   Nazwa katalogu (8 bajtów). Puste miejsca są wypełnione spacjami

Gdy katalog jest otwarty w trybie bezpośrednim (patrz "Programowanie ze SpartaDOS X"), to jego plik jest odczytywany od drugiego wpisu (więc od pierwszego wpisu pliku lub podkatalogu). Aby odczytać pierwszy wpis, należy instrukcją POINT wskazać początek pliku po jego otwarciu.

Pozostałe wpisy katalogu są takie same. Mają one długość 23 bajtów i zawierają następujące informacje (licząc od początku wpisu):

0   Bajt statusu. Bity tego bajtu, jeśli są USTAWIONE (1), określają status wpisu katalogu następująco:
      B0 - wpis jest zabezpieczony
      B1 - wpis jest ukryty
      B2 - wpis jest archiwalny
      B3 - wpis jest w użyciu
      B4 - wpis jest skasowany
      B5 - wpis jest podkatalogiem
      B7 - wpis jest otwarty do zapisu
Uwagi: Bity 1 i 2 nie są rozpoznawane przez wcześniejsze wersje SpartaDOS. Bity 3 i 4 mają zawsze przeciwne stany. Bit 5 nigdy nie powinien być zmieniany! Bit 6 nie jest używany i nie może być, gdyż jest kasowany przy wykonywaniu innych operacji. Bajt statusu równy 0 oznacza koniec katalogu
1   Numer pierwszego sektora mapy sektorów podkatalogu lub pliku (2 bajty)
3   Długość pliku w bajtach (3 bajty)
6   Nazwa pliku lub podkatalogu (8 bajtów). Puste miejsca są wypełnione spacjami
14   Rozszerzenie nazwy pliku lub podkatalogu (3 bajty). Puste miejsca są wypełnione spacjami
17   Data utworzenia pliku lub podkatalogu w formacie DD/MM/YY (3 bajty)
20   Czas utworzenia pliku lub podkatalogu w formacie HH/MM/SS w systemie 24-godzinnym (3 bajty)

Badanie dyskietek

      Najlepszym sposobem zapoznania się z formatem dyskietek SpartaDOS jest użycie edytora dyskowego i badanie testowej dyskietki. DISKRX, edytor dyskowy SpartaDOS znajdujący się w zestawie SpartaDOS ToolKit, jest doskonałym edytorem sektorów specjalnie przystosowanym do dyskietek SpartaDOS. Rozpoznaje on sektory odczytu wstępnego, mapy bitowej, mapy sektorów, katalogów i plików. Dobre zrozumienie struktury dyskietki SpartaDOS pozwala na odtwarzanie plików z dyskietek, które mają wadliwe sektory lub uszkodzone katalogi.

Rozdział 8

KONFIGURACJA SYSTEMU

      Ten rozdział zawiera wszystkie informacje niezbędne do skonfigurowania Twojego systemu w wybrany przez Ciebie sposób.Istnieje tu wiele procedur obsługi (drivers) różnych funkcji, które mogą być zainstalowane w systemie. Oczywiście jeżeli zainstalujesz wszystkie, to może zabraknąć pamięci dla uruchomienia programów.

      Gdy SpartaDOS X jest uruchamiany, to pewne rzeczy są ustalane - posiada on "plik" tekstowy z informacjami o konfiguracji. Możesz napisać własny plik konfiguracji, który zastąpi "plik" standardowy. Utworzony przez Cibie plik musi nazywać się "CONFIG.SYS" i musi być umieszczany jako plik tekstowy na dyskietce znajdującej się w stacji dysków nr.1 w chwili uruchomienia komputera. Musi on być zapisany na dyskietce w formacie SpartaDOS w katalogu głównym.

Plik CONFIG.SYS

      Plik "CONFIG.SYS" składa się z poleceń. Aktualnie możliwe są trzy rodzaje poleceń. Są to:

  • USE OSRAM; BANKED; NONE
  • SET zmienna=wartość
  • DEVICE procedura
Polecenie USE powinno być pierwszym poleceniem w pliku "CONFIG.SYS", gdyż wskazuje ono, obszar pamięci RAM będzie użyty przez DOS. OSRAM wskazuje na pamięć RAM pod systemem operacyjnym (OS), BANKED wskazuje dodatkową pamięć RAM w obszarze $4000-$7FFF w komputerach 130 XE albo w 65 XE i 800 XL z rozszerzoną pamięcią. NONE oznacza zwykłą pamięć RAM powyżej obszaru DOS i poniżej obszaru programów. USE NONE prawdopodobnie będzie niezgodne z większością programów, ponieważ zajmuje to znaczny obszar głównej pamięci przeznaczonej na programy.

Standardowym pseudo-plikiem CONFIG.SYS zapisanym w module SpartaDOS X jest:

     DEVICE SPARTA
     DEVICE SIO
     DEVICE ATARIDOS
     DEVICE INDUS
     DEVICE CLOCK
     DEVICE JIFFY
     DEVICE RAMDISK


Jeżeli jednak Twój komputer ma 256 Kb pamięci lub więcej, to SpartaDOS X automatycznie wykorzystuje jeden z dodatkowych banków (USE BANKED) dla procedur DOS. Oznacza to jednocześnie zmniejszenie o jeden bank (16 kB) instalowanego ramdysku. Gdy niezbędny jest większy rozmiar ramdysku, musisz napisać własny plik CONFIG.SYS zawierający polecenie USE OSRAM. Normalne wykorzystanie pamięci RAM jest następujące:

      OSRAM   Nieprzerobiony komputer XL/XE
      BANKED   Komputer z rozszerzeniem pamięci (RAMBO XL,AXLON lub podobne)
      NONE   Atari 800 bez rozszerzenia pamięci

Zwróć uwagę, że obszr pamięci określony przez OSRAM ma rozmiar 7 kB ($E400 $FFBF), a obszar pamięci BANKED ma 16 kB ($4000-$7FFF). Jeżeli masz komputer z rozszerzoną pamięcią, to zwykle najlepiej stosować "USE BANKED", chyba że komputer ma 128 kB i chcesz użyć Basic XE w trybie EXTEND (lub inny program, który wymaga dodatkowych 64 kB RAM). Jeżeli wybierzesz OSRAM, możesz wykorzystać 4 kB RAM z obszaru $C000-$CFFF jako bufory dla procedury SPARTA.SYS (opisanej dalej w rozdziale).

Polecenie SET jest identyczne z poleceniem SET w Command Processor. Pozwala to na dowolne ustawienie wartości zmiennych systemowych jak "CAR", "BASIC" lub "BATCH".

Polecenie DEVICE odczytuje i instaluje procedury jak SPARTA.SYS, CLOCK.SYS, itd. Każda z tych procedur jest opisana w tym rozdziale. Pamiętaj, że ich kolejność jest ważna (na przykłąd, procedura SPARTA.SYS musi być odczytana przed ATARIDOS.SYS).

      Jeżeli podczas uruchamiania komputera lub wykonywania polecenia COLD trzymasz wciśnięty klawisz <OPTION>, to znajdujący się na dyskietce plik CONFIG SYS jest ignorowany i realizowana jest standardowa konfiguracja systemu ustalona w module SpartaDOS X.

Procedura SPARTA.SYS

Zadanie: Procedura obsługi dyskietek w formacie SpartaDOS. Musi ona być zainstalowana, gdyż w przeciwnym przypadku system nie będzie realizował swoich zadań (tj. nie będzie możliwy zapis i odczyt dyskietek).
Składnia: DEVICE SPARTA [OSRAM] [NUBFS[,NFILES]]
Typ: Zewnętrzny na urządzeniu CAR:

Opis: Jest to największa ze wszystkich procedur obsługi i zawiera trzy podprogramy. Są to:

  1. funkcje systemowe SpartaDOS
  2. wyjście formatowanego katalogu i inne drobne funkcje (wektor misc)
  3. standardowy blok funkcji I/O (wektor BLOCK_IO)
Parametr "OSRAM" działa tylko wtedy, gdy system został ustawiony na "USE OSRAM", w innym razie jest ignorowany. W tym trybie obszar pamięcie RAM od $C000 do $CFFF jest wykorzystywany dla buforów sektorów, które inaczej są umieszczane w głównej pamięci RAM. Standardowo parametr "OSRAM" nie jest użyty.

Parametr "nbufs" jest liczbą instalowanych buforów sektorów, z zakresu od 2 do 16 - standardowo jest 4. Każdy bufor zajmuje 256 bajtów RAM. Bufory są umieszczane w obszarze $C000 -$CFFF, jeżeli użyjesz USE OSRAM i parametru OSRAM, w dodatkowym banku, jeżeli użyjesz USE BANKED lub w dolnej części pamięci, jeżeli użyjesz USE NONE lub USE OSRAM bez parametru OSRAM w DEVICE SPARTA. Zbyt mała liczba buforów może spowodować wystąpienie błędu 161 ($A1), zaś zbyt duża nadmiernie zmniejsza pozostały dla innych programów obszar pamięci RAM.

Parametr "nfiles" określa maksymalną liczbę plików, które mogą być równocześnie otwarte, z zakresu od 3 do 16 - standardowo jest 5. Każde zwiększenie tej liczby zajmuje dodatkowo 256 bajtów pamięci. Wykorzystanie pamięci jest takie jak przez bufory sektorów.

Procedura SIO.SYS

Zadanie: Procedura obsługi szybkiej transmisji SIO i równoległego wejścia/wyjścia. Jest ona także niezbędna.
Składnia: DEVICE
Typ: zewnętrzny na urządzeniu CAR:

Opis: Procedura ta musi być dołączona do pliku CONFIG.SYS. Zawiera ona program realizujący szybką transmisję SIO ze stacjami US Doubler 1050, Indus GT, LDW Super 2000, Happy 1050 i XF551. Obsługuje ona także standardową transmisję ze wszystkimi innymi stacjami oraz transmisję równoległą (PIO) z urządzeniami takimi jak Multi I/O. DEVICE SPARTA musi poprzedzać DEVICE SIO w pliku CONFIG.SYS.

Procedura INDUS.SYS

Zadanie: Procedura szybkiej transmisji SIO dla stacji Indus. Jest ona niezbędna dla szybkich operacji ze stacjami Indus, LDW 2000 i Happy.
Składnia: DEVICE INDUS
Typ: zewnętrzny na urządzeniu CAR:

Opis: Procedura ta nie zajmuje miejsca w pamięci lecz przeprogramowuje stacje Indus GT i LDW Super 2000 do szybkiej transmisji (stacje te mają program szybkiej transmisji, lecz ma on błędy i nie działa). Gdy stacja jest już zaprogramowana, to taka pozostaje, aż do wyłączenia jej zasilania. Nie jest więc konieczne programowanie stacji przy każdym włączeniu komputera. Procedura ta jest wymagana dla stacji Happy, lecz nie działa z CA 2001. Procedura SIO.SYS musi być zainstalowana przed INDUS.SYS.

Procedura ATARIDOS.SYS

Zadanie: zawiera program rozpoznający dyskietki w formacie Atari DOS 2. Rozpoznaje on ponadto różne odmiany DOS 2, w tym MYDOS i DOS 2.5.
Składnia: DEVICE ATARIDOS
Typ: zewnętrzny na urządzeniu CAR:

Opis: Procedura ta wymaga wcześniejszego odczytania procedury "SPARTA.SYS" (jest ona rozszerzeniem SPARTA.SYS). Rozpoznaje ona wszystkie odmiany Atari DOS 2 włącznie z podkatalogami MYDOS. Sektory w rozszerzonej gęstości DOS 2.5 są tylko odczytywane i nie mogą być zapisywane. Ponadto nie jest możliwe tworzenie katalogów (MKDIR), kasowanie katalogów (RMDIR) i zmiana bieżącego katalogu (CHDIR) dla dyskietek MYDOS. ATARIDOS.SYS nie rozpoznaje dyskietek DOS 3, DOS XE i OSS DOS wersja 4.

Procedura RAMDISK.SYS

Zadanie: jest to procedura obsługi ramdysku SpartaDOS X. Pozwala na wybranie numeru i wielkości każdego instalowanego ramdysku.
Składnia: DEVICE RAMDISK [drive] [,nbanks]
Typ: zewnętrzny na urządzeniu CAR:

Opis: Standardowymi parametrami dla ramdysku są; stacja numer 9 i wszystkie dostępne banki RAM poza czterema bankami przeznaczonymi dla Basica XE (w atari 800 wszystkie banki). Można zainstalować kilka ramdysków przez użycie różnych numerów stacji i wybranie odpowiednich rozmiarów. Jeżeli wybierzesz więcej banków RAM niż jest do dyspozycji, to zostaną wykorzystane wszystkie dostępne banki. Każdy bank ma 16 kB. Liczbę dostępnych banków podaje polecenie MEM.

Po zainstalowaniu ramdysku procedura automatycznie zapisuje na nim strukturę katalogu. Jeżeli uprzednio został zainstalowany ramdysk o tej samej wielkości i tym samym numerze, to wykonanie zimnego startu (COLD) bez wyłączania zasilania układów pamięci nie powoduje utraty zawartości ramdysku. Tak więc wykonanie poniższych poleceń nie niszczy zawartości ramdysku.

     RAMDISK.SYS 8.4
     COPY *.COM 8:
     COLD        (zimny start systemu)
     RAMDISK.SYS 8.4
     DIR 8:

Maksymalnie trzy ramdyski mogą być zainstalowane przez procedurę RAMDISK.SYS. Próba utworzenia następnego spowoduje błąd:

      RAMDISK not instaled!
      SIO device table full!

      (ramdysk niezainstalowany!)
      (pełna tablica urządzeń SIO!)

RAMDISK.SYS nie ma wpływu na ramdyski w Multi I/O.

Procedura CLOCK.SYS

Zadanie: Procedura obsługi modułu R-Time 8 dla SpartaDOS X. Bez zainstalowania jej (lub JIFFY.SYS) polecenia TIME i DATE dają czas i datę rewizji modułu SpartaDOS X.
Składnia: DEVICE CLOCK
Typ: zewnętrzny na urządzeniu CAR:

Opis: Jeżeli zainstalowana jest już procedura obsługi zegara, lub jeżeli nie jest dołączony moduł R-Time 8, to procedura ta nie jest odczytywana.

Procedura JIFFY.SYS

Zadanie: procedura obsługi systemowego zegara SpartaDOS X. Stosuje się ją, gdy nie ma modułu R-Time 8. Bez zainstalowania tej procedury (lub CLOCK.SYS) polecenia TIME i DATE dają czas i datę rewizji modułu SpartaDOS X
Składnia: DEVICE JIFFY

Typ: zewnętrzny na urządzeniu CAR:

Opis: Jeżeli zainstalowana jest już procedura obsługi zegara (np.CLOCK.SYS) to procedura ta nie jest odczytywana.

Procedura XEP80.SYS

Zadanie: pozwala na wykorzystanie 80 kolumnowego ekranu przy użyciu interfejsu Atari XEP80.
Składnia: DEVICE XEP80
Typ: zewnętrzny na urządzeniu CAR:

Opis: Interfejs XEP80 musi być włączony do drugiego gniazda joysticka i musi mieć swój własny monitor. Po zainstalowaniu wszystko co jest wysyłane do urządzenia E: lub CON:, będzie wyświetlane na 80-kolumnowym monitorze poprzez XEP80. Normalne 40-kolumnowe wyjście nie działa.

Wiele programów wykorzystuje pamięć obrazu bezpośrednio, omijając urządzenie E:. Tak pracują prawie wszystkie edytory tekstu. Programy takie nie działają przez XEP80, wyświetlając swój obraz na normalnym monitorze. Dobrymi przykładami mogą tu być MENU i FORMAT. Inne programy używają kombinacji dwóch sposobów, na przykład 850 Express! 3.0. Aktualnie część komunikacyjna Express! działa poprawnie na ekranie 80-kolumnowym, lecz wszystkie menu są wyświetlane na 40-kolumnowym. Z tych powodów zalecane jest równoczesne korzystanie z obu monitorów.