Większość komponentów jest połączona w jeden pakiet o nazwie CPU AGB. Ten pakiet zawiera dwa zupełnie różne procesory:
- Sharp SM83 działający z szybkością 8,4 lub 4,2 MHz: Jeśli to nie ten sam procesor, co w Game Boyu! Jest skutecznie używany do uruchamiania gier Game Boy (DMG) i Game Boy Color (CGB). Oto mój poprzedni artykuł, jeśli chcesz dowiedzieć się więcej na tych konsol.
- ARM7TDMI działający z częstotliwością 16,78 MHz: jest to nowy procesor, na którym się skupimy i który obsługuje gry Game Boy Advance.
Zauważ, że oba procesory nigdy nie będą działać w tym samym czasie ani nie będą wykonywać żadnego fantazyjnego współprzetwarzania. Jedynym powodem uwzględnienia bardzo starego Sharpa jest wsteczna zgodność.
Biorąc to pod uwagę, zanim opiszemy układ ARM, uważam, że warto zacząć od historii stojącej za tą marką procesorów.
Cud z Cambridge
Historia początków procesora ARM i jego późniejszej sławy jest porywająca. Znajdujemy tu połączenie inwestycji publicznych, wykładniczego wzrostu, niefortunnych decyzji i partnerstw na odległość.
Powstanie Acorn Computers

Zdjęcie BBC Micro z pudełkiem dyskietek 5¼ na górze , pierwsza dyskietka to Elite.
Koniec lat 70. w Wielkiej Brytanii naznaczony był początkiem przymusowego przejścia od gospodarki interwencjonistycznej do wolnego rynku. W czasie tej burzy firmy z siedzibą w Cambridge, takie jak Acorn Computers wraz z Sinclairem i tym podobnymi, sprzedawały zestawy komputerowe laboratoriom i hobbystom. Podobnie jak przedsiębiorstwa Amerykańskie i Japońskie, komputery Acorna opierały się na procesorze 6502 i zastrzeżonym dialekcie języka BASIC.
Na początku lat 80. interesy ministerialne w nowym rządzie brytyjskim doprowadziły do stworzenia projektu mającego na celu podniesienie poziomu umiejętności obsługi komputera w szkołach . Dzięki nadchodzącemu komputerowi domowemu 'Proton' firmy Acorn, firma otrzymała kontrakt na budowę niedrogiego komputera, który spełni wizję rządu. W rezultacie powstał BBC Micro (nazywany 'Beeb'), który odniósł znaczący sukces wśród szkół, nauczycieli i uczniów. W Micro, firma Acorn zastosowała awangardowy interfejs 'Tube', który mógł rozszerzyć komputer o drugi procesor. Otworzyłoby to drogę do kolejnej dużej inwestycji Acorn.
Podczas opracowywania kolejnego produktu, tym razem przeznaczonego dla przedsiębiorstw, firma Acorn nie znalazła odpowiedniego procesora, który mógłby zastąpić model 6502. Presja na innowacje w stosunku do konkurencji Japońskiej i Amerykańskiej, w połączeniu z niefortunnym planowaniem, postawiła firmę Acorn w trudnej sytuacji finansowej. Dlatego nowy oddział firmy Acorn otrzymał zadanie wyprodukowania atrakcyjnego procesora. Aby obejść niedawne ograniczenia firmy Acorn, zespół ds. CPU oparł swoją architekturę na naukach zawartych w artykule badawczym zatytułowanym The Case for the Reduced Instruction Set Computer i jego prototypie, procesorze RISC . Wreszcie w 1985 roku firma Acorn dostarczyła procesor ARM1 jako moduł Tube dla BBC Micro, ale był on sprzedawany wyłącznie do celów badawczo-rozwojowych. Dopiero w 1987 r., wraz z wprowadzeniem na rynek pierwszego komputera Acorn Archimedes, chipy ARM (wówczas procesor ARM2) odegrają kluczową rolę.
Nowe przedsięwzięcie procesorowe

Późny model Newtona... po tym jak się nim bawiłem.
Podczas komercjalizacji Acorn Archimedes, firma Apple zafascynowała się energooszczędnymi procesorami Acorn, ale amerykańska firma nadal nie była przekonana, że najnowszy procesor ARM3 firmy Acorn będzie odpowiedni dla nowego projektu Apple, Newtona. Jednak zamiast odejść (w końcu Acorn był konkurentem), oboje omówili możliwość rozwinięcia ARM3 tak, aby spełniał wymagania Apple , a mianowicie elastyczną częstotliwość taktowania, zintegrowane MMU i kompletne adresowanie 32-bitowe.
Ta współpraca szybko przerodziła się w partnerstwo, w ramach którego Acorn, Apple i VLSI (producent chipów ARM) założyły nową firmę skupiającą się wyłącznie na opracowywaniu procesorów ARM. Inwestycję zapewnił Apple (pozyskując 43% udziałów), Acorn udostępnił kadrę, a produkcją zajęła się VLSI. W 1990 roku powstała firma Advanced RISC Machines (ARM) Ltd, której prezesem wykonawczym został Robin Saxby.
Wiele lat później Apple w końcu wypuścił Newton MessagePad zasilany przez ARM610, jeden z chipów ARM nowej generacji z uwzględnieniem wskazówek Apple. W międzyczasie firma Acorn wypuściła także RiscPC wykorzystujący nowe procesory.
Teraz, gdy Acorn i Apple pozostały na rynku komputerów/urządzeń przenośnych, ARM opracowało radykalny model biznesowy. Oddalając się od produkcji, wizja Saxby'ego obejmowała licencjonowanie własności intelektualnej ARM w postaci projektów procesorów i ich zestawu instrukcji . Dzięki temu ARM zyskał klientów spoza branży komputerowej, takich jak Texas Instruments , który później połączył firmę z wschodzącym rynkiem mobilnym (którego kulminacją była Nokia 6110) i dekoderami. W kolejnych latach technologia ARM zostanie wbudowana w miliardy urządzeń mobilnych .
Partnerstwo z Nintendo
Wracając do Japonii, i dzięki analizie Game Boya dowiedzieliśmy się, że strategia sprzętowa Nintendo dotycząca systemów przenośnych faworyzuje model System na Czipie (SoC). Umożliwiło to firmie ukrycie niedrogiej, gotowej technologii i połączenie jej z wewnętrznymi rozwiązaniami. Dzięki temu nowa konsola może być wyjątkowa i konkurencyjna.

CPU AGB, mieszczący procesor ARM7TDMI (wśród wielu innych komponentów).
Na szczęście model licencjonowania ARM idealnie wpasował się w te potrzeby. Ponadto dobra reputacja w sektorze mobilnym rozprzestrzeniła dobre słowo na temat ARM, zwłaszcza w okresie rozkwitu platformy mobilnej ARM7TDMI, procesora który otrzymał wsparcie od Nokii w celu maksymalizacji wydajność przy ograniczeniach mocy i pamięci. Cóż, los chciał, że Nintendo i ARM ostatecznie zostały partnerami, a na procesor Game Boy Advance został wybrany ARM7TDMI.
Przyjrzyjmy się teraz temu, co ten chip oferuje programistom.
Zestaw instrukcji
Po pierwsze, ARM7TDMI implementuje zestaw instrukcji ARMv4, następcę ARMv3. Oznacza to:
- Projekt oparty na architekturze RISC: Jak wyjaśniono wcześniej, na architekrurę procesorów ARM wpływ miała publikacja Uniwersytetu w Berkley zatytułowana 'The Case for the Reduced Instruction Set Computer' . Jej badania przedstawiają szereg wytycznych dotyczących projektowania skalowalnych procesorów i bronią stosowania architektury załaduj-zapisz, stałego rozmiaru instrukcji i dużego pliku rejestru. Wiele z nich było nieobecnych na zaludnionym rynku procesorów (tj. Intel 8086, MOS 6502, Zilog Z80 i Motorola 68000), ale wywarły wpływ na projektowanie nowych linii procesorów w latach 80-tych i lata 90-te.
- Wykonywanie warunkowe: Specyficzna cecha ARM ISA. Zasadniczo prawie każda instrukcja zawiera warunek decydujący o tym, czy należy ją wykonać. Zwykle inne procesory wykonują proces 'porównaj i przeskocz' (zwany także 'rozgałęzianiem'), gdy procesor osiągnie skrzyżowanie. Natomiast instrukcje ARM są uwarunkowane wynikiem poprzedniego porównania. Jest to możliwe, ponieważ pierwsze cztery bity rozkazów ARM są zarezerwowane dla warunku (tj. równego, nierównego, itp). Podsumowując, zmniejsza to złożoność kodu ARM, ponieważ wykonywanie warunkowe zapewnia czystszy projekt procedur, w przeciwieństwie do rozgałęzień i podziału podprogramów.
- Instrukcje mnożenia 32-bitowego i 64-bitowego: Dodano w ARM v4. Ponadto operacje 64-bitowe wyprowadzają wynik w dwóch rejestrach.
Rdzeń
Teraz czas sprawdzić silikon. ARM7TDMI to okrojona wersja ARM710 z ciekawymi dodatkami. Rdzeń zawiera :
- Szesnaście 32-bitowych rejestrów ogólnego przeznaczenia: Chociaż jest to duży krok naprzód w porównaniu z siedmioma 8-bitowymi rejestrami SM83/Game Boya. Jest to kompromis z wytycznymi RISC, które zamiast tego wymagały trzydziestu dwóch rejestrów 32-bitowych. Dzieje się tak, ponieważ ARM opowiadał się za utrzymaniem małego rozmiaru krzemu .
- 32-bitowa magistrala danych i ALU: Może obsługiwać wartości 32-bitowe bez zużywania dodatkowych cykli.
- Czyste adresowanie 32-bitowe: To część wkładu firmy Apple. Pierwsze trzy procesory ARM wykorzystywały 26-bitowe adresy pamięci w celu optymalizacji wydajności (połączony Licznik Programów i Rejestr Stanu mogły zmieścić się w jednym 32-bitowym słowie) w zamian za możliwość adresowania pamięci (można było uzyskać dostęp do 64 MB pamięci). Kolejna seria, ARM6 (z ISA ARMv3), zaimplementowała 32-bitową logikę adresowania, ale zachowała tryb kompatybilności wstecznej dla starego kodu. Teraz ARM7TDMI (skoncentrowany na urządzeniach mobilnych) zrezygnował z trybu 26-bitowego i obsługuje tylko logikę dla adresów 32-bitowych (zmniejszając ilość potrzebnego krzemu).
- Trzyetapowy potok: Wykonywanie instrukcji jest podzielone na trzy etapy. Procesor pobierze, zdekoduje i wykona do trzech instrukcji jednocześnie. Umożliwia to maksymalne wykorzystanie zasobów procesora (co zmniejsza bezczynność krzemu), jednocześnie zwiększając liczbę instrukcji wykonywanych na jednostkę czasu.
- Dzięki takiemu projektowi wykonywanie warunkowe jest bardziej wydajne niż rozgałęzianie.
- Brak Jednostki Zarządzania Pamięcią (MMU): Od czasu ARM1 firma ARM dostarczała rozwiązanie MMU. Najpierw jako koprocesor 'MEMC', a następnie zintegrowany z ARM610. ARM7TDMI wydaje się być jedynym w swojej serii, który go nie zapewnia, potencjalnie ze względu na brak zainteresowania (wczesne urządzenia mobilne nie wymagały zaawansowanej pamięci wirtualnej).
- Brak pamięci podręcznej: Kolejna redukcja kosztów tego układu, ponieważ poprzednie układy ARM zawierały pamięć podręczną.
Wreszcie wszystko to może działać z zasilaczem 3 wolt . Jest to ogromny krok w kierunku komputerów mobilnych, gdyż wcześniejsze rdzenie wymagały zasilania 5 wolt.
Wyciskanie wydajności
Jedna z wad architektury załaduj-zapisz doprowadziła do tego, że kod ARM był bardzo skromny. Konkurenci tacy jak x86 mogliby wykonywać te same zadania, używając mniejszych ilości kodu i wymagając mniej pamięci. W rezultacie, kiedy ARM zaczął sprzedawać firmom telekomunikacyjnym, Nokia nie była z tego zadowolona . Rozmiar instrukcji ARM oznaczał, że sprzęt Nokii składający się z 16-bitowych magistrali oraz ograniczonej pamięci i pamięci masowej - a wszystko to w celu oszczędności kosztów i energii - spowodowałby, że procesor byłby nieefektywny i powodowałby wąskie gardło. Dlatego ARM wymyśliło rozwiązanie: Zestaw instrukcji Thumb.
Thumb jest podzbiorem zestawu instrukcji ARM, którego instrukcje są kodowane w 16-bitowych słowach (a nie 32-bitowych) . Będąc 16-bitowymi, instrukcje Thumb wymagają połowy szerokości magistrali i zajmują połowę pamięci.
Głównym kompromisem jest to, że Thumb nie oferuje wykonywania warunkowego, zamiast tego polega na rozgałęzianiu. Dodatkowo jego kody operacyjne do przetwarzania danych używają tylko formatu dwuadresowego, a nie trzyadresowego i mają dostęp tylko do dolnej połowy pliku rejestru (a więc dostępne jest tylko osiem rejestrów ogólnego przeznaczenia). Ponieważ instrukcje Thumb oferują tylko funkcjonalny podzbiór ARM, może być konieczne napisanie większej liczby instrukcji, aby osiągnąć ten sam efekt.
W praktyce, Thumb wykorzystuje 70% miejsca w kodzie ARM. W przypadku pamięci 16-bitowej, Thumb działa szybciej niż ARM. W razie potrzeby instrukcje ARM i Thumb można mieszać w tym samym programie (nazywanym interworking), dzięki czemu programiści mogą wybrać, kiedy i gdzie użyć każdego trybu.
Rozszerzenia
ARM7TDMI jest w istocie rdzeniem zgodnym z ARMv3 z dodatkami. Jest to wspomniane w nazwie (TDMI), co oznacza:
- T -> Thumb: Dołączenie zestawu instrukcji Thumb.
- D -> Debug Extensions (Rozszerzenia Debugowania): Zapewniają debugowanie JTAG.
- M -> Enhanced Multiplier (Ulepszony Mnożnik): Poprzednie rdzenie ARM wymagały wielu cykli do obliczenia pełnych 32-bitowych mnożeń, to ulepszenie redukuje je do zaledwie kilku.
- I -> EmbeddedICE macrocell: Włącza sprzętowe przerwania, punkty obserwacyjne i umożliwia zatrzymanie systemu na czas debugowania kodu. Ułatwia to tworzenie programów dla tego procesora.
Ogólnie rzecz biorąc, uczyniło to ARM7TDMI atrakcyjnym rozwiązaniem dla urządzeń mobilnych i wbudowanych.
Lokalizacje pamięci
Dołączenie Thumb miało szczególnie duży wpływ na ostateczny projekt tej konsoli. Nintendo połączyło magistrale 16-bitowe i 32-bitowe między różnymi modułami, aby obniżyć koszty, jednocześnie zapewniając programistom niezbędne zasoby do optymalizacji kodu.

Architektura pamięci tego systemu.
Pamięć Game Boy Advance do wykorzystania jest podzielona na następujące lokalizacje (w kolejności od najszybszej do najwolniejszej) :
- IWRAM (wewnętrzny WRAM) -> 32-bitowy z 32 KB: Przydatny do przechowywania instrukcji ARM.
- VRAM (Wideo RAM) -> 16-bitowy z 96 KB: Chociaż ten blok jest przeznaczony na dane graficzne (wyjaśniono to w następnej części tego artykułu), nadal można go znaleźć w mapie pamięci procesora, więc programiści mogą przechowywać tu inne dane, jeśli IWRAM nie wystarcza.
- EWRAM (zewnętrzny WRAM) -> 16-bitowy z 256 KB: Osobny układ obok CPU AGB. Jest optymalny do przechowywania instrukcji Thumb i danych w małych porcjach. Z drugiej strony dostęp do chipa może być do sześciu razy wolniejszy w porównaniu z IWRAM.
- Game PAK ROM -> 16-bitowy ze zmiennym rozmiarem: To jest miejsce, w którym uzyskuje się dostęp do pamięci ROM kartridża. Chociaż może zapewniać jedną z najwolniejszych szybkości, jest również odzwierciedlany w mapie pamięci, aby zarządzać różnymi szybkościami dostępu. Dodatkowo Nintendo dołączyło Bufor Prefetch, który łączy się z kartridżem, aby złagodzić nadmierne przeciąganie. Ten komponent niezależnie buforuje ciągłe adresy, gdy procesor nie uzyskuje dostępu do kartridża, może przechowywać do ośmiu 16-bitowych słów.
- W praktyce jednak procesor rzadko pozwala Buforowi Prefetch wykonać swoją pracę. Ponieważ domyślnie będzie pobierać instrukcje z kartridża, aby kontynuować wykonywanie (dlatego IWRAM i EWRAM są tak ważne).
- Game PAK RAM -> 8-bitowy o zmiennym rozmiarze: To jest miejsce, w którym uzyskuje się dostęp do pamięci RAM (SRAM lub Pamięci Flash).
- Jest to ściśle 8-bitowa magistrala (procesor zobaczy 'śmieci' w nieużywanych bitach) i z tego powodu Nintendo twierdzi, że może być obsługiwana tylko przez ich biblioteki.
Chociaż ta konsola była sprzedawana jako system 32-bitowy, większość jej pamięci jest dostępna tylko przez 16-bitową magistralę, co oznacza, że gry będą w większości używać zestawu instrukcji Thumb, aby uniknąć wydawania dwóch cykli na pobieranie instrukcji. Tylko w bardzo wyjątkowych okolicznościach (tj. konieczności użycia instrukcji nie znajdujących się na Thumb podczas przechowywania ich w IWRAM) programiści skorzystają z zestawu instrukcji ARM.
Stawanie się Game Boy Color
Oprócz włączenia osprzętu GBC (Sharp SM83, oryginalny BIOS, tryby audio i wideo, kompatybilne gniazdo kartridży itd.), do zapewnienia kompatybilności wstecznej wymagane są dwie dodatkowe funkcje.
Od strony sprzętowej konsola opiera się na przełącznikach, aby wykryć, czy włożono kartridż Game Boy lub Game Boy Color. Detektor kształtu w gnieździe kartridża skutecznie identyfikuje typ kartridża i pozwala procesorowi odczytać jego stan. Zakłada się, że jakiś element CPU AGB odczytuje tę wartość i automatycznie wyłącza sprzęt, który nie jest potrzebny w trybie GBC.
Od strony oprogramowania istnieje specjalny 16-bitowy rejestr o nazwie REG_DISPCNT, który może zmieniać wiele właściwości wyświetlacza, ale jeden z jego bitów ustawia konsolę w 'tryb GBC' . Początkowo miałem trudności ze zrozumieniem, kiedy dokładnie GBA próbuje zaktualizować ten rejestr. Na szczęście niektórzy programiści pomogli to wyjaśnić:
Myślę, że to, co dzieje się podczas rozruchu GBC, polega na tym, że sprawdza przełącznik (czytelny pod adresem REG_WAITCNT 0x4000024), zanika (bardzo szybkie zanikanie, trudne do zauważenia), a następnie w końcu przełącza się w tryb GBC (BIOS zapisuje do REG_DISPCNT 0x4000000), zatrzymując ARM7.
Jedynym brakującym elementem układanki jest to, co by się stało, gdyby usunięto część obudowy kartridża GBC, aby przełącznik nie był już wciskany, a następnie programowo przełączono tryb na tryb GBC. W tym przypadku może pomóc tryb Multi-boot. Nie jestem pewien, czy przełącznik musi być wciśnięty, aby magistrala kartridża GBC działała poprawnie, czy po prostu działa. Jestem skłonny założyć, że przełącznik jest niezbędny do działania magistrali, ale to tylko przypuszczenie.
- Dan Weiss (znany jako Dwedit, obecny opiekun PocketNES i Goomba Color)