Wiersz poleceń

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 11:37, 5 cze 2022
Mono (Dyskusja | wkład)
(Wywołanie funkcji odczytu wiersza poleceń - naoczny przyklad)
← Previous diff
Wersja z dnia 11:37, 5 cze 2022
Mono (Dyskusja | wkład)
(Wywołanie funkcji odczytu wiersza poleceń)
Next diff →
Linia 53: Linia 53:
</pre> </pre>
-W SpartaDOS po wykonaniu tego JSR-a ustawiony bit Z rejestru znaczników CPU (czyli "wynik zerowy") oznacza, że w wierszu poleceń nie ma więcej parametrów. Przeciwny stan tego znacznika znaczy, że parametr został pobrany do bufora COMFNAM znajdującego się pod adresem (DOSVEC)+33. Zawartość COMFNAM zawsze zaczyna się od specyfikacji urządzenia (np. "D:") i zawsze zakończona jest znakiem EOL (ASCII 155), co oznacza że przekazując do programu parametr "DOWOL.TXT" w COMFNAM otrzymamy ciąg "D1:DOWOL.TXT<EOL>".+W SpartaDOS po wykonaniu tego JSR-a ustawiony bit Z rejestru znaczników CPU (czyli "wynik zerowy") oznacza, że w wierszu poleceń nie ma więcej parametrów. Przeciwny stan tego znacznika znaczy, że parametr został pobrany do bufora COMFNAM znajdującego się pod adresem (DOSVEC)+33. Zawartość COMFNAM zawsze zaczyna się od specyfikacji urządzenia (np. "D:") i zawsze zakończona jest znakiem EOL (ASCII 155), co oznacza że przekazując do programu parametr "DOWOL.TXT" w COMFNAM otrzymamy ciąg "D1:DOWOL.TXT"+EOL.
W DOS XL procedura pobierania parametru nie sprawdza automatycznie, czy wiersz polecenia już się skończył: program musi to sprawdzić "na piechotę" przez porównanie stanu wskaźnika bufora wejściowego (BUFOFF) sprzed wywołania procedury ze stanem po jej wywołaniu. Ta metoda zadziała też pod SpartaDOS. A zatem: W DOS XL procedura pobierania parametru nie sprawdza automatycznie, czy wiersz polecenia już się skończył: program musi to sprawdzić "na piechotę" przez porównanie stanu wskaźnika bufora wejściowego (BUFOFF) sprzed wywołania procedury ze stanem po jej wywołaniu. Ta metoda zadziała też pod SpartaDOS. A zatem:

Wersja z dnia 11:37, 5 cze 2022

Część DOS-ów dla Atari obsługiwana jest za pośrednictwem tzw. wiersza poleceń (ang. command line). Takimi DOS-ami są np. OS/A+, DOS XL, SpartaDOS, BW-DOS, DOS 2.5CP, DOS II+/D, TopDOS. System (na ogół) oferuje przy tym funkcję pozwalającą programowi na w miarę bezbolesny odczyt parametrów podanych przez użytkownika.

Spis treści

Standard OSS

Najpopularniejszy standard w tej dziedzinie jest dziełem firmy OSS. Zgodny z nim interfejs wiersza poleceń zaimplementowano w OS/A+ (czyli DOS XL), a ICD użyło go w SpartaDOS. Obsługuje go też BW-DOS - jako klon SpartaDOS.

Wykrycie dostępności wiersza poleceń

Nie wszystkie DOS-y zawierają funkcje odczytu wiersza poleceń, jego dostępność trzeba zatem wykryć. Standard DOS XL przewiduje, że funkcja odczytu wiersza poleceń jest dostępna, jeśli pod adresem wskazanym przez wektor DOSVEC ($0a), dodać 3, znajduje się rozkaz skoku JMP procesora 6502. Rozkaz ten (w trybie absolutnym) ma kod operacyjny 76 ($4C):

boot?  = $09
dosvec = $0a

     lda boot?           ; sprawdzamy, czy DOS w ogóle jest w pamięci
     lsr
     bcc _no_command_line

     lda dosvec+1        ; a jeśli tak, czy DOSVEC nie wskazuje ROM-u
     cmp #$c0
     bcs _no_command_line

     ldy #$03
     lda (dosvec),y
     cmp #$4c
     bne _no_command_line
     ...                 ; tu dalsze czynności związane z wierszem poleceń

_no_command_line
     ...                 ; przeskok tutaj oznacza brak dostępności wiersza poleceń

Inicjowanie funkcji odczytu wiersza poleceń

Jeśli wykrycie się powiodło, ten adres - tzn. (DOSVEC)+3 - jest adresem wywołania procedury pobrania parametrów z wiersza poleceń. Ponieważ w 6502 brakuje rozkazu wywołania procedury w trybie pośrednim indeksowym, najlepiej jest ten adres przepisać do własnego programu:

     lda dosvec
     clc
     adc #$03
     sta zcr+1
     lda dosvec+1
     adc #$00
     sta zcr+2

Wywołanie funkcji odczytu wiersza poleceń

Kodem jak powyżej inicjujemy następujący rozkaz:

zcr  jsr $0000

W SpartaDOS po wykonaniu tego JSR-a ustawiony bit Z rejestru znaczników CPU (czyli "wynik zerowy") oznacza, że w wierszu poleceń nie ma więcej parametrów. Przeciwny stan tego znacznika znaczy, że parametr został pobrany do bufora COMFNAM znajdującego się pod adresem (DOSVEC)+33. Zawartość COMFNAM zawsze zaczyna się od specyfikacji urządzenia (np. "D:") i zawsze zakończona jest znakiem EOL (ASCII 155), co oznacza że przekazując do programu parametr "DOWOL.TXT" w COMFNAM otrzymamy ciąg "D1:DOWOL.TXT"+EOL.

W DOS XL procedura pobierania parametru nie sprawdza automatycznie, czy wiersz polecenia już się skończył: program musi to sprawdzić "na piechotę" przez porównanie stanu wskaźnika bufora wejściowego (BUFOFF) sprzed wywołania procedury ze stanem po jej wywołaniu. Ta metoda zadziała też pod SpartaDOS. A zatem:

next ldy #$0a           ; *
     lda (dosvec),y     ; *
     pha                ; *
zcr  jsr $0000
     ldy #$0a           ; *
     pla                ; *
     cmp (dosvec),y     ; *
     beq _no_more_parameters

     ldy #33
_cp  lda (dosvec),y
     sta parbuf-33,y
     iny
     cmp #$9b
     bne _cp
     ...                 ; tu robimy z parametrem pobranym do bufora "parbuf" to, co potrzebujemy
     jmp next

_no_more_parameters
     ...

Wiersze programu oznaczone w komentarzu gwiazdką (*) są zbędne pod SpartaDOS, ale nieodzowne dla zgodności z DOS XL.

SpartaDOS X

SpartaDOS X, jako klon SpartaDOS, oferuje zgodny z powyżej opisanym interfejs programowy, dzięki czemu istnieje zgodność wstecz, a programy napisane dla DOS XL i SpartaDOS są w stanie interpretować wiersz poleceń również wtedy, kiedy zostały uruchomione pod tym DOS-em.

Programy napisane specjalnie dla SpartaDOS X mają do dyspozycji oddzielny, bardziej wyrafinowany interfejs służący do interpretacji parametrów przekazanych w wierszu polecenia. Składa się nań kilkanaście procedur dostępnych za pośrednictwem symboli i zawartych w bibliotece SpartaDOS X, które nie tylko pobierają z wiersza poleceń kolejne parametry, ale też są w stanie je automatycznie interpretować i przetwarzać (np. liczbę przekazaną w postaci ciągu ASCII na postać 32-bitowej reprezentacji całkowitej).

Opis tego interfejsu znajduje się w Przewodniku programisty SpartaDOS X, dostępnym tutaj (rozdział 5, "Obróbka wiersza poleceń").

Personal tools