보류 및 수정

Hold-And-Modify (일반적으로 HAM이라고 약칭 됨)는 Commodore Amiga 컴퓨터의 디스플레이 모드입니다. 매우 특이한 기법을 사용하여 픽셀의 색상을 표현하므로 가능한 경우보다 더 많은 색상을 화면에 표시 할 수 있습니다. HAM 모드는 주로 디지털화 된 사진이나 비디오 프레임, 비트 맵 아트 및 때때로 애니메이션을 표시하는 데 사용되었습니다. 1985 년 아미가 (Amiga)가 출시 될 당시에는 거의 사실적인 디스플레이가 가정용 컴퓨터에서 전례가 없었으며 Amiga의 그래픽 성능을 입증하기 위해 널리 사용되었습니다. 그러나 HAM에는 일반적인 목적의 디스플레이 모드로 사용되지 못하게하는 기술적 인 한계가 있습니다.

배경
원래 Amiga 칩셋은 4096 가지 색상을 생성하는 12 비트 RGB 색상 공간이있는 평면 디스플레이를 사용합니다.

플레이 필드의 비트 맵은 디스플레이 시스템과 메인 CPU간에 공유되는 칩 RAM으로 알려진 메인 메모리 영역에 보관되었습니다. 타이밍 고려 사항 때문에 칩셋은 화면에 다음 픽셀을 그리기 전에 픽셀 당 6 비트 만 읽을 시간이있었습니다. 이미지를 설명하는 데 필요한 데이터의 양을 줄이고 이러한 한계 내에서 맞춰지기 위해 디스플레이 시스템은 색상 표가있는 색인 된 색상 시스템을 사용했습니다.

하드웨어에는 4096 가지 색상 중 하나로 설정할 수있는 32 개의 레지스터가 포함되어 있으며 이미지는 픽셀 당 5 비트를 사용하여 32 가지 값 중 하나에 액세스 할 수 있습니다. 여섯 번째 사용 가능한 비트는 Extra Half-Brite로 알려진 디스플레이 모드에서 사용되어 픽셀의 광도를 반으로 줄여 쉐도 잉 효과를 생성하는 쉬운 방법을 제공합니다.

대기 및 수정 모드
Amiga 칩셋이 처음 설계되었을 때, TV 세트가 디스플레이 용으로 사용되었던 초기 가정용 컴퓨터에서 일반적이었던 것처럼 NTSC 신호의 채도, 색조 및 광도 값에서 직접 작동합니다. 이로 인해 스캔 라인의 시작 부분에 색상 값을 설정 한 다음 비트 맵 값이 광도 값만 수정하도록함으로써 흑백 TV와 같은 단색 이미지를 표시하는 데 필요한 메모리 양을 크게 줄일 수있었습니다. 아날로그 TV 이미지는 여러 픽셀에 걸쳐 흑백에서 즉시로 변경 될 수 없으므로 신뢰할 수있는 “흑백”이미지를 제공하기에 충분할 수 있습니다. 따라서 4 픽셀을 사용하면 이미지를 저장하는 데 필요한 메모리 양이 절반으로 줄어 듭니다. 영상.

Amiga 디자인이 게임 콘솔에서 가정용 컴퓨터로 마이그레이션됨에 따라 칩셋도 ​​마찬가지로 HSL 색상 모델에서 현대 RGB 색상 모델로 이전되었습니다. Jay Miner의 말을 인용하자면 :

“보류 및 수정 비행 시뮬레이터의 행동을 볼 수있는 여행에서 왔고 나는 가상 현실의 원시적 인 유형에 대해 일종의 생각을했습니다. 칩의 NTSC는 4 비트 만 변경하여 색조를 유지하고 휘도를 변경할 수 있음을 의미했습니다. 우리가 RGB로 바꿨을 때, 유용하지 않아서 더 이상 필요하지 않다고 말했고, 칩 레이아웃 사용자에게 그것을 벗겨달라고 부탁했습니다. 그는 돌아와서 칩 중간에 큰 구멍을 남기거나 3 개월의 재 설계를 할 것이고 그렇게 할 수 없다고 말했다. 나는 아무도 그것을 사용할 것이라고 생각하지 않았다. Amiga가 컬러 팔레트의면에서 정말로 우위에 있다는 점에서 저는 다시 틀 렸습니다. ”
Hold-And-Modify는 근본적으로 휘도 만있는 개념을 수정 한 것이지만 이번에는 빨강, 녹색 또는 파랑의 세 가지 색상 구성 요소 중 하나를 수정할 수 있습니다. HAM은 손실 압축 기술로 간주 될 수 있습니다. HAM6 모드에서 플레이 필드는 일반적으로 12 비트 색 공간에 필요한 메모리의 절반으로 인코딩됩니다. 수평 채도를 희생시키면서 전반적인 색상 충실도가 향상됩니다. 그래픽 버퍼가 디스플레이 될 때 HAM 인코딩 된 색 공간은 디스플레이 하드웨어에 의해 실시간으로 ‘압축 해제’됩니다.

용법
Amiga가 1985 년에 출시되었을 때, HAM 모드는 경쟁 시스템에 비해 상당한 이점을 제공했습니다. HAM은 앞서 언급 한 제한 사항과 함께 4096 개의 모든 색상을 동시에 표시 할 수 있습니다. 이 의사 – 사실적인 디스플레이는 당시 가정용 컴퓨터에서 전례가 없었으며 디지털화 된 사진과 렌더링 된 3D 이미지를 표시 할 수있었습니다. 이에 비해 IBM-PC 표준 EGA는 64 색 팔레트에서 16 가지 화면 색상을 허용했습니다. 1987 년 주력 게임 모드 인 모드 13h에서 출시 된 EGA의 후속 VGA는 262,144 개에서 256 가지 화면 색상을 허용했습니다. 경쟁 하드웨어가 색 깊이와 일치 할 수 없기 때문에 HAM 모드는 매장 디스플레이 및 거래 프레젠테이션에서 아미가의 능력을 입증하는 데 자주 사용되었습니다. 위에 설명 된 한계로 인해 HAM은 주로 정적 이미지 표시에 사용되었으며 개발자는 애니메이션이 필요한 게임이나 응용 프로그램 사용을 거의 피했습니다.

고급 그래픽 아키텍처의 도입으로 기존의 평면 이미지는 256 색 팔레트를 가질 수 있었으며 훨씬 더 높은 색 충실도를 제공합니다. 제한된 색상 해상도를 가진 원래 HAM 모드는 이전 버전과의 호환성을 위해 포함되었지만 AGA 시스템 사용자에게는 훨씬 매력적이지 않았습니다. 새로운 HAM8 모드는 HAM 모드의 단점을 겪지 않으면 서 평면 256 색 팔레트가 아티스트에게 옵션을 크게 증가 시켰기 때문에 HAM 모드가 기존 칩셋에 비해 AGA 칩셋에 훨씬 덜 유용했습니다. 잘 프로그램 된 슬라이스 평면 모드는 HAM8보다 더 유용 할 수 있습니다. 제한된 비디오 버퍼 크기와 제한된 메모리 대역폭에도 불구하고 더 많은 컬러 해상도를 허용하는 HAM의 원래 목적은 더 이상 적합하지 않았습니다.

최신 컴퓨터는 고해상도 트루 컬러 디스플레이가 가능하므로 HAM과 같은 디스플레이 기술이 더 이상 필요하지 않습니다. 현대의 그래픽 하드웨어는 압축 된 픽셀을 사용하기에 충분한 메모리 대역폭을 가지고 있기 때문에 평면 그래픽은 범용 컴퓨팅에서 더 이상 사용되지 않습니다.

제한 사항
HAM 모드는 플레이 필드의 각 수평 라인에서 인접한 픽셀의 값에 제한을 설정합니다. 두 개의 임의의 색상을 인접하게 렌더링하려면 빨강, 녹색 및 파랑 구성 요소를 모두 수정해야하는 경우 의도 한 색상으로 변경하려면 최대 두 개의 중간 픽셀이 필요할 수 있습니다. 최악의 경우, 이것은 수평 채도의 분해능을 704 픽셀에서 240으로 낮 춥니 다 (비교를 위해 VHS와 같은 최신 기술은 0.4 MHz에서 40의 크로마 해상도를가집니다). 이 문제는 특히 선명한 대비 (강한 수평 이미지 그라디언트) 영역에서 바람직하지 않은 다중 색조 아티팩트 또는 “프린지”가 나타날 수있는 영역에서 눈에 띄게 나타납니다. 다양한 렌더링 기술을 사용하여 “프린 징”의 영향을 최소화했으며 HAM 디스플레이는 종종 수직 가장자리 및 대비를 피하면서 미묘한 수평 색 그라데이션을 통합하도록 설계되었습니다.

HAM 모드에서 풀 컬러 이미지를 표시하려면 몇 가지주의 깊은 사전 처리가 필요합니다. HAM은 한 번에 RGB 구성 요소 중 하나만 수정할 수 있기 때문에 스캔 라인을 따라 빠른 색상 전환은 이러한 전환에 대해 사전 설정된 색상 레지스터 중 하나를 사용하여 가장 잘 수행 할 수 있습니다. 프로그래머는 임의의 이미지를 렌더링하기 위해 원본 이미지에서 가장 눈에 띄는 전환을 확인한 다음 해당 색상을 레지스터 중 하나, 즉 적응 형 팔레트로 할당 할 수 있습니다. 그러나 원래 HAM 모드에서 16 개의 사용 가능한 레지스터 만 있으면 색상 충실도의 손실이 일반적입니다.

또한, HAM 모드는 디스플레이의 임의 애니메이션을 쉽게 허용하지 않습니다. 예를 들어, 플레이 필드의 임의의 부분을 다른 화면 위 위치로 이동하려면 이미지를 올바르게 표시하기 위해 모든 소스 및 대상 행에서 홀드 및 수정 값을 다시 계산해야 할 수 있습니다 ( 애니메이션에 적합). 특히 움직이는 물체의 가장 왼쪽 가장자리에 ‘수정’픽셀이 있거나 객체 오른쪽의 이미지에 ‘수정’픽셀이 포함되어 있으면 해당 고정 및 수정 값을 다시 계산해야합니다. 화면을 중심으로 오브젝트를 움직이려하면 (예 : 블리터를 사용하여) 그래픽을 특수하게 고안하지 않는 한 해당 이미지의 왼쪽 및 오른쪽 테두리에 눈에 띄는 줄무늬가 생깁니다. Hold-and-Modify 값을 다시 계산하지 않고 fringing을 피하려면 프로그래머는 모든 blitter 객체의 맨 왼쪽 픽셀을 보장해야하며 스크롤링 playfield의 모든 라인의 맨 왼쪽 픽셀은 ‘set’픽셀이어야합니다. 팔레트는 모든 맨 왼쪽 픽셀을 포함하도록 설계되어야합니다. 또는 절차 적 생성을 통해 픽셀 값을 생성하여 HAM 디스플레이에 애니메이션을 적용 할 수 있습니다. 예를 들어 데모에서 사용되는 ‘무지개’효과와 같은 합성 이미지에만 일반적으로 유용합니다.

단, Hold-and-Modify는 플레이 필드 픽셀에만 적용됩니다. 스캔 라인 당 128 픽셀의 스프라이트 데이터 (DMA 모드에서)는 HAM 플레이 필드 위에 배치 할 수 있습니다.

구현
원래 칩 세트 HAM 모드 (HAM6)
HAM6 모드는 픽셀 당 6 비트의 데이터로 이름 지어졌으며, 오리지널 칩셋 (Original Chip Set)과 함께 도입되었으며 이후의 향상된 칩셋 및 고급 그래픽 아키텍처에서 유지되었습니다. HAM6은 320 × 200에서 360 × 576까지의 해상도에서 최대 4096 개의 색상을 동시에 표시 할 수 있습니다.

HAM6 인코딩은 픽셀 당 6 비트를 사용합니다. 제어용으로 2 비트, 데이터 용으로 4 비트입니다. 2 개의 제어 비트가 모두 0으로 설정되면, 4 개의 나머지 비트는 16 개의 미리 설정된 컬러 레지스터 중 하나를 인덱싱하는 데 사용되며, 이는 정상 인덱싱 된 비트 맵 방식으로 작동합니다. 다른 세 가지 가능한 제어 비트 패턴은 스캔 라인의 이전 픽셀 (왼쪽)의 색을 사용해야하고 데이터 비트는 빨강, 초록 또는 파랑 구성 요소의 값을 수정하는 대신 사용되어야 함을 나타냅니다. 따라서 네 가지 가능성이 있습니다.

Set : 4 비트의 데이터를 사용하여 16 색 팔레트의 색을 색인화합니다. 이 픽셀에 해당 색상을 사용하십시오.
Red 수정 : 이전 픽셀의 녹색 및 파란색 색상 구성 요소를 유지합니다. 4 비트의 데이터를이 픽셀의 새로운 적색 컴포넌트로 사용하십시오.
녹색 수정 : 이전 픽셀의 빨강 및 파랑 색상 구성 요소를 유지합니다. 이 픽셀의 새로운 녹색 컴포넌트로 4 비트의 데이터를 사용하십시오.
파란색 수정 : 이전 픽셀의 빨강 및 녹색 색상 구성 요소를 유지합니다. 이 픽셀의 새로운 청색 성분으로 4 비트의 데이터를 사용하십시오.
유사한 모드 인 HAM5도 사용할 수 있지만 오히려 쓸모가 없습니다. HAM5에서는 여섯 번째 비트가 항상 0이므로 파란색 구성 요소 만 수정할 수 있습니다.

슬라이스 된 HAM 모드 (SHAM)
Original Amiga Chipset에는 CPU 및 비디오 시스템과 독립적으로 인터럽트 및 기타 타이밍 및 하우스 키핑 업무를 처리하는 “구리”라는 지원 칩이 포함되었습니다. 구리를 사용하여 비디오 디스플레이가 수직 또는 수평 블랭크 인터럽트 (HBI)를 처리하는 동안 짧은 작업을 실행하기 위해 CPU로 다시 콜백 할 수있었습니다. 이로 인해 프로그래머는 시각적 인 인공물을 발생시키지 않으면 서 기계 코드를 디스플레이에 묶을 수 있었기 때문에 많은 비디오 효과를 훨씬 간단하게 구현할 수있었습니다.

이 기술을 사용하여 프로그래머는 슬라이스 HAM 또는 SHAM 모드 (동적 HAM이라고도 함)를 개발했습니다. SHAM은 HBI 동안 팔레트를 변경 한 선택된 스캔 라인 또는 모두에서 호출 된 컴퓨터 코드를 사용했습니다. 즉, 모든 스캔 라인에는 16 가지 기본 색상 세트가있을 수 있습니다. 이로써 팔레트를 선택하는 것이 훨씬 쉬워졌으며 이제는 이미지 당 대신 행별로 수행 할 수있게되었습니다. 이 접근 방식의 유일한 단점은 제어 프로그램이 여러 팔레트를 보유해야하므로 이미지가 칩 RAM에만 저장되는 것이 아니라 SHAM 모드를 설정하는 데 약간의 복잡성이 있다는 것입니다.

이 기술은 HAM에 국한되지 않고 컴퓨터의보다 일반적인 그래픽 모드에서도 널리 사용되었습니다. Dynamic HiRes는 유사한 색상 표 변경 기술을 사용하여 고해상도 모델에서 한 줄에 16 개의 색상을 생성하지만 HAM은 낮은 해상도로 제한되지만 16 개의 색인 된 색상과 수정이 가능합니다.

슬라이딩되지 않은 HAM8 이미지라도 슬라이스 된 HAM6 이미지보다 색 해상도가 훨씬 크기 때문에 HAM8이 도입되었을 때 SHAM 아이디어는 사용되지 않았습니다. 그러나 SHAM은 원래의 칩셋을 사용하는 아미가 (Amigas)에서 최상의 HAM 모드를 유지합니다.

고급 그래픽 아키텍처 HAM 모드 (HAM8)
1992 년 AGA (Advanced Graphics Architecture)가 출시되면서 원래의 HAM 모드는 “HAM6″으로 바뀌 었으며 새로운 “HAM8″모드가 도입되었습니다. (번호가 붙은 접미사는 각각의 HAM 모드에서 사용되는 비트 평면을 나타냅니다. AGA를 사용하면 색상 구성 요소 당 4 비트 대신 Amiga가 색상 구성 요소 당 최대 8 비트를 가지므로 16,777,216 색상 (24 비트 색상 공간)이 가능합니다.

HAM8은 픽셀 당 2 개의 “제어”비트를 사용하지만 HAM6과 동일한 방식으로 작동하지만 4 대신 픽셀 당 6 비트의 데이터를 사용합니다. set 연산은 16 개가 아닌 64 개 색상 팔레트를 선택합니다. 수정 작업은 적색, 녹색 또는 파란색 색상 구성 요소의 6 개 최상위 비트를 수정합니다.이 작업으로 색상의 두 개의 최하위 비트를 변경할 수 없습니다. 가장 최근의 설정 작업에 의해 설정된대로. HAM6과 비교하여 HAM8은 더 많은 화면 색상을 표시 할 수 있습니다. HAM8을 사용한 화면상의 최대 색상 수는 262,144 색상 (18 비트 RGB 색상 공간)으로 널리보고되었습니다. 사실 64 개 색상 표의 각 색상 구성 요소의 최하위 비트 2 개에 따라 고유 한 온 스크린 색상의 최대 수는 262,144 개를 초과 할 수 있습니다. 이론 상으로는 1670 만 가지의 모든 색을 충분히 큰 화면과 적절한 기본 팔레트와 함께 표시 할 수 있지만 실제로는 전체 정밀도를 달성 할 때의 한계로 인해 두 개의 최하위 비트가 일반적으로 무시된다는 것을 의미합니다. 일반적으로 인식 된 HAM8 색 농도는 고 색 표시와 대략 동일합니다.

HAM8의 수직 디스플레이 해상도는 HAM6의 경우와 동일합니다. 수평 해상도는 이전과 같이 320 (오버 스캔을 통한 360), 640 (오버 스캔을 통한 720) 또는 심지어 1280 픽셀 (오버 스캔을 통한 1440)의 두 배가 될 수 있습니다. AGA 칩셋은 또한 전통적인 평면 디스플레이 모드에 대해 더 높은 해상도를 도입했습니다. HAL8 이미지의 총 픽셀 수는 PAL 모드를 사용하면 829,440 (1440×576)을 초과 할 수 없지만 타사 디스플레이 하드웨어 (Indivision AGA 깜박임 해결사)를 사용하면 1,310,720 (1280×1024)을 초과 할 수 있습니다.

원래 HAM 모드와 마찬가지로 HAM8 화면은 모든 픽셀이 제한된 팔레트에 의존하거나 이전 픽셀의 최대 두 가지 색상 구성 요소에 의존하기 때문에 임의의 위치에 임의의 색상을 표시 할 수 없습니다. 원래의 HAM 모드와 마찬가지로 설계자는 이러한 제한 사항을 우회하기 위해 디스플레이를 ‘슬라이스'(아래 참조) 할 수도 있습니다. HAM7 모드도 사용할 수 있지만 널리 사용되지는 않습니다.

HAM 에뮬레이션
HAM은 Amiga 및 고유 한 칩셋에 고유합니다. HAM 형식으로 인코딩 된 레거시 이미지를 직접 렌더링 할 수 있도록 원래 디스플레이 하드웨어가 필요없는 소프트웨어 기반 HAM 에뮬레이터가 개발되었습니다. AmigaOS 4.0 이전 버전은 기본 Amiga 칩셋이있는 상태에서 HAM 모드를 사용할 수 있습니다. 근본적으로 다른 하드웨어 용으로 설계된 AmigaOS 4.0 이상은 현대적인 거친 그래픽 하드웨어에서 사용하기 위해 HAM 에뮬레이션을 제공합니다. 고유하지 않은 하드웨어에서 실행되는 전용 아미가 (Amiga) 에뮬레이터는 디스플레이 하드웨어의 에뮬레이션을 통해 HAM 모드를 표시 할 수 있습니다. 그러나 다른 컴퓨터 아키텍처가 HAM 기술을 사용하지 않았기 때문에 다른 아키텍처에서 HAM 이미지를 보려면 이미지 파일을 프로그래밍 방식으로 해석해야합니다. 충실한 소프트웨어 기반 디코딩은 디스플레이 설정 사이의 색상 충실도를 제쳐두고 동일한 결과를 산출합니다.

그러나 목표가 단순히 Amiga가 아닌 플랫폼에 SHAM 이미지를 표시하는 것이라면 필요한 색상 값은 팔레트가 수정되었는지 여부에 관계없이 구리 목록을 통해 프로그래밍 된 팔레트 항목을 기반으로 미리 계산 될 수 있습니다 주사선의 중간. HAM 또는 SHAM 이미지를 무손실로 32 비트 팔레트로 업 변환 할 수 있습니다.

타사 HAM 구현
블랙 벨트 (HAM-E)로 알려진 블랙 벨트 (Black Belt)에서 제작 한 장치는 원래 칩셋이있는 아미가 (amiga)의 수평 해상도가 낮은 HAM8 색상의 이미지를 생성 할 수있었습니다.

Amiga는 고해상도 이미지 (가로 640 픽셀, 오버 스캔 720 픽셀)를 생성하도록 설정됩니다. 이를 위해서는 픽셀 당 70ns에서 4 개의 비트 평면을 사용해야했습니다. HAM-E 장치를 구성하기위한 이미지 인코딩 된 정보의 처음 몇 줄. 그런 다음 각 쌍의 픽셀은 HAM-E 장치에 대한 정보로 인코딩되어 정보를 하나의 140ns 픽셀 (폭 320 픽셀, 오버 스캔으로 360 픽셀, 8 비트 평면의 색 깊이로 생성)로 변환했습니다. 따라서 HAM-E의 품질은 저해상도 HAM8 이미지와 비슷합니다. HAM-E 기술은 4 비트 플레인을 사용하는 고해상도 이미지가 6 비트 플레인의 저해상도 이미지보다 세 번째로 더 많은 메모리 대역폭을 제공하므로 세 번째로 더 많은 데이터를 제공한다는 사실을 이용했습니다.