[x86]pamiec, io

0

jedna z czynnosci biosu przed skokiem pod 0x7c00 jest zmapowanie urzadzen do pamieci.
mapuje glownie GPU i RAM, a przestrzen adresowa nazywa pamiecia fizyczna.

  1. jak wyglada mapowanie dyskow (hard drive)? bios ma funkcje int 13h, i co ona robi? w jaki sposob realizuje i/o dyskow? Glownie chodzi mi o to co sie kryje pod int 13h.

  2. jak moge poznac mape pamieci? tzn: FF-AA - bios, AA-BB - screen, BB-CC - wlan, CC-DD - ide, DD-EE - APIC, EE-FF - RAM?

  3. Sa instrukcje in/out + warianty. skoro bios mapuje urzadzenia do pamieci, do czego sa instrukcje in/out?
    kiedys wydawalo mi sie, ze wlasnie komunikacja z hardware to in/out. Wiem ze wybor urzadzenia 'ram/ide/rom/vga' jest realizowany przez north bridge, tzn tak mi sie wydaje... ale nb musi przeciez znac mape pamieci. Wiec do czego sa in/out?

0
asm123 napisał(a)
  1. jak wyglada mapowanie dyskow (hard drive)? bios ma funkcje int 13h, i co ona robi? w jaki sposob realizuje i/o dyskow? Glownie chodzi mi o to co sie kryje pod int 13h.

http://ata-atapi.com
http://wiki.osdev.org

  1. Sa instrukcje in/out + warianty. skoro bios mapuje urzadzenia do pamieci, do czego sa instrukcje in/out?

Nie wszystko jest mapowane - głównie to, co wymaga szybkiego transferu danych. Ale wiele operacji odbywa się poprzez instrukcje in/out.

0
  1. Na to pytanie Ci dokladnie nie odpowiem, ale funkcje przerwania 0x13 sluza do obslugi dyskow/stacji dyskietek, mozesz za ich pomoca czytac sektory i takie tam.
    Przerwanie 0x13 jest przerwaniem biosu, mozna z niego korzystac pod Windows'ami.
    Na uniksach juz nie ma go.
    Dokladnie niewiem jak sa zaimpementowane funkcje obslugi przerwan w biosie, ale wszystko sprowadza sie jesli chodzi o przerwania programowe do odpowiedniego zdefiniowania tablicy IDT oraz przypisaniu adresow ISR, czyli wlasnie tych funkcji obslugujacych przerwania.
    Jesli chodzi o sprzetowe to musisz przekierowac przerwania IRQ pod inne adresy oraz zaprogramowac APIC i dodac odpowiednie wpisy do IDT.

  2. Mape pamieci mozesz poznac zapoznajac sie z dokumentacjami biosu. Przykladowo:
    0xB800 - pamiec trybu tekstowego, karty VGA
    0xA000 - pamiec trybu 0x12. 0x13, itp.

  3. in/out slaza do odbierania/wysylania sygnalow do portow, czyli odpowiadaja za komunikacje ze sprzetem, np. zeby odczytac scancode nacisnietego klawisza na klawiaturze odczytujesz wartosc, jesli sie nie myle z portu 0x61.

0

ok to moze co to jest port?
czym sie rozni port od urzadzenia zmapowanego?

jak sa numerowane porty?

0
t0m_k napisał(a)

Przerwanie 0x13 jest przerwaniem biosu, mozna z niego korzystac pod Windows'ami.

Większej bzdury to tu dawno nie było, nawet w wykonaniu tego debila-abusera, autora wątku. Pod DOS-em tak, pod Windows do przerwań w ogóle dostępu nie masz (no prawie - poza 0x2E i 0x2F używanymi wewnętrznie przez system - syscalle i mechanika debugowania).

0

ale chyba ani windows ani linux nie niszczy oryginalnych przerwan biosu?
wiec to tak naprawde kwestia przelaczenia w real mode, zmienienia IDT na 0x0000, i mozna kozystac z przerwan biosu.

0
deus. napisał(a)
t0m_k napisał(a)

Przerwanie 0x13 jest przerwaniem biosu, mozna z niego korzystac pod Windows'ami.

Większej bzdury to tu dawno nie było, nawet w wykonaniu tego debila-abusera, autora wątku. Pod DOS-em tak, pod Windows do przerwań w ogóle dostępu nie masz (no prawie - poza 0x2E i 0x2F używanymi wewnętrznie przez system - syscalle i mechanika debugowania).

A windows przypadkiem nie przelacza procesora w tryb wirtualny i nie emuluje dos'a, aby mozna bylo wlasnie uruchamiac aplikacje pod dos'a i korzystac z tych przerwan ? Uniksy nie emuluja dos'a, dlatego tez napisalem, ze nie ma mozliwosci uzycia w ogóle tych przerwan.

Zreszta jesli chodzi o windows to i tak chyba to wycofali w Viscie, czy 7, czy innym tam nowszym systemie, znaczy emulacje dos'a ;)

0
t0m_k napisał(a)

A windows przypadkiem nie przelacza procesora w tryb wirtualny i nie emuluje dos'a, aby mozna bylo wlasnie uruchamiac aplikacje pod dos'a i korzystac z tych przerwan ?

Owszem.

Zreszta jesli chodzi o windows to i tak chyba to wycofali w Viscie, czy 7, czy innym tam nowszym systemie, znaczy emulacje dos'a ;)

Inaczej: emulacji DOS-a nie ma w 64-bitowych systemach: XP, Viście ani 7.
W edycjach 32-bitowych (z Win7 włącznie) maszyna wirtualna DOS-a cały czas jest.

0

@Azarien
Pytanie bylo dla .deusa, odnosnie tej bzdury ;)

Dzieki za wyjasnienie z tymi Windows'ami, nie przezucilem sie jak do tej pory na x86-64 i stad te braki.

0
asm123 napisał(a)

ok to moze co to jest port?
czym sie rozni port od urzadzenia zmapowanego?

jak sa numerowane porty?

W praktyce procesor może operować na dwóch przestrzeniach adresowych. Pierwsza to przestrzeń portów IO, a druga to tak zwana przestrzeń pamięci RAM. Samo wykonywanie instrukcji mov i in/out polega na wystawieniu sygnałów na szynę adresową i ustawieniu dodatkowego sygnału informującego do której przestrzeni się odwołujesz.

W komputerach PC większość portów IO jest przypisana na stałe do określonych urządzeń. W internecie można znaleźć pliki map opisujące jaki port do czego jest podłączony. Jak wiadomo sama przestrzeń IO to 65536 portów bajtowych lub odpowiednio połowa portów dwóbajtowych. To niewiele ale nie jest ona rozszerzana ponieważ stosuje się mapowanie rejestrów urządzeń nie do tej przestrzeni IO w której praktycznie każdy port jest na stałe przypisany do pewnej grupy urządzeń, a do przestrzeni pamięci RAM.

Teraz pytanie jak to się realizuje.
Jest utworzony kanał komunikacji z urządzeniami co się nazywa magistralą PCI. Samą magistrale obsługuje się po przez porty IO. Do niej mogą być podłączone dowolne urządzenia np. dyski twarde, karty sieciowe, karty graficzne itp. Ale to nie jest fizyczne podłączenie np. karty VGA do portu PCI w komputerze. Jak masz karte VGA podłączoną przez AGP to karta jest podłączona do magistrali PCI po przez jakiś tam odpowiedni mostek AGP->PCI. Nie będę się wgłębiał w to bo też się nie znam tak bardzo.
Praktycznie wygląda to tak, że w przestrzeni IO masz pewien zestaw portów za pomocą których obsługujesz magistralę PCI. Możesz np. wyszukiwać na niej urządzenia i wpisywać do pewnych rejestrów tych urządzeń określone wartości. I można również po przez wpisanie adresów do określonych rejestrów spowodować zmapowanie pewnej pamięci tego urządzenia. W przypadku kart VGA to może być na przykład pamięc ekranu, drugiego bufora lub pamięci tekstur czy czego tam sobie chcesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1