Wiersz poleceń
From Atariki
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 ...