TBBlue – Belavenuto – versão 1.02
Este projeto é um clone de um ZX Spectrum configurável em FPGA, podendo implementar um ZX 48K, 128K e +3e. Foi e está sendo desenvolvido por Fábio Belavenuto e Victor Trucco.
Esta versão foi criada pensando em ter uma versão stand-alone, independentemente de qualquer peça original de um ZX Spectrum ou clone. Como o projeto é flexível, é possível fazer uma versão que pode ser colocada dentro de um case de um ZX ou TK90X e utilizar o teclado original, e é essa a ideia da versão do Victor Trucco.
O TBBlue tem duas portas de joystick padrão atari/mega drive, podendo ser configurados separadamente para os padrões Kempston, Sinclair 2 e Cursor e com suporte ao segundo botão no pino 9. Há uma opção para modificar a função do conector DB-9 do joystick 2 para a conexão de um mouse e uma Lightpen (descritas em uma seção específica desse documento), sendo assim possível somente o uso de um joystick. Há três conectores de áudio, uma saída para o áudio do Beeper e AY, uma saída MIC e uma entrada EAR para gravador K7.
O teclado deve ser usado com um teclado ABNT2 padrão PS/2 e a saída de vídeo é VGA podendo ser configurado para frequências verticais de 50 ou 60 Hz e frequências horizontais de 15 ou 31 KHz.
O projeto ainda emula a Explorer (interface de áudio com o AY-3-8910), DivMMC (interface de armazenamento com cartões SD), Multiface (One, 128 ou 3, dependendo da escolha da máquina), LightPen, Mouse Kempston e a ULAplus (modificação retro-compatível com a ULA que permite exibir até 256 cores).
Esta versão foi projetada em três placas, pensando em ser colocada dentro de uma caixa patola modelo PB-114 (maior) ou a PB-114/2 (menor). Nas duas placas menores estão os conectores de áudio, vídeo, joystick e cartão SD, para facilitar a montagem na caixa, e sua conexão com a placa principal é feita via cabos paralelos.
Todas as configurações ficam salvas em um arquivo texto no cartão SD. O cartão SD deve ser de até 8GB formatado em FAT32 com alguns arquivos específicos do TBBlue, com os firmwares das máquinas e arquivos .TAP e outros para ser carregados pelo ZX Spectrum. Estes arquivos estão no anexo ao final deste documento.
As ROMs (firmwares) ficam no cartão SD podendo ser configurado qual tipo de máquina e qual ROM carregar. O tipo de máquina e ROMs devem ser editados no PC para interpretação do firmware do TBBlue, e o resto das opções podem ser modificados pelo próprio TBBlue.
O código binário do FPGA e os firmwares serão disponibilizados, sendo que o source do FPGA será aberto no futuro.
A alimentação deve ser feita com 5V com consumo de no máximo 350 mA, podendo ser alimentado com fonte de 5V/500mA, por uma porta USB padrão e até baterias com um circuito adicional de geração de 5V e carregador embutidos.
Lista de peças (para compra)
1 – Placa FPGA Mini-EP2C5 – Ebay: http://www.ebay.com/itm/301049144314
1 – Programador USB Blaster – Ebay: http://www.ebay.com/itm/200943750380
4 – Conectores IDC fêmea 2×14 – ebay: http://www.ebay.com/itm/181238800338
1 – SRAM AS7C34096 – ebay: http://www.ebay.com/itm/370841628317
1 – TDA1543T – ebay: http://www.ebay.com/itm/171399504173
1 – transistor BC846 (NPN) – código farnell: 1081227
1 – Diodo 1N4148 SMD – código farnell: 1097176
1 – Led Bicolor 3mm commom anode – ebay: http://www.ebay.com/itm/151380809910
2 – conectores DB-9 macho soldagem placa – código farnell: 1653975, ebay: http://www.ebay.com/itm/281169570215
1 – Conector DB-15HD femea (VGA) soldagem placa – código farnell: 93N1154, ebay: http://www.ebay.com/itm/171772254944
1 – Conector SD – código farnell 97K9470, ebay: http://www.ebay.com/itm/181384749765
3 – Conectores P2 femea soldagem placa – DX: http://www.dx.com/p/294477 e/ou http://www.dx.com/p/122548 e/ou http://www.dx.com/p/122550
1 – Conector PS/2 teclado soldagem placa – código farnell: 2452347, ebay: http://www.ebay.com/itm/251455486871
1 – Conector P4 macho montagem gabinete – ebay: http://www.ebay.com/itm/181357006268
6 – 1K SMD1206 – código farnell: 9337008
3 – 2K (ou 2K2) SMD1206 – código farnell: 9336117
3 – 470R SMD1206 – código farnell: 9336567
3 – 4K7 SMD1206 – código farnell: 9240608
3 – 500R (ou 510R) SMD1206 – código farnell: 9336613
3 – 10K SMD1206 – código farnell: 9337016
2 – 120R SMD1206 – código farnell: 9337059
1 – 680R SMD1206 – código farnell: 9240934
6 – 100n SMD1206 – código farnell: 499389
2 – 10u x 10V (SMD panasonic C ou Normal) – código farnell: 9751041
1 – 100u x 10V (Normal) – código farnell: 9452435
Opcional:
1 – Barra pinos 90 graus – ebay: http://www.ebay.com/itm/111495008812
1 – Barra pinos 180 graus – ebay: http://www.ebay.com/itm/181085288071
1 – Cabos dupont – ebay: http://www.ebay.com/itm/231495311127
Lista de peças (para montagem)
Placa Principal:
Part Value Package Description ---- --------------- ----------- ------------------------------------ PLC1 PLACAEP2C5LASER 4X28_LASER Placa EP2C5 IC1 AS7C34096 SOJV36-400 4-Mbit (512K x 8) Static RAM IC2 TDA1543T SOIC-16NW TDA1543 T1 BC846 SOT23 NPN TRANSISTOR D1 1N4148 SOD106-R DIODE LED BICOLOR 3mm LED Bicolor anodo comum C1 100n C1206 CAPACITOR C2 100n C1206 CAPACITOR C3 100n C1206 CAPACITOR C6 100n C1206 CAPACITOR C4 10u PANASONIC_C POLARIZED CAPACITOR ou C7 10u E3,5-8 POLARIZED CAPACITOR C5 10u PANASONIC_C POLARIZED CAPACITOR ou C8 10u E3,5-8 POLARIZED CAPACITOR R1 510 R1206 RESISTOR R2 1K R1206 RESISTOR R3 4K7 R1206 RESISTOR R4 4K7 R1206 RESISTOR R5 2K2 R1206 RESISTOR R6 510 R1206 RESISTOR R7 1K R1206 RESISTOR R8 2K2 R1206 RESISTOR R9 510 R1206 RESISTOR R10 680 R1206 RESISTOR R11 4K7 R1206 RESISTOR R12 120 R1206 RESISTOR R13 120 R1206 RESISTOR R14 1K R1206 RESISTOR R15 1K R1206 RESISTOR R16 1K R1206 RESISTOR R17 10K R1206 RESISTOR R18 10K R1206 RESISTOR R19 470 R1206 RESISTOR R20 10K R1206 RESISTOR R21 470 R1206 RESISTOR R22 470 R1206 RESISTOR R23 2K2 R1206 RESISTOR R24 1K R1206 RESISTOR IDC EP2C5 Conector IDC Fêmea 2x14 IDC EP2C5 Conector IDC Fêmea 2x14 IDC EP2C5 Conector IDC Fêmea 2x14 IDC EP2C5 Conector IDC Fêmea 2x14 SV1 PS2 MA04-1 PIN HEADER SV2 VGA MA06-1 PIN HEADER SV3 SD MA06-1 PIN HEADER SV4 JOY1 MA08-1 PIN HEADER SV5 JOY2 MA08-1 PIN HEADER SV6 AUDIO MA05-1 PIN HEADER SV7 LED MA03-1 PIN HEADER JP1 5V 1X02 PIN HEADER INTERCONNECT Cabos Dupont para ligação entre as placas POWER Conector P4 para montagem em gabinete JUMPERS Pedaços de fio para fazer jumpers
Placa Bracket:
Part Value Package Description ---- --------- ---------- ------------------------------------ U$1 SD 06132 SD MMC Card holder U1 Audio OUT AUDIO-JACK 3.5mm Audio Jack U2 EAR AUDIO-JACK 3.5mm Audio Jack U3 MIC AUDIO-JACK 3.5mm Audio Jack C1 100n C1206 CAPACITOR C2 100n C1206 CAPACITOR C3 100u E2,5-5 POLARIZED CAPACITOR SV1 MA04-1 PIN HEADER SV2 MA06-1 PIN HEADER SV3 MA05-1 PIN HEADER SV4 MA08-1 PIN HEADER SV5 MA08-1 PIN HEADER SV6 MA06-1 PIN HEADER X1 VGA HDF15H SUB-D X2 PS2 MDIN06SS YAMAICHI CONNECTOR X3 Joy1 M09HP SUB-D X4 Joy2 M09HP SUB-D
Mudanças na placa chinesa
Retirar 7 resistores (R1, R2, R9, R10, R15, R16 e R18), apontados na imagem abaixo:
Esta mudança é necessária pois os resistores R1, R2, R9 e R10 são usados para alimentar alguns pinos do FPGA com GND e 1,2V, necessários se fosse usado o FPGA modelo EP2C8. Os chineses usam o EP2C5 e soldam esses resistores erroneamente.
Já os resistores R15, R16 e R18 são usados para ligarem leds de teste em alguns pinos, que usamos para outros propósitos e os LEDs atrapalham os sinais.
Mapa dos componentes
Placa Principal:
Placas Bracket:
Montagem
Na placa principal há alguns jumpers que devem ser feitos. Na imagem correspondente são as linhas cinzas grossas conectando duas vias. No total são 4 jumpers. Fazer com terminais de componentes.
Os capacitores eletrolíticos na placa principal, em C7, C8 e C4, C5, são de 10uF e há a opção de usar um radial comum ou usar SMD. Os footprints estão juntos e você pode se decidir o que usar.
Para não haver dúvidas, se for usar eletrolítico comum, observe no silk-screen o lado positivo, destacado na foto abaixo:
Se decidir usar Eletrolítico SMD ou Tântalo SMD observe nas figuras abaixo como ficam:
Há um conector de 3 vias, SV7, com o nome de LED, que deve ser soldado o LED bicolor para indicar que a placa está energizada e indicar acesso ao cartão SD. Utilize a cor azul do LED para indicar acesso ao cartão.
No conector JP1 deve-se ligar um cabo duplo nos 5V da entrada da placa FPGA. Onde está escrivo 5V (em vermelho, na foto acima) é o positivo, sendo o outro negativo.
JMP1 seleciona a tensão que será alimentado os joysticks, 3,3V ou 5V. Como o FPGA trabalha com 3,3V e os joysticks de mega-drive aceitam bem 3,3V, é recomendado fechá-lo para 3V3 para evitar uma fuga de tensão de 5V e queimar os pinos do FPGA. Só é recomendado setar em 5V caso o joystick não trabalhe bem com 3,3V. Joysticks de Atari são somente chaves e não necessitam de alimentação. Se desejar usar o conector do Joy2 para mouse/lightpen, configure o JMP1 para 3V3!
Placas montadas
Segue abaixo imagens das placas do protótipo já concluídas. Observe que neste protótipo foi utilizado C7 e C8, capacitores eletrolíticos:
Uso
Para preparar o cartão SD para uso no TBBlue, use um cartão de no máximo 8GB, formate-o em FAT32 e copie os arquivos disponibilizados na raíz do cartão.
Ao ligar o TBBlue com o cartão preparado e inserido, o firmware será carregado na memória e irá iniciar a leitura da configuração e mostrará no vídeo, por alguns segundos, algumas informações úteis (mini-ajuda) das teclas equivalentes do teclado original no teclado PS/2. Abaixo uma imagem desta tela.
As teclas são descritas abaixo:
F1 - Hard Reset F2 - Muda scandoubler F3 - Muda 50/60 Hz F4 - Soft Reset F5 - Pausa CPU F7 - Ativa/Desativa scanlines F9 - Aciona NMI da Multiface F10 - Aciona NMI da DivMMC SHIFT - Caps Shift CONTROL - Simbol Shift
F1 reinicia o firmware de boot, mesmo processo quando se liga o TBBlue. Se manter segurado a tecla SPACE ao ligar ou apertar F1 o firmware irá iniciar o configurador.
F2 ativa ou desativa o scandoubler, que gera o vídeo VGA em 31KHz. Use-o caso o monitor ligado não suporte 15 KHz para visualizar a imagem corretamente. A opção do scandoubler pode ser definida no configurador para sempre iniciar ativado ou desativado.
F3 muda a frequência vertical entre 50 ou 60 Hz. Use-o caso o monitor não aceite a frequência atual para visualizar a imagem corretamente. Esta opção também é configurável no configurador.
F4 simula o botão de reset comum. Reseta a CPU e inicia-a em $0000.
F5 pausa a CPU congelando o Z80. Pode ser usado para pausar algum jogo que não tenha opção de PAUSE. Cuidado ao usar este recurso, pois se o jogo depender de interrupções pode causar o travamento e reset.
F7 ativa/desativa as scanlines que simulam, digamos assim, o efeito de tv´s antigas (de tubo)
F9 simula o botão NMI da Multiface se esta estiver habilitada.
F10 simula o botão NMI da DivMMC, para ativar o menu do ESXDOS se esta estiver habilitada.
SHIFT simula a tecla Caps Shift do teclado original. CONTROL simula a tecla Simbol Shift do teclado original.
O arquivo “config.ini” dentro da pasta “tbblue” contém as informações de configurações. O configurador salva as mudanças neste arquivo e o firmware de boot faz a leitura deste arquivo. Pode ser editado no PC com qualquer editor de texto simples, como o NOTEPAD.
Após passar alguns segundos na tela de mini-ajuda, o firmware irá carregar as ROMs de acordo com a máquina configurada como default, e irá iniciar o ZX Spectrum. A partir deste ponto já se pode usar como se fosse um ZX Spectrum original.
Para usar o ZX80, ZX81 e Jupiter Ace, você precisa desabilitar todos os periféricos do TBBlue, como DivMMC, ULA+, Multiface e Explorer, pois se trata de uma emulação. Mais informações no site original:
http://www.fruitcake.plus.com/Sinclair/Interface2/Cartridges/Interface2_RC_New_ZX81.htm
Configurador
No configurador, na parte de cima da tela, será mostrada uma lista das configurações de máquinas existentes no arquivo “config.ini”. Este menu só pode ser editado pelo PC alterando o arquivo diretamente.
A máquina default estará selecionada e piscando. Para mudar a máquina default utilize as setas direcionais para cima e para baixo, mudando a seleção. Ao selecionar a nova máquina que será a default, aperte ENTER para confirmar e já iniciar a execução. Na próxima inicialização do TBBlue esta máquina escolhida sempre será carregada automaticamente.
Se quiser editar as opções de periféricos e joysticks, na tela do configurador, aperte a tecla “E” para mudar a seleção para as opções, que ficam na parte de baixo do vídeo, e utilize-se das teclas direcionais. Para cima, baixo, esquerda e direita você muda o item que será editado e a tecla SPACE você muda a opção daquele item selecionado. Para confirmar aperte ENTER, para cancelar aperte “E”. Confirmando as opções serão salvas e sempre carregadas ao inicializar o TBBlue.
A opção ‘P.Joy2’ define a função da porta 2 do Joystick, se será usado como Joystick ou com um adaptador para ligação de um Mouse PS/2 e Lightpen. Se usado como Joystick, algumas combinações não são possíveis devido aos conflitos de portas e/ou teclas. As combinações não permitidas são:
- Joy1=Kempston e Joy2=Kempston
- Joy1=Cursor e Joy2=Cursor
- Joy1=Sinclair e Joy2=Cursor
As outras combinações são possíveis.
Porta 2 do Joystick como função Mouse/Lightpen
É possível configurar no TBBlue para utilizar a porta 2 do Joystick como entrada para mouse PS/2 e Lightpen. Ao ativar essa opção, os pinos do conector DB-9 assumem outras funções, como descrita abaixo:
Pino 1 - PS/2 Clock Pino 2 - PS/2 Data Pino 5 - VCC Pino 8 - GND Pino 9 - Lightpen
A construção de um adaptador pode ser feita baseada nessas informações.
Auto-atualização
Esta versão permite a atualização do código do FPGA pelo próprio TBBlue! Para atualizar você precisa colocar um arquivo chamado “TBBLUE.TBU” na raiz do cartão e inicializar o TBBlue. Este arquivo será fornecido quando houver atualização e deve ser específico para essa versão de hardware, pois se diferente o atualizador irá recusar.
Ao inicializar o TBBlue e o arquivo de atualização estiver na raiz do cartão, irá aparecer a tela abaixo:
O atualizador irá informar que o arquivo “TBBLUE.TBU” foi encontrado e irá mostrar as informações da máquina e versão. Essa versão se chama ‘Belavenuto’ e tem ID de número 5. A versão atual do hardware é a 1.01 e a atualização é para a 1.02.
Confirme se quer atualizar. Apertar a tecla ‘N’ irá cancelar a atualização e inicializar normalmente. Se apertar ‘S’ o processo de atualização começa. Primeiramente é calculado o checksum do arquivo para ter certeza que não há erro, pois um bit diferente e o TBBlue pode ficar inutilizável, podendo ser recuperado somente com um programador específico conectado na placa chinesa.
Após checar o checksum, o atualizador irá apagar a flash e gravá-la. Muito importante não faltar energia nesse momento, pois a falta de energia pode tornar o TBBlue inutilizável, como explicado acima. Recomenda-se alimentar o TBBlue com uma bateria, como um power-bank usado para carregar celulares. A tela abaixo mostra uma parte do processo:
Depois do processo concluído, você irá ver a tela abaixo:
Só desligar e ligar o TBBlue para que o novo código do hardware seja carregado. Enquanto o arquivo “TBBLUE.TBU” existir no cartão, o atualizador irá iniciar, então é recomendável retirar o arquivo do cartão depois da atualização para poder utilizar o TBBlue normalmente.
Considerações Finais
Todos os arquivos relacionados ao projeto, como os sources da placa no Eagle, arquivos para serem gravados no cartão SD e binário do FPGA se encontram no arquivo abaixo:
https://drive.google.com/file/d/0B5wpc_jDN_n0dWY0clV4ZHlWWFk/view?usp=sharing