Blichtr
Blitter to obwód, czasami jako koprocesor lub blok logiczny na mikroprocesorze , przeznaczony do szybkiego przemieszczania i modyfikacji danych w pamięci komputera . Blitter może relatywnie szybko kopiować duże ilości danych z jednego obszaru pamięci do drugiego, równolegle z procesorem , uwalniając jednocześnie bardziej złożone możliwości procesora do innych operacji. Typowym zastosowaniem blittera jest ruch mapy bitowej , takiej jak okna i czcionki w graficznym interfejsie użytkownika lub obrazy i tła w grze wideo 2D. Nazwa pochodzi od bit blit Xerox Alto z 1973 r. , co oznacza transfer bloków bitów. Operacja blit to coś więcej niż kopia pamięci, ponieważ może obejmować dane, które nie są wyrównane bajtowo (stąd bit w bit blit ), obsługę przezroczystych pikseli (pikseli, które nie powinny nadpisywać miejsca docelowego) oraz różne sposoby łączenia źródła i miejsca docelowego dane.
Blittery zostały w dużej mierze wyparte przez programowalne procesory graficzne .
Historia
W komputerach bez akceleracji sprzętowej grafiki rastrowej , która obejmowała większość komputerów domowych z lat 70. i 80. oraz kompatybilnych z IBM PC do połowy lat 90., bufor ramki jest zwykle przechowywany w pamięci dostępnej dla procesora. Rysowanie odbywa się poprzez aktualizację bufora ramki za pomocą oprogramowania. W przypadku podstawowych procedur graficznych, takich jak składanie mniejszego obrazu w większy (na przykład w grze wideo) lub rysowanie wypełnionego prostokąta, należy manipulować dużymi ilościami pamięci, a wiele cykli spędza się na pobieraniu i dekodowaniu krótkich pętli ładowania/ instrukcje przechowywania. W przypadku procesorów bez pamięci podręcznej wymagania dotyczące magistrali dla instrukcji są równie ważne jak dane. Aby zmniejszyć rozmiar bufora ramki, pojedynczy bajt niekoniecznie musi odpowiadać pikselowi, ale zawiera 8 jednobitowych pikseli, 4 dwubitowe piksele lub parę 4-bitowych pikseli. Manipulowanie upakowanymi pikselami wymaga dodatkowych operacji przesuwania i maskowania na procesorze.
Blittery zostały opracowane w celu odciążenia powtarzalnych zadań kopiowania danych lub wypełniania bloków pamięci szybciej niż jest to możliwe dla procesora. Można to zrobić równolegle z procesorem, a także obsługiwać specjalne przypadki, które byłyby znacznie wolniejsze, gdyby były kodowane ręcznie, takie jak pomijanie pikseli oznaczonych jako przezroczyste lub obsługa danych, które nie są wyrównane bajtowo.
Blittery w komputerach i grach wideo
1973: Xerox Alto , od którego pochodzi termin bit blit , ma instrukcję transferu bloków bitowych zaimplementowaną w mikrokodzie , dzięki czemu jest znacznie szybsza niż ta sama operacja zapisana na procesorze. Mikrokod został zaimplementowany przez Dana Ingallsa .
1982: Oprócz rysowania prymitywów kształtu, procesor wyświetlacza wideo NEC µPD7220 może przesyłać prostokątne mapy bitowe do pamięci wyświetlacza poprzez bezpośredni dostęp do pamięci i wypełniać prostokątne części ekranu.
1982: Zręcznościowa gra wideo Robotron: 2084 firmy Williams Electronics zawiera dwa chipy typu blitter, które pozwalają na jednoczesne poruszanie się do 80 obiektów. Wydajność została zmierzona na poziomie około 910 KB/s. Blitter działa na 4-bitowych (16 kolorów) pikselach, gdzie kolor 0 jest przezroczysty, co pozwala na kształty inne niż prostokątne. Williams używał tego samego sprzętu w innych grach z tamtego okresu, w tym w Sinistar i Joust .
1984: Kompatybilny z MS -DOS komputer osobisty Mindset zawiera niestandardowy układ VLSI do przenoszenia prostokątnych fragmentów mapy bitowej. Sprzęt obsługuje przezroczystość i osiem trybów łączenia danych źródłowych i docelowych. Twierdzono, że Mindset ma grafikę do 50 razy szybszą niż ówczesne komputery kompatybilne z IBM PC , ale system nie odniósł sukcesu.
1985: Jednym z koprocesorów w komputerze osobistym Amiga jest blitter. Pierwszym zgłoszeniem patentowym w USA, w którym użyto terminu blitter , było „Urządzenie komputera osobistego do transferu bloków danych obrazu z mapą bitową”, przypisane firmie Commodore-Amiga, Inc. Blitter wykonuje dowolną operację logiczną na trzech wektorach bitowych o rozmiarze 16:
miejsce docelowe := op(źródło A, źródło B, źródło C)
1986: TMS34010 to 32-bitowy procesor ogólnego przeznaczenia z dodatkowymi instrukcjami podobnymi do blittera do manipulowania danymi bitmapowymi . Jest zoptymalizowany pod kątem przypadków, które wymagają dodatkowego przetwarzania na procesorze, takich jak obsługa przezroczystych pikseli, praca z danymi wyrównanymi bez bajtów i konwersja między głębiami bitowymi. TMS34010 służył zarówno jako procesor, jak i karta graficzna w wielu grach zręcznościowych, począwszy od 1988 roku z Narc , w tym Hard Drivin' , Smash TV , Mortal Kombat i NBA Jam . Był również używany w profesjonalnych kartach akceleratorów graficznych w latach 90.
1986: Intel 82786 jest programowalnym procesorem graficznym z instrukcją BIT_BLT
do przenoszenia prostokątnych fragmentów map bitowych.
1987: Karta graficzna IBM 8514 / A, wprowadzona wraz z komputerami IBM Personal System / 2 w kwietniu 1987 r., Zawiera sprzęt do przesyłania bloków bitów.
1987: Atari Mega ST 2 jest dostarczany z chipem typu blitter. Oficjalnie nazywany „Atari ST Bit-Block Transfer Processor”, stylizowany na BLiTTER, zapewnia 16 opcji łączenia danych źródłowych i docelowych. Blitter jest obsługiwany przez większość kolejnych maszyn ST.
1989: Krótko działająca stacja robocza Atari Transputer zawiera sprzęt blitter jako część swojego (opartego na Mega ST) systemu wideo „Blossom”.
1993: Ostatnia konsola do gier wyprodukowana przez Atari Corporation, Jaguar , jest dostarczana ze sprzętem typu blitter jako część niestandardowego układu „Tom”.
1996: Grupa VESA wprowadziła wspólny standardowy sposób dostępu do funkcji, takich jak sprzętowe przesyłanie bloków bitów (Bit Blt) z funkcjami VBE/akceleratora (VBE/AF) na komputerach PC. Wcześniej każda aplikacja DOS musiała być dostarczana z określonymi sterownikami karty graficznej. W systemie Windows każda karta graficzna miała własny sterownik i standardowy interfejs API do ich używania.
Operacja
Zwykle program komputerowy umieszcza informacje w określonych rejestrach sprzętowych, opisujące, jaki transfer pamięci należy wykonać i operacje logiczne, które należy wykonać na danych. Następnie procesor uruchamia blitter, aby zaczął działać. Procesor jest wolny na inne przetwarzanie, gdy blitter działa, chociaż równoległy blit wykorzystuje przepustowość pamięci.
Aby skopiować dane z całkowicie przezroczystymi pikselami — takimi jak duszki — niektóre urządzenia umożliwiają zignorowanie określonej wartości piksela, takiej jak kolor 0, podczas blitu. Te piksele nie są zapisywane w miejscu docelowym.
Innym podejściem w niektórych systemach jest użycie drugiego obrazu o rozdzielczości 1 bitu na piksel jako maski wskazującej , które piksele należy przesłać, a które pozostawić nietknięte. Maska działa jak szablon . Operacja logiczna to:
miejsce docelowe := (tło I NIE maska) OR sprite
Inne podejścia
Sprite'y sprzętowe to małe bitmapy, które mogą być umieszczane niezależnie, łączone w locie z tłem przez układ wideo, więc nie zachodzi żadna rzeczywista modyfikacja bufora ramki. Wadą sprite'ów jest limit ruchomych grafik na linię skanowania, który może wahać się od trzech ( Atari 2600 ) do ośmiu ( Rodzina Commodore 64 i Atari 8-bit ) do znacznie wyższych w przypadku 16-bitowych konsol i sprzętu do gier arkadowych ( Neo Geo może wyświetlają 96 sprite'ów na linię) oraz niemożność aktualizacji stałej mapy bitowej (co czyni je nieodpowiednimi do ogólnego przyspieszania graficznego interfejsu użytkownika).