Re: [Q] Shadow RAM

Autor: Jarek Lis (lis_at_okapi.ict.pwr.wroc.pl)
Data: Fri 19 Jan 1996 - 20:12:12 MET


Rafal Posmyk (raphael.posmyk_at_hamburg.netsurf.de) wrote:
: lis_at_okapi.ict.pwr.wroc.pl (Jarek Lis) wrote:
:
: > : Wedlug mojego rozumowania adres fizyczny
: > : to wlasnie "czwarty SIMM w drugim banku..."
: > Pierwsze pytanie - czy Cie naprawde interesuje w ktorym Simie, ktory
: > bit (hm, wspolrzedne w um?) odpowiada np za adres 123456?
: > Taka wiedza jest malo uzyteczna!
:
: Masz clakowita racje, tylko co w/g Ciebie (evtl. przyjetej
: terminologii) jest adres fizyczny ?

Adres, ktory wystepuje na jakiejs wspolnej magistrali, tej, do ktorej
podaje adresy sterownik DMA, procesor, adresowana jest ISA, PCI i VLB.
Mnie naprawde nie interesuje, w ktorej kosci SIMM to siedzi, bo nic mi
ta wiedza nie da (oproc moze namierzenia uszkodzonej kosci RAM).

: > To co Cie naprawde interesuje, to jak zaprogramowac inne urzadzenia
: > korzystajace z magistrali, zeby trafialy do tych samych adresow.
: > I zwykle adresy z kanalow DMA, czy urzadzen bus-master, dosc szybko
: > lacza sie ... z liniami adresowymi procesora. I tu 'adresy fizyczne'
: > sa zachowane.
:
: Napisales kiedys:
:
: "...Tak bylo jeszcze w wolnych 286, bo potem gdzies po drodze BIOS
: odczytuje ROM, zapisuje go do RAM (shadow) i dopiero wtedy skacze.
: Aha - ROM i shadow RAM maja ten sam adres ..."
:
: Nawet jezeli owa tajemnicza kostka odwzorowuje fizyczna pamiec (SIMM
: Nr 2, linia x, kolumna y) na adresy typu 123456 (patrz wyzej) to musi
: przeciez w przestrzeni adresowej uwzglednic przestrzenie ROM, RAM i
: VIDEO RAM, ... Tak wiec stworzenie rownosci ROM = SHADOW RAM (jako ze
: maja posiadac ten sam adres) wkracza w zakres adresow fizycznych.
: Rozumuje, ze BIOS gdzies po drodze zapamietuje sobie, ze wszystkie
: odwolania do adresu 111111 sa kierowane do adresu 123456. Takoz
: istnieje odwzorowanie fizycznego adresu 111111 na logiczny adres
: 123456, ktory sam dla siebie jest byc moze adresem fizycznym albo
: dalszym odwzorowaniem.

To nie tak dokladnie. W komputerze masz takich magistral adresowych
zwykle kilka. Jedna wychodzi z procesora, inna wchodzi do pamieci,
jeszcze inna tyczy sie magistrali ISA. 'Adres fizyczny' dotyczy
najczesciej magistrali procesora - bo to jest pierwsze miejsce
gdzie uzywa sie swiadomie adresow.
Pomiedzy magistralami sa odpowiednie uklady transmitujace
adresy. W najprostszym przypadku nie zmieniaja one wartosci adresu.
Ale moga.
Adresy procesora moga byc w miare dowolnie przekodowane na adresy
magistrali pamieci, choc najczesciej stosuje sie w miare proste schematy
Adres na magistrali RAM tez jest dosc 'fizyczny' (fizyczny=rzeczywisty)
(o ile jescze mozna mowic o adresie przy np 8MB RAM w dwoch
bankach z interleavingiem...). Tylko ze jest dla nas malo interesujacy,
bo nie mamy bezposredniego don dostepu.

Rozwazmy ta nasza 'najbardziej interesujaca' magistrale adresow.
Zawiera ona powiedzmy 32 bity. Taki ROM ma bitow adresu znacznie mniej
 - powiedzmy 16. Te 16 linii przylaczasz do mlodszych z 32 bitow m.adr.

Teraz jeszcze potrzebujesz wygenerowac sygnal do ROM'u o znaczeniu
'do Ciebie mowia'. 'Chip Select' (CS) sie to najczesciej nazywa.

Robi to tzw. dekoder adresow, najczesciej zawarty w owej tajemniczej
kostce. W wersji najprostszej, porownuje on czy zdres na m. adr.
jest w zadanym zakresie. Np. 000F0000-0000FFFFF. Zauwaz ze owo
'sprawdzenie zakresu' sprowadza sie w wielu przypadkach do wykrycia
konkretnego stanu na starszych liniach adresowych (tutaj mamy 000F).

Teraz zauwaz, ze jesli nieco zmienie ten dekoder, ze np bedzie
wykrywal stan 000E, to de facto przesunalem ROM w przestrzeni adresowej.
Oczywiscie do pelni szczescia przydalo by sie, zeby zadne inne urzadzenie
nie nie zostalo wybrane po podaniu tego adresu.

Najprostszy przypadek wyjesnienia Ci, jak moze byc to zrobione z shadow
RAM, jest np. taki:

1. Mamy magistrale adresowa. jest ona takze doprowadzona do podsystemu
   pamieci RAM.

2. Mamy ROM BIOS, tez podlaczony do magistrali, z dekoderem
   adresow wykrywajacym stan 000Fxxxx

3. mamy sterownik magistrali ISA, ktorego jedna z podstawowych czesci
   jest dekoder adresow, wykrywajacy adres 000A0000 do 000EFFFF.

4. RAM wspomniany w pkt.1 ma co prawda adresy doprowadzone, ale
   wymaga jescze sygnalu typu CS. Odpowiedni dekoder generuje
   taki sygnal, jesli pojawia sie adres NIE bedacy w zakresie
   000A0000-000FFFFF.

Tak to wyglada przy wlaczeniu systemu. Wkrotce pozniej kod z BIOS'a
przy wlaczonym 'BIOS shadow' zmodyfikuje nieznacznie dzialanie
dekodera z pkt.4. Przy czytaniu nie zmieni sie nic. Natomiast przy
zapisie RAM zostanie aktywowany takze przy adresie F0000-FFFFF.
Nastepnie procesor zrobi mala sztuczke - kazdy bajt z zakresu
F0000-FFFFF odczyta i zapisze... pod ten sam adres. Niby glupota,
ale czytamy dane z ROM, a wpisujemy do RAM.

Teraz znowu zmieniamy dekoder 4. przy zapisie wracamy do starego
zakresu, za to odczyt z zakresu F0000-FFFFF aktywuje teraz RAM.
jesli jeszcze zmienimy dekoder 2. zeby w ogole nie dzialal,
to mamy juz shadow ROM, w dodatku 'write protected'.

Shadow na karte graficzna zaklada sie analogicznie.

Zauwaz teraz, ze niestety marnujemy w ten sposob troche pamieci RAM.
Ta z zakresu A0000-EFFFF, byc moze za wyjatkiem obszaru video BIOS.
Jesli nie chcemy jej marnowac ('relocate RAM') to musimy nasz schemat nieco
skomplikowac.

To co chcemy, to zeby ta pamiec byla widoczna jak procesor bedzie adresowal
np 4M-4.25M (zakladam ze mamy 4MB pamieci).
Tu juz nie jest tak prosto. Po pierwsze - musimy wzbogacic
dekoder adresow tak, zeby rowniez ten obszar wykrywal.
No i niestety musimy ten adres przeksztalcic na wlasciwy w pamieci RAM
(640-959K).

Tutaj moze sie okazac, ze jesli nie bedziemy wczesniej uzywac identycznego
przypisania adresow fizycznych do RAM, to co prawda bedziemy
musieli dodac tam jakis prosty konwerter adresow, ale za to znacznie uprosci
sie konstrukcja czesci sluzacej relokowaniu pamieci.

(glupi przyklad - masz wsadzic ROM pomiedzy adresy C4000 a D3FFF (64KB).
  musisz wiec wykryc stosowny zakres adresow, oraz niestety troche
  przekodowac linie adresowe. A0-A13 sa bez zmian, za to niestety
  na A14 i A15 przezywaja mala orgietke. mianowicie w specyfikowanym
  zakresie, dla kolejnych 16KB kawalkow ROM ich wartosc w adresie
  procesora wynosi 01,10,11,00, a chcialo by sie po kolei 00,01,10,11.

  Jesli zabrales sie za rysowanie odpowiedniego schematu - to przegrales.
  Pusc je nie zmienione. Tylko powiedz programistom, zeby ostatnie
  16KB kodu wpisali na sam poczatek EPROMU).

To byl oczywiscie wstep, bo w praktyce dochodza takie cuda jak:

1) magistrala procesora wcale nie ma 32 bitow adresu, tylko 30, plus
   cztery linie wyboru konkretnych bajtow w slowie 32-bitowym.

2) ROM jest obecnie 8 bitowy.., magistrala ISA 8 lub 16..
3) W zaleznosci od tego co sie czyta, trzeba stosowac rozne opoznienia.

4) gdzies trzeba zmiescic nieszczesny cache.

Jarek.



To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 12:38:41 MET DST