Resgate histórico do computador Patinho Feio (USP - 1971)


#6

[CDE-3] Placa decodificadora de instruções

Seguem abaixo alguns renders 3D de placas do computador Patinho Feio que eu estou redesenhando no KiCad para começar um trabalho de construção de uma réplica real (não emulada).

Essa placa é chamada CDE-3:

C: “Controle”, pois trata-se de uma das várias placas que implementam a unidade de controle.
DE: “Decodificador”, pois essa placa recebe do fluxo de dados os 8 bits de opcode (vindos do RI = Registrador de Instrução) e os 8 bits de operando (vindos do RD = Registrador de Dados).
3: significa que é a terceira placa do conjunto de PCBs que compoem a unidade de controle.

Dados os 16 bits de opcode e operando, essa placa implementa uma função booleana para cada instrução da CPU. Portanto os sinais de saída indicam qual é a instrução atual codificada nos 16 bits da entrada.

[CDE-3-DEBUG] Placa de debugging para a PCB decodificadora de instruções

Pra não ter que construir o computador inteiro antes de validar essa placa, eu poderia testá-la com instrumentos de bancada. Mas ao invés disso, eu optei por projetar uma PCB auxiliar (que chamei convenientemente de CDE-3-DEBUG) que possui LEDs para cada um dos sinais de saída e os nomes dos sinais escritos na camada de silk. Também adicionei LEDs e jumpers com resistores pull-up para todos os 16 bits de entrada. Assim, é possível inserir manualmente uma combinação de bits na entrada e visualizar qual resultado é computado pela placa CDE-3. Além de servir para debugging, também cumpre o papel didático de demonstrar interativamente como funciona um decodificador de instruções duma CPU.

A imagens abaixo são renders 3D da placa CDE-3-DEBUG gerados pelo KiCAD:

Enquanto a placa CDE-3 possui um conector macho de 35x2 pinos usado para conectar a placa ao backplane do Patinho Feio, na CDE-3-DEBUG eu coloquei 2 conectores 35x2, sendo um macho e outro fêmea. Com isso, se todos os jumpers da placa DEBUG forem removidos, é possível deixá-la no meio do caminho entre a CDE-3 e o backplane. Dessa forma, se operarmos o Patinho Feio completo no modo “instrução única” será possível visualizar por meio dos LEDs os sinais de decodificação de instruções durante a operação normal do computador.

Como esse é um projeto de construção de uma réplica, faz mais sentido que a máquina fique exposta com suas “entranhas viradas do avesso”. Ou seja, ao invés de guardar as placas dentro de um gabinete fechado (como era na máquina original), o mais interessante nessa reprodução seria mantê-las afixadas em um quadro - plano - pendurado em uma parede e com placas extras como essa CDE-3-DEBUG para visualização dos sinais internos da CPU. Nesta configuração de exposição, surgem novas possibilidades educacionais para o ensino de princípios de computação e projeto eletrônico digital, o que tem sido a minha principal motivação para continuar pesquisando em minhas horas livres sobre esse computador.

Happy Hacking!
Felipe “Juca” Sanches


#7

Conseguiu ter acesso a este documento na biblioteca do IBGE?


#8

Infelizmente, eu não obtive mais nenhuma resposta sobre isso. Em algum momento futuro eu provavelmente vou tentar localizar o documento novamente.


#9

Fenomenal Juca!
De fato, seria incrível ter estudantes aprendendo noções de Assembly usando o Patinho Feio!!!


#10

Sim. Já temos alguns recursos úteis para isso como a réplica em miniatura do painel frontal do Patinho Feio e também o emulador no MAME. Entretanto, acho que ainda há muitas oportunidades educacionais a serem exploradas nesse tema. Não só para o ensino de assembly, mas para tratar de toda a gama de temas de projeto lógico digital, por exemplo, e também princípios básicos de computação.

Hoje em dia eu tenho dedicado algumas horas por dia nesse projeto, no meu tempo livre e, portanto, estou sobrecarregado com a quantidade enorme de documentos históricos que ainda precisam ser escaneados e publicados na Internet. Além desse trabalho braçal que é mais volumoso do que eu tenho condições de fazer hoje em dia, há também uma atividade bem mais refinada e que, portanto, demanda um tempo ainda maior que o mero escaneamento, que é de fato ler todos esses documentos, interpretá-los, digerí-los. Com isso, seria possível elaborar pequenas atividades educacionais ao redor do tema, tornando o material mais palatável e mais acessível. Ou seja, esse enorme acervo precisa de uma curadoria.

Eu penso em talvez anunciar um projeto de crowdfunding para permitir que eu tenha um tempo maior de dedicação a esse tipo de atividade. Tenho também pensado na possibilidade de conseguir patrocínio com alguma empresa que tenha interesse em apoiar este projeto. Além disso, algumas ramificações desse projeto incorrem também em custos extra, como por exemplo, os gastos com componentes eletrônicos e serviços de prototipagem de placas de circuito impresso, para a construção de réplicas como a da placa CDE-3 e da placa didática CDE-3-DEBUG que a complementa, como já detalhado em post anterior.

Por fim, andei sonhando acordado sobre talvez gravar um documentário sobre o tema.

Happy Hacking,
Felipe “Juca” Sanches


#11

Hoje (5a feira, 16/FEV/2017) eu fiquei muito feliz de ter conversado pessoalmente pela primeira vez com a professora Edith Ranzini em sua sala na Poli-USP. :slight_smile:

Eu poderia contar mil estórias sobre as duas ou três horas de longas conversas que tivemos na manhã de hoje, mas, de forma breve, deixarei aqui apenas uma foto dos dois livros com os quais a professora Edith me presenteou hoje. Lerei com calma e talvez eu publique aqui algumas imagens adicionais destes livros ao longo dos próximos dias.

Happy Hacking,
Felipe “Juca” Sanches


#12

A professora Edith Ranzini me mostrou hoje uma placa de memória de núcleo de ferrite que foi usada no computador G10. Foi a mesma tecnologia usada para a memória do Patinho Feio, mas no caso do computador G10, a memória foi projetada pela própria equipe da professora Edith, enquanto que no caso do Patinho Feio, foi usado um módulo de memória fabricada pela Phillips (modelo FI 21).

Eu não cheguei a tirar fotos hoje do modulo de memória da professora, que estava exposto em um suporte de madeira e acrílico. Mas alguns meses atrás, tirei fotos de uma outra unidade da mesma placa que faz parte do acervo pessoal do professor Edison Spina. Um fato inusitado é que esta placa foi salva pelo professor, pois caso contrário estava já sendo descartada (sendo jogada no lixo)… Seguem as fotos (frente e verso) da placa:


#13

Em fevereiro de 2017 eu dei uma aula na Poli, a convite do professor Pedro Luiz Pizzigatti Corrêa, na disciplina de Modelagem e Simulação de Sistemas Computacionais, pros alunos do último ano do curso de engenharia de computação da USP. Segue abaixo o vídeo da aula onde detalho o trabalho de documentação do computador Patinho Feio que eu venho fazendo durante esses últimos anos:


#14

Juca, no podcast Retrocomputaria número 74 parte A aos 14min e 40 segundos o convidado Júlio Neves fala que o Patinho Feio deu origem ao Cobra 530. Procurando mais na internet no site do MCI tem disponível um livro chamado Rastro de Cobra e na página 41 tem a seguinte frase:

“O principal projetista da CPU do 530 foi Stephan Kovach, que na USP já havia trabalhado na CPU do G-10.”

Achei muito bacana.


#15

Sim! Você pode ver que eu já contactei o professor Stephan Kovach, por conta do autógrafo dele na minha réplica do Patinho Feio, como pode ser visto em uma das fotos que publiquei acima nesta thread.

Eu cheguei a enviar alguns emails para ele especificamente sobre o tema do Cobra 530, mas ele ainda não me respondeu. Na época que ele autografou eu não sabia desse vínculo com o projeto do G-10 e do 530. Qualquer dia eu passo lá na USP pra falar com ele mais uma vez e se tiver histórias novas eu conto por aqui.

Obrigado pela mensagem :slight_smile:


#16

Este é o mais antigo “ASCII-art” brasileiro.
Apesar do termo não ser usado naquela época…

A imagem acima foi extraída da tese de mestrado “O Patinho Feio como construção sociotécnica” de Marcia de Oliveira Cardoso da UFRJ, publicada em 2003 que apresenta um relato muito interessante sobre a origem desse desenho:

Segundo o professor João José Neto, posteriormente também foi
incluída, entre os periféricos de E/S, uma impressora. E novos programas foram
feitos para possibilitar a impressão de dados. A primeira impressão foi o desenho
de um Patinho. O desenho foi confeccionado pela irmã de Selma Shimizu e
digitalizado pela equipe do Patinho Feio [Figura 19]. Segundo Antônio Massola, o
tempo para carregar este desenho na memória do Patinho durou uma madrugada.

Todo este processo de construção-adoção do software se estendeu
para o período após a inauguração oficial do Patinho Feio. Muitas das soluções
encontradas neste ciclo foram soluções posteriores à data de inauguração do
minicomputador. Os próprios integrantes do projeto divergem quanto aos periféricos
existentes nesta inauguração. O consenso está no que diz respeito ao fato de ter
sido carregado um programa na memória do Patinho Feio nesta inauguração.
Sobre o desenho do Pato, há divergências se ele foi apresentado na inauguração
ou não. Se ele foi apresentado na inauguração, a impressão do desenho não foi
feita pelo Patinho Feio. A maioria acredita que este desenho foi digitalizado após a
apresentação do Patinho Feio.

Com base na fotografia, fiz uma transcrição do desenho para texto puro (em ASCII pra valer).
Caso seja útil para alguém, segue abaixo:

                 **     ******
                *    ***      ****
                *   *             *
            *******                 *
           *     *                   *
           *    *                     *
               *                       *
              *                   ***   *                          *
             *                   *   *  *                        ***
            *          ****     * ** *  *                       *  *
            *         *    *    * ** *  *                    ***  *
            *         *  ** *    ***** *                  ***    **
***         *          * ** *   ****   *                **    *** *
*  **        *          ****   *   ***********        **     *   *
*    **      *        ***    **              *       *          **
*       **    *      *   ****              **        *         * *
*          *   *     * **               ***         *        **  *
 *          *   *     ** *****     *****            *       *   *
  *          *   **     **    *****    *           *           *
  *           *    *      ***           *         *          **
  *            *    **       *          *         *   *    **
   *            *     **      **      **         *   *     ****
    *        *   *      *       * ****          *   *        *
     * *      *   *      *       *             *   *       **
        ***    *   *     *        *           *   *       *
           *    *   *    *         *        **   *         *
         **      *   *   *          ********    *          *
         *        *   * *                *     *         **  *
          *        *   **                    **          *  **
           **       ** *                                 **  *
             *        *                               *****   *
             **      *                                *      *
               **    *                      *   **  *      ** *
                 *****                       ***  **      *  **
                     *                                    *** *
                     *                                       *
                      *                                     *
                      *                                 ****
                       *                               *
                        *                            **
                         *                         **
                          ****                   ***
                              * **            ***
                                * ************ *
                               * *            * *
                              * *              * *
                             * *               * *
                           ** *                 * *
                          *   ****          ****  *
                          *       ***   ****      *
                           *        **  ***      *
                            *      *      *      *
                            * ******      *******
                             *                 *

#17

Felipe,

Trabalho hercúleo esse seu, e a qualidade apresentada não deixa dúvidas quanto à competência com a qual vem sendo executado!

Eu já pesquisei muita coisa sobre esse computador da USP no meu tempo livre (já faz uns 10 anos desde que eu andei “fuçando” furiosamente pela internet e lendo acerca do desenvolvimento da informática no nosso país). Mas o que você fez até agora já foi muito além do que eu poderia ter imaginado.

Eu assisti também ao vídeo da sua aula na Poli falando a respeito desse trabalho, e uma dúvida me surgiu: você comenta na sua palestra, que devido a restrições do espaço de memória RAM disponível no Arduino (utilizando no seu Painel um UNO, imagino? Não consegui distinguir pelo vídeo), não é possível implementar o código para emulação do Patinho Feio (o UNO só dispõe de 2KB, insuficientes para armazenar os programas do Patinho Feio mais as variáveis de programa do emulador), motivo pelo qual você chegou a mencionar algo como endereçar uma memória RAM externa - o que de imediato me fez pensar, se em um modelo Mega 2560 (com 8KB SRAM) não seria possível a execução do emulador e dos programas?

Me interessou muito essa sua proposta da realização do painel, pelo realismo do “front-end”, tanto na parte física (permitindo a interação “tátil”) quanto na lógica; seria bem legal fazer o painel ser um “Patinho Feio Slim”, com o hardware sendo emulado por uma plataforma de baixo custo e tamanho, mas com recursos mais do que suficientes para realizar esse trabalho.

Eu gostaria bastante de te ajudar com isso, tanto cedendo um Mega 2560 (devo ter uns 2 clones chineses aqui comigo) quanto colaborando na parte do código (na medida do possível). Imagino ser viável “portar” a lógica empregada na sua versão para o MAME em C para dentro do IDE Arduino, compatibilizando-a para rodar nesta plataforma através do remapeamento de E/S.

Também adorei a sua idéia, já parcialmente colocada em prática, de reproduzir todo o hardware original em PCIs unidas através de um barramento comum. Depois de ler todo esse fórum, fiquei com a impressão de que essa idéia deu uma “parada” após o desenvolvimento da CDE-3-DEBUG?
Espero que não; eu gostaria de ver isso tomando forma no mundo real. Concordo com você quanto a deixar tudo exposto, inclusive com as placas de diagnóstico plugadas (como vc mesmo mencionou no seu post).
Tem que ter LEDs piscando, CIs, serigrafia/labels e tudo o mais que atrai os olhares curiosos à mostra. Falando nisso, no seu projeto vc pretende utilizar os TTLs convencionais (se é que ainda se encontra isso por aí) ou fazer um “upgrade” para uma linha compatível, de baixo consumo (LS “Low Power” ou CMOS)?


#18

Em dezembro encomendei a produção das placas CDE-3 e CDE-3-debug no website Curta Circuitos.

Seguem abaixo algumas fotos das placas e dos primeiros passos de montagem do circuito soldando conectores, soquetes, capacitores e depois instalando os chips de portas lógicas nos soquetes.


#19

Acabei de terminar a montagem das placas CDE-3 e CDE-3-debug e elas estão funcionando :smiley:

Na foto acima a placa de deputação estimula a CDE-3 com simulando um valor 0x30 no Registrador de Instrução e um valor 0x04 no Registrador de Dados. Com esses inputs, a placa determina que se trata da instrução de armazenamento (+ARA) de dado em memória com endereçamento indexado (sinal +INDICE está ativo). Vemos também que como o registrador de dados é não-nulo, foi indicado também o sinal ativo baixo -RDZ “reg. de dados é zero”.

Os significados dessas instruções, seus opcodes e mnemônicos são resumidas nessa tabela do livro do professor Edson Fregni:

Em breve pretendo gravar um vídeo demonstrando em mais detalhes o funcionamento dessas placas.


#20

Ontem de noite quando tentei ligar as placas pela primeira vez o circuito não funcionou corretamente. Usei um multímetro para inspecionar as soldas e o caminho do sina -RDZ e acabei concluindo que houve um erro de projeto no layout da placa CDE-3. O pino de terra (GND) do CI 74LS30 não estava ligado ao GND do conector da placa.

Abri arquivo do layout de pcb no KICAD e rodei novamente o DRC (Design Rules Checker) e percebi que na realidade havia lá um aviso sobre esse problema que eu acabei não vendo antes de mandar fabricar a placa. Eu tenho o costume de só enviar uma placa para fabricação depois de ter zerado todos os alertas do DRC, mas por algum motivo eu acabei bobeando e não vi esse alerta. Pior que isso: havia 33 alertas similares, todos referentes à interligação dos pinos de GND de todos os CIs da placa.

Bem… depois de um minutinho de tristeza, levantei a cabeça e comecei a mapear quais seriam os remendos necessários para fazer a correção na placa. Aproveitei para simultaneamente ir corrigindo o layout no KICAD de modo que eu possa ter uma placa “Rev.B” caso algum dia eu (ou alguém) queira rodar novamente esse projeto sem ter que lidar com esse erro de layout.

Depois de gastar uma horinha soldando remendos na placa o resultado (que não e bonito mais funciona) foi esse:

Depois disso, a placa funcionou corretamente.


#21

Hoje de manhã notei que um dos opcodes estava gerando sinais incorretos:

O opcode 1010 corresponde à instrução PAN (Pula se acumulador for negativo), corretamente indicada pelo LED +PAN. Entretanto o LED +(PAN+PAZ) está apagado enquanto o (SUS+PUG) está acesso, enquanto eu esperaria o status oposto para esses dois sinais.

Verifiquei nos esquemáticos e não houve erro na atribuição dos sinais aos conectores das duas PCBs. Então fui inspecionar os esquimáticos da CDE-3 e notei que houve um pequeno deslize durante o processo de transcrição para o KICAD a partir dos esquemáticos originais. Vejam abaixo a diferença (os inputs das portas NOT estão trocados):

Isso significa que eu vou ter que fazer mais um remendo na placa (e corrigir o layout para a “Rev.B”). A boa notícia é que como os sinais trocados saem do mesmo CI (a pastilha de portas NOT localizada na posição 3A da placa) o ajuste provavelmente será menor e mais localizado próximo ao chip 3A.


#22

Hmmm… Parece que vai ser um pouco mais complicado do que eu imaginava. Segue abaixo o que eu pretendo fazer:

  1. Cortar as trilhas indicadas em vermelho.
  2. Raspar o esmalte protetor das trilhas nos locais indicados em cinza.
  3. E soldar os fios indicados em verde.

#23

#24

No comecinho de 2018 eu trabalhei com uma máquina leitora de fitas perfuradas que, ao que tudo indica, não foi usada pelo time de desenvolvimento do Patinho Feio, mas que é da mesma época e foi comprada pelo professor Hélio Guerra.

Um relato detalhado deste equipamento encontra-se nesta outra postagem aqui mesmo no Fórum Fiozera:


#25

Nesse final de semana me encontrei com o professor Guido Stolfi em um evento no qual ele demonstrou o sintetizador musical que ele construiu em 1974 e que costumava ser interfaceado com o computador Patinho Feio (e também com um computador da HP MX-21).

Mais informações sobre o sintetizador no site do professor:
http://www.lcs.poli.usp.br/~gstolfi/synthpage2.htm

O Affonso Amendola tava lá também e ficou empolgado para aprimorar o emulador do Patinho Feio no MAME para simular também o sintetizador do Guido:

Seguem abaixo mais algumas fotos: