MOS 테크놀로지 VIC-II

MOS Technology VIC-II
C64 메인보드의 MOS 6569R3(PAL 버전)

VIC-II(Video Interface Chip II), 특히 MOS Technology 6567/8562/8564(NTSC 버전), 6569/8565/8566(PAL)은 Y/C 비디오 신호(RF 모듈레이터 64128의 컴포지트 비디오조합) 및 DRAM 리프레시 신호를 생성하는 마이크로칩입니다.

MOS의 오리지널 VIC(VIC-20에 사용됨)의 뒤를 잇는 VIC-II는 C64의 성공을 이끈 2개의 칩(다른 칩은 6581 SID) 중 하나였습니다.

개발 이력

VIC-II 칩은 주로 MOS Technology, Inc.의 Al Charpentier와 Charles[1] Winterble에 의해 MOS Technology 6560 "VIC"의 후속으로 설계되었습니다.MOS 테크놀로지 팀은 메모리 속도의 [2]제약으로 인해 이전에 코모도어 TOI 컴퓨터용 MOS 테크놀로지 6562컬러 PET용 MOS 테크놀로지 6564라는 두 개의 그래픽 칩을 생산하지 못했습니다.

VIC-II를 구축하기 위해 Charpentier와 Winterble은 현재 가정용 컴퓨터와 비디오 게임에 대한 시장 조사를 실시하여 현재 기능 및 VIC-II에 탑재하고 싶은 기능을 나열했습니다.스프라이트를 추가하는 아이디어는 Texas Instruments TI-99/4A 컴퓨터TMS9918 그래픽 코프로세서에서 나왔습니다.충돌 탐지를 지원하기 위한 아이디어는 마텔 인텔리비전(Mattel Intellivision)에서 나왔습니다.또한 아타리 800은 원하는 [3][4]기능을 위해 채굴되었습니다.스프라이트 기능에는 [5]칩 표면의 약 3/4이 사용됩니다.

이 칩은 Application(현 UGS Corp.의 일부)의 전자 설계 자동화 도구를 사용하여 부분적으로 배치되었으며, 일부는 벨룸 종이에 수동으로 배치되었습니다.설계의 작은 서브셋을 포함한 칩을 제작하여 설계를 부분적으로 디버깅하였으며, 이후 개별적으로 테스트할 수 있었습니다.이는 모스테크놀로지가 연구개발 연구소와 반도체 공장을 모두 같은 [6]위치에 두고 있어 쉬웠다.이 칩은 5마이크로미터 [3]기술로 개발되었습니다.

VIC-II에 대한 작업은 로버트 야네스가 SID 칩에 대해 동시에 작업하던 1981년 11월에 완료되었다.코모도어 64와 같은 두 칩 모두 1982년 [7]1월 첫째 주 소비자 가전 전시회에 맞춰 완성되었다.

VIC-II 기능

64 의 그래픽 모드에는, 화면상에서 문자 베이스의 색을 바꾸는 기능 등, 아타리나 Apple 와의 유사점이 없는 것이 있습니다.그 결과, 지금까지 활용되지 않았던 많은 색채 능력을 얻을 수 있었습니다.

--
  • 화면, 문자 및 스프라이트 메모리용 16kB 주소 공간
  • 320 × 200 픽셀 비디오 해상도 (멀티컬러 모드에서는 160 × 200)
  • 40 x 25 문자 텍스트 해상도
  • 3개의 문자 표시 모드와 2개의 비트맵 모드
  • 16가지 색상
  • 스캔 라인당 각각 24 × 21 픽셀(12 × 21 멀티 컬러)의 8 스프라이트를 동시에 처리
  • 래스터 인터럽트(자세한 내용은 아래 참조)
  • 부드러운 스크롤
  • 독립된 다이내믹 RAM 리프레시
  • 6502 스타일 시스템버스의 버스 마스터링, CPU와 VIC-II가 번갈아 반클럭 사이클 중에 버스에 액세스(추가 사이클이 필요한 경우 VIC-II는 CPU를 정지시킵니다)

기술적 세부사항

MOS 6567 VIC-II 핀 할당

다음의 레지스터 주소는, C64 의 CPU 로 인식되고 있는 것에 주의해 주세요.데이터 시트에서 일반적으로 주어진 레지스터 번호(0부터 시작)를 산출하려면 선행 "D0"을 생략해야 합니다.

프로그래밍

1988년 11월에 COMPUTE!의 Gazette에 의해 발행된 입력 프로그램Supratechnic래스터 인터럽트를 사용하여 표준 화면 테두리(여기서는 상단 테두리 및 하단 테두리) 외부에 정보를 표시하는 방법을 보여줍니다.

VIC-II는 47개의 제어 레지스터(VIC의 16개에서 증가)를 조작하여 프로그래밍되며, 메모리는 범위에 매핑됩니다.C64 주소 공간에 $D000~$D02E가 있습니다.이들 레지스터 중 34개는 스프라이트 제어만을 취급한다(스프라이트는 VIC-II 문서에서 "이동 가능한 객체 블록"에서 MOB로 불린다).전작과 같이, VIC-II는 라이트 펜 입력을 처리하고, C64의 표준 문자 ROM의 도움을 받아 1977년부터 40열 PET 시리즈와 같은 크기의 디스플레이에 원래의 PETCII 문자 세트를 제공했습니다.

VIC-II의 제어 레지스터를 래스터 인터럽트 루틴(스캔 라인 인터럽트)에 접속된 머신 코드를 통해 새로고침함으로써 칩을 8개 이상의 동시 스프라이트를 생성하도록 프로그래밍할 수 있으며(스프라이트 멀티플렉싱으로 알려진 프로세스), 일반적으로 화면의 프로그램 정의 슬라이스마다 다른 스크롤, 해상도 및 c를 제공할 수 있습니다.olor 속성.스프라이트가 빠르게 켜졌다 꺼졌다 하면 스캔 라인당 8개의 스프라이트라는 하드웨어 제한을 더 늘릴 수 있습니다.VIC-II의 기능을 해방하기 위해서는 래스터 인터럽트의 마스터가 필수적입니다.많은 데모와 그 이후의 게임에서는, CPU와 VIC-II 사이에 고정의 「락 스텝」을 확립해, VIC 레지스터를 적절한 타이밍에 조작할 수 있도록 하고 있습니다.

캐릭터 그래픽스

C64는 4k ROM에 PETSCII 문자 세트를 탑재하고 출하되었지만, 이전의 VIC-20과 같이 문자의 실제 데이터는 지정된 위치에 있는 메모리에서 읽혀졌습니다.이 위치는 VIC-II 레지스터 중 하나였습니다.이 레지스터에서는 프로그래머가 적절한 데이터를 메모리에 배치함으로써 독자적인 문자 세트를 구축할 수 있었습니다.각 문자는 8x8 그리드이며, 1바이트는 수평으로 8비트를 나타내기 때문에 1개의 문자에 8바이트가 필요했고, 따라서 전체 256문자 세트는 총 2,048바이트를 사용했습니다.이론적으로 16k의 비디오 메모리가 모두 [9]: 363 채워진 경우 최대 8개의 문자 세트를 사용할 수 있습니다.

VIC-II는 문자 집합과 더불어 1000바이트를 사용하여 한 줄에 40자씩 25줄을 저장합니다.각 문자마다 1바이트씩 기본 설정 전원 투입 시 400~7E8달러입니다.[9]: 117–119 컬러 RAM은 비디오 [10]매트릭스의 비트8 ~ 11로 액세스 됩니다.64 및 128에서는 I/O 공간에 D800~$DB 배치되어 있습니다.FF 및 해당 위치에서 이동할 수 없습니다.각 문자의 색상 1(멀티컬러 모드의 색상 3) 값이 포함됩니다.

문자 ROM은 VIC-II의 4개의 '윈도' 중 2개에 매핑되며 가격은 1000달러~1달러입니다.FFF 9000~9달러FFF. 단, CPU에서는 인식할 수 없습니다(문자 ROM은 CPU에서는 볼 수 있지만 VIC-II에서는 볼 수 없는 $D000-$DFFF 전환될 수 있습니다.따라서 그래픽스 데이터 또는 비디오 버퍼는 $1000~$1로 배치할 수 없습니다.FFF 또는 9000~9달러대신 VIC-II가 문자 ROM을 인식하기 때문에 FFF.이러한 RAM 영역은 VIC-II 그래픽 칩에서는 사용할 수 없었기 때문에 음악/음향 효과(SID 칩)에 자주 사용되었습니다.C64는 메모리 내의 같은 주소에 RAM과 ROM을 탑재할 수 있지만 CPU는 RAM과 ROM을 "인식"하고 VIC-II 칩은 다른 주소를 "인식"합니다.

디폴트 고해상도 문자 모드에서는, 칼라 RAM 로 각 문자의 전경을 개별적으로 설정할 수 있습니다.다색 문자 모드에서는 색 3은 처음 8가지 가능한 색 값으로 제한되며, 그 후 4비트는 이 문자가 고해상도 또는 다색으로 표시되는지를 나타내는 플래그로서 사용되므로 두 가지 유형을 한 화면에서 [9]: 460–462 혼재시킬 수 있다.색상 1과 2는 레지스터에 의해 $D022 $D023으로 설정되며 모든 [9]: 373 문자에 대해 글로벌합니다.

확장 배경색 모드를 사용하는 경우 문자 코드의 위쪽 2비트를 사용하여 4개의 배경색 레지스터 중 하나를 선택합니다.이렇게 하면 화면에 4가지 다른 배경색을 사용할 수 있지만 256자 대신 64자만 사용할 수 있습니다.이것은 제한적이기 때문에 게임들은 그것을 거의 사용하지 않았다.

비트맵 모드

VIC-I에는 이러한 기능이 없었기 때문에, 전점 대응 비트맵 모드를 추가하는 것이 Commodore 설계팀의 주된 목표 중 하나였습니다.단, 추가 회로를 가능한 한 적게 사용하기 위해 문자 모드와 동일한 방식으로 구성했습니다. 즉, 8x8 및 4x8 타일입니다.비트맵 그래픽스에는 픽셀 데이터를 위한 8k 페이지가 필요하며 각 바이트는 8개 또는 4개의 픽셀 행에 해당합니다.다음 바이트는 그 아래 행과 8번째 행 뒤에 있는 행으로, 다음 타일의 맨 위로 돌아갑니다.

고해상도 비트맵에서 화면 RAM은 각 타일의 전경색과 배경색(각 바이트의 높은 니블과 낮은 니블)을 유지하기 위해 사용됩니다.D800달러 컬러 RAM이나 D021달러 배경 컬러 레지스터를 사용하지 않는 유일한 VIC-II 모드입니다.

멀티컬러 비트맵 모드에서는 타일당 3가지 색상을 사용할 수 있습니다(4번째는 $D021에서 설정한 배경색입니다).색상 1과 2는 화면 RAM의 비트(비트맵을 채용한 것과 동일)에 의해 선택되며, 세 번째는 컬러 RAM에서 선택됩니다.

비트맵 모드의 색상의 디테일이 높고, 모든 포인트에 대응 가능한 기능이 있습니다만, 일반적으로 게임 내 그래픽스에서는 대량의 시스템 자원(픽셀 데이터에는 8k, 각 타일을 수정하는 데 상당한 CPU 사이클)이 필요하기 때문에, 스크롤 할 수 없습니다.따라서 로더 및 제목 화면에서 가장 일반적으로 볼 수 있습니다.

스프라이트

VIC-II 스프라이트는 24x21 흑백 또는 12x21 멀티컬러 중 하나입니다.캐릭터 그래픽과 마찬가지로 후자는 각 스프라이트에 대해 하나의 개별 색상과 2개의 글로벌 색상이 있습니다.VIC-II에는 8개의 스프라이트가 있으며 각 스프라이트는 64바이트의 메모리를 사용하여 저장합니다.단, 특정 제한이 있지만 더 많은 스프라이트를 표시할 수 있습니다.스프라이트 멀티플렉싱은 화면에 8개 이상을 표시하는 일반적인 방법입니다(스캔 라인당 최대 8개).VIC-II 스캔라인 카운터는 원하는 포인트에 도달할 때까지 폴링되며, 그 후 프로그램은 스프라이트 좌표를 빠르게 변경합니다.이 프로그래밍 트릭 및 기타 회피책으로 인해 한 번 화면에 20개 이상의 스프라이트가 나타날 수 있습니다.그러나 데모의 경우 제한이 상당히 유연합니다.

이론적으로 동시에 표시되는 다른 스프라이트의 최대 수는 256개입니다(VIC-II의 16k 페이지 전체가 채워진 것으로 가정).메모리내의 각 스프라이트 패턴을 나타내는 블록 번호를 사용하고, 비디오 페이지내의 위치에 따라서는 255달러(FF)가 됩니다.(두 번째 비디오뱅크(0 1 2 및 3)를 사용하는 경우 블록0은 4000달러, 블록255는 7FC0달러입니다).

각 스프라이트는 수직, 수평 또는 둘 다로 두 배 사이즈가 될 수 있습니다.이는 스프라이트를 더 크게 하거나(시각적으로만 제외), 스프라이트에 더 많은 픽셀을 추가하는 것이 아니라 기존 픽셀을 업스케일링할 뿐입니다.

스프라이트의 수평 위치 레지스터는 1바이트이고 최대값 255로 제한되어 있기 때문에 VIC-II의 화면 영역 전체 320픽셀을 커버할 수 없기 때문에 이를 위해 Most Significant Byte Flag라는 추가 레지스터가 제공됩니다.

$D01E 및 $D01F에는 백그라운드 및 스프라이트 대 스프라이트 충돌 레지스터가 포함되어 있습니다.전자는 스프라이트가 만지고 있는 특정 배경 객체에 대한 정보를 제공할 수 없기 때문에 거의 사용되지 않습니다.

$D01B에는 Sprite To Background priority 레지스터가 포함되어 있습니다. 이 레지스터는 스프라이트가 배경 객체 뒤로 또는 앞으로 이동하는지 여부를 제어하는 데 사용됩니다.스프라이트가 다른 스프라이트와 같은 공간에 들어가면 번호가 낮은 스프라이트가 번호가 높은 스프라이트를 항상 통과합니다.

스크롤

캐릭터 화면을 스크롤하기 위해 VIC-II는 $D011 및 $D016의 레지스터를 통해 38열 및/또는 24행 모드로 설정된다.그러면 스크롤할 문자의 행이 배치되는 오프스크린 버퍼가 생성됩니다.상기 레지스터의 스크롤 비트를 조정함으로써 새로운 행을 버퍼에 넣지 않는 한 한 한 행을 화면상에서 이동시켜 반복할 수 있다.컬러 RAM은 화면 RAM과 동시에 스크롤되며 동일하게 동작합니다.

VIC-II 스크롤은 비교적 복잡하고 CPU를 많이 사용하는 작업이지만 C64 게임 프로그래머가 컬러 RAM을 정지 상태로 유지하도록 그래픽을 설계하여 부정행위를 하는 경우는 드물지 않습니다.또 다른 표준 요령은 화면 하단 또는 상단 25%를 점수 카운터로 가려 실행하는 스크롤 양을 줄이는 것입니다.마지막으로, 보통 1k의 추가 RAM을 사용하여 문자 데이터를 쓴 후 화면 찢어짐을 방지하기 위해 화면 RAM에 "블릿"해야 합니다.단, 컬러 RAM에서는 이 작업을 수행할 수 없습니다.

C64의 상용 수명 말기에 VSP(Virtual Screen Positioning)라고 불리는 부정 이용은 표준 스크롤 레지스터보다 훨씬 낮은 CPU 사이클 비용으로 고속 스크롤을 생성하기 위해 $011의 제어 비트를 조작하는 것으로 판명되었습니다.단, 세심한 사이클 팩트 코딩이 필요했기 때문에 일부 VIC-II REV에서는 신뢰성 있게 동작하지 않았습니다.이온은 수평 스크롤에만 사용할 수 있습니다.그것은 몬스터랜드의 메이헴에서 특히 사용된다.

래스터 인터럽트

래스터 인터럽트의 활용은 C64 게임 프로그래밍의 필수 요소입니다.컴퓨터의 전원 투입 디폴트 상태에서는 첫 번째 MOS Technology CIA 칩이 초당 60회(NTSC) 또는 50회(PAL)의 마스크 가능 인터럽트(IRQ)를 생성하여 CPU를 EA31달러로 커널 IRQ 핸들러에 보냅니다.핸들러는 CIA의 IRQ를 인식하고 시계를 업데이트하며 키보드를 스캔하고 BASIC에서 커서를 깜박입니다.

게임은 보통 CIA의 인터럽트를 무효로 하고 특정 스캔 라인에 도달했을 때 인터럽트를 생성하도록 VIC-II를 설정합니다.이것은 분할 스크린 스크롤과 음악 재생에 필요합니다.게임은 IRQ 벡터를 $0314/$0315 래스터 핸들러에 다시 매핑합니다.래스터 핸들러는 이러한 기능을 실행하고 옵션으로 JMP $EA31 명령을 실행하여 커널에 제어를 반환합니다.

일부 게임은 IRQ를 하나만 사용하지만 중첩된 IRQ가 더 일반적이며 프로그램 안정성을 향상시킵니다.이 설정에서는 마지막 IRQ가 첫 번째 IRQ의 주소로 복원될 때까지 각 IRQ에 대해 두 번째 루틴에 다시 매핑됩니다.네스트된 IRQ를 사용하는 경우 체인에 필요한 것은 JMP $EA31 명령 1개뿐이며, 나머지는 커널 핸들러의 끝에 있는 JMP $EA81로 종료할 수 있습니다.또한 게임이 커널을 전환하고 대신 자체 IRQ 핸들러를 사용하는 경우도 드물지 않습니다.NMI를 추가 인터럽트 스레드에 사용할 수 있습니다.단, Restore 키를 잘못 누르면 NMI가 트리거되기 때문에 바람직하지 않은 부작용이 발생할 수 있습니다.

VIC-II는 콜리젼 레지스터에서 래스터 인터럽트를 생성하는 경우도 있습니다만, 이 기능은 거의 사용되지 않습니다.

메모리 매핑

VIC-II에는 14비트주소 버스가 있어, C64 메모리 영역의 4개의 16k세그먼트 중 하나를 비디오 데이터에 사용할 수 있습니다.이를 관리하기 위해 CIA의 포트 비트에 의해2개의 주소 비트가 추가됩니다.0000~3달러전원 투입 시 디폴트는 FFF 입니다.두 번째 세그먼트($4000~$7)FFF)는 일반적으로 BASIC에서 프로그래밍하는 데 최적의 선택입니다.이것은 RAM이 완전히 비어 있고 ROM이나 I/O 레지스터가 매핑되지 않은 유일한 세그먼트이기 때문입니다.4번째 세그먼트($C000–$FFFF)도 머신 언어를 사용하는 경우 적합합니다.이는 CPU에 의한 읽기 액세스를 얻기 위해 커널 ROM을 비활성화해야 하며 $4000-7의 사용으로 인해 발생하는 프로그램 코드와 데이터가 서로 연결되지 않기 때문입니다.FFF. 그래픽스 데이터는 BASIC ROM 아래에 $A000~$B로 자유롭게 저장할 수 있습니다.FFF, $E000-$FFFF 또는 I/O 레지스터의 커널 ROM 및 $D000-$의 컬러 RAMDFFF는 CPU 메모리 매핑 조정 방법에 관계없이 VIC-II에서는 RAM만 인식되기 때문에 문자 ROM은 첫 번째와 세 번째 세그먼트에서만 표시되므로 세그먼트2 또는 4가 사용되는 경우 프로그래머는 자신의 문자 데이터를 제공해야 합니다.화면 RAM, 비트맵 페이지, 스프라이트 및 문자 집합은 모두 동일한 세그먼트 창을 점유해야 합니다(CIA 비트가 스캔 라인 인터럽트로 변경되지 않는 경우).시스템 메모리의 마지막 6바이트($FFFA-$FFF)에는 IRQ, NMI 및 리셋 벡터가 포함되어 있기 때문에 메모리 상단이 문자 세트 또는 스프라이트 데이터를 저장하는 데 사용되는 경우 벡터의 덮어쓰기를 방지하기 위해 1개의 문자 또는 스프라이트를 희생해야 합니다.

레지스터

VIC-II 에는, 다음의 47 개의 읽기/쓰기 레지스터가 있습니다.

등록하세요 16진수 비트 7 비트 6 비트 5 비트 4 비트 3 비트 2 비트 1 비트 0 묘사
0
D000
M0X
X 좌표 스프라이트 0
1
D001
M0Y
Y 좌표 스프라이트 0
2
D002
M1X
X 좌표 스프라이트 1
3
D003
M1Y
Y 좌표 스프라이트 1
4
D004
M2X
X 좌표 스프라이트 2
5
D005
M2Y
Y 좌표 스프라이트 2
6
D006
M3X
X 좌표 스프라이트 3
7
D007
M3Y
Y 좌표 스프라이트 3
8
D008
M4X
X 좌표 스프라이트 4
9
D009
M4Y
Y 좌표 스프라이트 4
10
D00A
M5X
X 좌표 스프라이트 5
11
D00B
M5Y
Y 좌표 스프라이트 5
12
D00C
M6X
X 좌표 스프라이트 6
13
D00D
M6Y
Y 좌표 스프라이트 6
14
D00E
M7X
X 좌표 스프라이트 7
15
D00F
M7Y
Y 좌표 스프라이트 7
16
D010
M7X8 M6X8 M5X8 M4X8 M3X8 M2X8 M1X8 M0X8 X 좌표의 MSB
17
D011
RST8 ECM BMM RSEL
Y스크린
제어 레지스터 1
18
D012
RST
래스터 카운터
19
D013
LPX
라이트 펜 X
20
D014
LPY
라이트 펜 Y
21
D015
M7E M6E M5E M4E M3E M2E M1E M0E 스프라이트가 유효
22
D016
RES MCM CSEL
X스크롤
컨트롤 레지스터 2
23
D017
M7YE M6YE M5YE M4YE M3YE M2YE M1YE M0YE 스프라이트 Y 확장
24
D018
VM13 VM12 VM11 VM10 CB13 CB12 CB11 메모리 포인터
25
D019
IRQ ILP IMMC IMBC IRST 인터럽트 레지스터
26
D01A
ELP EMMC EMBC ERST 인터럽트 활성화
27
D01B
M7DP M6DP M5DP M4DP M3DP M2DP M1DP M0DP 스프라이트 데이터 우선 순위
28
D01C
M7MC M6MC M5MC M4MC M3MC M2MC M1MC M0MC 스프라이트 다색
29
D01D
M7XE M6XE M5XE M4XE M3XE M2XE M1XE M0XE 스프라이트 X 확장
30
D01E
M7M M6M M5M M4M M3M M2M M1M M0M 스프라이트-스프라이트 충돌
31
D01F
M7D M6D M5D M4D M3D M2D M1D M0D 스프라이트 데이터 충돌
32
D020
EC
테두리 색
33
D021
B0C
배경색 0
34
D022
지하 1C
배경색 1
35
D023
B2C
배경색 2
36
D024
B3C
배경색 3
37
D025
MM0
스프라이트 멀티컬러 0
38
D026
MM1
사이다 멀티컬러 1
39
D027
M0C
컬러 스프라이트 0
40
D028
M1C
컬러 스프라이트 1
41
D029
M2C
컬러 스프라이트 2
42
D02A
M3C
컬러 스프라이트 3
43
D02B
M4C
컬러 스프라이트 4
44
D02C
M5C
컬러 스프라이트 5
45
D02D
M6C
컬러 스프라이트 6
46
D02E
M7C
컬러 스프라이트 7

색상

VIC-II 칩에는 위와 같이 고정 16색 팔레트가 있습니다.

멀티컬러 캐릭터 모드(160×200픽셀, 대부분의 게임에서 사용)에서는 캐릭터는 4×8픽셀(픽셀은 2배 폭이므로 거의 정사각형)과 16색 중 4색입니다.4번째 색상은 전체 화면(배경색)에서 동일하며, 나머지 3개는 이러한 4×8 픽셀 영역마다 개별적으로 설정할 수 있습니다.활성 텍스트 화면에서 두 가지 색상이 로드되고 세 번째 색상이 컬러 RAM에서 로드됩니다.멀티컬러 모드(12×21픽셀)의 스프라이트는 3가지 색상이 있습니다.두 가지 색상은 모든 스프라이트에서 공유되며 한 가지 색상은 개별적입니다.작가들은 각각의 색깔과 어우러져 화려한 인상을 남길 수 있도록 공통의 색을 골라야 했다.래스터 인터럽트 중에 공유된 색상을 다시 로드하는 게임도 있습니다. 예를 들어, 게임 Turrican II의 수중 영역(수직으로 구분됨)은 다른 색상을 가집니다.Epyx의 Summer Games와 COMPUTE!Basketball Sam & Ed와 같은 다른 제품에서는 두 개의 고해상도 스프라이트를 겹쳐 수평 해상도를 희생하지 않고 두 개의 전경색을 사용할 수 있습니다[1].물론 이 기술은 사용 가능한 스프라이트의 수를 절반으로 줄입니다.

PAL C64 에서는, 모니터나 TV내의 PAL 지연 라인을 사용하고, 연속하는 화면 라인의 휘도를 평균하지 않고, 같은 휘도의 2개의 화면 라인을 번갈아 표시함으로써, 7개의 비표준 색상을 작성할 수 있습니다.VIC [11]칩에는 7쌍의 색상이 있습니다.


C64 팀은 16색 팔레트를 수학적으로 계산하는 데 많은 시간을 할애하지 않았다.VIC-II 개발에 참여한 Robert Yannes는 다음과 같이 말했다.

유감스럽게도 당신이 생각하는 것만큼 색채 선택에 많은 노력을 기울이지 않았습니다.색상, 채도, 휘도를 모두 제어할 수 있었기 때문에 마음에 드는 색상을 선택했습니다.그러나 칩의 공간을 절약하기 위해, 많은 색상은 단순히 우리가 선택한 색상의 휠 반대쪽에 있었다.이를 통해 각 [12]색상에 대해 완전히 고유한 세트를 갖는 대신 기존 저항 값을 재사용할 수 있습니다.

PAL C64에서 사용되는 VIC-II의 초기 버전은 이후의 [13]리비전과는 다른 색상 팔레트를 가집니다.

16가지 색상의 풀 팔레트는 다음과 같이 YPbPr 신호의 변화에 따라 생성됩니다.

Number : 이름 Y Pb(관련) Pr(관련)
0 : 검은색 0 0 0
1 : 흰색 1 0 0
2 : 빨간색 0.3125 −0.3826834 0.9238795
3 : 시안 0.625 0.3826834 −0.9238795
4 : 보라색 0.375 0.7071068 0.7071068
5 : 녹색 0.5 −0.7071068 −0.7071068
6 : 파란색 0.25 1 0
7 : 노란색 0.75 −1 0
8 : 오렌지 0.375 −0.7071068 0.7071068
9 : 갈색 0.25 −0.9238795 0.3826834
10 : 옅은 빨강 0.5 −0.3826834 0.9238795
11 : 짙은 회색 0.3125 0 0
12 : 중간 회색 0.46875 0 0
13 : 연두색 0.75 −0.7071068 −0.7071068
14 : 하늘색 0.46875 1 0
15 : 옅은 회색 0.625 0 0


VIC-IE

MOS 8566 VIC-IIe pinout

Commodore 128의 8564/8566 VIC-IE는 40핀이 아닌 48핀을 사용했습니다.그 중 Zilog Z80 CPU 추가용 클럭이 더 많은 신호를 생성했기 때문입니다.그것은 또한 두 개의 여분의 레지스터를 가지고 있었다.추가 레지스터 중 하나는 그 컴퓨터의 추가된 숫자 키패드 및 기타 추가 키에 액세스하기 위한 것입니다.이 함수는 필요한 3개의 추가 출력 핀을 추가하는 것이 컴퓨터에서 가장 쉬운 위치라는 것이 증명되었기 때문에 VIC에 추가되었습니다.또 다른 레지스터는 1MHz와 2MHz 시스템 클럭을 전환하기 위한 것입니다.고속에서는 VIC-II의 비디오 출력은 코드 내의 매초 바이트를 화면에 블랙의 채용 비트 패턴으로 표시해, 그 속도(8563VDC RGB 칩 경유)로 C128의 80컬럼 모드를 사용하고 있는 것을 나타내고 있습니다.비공식적으로는 2개의 추가 레지스터를 C128의 C64 모드에서도 사용할 수 있으므로 추가 키를 사용할 수 있을 뿐만 아니라 자체 제작한 C64 [14]프로그램에서 CPU 바운드 코드(집약 수치 계산 등)를 2배 속도로 실행할 수 있습니다.추가 레지스터는 C128의 C64 모드와 실제 C64 사이의 작은 비호환성의 원인이기도 합니다.몇몇 오래된 C64 프로그램은 실수로 2MHz 토글비트에 기입되어 실제 C64에서는 아무것도 실행되지 않지만 C128의 C64 모드에서는 디스플레이가 흐트러집니다.

VIC-IE는 칩의 다른 부분과 컬러 신호가 [citation needed]어긋나는 특정 방법으로 레지스터를 조작함으로써 추가 컬러 세트를 생성하는 거의 알려지지 않은 기능을 가지고 있습니다.

VIC-IE의 테스트 비트의 특정 동작을 사용하여 320×400(하이레스 모드)과 160×400(멀티 컬러 모드)의 해상도로 리얼 인터레이스 화상을 제작할 수 있습니다.

VIC-II 버전 목록

Commodore는 VIC-II의 수명 동안 많은 수정을 가했습니다.Compute!의 Gazette의 1983년 7월호 창간호는 [15]1982년 중반 코모도어 64가 출시된 이후 이미 8개가 있었다고 보도했다.

  • PAL
    • MOS Technology 6569 – (PAL-B, 대부분의 PAL 국가에서 사용)
    • MOS Technology 6572 – (PAL-N, 남미 남부에서만 사용)
    • MOS Technology 6573 – (PAL-M, 브라질에서만 사용)
    • MOS 테크놀로지 8565 – "C64E" 메인보드용 HMOS-II 버전
    • MOS 테크놀로지 8566 – VIC-II E (PAL-B) C128 버전
    • MOS 테크놀로지 8569 – VIC-II E (PAL-N) C128 버전
  • NTSC
    • MOS 테크놀로지 6566 – SRAM/비멀티드 어드레스 라인용으로 설계(Commodore MAX 머신에서 사용)
    • MOS 테크놀로지 6567 – 오리지널 NMOS 버전
    • MOS 테크놀로지 8562 – HMOS-II 버전
    • MOS 테크놀로지 8564 – VIC-II E C128 버전

모든 C64 모델에서는 VIC-II가 소켓에 연결되어 있어 쉽게 교체할 수 있지만 8565 및 8562가 5V만 사용하는 경우 6569, 6572, 6573, 6566 및 6567은 12V와 5V를 사용합니다.C64 메인보드의 가장 오래된 버전에서 전원을 켜면 메인보드를 변경하지 않고 이전 버전을 새 버전으로 교체하면 8565 및 8562가 파괴됩니다.

6569에는 6569R1(일반적으로 금도금), 6569R3, 6569R4 및 6569R5의 여러 리비전이 있습니다.8565의 가장 일반적인 버전은 8565R2입니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Pierceall, Kimberly. "Turns out, the leader of the Commodore 64 engineering team retired to Yorktown". pilotonline.com. Retrieved 2021-10-12.
  2. ^ Bagnall, Brian (2005). "The Secret Project 1981". On the Edge: The Spectacular Rise and Fall of Commodore (1 ed.). Winnipeg, Manitoba: Variant Press. pp. 224–225. ISBN 0-9738649-0-7.
  3. ^ a b Perry, Tekla S.; Wallich, Paul (March 1985). "Design case history: the Commodore 64" (PDF). IEEE Spectrum. New York, New York: Institute of Electrical and Electronics Engineers: 48–58. ISSN 0018-9235. Retrieved 2011-11-12.
  4. ^ Bagnall, Brian (2005). "The Secret Project 1981". On the Edge: The Spectacular Rise and Fall of Commodore (1 ed.). Winnipeg, Manitoba: Variant Press. p. 227. ISBN 0-9738649-0-7.
  5. ^ Bagnall, Brian (2005). "The Secret Project 1981". On the Edge: The Spectacular Rise and Fall of Commodore (1 ed.). Winnipeg, Manitoba: Variant Press. p. 229. ISBN 0-9738649-0-7.
  6. ^ Bagnall, Brian (2005). "The Secret Project 1981". On the Edge: The Spectacular Rise and Fall of Commodore (1 ed.). Winnipeg, Manitoba: Variant Press. p. 230. ISBN 0-9738649-0-7.
  7. ^ Bagnall, Brian (2005). "The Secret Project 1981". On the Edge: The Spectacular Rise and Fall of Commodore (1 ed.). Winnipeg, Manitoba: Variant Press. p. 242. ISBN 0-9738649-0-7.
  8. ^ Yakal, Kathy (June 1986). "The Evolution of Commodore Graphics". Compute!'s Gazette. pp. 34–42. Retrieved 2019-06-18.
  9. ^ a b c d Cowper, Ottis R. (1986). Mapping the Commodore 128. Greensboro, North Carolina: COMPUTE! Books. ISBN 0-87455-060-2.
  10. ^ "6567 Video Interface Chip: Specification Sheet" (PDF). Commodore Semiconductor Group. sheets 2 and 5.
  11. ^ "Luma-Driven Graphics on the C64".
  12. ^ Timmermann, Philip. "Commodore VIC-II Color Analysis (Preview)". Retrieved 11 February 2018.
  13. ^ Sjöstedt, Ilkka. "Old VIC-II Colors and Color Blending". ilesj's blog. Retrieved 11 February 2018.
  14. ^ Cowper, Ottis R.; Florance, David; Heimarck, Todd D.; Krause, John; Miller, George W.; Mykytyn, Kevin; Nelson, Philip I.; Victor, Tim (October 1985). "Chapter 7. System Architecture". COMPUTE!'s 128 Programmer's Guide. Greensboro, North Carolina: COMPUTE! Publications. pp. 348–349. ISBN 0-87455-031-9.
  15. ^ Halfhill, Tom R. (July 1983). "Commodore 64 Video Update". Compute!'s Gazette. p. 40. Retrieved 6 February 2016.

외부 링크