Wiersz poleceń

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
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
     ...
Personal tools