O Serial Input/Output (Entrada/Saída Serial), universalmente conhecido como SIO, foi um barramento proprietário e pilhas de protocolo de software relacionadas usadas nos computadores Atari de 8 bits para fornecer a maioria das funções de entrada/saída para esses computadores. Diferente da maioria dos sistemas de entrada/saída da época, como o RS-232, o SIO incluía um protocolo leve que permitia que múltiplos dispositivos fossem conectados a uma única porta que suportava dezenas de dispositivos. Ele também suportava operações plug-and-play. O designer do SIO, , credita seu trabalho no sistema como a base para o USB.

O SIO foi desenvolvido para permitir expansão sem usar slots de cartão interno, como no Apple II, devido a problemas com a FCC sobre interferência de rádio. Isso exigiu que ele fosse bastante flexível em termos de suporte a dispositivos. Dispositivos que usavam a interface SIO incluíam impressoras, unidades de disquete, decks de cassete, modems e caixas de expansão. Alguns dispositivos tinham drivers baseados em ROM que eram copiados para o computador host quando inicializados, permitindo que novos dispositivos fossem suportados sem suporte nativo embutido no computador.

O SIO exigia lógica nos periféricos para suportar os protocolos, e em alguns casos uma quantidade significativa de poder de processamento era necessária - a unidade de disquete Atari 810 incluía um , por exemplo. Além disso, o grande conector personalizado era caro. Isso aumentou os custos do sistema SIO, e Decuir culpa isso por "afundar o sistema". Houve esforços malsucedidos para reduzir o custo do sistema durante a história dos 8 bits.

O nome "SIO" refere-se propriamente apenas às seções do sistema operacional que lidavam com a troca de dados; na documentação da Atari, o barramento em si é simplesmente o "barramento serial" ou "barramento de interface", embora isso também seja às vezes referido como SIO. No uso comum, SIO refere-se a todo o sistema, desde o sistema operacional até o barramento e até os conectores físicos.

História Problema da FCC O sistema SIO deve sua existência às regras da FCC sobre a quantidade permitida de interferência de RF que poderia vazar de qualquer dispositivo que gerasse diretamente sinais de televisão analógica. Essas regras exigiam quantidades muito baixas de vazamento e tinham que passar por um conjunto extenso de testes. Essas regras estavam passando por revisões durante o período em que o grupo da Atari estava projetando a máquina Colleen, que se tornaria o Atari 800.

O Apple II, um dos poucos computadores pré-fabricados que se conectavam a uma televisão naquela época, havia evitado esse problema ao não incluir o modulador RF no computador. Em vez disso, a Apple fez um acordo com uma empresa local de eletrônicos, M&R Enterprises, para vender moduladores plug-in sob o nome . Isso significava que a Apple não gerava, tecnicamente, sinais de televisão e não precisava passar por testes da FCC. Um dos principais vendedores da Atari, a Sears, achou que essa não era uma solução adequada para suas vendas diretas, então, para atender aos requisitos de interferência, eles envolveram todo o sistema em um bloco de alumínio fundido de 2 mm de espessura.

O Colleen foi originalmente projetado para ser um console de jogos, o sucessor do Atari 2600. O sucesso do Apple II levou o sistema a ser reposicionado como um computador doméstico, e esse mercado exigia dispositivos periféricos. Em máquinas como o Apple II, os periféricos eram suportados colocando uma placa adaptadora em um dos slots internos da máquina, passando um cabo por um buraco na caixa e conectando o dispositivo a esse cabo. Um buraco grande o suficiente para tal cabo significaria que o Colleen falharia nos testes de RF, o que apresentava um problema sério. Além disso, resfriar as placas por convecção seria muito difícil.

Desvio da TI Durante uma visita no início de 1978, um vendedor da Texas Instruments (TI) demonstrou um sistema consistindo em um cabo de fibra óptica com transceptores moldados em ambas as extremidades. Joe Decuir sugeriu que eles poderiam usar isso para enviar o sinal de vídeo para um modulador RF externo, que seria tão simples de usar quanto o cabo coaxial necessário para levar o sinal à televisão. Agora, o computador poderia ter slots normais; como o Apple II, a parte de RF seria inteiramente externa e poderia ser testada separadamente do computador.

Quando Decuir explicou seu conceito, os "olhos do vendedor quase saltaram". Desconhecido para a equipe de Grass Valley, a TI estava, naquela época, no meio do desenvolvimento do TI-99/4 e enfrentava o mesmo problema com a saída de RF. Quando Decuir explicou a ideia para seu chefe, Wade Tuma, Tuma respondeu que "Não, a FCC nunca nos deixaria escapar com essa artimanha". Isso se provou verdadeiro; a TI usou a ideia de Decuir, e quando a levaram para a FCC em 1979, a FCC rejeitou-a de imediato. A TI teve que reprojetar seu sistema, e o atraso resultante significou que os Ataris chegaram ao mercado primeiro.

SIO Com esse caminho para permitir slots de cartão bloqueado, Decuir voltou ao problema de fornecer expansão por meio de algum tipo de sistema externo.

Nessa época, muito trabalho já havia sido feito usando o chip POKEY da Atari para operar um deck de cassete, gerando diretamente sons que seriam gravados na fita. Percebeu-se que, com modificações adequadas, o POKEY poderia contornar o hardware de conversão digital-para-analógico e gerar saída TTL diretamente. Para produzir um barramento digital TTL, o sistema SIO usava dois dos quatro canais de som do POKEY para produzir tons estáveis que representavam sinais de clock de uma determinada frequência. Um buffer de um byte era usado para enviar e receber dados; toda vez que o sinal de clock alternava, um bit do buffer era lido ou escrito. Quando todos os oito bits eram lidos ou escritos, o sistema gerava uma interrupção que acionava o sistema operacional para ler ou escrever mais dados.

Diferente de uma interface de cassete, onde normalmente apenas um único dispositivo seria usado, uma porta de expansão externa precisaria ser capaz de suportar mais de um dispositivo. Para suportar isso, um protocolo simples foi desenvolvido e vários novos pinos foram adicionados à porta de cassete original simples. O mais importante entre eles era o pino COMMAND, que acionava os dispositivos para escutar uma mensagem de 5 bytes que ativava um dos dispositivos no barramento e solicitava dados (ou enviava comandos). Eles também adicionaram os pinos PROCEED e INTERRUPT, que podiam ser usados pelos dispositivos para definir bits em registradores de controle no host, mas esses não foram usados no sistema implantado. Da mesma forma, os sinais de temporização gerados pelo POKEY foram enviados nos pinos CLOCKOUT e CLOCKIN, embora o protocolo assíncrono não os utilizasse.

Descrição Hardware

O barramento SIO foi implementado usando um arranjo personalizado de conector D de 13 pinos (embora não seja D-subminiature) com os conectores machos nos dispositivos e os conectores fêmeas em ambas as extremidades dos cabos. Os conectores eram fisicamente robustos para permitir uso repetido, com pinos muito fortes no soquete do dispositivo e conectores com mola nos cabos, em oposição ao ajuste por fricção como em um conector D típico. A maioria dos dispositivos tinha portas de entrada e saída para permitir a conexão em cadeia de periféricos, embora o Program Recorder tivesse que ser colocado no final da cadeia e, portanto, não incluísse uma porta de saída.

Comunicações O SIO era controlado pelo chip POKEY da Atari, que incluía vários temporizadores de propósito geral. Quatro deles permitiam controle fino sobre as taxas de temporização e eram destinados a ser usados para saída de som, conectando-os a um conversor digital-para-analógico (D-to-A) e, em seguida, misturando-os no sinal de televisão antes de entrar no modulador RF. Eles foram reaproveitados como base do sistema SIO, usados como clocks em alguns modos ou para produzir os sinais de saída diretamente em outros.

O sistema incluía um único "registrador de deslocamento" que era usado para semi-automatizar a maioria das transferências de dados. Isso consistia em um único valor de 8 bits, LSB primeiro, que era usado para bufferizar leituras e gravações. O usuário acessa esses através de dois locais de memória conhecidos como SEROUT para escrita e SERIN para leitura. Esses eram "registradores sombra", locais na RAM que espelhavam registradores nos vários chips de suporte, como o POKEY. Os bits de dados eram enquadrados com um único bit de início zero e um único bit de parada um, e não era usado paridade.

Para escrever dados no modo síncrono, os canais de temporização principais do POKEY eram definidos para uma taxa de clock apropriada, digamos 9600 bit/s. Qualquer dado escrito no registrador SEROUT era então enviado um bit de cada vez toda vez que o sinal ficava alto. Era temporizado para que o sinal retornasse a baixo no meio do bit. Quando todos os 10 bits (incluindo início e parada) fossem enviados, o POKEY enviava uma interrupção mascarada para a CPU para indicar que estava pronto para outro byte. Na leitura, se outro byte de dados fosse recebido antes que o SERIN fosse lido, o 3º bit do SKSTAT era definido como verdadeiro para indicar o estouro. Bits individuais sendo lidos também eram enviados para o 4º bit do SKSTAT à medida que chegavam, permitindo a leitura direta dos dados sem esperar pelo enquadramento completo.

O sistema oficialmente suportava velocidades de até 19.200 bit/s, mas essa taxa foi escolhida apenas porque o analisador de protocolo dos engenheiros da Atari atingia esse limite. O sistema era na verdade capaz de desempenho muito maior. Vários dispositivos de terceiros, especialmente unidades de disquete, usavam hardware e drivers personalizados para aumentar significativamente as velocidades de transmissão para até 72.000 bit/s.

Embora o sistema tivesse pinos CLOCKOUT e CLOCKIN que poderiam, em teoria, ser usados para comunicações síncronas, na prática apenas o sistema assíncrono era usado. Nesse caso, uma velocidade base era definida como acima no POKEY, que seguiria mudanças de até 5% dessa taxa base. Isso tornava muito mais fácil trabalhar com dispositivos reais onde problemas mecânicos ou elétricos causavam pequenas variações nas taxas ao longo do tempo. Um exemplo era o deck de cassete, onde o esticamento da fita poderia alterar a velocidade; outro é um modem, onde o sistema remoto pode não estar exatamente sincronizado com uma determinada velocidade.

Controle de dispositivos O sistema SIO permitia que os dispositivos fossem conectados em cadeia e, portanto, exigia alguma forma de identificar que as informações nos vários pinos de dados eram destinadas a um dispositivo específico na cadeia. Isso era realizado com o pino COMMAND.

O pino COMMAND normalmente era mantido alto, e quando era puxado para baixo, os dispositivos no barramento eram obrigados a escutar um "quadro de comando". Isso consistia em um pacote de 5 bytes; o primeiro byte era o ID do dispositivo, o segundo era um número de comando específico do dispositivo, e então dois bytes auxiliares de dados que podiam ser usados pelo driver para qualquer propósito. Esses quatro eram seguidos por um byte de checksum. O pino COMMAND voltava a ficar alto quando o quadro estava completo.