모토로라 6845

모토로라 6845 CRT 컨트롤러 **모토로라 6845**(Motorola 6845) 또는 **MC6845**는 1980년대 8비트 컴퓨터에 널리 사용된 디스플레이 컨트롤러이다.website=www.tinyvga.comwebsite=www.6502.org 원래 모토로라 6800 CPU 기반 설계를 위해 관련 부품 번호가 부여되었지만, 다양한 다른 프로세서와 함께 더 널리 사용되었으며, 가장 일반적으로 자일로그 Z80 및 MOS 6502 기반 기계에서 발견되었다. 6845는 그 자체로 완전한 디스플레이 솔루션은 아니다. 이 칩의 주요 기능은 디스플레이 메모리에 대한 접근 시간을 적절하게 맞추고, 그려질 다음 부분의 메모리 주소를 계산하는 것이다. 그런 다음 기계의 다른 회로가 6845에서 제공하는 주소를 사용하여 패턴을 가져와 그린다. 이 하드웨어의 구현은 전적으로 설계자의 몫이며 기계마다 크게 달랐다. 6845는 문자 디스플레이용으로 고안되었지만, 약간의 영리한 프로그래밍으로 화소 기반 그래픽에도 사용될 수 있었다. 이 칩의 잘 알려진 용도로는 BBC 마이크로, 암스트래드 CPC, 그리고 애플 II용 비덱스 비디오텀 디스플레이 카드가 있다. 또한 IBM PC용 MDA, HGC, CGA 및 플랜트로닉스 컬러플러스를 포함한 많은 초기 그래픽 어댑터 카드의 일부이다.title=PC Mag Jul 1983 이 기능은 EGA 및 VGA PC 비디오 어댑터의 맞춤형 회로에 의해 복제 및 확장되었다.
# 디자인
원래 히타치가 **HD46505**로 설계했으며,access-date=2024-02-22 히타치에서 제작된 버전은 소니, 샤프, 파나소닉, 카시오 등 다양한 일본 컴퓨터에 사용되었다. 나중에 후지쓰에서 MB89321A로 복제되었다.website=Datasheet Archive Search Engine 이 칩은 **6845 CRTC** 또는 **CRTC6845**로도 알려져 있으며, 이는 "브라운관 컨트롤러"를 의미한다. 이 버전은 아프리콧 PC 및 빅터 9000에서 800x400 해상도 흑백 디스플레이를 제공하는 데 사용되었다. 이 CRT 컨트롤러의 일반적인 클론은 유나이티드 마이크로일렉트로닉스 코퍼레이션(UMC)의 **UM6845E** CRT 컨트롤러이다. 냉전 기술 금수 기간 동안 6845는 불가리아에서 **CM607**이라는 명칭으로 복제되었다. 6845는 나중에 모스 테크놀로지(코모도어 반도체 그룹) 및 로크웰 (두 가지 버전)에서 제조한 6545와 매우 유사하고 관련이 있었다. website=www.tinyvga.com
# 개요
이 칩은 래스터 디스플레이와 인터페이스하는 데 필요한 신호를 생성하지만, 실제 화소를 생성하지는 않는다. 다만, 화소 비디오(강도) 신호에 커서 및 비디오 블랭킹 정보를 제공한다. 이 칩은 올바른 타이밍의 수평 및 수직 동기화를 생성하고 다음 화소 또는 화소 세트를 읽어야 하는 메모리 주소를 제공하는 데 사용된다. 해당 값을 읽고 화소로 변환하여 브라운관으로 보내는 과정은 다른 회로에 맡겨진다. 이 때문에 6845를 사용하는 시스템은 색상 수와 값이 매우 다르거나 색상을 전혀 지원하지 않을 수도 있다. 비월 주사 및 비비월 주사 출력 모드가 지원되며, 하드웨어 텍스트 커서도 지원된다. 동기화 생성에는 외부 화소 생성 회로를 제어하는 데 사용되는 수평 및 수직 비디오 블랭킹 신호 생성이 포함된다. 또한, 트리거되면 비디오 주소의 복사본을 복제하고 유지하여 나중에 CPU가 다시 읽을 수 있도록 내부 래치가 제공된다. 이는 전자빔이 통과할 때 6845에 펄스를 보내는 방식으로 작동할 수 있는 라이트 펜 및 라이트 건에 유용하며, 실행 중인 프로그램이 가리킨 위치를 다시 읽을 수 있도록 한다. 이 기능 때문에 6845를 사용하는 대부분의 컴퓨터 비디오 어댑터에는 라이트 펜 인터페이스가 포함되어 있었지만, 일반적으로 컴퓨터 외부가 아닌 보드 자체의 내부 커넥터였으며, 사용자 설명서에는 보통 문서화되어 있지 않았다. 비디오 타이밍의 모든 측면이 프로그래밍 가능하므로, 단일 기계는 소프트웨어에서 50Hz와 60Hz 타이밍(또는 칩의 한계 내에서 다른 어떤 주사율도)을 전환할 수 있다. 6845는 모니터 또는 다른 래스터 디스플레이를 구동하는 데 사용될 수 있다.
# 내부 구조
MC6845 핀아웃. 이 칩에는 비디오 타이밍의 모든 측면을 제어하는 총 18개의 8비트 하드웨어 레지스터가 있다. 외부 구성 요소에는 두 개의 주소만 노출된다. 하나는 읽거나 쓸 내부 레지스터를 선택하는 주소이고, 다른 하나는 해당 레지스터에 접근하는 주소이다.url-status= {| class="wikitable" ! |레지스터 번호 ! |기능 |- |0 |전체 수평, 문자 수 |- |1 |행당 표시되는 수평 문자 수 |- |2 |수평 동기 위치 |- |3 |수평 동기 폭, 문자 수 |- |4 |전체 수직, 문자 행 수 |- |5 |수직 전체 조정, 스캔 라인 수 |- |6 |표시되는 행 수(수직) |- |7 |수직 동기 위치, 문자 행 수 |- |8 |인터레이스 모드 |- |9 |문자 높이, 스캔 라인 수 (마이너스 1) |- |10 |커서 시작, 스캔 라인 |- |11 |커서 끝, 스캔 라인 |- |12 |화면 시작 주소 (상위) |- |13 |화면 시작 주소 (하위) |- |14 |커서 주소 (상위) |- |15 |커서 주소 (하위) |- |16 |라이트 펜 주소 (상위) |- |17 |라이트 펜 주소 (하위) |} 6845는 문자 기반 디스플레이를 위한 것이다. 이 칩이 생성하는 모든 주소는 14비트 문자 주소와 5비트 행 주소의 두 부분으로 구성된다. 문자 주소는 선형적으로 증가한다. 칩이 수평 동기 신호를 보내면 행 주소가 증가한다. 행 주소가 프로그램으로 설정된 문자당 행 수와 같지 않으면, 문자 주소는 방금 완료된 스캔 라인의 시작 시점의 값으로 재설정된다. 그렇지 않으면 행 주소가 0으로 재설정되고 메모리 주소는 선형적으로 계속 증가한다. 이로 인해 6845가 메모리 주소를 다음 문자 행으로 진행하고 동일한 패턴을 반복하기 전에 각 문자 행의 각 래스터 라인에 대해 동일한 문자 값 시퀀스가 메모리에서 다시 읽히게 된다. 문자 주소가 RAM에서 문자 참조를 찾고 행 주소가 ROM에서 문자 그래픽 테이블의 인덱스를 지정하는 데 사용되면 일반적인 텍스트 모드 디스플레이가 구성된다. 메모리에서 읽은 문자 참조는 행 주소와 결합되어 문자 그래픽 ROM의 주소를 형성해야 한다. 여기서 문자 참조는 하나의 문자를 형성하는 스캔 라인 패턴 세트를 선택하고, 행 주소는 해당 세트의 인덱스를 지정하여 하나의 스캔 라인을 선택한다. 즉, ROM 주소는 ROM을 2차원 배열로 사용하기 위해 두 부분으로 나뉜다. 첫 번째 차원은 문자를 선택하고, 두 번째 차원은 해당 문자의 그래픽 패턴의 행을 선택한다. 그러나 6845는 설계자에게 메모리 및 행 주소의 비트들을 비디오 RAM으로 원하는 대로 라우팅할 자유를 남겨두었다. 이러한 이유로 6845가 주소 지정하는 단어는 한 화소 또는 한 문자와 같을 필요가 없다. CGA 영숫자(텍스트) 모드에서는 문자당 두 바이트가 있으며, 6845에 의해 순차적으로 접근된다. 첫 번째 바이트는 문자 코드 바이트이고 두 번째 바이트는 문자 속성 바이트이며, 보드는 바이트의 내용과 행 주소를 함께 사용하여 ROM에서 글꼴 데이터를 읽고 화소를 생성한다. 문자 ROM을 생략하고 비트를 다르게 라우팅하면 프레임 버퍼를 에뮬레이션할 수 있다. 6845는 128줄 제한으로 인해 선형 대형 프레임 버퍼를 제공할 수 없다. 해결책은 행 주소와 문자 주소를 결합하여 비선형 버퍼 내에서 선형 스캔 라인을 제공하는 것이었다. 이는 비문자 디스플레이를 위한 쉬운 프로그래밍과 부드러운 수평 스크롤링의 장점을 가지지만, 부드러운 수직 스크롤링을 방해할 수 있다. 예를 들어 IBM CGA 그래픽 모드는 1바이트의 단어 크기를 사용하며, 각 단어는 4개 또는 8개의 화소를 나타낸다(각각 중간 또는 고해상도 그래픽 모드에서). 6845는 2화소 문자 높이로 구성되며, 행 주소 비트 RA0은 프레임 버퍼 주소의 비트 13에 사용된다. 이 방식으로 128줄 제한에도 불구하고 200개의 수직 화소를 사용할 수 있다. 다른 시스템의 그래픽 모드도 비슷한 트릭을 사용했다. 허큘리스 그래픽 카드에서는 프레임 버퍼 주소의 비트 12-13이 행 주소 비트 RA0-RA1에서 나왔으며, 87개의 4화소 높이 "선"에서 348화소의 수직 해상도를 제공했다. 암스트래드 CPC는 텍스트 모드와 마찬가지로 8의 선 높이를 사용했으며, 행 주소 RA0-RA2를 메모리 주소 MA11-MA13에, 문자 주소 CA0-CA10을 메모리 주소 MA0-MA10에 매핑했다. 이러한 작동 모드는 6845가 문자 데이터를 버퍼링하지 않았기 때문에 가능했다. 1970년대, 1980년대, 그리고 정도는 덜하지만 1990년대에도 메모리는 비쌌고, 빠른 메모리는 특히 더 비쌌으며, 이것은 중요한 고려 사항이었다. 1970년대와 1980년대 초중반에는 칩 회로 밀도도 그리 높지 않았으며, 80바이트 이상의 문자 버퍼를 6845와 같은 칩에 넣으면 칩 다이 크기가 50-100% 증가할 수 있었고, 이는 칩 결함률의 기하급수적인 증가와 다이 크기에 따른 생산 수율 감소로 인해 몇 배 더 비싸졌다. 반면에 6845는 사용자에게 매 라인마다 데이터를 다시 읽을 수 있도록 충분한 메모리 대역폭을 제공할 책임을 지웠다. 만약 문자가 비디오 버퍼에서 하나의 "워드"를 차지한다면, 문자당 s 스캔 라인을 가진 l 줄 c 열의 디스플레이는 전체 문자 화면을 나타내기 위해 l × c 워드의 메모리가 필요하지만, 하나의 새로 고침 주기를 완료하기 위해 그 s 배의 메모리 접근이 필요하다. 각 문자 워드 줄은 다음 줄을 읽기 전에 s번 반복적으로 읽힌다. 이는 6845를 사용하는 문자 디스플레이가 동일한 해상도의 모든 지점 주소 지정 가능한 그래픽 디스플레이에 필요한 대역폭 수준의 높은 메모리 대역폭을 요구한다는 것을 의미한다. 내부적으로 문자 데이터의 한 줄 전체를 버퍼링하는 다른 비디오 디스플레이 컨트롤러는 디스플레이 버퍼 RAM에서 각 문자 줄의 반복 읽기를 피할 수 있어 필요한 메모리 대역폭을 줄이고 더 느리고 저렴한 메모리 칩을 사용하거나, 시스템 CPU가 메모리에 접근할 시간을 더 많이 주거나, 이 둘을 조합할 수 있게 한다. 6845에 이러한 문자 버퍼를 추가하는 것은 칩이 출시될 당시 비용 효율적인 접근 방식이 아니라고 여겨졌다. 그러나 불과 몇 년 후 코모도어 64에 사용된 VIC-II 칩에는 그러한 문자 줄 캐시가 포함되었다.
## 한계
전체 주소 범위 RA0-RA4:CA0-CA13을 사용하면 6845는 524288 워드의 메모리를 주소 지정할 수 있다. 워드는 시스템 설계자가 메모리 너비로 선택한 어떤 수의 비트도 될 수 있다. 6845가 주소 지정할 수 있는 고유 주소의 수는 524288로 제한되지만, 6845가 주소 지정할 수 있는 메모리 양은 예상보다 훨씬 클 수 있다. 왜냐하면 6845는 주소 지정하는 각 메모리 위치의 크기에 제한을 두지 않기 때문이다. 만약 워드 크기가 1바이트인 경우가 많다면, 6845는 512 KiB를 주소 지정할 수 있다. 만약 워드 크기가 32비트이고, 예를 들어 워드당 한 화소를 가진 32비트 컬러 그래픽의 경우, 6845는 2048 KiB를 주소 지정할 수 있다. 64비트 워드의 경우 두 배를 주소 지정할 수 있다. 이러한 한계는 6845 단독이 아니라 6845와 연결된 외부 메모리의 설계 조합에서 발생한다.
## 선형 프레임버퍼
앞서 설명했듯이, 6845는 일반적으로 큰 선형 프레임버퍼를 제공할 수 없다. 한 설계는 14비트 문자 주소 지정만 사용하고 문자당 줄 수를 1로 설정할 수 있지만, 128줄과 16 KB의 주소 지정 가능한 메모리로 제한된다.
# 6545와의 차이점
압도적으로 호환성이 좋지만, 6845와 6545 사이에는 몇 가지 작은 차이가 존재한다. 가장 큰 차이점은 6545는 비디오 메모리를 위한 주소 버스에 대한 단독 접근 권한을 갖도록 구성될 수 있다는 점이다. CPU가 읽으려는 주소를 설정하기 위한 두 개의 추가 레지스터가 포함되어 있으며, 칩은 디스플레이 생성을 위한 주소와 CPU 접근을 위한 디스플레이 설정 사이를 번갈아 가며 출력한다.website=www.6502.org 더 작은 변화는 모스 테크놀로지와 로크웰 6545의 한 변형은 인터레이스 출력 지원이 부족하고, 모든 6545에는 선택적 주소 스큐가 포함되어 있으며, 이는 설정될 경우 디스플레이 활성화를 한 문자 주기만큼 지연시킨다. 이 두 번째 기능은 나중에 모토로라 6845의 변형에 통합되었다. 6545는 상태 비트를 사용하여 선형 14비트 모드에서 작동하도록 설정될 수 있다. 6845에서는 동일한 작업을 위해 문자 높이를 조정해야 한다.website=6502.org
# 기술
6845는 프레임당 한 번씩 디스플레이의 시작 주소를 읽는다. 그러나 칩의 내부 타이밍 값을 올바른 시간에 변경하면 현재 프레임을 종료하지 않고 새 프레임을 준비하도록 만들 수 있다. 이는 디스플레이 중간에 생성된 주소에서 비연속적인 단절을 만든다. 이는 데모씬에서 흔히 사용되며, 비디오 게임에서는 훨씬 드물게 디스플레이의 움직이는 영역(주로 플레이 필드)과 정적인 영역(주로 상태 디스플레이)을 제공하는 데 사용된다. 수직 스크롤은 문자 시작 주소만 설정할 수 있고 행 주소는 프레임 시작 시 항상 0으로 초기화되기 때문에 제약이 있는 것처럼 보이지만, 테두리 시간을 조정하여 프레임 버퍼가 래스터 디스플레이에 표시되는 위치를 전체 문자 사이의 증분으로 이동할 수 있다. 화면 가장자리에 빈 화소를 그림으로써, 이는 사용자에게 보이지 않게 할 수 있으며 부드러운 수직 스크롤의 환상만을 만들어낸다.