Blitter - Blitter

Blittera jest układem, czasami jako koprocesora lub bloku logicznego na mikroprocesorze , przeznaczonych do szybkiego przepływu i modyfikacji danych wewnątrz komputera pamięci . Blitter może stosunkowo szybko kopiować duże ilości danych z jednego obszaru pamięci do drugiego, równolegle z procesorem , jednocześnie uwalniając bardziej złożone możliwości procesora dla innych operacji. Typowym zastosowaniem blitter jest przesuwanie mapy bitowej , takiej jak okna i czcionki w graficznym interfejsie użytkownika lub obrazy i tła w grze wideo 2D. Nazwa pochodzi od operacji bitowej Xerox Alto z 1973 roku , która oznacza transfer bloków bitowych. Operacja blit to coś więcej niż kopia pamięci, ponieważ może obejmować dane, które nie są wyrównane bajtami (stąd bit w bitach ), obsługę przezroczystych pikseli (piksele, 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 sprzętowej akceleracji grafiki rastrowej , która obejmuje 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 komponowanie mniejszego obrazu w większy (na przykład w przypadku gry wideo) lub rysowanie wypełnionego prostokąta, należy manipulować dużą ilością pamięci i spędzać wiele cykli na pobieraniu i dekodowaniu krótkich pętli ładowania/ przechowywać instrukcje. W przypadku procesorów bez pamięci podręcznej wymagania magistrali dla instrukcji są tak samo ważne jak dane. Aby zmniejszyć rozmiar bufora ramki, pojedynczy bajt niekoniecznie odpowiada pikselowi, ale zawiera 8 jednobitowych pikseli, 4 dwubitowe piksele lub parę 16-bitowych pikseli. Manipulowanie spakowanymi 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 przez procesor. 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 do bajtów.

Blittery w komputerach i grach wideo

1973: Xerox Alto , gdzie termin nieco blit pochodzi, jest instrukcja nieco przelew realizowany w bloku mikrokodu , co czyni go znacznie szybciej niż samej operacji napisane na CPU. Mikrokod został zaimplementowany przez Dana Ingallsa .

1982: Oprócz rysowania podstawowych kształtów, procesor wyświetlania wideo NEC µPD7220 może przesyłać prostokątne mapy bitowe do pamięci wyświetlania poprzez bezpośredni dostęp do pamięci i wypełniać prostokątne części ekranu.

1982: Robotron: 2084 gra zręcznościowa wideo z Williams Electronics zawiera dwa układy blittera które umożliwiają grę mieć maksymalnie 80 jednocześnie poruszających się obiektów. Wydajność została zmierzona na poziomie około 910 KB/sekundę. Blitter działa na 4-bitowych (16 kolorów) pikselach, gdzie kolor 0 jest przezroczysty, co pozwala na tworzenie nieprostokątnych kształtów. Williams używał tego samego sprzętu w innych grach z tamtego okresu, w tym Sinistar i Joust .

1984: MS-DOS kompatybilny Mindset komputer osobisty zawiera niestandardową VLSI procesor poruszania prostokątne przekroje bitmapy. 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ż komputery PC w tamtych czasach, ale system nie odniósł sukcesu.

1985: Jeden z koprocesorów sprzętowych w komputerze osobistym Amiga jest blitterem. Pierwszym zgłoszeniem patentowym w USA, w którym użyto terminu blitter, był „Personal computer device for block transfer of bit-mapped image data” przyznany firmie Commodore-Amiga, Inc. Blitter wykonuje dowolną operację logiczną na trzech wektorach bitowych o rozmiarze 16:

destination := op(source A, source B, source C)

1986 TMS34010 jest ogólnego przeznaczenia 32-bitowy procesor dodatkowe blitter jak instrukcje obróbki danych mapy bitowej. Jest zoptymalizowany pod kątem przypadków, w których procesor wymaga dodatkowego przetwarzania, takich jak obsługa przezroczystych pikseli, praca z danymi niezrównanymi bajtami i konwersja między głębiami bitowymi. TMS34010 służył zarówno jako procesor, jak i karta graficzna w wielu grach arkadowych, począwszy od 1988 roku od Narc, w tym Hard Drive , Smash TV , Mortal Kombat i NBA Jam. Był również używany w profesjonalnych akceleratorach graficznych w Lata 90.

1986: Intel 82786 to programowalny procesor graficzny z BIT_BLTinstrukcją przesuwania prostokątnych sekcji bitmap.

1987: Karta graficzna IBM 8514/A , wprowadzona wraz z komputerami IBM Personal System/2 w kwietniu 1987, zawiera sprzęt do transferu bloków bitów.

Chip Atari ST Blitter

1987: Atari Mega ST 2 statki z chipem blittera. 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 komputerów ST, w tym późniejsze wersje komputerów domowych STfm klasy podstawowej.

1989: Krótkotrwała stacja robocza Atari Transputer zawiera sprzęt blitter jako część systemu wideo „Blossom” (opartego na Mega ST).

1993: Ostatnia konsola do gier wyprodukowana przez Atari Corporation, Jaguar , jest dostarczana ze sprzętem blitter jako częścią niestandardowego układu „Tom”.

Operacja

Sprites (po lewej) i maski (po prawej)

Zazwyczaj program komputerowy umieszcza w pewnych rejestrach informacje opisujące, jaki transfer pamięci należy zakończyć i jakie operacje logiczne należy wykonać na danych. Następnie procesor uruchamia blitter, aby rozpocząć pracę. Procesor jest wolny dla innych procesów, podczas gdy blitter działa, chociaż blit działający równolegle wykorzystuje przepustowość pamięci.

Aby skopiować dane z częściami przezroczystymi — takimi jak sprite — można oznaczyć kolor, który będzie ignorowany podczas blitów (np. kolor 0). W innych systemach drugi obraz 1 bit na piksel może być używany jako „maska” wskazująca, które piksele należy przenieść, a które pozostawić nietknięte (patrz obraz po prawej). Maska działa jak szablon . Logiczną operacją dla systemu transparentnego koloru (po zsumowaniu OR bitów pikseli w celu określenia, czy piksel ma kolor 0), jest destination := (background AND NOT mask) OR sprite. W przypadku oddzielnej, wstępnie obliczonej płaszczyzny maski, w której zarówno zamaskowane, jak i niezamaskowane piksele mogą być dowolnym wpisem w palecie / kombinacją bitów 0 i 1 (i w poprzedniej operacji potencjalnie kolidowałyby z tłem, nawet gdyby były rzekomo zamaskowane), Operacja jest destination := (background AND NOT mask) OR (sprite AND mask)(nadal trzy wejścia, ale z użyciem jednego z nich dwukrotnie), podobna w działaniu do metody opartej na XOR wykorzystywanej przez renderowanie programowe (np. 1-bitowych wskaźników myszy z maską we wczesnych monochromatycznych lub kolorowych bitplane GUI, z dowolnymi dodatkowe bitplany, wszystkie przyciśnięte do 0 w zamaskowanych obszarach).

Inne podejścia

Sprity sprzętowe to małe bitmapy, które mogą być pozycjonowane niezależnie, połączone z tłem w locie przez układ wideo, dzięki czemu nie zachodzi żadna rzeczywista modyfikacja bufora ramki. Systemy sprite są bardziej wydajne w przypadku przenoszenia grafiki, zwykle wymagają 1/3 cykli pamięci, ponieważ pobierane są tylko dane obrazu — a nie instrukcje procesora — a późniejsza kompozycja odbywa się na chipie. Minusem sprite'ów jest limit przesuwania grafiki na linię skanowania, który może wynosić od trzech ( Atari 2600 ) do ośmiu ( Commodore 64 i rodzina 8-bitowa Atari ) do znacznie wyższego dla 16-bitowych arkad i konsol, oraz brak możliwości aktualizować stałą bitmapę (co powoduje, że nie nadają się do ogólnego przyspieszania graficznego interfejsu użytkownika).

Zobacz też

Bibliografia

  1. ^ a b c Shirriff, Ken. „Przywracanie YCombinator's Xerox Alto dzień 5: Śledzenie mikrokodów za pomocą analizatora stanów logicznych” . Blog Kena Shirriffa .
  2. ^ "Funkcja BitBlt" . Sieć deweloperów systemu Windows . Microsoft . Źródło 2 października 2016 .
  3. ^ Peddie, Jon. „Słynne układy graficzne: kontroler wyświetlacza graficznego NEC µPD7220” . komputer.org .
  4. ^ „Podręcznik użytkownika: NEC µPD7220/7220A” (PDF) . Elektronika NEC. Grudzień 1985. Zarchiwizowane z oryginału (PDF) w dniu 16.06.2012.
  5. ^ B Wilk, Mark JP (czerwiec 2012). Przed krachem: wczesna historia gier wideo . Wydawnictwo Uniwersytetu Stanowego Wayne'a. P. 185. ISBN 9780814334508.
  6. ^ a b Riddle, Sean. „Informacje o blistrze” .
  7. ^ Williams, Gregg (kwiecień 1984). „Przegląd produktu: komputer osobisty Mindset” . Magazyn bajtów . 9 (4): 278–280.
  8. ^ Anderson, John J. (luty 1985). „Mindset Micro: Przesuwanie koperty, czy cokolwiek stało się z innowacjami?” . Kreatywne przetwarzanie . 11 (2): 50.
  9. ^ „W opisie patentowym US 4874164«Osobiste urządzenie komputerowe do przesyłania bloku bitów danych obrazu odwzorowany » .
  10. ^ "Lista gier dla gier uruchomionych na procesorze TMS34010" . mamedb.com . Zarchiwizowane od oryginału w dniu 2016-03-04 . Źródło 2016-05-15 .
  11. ^ 82786 Podręcznik użytkownika koprocesora graficznego . Intel. 1988. s. 2-29.
  12. ^ Necasek, Michał. „Akcelerator grafiki 8514/A” . Muzeum OS/2 .
  13. ^ "Atari Mega ST 2" . Centrum Historii Informatyki .
  14. ^ "Instrukcja obsługi procesora transferu bitów Atari ST" . archiwum.org . Korporacja Atari. 17 czerwca 1987 r.
  15. ^ Rosenthal, marszałek M. (listopad 1989). „The Transputer Connection: Ekskluzywny wywiad z dr Timem Kingiem z Perihelion” . START . 4 (4).
  16. ^ „Instrukcja techniczna Tom & Jerry” (PDF) . Luty 2001. s. 4-5.
  17. ^ Haga, James. „Dlaczego istnieją dedykowane konsole do gier?” . Programowanie w XXI wieku . Zarchiwizowane od oryginału w dniu 2018-04-23 . Źródło 2019-09-03 .