블리터

**블리터**(Blitter)는 컴퓨터의 메모리 내에서 데이터의 신속한 이동 및 수정을 전담하는 회로로, 때로는 코프로세서나 마이크로프로세서의 논리 블록으로 존재한다. 블리터는 대량의 데이터를 한 메모리 영역에서 다른 메모리 영역으로 비교적 빠르게, 그리고 CPU와 병렬로 복사하여, CPU의 더 복잡한 기능을 다른 작업에 사용할 수 있도록 한다. 블리터의 일반적인 사용 사례는 그래픽 사용자 인터페이스의 창과 아이콘, 또는 2D 비디오 게임의 이미지와 배경과 같은 비트맵을 이동시키는 것이다. 이 이름은 1973년 제록스 알토의 비트 블릿 연산에서 유래했으며, 비트 블록 전송을 의미한다.access-date=2 October 2016 블릿 연산은 단순히 메모리를 복사하는 것 이상인데, 바이트 정렬되지 않은 데이터(따라서 비트 블릿의 '비트')를 처리하고, 투명 픽셀(대상에 덮어쓰지 않아야 하는 픽셀)을 처리하며, 소스와 대상 데이터를 결합하는 다양한 방법을 포함할 수 있기 때문이다. 블리터는 대부분 프로그래밍 가능한 그래픽 처리 장치로 대체되었다.
# 역사
하드웨어 가속 래스터 그래픽스가 없는 컴퓨터(1970년대와 1980년대 대부분의 가정용 컴퓨터와 1990년대 중반까지의 IBM PC 호환기종 포함)에서는 프레임버퍼가 일반적으로 CPU 접근 가능한 메모리에 저장된다. 그리기는 소프트웨어를 통해 프레임버퍼를 업데이트함으로써 이루어진다. 더 작은 이미지를 더 큰 이미지에 합성하거나(비디오 게임의 경우처럼) 채워진 직사각형을 그리는 것과 같은 기본적인 그래픽 루틴의 경우, 많은 양의 메모리를 조작해야 하며, 로드/저장 명령어의 짧은 루프를 가져오고 디코딩하는 데 많은 사이클이 소모된다. 이 시대의 일부 시스템은 이 작업을 소프트웨어에서 오프로드하기 위한 전용 하드웨어를 가지고 있었는데, 주로 스프라이트나 전용 텍스트 그리기 시스템 형태였지만, 1980년대에 시장이 비즈니스 애플리케이션으로 점차 전환됨에 따라 이러한 것들은 나중 기기에서 대부분 사라졌다. 프레임버퍼에 필요한 메모리 양을 줄이기 위해 시스템은 일반적으로 해상도나 표시할 수 있는 색상 수를 줄이는 다양한 그래픽 모드를 제공했다. 예를 들어, 흑백 디스플레이는 각 픽셀이 검은색인지 흰색인지를 정의하는 데 픽셀당 1비트만 필요하며, 따라서 단일 바이트에 8픽셀 상당의 데이터를 압축할 수 있다. 이는 디스플레이 업데이트를 복잡하게 만들다. 단일 픽셀이 변경되면 바이트를 읽고, 해당 픽셀에 대한 올바른 비트를 업데이트한 다음 다시 기록해야 한다. 팩 된 픽셀을 조작하려면 CPU에서 추가적인 시프트 및 마스킹 연산이 필요하다. 블리터는 데이터를 복사하거나 메모리 블록을 채우는 반복적인 작업을 CPU보다 빠르게 오프로드하기 위해 개발되었다. 이는 CPU와 병렬로 수행될 수 있으며, 투명으로 표시된 픽셀을 건너뛰거나 바이트 정렬되지 않은 데이터를 처리하는 등 수동으로 코딩하면 훨씬 느려질 특별한 경우도 처리할 수 있다.
## 컴퓨터 및 비디오 게임의 블리터
**1973:** 비트 블릿이라는 용어가 유래된 제록스 알토는 마이크로코드로 구현된 비트 블록 전송 명령어를 가지고 있어, CPU에서 작성된 동일한 연산보다 훨씬 빠르다.website=Ken Shirriff's Blog 이 마이크로코드는 댄 잉걸스가 구현했다. **1978:** 밸리 아스트로케이드 가정용 콘솔은 원시적인 블리터 하드웨어를 가지고 있다.first1=Lance **1982:** NEC μPD7220 비디오 디스플레이 프로세서는 도형 기본 요소를 그리는 것 외에도 직접 메모리 접근을 통해 직사각형 비트맵을 디스플레이 메모리로 전송하고 화면의 직사각형 부분을 채울 수 있다.date=18 July 2018archive-date=2012-06-16 이 디자인은 인텔에 라이선스되어 82720 그래픽 디스플레이 컨트롤러로 판매되었다. **1982:** 윌리엄스 일렉트로닉스의 로보트론: 2084 아케이드 비디오 게임은 동시에 최대 80개의 움직이는 객체를 가질 수 있도록 하는 두 개의 블리터 칩을 포함한다.url=https://books.google.com/books?id=oK3D4i5ldKgC&q;=early+blitter+hardware&pg;=PA185 성능은 대략 910KB/초로 측정되었다. 이 블리터는 4비트(16색) 픽셀에서 작동하며, 색상 0은 투명하여 비직사각형 모양을 허용한다. 윌리엄스는 시니스타, 자우스트를 포함한 당시의 다른 게임에서도 동일한 하드웨어를 사용했다.url=http://seanriddle.com/blitter.html **1984:** MS-DOS 호환 마인드셋 개인용 컴퓨터는 비트맵의 직사각형 부분을 이동시키는 맞춤형 VLSI 칩을 포함한다. 이 하드웨어는 투명도를 처리하고 소스 및 대상 데이터를 결합하는 8가지 모드를 지원한다.url=https://archive.org/stream/byte-magazine-1984-04/1984_04_BYTE_09-04_Real-World_Interfacing#page/n270/mode/2up 마인드셋은 당시 IBM PC 호환기종보다 그래픽이 최대 50배 빠르다고 주장되었지만,url=http://www.atarimagazines.com/creative/v11n2/50_Mindset_micro_pushing_th.php 이 시스템은 성공하지 못했다. **1985:** 아미가 개인용 컴퓨터의 코프로세서 중 하나는 블리터이다. "비트맵 이미지 데이터의 블록 전송을 위한 개인용 컴퓨터 장치"라는 용어를 사용한 최초의 미국 특허 출원은 코모도어 아미가(Commodore-Amiga, Inc.)에 배정되었다.url = https://patents.google.com/patent/US4874164 이 블리터는 크기 16의 세 비트 벡터에 대해 임의의 불리언 연산을 수행한다. :`destination := op(source A, source B, source C)` **1986:** TMS34010은 비트맵 데이터를 조작하기 위한 `PIXBLT`(픽셀 블록 전송)를 포함한 내장 명령어를 가진 범용 32비트 프로세서이다. 투명 픽셀 처리, 바이트 정렬되지 않은 데이터 작업, 비트 깊이 간 변환과 같이 소프트웨어로 구현하면 추가 처리가 필요한 경우에 최적화되어 있다. `PIXBLT`는 소스와 대상 데이터를 결합하는 22가지 방법을 제공한다.date=December 1986 TMS34010은 1988년 나르크를 시작으로 하드 드라이빙, 스매시 TV, 모탈 컴뱃, NBA 잼을 포함한 다수의 아케이드 게임에서 CPU와 GPU 역할을 모두 수행했다.url-status=dead 또한 1990년대 그래픽 가속 보드에도 사용되었다. **1987:** 1987년 4월 IBM 퍼스널 시스템/2 컴퓨터와 함께 도입된 IBM 8514/A 디스플레이 어댑터는 비트 블록 전송 하드웨어를 포함한다.website=OS/2 Museum 아타리 ST BLiTTER 칩 **1987:** 아타리 메가 ST 2는 블리터 칩과 함께 출시되었다.website=Centre for Computing History 공식적으로 "아타리 ST 비트 블록 전송 프로세서"(BLiTTER로 양식화)라고 불리며, 소스 및 대상 데이터를 병합하는 16가지 옵션을 제공한다.date=June 17, 1987 이 블리터는 이후 대부분의 ST 시스템에서 지원된다. **1989:** 단명했던 아타리 트랜스퓨터 워크스테이션은 (메가 ST 기반) "블로썸" 비디오 시스템의 일부로 블리터 하드웨어를 포함한다.url=http://www.atarimagazines.com/startv4n4/transputer.html **1989:** 아타리 링크스 컬러 휴대용 게임 시스템은 스케일링 및 왜곡 효과를 가진 맞춤형 블리터를 가지고 있다. **1993:** 아타리 재규어 게임 콘솔은 맞춤형 "톰" 칩의 일부로 블리터 하드웨어를 가지고 있다.url=https://www.hillsoftware.com/files/atari/jaguar/jag_v8.pdf **1996:** VESA 그룹은 VBE/가속기 기능(VBE/AF)을 통해 IBM PC 호환 기종에서 하드웨어 비트 블록 전송과 같은 기능에 접근하는 표준화된 방법을 도입했다.
# 작동
스프라이트 (왼쪽) 및 관련 마스크 일반적으로 컴퓨터 프로그램은 완료해야 할 메모리 전송과 데이터에 수행할 논리 연산을 설명하는 정보를 특정 하드웨어 레지스터에 넣는다. 그러면 CPU는 블리터가 작동을 시작하도록 트리거한다. CPU는 블리터가 작동하는 동안 다른 처리를 위해 자유롭지만, 병렬로 실행되는 블리터는 메모리 대역폭을 사용한다. 완전히 투명한 픽셀(스프라이트와 같은)을 가진 데이터를 복사하기 위해 일부 하드웨어는 블릿 동안 특정 픽셀 값(예: 색상 0)을 무시하도록 허용한다. 해당 픽셀은 대상에 기록되지 않는다. 일부 시스템의 또 다른 접근 방식은 전송할 픽셀과 그대로 둘 픽셀을 나타내는 마스크로 사용되는 두 번째 픽셀당 1비트 이미지를 사용하는 것이다. 이 마스크는 스텐실처럼 작동한다. 논리 연산은 다음과 같다. :`destination := (background AND NOT mask) OR sprite`
# 다른 접근 방식
스프라이트 (컴퓨터 그래픽스) 하드웨어 스프라이트는 비디오 칩에 의해 실시간으로 배경과 함께 합성되는 작은 비트맵으로, 독립적으로 위치를 지정할 수 있다. 프레임버퍼는 수정되지 않는다.url-status=dead 스프라이트의 단점은 스캔라인당 움직이는 그래픽 수의 제한인데, 이는 세 개(아타리 2600)에서 여덟 개(코모도어 64 및 아타리 8비트 제품군)까지 다양하며, 16비트 콘솔 및 아케이드 하드웨어의 경우 훨씬 더 높다(네오지오 (시스템)는 한 줄에 96개의 스프라이트를 표시할 수 있다). 영구 비트맵을 업데이트할 수 없으므로 일반적인 데스크톱 GUI 가속에는 적합하지 않다.