# IBM 1401

O computador IBM 1401, foi o primeiro membro da série IBM 1400, era um computador decimal de longitude de palavra variável, que foi apresentado ao mercado pela empresa IBM em 5 de outubro de 1959, sendo retirado a 8 de fevereiro de 1971.

## História

Proveniente dos arquivos de IBM:
    O que segue é o texto de uma nota de imprensa distribuída pela Divisão de Processo de Dados de IBM (IBM Data Processing Division) a 5 de outubro de 1959.
    O Sistema de Processo de Dados IBM 1401 (IBM 1401 Data Processing System) põe as características próprias dos sistemas de processo electrónico de dados ao alcance de negócios de menor tamanho, até agora limitados ao uso de equipas de cartões perfurados convencionais. Estas características incluem: perfuração e leitura de cartões a alta velocidade, fita magnética para entrada e saída, impressão de alta velocidade, programa almazenado, e capacidade aritmética e lógica.
    O 1401 pode utilizar-se como um sistema independente, conjuntamente com equipamento IBM de cartões perfurados, ou como equipamento auxiliar de sistemas das séries IBM 700 ou 7000.
O IBM 1401 era também usado frequentemente como controlador periférico off-line em muitas grandes instalações, tanto de "computação científica" como de "computação de negócio". Nestas instalações, o computador principal (por exemplo, um IBM 7090) fazia toda sua entrada/saída sobre fitas magnéticas de armazenamento de dados, e o modelo 1401 utilizava-se para mudar o formato dos dados primeiramente desde outros periféricos (por exemplo, o leitor de cartões perfurados da leitora/perfuradora de cartões IBM 1402) às fitas, e para transferir os dados de saída desde as fitas a outros periféricos (por exemplo, a perfuradora de cartões da leitora/perfuradora de cartões IBM 1402, ou a impressora de linhas IBM 1403).
Ao longo de seu tempo de permanência no mercado fabricaram-se ao redor de 20.000 sistemas, fazendo em seu momento do IBM 1401 um dos produtos de maior sucesso de IBM. Dos Arquivos de IBM:
   A tarifa mensal por um 1401 era de 2.500 dólares em adiante, dependendo da configuração. No final de 1961, o número de equipas 1401 instalados tão só nos Estados Unidos da América, tinha chegado a uns 2.000, representando aproximadamente um da cada quatro computadores electrónicos de programa alojado (respeito de todos os fabricantes ativos por então). O pico de 1401 instalados superou os 10.000 em meados dos anos 60, e o sistema foi retirado do mercado em fevereiro de 1971.
Alguns membros de IBM, particularmente John Haanstra, um executivo a cargo do desenvolvimento do modelo 1401, apoiaram a sua continuidade para modelos maiores (por exemplo o IBM 1410), mas a decisão tomada em 1964 pela alta direcção de concentrar recursos no System/360 terminou com esses esforços de forma relativamente brusca. Para proteger o investimento dos clientes de software para o 1401, IBM foi pioneiro no uso de emulação de microcódigo, em forma de ROM, de maneira que alguns modelos do System/360 podiam executar programas 1401. Dita emulação continuou até bem entrada a era moderna (em alguns casos, quiçá, até que os esforços pelo efeito 2000 causaram a reescritura do código para 1401 que ainda se estava a utilizar).
Durante a [[década de 1970 do passado século, muitas instalações da Índia usavam o modelo 1401, e alguns dos empresários de software da Índia da atualidade começaram com esta máquina.
No Museu de História do Computador de Mountain View (Califórnia, Estados Unidos de América), encontra-se em curso um Projecto de Restauração do 1401.

### Arquitetura

O 1401 usava o código binário decimal de IBM (BCD). A cada bite (ou carácter alfanumérico) no 1401 representava-se por médio de seis bits, chamados A, B, 8, 4, 2 e 1. Os bits A e B denominavam-se bits de zona e os bits 8, 4, 2 e 1 denominavam-se bits numéricos. Com a cada bite de seis bits associavam-se outros dois bits, chamados C e M. C era o bit de paridade ímpar (odd parity Check) e M a marca de palavra (word mark). O formato era o seguinte:
O 1401 estava disponível com cinco configurações de cor: 1,4K, 2K, 4K, 8K, ou 16K (um número muito reduzido de 1401s foram ampliados a 32K através de RPQ - Solicitação de Orçamento (Request for Price Quotation) - especiais.
Uma direcção da memória de ferrita do IBM 1401 consistia em três bites de seis bits. Direccione-las decimais entre 000 e 999 especificavam-se mediante os bits 8-4-2-1 de ditos bites. Os bits de zona do bite mais significativo especificava um incremento de A=1000, B=2000, AB=3000, proporcionando uma capacidade de direccionamento de 4.000 bites ao todo. Os bits de zona do bite menos significativo especificavam incrementos de 4000, 8000 ou 12000, para direccionar 16.000 bites (com uma unidade de expansão de cor IBM 1406). Os bits de zona do bite intermediário usavam-se para especificar registros índices, uma de muitas funcionalidades opcionais.
As instruções eram de seis longitudes (1, 2, 4, 5, 7, 8). As instruções de um bite tão só continham um código de operação. Estes eram, bem instruções de um bite propriamente ditas, ou bem eram instruções encadeadas (chained instructions) que utilizavam as direcções da instrução prévia. As instruções de dois bites consistiam num código de operação e um bite modificador. As instruções de quatro bites consistiam num código de operação seguido de uma direcção. As instruções de cinco bites num código de operação, uma direcção e um bite modificador. As instruções de sete bites num código de operação seguido de duas direcções. E as instruções de oito bites num código de operação, duas direcções e um bite modificador.
As instruções eram válidas unicamente se a marca de palavra do bite de menor ordem (o código de operação) tinha o valor 1 e as marcas de palavra do resto de bites o valor 0. A leitura de uma instrução detinha-se e começava sua execução quando se encontrava outro bite com a marca de palavra a 1. Tinha duas excepções a esta regra:
* A instrução SET WORDMARK, que estabelecia duas marcas de palavra, era de sete bites ainda que não lhe seguisse um código de operação válido.
* A instrução BRANCH INDICATOR era de cinco bites ainda que não lhe seguisse um código de operação válido.
    Nota: À margem das duas excepções citadas, se não se encontrava um código de operação válido dantes do nono bite a instrução era tratada como uma instrução de oito bites, mas a máquina seguia percorrendo a memória em procura de um código de operação válido (ignorando os bites lidos) dantes de começar a execução até que encontrava um ou até que detectava um erro (como, por exemplo, o final da memória). Isto era considerado habitualmente como uma programação chapucera, mas não necessariamente um erro.
Ao pulsar a tecla LOAD da leitora/perforadora IBM 1402, lia-se um cartão no buffer de leitura (posições de cor 1-80), estabelecia-se uma marca de palavra na posição 1 (validando a primeira instrução do cartão) e apagavam-se as marcas de palavra nas posições 2-80. A primeira instrução de qualquer programa de arranque era SET WORDMARK, que validava outras duas instruções. Na prática, os primeiros cartões do mazo que compunha o programa de arranque consistiam em instruções SET WORDMARK, instruções no-op, e uma instrução "ler cartão e saltar" (read card and branch), as quais configuravam um padrão de marcas de palavra no buffer de leitura. A instrução READ CARD não alterava as marcas de palavra presentes no buffer de leitura. Utilizando instruções no-op de várias longitudes, o seguinte grupo de cartões encaixaria neste padrão de marcas de palavra.

## Software

O software do 1401 incluía:
* Autocoder, um ensamblador mais avançado, requeria um mínimo de 4K posiciones de cor.
* FARGO (Fourteen-ou-one Automatic Report Generation Operation: Geração Automática de Relatórios 1401), um precedesor de RPG, requeria 4K.
* FORTRAN II estava disponível para sistemas com ao menos 8K posiciones de cor; o compilador Fortran do 1401 está descrito em Haines, L.H. (1965), enlace mais abaixo. O compilador Fortran, para gerar código para memórias pequenas, utilizava uma forma inovadora de pseudocódigo interpretado.
* FORTRAN IV estava disponível para sistemas com ao menos 8K posiciones de cor e ou bem quatro unidades de fita ou bem uma unidade de disco IBM 1311.
* RPG. Única linguagem de alto nível de uso comum, RPG era uma linguagem declarativo principalmente para a especificação de relatórios contábeis. Ainda (ano 2007) se encontra em uso em máquinas IBM intermediárias, AS/400.
* SPS (Symbolic Programming System: Sistema de Programação Simbólica). SPS-1 podia utilizar-se em máquinas com 1,4K posiciones de cor. SPS-2 requeria um mínimo de 4K posiciões de cor.

## Caracteres e códigos de operação

    Nota: Na tabela que segue, se o bit de marca de palavra está activo, o bit C será o oposto do mostrado. O bit C era determinado e verificado automaticamente pela máquina, normalmente os programadores não precisavam se preocupar por ele. A única forma de especificar o bit C era utilizando os interruptores do painel de manutenção. Ainda que este painel era principalmente para uso dos técnicos de hardware (Ces), um programador podia utilizar seus interruptores para aplicar parches rápidos durante a depuração de programas.
| Carácter BCD | Print-A | Print-H | Cartão | BCDsin M | Operação | Definião e Observações |
| Espaço | C |
| . | . | . | 12-3-8 | BA8 21 | Halt |
| ¤ | ¤ | ) | 12-4-8 | CBA84 | Clear Word Mark | Rombo |
| [ | 12-5-8 | BA84 1 |
| < | 12-6-8 | BA842 | Menor que |
| | 12-7-8 | CBA8421 | Marca de Grupo |
| & | & | + | 12 | CBA |
| $ | $ | $ | 11-3-8 | CB 8 21 |
| * | * | * | 11-4-8 | B 84 |
| ] | 11-5-8 | CB 84 1 |
| ; | 11-6-8 | CB 842 |
| ? | 11-7-8 | B 8421 | Delta (Mudança de Modo) |
| - | - | - | 11 | B |
| / | / | / | 0-1 | C A 1 | Clear Storage |
| , | , | , | 0-3-8 | C A8 21 | Set Word Mark |
| % | % | ( | 0-4-8 | A84 | Divide | Funcionalidade opcional. |
| ? | 0-5-8 | C A84 1 | Separador de Palavras |
| \ | 0-6-8 | C A842 | Oblíquo esquerdo |
| ? | 0-7-8 | A8421 | Marca de Segmento de Fita |
| ? | ? | ? | N/A0 | A | Não se pode ler desde cartão. Perfurado como zero. Espaço com "paridade-par" em fita. |
| # | # | = | 3-8 | 8 21 | Modify Address | Opcional (requer mais de4000 posições de cor) |
| @ | @ | ' | 4-8 | C 84 | Multiply | Funcionalidade opcional. |
| : | 5-8 | 84 1 |
| > | 6-8 | 842 | Maior que |
| ?$^?$ | 7-8 | C 8421 | Marca de Fita |
| ? | & | & | 12-0 | CBA8 2 | Zero and Add | Plus Zero |
| A | A | A | 12-1 | BA 1 | Add |
| B | B | B | 12-2 | BA 2 | Branch |
| C | C | C | 12-3 | CBA 21 | Compare |
| D | D | D | 12-4 | BA 4 | Move Numerical | (Bits) |
| E | E | E | 12-5 | CBA 4 1 | Move Characters and Edit |
| F | F | F | 12-6 | CBA 42 | Controle Carriage | (Impressora) |
| G | G | G | 12-7 | BA 421 |
| H | H | H | 12-8 | BA8 | Store B-Address Register | Funcionalidade opcional. |
| I | I | I | 12-9 | CBA8 1 |
| ! | - | - | 11-0 | B 8 2 | Zero and Subtract | Minus Zero |
| J | J | J | 11-1 | CB 1 |
| K | K | K | 11-2 | CB 2 | Select Stacker | (Cartão perfurado) |
| L | L | L | 11-3 | B 21 | Load Characters to Word Mark |
| M | M | M | 11-4 | CB 4 | Move Characters to Word Mark |
| N | N | N | 11-5 | B 4 1 | Não Operation |
| Ou | Ou | Ou | 11-6 | B 42 |
| P | P | P | 11-7 | CB 421 | Move Characters toRecord or Group Mark | Funcionalidade opcional. |
| Q | Q | Q | 11-8 | CB 8 | Store A-Address Register | Funcionalidade opcional. |
| R | R | R | 11-9 | B 8 1 |
| ? | ? | ? | 0-2-8 | A8 2 | Marca de registro |
| S | S | S | 0-2 | C A 2 | Subtract |
| T | T | T | 0-3 | A 21 |
| Ou | Ou | Ou | 0-4 | C A 4 | Controle Unit | (Fita) |
| V | V | V | 0-5 | A 4 1 | Branch if Word Markand/or Zone |
| W | W | W | 0-6 | A 42 | Branch if Bit Equal | Funcionalidade opcional. |
| X | X | X | 0-7 | C A 421 | Move and Insert Zeros | Funcionalidade opcional. |
| E | E | E | 0-8 | C A8 | Move Zone | (Bits) |
| Z | Z | Z | 0-9 | A8 1 | Move Characters andSuppress Zeros |
| 0 | 0 | 0 | 0 | C 8 2 |
| 1 | 1 | 1 | 1 | 1 | Read a Card |
| 2 | 2 | 2 | 2 | 2 | Write a Line |
| 3 | 3 | 3 | 3 | C 21 | Write and Read |
| 4 | 4 | 4 | 4 | 4 | Punch a Card |
| 5 | 5 | 5 | 5 | C 4 1 | Read and Punch |
| 6 | 6 | 6 | 6 | C 42 | Write and Punch |
| 7 | 7 | 7 | 7 | 421 | Write, Read, and Punch |
| 8 | 8 | 8 | 8 | 8 | Start Read Feed | Funcionalidade opcional. |
| 9 | 9 | 9 | 9 | C 8 1 | Start Punch Feed | Funcionalidade opcional. |

## Implementação hardware

A maioria da circuitería lógica do 1401 consistia num tipo de DTL ao que IBM chamava CTDL. Outros tipos de circuitos IBM utilizados eram: Alloy (algumas funções lógicas, mas fundamentalmente funções não lógicas; tomava seu nome do tipo de transistores que utilizava), CTRL (um tipo de RTL). Actualizações posteriores (por exemplo, a interface de fita TAU-9) utilizavam um tipo de DTL mais rápido, que IBM chamava SDTDL e que incorporava um modelo de transistor inventado por Herbert Kroemer em 1953 ("drift" transistor) por sua maior velocidade.
Estes circuitos fabricavam-se com componentes discretos montados em circuitos impressos de papel de resina epóxica numa cara, bem de 38x114 mm com um conector de 16 pines (largo simples), ou bem de 82x114 mm com dois conectores de 16 pines (duplo largo). IBM referia-se a eles como cartões SMS Standard Modular System: Sistema Modular Regular. A quantidade de lógica num circuito impresso era similar à de um circuito SSI da série 7400 ou à de um MSI (por exemplo, de três a cinco portas lógicas ou um par de flip-flops num circuito de largo simples até ao redor de vinte portas lógicas ou quatro flip-flops num circuito de duplo largo). Estes circuitos inseriam-se em estruturas.

## Arte Inspirada pelo IBM 1401

Em outubro de 2006, a respeitada discográfica independente 4AD (Os Pixies, Dead Can Dance, Scott Walker) publicou um disco do músico islandés de vanguardia Jóhann Jóhannsson. O título do disco é 'IBM 1401, A User's Manual' (IBM 1401, Um Manual de Utente). Está baseado num trabalho que seu pai, Jóhann Gunnarsson, engenheiro chefe de manutenção de uma dos primeiros computadores do país, e Elias Davidsson, um dos primeiros programadores do país, fizeram em 1964. Foi escrito originalmente para cuarteto de corda, órgão e electrónica, para acompanhar uma obra de dança de Erna Ómarsdóttir. Para a gravação do disco, Johann tem-o reescrito para uma orquestra de corda de sessenta componentes, tem acrescentado um movimento final e tem incorporado gravações electrónicas fita-a-fita de época de um computador IBM 1401 encontradas na cobertura de seu pai. O resultado é espantoso. Enlace a mostras mp3 do disco.
Um sketch dos primeiros tempos dos Muppets de Jim Henson parece parodiar um manual de formação técnica. Um protótipo do monstro das bolachas, com os dentes mais afiados, come-se uma máquina complexa enquanto lê seu próprio manual de instruções em voz alta. Vídeo Youtube .