TBBlue FBLabs – V1.02

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:

placa chinesa

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:

Mapa Componentes (brackets)

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:

Jpeg

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:

placas1

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:

Tela_Updater_1

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:

Tela_Updater_4

Depois do processo concluído, você irá ver a tela abaixo:

Tela_Updater_6

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