MOS 테크놀로지 CIA

MOS Technology CIA
6526 CIA의 핀 구성
6526년 초 CIA는 여전히 값비싼 도자기 꾸러미에 금을 담았다.이후 버전은 저렴한 플라스틱 패키지로 제작되었다.
플라스틱 포장된 CIA MOS 6526A
Amiga 1000의 MOS 8520A

6526/8520 Complex Interface Adapter(CIA; 복합 인터페이스 어댑터)는 MOS 테크놀로지에 의해 제조된 집적회로입니다.6502 마이크로프로세서 패밀리의 I/O 포트 컨트롤러로서 병행 및 시리얼 I/O 기능, 타이머 및 Time-of-Day(TOD) 클럭을 제공합니다. 장치의 가장 두드러진 용도코모도어 64와 코모도어 128(D)로 각각 2개의 CIA 칩이 포함되어 있었다.Commodore 1570Commodore 1571 플로피 디스크 드라이브에는 각각 1개의 CIA가 포함되어 있습니다.또한 Amiga 가정용 컴퓨터와 Commodore 1581 플로피 디스크 드라이브는 8520이라고 불리는 수정된 CIA 회로를 사용했습니다. 8520은 단순화된 TOD 회로를 제외하고 기능적으로 6526과 동일합니다.

병렬 I/O

CIA에는 2개의 8비트 양방향 병렬 I/O 포트가 있었습니다.각 포트에는 대응하는 데이터 방향 레지스터가 있어 각 데이터 라인을 개별적으로 입력 또는 출력 모드로 설정할 수 있습니다.이러한 포토를 읽어내면, 설정된 데이터 방향에 관계없이, 개개의 회선의 상태가 항상 반환됩니다.

시리얼 I/O

내부 양방향 8비트 시프트 레지스터를 통해 CIA는 시리얼 I/O를 처리할 수 있었습니다.칩은 외부 소스로부터 클럭된 시리얼 입력을 수신할 수 있으며 내장 프로그래머블타이머 중 하나를 사용하여 클럭된 시리얼 출력을 송신할 수 있습니다.8비트 시리얼 전송이 완료될 때마다 인터럽트가 생성되었습니다.여러 컴퓨터의 시프트 레지스터와 클럭 출력을 함께 연결함으로써 간단한 "네트워크"를 구현할 수 있었다.2 MHz 버전에서는 최대 비트레이트는 500 kbit/s입니다.

CIA는 초기 6522 VIA의 시리얼 시프트 레지스터에 버그를 수정했습니다.당초, CIA는 디스크 드라이브와의 고속 통신을 가능하게 하려고 하고 있었습니다만, VIC-20과의 디스크 드라이브의 호환성을 유지하고 싶다고 생각하고 있었기 때문에, 결국 사용할 수 없었습니다.실제로 1541 드라이브의 펌 웨어는, C64의 비디오 프로세서의 동작을 회피하기 위해서, VIC-20보다 더 느린 속도로 작성될 필요가 있었습니다.ng 512마이크로초마다 40마이크로초 동안 CPU를 끄고 그 시간 동안 버스 소리를 들을 수 없기 때문에 [1]놓칠 위험이 있습니다.

인터벌 타이머

2개의 프로그램 가능한 인터벌타이머를 사용할 수 있으며, 각각 마이크로초 미만의 정밀도를 가지고 있습니다.각 타이머는 16비트 읽기 전용 프리셋테이블 다운카운터와 대응하는 16비트 쓰기 전용 래치로 구성됩니다.타이머가 기동할 때마다 타이머의 래치가 카운터에 자동적으로 카피되어 언더플로우가 될 때까지 카운터가 클럭사이클마다 감소합니다.이때 CIA가 그렇게 설정되어 있으면 인터럽트가 생성됩니다.

타이머는 언더플로우 후 정지하는 '원샷' 모드 또는 래치 값을 새로고침하고 타이머 사이클을 새로 시작하는 '연속' 모드 중 하나로 실행할 수 있습니다.인터럽트 생성과 더불어 타이머 출력은 두 번째 I/O 포트로 게이트될 수도 있습니다.

Commodore 64 및 Commodore 128에서 설정한 바와 같이 CIA의 타이밍은 ü2 시스템 클럭(공칭 1MHz)에 의해 제어되었습니다.즉, 타이머가 약 1마이크로초 간격으로 감소하는 것을 의미합니다.정확한 시간은 시스템이 NTSC 또는 PAL 비디오 표준을 사용하느냐에 따라 결정됩니다.C-128에서는 클럭 스트레칭이 채용되어 시스템이 SLOW 모드로 동작하고 있는지 FAST 모드로 동작하고 있는지에 따라 CIA의 타이밍이 영향을 받지 않았습니다.

타이머 A의 언더플로우를 카운트하도록 타이머 B를 프로그래밍함으로써 비교적 긴 타이밍 간격을 생성할 수 있었습니다.양쪽 타이머가 최대 간격값 65,535로 로드된 경우 1시간, 11분, 34초의 타이밍 간격이 발생합니다.

Time-of-Day(TOD) 클럭

실시간 시계가 CIA에 통합되어 있어 간격 타이머의 마이크로초 정밀도보다 인간의 요구에 더 도움이 되는 시간 기록 장치를 제공합니다.시간은 미국식 12시간 AM/PM 형식으로 유지됩니다.TOD 클럭은 4개의 읽기/쓰기 레지스터(시간(AM/PM 플래그로서 비트7), 분, 초, 10분의 1초)로 구성됩니다.모든 레지스터는 BCD 형식으로 읽기 때문에 부호화/복호화 프로세스가 단순해집니다.

레지스터에서 읽으면 항상 하루 중 시간이 반환됩니다.시간을 가져오는 동안 반송 오류를 방지하기 위해 시간 레지스터를 읽으면 내부 시간 기록 정확도에 영향을 주지 않고 레지스터 업데이트가 즉시 중지됩니다.10분의 1 레지스터를 읽으면 업데이트가 재개됩니다."on the fly" 시간 레지스터 이외의 레지스터를 읽을 수 있으므로 실행 중인 TOD 클럭을 타이머로 사용하는 것이 실용적입니다.단, 시간 레지스터를 읽을 경우 10분의 1 레지스터를 읽을 필요가 있습니다.그렇지 않으면 모든 TOD 레지스터가 "동결" 상태로 유지됩니다.

시간을 설정하려면 적절한 BCD 값을 레지스터에 씁니다.시간 레지스터에 대한 쓰기 액세스는 클럭을 완전히 정지합니다.값이 10분의 1 레지스터에 기록될 때까지 클럭은 다시 시작되지 않습니다.레지스터가 시스템의 메모리 맵에 나타나는 순서 때문에 레지스터를 올바른 순서로 쓰기 위해 필요한 것은 단순한 루프뿐입니다.10분의 1 레지스터에만 기입하여 클럭을 동작시킬 수 있습니다.이 동작에서는 하드웨어 리셋 후 클럭이 1:00:00.0에 시작됩니다.

TOD는 타임키핑 기능과 더불어 원하는 시간에 인터럽트 요구를 생성하도록 배치함으로써 알람클럭으로 동작하도록 설정할 수 있습니다.많은 6526s의 버그로 인해(아래 에러타 참조), 알람 시간의 seconds 컴포넌트가 정확히0일 때 알람 IRQ가 항상 발생하는 것은 아닙니다.회피책은 알람의 10분의 1 값을 0.1초로 설정하는 것입니다.

TOD 클럭의 내부 회로는 50 또는 60Hz 사인파 신호에 의해 구동되도록 설계되었습니다.C-64 및 C-128(D)에서 사용되는 것처럼 컴퓨터의 전원 공급 장치는 이러한 신호를 주전원에서 공급하여 장기 드리프트가 거의 없는 안정적인 타임 키퍼를 구현했습니다.양쪽의 전원 회선 주파수로 동작할 수 있기 때문에, 50Hz 또는 60Hz의 전력을 가지는 나라에서 동작하는 컴퓨터에서는, 6526 의 단일 버전을 사용할 수 있었습니다.일반적인 생각과는 달리 NTSC 또는 PAL 비디오 표준은 주전원 주파수에 직접 연결되어 있지 않다는 점에 유의하십시오.또한 일부 컴퓨터는 주 전원에서 TOD 클럭 주파수를 도출하지 못했습니다.를 들어 Commodore SX-64의 NTSC PAL 모델 모두 전용 크리스탈에 의해 공급되는 60Hz TOD 클럭을 사용합니다.를 들어 Commodore 64의 KERNAL 운영체제는 시스템 부팅 시 비디오 표준을 결정하지만 제공된 TOD 클럭 주파수를 식별하거나 50Hz 구동 머신에서 CIA를 올바르게 초기화하지 않습니다.따라서 CIA의 TOD 기능을 사용하여 공급된 주파수를 결정하고 그에 따라 CIA 플래그를 설정하는 것은 애플리케이션소프트웨어의 책임입니다.그렇지 않으면 시계가 정확한 시각에서 빠르게 벗어날 수 있습니다.

AmigaCommodore 1581 디스크 드라이브에 사용된 CIA의 8520 리비전에서는 6526의 BCD 형식을 대체하는 24비트 바이너리 카운터로 수정되었습니다.그러나 다른 행동도 비슷했다.

버전

CIA는 1MHz(6526), 2MHz(6526A) 및 3MHz(6526B) 버전으로 제공되었습니다.패키지는 JEDEC 규격의 40핀 세라믹 또는 플라스틱 DIP였습니다.8520 CIA는 수정 시각과 함께 아미가 컴퓨터에 사용되었다.

C128 DCR(Commodore 128 참조) 내부에 코모도어 1571을 절감하기 위한 코모도어 축소(4 레지스터만) CIA와 같은 논리를 5710이라고 하는 게이트 어레이에 내장하고 있습니다.5710 CIA에는 고속 시리얼인터페이스의 시리얼 클럭이 CIA6526에 상당하는 타이머 A의 값 5에 유선 연결되어 있기 때문에 전송 시 비트당 시간은 5μs입니다.이는 원래 Commodore 1571의 6526 CIA의 타이머A 값 6과는 다릅니다.5710 CIA에는 타이머 또는 타이머 제어 레지스터가 포함되어 있지 않습니다.여기에는 2개의 포트 레지스터와 시리얼 시프터와 그 이벤트를 제어하는 레지스터만 포함됩니다.

에라타

앞서 설명한 알람클럭 인터럽트 버그 외에 많은 CIA에서는 인터럽트가 실제로 발생해야 할 시간보다1 ~ 2 클럭사이클 전에 인터럽트 컨트롤 레지스터(ICR)를 읽었을 경우 타이머B 하드웨어 인터럽트를 생성하지 못하는 결함이 있었습니다.이 결함은 Commodore가 제공하는 (8비트) 운영 체제의 논리 오류와 함께 더 높은 보레이트로 실행할 때 Commodore 64 및 Commodore 128 컴퓨터에서 의사 RS-232 오류를 자주 발생시켰습니다.

레퍼런스

  1. ^ Perry, Tekla S.; Wallich, Paul (March 1985). "Design case history: the Commodore 64" (PDF). IEEE Spectrum. 22 (3): 48–58. doi:10.1109/MSPEC.1985.6370590. ISSN 0018-9235. S2CID 11900865. Archived from the original (PDF) on 2012-05-13. Retrieved 2011-11-12.
  2. ^ c64-wiki.com 기사

외부 링크