# IBM System/3

O IBM System/3 (introduzido em 1969 e descontinuado em 1985) foi um computador económico de IBM para tarefas de escritório orientado a clientes novos ou a organizações que ainda mantinham computadores da Série IBM 1400 ou máquinas de contabilidade. Foi o primeiro membro da família que a IBM chamou "linha de faixa média". A estes computadores conheceu-lhos como minicomputadores, e actualmente servidores.

## Descrição

Implementava um novo formato de cartão perfurado que era mais pequena e alojava 96 caracteres. Em lugar das perfurações rectangulares clássicas dos cartões IBM, o novo cartão tinha pequenos buracos de 1 mm de diâmetro, mais parecidos aos que possuía a fita perfurada. Os dados eram alojados em formato BCD de seis bits, com colunas de 32 caracteres a cada uma, ou oito bits em formato EBCDIC, com duas perfurações extra localizadas ao final das colunas.
Os cartões tinham lugar para 128 caracteres impressos em 4 colunas de 32 caracteres a cada uma. A IBM System/370, com um leitor de cartões apropriado, podia também processar os novos cartões.
Muitas unidades do System/3 modelo 10 original foram enviadas só com E/S de cartão perfurado (leitura, perfuração e ordenamento) e uma impressora. Tinha dois modelos de leitor de cartões. O mais comum era conhecido como MFCU ("multifunction card unit", unidade multifunção de cartões), e lia, perfurava e ordenava os novos cartões de 96 colunas. O segundo modelo, menos comum, era o MFCM ("multifunction card machine", máquina de cartões multifunção), e realizava as mesmas operações, mas só com os cartões mais comuns de 80 colunas. A MFCM era prevista para grandes companhias que já tinham equipas para cartões de 80 colunas. A impressora nativa era a 5203 que pode ver na fotografia; dita impressora era de carroça de caracteres com 33 martelos móveis que se colocavam em 4 posições contíguas. Tinha 3 modelos de diferentes velocidades: 100ppm, 200ppm e 300ppm. As impressoras disponíveis eram vários modelos de impressora de linha IBM 1403, a qual tinha sido originalmente construída para o computador IBM 1401. Em sistemas que só tinham leitora de cartões, o compilador RPG/II se executava em duas fases. A primeira fase iniciava lendo desde uma tolva primeiramente do MFCU, e o programa fonte lia-se depois do compilador. Um reporte intermediário perfurava-se em cartões, as quais eram lidas na segunda fase de compilação. Neste momento perfurava-se em cartões o programa executável. Este programa podia então iniciar-se ("IPL", por "Initial Program Load", programa de carga inicial) para realizar o processo desejado. Este procedimento podia requerer mais de uma hora para um programa de tamanho apreciável.
Para o armazenamento de massa, o System/3 tinha um disco duro de um prato sozinho, do tamanho aproximado de uma pizza; em princípio, a cada prato alojava 2,5 MB de dados. A configuração regular para armazenamento era de um ou dois discos fixos, a cada um numa unidade separada, os que normalmente continham o sistema operativo e os programas do usuário. Adicionalmente, a cada disco fixo podia ter incorporado um cartucho de disco removível; estes tipicamente continham arquivos de dados associados a vários aplicativos, por exemplo uma lista de clientes, e os usuários tinham vários deles. Dessa maneira, um sistema de gama baixa podia suportar 10 MB de armazenamento (dois fixos e dois removíveis), mas isto era muito caro e não era comum.
O armazenamento fora de linha estava disponível com a compra de unidades de fita externa que podiam ler e escrever nas fitas IBM regulares.
A impressão era normalmente pela impressora de linha ou por uma impressora de matriz de pontos. Uma máquina de escrever selectric era com frequência usada como consola.
O System/3 vinha em forma normal com um compilador RPG/II, e usava uma linguagem de controle de tarefas simples chamado OCL, o qual era parecido superficialmente ao famoso (ou infame) Job Controle Language.
O System/3 e os modelos que o seguiram (System/32, System/34, System/36 e System/38, logo o AS/400 e iSeries) são geralmente denominados minicomputadores, ou na terminologia de IBM "sistemas de faixa média" ("midrange systems"), em contraste aos grandes mainframes de IBM.

## Jogo de Instruções

Uma das coisas mais interessantes do System/3 era seu jogo de instruções. Estavam optimizadas para dois aspectos finque deste produto: memória principal limitada, e a linguagem de programação RPG.
O S/3 original (modelos 10 e os posteriores 6, 8 e 12) tinham 29 instruções, todas ocupavam entre 3 e 6 bites (24 a 48 bits). Os primeiros 4 bits proviam um montão de informação: "1111" significava que esta era uma instrução sem operandos, isto é, um comando. ex. Iniciar I/Ou (o operador E/S definia-se carregando previamente os registos de E/S). "11xx" e "xx11" indicavam uma instrução de 1 operando, como uma bifurcação. Se xx era 00 o operando era direccionado pela direcção de 16 bits completa. Se xx=01 ou 10 indicava que devia se usar uma direção com deslocação, usando o registo índice 1 ou 2 respetivamente. A direcção base tinha-se carregado previamente num dos dois registos e a instrução continha a deslocação de até 256 bites (8 bits de direccionamento).
Outros padrões para o primeiro médio bite indicavam instruções de dois operandos. "0000" indicava que ambos operandos eram direcionados por direcção de 16 bits direta. "0100": o operando 1 usa o registo 1 como sua base; o operando 2 usa direccionamento direto. "0110": o operando 1 usa o registo 1 como sua base, o operando 2 usa o registo 2. E assim sucessivamente.
Os restantes 4 bits do primeiro bite definem com mais precisão as instruções. Esta estrutura significava que existia a capacidade de ter até 64 operações ao todo: 16 comandos (ainda que nunca teve mais de cinco em toda a faixa de produtos); 16 instruções de 1 operando começando com 11xx; 16 instruções de 1 operando começando com xx11; 16 instruções de 2 operandos.
Além dos dois registos índice já mencionados (referidos como 1 e 2, ou 01 e 10 em binário) tinha outros registos. "Registo 4" (0100) era o registo de direção de instrução ("Instruction Address Register, IAR) o qual apontava à direção em curso.
"Registo 8" (1000) era o registo de direção de rechamada ("Address Recall Register", ARR), estabelecido para determinadas instruções. Entre elas, o salto condicional (mnemónico "BC") a qual era usado para apontar ao bite imediato posterior à instrução do bifurcação. Para a gente dos mainframes de IBM isto significava que o salto do S/3 podia se ligar a um BALR ("branch and link register", registo de salto e link) condicional. Era muito usado para saltar a uma subrotina e regressar depois de processá-la. Finalmente, o "Registo 16" (00010000) era o registo de estado do programa, que continha coisas como o resultado de uma instrução de comparação.
Note-se que os registos eram para direccionamento e estado do programa; não para aritmética.
Entre as 29 instruções proviam-se instruções aritméticas de soma/subtracção binárias e decimais. Multiplicação e divisão não se proviam por hardware, e deviam se manejar mediante rotinas de software. Não existia aritmética de vírgula flutuante. Isto continuou inclusive nos modelos posteriores, e mais sofisticados, System/34 e System/36.
Tudo isto era mais complicado inclusive com o System/3 modelo 15, e os System/34 e 36. Ainda que ainda se manejava a memória por meio de direccionamento de 16 bits, estes sistemas podiam suportar 64k de cor principal (até 512K, e teoricamente mais), usando tradução de direções para mudar de uma página de 64K a outra. Nos Registos de Tradução de Direções ("Address Translation Registers", ATR) indicava-se a página de cor a usar, e seu conteúdo se concatenava com a direcção de 16 bits do programa para produzir a direcção real. Estes "ATRs" estavam só disponíveis para o sistema operativo.
Como nota de margem, o modelo S/3 10 original (e o posterior modelo 12) tinham uma forma primitiva de multi programação chamada Função de Duplo Programa ("Dual Program Feature"). Isto não dava mais direccionamento da memória, mas dava dois jogos de registos e instruções, os quais podiam mudar de um "nível de programa" ao outro. As instruções de E/S também foram modificadas para trocar quando uma E/S se iniciava. Era possível manipular os registos de direccionamento das instruções desde o outro nível de programa, pelo que se podia lhe jogar mais passadas à máquina. Todo inofensivamente divertido!!
Até agora, só se explicou o primeiro bite. O seguinte bite ("Q") era normalmente um qualificador, como especificar o número de bites transladados num movimento de caracteres, ou a condição de prova para uma bifurcação. Um par de instruções usavam este bite para um operador imediato de 1 bite. O bite restante era para operadores de deslocação ou de direccionamento, ou para detalhes de alguns comandos.
Aqui temos um exemplo para mostrar tudo isto trabalhando: um comando simples, Salto Condicional (Conditional Jump), um tipo especial de bifurcação condicional (só avanço, até 256 bites), adequado para saltos curtos dentro do mesmo bloco de cor: Bite de código de Op.= F2 (é em hexadecimal, Hex F é 1111 em binário, Hex 2 (0010) define o op); bite Q= 00000001 especifica que "saltaremos" se o registo de condição tem o bit de "igual" em 1 (ignição); Operando= 00011000: se a condição é verdadeira, saltamos para adiante 24 bites.
Como se indicou anteriormente, este conjunto de instruções se optimizou para dois aspectos da família do Systema/3. O primeiro foi a pouca quantidade de cor disponível; o segundo era a linguagem de programação RPG. Os que sabem algo a respeito dos primeiros RPG, saberão a respeito dos indicadores-interruptores binários utilizados para o programa de controle de fluxo. Mais de 100 destes estavam disponíveis e eram bem usados (ao menos nos tempos mais recentes). Mediante o formato de instruções explicado mais acima, muitas das operações indicadas aos indicadores podiam caber em só 3 bites. Por exemplo... uma linha de RPG podia testar um indicador pora "On": 3 bites para um op. "Teste Bits On"; depois 3 bites para um Salto, como se explicou antes, muito úteis para o compilador RPG. Poupar o bite impar aqui e por lá era bom quando só se tinham 64K para trabalhar. E, pelo S/3 em si mesmo, que incluía o sistema operativo (o qual aumentou para cerca de 20K no modelo 10 com a introdução do "Communication Controle Program", CCP).

## Sistemas informáticos

O IBM System/3 foi anunciado como um sistema informático que inicialmente consistia em:
* IBM 5410 Modelo 10 Unidade Central de Processamento
* IBM 5424 Multi Functional Card Unit (MFCU)
* IBM 5203 Impressora em linha
* IBM 5444 Armazenamento de Disco
* IBM 5471 Teclado da Impressora
* IBM 5475 Teclado de Entrada de Dados
* IBM 5496 Gravador de Dados, uma máquina perfurador com impressão e funções de verificação
* IBM 5486 Ordenador de Cartões

## Legado

O System/32 mono usuário era um processador com palavras de 16 bits muito diferente. Emulava o jogo de instruções do System/3 por software (que era bem mais lento). e A posteriores IBM System/34 e IBM System/36 herdaram em parte a arquitetura do System/32. Tinham dois processadores: um Processador de Controle de Armazenamento (Controle Storage Processor, CSP), similar ao do System/32, o qual manejava a maioria das operações primeiramente/saída e supervisão, e um Processador de Armazenamento Principal (Main Storage Processor, MSP), uma re-implementação do processador do System/3 modelo 15, usado para correr os aplicativos de System/3. Portanto, os sistemas podem ser considerados como System/32 com o acrescentado "de emulação de hardware" do Systema/3. Apesar de que o IBM System/38 e seu sucessor, o AS/400 e a iSeries encheram o mesmo nicho do mercado, usavam uma arquitetura radicalmente diferente, baseada no falido projeto IBM Future Systems.

## Pecualiaridades

O System/3 não tinha forma de deter um processo uma vez que se iniciava. Por exemplo, se uma compilação falhava por um erro em alguma das primeiras páginas, tinha que esperar a que se terminasse de imprimir a listagem de compilação inteiro, às vezes muito volumoso. Um truque aprendido pelos programadores era tirar o papel da impressora; isto causava que a máquina se detivesse e se mostrava na consola um código de erro P3. Nesse momento, podia-se introduzir o código FF para cancelar o programa.
O System/3 não tinha dispositivos de sinais acústicas, e a não ser que o operador estivesse na consola e olhando o estado das luzes, não se inteirava do estado dos eventos.

## Cronologia

* 1969 - IBM 5410, ou System/3 Modelo 10
* 1970 - IBM 5406, ou System/3 Modelo 6
* 1973 - IBM 5415, ou System/3 Modelo 15
* 1974 - IBM 5408, ou System/3 Modelo 8
* 1975 - IBM 5412, ou System/3 Modelo 12
A Consola de Operador (Operator Console Facility, OCF) do System/3 consistia numa máquina de escrever IBM Selectric para usar como interface com o computador, ou um terminal IBM 3270. Com uma OCF, tinha a possibilidade de 'cancelar' um processo ou tarefa que se estivesse a executar, incluindo qualquer das duas partições (P1 ou P2). O sistema podia correr só dois programas simultaneamente.