Właściwie równie dobrze mozna to umieścić w większości działów...
Kilkakrotnie na forum pojawiały sie pytania odnośnie portów com i lpt..
O co mi chodzi... [???]
W trybie rzeczywistym procka pod adresem 0040:0000 (bios) znajdują się następujące struktury:
0040:0000 com_base DW 4 dup (?) ; zapis hex
0040:0008 lpt_base DW 4 dup (?)
Są to numery portów szeregowych (np. 2f8h/378h/3f8h/...) i równoległych (odpowiednio). Rzeczywistych sprzętowych. Dla nie znających assemblera: dwie tablice po 4 wordy/unsignedy z rzędu.
Pytanie moje jest takie. Jak uzyskać odpowiednik tego adresu pod łinzgrozą, jak dobrać sie do tych struktur? Lub też czy istnieje funkcja, która zwraca adres portu com i lpt w zalezności od numerka portu? Lub też czy istnieje jakis mechanizm deskryptorów czy innych podpórek pozwalajacych na dostęp do pamięci wg. adresowania trybu rzeczywistego?
Jeżeli to komus coś podpowie i pomoze w znalezieniu odpowiedzi, to w trybie rzeczywistym szyna adresowa ma 20 bitów, a więc adres 0040:0000 jest odpowiedikiem 0000:0400 (będzie równiez działać). A adres liniowy to 000400 (16*segment+offset - 20 bitów)
TIA !
// zapomniałem dopisać API, only API,
// a język jest bez znaczenia.
// Nikt sie nie połapał w moim byku: 24 bity
// 16*segment+offset to przecież tylko 20 bitów.
// stąd dos to tylko 1 MB (2^20). hehe.