| Start | Super Packer | Atari Graphics Studio / AGS | Graph2Font / G2F | Mads |   http://madteam.atari8.info  
SKŁAD GRUPY
PRODUKCJE
scena
gry
użytki
vbxe
SPRZĘT
Sio2SD/Pajero
Sio2SD/Rocky
Stereo/Pajero
GTIA/Psychol
ARTYKUŁY
DEMO EFFECTS
LINKI
   

znalazł: Tkacz
Commodore - DOS
Syzygy #8

Firma Commodore wybrała zupełnie inną drogę, niż większość producentów, dla komputerów opartych na procesorach rodziny 65xx. Stacja dysków jest inteligentnym urządzeniem zewnętrznym wyposażonym we własny procesor i pamięć, które połączone jest z komputerem (CBM, C-64, VC-20, C-16 itd.) nie przez szyny adresową i danych, lecz za pomocą złącza IEC lub napęd VC-1541 do komputerów VC-20, C-64 i C-16 przez wariant szeregowy szyny IEC.
Koncepcja ta warunkuje z jednej strony małe szybkości transmisji (*), w porównaniu z innymi komputerami, z drugiej zaś strony - "inteligentna" stacja może formatować dyskietkę w czasie wykonywania przez komputer innego programu.

Organizacja dysku

Podczas gdy większość jednostek sterujących dla dyskietek ma na jednej ścieżce jednakową liczbę sektorów (Apple-DOS np. 16), firma Commodore wykorzystała fakt, zę zewnętrzne ścieżki są dłuższe niż wewnętrzne. W zależności od typu napędu, dla jednej ścieżki występują następujące liczby sektorów (ścieżka 0 jest zawsze najbardziej zewnętrzna), jak to przedstawiam dalej.
Tabela zajętości (BAM - Block Availability Map) odpowiada, pod względem swojej funkcji, VTOC systemu Apple-DOS 3.3; każdy bit równy logicznemu 1 oznacza, że sektor jest zajęty. Ponieważ w typach CBM-3040/4040, oraz CBM-8050 występują podwójne napędy dyskietek, wobec tego można pomnożyć przez 2 podane wartości pojemności.

                     CBM-3040/4040,        CBM-8050:
                       VC-1541:
Sektory             Ścieżka Sektory      Ścieżka Sektory
na ścieżkę             0-16   21            0-38   29
                      17-23   20            39-52  27
                      24-29   18            54-65  25
                      30-34   17            66-76  23
Pojemność             172,5 Kb              520,75 Kb
Razem sektorów        690                   2083
Bajtów na sektor      256                   256
Katalog               ścieżka 17, 29 sek.   ścieżka 39, 29 sek.
Tabela                ścieżka 17            ścieżka 38
zajętości             2 sektory             2 sektory

Przekazywanie komend

Podobnie jak w systemie CP/M można zamieniać nieznaczące znaki w nazwach plików na znaki zapytania, natomiast całe ciągi znaków można zastępować gwiazdkami. Nazwy mogą mieć maksymalnie 16 znaków długości, a także znaki sterujące. Chcąc wpisać do pamięci pierwszy plik katalogu, będący programem w języku Basic, należy podać np. następujący rozkaz:

LOAD "*",8 (8 - adres szyny IEC napędu dyskietek)

W Commodore-Basic 3.X (np. C-64) rozkaz LOAD służy m. in. do wyświetlenia katalogu dyskietki po wpi- saniu go do pamięci oraz użyciu LIST:

LOAD "$",8
LIST

W celu wywołania innego napędu dyskowego, niż zarezerwowany wcześniej, wystarczy podać jedynie jego numer (0 lub 1) po znaku dolara. Należy pamiętać, że katalog nakłada się na umieszczony wcześnej w pamięci program w języku Basic! Rozkaz DIR wersji Basic 4.X nie ma tej sprzeczności.
Inne komendy związane z dyskietkami muszą być wprowadzone przez bezpośredni dostęp do szyny IEC. W tym celu należy najpierw otworzyć kanał szyny IEC. Jeżeli jego adres wtórny (tzn. liczba umieszczona za pierwotnym adresem szyny IEC) równa się 15, wtedy napęd rozpoznaje, że mają wystapić komendy sterujące i wobec tego nie należy podawać nazwy pliku w OPEN.
Jeżeli natomiast adres wtórny jest różny od 15 (dowolna inna wartość), wtedy musi być za nim umieszczona nazwa pliku, ponieważ plik na dyskietce będzie otwarty zarówno do odczytu jak i do zapisu. (W Commodore-Basic 4.X do tego celu służą bardzo wygodne komendy DOPEN, jednakże również nie jest możliwa "bezpośrednia" droga przez szynę IEC).
W języku BASIC 3.X fabrycznie nowa dyskietka formatowana jest przu pomocy następującej instrukcji (w Basic 4.X w tym celu występuje rozkaz HEADER):

OPEN 1,8,15
PRINT #1, "NEW0:NAZWA,01"
CLOSE1

Plik logiczny przydzielany jest do adresu pierwotnego równego 8, za którego pomocą zostaje wywołana jednostka dyskowa oraz otwarty kanał komend (adres wtórny 15). Następnie rozkaz PRINT #1 przesyła komendę podaną w cudzysłowie napędu. NEW oznacza formatowanie (można stosować skrót N), a następnie cyfra 0 oznacza zerowy napęd dyskowy. Po dwukropku występuje nazwa dysku, który w każdym katalogu przedstawiony jest odwrotnie jako nagłówek oraz może zawierać maksymalnie 16 znaków, następnie archiwalny numer dyskietki (tutaj 01). Napęd 0 rozpędza się i formatuje dyskietkę w czasie 1-2 minut. Również przed zakończeniem tej operacji należy wprowadzić CLOSE 1 (lub tylko CLOSE), ponieważ formatowanie odbywa się wewnątrz napędu dysków i komputer nie ma na to żadnego wpływu.

Komunikaty o błędach

Jeżeli w komendzie dla dyskietki wystąpił błąd, dioda w stacji zaczyna migać, komputer początkowo nie wyprowadza na ekran żadnego komunikatu o błędzie. Kod błędu należy pobrać ponownie przez kanał błędów szyny IEC (szesnastkowo 15) ze sterownika dysków:

10 OPEN 1,8,15
20 INPUT #1, A$, B$, C$, D$
30 PRINT A$, B$, C$, D$
40 CLOSE 1
RUN

Ten ciąg instrukcji nie powinien być wprowadzony bezpośrednio (tzn. bez numerów wierszy), lecz tylko w postaci programu, ponieważ INPUT # nie dopuszcza się jako instrukcji bezpośredniej. Wprowadzone łańcuchy mają następujące znaczenie:

  • A$ - numeryczny kod błędu, 0 = brak błędu,

  • B$ - komunikat o błędzie w języku angielskim,

  • C$ - numer ścieżki, na której wystąpił błąd,

  • D$ - sektor, w którym wystapił błąd.

    W języku Basic 4.X testowanie komunikatu o błędzie jest prostsze, za pomocą PRINT DS$. Po sprawdzeniu zostaje ponownie wyzerowana LED w napędzie.
    Kody błędów (w omawiamym przykładzie A$) można ogólnie podzielić na następujące grupy:

  • 0 nie wystąpił błąd

  • 20 - 24, 27, 50 błąd podczas odczytu

  • 25 - 29, 51, 52 błąd podczas zapisu

  • 30 - 39 niedozwolona komenda

  • 60 - 67 błąd w OPEN

  • 70 - 74 błąd systemowy

    Fakt, że wykonywany program w języku Basic nie zostanie przerwany po wystąpieniu jednego błędu na dyskietce, ale może on być zawsze uchwycony przez sprawdzenie kanału błędów dyskietki, jest pewną rekompensatą braku instrukcji ON ERROR GOTO w Commodore-Basic.

    Komendy sterujące

    Podane niżej instrukcje można przesyłać bezpośrednio do napędu przy pomocy rozkazu PRINT #. W języku Basic 4.X są one zwykle zbędne, ponieważ czyni to automatycznie interpreter języka Basic przy pomocy takich rozkazów, jak HEADER, COPY itp.

    #
    Przyporządkowuje do określonego adresu wtórnego odpowiednią pamięć buforową sterownika napędu dyskowego.

    BLOCK-ALLOCATE (B-A)
    Aktualizuje listę zajętości sektora (BAM) i stwierdza, czy blok jest zajęty. Jeśli tak, to zostanie określony następny wolny sektor i wyprowadzony komunikat błędu NO BLOCK.

    BLOCK-READ (B-R)
    Komenda ta umożliwia odczyt określonego sektora (blok o pojemności 256 bajtów) z dyskietki do pamięci buforowej sterownika napędu dyskietek.

    BLOCK-WRITE (B-W)
    Zapis sektora na dyskietce z obszaru bufora sterownika.

    BLOCK-EXECUTE (B-E)
    Na początku czyta, tak B-R, sektor dyskietki, dane jednak interpretuje jako program maszynowy i wykonuje skok do adresu początkowego. Program musi być zakończony rozkazem RTS (szesn. 60), ponieważ sterownik powinien ponownie przetwarzać komendy.

    BUFFER-POINTER (B-P)
    Wskaźnik bufora napędu zostaje ustawiony na określoną pozycję znaków.

    COPY (C)
    Kopiowanie i/lub "doczepianie" do czterech plików źródłowych.

    DUPLICATE (D)
    Duplikuje całą dyskietkę.

    INITIALIZE (I)
    Ładuje BAM dyskietki do RAMu; podczas włączania lub wkładania innego dysku do napędu. W Basic 4.X rozkaz ten jest zbędny.

    MEMORY-EXECUTE (M-E)
    Uruchamia program maszynowy w pamięci sterownika dysków.

    MEMORY-READ (M-R)
    Odczyt z pamięci sterownika napędu dyskowego.

    MEMORY-WRITE (M-W)
    Zapis danych do pamięci sterowniak napędu dyskowego.

    NEW (N)
    Formatuje dyskietkę.

    RENAME (R)
    Zmiana nazwy pliku na dyskietce.

    SCRATCH (S)
    Kasuje jeden lub więcej plików na dyskietce.

    USER (U)
    Wywołuje 10 funkcji specjalnych w pamięci napędu.

     U1 B-R   U:  E18E (Reset)
     U2 B-W   U6  D008
     U3 1300  U7  D00B
     U4 1303  U8  D00E
     U5 1306  U9  D0D5
    

    VALIDATE (V)
    Wszystkie pliki nieprawidłowo zamknięte zostają wykasowane, a zajęte przez nie ścieżki w BAM są ponowie dostępne.

     - - - * * * - - -
    

    P.S. (*) Słowa o niewielkiej prędkości dotyczą jedynie gołej konfiguracji. W rzeczy samej każdy posiadacz C64 używa kartridża, który usprawnia pracę ze stacją dysków. Final ll/lll przyspiesza transmisję ok. 12* (co daje ciut więcej, niż atarowskie Toms Turbo), zaś Action Replay przyspiesza transmisję (jeśli dobrze pamiętam) ok. 25*! Są też programy (np. kopiery), które wyciągają jeszcze więcej!

    eks-komodziarz: Tkacz/Trs

  •  

    madteam.atari8.info © MadTeam, hosted: www.atari8.info