아타리 SIO

**직렬 입출력**(Serial Input/Output) 시스템(통칭 **SIO**)은 아타리 8비트 제품군에서 대부분의 입출력 기능을 제공하기 위해 사용된 독점적인 주변 장치 버스 및 관련 프로토콜 스택이었다. RS-232와 같은 당시의 대부분의 입출력 시스템과 달리, SIO는 수십 개의 장치를 지원하는 단일 데이지 체인 포트에 여러 장치를 연결할 수 있는 경량 프로토콜을 포함했다. 또한 플러그 앤 플레이 작동을 지원했다. SIO의 설계자인 조 디큐어는 이 시스템에 대한 자신의 작업이 USB의 기반이 되었다고 밝혔다.

SIO는 무선 간섭에 대한 FCC 문제로 인해 애플 II와 같이 내부 확장 카드 슬롯을 사용하지 않고 확장을 허용하기 위해 개발되었다. 이는 장치 지원 측면에서 상당히 유연해야 했다. SIO 인터페이스를 사용한 장치에는 프린터, 플로피 디스크 드라이브, 카세트 데크, 모뎀 및 확장 상자가 포함되었다. 일부 장치에는 부팅 시 호스트 컴퓨터로 복사되는 ROM 기반 드라이버가 있어 컴퓨터 자체에 내장된 기본 지원 없이도 새로운 장치를 지원할 수 있었다.

SIO는 프로토콜을 지원하기 위해 주변 장치에 로직이 필요했으며, 경우에 따라 상당한 처리 능력이 필요했다. 예를 들어 아타리 810 플로피 디스크 드라이브에는 MOS 6507이 포함되어 있었다. 또한, 크고 맞춤형 커넥터는 비쌌다. 이러한 요인들이 SIO 시스템의 비용을 상승시켰고, 디큐어는 이것이 "시스템을 침몰시켰다"고 비난했다. 8비트 컴퓨터 역사 동안 시스템 비용을 낮추려는 노력은 실패했다.

"SIO"라는 이름은 데이터 교환을 처리하는 운영체제 섹션만을 의미하는 것이 적절하지만, 아타리 문서에서는 버스 자체를 단순히 "직렬 버스" 또는 "인터페이스 버스"라고 부르며, 때로는 이것도 SIO라고 언급된다. 일반적으로 SIO는 운영체제부터 버스, 그리고 물리적 커넥터까지 전체 시스템을 지칭한다.

## 역사
### FCC 문제
SIO 시스템은 궁극적으로 아날로그 텔레비전 신호를 직접 생성하는 모든 장치에서 유출될 수 있는 RF 간섭 허용량에 대한 FCC 규정 덕분에 존재하게 되었다. 이 규정은 매우 낮은 양의 누출을 요구했으며 광범위한 테스트 스위트를 통과해야 했다. 아타리의 그래스 밸리 그룹이 아타리 800이 될 콜린(Colleen) 기계를 설계하던 시기에 이 규정들은 개정되고 있었다.

당시 텔레비전에 연결되는 몇 안 되는 사전 제작된 기계 중 하나였던 애플 II는 컴퓨터에 RF 변조기를 포함하지 않음으로써 이 문제를 피했다. 대신 애플은 지역 전자 회사인 M&R 엔터프라이즈와 계약하여 Sup'R'Mod라는 이름으로 플러그인 변조기를 판매했다. 이는 애플이 기술적으로 텔레비전 신호를 생성하지 않았고 FCC 테스트를 거칠 필요가 없다는 것을 의미했다. 아타리의 주요 공급업체 중 하나인 시어스는 이것이 자사의 기성품 판매에 적합한 해결책이 아니라고 생각했으므로, 간섭 요구 사항을 충족하기 위해 전체 시스템을 두께 2mm의 주조 알루미늄 블록으로 감쌌다.

콜린은 원래 아타리 2600의 후속작인 게임 콘솔로 구상되었다. 애플 II의 성공으로 시스템은 가정용 컴퓨터로 재정비되었고, 이 시장에는 주변 장치가 필요했다. 애플 II와 같은 기기에서는 어댑터 카드를 기기의 내부 카드 슬롯에 넣고, 케이스의 구멍을 통해 케이블을 연결한 다음, 장치를 해당 케이블에 연결하여 주변 장치를 지원했다. 이러한 케이블을 위한 충분히 큰 구멍은 콜린이 RF 테스트를 통과하지 못하게 할 것이므로 심각한 문제를 야기했다. 또한 카드의 대류 냉각도 매우 어려웠다.

### TI의 우회
1978년 초 방문 중에 텍사스 인스트루먼트(TI) 영업사원은 양쪽 끝에 트랜시버가 성형된 광섬유 케이블로 구성된 시스템을 시연했다. 조 디큐어는 이를 사용하여 비디오 신호를 외부 RF 변조기로 보낼 수 있으며, 이는 어차피 텔레비전으로 신호를 보내는 데 필요한 동축 케이블만큼이나 간단할 것이라고 제안했다. 이제 컴퓨터는 일반 슬롯을 가질 수 있었다. 애플 II처럼 RF 부분은 전적으로 외부적일 것이며 컴퓨터와 별도로 자체적으로 테스트할 수 있었다.

디큐어가 자신의 개념을 설명했을 때, 영업사원의 "눈이 거의 튀어나올 뻔했다." 그래스 밸리 팀은 모르는 사이에 TI는 당시 TI-99/4 개발 중이었고 RF 출력과 동일한 문제에 직면해 있었다. 디큐어가 나중에 그의 상사인 웨이드 투마에게 이 아이디어를 설명했을 때, 투마는 "아니, FCC는 우리가 그런 속임수를 쓰도록 허용하지 않을 거야"라고 대답했다. 이는 사실로 밝혀졌다. TI는 디큐어의 아이디어를 사용했지만, 1979년 FCC에 제출했을 때 FCC는 이를 즉시 거부했다. TI는 시스템을 재설계해야 했고, 그로 인한 지연으로 인해 아타리가 먼저 시장에 출시되었다.

### SIO
카드 슬롯을 허용하는 이 경로가 막히자, 디큐어는 어떤 종류의 외부 시스템을 통한 확장 제공 문제로 돌아갔다.

이 무렵, 아타리의 아타리 포키 칩을 사용하여 소리 출력을 테이프에 직접 녹음함으로써 카세트 데크를 작동시키는 것에 대한 상당한 연구가 진행되었다. 적절한 수정만 가하면 POKEY가 디지털-아날로그 변환 하드웨어를 우회하고 TTL 출력을 직접 구동할 수 있다는 것이 밝혀졌다. TTL 디지털 버스를 생성하기 위해 SIO 시스템은 POKEY의 네 가지 사운드 채널 중 두 개를 사용하여 주어진 주파수의 클럭 신호를 나타내는 꾸준한 톤을 생성했다. 단일 바이트 버퍼가 데이터를 송수신하는 데 사용되었다. 클럭 신호가 전환될 때마다 버퍼에서 한 비트가 읽히거나 쓰여졌다. 8비트 모두가 읽히거나 쓰여지면 시스템은 운영체제가 더 많은 데이터를 읽거나 쓰도록 트리거하는 인터럽트를 생성했다.

일반적으로 단일 장치만 사용되는 카세트 인터페이스와 달리, 외부 확장 포트는 하나 이상의 장치를 지원할 수 있어야 했다. 이를 지원하기 위해 간단한 프로토콜이 개발되었고, 원래의 간단한 카세트 포트에 몇 개의 새로운 핀이 추가되었다. 이 중 가장 중요한 것은 COMMAND 핀으로, 버스의 장치 중 하나를 활성화하고 데이터를 요청하거나 명령을 보내는 5바이트 메시지를 장치가 수신하도록 트리거했다. 또한 장치가 호스트의 제어 레지스터에 비트를 설정하는 데 사용할 수 있는 PROCEED 및 INTERRUPT 핀을 추가했지만, 배포된 시스템에서는 사용되지 않았다. 마찬가지로, POKEY가 생성하는 타이밍 신호는 CLOCKOUT 및 CLOCKIN 핀으로 전송되었지만, 비동기 프로토콜은 이를 사용하지 않았다.

## 설명
### 하드웨어
섬네일|right|SIO 커넥터는 장치의 핀에 단단히 연결하기 위해 스프링이 있는 금속 리프를 사용했다. 커넥터에 잘린 슬롯은 리프가 움직일 공간을 제공한다.
[섬네일|right|아타리 850은 서드파티 장치에 연결하기 위해 [병렬 포트|센트로닉스 프린터 및 RS-232 직렬 포트를 제공했다. SIO 장치의 전형적인 예로, 데이지 체인을 허용하기 위해 입출력 포트를 모두 가지고 있다.]]

SIO 버스는 맞춤형 13핀 D-커넥터 배열(그러나 D-subminiature는 아님)을 사용하여 구현되었으며, 장치에는 수 커넥터가, 케이블 양쪽 끝에는 암 커넥터가 있었다. 커넥터는 일반적인 D-커넥터와 같은 마찰식 연결과 달리, 장치 소켓에는 매우 견고한 핀과 케이블에는 스프링 장착 커넥터가 있어 반복 사용을 허용할 정도로 물리적으로 견고했다. 대부분의 장치는 주변 장치를 데이지 체인으로 연결할 수 있도록 입출력 포트를 모두 가지고 있었지만, 아타리 410 프로그램 레코더는 체인의 마지막에 배치되어야 했으므로 출력 포트를 포함하지 않았다.

### 통신
SIO는 아타리의 아타리 포키 칩에 의해 제어되었으며, 이 칩에는 여러 범용 타이머가 포함되어 있었다. 이 중 네 개는 타이밍 속도를 세밀하게 제어할 수 있었고, 디지털-아날로그 변환회로(D-to-A)에 연결한 다음 RF 변조기에 들어가기 전에 텔레비전 신호에 믹싱하여 사운드 출력에 사용되도록 의도되었다. 이들은 SIO 시스템의 기반으로 재활용되어 일부 모드에서는 클럭으로 사용되거나 다른 모드에서는 출력 신호를 직접 생성하는 데 사용되었다.

이 시스템은 대부분의 데이터 전송을 반자동화하는 데 사용되는 단일 "시프트 레지스터"를 포함했다. 이는 LSB 우선 순위로 정렬된 단일 8비트 값으로 구성되었으며, 읽기 및 쓰기 버퍼로 사용되었다. 사용자는 쓰기를 위한 SEROUT과 읽기를 위한 SERIN이라는 두 메모리 위치를 통해 여기에 접근했다. 이들은 POKEY와 같은 다양한 지원 칩의 레지스터를 미러링하는 램의 "섀도 레지스터" 위치였다. 데이터 비트는 단일 0 시작 비트와 단일 1 정지 비트로 프레임화되었고, 패리티는 사용되지 않았다.

동기 모드에서 데이터를 쓰려면 POKEY의 주 타이머 채널을 예를 들어 9600비트/초와 같은 적절한 클록 속도로 설정했다. 그런 다음 SEROUT 레지스터에 기록된 모든 데이터는 신호가 높게 될 때마다 한 비트씩 전송되었다. 신호가 비트의 중간에서 낮게 돌아오도록 시간이 맞춰졌다. 모든 10비트(시작 및 정지 포함)가 전송되면 POKEY는 다른 바이트를 수신할 준비가 되었음을 나타내기 위해 CPU에 마스크 가능한 인터럽트를 보냈다. 읽기 시, SERIN이 읽히기 전에 다른 바이트의 데이터가 수신되면 오버플로를 나타내기 위해 SKSTAT의 3번째 비트가 참으로 설정되었다. 수신되는 개별 비트도 도착 시 SKSTAT의 4번째 비트로 전송되어 프레이밍이 완료될 때까지 기다리지 않고 데이터를 직접 읽을 수 있었다.

이 시스템은 공식적으로 최대 19,200비트/초의 속도를 지원했지만, 이 속도는 아타리 엔지니어의 프로토콜 분석기가 그 속도에서 최고조에 달했기 때문에 선택되었다. 이 시스템은 실제로는 훨씬 더 높은 성능을 낼 수 있었다. 특히 플로피 디스크 드라이브와 같은 여러 서드파티 장치는 맞춤형 하드웨어와 드라이버를 사용하여 전송 속도를 최대 72,000비트/초까지 크게 높였다.

이 시스템은 이론적으로 동기 통신에 사용할 수 있는 CLOCKOUT 및 CLOCKIN 핀을 가지고 있었지만, 실제로는 비동기 시스템만 사용되었다. 이 경우, 위에서 설명한 대로 POKEY에서 기본 속도가 설정되었으며, 이 기본 속도에서 최대 5%의 변화를 따랐다. 이는 기계적 또는 전기적 문제로 인해 시간이 지남에 따라 속도에 약간의 변화가 발생하는 실제 장치와 함께 작업하기가 훨씬 쉬웠다. 한 예는 테이프 늘어남으로 인해 속도가 변경될 수 있는 카세트 데크였고, 다른 예는 원격 시스템이 주어진 속도에 정확히 동기화되지 않을 수 있는 모뎀이었다.

### 장치 제어
SIO 시스템은 장치를 데이지 체인으로 연결할 수 있었기 때문에 다양한 데이터 핀의 정보가 체인 상의 특정 장치를 위한 것임을 식별할 수 있는 방법이 필요했다. 이는 COMMAND 핀을 통해 이루어졌다.

COMMAND 핀은 일반적으로 높게 유지되었으며, 낮게 당겨지면 버스 상의 장치는 "명령 프레임"을 수신해야 했다. 이는 5바이트 패킷으로 구성되었다. 첫 번째 바이트는 장치 ID였고, 두 번째 바이트는 장치별 명령 번호였으며, 그 다음에는 드라이버가 어떤 목적으로든 사용할 수 있는 두 개의 보조 데이터 바이트가 왔다. 이 네 바이트 다음에는 체크섬 바이트가 왔다. 프레임이 완료되면 COMMAND 핀은 다시 높아졌다.

패킷을 수신하면 첫 번째 바이트에 지정된 장치가 응답해야 했다. 이는 단일 바이트로 구성된 ASCII 문자였는데, 패킷이 올바르게 디코딩되고 체크섬이 일치하면 "A"(Acknowledge), 그렇지 않으면 "N"이었다. 데이터를 교환하는 명령의 경우, 명령 프레임 다음에는 선택된 장치로부터 또는 장치로의 "데이터 프레임"이 이어졌다. 이 프레임은 수신자에게 "C"(Complete) 또는 "E"(error)로 승인되었다. 128바이트의 데이터 패킷마다 다음 패킷을 보내기 전에 다른 명령 프레임이 필요했기 때문에 처리량은 지연 문제의 영향을 받았다. 아타리 810 디스크 드라이브는 일반적으로 19,200비트/초의 속도를 사용했지만, 오버헤드로 인해 약 6,000비트/초로 제한되었다.

장치는 일반적으로 작은 DIP 스위치를 사용하여 기계적으로 열거되었다. 각 장치 클래스에는 16진수를 기반으로 하는 16개의 잠재적 번호 집합이 부여되었는데, 예를 들어 디스크 드라이브에는 $30 범위가, 프린터에는 $40 범위가 부여되었다. 그러나 각 드라이버는 원하는 만큼 많은 또는 적은 장치를 지원할 수 있었다. 아타리 820 프린터 드라이버는 $40번의 단일 프린터만 지원했지만, 디스크 드라이버는 $31에서 $34번까지의 네 드라이브를 지원할 수 있었다.

### 카세트 사용
섬네일|right|원래의 410은 XL 시대에 훨씬 작아진 1010으로 대체되었다.

SIO가 된 것의 설계는 사운드 하드웨어를 사용하여 적절한 톤을 생성함으로써 카세트 레코더와 인터페이스하기 위한 시스템으로 시작되었다. 이 기능은 생산 버전에도 유지되어 아타리 410 및 그 후속 모델이 비교적 간단한 장치가 될 수 있었다.

카세트를 작동하도록 설정하면 POKEY의 채널 1과 2의 출력이 클록 핀 대신 DATAOUT으로 전송되었다. 두 채널은 테이프에 안전하게 기록될 수 있는 톤을 생성하도록 설정되었는데, 0의 경우 3995Hz는 POKEY 채널 2에, 1의 경우 5326Hz는 채널 1에 설정되었다. 이 모드에서 POKEY가 SERIN에서 비트를 읽을 때, 1은 채널 1이 데이터 핀으로 재생되고, 0은 채널 2가 재생되었다. 이런 방식으로 데이터 바이트는 테이프의 톤으로 변환되었다. 그러나 읽기는 컴퓨터에 A-D 변환기가 없었기 때문에 다른 시스템을 사용했다. 대신, 카세트 데크에는 두 주파수에 맞춰진 두 개의 협대역 필터가 포함되어 있었다. 읽기 중에 이 필터 중 하나의 출력이 테이프에서 비트가 읽힐 때마다 주장되었다. 이들은 디지털 데이터로 호스트 컴퓨터로 다시 전송되었다.

테이프가 헤드 위를 이동하는 속도를 빠르게 하거나 느리게 할 수 있는 늘어짐 및 기타 기계적 문제에 취약했기 때문에 시스템은 비동기 읽기 및 쓰기를 사용했다. 데이터는 레코드당 132바이트 블록으로 기록되었으며, 처음 두 바이트는 비트 패턴 "01010101 01010101"이었다. 블록 사이에 톤이 없는 레코드 간 간격은 운영 체제가 선행 0을 찾아 새 레코드가 시작되는 시점을 알 수 있도록 했다. 그런 다음 포트를 빠르게 읽고 타이밍 비트가 0에서 1로, 그리고 다시 0으로 전환되는 시간을 측정하여 정확한 데이터 속도를 결정했다. 다음 바이트는 128 데이터 바이트의 일반 레코드인지, 짧은 블록인지, 또는 파일 끝인지를 지정하는 제어 바이트였다. 최대 128바이트의 데이터가 이어졌고, 그 다음에는 체크섬 이전의 모든 것을 포함하는 체크섬 바이트가 왔다.

작동은 SIO 포트의 MOTOR 핀에 의해 추가로 제어되었으며, 이 목적에 전념했다. 이 핀이 낮을 때 데크의 모터는 꺼졌다. 이를 통해 사용자는 테이프가 움직이기 시작하지 않고 재생 또는 재생 및 기록을 누를 수 있었다. 컴퓨터에서 적절한 명령이 입력되면 MOTOR가 주장되고 카세트가 회전하기 시작했다.

또 다른 전용 핀은 AUDIOIN으로, POKEY의 D-to-A 변환기와 최종 출력 사이의 사운드 출력 회로에 직접 연결되어 핀의 모든 신호가 POKEY의 사운드(있는 경우)와 혼합되어 텔레비전 스피커로 전송되었다. 이것은 카세트의 왼쪽 사운드 채널에 연결되었고, 오른쪽 채널은 데이터 핀에 연결되었다. 이를 통해 사용자는 왼쪽 채널에 일반 사운드를 녹음한 다음 텔레비전을 통해 재생할 수 있었다. 이는 종종 직접 모터 제어와 결합되어 대화형 언어 학습 테이프 및 유사한 프로그램을 제작하는 데 사용되었다. 일부 소프트웨어 회사에서는 이 채널에 사운드나 음악을 녹음하여 로딩 과정을 더 즐겁게 만들기도 했다.

## 같이 보기
* 특별 입출력

## 각주

## 문헌
* 
* 
* 
* 
* 

분류:컴퓨터 버스
분류:아타리 8비트 제품군
분류:직렬 버스