Da lista VZEMU. Reciclagem retro em sua mais gloriosa manifestação. Gerardus “Clockmeister“ conta e eu traduzo:
Primeiro, montei um circuito de teste básico para o Z80 numa breadboard com um circuito de clock simples, que só fazia ele dar um loop de NOPs e piscar um LED para mostrar que estava funcionando — e eu pude testar os sinais com o osciloscópio que comprei. Isso foi útil para aprander o básico do osciloscópio. Aliás, eu deveria ter comprado um décadas atrás, mas na época eles não custavam menos de 300 dólares…
Aí pensei “bem, vamos ver se eu posso expandir isto” e adicionei uma ROM de VZ da minha caixa de sucata, um decodificador de endereços simples, uma RAM estática 6116 e um circuito de reset. Surpreendentemente, esse circuito não explodiu em chamas, o Z80 pareceu estar dando boot no código da ROM em 0000h no reset e executando algo. Movi o projeto para a placa de circuito impresso, soldei e testei. As ligações das linhas de endereço, dados etc. funcionaram de primeira. Se tivesse precisado catar defeitos, provavelmente o projeto nunca iria à frente e seria jogado na gaveta “para mais tarde” (sendo que o “mais tarde” nunca chega).Ate aí tudo bem, mas para que serve um computador sem tela? Peguei um 6847 que eu tinha de reserva. A ideia original era ligá-lo na conexão piggyback entre as placas, mas desisti dessa ideia porque seria complicado demais, difícil demais de debugar e visualmente muito feio. Não que seja uma grande beleza do jeito que ficou, mas pense nele como um Picasso.
Então… o soquete de 40 pinos virou a interconexão entre as placas para todas as linhas de endereço, I/O do VDG, clock, blá blá, acho que sobrou um pino que eu poderia usar como linha de reset, heh. Para o circuito de clock eu precisava de 3.58 MHz (o VDG exige isso por conta do NTSC, então por simplicidade a CPU também usa esse clock) [N. do T.: #MSXFeelings], mas como eu não tinha o cristal correto usei um de 14.3 MHz que eu tinha e dividi por 4.
Eu tinha uma RAM estática 6116 (2K x8) mas minha intenção é dar ao 6847 os 6K que ele precisa para os todos os modos até 256×192, então usei uma SRAM de cache de 8K x8, que no momento está conectada para prover os 2K padrão do VZ, mas a possibilidade de expansão já existe. O mais importante era fazer esta gambiarra mostrar algo na tela, e só pensar em expansão depois que estivesse funcionando na sua forma mais simples.
Na mesma placa botei o regulador de tensão e refinei o projeto um pouco (ou seja, botei capacitores de filtragem). Depois de ligar VDG, SRAM, 74LS245, resistores, conectores, adaptadores… hora de ligar.
Será?
Fiz um circuito de saída de vídeo com dois transistores, liguei na TV e lá estava… 10 segundos mais tarde a patroa me aparece e pergunta “Tudo bem?” Aparentemente o “F#CK!” que eu gritei foi alto o suficiente para acordá-la. Ooops.
O circuito ainda precisava de um debug. A tela estava invertida por causa de um erro na fiação, e a imagem estava cheia de ruído com barras onduladas grossas rolando. Isso era porque eu liguei a linha de 5 volts para o circuito de saída do vídeo composto na alimentação desregulada de 12 volts, em vez dos 5V regulados. Pelo visto, os transistores BC548 aguentam bem o abuso, mas claro, preferem os 5V regulados. Não houve danos, debug completo, hora de arrumar uma entrada.
Pensei em montar/adaptar um teclado, mas decidi deixar isso para depois e por enquanto vamos usar o teclado de um VZ300. Catei um header e um adaptador que servisse. Descobri que pinos do teclado eram ligados em qual sinal e liguei tudo. É, continua funcionando.
Eu queria ver quanto de RAM o sistema enxergava com apenas 2K instalado, mas a ROM modificada BASIC2.1 + 27C128 que eu tentei (PRINT MEM é tão mais fácil que PEEK isso e aquilo) não funcionou. A ROM era lenta demais, então queimei outra, de 200ns, que funcionou OK. Estou convencido que retardos, ruído de barramento etc. estão interferindo, mas enfim.
Daí coloquei o circuito de fita. Depois de ler as especificações do transistor original e achar um bem similar na minha caixa de sucata, eu não conseguia carregar nada. Troquei o transistor por um BC548 comum e aí funcionou beleza. Eu podia carregar coisas, legal. Pena que com 2K só, não havia muito que eu pudesse rodar para testar, mas alguns dos demos originais eram pequenos o suficiente.
Então, expansão de memória agora. De início, eu fiz uma pilha de SRAMs de 2K em piggyback com um decodificador, para expor 8K pela placa-filha que fica no lugar do chip único de 2K. Funcionou, mas de maneira meio instável, e 8K não ia ser suficiente. Mudei o projeto para usar um só chip de 32K com a memória decodificada em blocos de 8K, e AND lógico. [N. do T.: no original: “a single 32K SRAM with memory decoded into 8K blocks, and ANDed.” Alguém me explica isso, por favor.] Isso meio que funcionou mas, por causa do esquema da memória em 7800h, o total de memória exibido estava errado. Isso podia ter sido consertado, imagino, com mais lógica de decodificação, mas achei mais simples ter os 2K em 7800k e os 32K como expansão, o que acabei fazendo. Usei uma lógica simples com resistores e diodos 1N4148 fazendo portas AND para os chip enable e funcionou muito bem. Fica assim.
Então é isso, é assim que estamos por enquanto. Tenho ainda bastante espaço na placa para expansões. Eu sempre quis montar meu próprio computador, então fiquei bem feliz com este VZ feito de sucata e a experiência de aprendizado, por si só, valeu a pena.
Naturalmente, o povo de lá ficou ouriçado com a história e fez perguntas. Aqui estão algumas:
O vídeo é monocromático?
Hmm, sim, e NTSC.
O que seria necessário para adicionar cor?
Um MC1372. Acho que tenho um em algum lugar, então vai ter cor em algum momento. Codificação PAL precisaria de mais lógica, mas como toda tela que eu tenho é multi-formato, vou deixar pra lá. Cor NTSC vai servir bem.
Com um projeto aberto assim, você poderia adicionar joysticks padrão Atari, placas de expansão… mostrei isso pro pessoal no trabalho, é todo um nível novo de nerdicidade!
Sim, joystick não deve ser difícil de implementar. Acredito que a lógica do joystick só replica as setas do teclado, mas vou ter que olhar mais em detalhe. Quero mesmo ligar um teclado melhor, ou pelo menos um cabo mais comprido.
Quanto a conectores de expansão, sim, estou pensando nisso também. Eu tinha umas placas ISA busboard que joguei fora anos atrás numa limpeza. Elas viriam a calhar agora. Chega, nunca mais jogo nada fora! 🙂
Sua expansão de memória usou capacitores de filtro? Acho que a maioria de nós abriu os nossos VZs quando era criança, e eu sempre notava a quantidade de pots e tântalos. São realmente necessários ou só fazem o circuito durar mais?
Minha interface de memória tem dois capacitores de filtro, um eletrolítico e um de tântalo, que fica enfiado entre as fileiras embaixo da expansão. Eles parecem ajudar na estabilidade, então vou botar alguns no circuito de vídeo. Algumas das minhas coisas retro estão cheias de capacitores, e outras não tem quase nenhum. Com velocidades maiores, o ruído aumenta, então mais capacitores são usados para confiabilidade, acho.
Vai mandar pro Hackaday?
No tempo certo, sim. Vou subir um vídeo pro YouTube, provavelmente neste fim de semana.
Mais detalhes aqui. Aguardem a qualquer momento novas notícias em edição extraordinária. Ah… não é a primeira vez que este camarada fuça um VZ300.
A memória está mapeada em blocos de 8KiB, ou seja, necessitando-se alternam-se as páginas — como a mapper do MSX tem janelas de 16KiB e do CoCO tem 8KiB também.
sweet !
Nice project, cant wait to see more 🙂 your making my emulator obsolete LOL blockypixels.com
Um salva ao desbravador.
E meus parabéns a tradução. Eu mesmo não entendendo quase nada de eletrônica e programação. mas fiquei entusiasmado lendo o relato de cada etapa.
Juro se fosse um vídeo passo a passo e mesmo que este durasse horas, assistiria sem problemas.
Magyver dos Bits !
Até