Wiersz poleceń

From Atariki

Revision as of 07:28, 30 lip 2015; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

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. System (na ogół) oferuje przy tym funkcję pozwalającą programowi na w miarę bezbolesny odczyt parametrów podanych przez użytkownika.

Część DOSów nie mająca w standardzie wiersza poleceń doczekała się nakładki funkcyjnej lub zamiennika warstwy funkcyjnej (w większości przypadków zapisywanej jako DUP.SYS) oferującej standard wiersza poleceń, który zazwyczaj ma zaimplementowane wszystkie (lub większość) polecenia danego dosu. Przykładem jest tu DOS 2,5 i jego Command Procesor wypuszczony przez L.K. Avalon.

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