# Bus IEC (Commodore)

El bus serie IEEE-488 de Commodore (bus IEC) es la interfaz de Commodore para el almacenamiento de datos principalmente en discos magnéticos y las impresoras para las computadoras personales Commodore de 8 bits, especialmente el VIC-20, C64, C128, Plus/4, C16 y C65.

## Descripción e historia

La interfaz paralela IEEE-488 utilizada en la línea de computadoras Commodore PET (1977) era demasiado costosa, por lo que se desarrolló una versión de costo reducido, que consistía en una versión en serie simplificada de la interfaz IEEE-488, con solo unas pocas señales restantes; sin embargo, se mantuvo el diseño general del protocolo. Commodore comenzó a usar este bus con el VIC-20 (1980). La conexión a la computadora utiliza un conector DIN-6.

## Velocidad de transferencia

| Setup | Velocidad | Bitrate efectivo |
| Comodore 64 + 1541 | 400 bytes/s | 3.200 bit/s |
| Commodore 64 + 1541 con Fast loader | 2560 bytes/s | 20.480 bit/s |
| Comodore 128 + 1571 | 5200 bytes/s | 41.600 bit/s |
| teórico 20 µs | 6250 bytes/s | 50.000 bit/s |

## Interfaz

Pinout :
| Pin | Nombre | Función |
| 1 | /SRQIN | Entrada de solicitud de servicio para permitir que los periféricos soliciten ser atendidos por el host (C64). Utilizado por el C128 para transferencias rápidas. |
| 2 | GND | Tierra |
| 3 | /ATN | Serial ATN de entrada / salida. Establecido bajo por el host (C64) para indicar el comienzo de una transferencia de datos en serie. |
| 4 4 | /CLK | Serial CLK de entrada / salida. Utilizado para el apretón de manos de software. |
| 5 5 | /DATA | Datos en serie de entrada / salida. Transferencia de bits de datos. |
| 6 6 | /RESET | Restablece periféricos y también restablece un C64 anterior. |

## Descripción del protocolo

Las señales del bus son un TTL colector abierto digital de un solo extremo de 5 voltios y activas cuando son negativas. Los dispositivos de bus deben proporcionar su propia potencia.
Debido a que las líneas de bus son un colector abierto eléctricamente, funciona como una puerta OR larga entre todos los controladores de línea del dispositivo. El valor lógico para ground es verdadero y viceversa. Cualquier dispositivo puede establecer una línea "verdadera". Una línea solo se vuelve "falsa" si todos los dispositivos señalan falsa.
La transmisión comienza con el hablante del bus que mantiene la línea del reloj verdadera y el oyente que mantiene la línea de datos verdadera. Para comenzar, el hablante libera la línea del reloj a falso. Cuando todos los oyentes del bus están listos para recibir, liberan la línea de datos a falso. Si el hablador espera más de 200 µs sin que la línea del reloj se vuelva verdadera (estado inactivo), los oyentes deben realizar End-or-Identify (EOI).
Si la línea de datos que es falsa (liberada) no es reconocida por el hablador dentro de los 200 µs, el oyente sabe que el hablador está en proceso de EOI, lo que significa que "este caracter será el último". Cuando el oyente detecta el tiempo de espera de 200 µs, debe reconocerlo tirando de la línea de datos como verdadera durante al menos 60 µs y luego liberarla. El interlocutor puede volver a transmitir nuevamente dentro de los 60 µs tirando de la línea del reloj verdadero.
Los datos son ocho bits que comienzan con el bit menos significativo. La línea de datos se establece de acuerdo con el bit a enviar (1=verdadero=tierra). Una vez que se establece la línea de datos, la línea del reloj se libera en falso. Las líneas Reloj y Datos se mantendrán estables durante al menos 20 µs (excepto el Commodore 64 que necesita 60 µs). Después de que se hayan enviado 8 bits, el hablador libera la línea de datos a falso y el oyente luego reconoce al hablador tirando la línea de datos verdadero dentro de 1000 µs. Después de esto, el hablador establece la línea del reloj como verdadera y el oyente establece la línea de datos como verdadera, por lo tanto, donde comenzó la transmisión. Si se señala un EOI al mantener la línea del reloj en falso, la transmisión finaliza y el oyente lo reconoce tirando de la línea de datos verdadero durante 200 µs.
La línea ATN se establece en verdadero y los bytes se envían como todos los dispositivos anteriores, pero el byte se interpreta como uno de los comandos "Talk", "Listen", "Untalk" y "Unlisten". Eso le dice a un dispositivo específico que se convierta en un hablante u oyente. Solo los dispositivos con números de dispositivo coincidentes cambian al modo hablar y escuchar. Una dirección secundaria también puede seguir.
En un nivel lógico superior, el host establecerá la línea ATN en verdadero y transmitirá los bytes "Número de dispositivo 8, escucha", "Dirección secundaria 2, abierta". A continuación, establecerá la línea ATN falsa y el host se convertirá en el hablador, manteniendo la línea del reloj verdadera. El dispositivo será el oyente, manteniendo la línea de datos verdadera. El host transmitirá el comando de apertura específico y lo finalizará con una secuencia de señal EOI. Después de esto, el host establecerá con la línea ATN verdadera, "Dispositivo número 8, sin listar". Seguido por la línea ATN verdadera y "Dispositivo número 8, escucha", "Dirección secundaria 2, datos". Luego, el host establece la línea ATN falsa y envía los datos. Cuando el host ha terminado de enviar datos, la línea ATN se establece en verdadera y se envía "Dispositivo número 8, no listado".
Cuando es necesario cambiar de roles y hacer que el host sea un oyente y el dispositivo que habla, se produce después de que se ha enviado un comando de conversación al dispositivo. El host establece la línea de datos verdadero y libera la línea del reloj en falso. El dispositivo espera a que la línea del reloj se vuelva falsa y luego la pone a verdadera y libera la línea de datos a falso. Después de esta secuencia, puede seguir la interacción estándar entre hablante y oyente.
Comandos de bus :
| Código | Sentido |
| dispositivo | 0x20 | Escucha, dispositivo (0–30) |
| 0x3F | Sin listar, todos los dispositivos |
| dispositivo | 0x40 | Talk, dispositivo |
| 0x5F | Untalk, todos los dispositivos |
| canal | 0x60 | Reabrir, canal (0-15) |
| canal | 0xE0 | Cerrado, canal |
| canal | 0xF0 | Abierto. canal |
Para leer un archivo normal del disquete número 8, el comando LOAD "filename",8,1 se emite en un Commodore 64. Eso provoca la siguiente comunicación de alto nivel:
Protocolo de alto nivel :
| Comando | Destino | Significado |
| /28 | Dispositivo | Escucha, dispositivo número 8 |
| /F0 | Dispositivo | Abrir canal 0 |
| | Dispositivo | Enviar bytes de nombre de archivo |
| /3F | Dispositivos | Desliste todos los dispositivos |
| /48 | Dispositivo | Talk, dispositivo número 8 |
| /60 | Dispositivo | Reabrir canal 0 |
| El dispositivo número 8 se convierte en el maestro del bus |||
| | Anfitrión | Recibir datos de bytes |
| El host se convierte en el maestro del bus (operación normal) |||
| /5F | Dispositivos | Deshabilitar todos los dispositivos |
| /28 | Dispositivo | Escucha, dispositivo número 8 |
| /E0 | Dispositivo | Cerrar canal 0 |
| /3F | Dispositivos | Desliste todos los dispositivos |
La unidad de disquete Commodore 1541 utiliza un modo más lento compatible con Commodore 64 que puede desactivarse para una velocidad más rápida mediante el comando OPEN 15,8,15,"UI-":CLOSE 15.

## Numeración de dispositivos

Numeración de dispositivos por el KERNAL del Commodore 64 :
| Dispositivo | Tipo |
| 0 | Teclado |
| 1 | Puerto de casete |
| 2 | RS-232 en el puerto de usuario o segundo casete en PET |
| 3 | Pantalla |
| 4–5 | Impresora |
| 6 | Típicamente dispositivo trazador |
| 7 | Segundo trazador? |
| 8-15 | Disco (10 – utilizado por algunas interfaces de impresora serie a paralelo) |
| 16-30 | Desconocido |
| 31 | Reservado como comando para todos los dispositivos |
El dispositivo número 0–3 no está asociado con el bus Commodore.

## Implementación del host

La computadora Commodore VIC-20 y las unidades de disquete Commodore 1540 y 1541 utilizan la un MOS 6522 VIA para manejar transmisiones de bus IEC. Las computadoras Commodore 64 y 128 y la unidad Commodore 1571 usan el Adaptador de interfaz complejo.

## Dispositivos comunes

| Dispositivo | Información |
| 1541 | Disquete de 5¼ pulgadas de 170 KB |
| 1570 | Disquete de 5¼ pulgadas de 170 KB |
| 1571 | Disquete de 5¼ pulgadas de 340-410 KB |
| 1581 | Disquete de 3½ pulgadas de 800 KB |
| Commodore MPS 801 | Impresora de matriz de puntos |
| Comodore 1515 | Impresora de matriz de puntos |
| Comodore 1520 | Impresora de bolígrafo |
| Comodor VIC-1525 | Impresora de matriz de puntos |
| Comodore VIC-1526 | Impresora de matriz de puntos MPS 802 renombrada |
| Okimate 10 | Impresora de matriz de puntos |
| DPS-1101 | Impresora de rueda de margarita |
| INTERPOD | Independiente IEEE-488 + RS-232 |
| Comodore VIC-20 | Computadora con 5 KB de RAM a 1 MHz |
| Comodore 64 | Computadora con 64 KB de RAM a 1 MHz |
| Commodore SX-64 | Computadora con 64 KB de RAM a 1 MHz |
| Comodore 128 | Computadora con 128 KB de RAM a 2 MHz |
| Comodore 16 | Computadora con 16 KB de RAM a 1-2 MHz |
| Commodore Plus/4 | Computadora con 64 KB de RAM a 1,76 MHz |
| Comodore 65 | Computadora con 128 KB de RAM a 3,54 MHz |

### Comodore 1541

La unidad de disquete Commodore 1541 es el periférico más común utilizado con este bus y puede almacenar 170 KB.

## Dispositivos

* La unidad de disco Commodore 1541
* Unidad de disquete VC 1571
* Impresora Commodore MPS 802