Wiersz poleceń
From Atariki
| Wersja z dnia 21:14, 20 cze 2016 KMK (Dyskusja | wkład) (→Wywołanie funkcji odczytu wiersza poleceń - zgodność z DOS XL) ← Previous diff |
Wersja z dnia 21:17, 20 cze 2016 KMK (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. | + | 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). |
| - | 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. | + | 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: |
| - | + | ||
| - | Zawartość COMFNAM zawsze zaczyna się od specyfikacji urządzenia (np. "D:") i zawsze zakończona jest znakiem EOL (ASCII 155). A zatem: | + | |
| <pre> | <pre> | ||
Wersja z dnia 21:17, 20 cze 2016
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, 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.
Wykrycie dostępności wiersza poleceń
Nie wszystkie DOS-y zawierają funkcje odczytu wiersza poleceń, jego obecność 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).
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.
