텔레비전 인터페이스 어댑터
Television Interface Adaptor![]() |
TIA(Television[1] Interface Adaptor, TIA)는 MOS Technology 6502의 변종과 함께 1977년 제작된 Atari Video Computer System 게임기의 핵심인 커스텀 컴퓨터 칩이다.TIA는 화면 디스플레이를 생성하고, 음향 효과를 발생시키며, 컨트롤러를 읽는다.아타리 VCS가 설계될 당시에는 소량의 RAM조차 비쌌다.이 칩은 프레임 버퍼가 없는 것을 중심으로 설계되었으며, 대신 간단한 디스플레이를 만들기 위해 세부적인 프로그래밍이 필요했다.[2]
CO10444/CO11903[3] TIA의 개발은 Atari에서 계속한 Jay Miner가 ANTIC와 CTIA/GTIA 칩을 탑재한 Atari 400/800 컴퓨터용 TIA 설계를 확장하면서 주도했다.제이 마이너는 후에 아미가 컴퓨터의 주문 제작 칩 설계를 주도했다.
디자인
배경
1975년경 스티브 메이어와 론 밀너가 이끄는 시안엔지니어링의 아타리의 엔지니어들은 아케이드 비디오 게임과 홈 비디오 게임 콘솔을 위한 애플리케이션별 집적회로(ASIC)와 같은 전용 하드웨어 개발의 대안을 검토해 왔다.프로그램 가능한 마이크로프로세서가 시장에 도달했지만, 아타리는 마이크로프로세서가 가정용 어플리케이션에 비해 너무 비싸다고 생각했다.[4]그것들은 또한 그래픽을 표시하는 옵션에서 비용에 의해 제한되었다.이 때 대부분의 컴퓨터 그래픽은 플레이필드 위에 그려진 스프라이트를 사용하여 생성되었고, 그 다음에는 CRT 비디오 모니터에 표시하기 위한 아날로그 신호로 변환되었다.[5]스프라이트는 프레임 버퍼에 비트맵으로 고정되어 랜덤 액세스 메모리(RAM)가 필요했다. 램은 여전히 비싸서 메가바이트당 수만 달러였으며,[6] 80×48 디스플레이에 두 가지 색상의 플레이필드를 전시하는 데는 수천 달러의 메모리가 소요되었다.[4]기존의 NTSC 컬러 텔레비전에서는 일반적으로 최대 해상도가 라인당 256~320픽셀, 화면당 192~240픽셀 사이였다.[7]
1975년 9월, MOS Technology는 시장에 출시된 최초의 저가 마이크로프로세서 중 하나인 6502 마이크로프로세서를 선보였다.메이어와 밀너는 6502를 그들의 프로그램 가능한 비디오 게임 콘솔의 기초로 사용하는 것에 대해 칩의 디자이너 척 페들에게 이야기하기로 했다.2, 3일 동안 아타리 VCS의 기본설계가 마련되었는데, 페들에서는 아타리에게 저비용 MOS Technology 6507 프로세서를, MOS Technology 6532 RAM-I/O-Timer(RIOT)를 디자인의 핵심으로 사용하고 있다.[8]6502 테스트베드 시스템 맨 위에 있는 디스플레이 어댑터의 브레드보드 프로토타입을 사용하여 Milner는 그들의 탱크 게임의 간단한 버전을 프로그래밍하는 능력을 증명할 수 있었다.조 데쿠이르는 밀너의 개념 증명서를 기능적 프로토타입으로 전환하는 것을 돕기 위해 고용되었는데, 아타리가 개발을 계속할 수 있도록 승인하기에 충분하다.[4]
Decuir가 시스템의 나머지 부분에 대한 설계를 하는 동안 Jay Miner는 디스플레이 어댑터를 위한 ASIC를 만드는 데 주력했다.[4]초기에 ASIC 디스플레이 어댑터는 TIA(Television Interface Adapter)로 명명되었다.[4]RAM의 가격은 팀이 설계를 시작하면서 높은 수준을 유지했고, 따라서 메모리 기반 프레임 버퍼를 사용할 수 있는 옵션이 TIA의 디자인에서 떨어졌다.[4]
램리스 디자인
RAM이 부족해 TIA는 5개의 이동식 그래픽 객체(2 플레이어, 미사일 2개, 볼 1개)와 정적 플레이필드 객체를 조작해 화면의 이미지를 구성한다는 점에서 기존의 프레임 버퍼 방식과 다르다.이것들은 모두 프레임 버퍼 맵 모델에서 사용되는 기법과 달리 각각의 레지스터에서 모든 스캔 라인에서 생성되며 프로그램이 모든 스캔 라인에서 이를 업데이트해야 한다.[9]수평 해상도는 크기가 특정 그래픽 객체에 따라 달라지기 때문에 균일하지 않다.픽셀의 가장 작은 단위는 칩의 1컬러 클럭 사이클에 해당하며, 그 중 160개가 선에 보인다.[9]
플레이필드 객체는 2개 반 바이트 레지스터(20비트 폭)로 구성되며, 총 40비트(각 비트 폭 4컬러 사이클) 동안 화면의 오른쪽 절반에 대칭적으로 반사되거나 그대로 복사될 수 있다.비트가 1 또는 0일 경우 그려진 색상은 최대 128색(아래 참조)의 사전 정의된 팔레트에서 선택하여 다른 레지스터에 보관했다.
TIA는 또한 다음과 같이 구성된 5개의 개별 그래픽 객체를 지원했다.
- '스프리트' 플레이어 1과 플레이어 2를 구성하는 두 개의 8픽셀 수평선.이들은 단일 색상으로, 2배 또는 4배수로 늘릴 수 있으며, 중복되거나 3배복될 수 있다.
- '볼' - 플레이필드와 동일한 색상의 수평선.그것은 폭이 1픽셀, 2픽셀, 4픽셀 또는 8픽셀이 될 수 있다.
- 두 개의 '미사일' - 각각의 선수와 같은 색상의 또 다른 수평선.그것은 폭이 1픽셀, 2픽셀, 4픽셀 또는 8픽셀이 될 수 있다.
램 기반 프레임 버퍼가 없으면 충돌 감지도 복잡하다.TIA는 15개의 세트/리셋 플립플롭을 사용하여 이러한 모든 물체에 대한 하드웨어 충돌 감지 기능을 갖추고 있으며, 일반적으로 VBLINK 기간 동안 읽히는 충돌 비트맵을 저장한다.[4]TIA의 레지스터는 프로그래머가 그래픽 객체의 위치 및 색상을 제어할 수 있도록 한다.
TIA는 또한 1비트 사운드의 두 채널을 제공한다.각 채널은 32개의 피치 값과 16개의 가능한 비트 시퀀스를 제공한다.4비트 볼륨 조절 기능이 있다.[4]
마지막으로 TIA에는 전위차계를 사용하여 아날로그 패들 컨트롤러를 최대 4개까지 판독하고 조이스틱 트리거를 2개까지 판독할 수 있는 입력이 있다.[4]
디스플레이 그리기
레지스터는 디스플레이의 한 줄에 대한 데이터만 저장하기 때문에 전체 화면을 만들려면 게임 프로그램이 레지스터를 즉시 업데이트해야 하는데, 이것은 "빔을 이동"하는 과정이다.[10]
이 과정을 시작하기 위해 MOS Technology 6502 기반 CPU에서 실행되는 게임 프로그램은 TIA의 레지스터를 디스플레이의 첫 선을 그리는 데 필요한 데이터로 로딩한다.그런 다음 TIA는 텔레비전이 (TIA의 관련 아날로그 하드웨어의 명령에 따라) 선을 그릴 준비가 될 때까지 기다렸다가 레지스터를 판독하여 해당 라인에 대한 신호를 생성한다.라인 사이의 수평 블랭킹 기간 동안 6502는 다음 라인에 필요한 TIA의 레지스터를 빠르게 변경한다.이 과정은 화면을 통해 계속된다.
이는 2600년 MOS Technology 6507이 하드웨어 인터럽트에 대한 지원이 없는 6502의 핀 축소 버전이기 때문에 더욱 어려워진다.일반적으로 디스플레이 시스템의 아날로그 쪽은 래스터 라인 그리기를 마치고 다음 라인을 준비 중일 때 인터럽트를 발생시킨다.인터럽트는 화면 업데이트에 필요한 코드를 트리거한 다음 "메인" 프로그램으로 돌아간다.6507은 비용을 절약하기 위해 CPU에서 이러한 핀을 빼냈지만, CPU 버스 사이클에 대기 상태를 삽입하기 위한 "RDY" 핀을 가지고 있다.TIA는 RDY 핀을 사용하여 CPU를 TIA가 생성한 비디오의 래스터 라인 타이밍과 동기화하도록 특별히 설계되었다. CPU가 TIA의 특정 레지스터 주소에 쓸 때 TIA는 다음 라인의 시작인 "동기화 대기" 명령까지 RDY 출력 신호를 낮춘다.[4]이것은 다음 라인의 시작(컬러 클럭 사이클 0)까지 CPU의 작동을 정지시켜 자동 동기화를 측정한다.이 메커니즘의 의도된 용도는 CPU가 TIA가 현재 라인의 끝에 도달하기 전에 다음 라인에 대한 TIA 레지스터를 설정한 다음 RDY를 통해 동기화 지연을 트리거하는 레지스터에 기록함으로써 보다 쉬운 비디오 타이밍 동기화의 이점을 위해 CPU 시간의 가변량을 버리는 것이다.[4]
또한 TIA는 수직 동기 타이밍 신호만 반자동으로 생성한다(각 비디오 프레임의 끝과 다음 신호의 시작을 표시).TIA는 아날로그 출력 비디오 신호에 수직 동기 신호를 삽입할 수 있지만 프레임 라인 카운터가 없어 프레임이 언제 끝나야 하는지 알 수 없다.대신 CPU 프로그램에 맡겨 수직 동기 신호를 트리거하고 각 프레임의 라인을 카운트하여 수직 동기 신호가 생성되어야 하는 시기를 결정한다.RDY 대기 하드웨어와 마찬가지로, 수직 동기 신호는 CPU가 특정 TIA 레지스터 주소에 기록함으로써 트리거된다.만약 그 주소에 대한 쓰기가 전혀 이루어지지 않고 TIA가 자유주행을 허용한다면, 그것은 하나의 무한대의 활성 래스터 라인을 생성하게 될 것이고, 이것은 일반적으로 TV에 롤링 그림으로 나타나게 될 것이다.Atari 2600에 대해 출판된 대부분의 게임은 262 회선 또는 263 회선 후에 수직 동기화를 생성했다(그러나 결과 비디오 디스플레이가 일반 TV에서 수직으로 롤링하지만 TIA에 관한 어떤 것도 그것이 어떤 길이, 짧거나 더 긴 프레임도 생성하지 못하게 한다).
TIA 프로그래밍의 이것들과 다른 세부사항들은 프로그래머들이 다양한 화면 관련 이벤트에 필요한 정확한 사이클 수로 실행하기 위해 프로그램 시간을 신중하게 정해야 한다는 것을 의미한다.이걸 잘못 알아낸다는 건 화면이 제대로 그려지지 않았다는 뜻이다.이를 수행하는 프로그램의 부분을 해당 프로그램의 "커널"이라고 한다.[11]
이러한 복잡성을 감안할 때, 시스템을 사용하는 초기 게임들은 배치에서 간단한 경향이 있었고, TIA를 사용하여 플레이어가 위에 있는 대칭적인 플레이 필드를 만들었다.아타리가 이미 탱크나 퐁처럼 생산한 소수의 아케이드 게임을 운영한다는 것이 이 제도의 본래의 의도였다.이 경우 플레이필드 데이터는 일반적으로 게임 카트리지의 2kB ROM 메모리에 배치되었다.각 라인은 20비트의 데이터를 사용했고, NTSC 디스플레이에는 192개의 라인이 있었기 때문에, 각 라인마다 다른 레이아웃을 가진 디스플레이는 하드 코딩된 하나의 디스플레이를 보유하기 위해 카트리지의 4kB 중 480바이트(192 x 20 / 8)만 필요했다.[12]이 경우 커널은 TIA가 화면을 향해 전진함에 따라 모든 라인에 대해 ROM을 통해 20비트를 간단히 전진시켰는데, 이는 CPU 시간의 몇 사이클밖에 걸리지 않는 작업이다.이것은 동일한 데이터를 여러 라인에 사용하거나, 수직으로 두 배로 증가시키거나, 상단의 리스트를 한 방향으로 읽거나, 하단의 다른 방향으로 읽음으로써, 수직으로 미러링된 240바이트의 디스플레이를 만들어냄으로써 더욱 줄일 수 있다.
중요한 진전은 적 외계인을 그리기 위해 더 많은 플레이어 그래픽을 필요로 하는 플랫폼에 대한 스페이스 인베더스의 허가였다.해결책은 이미지가 그려질 때 모든 라인에 대한 플레이어 데이터를 변경하여 명백히 많은 수의 플레이어가 생성되는 것이었다.디스플레이를 ROM에 고정된 데이터로 저장하는 대신 CPU 명령으로 코딩(부분적으로)하는 방식으로 또 다른 진전이 이뤄졌다.어드벤처에서는 이 개념을 사용하여 ROM에 있는 데이터의 서로 다른 부분을 결합하여 화면 도면을 통해 앞뒤로 점프하여 다양한 지도를 제작한다.[13]이것은 이 게임이 30개의 방을 가질 수 있게 해주었고 그렇지 않았다면 14 kB의 ROM이 필요했을 것이다.
프로그래머들이 화면상에서 제대로 작동하는 데 필요한 이상한 타이밍에 점점 익숙해짐에 따라, 그들은 디스플레이를 크게 향상시키기 위해 TIA에 내재된 유연성을 사용하기 시작했다.한 가지 일반적인 기법은 플레이 필드의 1과 0 상태를 그리는 데 사용된 색상 레지스터를 변경하여 무지개 같은 효과를 가진 디스플레이를 만드는 것이었다.이후 게임은 플레이필드 중간선을 수정하여 비대칭 패턴을 생성하고, 플레이어의 위치를 조정하고, 화면 중간 스프라이트를 변경하여 추가 스프라이트를 생성할 수 있다.
TIA 색상 기능
TIA는 사용되는 텔레비전 신호 형식에 따라 다른 색상 팔레트를 사용한다.NTSC 형식(부품 번호 CO10444)의 경우 128색 팔레트가 제공되며, PAL(부품 번호 CO11903)은 104색만 사용할 수 있다.[3][3]또한 SECAM 팔레트는 8가지 색상으로만 구성된다.
NTSC 팔레트
휘도 빛깔을 내다 | 0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 |
---|---|---|---|---|---|---|---|---|
0 | ||||||||
1 | ||||||||
2 | ||||||||
3 | ||||||||
4 | ||||||||
5 | ||||||||
6 | ||||||||
7 | ||||||||
8 | ||||||||
9 | ||||||||
10 | ||||||||
11 | ||||||||
12 | ||||||||
13 | ||||||||
14 | ||||||||
15 |
PAL 팔레트
휘도 빛깔을 내다 | 0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 |
---|---|---|---|---|---|---|---|---|
0,1,14,15 | ||||||||
2 | ||||||||
3 | ||||||||
4 | ||||||||
5 | ||||||||
6 | ||||||||
7 | ||||||||
8 | ||||||||
9 | ||||||||
10 | ||||||||
11 | ||||||||
12 | ||||||||
13 |
SECAM 팔레트
0 | 2 | 4 | 6 | 8 | 10 | 12 | 14 |
---|---|---|---|---|---|---|---|
노이즈/톤 발생기(AUD0/1)
TIA는 두 개의 오실레이터(또는 채널) AUD0과 AUD1에 대해 다양한 유형의 펄스 및 노이즈 출력을 생성할 수 있다. 각 오실레이터에는 파형을 조작하는 5비트 주파수 분배기와 4비트 오디오 제어 레지스터가 있다.채널당 4비트 볼륨 조절 레지스터도 있다.
주파수 분배기(AUDF0/1)
주파수는 30kHz를 취하고 제공된 5비트 값으로 나누어 생성된다.그 결과 음을 분리할 수 있는 값싼 주파수 분할기와 홀수 튜닝된 주파수가 나온다.작곡가가 주파수 한계 내에서 작업하거나 바이브라토 튜닝된 음을 만들기 위해 분리된 두 주파수 사이에서 변조하지 않는 한 TIA는 음악 칩이 아니다.
오디오 컨트롤(AUDC0/1)
오디오 컨트롤 레지스터는 펄스 파형을 생성하고 조작하여 복잡한 펄스나 노이즈를 생성한다.다음 표(설계된 중복 항목 포함)는 음조가 생성되는 방법을 설명한다.
헥스 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 소음 또는 분할 유형 |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 1로 설정(볼륨만) | ||||
1 | 0 | 0 | 0 | 1 | 4비트 폴리 | ||||
2 | 0 | 0 | 1 | 0 | ÷ 15 → 4비트 폴리 | ||||
3 | 0 | 0 | 1 | 1 | 5비트 폴리 → 4비트 폴리 | ||||
4 | 0 | 1 | 0 | 0 | ÷ 2 | ||||
5 | 0 | 1 | 0 | 1 | ÷ 2 | ||||
6 | 0 | 1 | 1 | 0 | ÷ 31 | ||||
7 | 0 | 1 | 1 | 1 | 5비트 폴리 → ÷ 2 | ||||
8 | 1 | 0 | 0 | 0 | 9비트 폴리(흰색 노이즈) | ||||
9 | 1 | 0 | 0 | 1 | 5비트 폴리 | ||||
A | 1 | 0 | 1 | 0 | ÷ 31 | ||||
B | 1 | 0 | 1 | 1 | 마지막 4비트를 1로 설정 | ||||
C | 1 | 1 | 0 | 0 | ÷ 6 | ||||
D | 1 | 1 | 0 | 1 | ÷ 6 | ||||
E | 1 | 1 | 1 | 0 | ÷ 93 | ||||
F | 1 | 1 | 1 | 1 | 5비트 폴리 ÷ 6 |
참조
- ^ "I. Theory of Operation". Atari Video Computer System Field Service Manual - Model 2600/2600A Domestic (PDF). Rev. 02. Atari, Inc. January 21, 1983. pp. 1–4. Archived from the original (PDF) on February 15, 2017. Retrieved September 10, 2010.
- ^ Hague, James (September 10, 2013). "Why Do Dedicated Game Consoles Exist?". Programming in the Twenty-First Century.
- ^ a b c Stilphen, Scott (February 5, 2020). "ATARI VCS/2600 TIA CHIPS". Retrieved February 24, 2020.
- ^ a b c d e f g h i j k Decuir, Joe (July 2015). "Atari Video Computer System: Bring Entertainment Stories Home". IEEE Consumer Electronics Magazine: 59–66. doi:10.1109/MCE.2015.2421572.
- ^ Chris Crawford, "ANTIC and Display List", De Re Atari
- ^ McCallum, John C. (February 13, 2012). "Memory Prices (1957-2012)". jcmit.net. Archived from the original on October 26, 2012. Retrieved October 27, 2012.
- ^ 몽포트 & 보고스트, 페이지 27
- ^ Goldberg, Marty; Vendel, Curt (2012). "Chapter 5". Atari Inc: Business is Fun. Sygyzy Press. ISBN 978-0985597405.
- ^ a b 라이트, 스티브.1979년 12월 3일 (스페인어로) "스텔라 프로그래머 가이드"2016년 3월 5일 보관함.
- ^ Kohler, Chris (March 13, 2009). "Racing the Beam: How Atari 2600′s Crazy Hardware Changed Game Design". Wired. Archived from the original on July 12, 2014.
- ^ 몽포트 & 보고스트, 34 페이지
- ^ PAL에 대한 자세한 내용은 2011년 5월 24일 웨이백 머신에 보관된 "Atari 2600 사양"을 참조하십시오.
- ^ 노스캐롤라이나 대학 '어드벤쳐' 로빈트, 워렌2018년 1월 27일 보관.
원천
- Montfort, Nick; Bogost, Ian (2009). Racing the Beam: the Atari Video Computer System. MIT Press. ISBN 0-262-01257-X.