8051 - program wi?kszy ni? 64kb

Widziałem coś takiego - program był większy niż 64kb, a przecież licznik PC jest 16bitowy - jak to jest zrobione? Obejrzałem zdebugowany program, ale nic nie wymyśliłem.

Pozdr. Maciek

Reply to
Maciek
Loading thread data ...

Użytkownik "Maciek" snipped-for-privacy@chabrowa.net napisał w wiadomości news: snipped-for-privacy@risp.pl...

bankowanie

czesc kodu wspolna a czesc w przestrzeni 64 KB podstawiana np 8 KB wspolne i dwa banki po 56 KB

Reply to
Andy

Użytkownik "Maciek" snipped-for-privacy@chabrowa.net napisał w wiadomości news: snipped-for-privacy@risp.pl

Przez bankowanie pamięci. Obrazowy przykład: W obszarze (1): 0000h...7FFFh - siedzi 32KiB pamięci programu - dostępne zawsze W obszarze (2): 8000h...FFFFh - siedzi N nałożonych na siebie banków po

32KiB pamięci. To do którego banku nastąpi faktyczne odwołanie zależy od zawartości dodatkowego rejestru bankującego wybierającego jeden z banków. Czyli generującego właściwy sygnał CS\ jeżeli banki siedzą w kilku kościach, lub dostarczającego brakujące bity adresowe (>=A16) - jeżeli mamy jeden duży EPROM . Procesor widzi do rejestr bankujący w przestrzeni I/O. W szczególnym przypadku tą role może pełnić choćby np. kilka linii portu P1. Przed wywołaniem procedury z obszaru (2) należy do rejestru bankującego wpisać numer banku zawierającego tą procedurę.

W disasemblowanym programie miałeś szanse zobaczyć odwołania do rejestru bankującego. Aczkolwiek w dobrze napisanym kodzie, przełączenia banków mogą być nieliczne, a do tego wykonywane w sposób zakamuflowany. Np. w minimodułach WG (

formatting link
) do wyboru jednego z dwóch banków wykorzystano jednobitowy przerzutnik RS zaimplementowany w GAL-u pełniącym rolę dekodera adresowego. Ustawienie/zerowanie przerzutnika następuje w wyniku odwołania (odczytu) pod konkretne adresy w pamięci (gdzieś pod koniec fizycznej przestrzeni adresowej). Chcąc wybrać bank należy wykonać "ślepy" MOVC odwołujący się do jednego z tych dwóch adresów. Zaletą takiego sposobu przełączania jest to że nie zajmuje żadnych zasobów I/O kontrolera.

Wprawdzie nigdy z tego nie korzystałem, ale AFAIR kompilator+linker Keil-a oferują możliwość bankowania.

Reply to
Marek Dzwonnik

"...Widziałem coś takiego - program był większy niż 64kb, a przecież licznik PC jest 16bitowy..."

Zazwyczaj tak, ale nie zawsze. Niektóre

51-ki (np.DS80C400) mają możliwość przestawienia w tryb adresowania ciągłego z 24-bitowym PC.

Cierpliwości w walce z bitami życzy dziadek Ben

Reply to
dziadek Ben

Dziękuje za wskazówki - przejrzę ten kod dokładniej.

Pozdr. Maciek

Reply to
Maciek

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.