코모도어 버스

pinout_caption = 앞면 암컷 소켓. **코모도어 직렬 버스**(Commodore serial bus, **IEC 버스**)는 코모도어 코모도어의 인터페이스로, 주로 자기 디스크 데이터 저장 및 프린터에 사용되며, 8비트 가정용 컴퓨터인 VIC-20, 코모도어 64, 코모도어 128, 플러스/4,quote=The 1541 works with the Plus/4 just fine. 코모도어 16, 그리고 코모도어 65에 사용되었다.
# 설명과 역사
코모도어 PET(1977) 컴퓨터 라인에 사용된 병렬 IEEE-488 인터페이스는 너무 비쌌기 때문에, 신호 몇 개만 남기고 간소화된 직렬 버전의 IEEE-488 인터페이스가 개발되었다. 그러나 일반적인 프로토콜 레이아웃은 유지되었다. 코모도어는 VIC-20(1980)부터 이 버스를 사용하기 시작했다. 컴퓨터 연결에는 DIN-6 단자(DIN 45322)를 사용한다.
# 전송 속도
{|class=wikitable ! 설정 !! 속도 !! 유효 비트레이트 |- | 코모도어 64 + 1541 || 400 바이트/초 || 3 200 비트/초 |- | 코모도어 64 + 1541 (고속 로더 사용) || quote=Programming tricks used by Epyx have yielded transfer rates of up to 2.5 kilobytes per second. || 20 480 비트/초 |- | 코모도어 128 + 1571 || url=ftp://www.zimmers.net/pub/cbm/schematics/drives/new/1571/manual/01.html || 41 600 비트/초 |- | 이론상 20 μs || 6250 바이트/초 || 50 000 비트/초 |}
# 인터페이스
섬네일 {| class="wikitable" |+ 핀 배열url=http://old.pinouts.ru/SerialPorts/SerialIOC64_pinout.shtml |- ! 핀 || 이름 || 기능 |- | 1 || /SRQIN || 주변 장치가 호스트(C64)에게 서비스 요청을 할 수 있도록 하는 서비스 요청 입력. C128의 고속 전송에 사용된다.url=https://ist.uwaterloo.ca/~schepers/MJK/serialbus.html |- | 2 || GND || 접지 |- | 3 || /ATN || 직렬 ATN 입/출력. 직렬 데이터 전송의 시작을 나타내기 위해 호스트(C64)가 로우로 설정한다. |- | 4 || /CLK || 직렬 CLK 입/출력. 소프트웨어 핸드셰이킹에 사용된다. |- | 5 || /DATA || 직렬 DATA 입/출력. 데이터 비트 전송. |- | 6 || /RESET || 주변 장치를 초기화하고 오래된 C64도 초기화한다. |}
# 프로토콜 설명
버스 신호는 디지털 단일 종단 개방 컬렉터 5볼트 TTL이며 로우일 때 활성화된다. 버스 장치는 자체 전원을 공급해야 한다. 버스 라인은 전기적으로 개방 컬렉터이므로 모든 장치 라인 드라이버 사이에서 긴 OR 게이트처럼 작동한다. 접지의 논리값은 참이고 그 반대도 마찬가지이다. 모든 장치는 라인을 "참"으로 설정할 수 있다. 라인은 모든 장치가 거짓을 신호할 때만 "거짓"이 된다. 전송은 버스 **토커**가 클럭 라인을 참으로 유지하고, 리스너가 데이터 라인을 참으로 유지하는 것으로 시작한다. 시작하려면 토커가 클럭 라인을 거짓으로 해제한다. 모든 버스 **리스너**가 수신 준비가 되면 데이터 라인을 거짓으로 해제한다. 토커가 클럭 라인이 참이 되지 않고 200 μs 이상 기다리면(유휴 상태), 리스너는 End-or-Identify (EOI)를 수행해야 한다.url=https://codebase64.org/doku.php?id=base:how_the_vic_64_serial_bus_works 데이터 라인이 거짓(해제)인 것이 토커에 의해 200 μs 이내에 확인되지 않으면, 리스너는 토커가 EOI를 진행 중이라는 것을 안다. 이는 "이 문자가 마지막 문자"임을 의미한다. 리스너가 200 μs 타임아웃을 감지하면, 최소 60 μs 동안 데이터 라인을 참으로 당긴 후 해제하여 이를 확인해야 한다. 토커는 클럭 라인을 참으로 당겨 60 μs 이내에 다시 전송으로 돌아갈 수 있다. 데이터는 최하위 비트부터 시작하는 8비트이다. 데이터 라인은 전송할 비트에 따라 설정된다(1=참=접지). 데이터 라인이 설정되면 클럭 라인은 거짓으로 해제된다. 클럭 및 데이터 라인은 최소 20 μs 동안 고정되어 유지된다(코모도어 64는 60 μs 필요). 8비트가 전송된 후, 토커는 데이터 라인을 거짓으로 해제하고 리스너는 1000 μs 이내에 데이터 라인을 참으로 당겨 토커를 확인한다. 이 후 토커는 클럭 라인을 참으로 설정하고 리스너는 데이터 라인을 참으로 설정하여 전송이 시작된 지점으로 돌아간다. 클럭 라인을 거짓으로 유지하여 EOI가 신호되면 전송이 종료되고 리스너는 200 μs 동안 데이터 라인을 참으로 당겨 이를 확인한다. ATN 라인은 참으로 설정되고, 모든 장치에 위와 같이 바이트가 전송되지만, 바이트는 "말하기", "듣기", "말하기 중지", "듣기 중지" 명령 중 하나로 해석된다. 이는 특정 장치에 토커 또는 리스너가 되도록 지시한다. 장치 번호가 일치하는 장치만 말하기 및 듣기 모드로 전환된다. 보조 주소도 뒤따를 수 있다. 상위 논리 수준에서 호스트는 ATN 라인을 참으로 설정하고 "장치 번호 8, 듣기", "보조 주소 2, 열기" 바이트를 전송한다. 다음으로 ATN 라인을 거짓으로 설정하면 호스트가 토커가 되어 클럭 라인을 참으로 유지한다. 장치는 리스너가 되어 데이터 라인을 참으로 유지한다. 호스트는 특정 열기 명령을 전송하고 EOI 신호 시퀀스로 종료한다. 이 후 호스트는 ATN 라인을 참으로 설정하고 "장치 번호 8, 듣기 중지"를 전송한다. 이어서 ATN 라인을 참으로 설정하고 "장치 번호 8, 듣기", "보조 주소 2, 데이터"를 전송한다. 그런 다음 호스트는 ATN 라인을 거짓으로 설정하고 데이터를 보낸다. 호스트가 데이터 전송을 완료하면 ATN 라인이 참으로 설정되고 "장치 번호 8, 듣기 중지"가 전송된다. 역할을 전환하여 호스트를 리스너로, 장치를 토커로 만들어야 할 경우, 장치에 말하기 명령이 전송된 후에 발생한다. 호스트는 데이터 라인을 참으로 설정하고 클럭 라인을 거짓으로 해제한다. 장치는 클럭 라인이 거짓이 될 때까지 기다렸다가 참으로 당기고 데이터 라인을 거짓으로 해제한다. 이 시퀀스 후에 표준 토커-리스너 상호 작용이 뒤따를 수 있다. {| class="wikitable" |+ 버스 명령 ! 코드 !! 의미 |- | device 파이프 문자 0x20 || 듣기, 장치 (0–30) |- | 0x3F || 듣기 중지, 모든 장치 |- | device 파이프 문자 0x40 || 말하기, 장치 |- | 0x5F || 말하기 중지, 모든 장치 |- | channel 파이프 문자 0x60 || 다시 열기, 채널 (0–15) |- | channel 파이프 문자 0xE0 || 닫기, 채널 |- | channel 파이프 문자 0xF0 || 열기, 채널 |} 플로피 장치 번호 8에서 일반 파일을 읽으려면 코모도어 64에서 `LOAD "filename",8,1` 명령을 실행한다. 이 명령은 다음과 같은 고수준 통신을 발생시킨다: {| class="wikitable" |+ 고수준 프로토콜 ! 명령 !! 대상 !! 의미 |- | /28 || 장치 || 듣기, 장치 번호 8 |- | /F0 || 장치 || 채널 0 열기 |- | || 장치 || 파일 이름 바이트 전송 |- | /3F || 장치들 || 모든 장치 듣기 중지 |- | /48 || 장치 || 말하기, 장치 번호 8 |- | /60 || 장치 || 채널 0 다시 열기 |- |colspan=3| 장치 번호 8이 버스의 마스터가 된다 |- | || 호스트 || 바이트 데이터 수신 |- |colspan=3| 호스트가 버스의 마스터가 된다 (정상 작동) |- | /5F || 장치들 || 모든 장치 말하기 중지 |- | /28 || 장치 || 듣기, 장치 번호 8 |- | /E0 || 장치 || 채널 0 닫기 |- | /3F || 장치들 || 모든 장치 듣기 중지 |} 코모도어 1541 플로피 드라이브는 느린 코모도어 64 호환 모드를 사용하는데, `OPEN 15,8,15,"UI-":CLOSE 15` 명령을 사용하여 더 빠른 속도를 위해 비활성화할 수 있다.url=https://www.c64-wiki.com/index.php?title=VIC-1541&oldid;=25254
# 장치 번호 매기기
{| class="wikitable" |+ 코모도어 64 KERNAL ROM에 따른 장치 번호 매기기archive-date=2017-01-16 ! 장치 !! 종류 |- | 0 || 키보드 |- | 1 || 카세트 포트 |- | 2 || 사용자 포트의 RS-232 또는 PET의 두 번째 카세트 |- | 3 || 화면 |- | 4–5 || 프린터 |- | 6 || 일반적으로 플로터 장치 |- | 7 || 두 번째 플로터? |- | 8–15 || 디스크 (일부 직렬-병렬 프린터 인터페이스에서 10Snd 사용) |- | 16–30 || 알 수 없음 |- | 31 || 모든 장치에 대한 명령으로 예약됨 |} 장치 번호 0–3은 코모도어 버스와 관련이 없다.
# 호스트 구현
VIC-20 컴퓨터와 코모도어 1540 및 1541 플로피 드라이브는 MOS 테크놀로지 6522 VIA를 사용하여 IEC 버스 전송을 처리한다. 코모도어 64 및 128 컴퓨터와 코모도어 1571 드라이브는 복합 인터페이스 어댑터를 사용한다.
# 일반적인 장치
{|class=wikitable ! 장치 !! 정보 |- | 코모도어 1541 || adj=on 170 KB 플로피 |- | 코모도어 1570 || adj=on 170 KB 플로피 |- | 코모도어 1571 || adj=on 350–410 KB 플로피 |- | 코모도어 1581 || adj=on 800 KB 플로피 |- | MSD SD-1/SD-2 || adj=on 단일/이중 170 KB 플로피 |- | 코모도어 MPS 801 || 도트 매트릭스 프린터 |- | 코모도어 1515url=http://www.classiccmp.org/cini/pdf/Commodore/VIC-1515%20Printer%20User's%20Manual.pdf || 도트 매트릭스 프린터 |- | 코모도어 1520 || 볼펜 프린터 |- | 코모도어 VIC-1525access-date=22 February 2015 || 도트 매트릭스 프린터 |- | 코모도어 VIC-1526 || MPS 802를 리브랜딩한 도트 매트릭스 프린터 |- | Okimate 10 || 도트 매트릭스 프린터 |- | 코모도어 DPS-1101url=https://www.recycledgoods.com/commodore-dps-1101-daisy-wheel-printer.html || 데이지 휠 프린터 |- | INTERPOD || 독립형 IEEE-488 + RS-232url=http://mikenaberezny.com/hardware/c64-128/interpod-ieee-488-interface/ |- | VIC-20 || 1 MHz 5 KB 컴퓨터 |- | 코모도어 64 || 1 MHz 64 KB 컴퓨터 |- | 코모도어 SX-64 || 1 MHz 64 KB 컴퓨터 |- | 코모도어 128 || 2 MHz 128 KB 컴퓨터 |- | 코모도어 16 || 1-2 MHz 16 KB 컴퓨터 |- | 코모도어 플러스/4 || 1.76 MHz 64 KB 컴퓨터 |- | 코모도어 65 || 3.54 MHz 128 KB 컴퓨터 |}
# 장치
1541 디스크 드라이브 1571 플로피 드라이브 파일:Commodore 1581 1581 디스크 드라이브 파일:Commodore Matrixdrucker MPS-802 (weißen MPS 802 프린터