Spis funkcji przerwania!h

Spis funkcji przerwania 21h
       Poniższy tekst zawiera spis wszystkich, lub przynajmniej większości
funkcji przerwania 21h - każda funkcja oprócz numeru jest również opisana 1-
liniową notką. Funkcje zaznaczone znakiem "+" zostały ponadto szczegółowo
opisane - zob. poniżej spisu. Funkcje sygnowane "-" zostały świadomie pominięte
w dokładniejszym opisie, najczęściej dlatego,  że istnieje alternatywna funkcja
przerwania 21h, która jest częściej używana czy zwyczajnie praktyczniejsza w
użyciu a pełniąca to samo, lub zbliżone zadanie. Reszta funkcji  nie
wyszczególniona w żaden sposób jest - w mojej subjektywnej ocenie - mniej ważna,
dlatego przetłumaczenie jej pozostawiłem na później - lista będzie więc stale
rozszerzana o nowe opisy. Zamierzam także dodać opisy innych przerwań - na pewno
~INT 10~ i  
~INT 16~.
  
Zasadniczo w poniższym spisie obowiązuje numeracja szesnastkowa, chociaż nie
koniecznie jest to przy każdej liczbie zaznaczane.
:int 21:DOS usługi:funkcje DOS
^INT 21 - Dyspozytor funkcji dos
^Dla dalszych informacji, zobacz poniższe nagłówki:
-~INT 21,0~  Zakończenie programu
+~INT 21,1~  Wczytanie z klawiatury z echem
+~INT 21,2~  Wyświetl znak
~INT 21,3~  Czekaj na dane z urządzenia pomocniczego
~INT 21,4~  Wypisz znak na urządzeniu pomocniczym
+~INT 21,5~  Wypisz znak na drukarce
~INT 21,6~  Czytaj lub pisz na konsolę
+~INT 21,7~  Wczytaj znak z klawiatury bez echa
~INT 21,8~  Wczytaj dane z konsoli bez echa
+~INT 21,9~  Wypisz łańcuch
~INT 21,A~  Buforowane wczytanie z klawiatury
~INT 21,B~ Sprawdź status STDIN
+~INT 21,C~  Czyść bufor klawiatury, wywołaj funkcję wczytania
~INT 21,D~  Reset dysku
+~INT 21,E~  Wybierz dysk, info o liczbie dysków
-~INT 21,F~  Otwórz plik przy użyciu ~FCB~
-~INT 21,10~  Zamknij plik przy użyciu FCB
-~INT 21,11~  Szukaj pierwszego pliku przy użyciu FCB
-~INT 21,12~  Szukaj następnego pliku przy użyciu FCB
-~INT 21,13~  Kasuj plik przy użyciu FCB
~INT 21,14~  Czytanie sekwencyjne przy użyciu FCB
~INT 21,15~  Zapis sekwencyjny przy użyciu FCB
-~INT 21,16~  Utwórz plik przy użyciu FCB
-~INT 21,17~  Zmień nazwę pliku przy użyciu FCB
~INT 21,18~  DOS imitacja funkcji (CP/M) (nie używana/wymieniana)
+~INT 21,19~  Pobierz symbol aktualnego napędu
~INT 21,1A~  Ustaw transfer adres dysku
~INT 21,1B~  Pobierz informacje tablicy alokacji
~INT 21,1C~  Pobierz info tablicy alokacji dla specyficznego urządzenia
~INT 21,1D~  DOS imitacja funkcji (CP/M) (nie używana/wymieniana)
~INT 21,1E~  DOS imitacja funkcji (CP/M) (nie używana/wymieniana)
~INT 21,1F~  Pob. wskaźnik do tablicy parametrów aktualnego napędu
(nieudok)  ~INT 21,20~  DOS imitacja funkcji (CP/M) (nie używana/wymieniana)
~INT 21,21~  Swobodne czytanie przy użyciu ~FCB~
~INT 21,22~  Swobodny zapis przy użyciu FCB
~INT 21,23~  Pobierz długość pliku przy użyciu FCB
~INT 21,24~  Ustaw relatywne pole rekordu dla FCB
+~INT 21,25~  Ustaw wektor przerwania
~INT 21,26~  Utwórz nowy segment programu
~INT 21,27~   Swobodne czytanie bloku przy użyciu FCB
~INT 21,28~  Swobodny zapis bloku przy użyciu FCB
~INT 21,29~  Analiza nazwy pliku  dla FCB
+~INT 21,2A~  Pobierz datę
+~INT 21,2B~  Ustaw datę
+~INT 21,2C~  Pobierz czas
+~INT 21,2D~  Ustaw czas
+~INT 21,2E~  Ustaw/resetuj przełącznik "verify"
+~INT 21,2F~  Pobierz transfer adres dysku
+~INT 21,30~  Pobierz numer wersji DOS
~INT 21,31~  Zakończ program i pozostaw rezydenta
~INT 21,32~  Pobierz wskaźnik do tablicy parametrów napędu (nieudok.)
+~INT 21,33~  Pobierz/ustaw stan sprawdzania~Ctrl-Break~ i boot napęd
~INT 21,34~  Pobierz adres do flagi krytycznejDOS (nieudokumentowane)
+~INT 21,35~  Pobierz wektor przerwania
+~INT 21,36~  Pobierz ilość wolnego miejsca na dysku
~INT 21,37~  Pobierz/ustaw znak przełącznika (nieudokumentowane)
~INT 21,38~  Pobierz/ustaw informacje zależne od kraju
+~INT 21,39~  Utwórz podkatalog (mkdir)
+~INT 21,3A~  Usuń podkatalog (rmdir)
+~INT 21,3B~  Zmień aktualny podkatalog (chdir)
+~INT 21,3C~  Utwórz plik przy użyciu uchwytu
+~INT 21,3D~  Otwórz plik przy użyciu uchwytu
+~INT 21,3E~  Zamknij plik przy użyciu uchwytu
+~INT 21,3F~  Czytaj plik lub urządzenie przy użyciu uchwytu
+~INT 21,40~  Zapis do pliku lub urządzenia przy użyciu uchwytu
+~INT 21,41~  Kasuj plik
+~INT 21,42~  Przesuń wskaźnik pliku przy użyciu uchwytu
+~INT 21,43~  Zmień tryb pliku
~INT 21,44~  Kontrola WE/WY urządzeń (~IOCTL~)
~INT 21,45~  Podwójny uchwyt pliku
~INT 21,46~  Wymuszenie podwójnego uchwytu pliku
+~INT 21,47~  Pobierz aktualny katalog
+~INT 21,48~  Alokuj bloki pamięci
+~INT 21,49~  Zwolnij zaalokowane bloki pamięci
+~INT 21,4A~  Modyfikacja zaalokowanych bloków pamięci
+~INT 21,4B~  EXEC ładuj i uruchom program (funkc 1 nieudokumentowane)
+~INT 21,4C~  Zakończ program i zwróć kod powrotu
~INT 21,4D~  Pobierz kod powrotu podprocesu
+~INT 21,4E~  Znajdź pierwszy pasujący plik
+~INT 21,4F~  Znajdź następny pasujący plik
~INT 21,50~  Ustaw identyfikator aktualnego procesu (nieudokumentowane)
~INT 21,51~  Pobierz identyfikator aktualnego procesu (nieudok.)
~INT 21,52~  Pobierz wskaźnik do "INVARS" DOS (nieudokumentowane)
~INT 21,53~  Generuj tablicę parametrów napędu (nieudokumentowane)
~INT 21,54~  Pobierz ustawienie verify
~INT 21,55~  Utwórz ~PSP~ (nieudokumentowane)
+~INT 21,56~  Zmień nazwę pliku
+~INT 21,57~  Pobierz/ustaw datę i czas pliku przy użyciu uchwytu
~INT 21,58~  Pobierz/ustaw strategię alokowania pamięci (3.x+, nieudok.)
~INT 21,59~  Pobierz rozszerzoną informację o błędzie (3.x+)
~INT 21,5A~  Utwórz tymczasowy plik (3.x+)
~INT 21,5B~  Utwórz nowy plik (3.x+)
~INT 21,5C~  Zamknij/otwórz dostęp do pliku (3.x+)  ~INT 21,5D~  Informacja o błędzie krytycznym (nieudokumentowane 3.x+)
~INT 21,5E~  Usługi sieciowe (3.1+)
~INT 21,5F~  Przeadresowanie sieci (3.1+)
~INT 21,60~  Pobierz pełną nazwę pliku (nieudokumentowane 3.x+)
~INT 21,62~  Pobierz adres PSP (3.x+)
~INT 21,63~  Pobierz prowadzący bajt tablicy systemu (tylko MSDOS 2.25)
~INT 21,64~  Ustaw przewidujący sterownik urządzenia  (nieudok. 3.3+)
~INT 21,65~  Pobierz rozszerzoną ifnormację kraju (3.3+)
~INT 21,66~  Pobierz/ustaw globalną stronę kodową (3.3+)
~INT 21,67~  Ustaw liczbę uchwytów (3.3+)
~INT 21,68~  Opróżnij bufor (3.3+)
~INT 21,69~  Pobierz/ustaw numer seryjny dysku (nieudok. DOS 4.0+)
~INT 21,6A~  DOS zarezerwowane (DOS 4.0+)
~INT 21,6B~  DOS zarezerwowane
~INT 21,6C~  Rozszerzone otwórz/utwórz (4.x+)
~INT 21,F8~  Ustaw program obsługi OEM INT 21 (funkcje F9-FF) (nieudok.)
- Funkcje int 21 są wywoływane z numerem funkcji w  AH
- rejestr AX może być zmieniony, jego zawartość nie jest gwarantowana
- jeśli pojawi się błąd, CF jest ustawiona na 1 i AX zawiera
  kod błędu; ~INT 21,59~ może być użyte do określenia przyczyny.
- większość funkcji INT 21 nie przywraca flag do stanu
         przed przerwaniem aby umożliwić zwracanie informacji przez rejestr
         flag.
:int 21,1
^INT 21,1 - Wczytanie z klawiatury z echem
AH = 01
przerwanie zwraca:
       AL = Znak z standardowego urządzenia wejścia
       - czeka na dane z STDIN i wyświetla na STDOUT
       - zwraca 0 dla rozszerzonych klawiszy, później funkcja musi być
         wywołana ponownie by odczytać skankod
         - jeśli wciśnięto ~Ctrl-Break~, uruchamiane jest ~INT 23~
:int 21,2
^INT 21,2 - Wyświetl znak
AH = 02
DL = znak do wyświetlenia
przerwanie nie zwraca nic
- wyświetla znak na STDOUT
- backspace jest traktowany jak niedestruktywne przesunięcie kursora
         w lewo
- jeśli wciśnięto ~Ctrl-Break~, uruchamiane jest ~INT 23~
:int 21,5
^INT 21,5 - Drukuj znak na drukarce  AH = 05
DL = znak do wypisania
przerwanie nie zwraca nic
- wysyła znak w DL do  STDPRN
- przed drukowaniem czeka aż STDPRN jest gotowe
:int 21,9
^INT 21,9 - Wypisz łańcuch
AH = 09
DS:DX = wskaźnik do łańcucha zakończonego znakiem "$"
przerwanie nie zwraca nic
- wyświetla łańcuch znaków na STDOUT
- backspace jest traktowane jako znak niedestruktywny
- jeśli wciśnięto ~Ctrl-Break~, uruchamiane jest ~INT 23~
:int 21,c
^INT 21,C - Czyść bufor klawiatury, uruchom funkcję wczytania
AH = 0Ch
AL = 01, 06, 07, 08 lub 0A   (funkcje wczytania INT 21)
przerwanie zwraca:
zob. wartości powrotu z INT 21,AL gdzie AL jest 1, 6, 7, 8 lub A
- główną funkcją jest wyczyszczenie bufora klawiatury i wywołanie
  INT 21 z określoną (w AL) funkcją
- zob. ~INT 21,1~,  ~INT 21,6~,  ~INT 21,7~,  ~INT 21,8~ i ~INT 21,A~
:int 21,e
^INT 21,E - Wybierz dysk
AH = 0Eh
DL = numer dysku (0-25, A: - Z:)
przerwanie zwraca:
AL = łączna liczba napędów logicznych włącznie z twardymi dyskami (1-26)
- dla DOS 3.x+, ta funkcja przerwania zwraca liczbę napędów logicznych
  lub wartość LASTDRIVE z CONFIG.SYS
:int 21,19
^INT 21,19 - Pobierz aktualny napęd
AH = 19h  przerwanie zwraca:
AL = aktualny napęd (0=A,1=B,etc)
- określa aktualny napęd
:int 21,1a
^INT 21,1A - Ustaw transfer adres dysku (DTA)
AH = 1Ah
DS:DX = wskaźnik do nowego ~DTA~
przerwanie nie zwraca nic
- specifies the disk transfer address to DOS
       - określa transfer adres dysku dla DOS
       - DTA nie może wykraczać poza 64Kbajtowe zakończenie segmentu
       - przesunięcie 80h w segmencie ~PSP~ jest domyślnym ustawieniem DOS
         po załadowaniu programu
         - używanie DTA ustawionego przez DOS doprowadzi do utraty
           linii komend, która również zajmuje 128 bajtów w PSP zaczynając
             od przesunięcia 80h
- zob. ~INT 21,2F~
:int 21,25
^INT 21,25 - Ustaw wektor przerwania
AH = 25h
AL = numer przerwania
DS:DX = wskaźnik do procedury obsługi przerwania
przerwanie nie zwraca nic
- udostępnia bezpieczną metodę zmiany wektora przerwania
- zob. ~INT 21,35~
:int 21,2a
^INT 21,2A - Pobierz datę
AH = 2Ah
przerwanie zwraca:
AL = dzień tygodnia (0=Niedziela)
CX = rok (1980-2099)
DH = miesiąc (1-12)
DL = dzień (1-31)
- odczytuje datę systemu z zegara DOS
- aktualizuje obszar biosu pod adresem 0040:0070
:int 21,2b
^INT 21,2B - Ustaw datę AH = 2Bh
CX = rok (1980-2099)
DH = miesiąc (1-12)
DL = dzień (1-31)
przerwanie zwraca:
AL = 00 jeśli zmiana daty przebiegła pomyślnie
   = FF jeśli niewłaściwa data
- ustawia zegar DOS
- wersje DOS 3.3+ aktualizują rónież ~CMOS~ datę jeśli dostępny
:int 21,2c
^INT 21,2C - Pobierz czas
AH = 2Ch
przerwanie zwraca:
CH = godzina (0-23)
CL = minuta (0-59)
DH = sekunda (0-59)
DL = setna sekundy (0-99)
- odczytuje czas z zegara DOS
:int 21,2d
^INT 21,2D - Ustaw czas
AH = 2Dh
CH = godzina (0-23)
CL = minuta (0-59)
DH = sekunda (0-59)
DL = setna sekundy (0-99)
przerwanie zwraca:
AL = 00 jeśli zmiana czasu przebiegła pomyślnie
   = FF jeśli błędny czas
- zmienia zegar DOS
- wersje DOS 3.3+ również aktualizują CMOS jeśli dostępny
:int 21,2e
^INT 21,2E - Ustaw/resetuj przełącznik verify
AH = 2Eh
AL = 00 wyłącza
   = 01 włącza
DH = 00 dla wersji DOS przed 3.0
przerwanie nie zwraca nic  - po włączeniu verify operacje dyskowe są bezpieczniejsze, lecz
  używają więcej czasu.
- zob. ~INT 21,54~
:int 21,2f
^INT 21,2F - Pobierz transfer adres dysku (DTA)
AH = 2Fh
przerwanie zwraca:
ES:BX = wskaźnik do bieżącego ~DTA~
       - zwraca adres DTA
       - domyślny DTA jest 128 bajtowym obszarem na przesunięciu 80h w PSP
       - zob. ~INT 21,1A~
:int 21,30
^INT 21,30 - Pobierz numer wersji DOS
AH = 30h
przerwanie zwraca:
AL = główny numer wersji (2-5)
AH = mniejszy numer wersji (w setnych częściach)
BH = FF  identyfikuje MS-DOS, tylko jeśli OEM sprzedawca wybrał identyfik.
   = 00  identyfikuje PC-DOS
BL:CX = 24 bitowy numer seryjny OEM jeśli BH = FF
- dla przykładu wersja DOS 2.1 zwraca AL=2 i AH=10
- wersje DOS przed  DOS 2.0 zwracają zero in AH i AL
- DOS 4.0 i 4.1 zwykle zwracają 4.00
- numer seryjny OEM jest rzadkością, chociaż niektóre starsze wersje
  OEM DOS posiadały tę cechę.
- OS/2 compatibility box zwraca 10.10 dla OS/2 1.1, 10.20
  dla OS/2 1.2, etc...
- gdy testujesz wersję, dokładny test może często spowodować  
  nie działanie twojego kodu w wersjach następnych. Często jest lepiej
  sprawdzać czy wersja jest >= minimalnej jeśli jest to możliwe
- zob. ~DOS Versions~
:int 21,33
^INT 21,33 - Pobierz/ustaw wartości systemu (Ctl-Break/napęd Boot)
AH = 33h
AL = 00 by pobrać flagę sprawdzania Ctrl-Break
   = 01 by ustawić flagę sprawdzania  Ctrl-Break
   = 02 by włączyć rozszerzone sprawdzanie Ctrl-Break
   = 05 pobierz napęd boot (DOS 4.x)
DL = 00 by wyłączyć sprawdzanie  Ctrl-Break
   = 01 by włączyć sprawdzanie Ctrl-Break
   = napęd boot dla podfunkcji 5;  (1=A:, 2=B:, ...)  przerwanie zwraca:
DL = 00 sprawdzanie Ctrl-Break wyłączone (AL=0 lub AL=2)
   = 01 sprawdzanie Ctrl-Break włączone (AL=0 lub AL=2)
   = numer napędu boot (1-26, A: - Z:) (funkcja 05)
- pobiera ustawienie DOS Ctrl-Break lub rozszerzone Ctrl-Break,
  które określają czy DOS będzie sprawdzał naciśnięcie Ctrl-Break
  podczas wywołań INT 21
:int 21,35
^INT 21,35 - Pobierz wektor przerwania
AH = 35h
AL = numer przerwania
przerwanie zwraca:
ES:BX = wskaźnik do procedury obsługi przerwania
- standardowa metoda pobierania wektora przerwania
-  zob. ~INT 21,25~
:int 21,36
^INT 21,36 - Pobierz ilość wolnego miejsca na dysku
AH = 36h
DL = numer dysku (0=bieżący, 1=A:)
przerwanie zwraca:
AX = liczba sektorów w klastrze
   = FFFF jeśli napęd jest niewłaściwy
BX = liczba dostępnych klasterów
CX = liczba bajtów w sektorze
DX = liczba klasterów na dysku
- używane do określenia wolnej przestrzeni na dysku
-  zob. ~INT 21,1B~   ~INT 21,1C~
:int 21,39
^INT 21,39 - Utwórz podkatalog (mkdir)
AH = 39h
DS:DX = wskaźnik do nazwy ścieżki jako łańcucha zakończonego zerem
przerwanie zwraca:
CF = 0 jeśli operacja się powiodła
   = 1 jeśli błąd
AX = kod błędu  (zob. ~kody błędów DOS~)  - tworzy podkatalog
- zwraca błąd jeśli katalog już istnieje, element ściężki nie
  został znaleziony, pełny katalog lub dysk zabezpieczony przed zapisem
:int 21,3a
^INT 21,3A - Usuń podkatalog (rmdir)
AH = 3Ah
DS:DX = wskaźnik do nazwy ścieżki jako łańcucha zakończonego przez 00h
przerwanie zwraca:
CF = 0 jeśli sukces
   = 1 jeśli błąd
AX = kod błędu  (zob. ~kody błędów DOS~)
- allows deletion of a subdirectory as long as it exists, is empty
- pozwala skasować katalog jeśli istnieje, jest pusty i nie aktualny
:int 21,3b
^INT 21,3B - Zmień katalog (chdir)
AH = 3Bh
DS:DX = wskaźnik do ścieżki jako łańcucha zakończonego 00h
przerwanie zwraca:
CF = 0 jeśli sukces
   = 1 jeśli błąd
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
- zmienia bieżący katalog na katalog określony przez wskaźnik DS:DX
:int 21,3c
^INT 21,3C - Tworzenie pliku przy użyciu uchwytu
AH = 3Ch
CX = atrybut pliku  (zob. ~FILE ATTRIBUTES~)
DS:DX = wskaźnik do ścieżki jako łańcucha zakończonego 00h
przerwanie zwraca:
CF = 0 jeśli sukces
   = 1 jeśli błąd
AX = uchwyt pliku jeśli sukces
   = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
- jeśli plik już istnieje, jest obcinany do 0 bajtów przy otwarciu
:int 21,3d
^INT 21,3D - Otwórz plik przy użyciu uchwytu
AH = 3Dh
AL = tryb dostępu
     00  tylko do odczytu
     01  tylko do zapisu
     02  do odczytu i zapisu  DS:DX = wskaźnik do nazwy pliku jako łańcucha zakończonego 00h
przerwanie zwraca:
AX = uchwyt pliku jeśli CF nie ustawiona
   = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
% Tryby dostępu w AL:
ł7ł6ł5ł4ł3ł2ł1ł0ł  AL
 ł ł ł ł ł ANCNCNNNN czytanie/zapis/aktualizacja trybu dostępu
 ł ł ł ł ANNNNNNNNN zarezerwowane, zawsze 0
 ł ANCNCNNNNNNNNNN dostęp dzielony (zob. poniżej) (DOS 3.1+)
 ANNNNNNNNNNNNNNN 1 = prywatny, 0 = dziedziczny (DOS 3.1+)
% Bity dostępu dzielonego (DOS 3.1+):        Bity trybu dostępu:
% 654           210
000  tryb kompatybilności (wyłączny)   000  dostęp do czytania
001  zabroń innym dostęp do czyt/zapis 001  dostęp do zapisu
010  zabroń innym dostęp do zapis      010  dostęp do czytania/zapisu
011  zabroń innym dostęp do czytania
100  pełny dostęp dozwolony wszystkim
- otwiera pliki normalne, ukryte i systemowe
- wskaźnik pliku jest ustawiany na początku
:int 21,3e
^INT 21,3E - Zamknij plik przy użyciu uchwytu
AH = 3Eh
BX = uchwyt pliku do zamknięcia
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
- jeśli plik jest otwarty do aktualizacji, długość, czas i data pliku
  są aktualizowane w katalogu
- uchwyt jest zwalniany
:int 21,3f
^INT 21,3F - Czytaj z pliku lub urządzenia przy użyciu uchwytu
AH = 3Fh
BX = uchwyt pliku
CX = liczba bajtów do przeczytania
DS:DX = wskaźnik do bufora czytania
przerwanie zwraca:
AX = liczba wczytanych bajtów jeśli CF nie ustawiona
   = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
- wczytuje określoną liczbę bajtów z pliku do bufora DS:DX
- jeśli CX jest różne od AX nastąpiło częściowe czytanie z powodu    końca pliku
- jeśli AX = 0, nie wczytano danych i koniec pliku pojawił się
  przed operacją
:int 21,40
^INT 21,40 - Zapis do pliku lub urządzenia przy użyciu uchwytu
AH = 40h
BX = uchwyt pliku
CX = liczba bajtów do zapisu, wartość 0 obcina/rozszerza plik do
     aktualnej pozycji
DS:DX = wskaźnik do bufora zapisu
przerwanie zwraca:
AX = liczba zapisanych bajtów jeśli CF nie ustawiona
   = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
- jeśli przerwanie zwraca AX różne od CX, nastąpił częściowy zapis
- ta funkcja może być użyta do obcięcia pliku do bieżącej pozycji
  poprzez zapis 0 bajtów
:int 21,41
^INT 21,41 - Kasowanie pliku
AH = 41h
DS:DX = wskaźnik do nazwy pliku jako łańcucha zakończonego 00h
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob. kody błędów DOS)
- zaznacza pierwszy bajt nazwy pliku w katalogu przez E5 co oznacza, że
  plik został skasowany. Reszta pliku w katalogu pozostaje bez zmian
  do czasu ponownego użycia. Wskaźniki ~FAT~ są zwracane do DOS
- udokumentowana jako nieakceptująca znaków globalnych w nazwie pliku,
  lecz akceptuje je w kilku wersjach DOS
:int 21,42
^INT 21,42 - Przesuń wskaźnik pliku przy użyciu uchwytu
AH = 42h
AL = sposób przesunięcia:
     00 = względem początku pliku
     01 = względem aktualnej pozycji w pliku
     02 = względem końca pliku
BX = uchwyt pliku
CX = starsze słowo liczby bajtów do przesunięcia
DX = młodsze słowo liczby bajtów do przesunięcia
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
DX:AX = nowa lokacja wskaźnika jeśli CF nie ustawiona
- szuka określonej lokacji w pliku :int 21,43
^INT 21,43 - Pobierz/ustaw atrybuty pliku
AH = 43h
AL = 00 by pobrać atrybut
   = 01 by ustawić atrybut
DS:DX = wskaźnik do ścieżki+nazwy  jako łańcucha zakończonego 00h
CX = atrybut do ustawienia (jeśli AL = 1)
ł5ł4ł3ł2ł1ł0ł  CX  atrybuty pliku
 ł ł ł ł ł ANNNN 1 = tylko odczyt (read only)
 ł ł ł ł ANNNNN 1 = ukryty (hidden)
 ł ł ł ANNNNNN 1 = systemowy (sys)
 ł ANCNNNNNNN nie używany w tym wywołaniu
 ANNNNNNNNNN 1 = archiwum (arc)
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
CX = atrybut jeśli AL było 00
:int 21,47
^INT 21,47 - Pobierz aktualny katalog
AH = 47h
DL = numer dysku (0 = bieżący, 1 = A:)
DS:SI = wskaźnik do 64-bajtowego bufora użytkownika
przerwanie zwraca:
DS:SI = wskaźnik do ścieżki jako łańcucha zakończonego 00h
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
- returns the current directory relative to the root directory
- zwraca bieżący katalog relatywnie do katalogu głównego
- początkowy "\" oraz symbol dysku są pominięte
:int 21,48
^INT 21,48 - Alokuj pamięć
AH = 48h
BX = liczba paragrafów (1 paragraf = 16 bajtów) do zaalokowania
przerwanie zwraca:
AX = segment zaalokowanej pamięci (MCB + 1para)
   = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
BX = długość największego dostępnego bloku wyrażona w paragrafach
     jeśli CF ustawiona, i AX = 08 (za mało pamięci)
CF = 0 jeśli sukces
   = 1 jeśli błąd
- zwraca adres segmentu bloku zaalokowanej pamięci AX:0000
- każda alokacja wymaga 16 bajtowego nadmiaru dla ~MCB~
- jeśli wystąpił błąd braku pamięci, zwraca największy dostępny obszar
- zob.  ~INT 21,49~,  ~INT 21,4A~ :int 21,49
^INT 21,49 - Zwolnij zaalokowaną pamięć
AH = 49h
ES = segment bloku do zwolnienia (~MCB~ + 1para)
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
- zwalnia pamięć zaalokowaną przez ~INT 21,48~
- jeśli pamięć nie była zaalokowana przez INT 21,48, lub przez obecny
program,
  mogą pojawić się nieprzewidywalne błędy
- sprawdza identyfikator MCB, ale nie sprawdza własności procesu
- należy uważać jeśli zwalniamy pamięć innego procesu, upewnić się,  
  że segment nie jest używany przez TSR lub ISR
- ta funkcja jest zawodna w TSRach od chwili gdy są rezydentne, gdyż
  COMMAND.COM i inne programy typu .COM zabierają całą dostępną pamięć  
  po załadowaniu
- zob.  INT 21,4A
:int 21,4a
^INT 21,4A - Modyfikuj zaalokowaną pamięć
AH = 4Ah
BX = nowa długość bloku wyrażona w paragrafach
ES = segment bloku (~MCB~ + 1 para)
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
BX = maksymalna możliwa długość bloku jeśli CF ustawiona i AX = 8
- modyfikuje pamięć zaalokowaną przez ~INT 21,48~
- może być używana przez program do zmniejszenia lub zwiększenia  
  ilości zaalokowanej pamięci
- PC-DOS w wersji 2.1 i DOS 3.x zaalokują blok maksymalnej długości
  jeśli CF jest ustawiona.  BX będzie równe zaalokowanej długości
- zob. też  ~INT 21,49~
:int 21,4b:funkcja exec
^INT 21,4B - EXEC/załaduj i uruchom program
AH = 4Bh
AL = 00  by załadować i uruchomić program
   = 01  (Nieudok.)  utwórz program segment prefix i załaduj
  program, ale nie uruchamiaj. CS:IP i SS:SP programu
  są umieszczane w bloku parametrów. Używane przez debuggery
   = 03  tylko załaduj program
   = 04  wywoływana przez MSC spawn() gdy określono P_NOWAIT
DS:DX = wskaźnik do nazwy pliku jako łańcucha zakończonego 00h
ES:BX = wskaźnik do bloku parametróww
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
ES:BX = gdy AL=1, wskaźnik do bloku parametrów podobnego do: % Przesunięcie Długość        Opis
00      word gdy AL=1, segment środowiska lub zero jeśli przy  
    użyciu środowiska procesu nadrzędnego
      word gdy AL=3, segment punktu ładowania dla nakładki
02      dword gdy AL=1, wskaźnik do linii komend na PSP 80h
      word gdy AL=3, czynnik relokacji dla nakładki EXE
06      dword wskaźnik do bieżącego ~FCB~ na ~PSP~ 5Ch
0A      dword  wskaźnik do bieżącego FCB na PSP 6Ch
0E      dword wartość SS:SP programu
12      dword wartość CS:IP programu
- pozwala uruchomić zewnętrzny program jak również zarządzać  
  nakładkami z wnętrza aplikacji
- wszystkie rejestry z wyjątkiem CS i IP są niszczone
- SS i SP powinny być zachowane w segmencie kodu przed wywołaniem,
  ponieważ pluskwa w DOS 2.x niszczy je
- kod powrotu może być pobrany jeśli podproces zakańczał przez  
  ~INT 21,4C~
- program wywołujący musi zapewnić odpowiednią ilość niezaalokowanej
  pamięci
- podfunkcja 4 zwraca błąd w wersjach DOS 4.x+
- wywołuje ~INT 21,55~
- zob. też  ~INT 21,26~
:int 21,4c
^INT 21,4C - Zakończ program z kodem powrotu
AH = 4Ch
AL = kod powrotu (dla plików batch)
przerwanie nie zwraca nic
- aprobowana metoda zakańczania programu
- przywraca adres zakończenia, ~Ctrl-Break~ i obsługi błędów  
  krytycznych, opróżnia wszystkie bufory, zwalnia pamięć i powraca  
  do DOS przez procedurę obsługi zakończenia programu
- nie zamyka FCB
- funkcja nie dostępna w DOS przed 2.x, więc używaj ~INT 21,0~,
  lub ~INT 20~
- zob. też  ~INT 27~   ~INT 21,31~
:int 21,4e
^INT 21,4E - Znajdź pierwszy pasujący plik
AH = 4Eh
CX = atrybut używany w trakcie poszukiwań (zob. ~atrybuty pliku~)
DS:DX = wskaźnik do ścieżki i nazwy pliku (włączając znaki globalne "*" i
"?")
 jako łańcucha zakończonego 00h
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
~DTA~ = dane zwrócone po wywołaniu funkcji w formacie: % Przesunięcie Długość  Opis
  00  byte    atrybut poszukiwań (nieudokumentowane)
 byte  litera przeszuk. dysku (DOS 3.1-4.x, nieudok.)
01 byte  litera przeszukiwanego dysku (nieudokumentowane)
 11bytes  szukana maska pliku (DOS 3.1-4.x, nieudok.)
02 11bytes  szukana maska pliku (nieudokumentowane)
0C byte  atrybut poszukiwań (DOS 3.1-4.x, nieudok.)
0D word  numer w katalogu (zaczynając od 0, nieudok.)
0F word  numer pierwszego klastra bieżącego katalogu;
   zero - katalog główny  (DOS 3.2+, nieudok.)
 dword  wskaźnik do DTA (DOS 2.x-3.1, nieudokumentowane)
11 word  zarezerwowane
13 word  numer pierwszego klastra bieżącego katalogu;
   0 - katalog główny (DOS 2.x+, nieudokumentowane)
15 byte  atrybut znalezionego pliku
16 word  czas pliku  (zob. ~atrybuty pliku~)
18 word  data pliku  (zob. ~atrybuty pliku~)
1A dword  długość pliku
1E 13bytes  nazwa i rozszerzenie pliku
   w formie nazwapli.roz,00h
- zwraca informacje o pierwszym pliku pasującym do określonej  
  maski i atrybutu
- użyj ~INT 21,4F~ do znalezienia następnych takich plików
- DOS 2.x nie może znaleźć . i .., podczas gdy DOS 3.x może pod
  warunkiem, że reprezentują one katalog główny
- urządzenia zwracają 0 dla dłógości, daty i czasu w DOS 2.x,
  natomiast DOS 3.0 zwraca atrybut 40h i aktualną datę i czas.
- wielokrotne wywołanie tej funkcji z maską urządzenia może spowodować
  nieprzewidywalne wyniki
- normalne pliki są zawsze zawarte po plikach spełniających określony  
  atrybut, za wyjątkiem sytuacji, w której atrybutem tym jest label.
- DOS 2.x zwraca normalne pliki również, gdy podano atrybut label,  
  DOS 3.x nie. Jest to już sprawą programisty sprawdzić, które pliki  
  pasują do atrybutu.
- bit 8 rejestru CX (atrybut pliku) identyfikuje wielodostępne pliki
  Novell Netware
-  zob. INT 21,1A
:int 21,4f
^INT 21,4F - Znajdź następny pasujący plik
AH = 4Fh
DS:DX = niezmienione z poprzedniej funkcji 4E
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
- ~INT 21,4E~ powinna być wywołana by znaleźć pierwszy pasujący plik
  i ta funkcja powinna być użyta do znalezienia następnych plików
- normalne pliki są zawsze zawarte po plikach spełniających określony  
  atrybut, za wyjątkiem sytuacji, w której atrybutem tym jest label.
- DOS 2.x zwraca normalne pliki również, gdy podano atrybut label,  
  DOS 3.x nie. Jest to już sprawą programisty sprawdzić, które pliki  
  pasują do atrybutu.
- zob.  ~INT 21,1A~  ~DTA~  ~atrybuty pliku~ :int 21,56
^INT 21,56 - Zmień nazwę pliku (RENAME)
AH = 56h
DS:DX = wskaźnik do starej ścieżki/nazwy pliku jako łańcucha
 zakończonego 00h
ES:DI = wskaźnik do nowej ścieżki/nazwy pliku jako łańcucha
 zakończonego 00h
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob. ~kody błędów DOS~)
- umożliwia zmianę nazw z pełnymi ścieżkami i zmianę nazw plików
  poprzez katalogi a w DOS 3.x również zmianę nazwy podkatalogów
- nie umożliwia użycia znaków globalnych chyba, że wywołane
  z przerwania ~INT 21,5D~, lecz wówczas zwracany jest kod błędu 12h
- nieprzewidywalne błędy mogą się pojawić jeśli zmieniona zostanie
  nazwa otwartego pliku
- zob. ~Bibliography~ reference to "nieudokumentowany DOS"
:int 21,57
^INT 21,57 - Pobierz/ustaw datę i czas pliku przy użyciu uchwytu
AH = 57h
AL = 00 pobierz datę i czas
   = 01  ustaw datę i czas
   = 02  ??? (DOS 4.0+ nieudokumentowane)
   = 03  ??? (DOS 4.0+ nieudokumentowane)  
   = 04  ??? (DOS 4.0+ nieudokumentowane)
BX = uchwyt pliku
CX = czas do ustawienia (jeśli ustawianie)
DX = data do ustawienia (jeśli ustawianie)
ES:DI = wskaźnik do bufora zawierającego wyniki
przerwanie zwraca:
AX = kod błędu jeśli CF ustawiona  (zob.  ~kody błędów DOS~)
CX = czas pliku (jeśli pobieranie, zob. poniżej)
DX = data pliku (jeśli pobieranie, zob. poniżej)
% Kodowanie czasu:
łFłEłDłCłBłAł9ł8ł7ł6ł5ł4ł3ł2ł1ł0ł  Czas w CX
 ł ł ł ł ł ł ł ł ł ł ł ANCNCNCNCNNNN  2-sek. przyrost (0-29)
 ł ł ł ł ł ANCNCNCNCNCNNNNNNNNNNNNN  minuty 0-59)
 ANCNCNCNCNNNNNNNNNNNNNNNNNNNNNNNN  godziny (0-29)
% Kodowanie daty:
łFłEłDłCłBłAł9ł8ł7ł6ł5ł4ł3ł2ł1ł0ł  Data w DX
 ł ł ł ł ł ł ł ł ł ł ł ANCNCNCNCNNNN  dzień (1-31)
 ł ł ł ł ł ł ł ANCNCNCNNNNNNNNNNNNN  miesiąc (1-12)
 ANCNCNCNCNCNCNNNNNNNNNNNNNNNNNNNN  rok - 1980


Wyszukiwarka

Podobne podstrony:
Asembler DOS Najczęściej stosowane funkcje przerwań
XXXXX, Spis funkcji BIOS-u
HEIDENHAIN iTNC 530 spis funkcji
Asembler DOS Najczęściej stosowane funkcje przerwań
Spis funkcji PHP razem z przykładami
funkcja-własności, zadania spis treści
spis cwiczen, studia, nano, 3rok, 6sem, metody badań nanomateriałów funkcjonalnych
spis lab I sem 2010
BANK CENTRALNY I JEGO FUNKCJE
Zaburzenia funkcji zwieraczy
Genetyka regulacja funkcji genow
BYT 2005 Pomiar funkcjonalnosci oprogramowania
Diagnoza Funkcjonalna
Insulinoterapia funkcjonalna
Postać kanoniczna funkcji kwadratowej

więcej podobnych podstron