Wiersz poleceń
From Atariki
Wersja z dnia 09:19, 30 lip 2015 KMK (Dyskusja | wkład) (-> do dyskusji) ← Previous diff |
Wersja z dnia 09:23, 30 lip 2015 KMK (Dyskusja | wkład) Next diff → |
||
Linia 1: | Linia 1: | ||
- | Część [[DOS]]-ów dla Atari obsługiwana jest za pośrednictwem tzw. [https://pl.wikipedia.org/wiki/Wiersz_polece%C5%84 wiersza poleceń] (ang. ''command line''). Takimi DOS-ami są np. [[OS/A Plus|OS/A+]], [[DOS XL]], [[SpartaDOS]], [[TopDOS]]. System (na ogół) oferuje przy tym funkcję pozwalającą programowi na w miarę bezbolesny odczyt parametrów podanych przez użytkownika. | + | Część [[DOS]]-ów dla Atari obsługiwana jest za pośrednictwem tzw. [https://pl.wikipedia.org/wiki/Wiersz_polece%C5%84 wiersza poleceń] (ang. ''command line''). Takimi DOS-ami są np. [[OS/A Plus|OS/A+]], [[DOS XL]], [[SpartaDOS]], [[TopDOS]], [[CP|DOS 2.5CP]]. System (na ogół) oferuje przy tym funkcję pozwalającą programowi na w miarę bezbolesny odczyt parametrów podanych przez użytkownika. |
Standard w tej dziedzinie opracowała firma [[OSS]]. Zgodny z nim interfejs wiersza poleceń zaimplementowano w DOS XL oraz SpartaDOS. | Standard w tej dziedzinie opracowała firma [[OSS]]. Zgodny z nim interfejs wiersza poleceń zaimplementowano w DOS XL oraz SpartaDOS. |
Wersja z dnia 09:23, 30 lip 2015
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, TopDOS, DOS 2.5CP. System (na ogół) oferuje przy tym funkcję pozwalającą programowi na w miarę bezbolesny odczyt parametrów podanych przez użytkownika.
Standard w tej dziedzinie opracowała firma OSS. Zgodny z nim interfejs wiersza poleceń zaimplementowano w DOS XL oraz 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):
dosvec = $0a 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
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. Jego zawartość zawsze zaczyna się od specyfikacji urządzenia (np. "D:") i zawsze zakończona jest znakiem EOL (ASCII 155). A zatem:
zcr jsr $0000 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 zcr _no_more_parameters ...