quinta-feira, 26 de abril de 2007

Rev A do 'Bootloader'

Fiz uma revisão no circuito do BootLoader, pois a versão anterior se mantinha normalmente acionada, forçando a nível baixo as linhas SDA e SCL, requerendo assim que o ICPROG fosse executado ao menos uma vez, ou que o cabo ao PC fosse desconectado

A revisão atual corrigiu isso utilizando uma porta que estava livre no 74XX125.




E a configuração do ICPROG tem que mudar, em relação à anterior para desinverter os sinais de VCC e MCLR. As outras configurações permanecem as mesmas.



A placa também foi atualizada. Um arquivo com os arquivos em formato eagle estão neste link.

terça-feira, 24 de abril de 2007

Testes com o 'Hardware" para porta serial

Terminei o teste do Hardware do Bootloader para a porta serial. Do Lado do PC, estou usando o ICPROG. O circuito foi baseado no SI Prog, mas tive que acrescentar um 74HC125 pois no final da gravação o ICProg leva as linhas a nível baixo, em vez de deixá-las livres (em aberto).

O Igor me ajudou no 'Layout' da Placa de circuito impresso. A placa da direita é opcional, e pode ser substituída (com vantagens) por um cabo retirado de um 'joystick' de MegaDrive.

(clique na imagem para ampliar):


O diagrama final do circuito encontra-se logo abaixo (clique na imagem para ampliar):



As configurações necessárias do ICPROG para trabalhar com este circuito são:

Ajustes de Hardware: É necessário inverter os sinais Vcc e MCLR.


Nas opções, é necessário habilitar o 'driver' para NT/2000/XP, caso um destes sistemas estaja sendo utilizado.




E as opções específicas para I2C devem ser selecionadas. Note que o endereço de 'hardware' desta tela tem que ser mudado de 0 para 3 quando usado no Expert, pois este tem resistores de 'pull-up' em todos os pinos do joystick. Como o Hotbit não tem tem 'pull-up' nestas linhas, a e2prom, que é um dispositivo CMOS entende uma linha aberta como um sinal em nível. Outro caso em que é necessário mudar este endereço na faixa de 0 a 3, é quando a interface estive conectada a uma 'HUB' para picodrives.



E por último, uma opção que, quando desmarcada agiliza um pouco o processo, é a verificação logo após a escrita:



E por último, uma captura da tela após a leitura da EEPROM.

Bootloader J2C: Requisitos

Esta é a lista dos Requisitos do carregador de 'Boot' serial (bootloader):

Requisitos de Hardware:

O 'Hardware' do carregador de boot:

  • Deverá consistir de uma interface a ser instalada entre o PC e o MSX;
  • Deverá permitir duas possibilidades de conexão ao PC, nas portas Serial e Paralela;
  • Deverá possuir uma eeprom serial de 32Kbytes;

Requisitos de Software:

O 'Software' do carregador de boot:
  • Deverá ser capaz procurar por um picodrive em até 4 sub-endereços I2C de cada porta de joystick, totalizando assim 8 possibilidades de 'boot';
  • Permitir a seleção do dispositivo manualmente, através do pressionamento das teclas 0-7, durante o boot da máquina;
  • Permitir a seleção do primeiro dispositivo encontrado com a seguinte sequência de varredura, caso nenhuma tecla seja pressionada durante o boot (PORTA.SUB_END): A.0; A;1; A.2; A.3; B.0; B.1; B.2; B.3;
  • Selecionar o primeiro dispositivo encontrado com a sequência de varredura acima, caso o dispositivo selecionado manualmente não seja detectado;
  • Carregar os 32KBytes dados da memória serial nas páginas 1 e 2 da RAM.
  • Implementar o recarregamento através do comando IPL, a partir do dispositivo selecionado durante o boot, se este ainda estiver presente. Caso contrário deverá fazer uma nova varredura;

segunda-feira, 23 de abril de 2007

'Driver' J2C Básico já funciona!

O 'Driver' para dispositivos I2C conectados à porta de 'Joystick' já está funcionando.

As seguintes Funções são providas:

J2CINIT: Inicializa Porta 1 ou 2, conforme 'flag' Cy (0=Joy 1, 1=Joy2) ;
J2CLOGON: Acessa um dispositivo I2C ;
J2CP8ADR: Inicializa o registrador de endereço de 8 bits do dispositivo I2C;
J2CP16ADR: Inicializa o registrador de endereço de 16 bits do dispositivo I2C;
J2CPB: Escreve um 'byte' no endereço atual do dispositivo I2C;
J2CGBYTE: Lê um 'byte' no endereço atual do dispositivo I2C;
J2CSTOP: Gera uma condição de Parada no barramento I2C
J2CSTART: Gera uma condição de Inicio no barramento I2C
J2CPAK: Gera um ACK no barramento I2C cujo valor é igual ao da 'flag' Cy
J2CGAK: Recebe o ACK de um dispositivo I2C;
WAIT1MS: Aguarda 1 mili-segundo.

Na imagem abaixo, a captura de uma região já conhecida da E2PROM do PicoDrive.



Conexões:

Sinal I2C Pino Joystick MSX
SDA 6 (TRGA)
SCL 7 (TRGB)
VCC 5 +5Volts
GND 9 GND

sábado, 21 de abril de 2007

J2C: Rotinas I2C para as portas de Joystick

Terminei de escrever as rotinas I2C para as portas de Joystick do MSX. Agora vou poder finalmente testar meu Picodrive no local para o qual ele foi projetado para funcionar (Ele já havia sido testado na Interface I2C da interface HB-7000 (Esse chipzinho da foto tem 32kBytes de capacidade).




O próximo passo é desenvolver as rotinas responsáveis por carregar, durante o BOOT o conteúdo do picodrive para a RAM do MSX. Estas mesmas rotinas são a base de um cartucho de desenvolvimento (vide Emulador de ROM).

sexta-feira, 20 de abril de 2007

Emulador de ROM

Normalmente quando se fala em emulador de ROM, se pensa num circuito com uma SRAM e um monte de 'chips', mas há alternativas mais simples.

A idéia abaixo é para um cartucho de desenvolvimento para o MSX baseado numa memória serial I2C de 32k. Um código gravado em ROM é responsável por fazer o carregamento, durante o boot, do conteúdo da EEPROM serial para as páginas 1 e 2 da RAM do MSX.



O programa em cartucho pode ainda fazer o processo inverso, ou seja, um 'backup' da memória do MSX para a memória EEPROM serial.

A conexão com o PC com o circuito se dá através do barramento I2C, de forma que tanto o MSX quanto o PC podem ler/escrever na memória EEPROM serial, contanto que não o façam simultaneamente.

Uma interface I2C para o PC pode ser encontrada aqui mesmo neste site. A interface com o PC (Easy I2CBus) pode ser encontrada no site do Ponyprog (bem como um programa para carregar /ler a EEPROM)


segunda-feira, 16 de abril de 2007

Correção da montagem

A correção do circuito, para corrigir a fase do sinal de 'clock' aplicado ao 74LS165 pode ser vista na figura abaixo: Basta remover os jumpers indicados em Azul escuro, e fazer duas novas ligações, conforme indicado em Azul claro. (Clique na imagem para ampliar)



A correção para a versão da placa com 50 pinos é nos mesmos pontos.

Documentação dos 'Drivers' I2C e SD/MMC

Terminei a primeira versão da documentação dos 'Drivers' SD/MMC.

Tenho estudado algum material sobre FAT, e vislumbro utilizar uma implementação já pronta de FAT escrita em C, mas também tenho em mente algumas idéias para poder ler/escrever arquivos num cartão formatado em FAT, sem ter que ter que manipular a FAT, ou seja, sem ter que me preocupar com alocação/realocação de cadeias, criação de entradas em diretórios, etc.

sábado, 14 de abril de 2007

Correções e 'Updates'

Durante os testes para fazer o circuito funcionar com um 'clock' de 2x3.58Mhz uma certa instabilidade foi notada durante os testes de 'loopback'. Uma investigação mais detalhada mostrou que a linha de 'clock' (linha SCK) do registrador 74165 deveria ser invertida em relação à linha de 'clock' do registrador 74595, vide desenho abaixo:


Com o 'clock' de 3,5Mhz a instabilidade nunca se manifestou, por isso este 'bug' havia passado despercebido até o momento.

A correção consiste em desconectar o pino 2 de IC2 (74165) da linha SCK e conectá-lo à linha /SCK, pino 1 do 7400 (na realidade 1, 9 10 e 11 estão interligados). Vide figura abaixo:



O Guia de Montagem e teste sofreu uma atualização, onde foram descobertos alguns errinhos, remanescentes da inversão das linhas D0 e D7 do registrador Paralelo. Estes foram corrigidos e o documento encontra-se atualizado.

Eu comecei a escrever a documentação dos drivers. A documentação das Rotinas I2C já está pronta, e estou trabalhando no momento na documentação das rotinas do cartão.

Primeiro FAQ

Respondendo a algumas questões, postadas aqui e no msx.org

P: Quanto custa?
R: Eu gastei menos de R$80,00 em componentes para montar a placa base, a placa de relógio de Tempo Real, e o adaptador de MMC/SD. Coloquei uma planilha com código Farnell dos componentes usados nestas placas na área de arquivos do projeto.

P: Tem pra vender?
R: Este é um projeto que foi desenvolvido pensando na construção caseira, mas como eu estou ciende de que nem todos entusiastas do MSX têm condições/tempo/recursos/conhecimentos técnicos para montar este circuito, (especialmente por causa das placas de circuito impresso), eu escolhi utilizar uma licença livre neste projeto, de forma que qualquer um, até mesmo uma empresa, pode realizar, e até mesmo vender o circuito montado, bastando respeitar a liberdade do projeto, ou seja, utilizando a mesma licença livre qualquer implementação, modificação, otimização para o hardware/software, e mantendo os créditos originais do projeto.

P:Tem como conseguir somente as placas?
R: As placas foram projetadas para serem feitas em casa, com métodos caseiros ([1] [2] [3] [4]). É uma boa chance de aprendizado. Eu mesmo nunca mais usei proto-board depois que aprendi esta técnica. Outra opção é mandar fazer em alguma empresa que trabalhe com baixas quantidades. Uma busca rápida no google já retorna várias possibilidades.

P: É um cartucho independente? Pode ser conectada direto conector do ao MSX ?
R: A placa base tem 2 versões: Uma com um conector de 50 pinos, feita pra ser conectada à traseira do Expert via cabo 'Flat' de 50 vias, mas que pode ser facilmente adaptada a qualquer MSX; e outra, que é conectada via 'Flat' de 34 a uma outra placa contendo uma ROM e um mecanismo de chaveamento semelhante a uma Megarom (vide projeto CARTUCHO MSXDOS2 do site MSXPro)

P: Aonde posso encontrar um arquivo ZIP com todo o projeto?
R: Ainda não agrupei tudo num arquivo só, mas meu 'repositório' encontra-se no link abaixo:
http://www.vespanet.com.br/~danjovic/msx/HB-7000.

P: Funciona no Turbo R em modo R800?
R: Por enquanto ainda não, pois apesar de executar internamente as instruções com um 'clock' elevado, externamente, no barramento, o 'clock' é de apenas 3,58Mhz, e não dá tempo, entre duas instruções consecutivas, do circuito serializar os dados. Mas o Igor esta trabalhando firmemente nisso agora. Mas com certeza vai ser possível. A estimativa é que a velocidade de transferência suba para 1 byte a cada 1.7us, o que dá algo em torno de 570KBytes/s. Então vale a pena investir um pouco mais de tempo e colocar 1 ou 2 CIs a mais na placa.


P: Tem que ser MSX com mapper ?
R: O projeto foi desenvolvido num Hotbit 1.1 "pelado". Ainda falta desenvolver um "patch" pro DOS/BDOS (veja post abaixo), mas espero que no final não precise de mais nada a não ser o cartucho com a ROM.

P: Ele lê o SD/MMC como sendo HD? Qual sistema de arquivos ele usa?
R: Quando estabeleci os requisitos do projeto, propositalmente não incluí entre eles a adaptação com o BDOS/MSXDOS por se tratar, do meu ponto de vista, de um projeto à parte, numa "camada" superior. Mas provi as funções de baixo nível necessárias: 'INIT', 'READ BLOCK' e 'WRITE BLOCK' (e algumas funções impressão de erro). Como nunca programei para BDOS/MSXDOS (meu MSX nem tem Disk Drive), achei melhor solicitar auxílio nesse sentido, antes de partir para uma iniciativa própria.

Portanto se algum desenvolvedor tiver interesse em adaptar o MSXDOS para este funcionar com este circuito, por favor entre em contato.



terça-feira, 10 de abril de 2007

Primeiro "Release"

É com imensa satisfação que anuncio o primeiro "release" da interface de cartões SD/MMC para MSX, cujas principais características são:
  • Concepção 100% livre (aberta) de "Hardware" de "software/firmware";
  • Aceita cartões SD e MMC;
  • Taxa de leitura/escrita 154/145 KBytes/segundo num MSX1 a 3,58MHz
  • Mapeado em I/O dentro da norma MSX, (Portas <3fh,>
  • Possui interface I2C;
  • Possui relógio de tempo Real I2C;
  • Utiliza apenas componentes comuns;
  • Montado em placa de circuito impresso de face simples, construída com métodos caseiros;
Este projeto, iniciado em agosto de 2006, foi desenvolvido sob várias premissas e requisitos. Para chegar à versão atual, o circuito passou por bom amadurecimento, e consumiu muitas horas de estudos, testes e simulações.

Investi
neste projeto boa parte do meu tempo livre (e algumas centenas de Reais) com um objetivo: Provar para os "Speccers" [1],[2],[3] e "Applemaníacos" que eu gosto tanto do meu MSX quanto eles gostam dos micros deles!

Por isso, seguindo uma filosofia semelhante, este também é um projeto livre, e estão disponíveis todas as informações necessárias para quem quiser construir o seu. É permitido até mesmo construir e vender para terceiros, contanto que se mantenham os créditos originais da autoria do projeto,
as mesmas licenças, e que se mantenham igualmente livres quaisquer modificações/implementações baseadas neste projeto, como incorporação de seus blocos lógicos dentro de CPLDs ou FPGAs.

Quero ainda agradecer ao amigo Igor, que desde o início vem acompanhando e ajudando com este projeto (e também com outros para o MSX) .


(vista geral do protótipo2)

Fechamento de atividades

Depois dos testes realizados no feriado, e da conclusão de algumas outras atividades pendentes, resolvi fechar as atividades da versão inicial do leitor de SD/MMC.

Contudo, as seguintes atividades ficaram postergadas em relação ao "release" inicial:

  • Construção de duas placas base;
  • Medição do consumo, pois este não se mostrou como ítem crítico;
  • Solucão do problema de funcionamento do Turbo-r em modo Turbo (R800), por não fazer parte dos requisitos iniciais (embora esta agora vá ser a próxima prioridade);

segunda-feira, 9 de abril de 2007

Testes no Turbo-R

Durante o final de semana eu e o Igor fizemos uns testes no Turbo-R dele. Em modo MSX2, o circuito funcionou corretamente, mas em modo TURBO, o cartão não respondia.

Investigamos até encontrar a causa: O Turbo-R, em modo TURBO, executa internamente as instruções do Z80 com um "clock" maior, mas mantém no barramento externo os mesmos 3,5MHz, e por isso, executa a próxima instrução OUTI/INI antes que o byte da instrução anterior tenha sido serializado.

Em números:
A 3,58MHz, um período de Clock dura 280ns. Para serializar 8 bits são necessários pelo menos 2,24us, e o intervalo de tempo entre duas instruções OUTI/INI é de 16+4(WS) ciclos de clock, ou seja, 5,6us.

No Turbo-R em modo Turbo, o intervalo (medido no osciloscípio) entre duas instruções OUTI/INI consecutivas era de apenas 1,7uS. (Estranho pois este valor corresponde a 11,764Mhz - considerando 20 instruções por ciclo de clock)

Ou seja, Eu precisaria de no mínimo 2,24us entre uma instrução e outra, mas so tinha 1,7us. Para confirmar este raciocínio, fizemos um "driver" em Basic pra inicializar o cartão, rodando modo turbo, e o cartão respondeu corretamente.

Conclusões:
Para o circuito funcionar no Turbo-R, Duas abordagens são possíveis:
  • Criar um "driver" específico para o Turbo R
  • Aumentar o "clock" do gerador de "clock" automático.

A criação de um "driver" específico além de não ser uma solução elegante, pode até trazer perdas na taxa de transferência. A outra opção, aumentar o "clock" pode ser conseguida através de um oscilador e um sincronizador, ou de um dobrador de "clock".

Embora o dobrador de clock não aumente a taxa de transferência num MSX1/2, no Turbo R ela sobe consideravelmente, pois transferir um byte a cada 1,7us equivale a uma taxa de pico teórica de 588Kbytes/segundo, ou aproximatamente 4,6Mbits/segundo (no MSX1/2 o pico teórico máximo é de 178Kbytes/s ou 1,4Mbits/s)


Fizemos algumas experiências com um dobrador, usando um 74LS86 (Quad XOR). O dobrador funcionou corretamente, mas por algum motivo que não deu ainda tempo de investigar, a contagem automática de pulsos se encerra no sétimo pulso, em vez do oitavo.



Dobrador de "clock"

quinta-feira, 5 de abril de 2007

Fechando a documentação.

Acabei de acertar biblioteca com a caixa Patola para MSX, e de gerar todos os diagramas e "layouts" (estes em 300 e 600 dpi) dos componentes do sistema formato em formato GIF. Falta gerar os arquivos EPS com todos os "layouts"e ajuntaro ao pacote.

Falta ainda converter os códigos fonte dos "drivers" e programas de teste para formato "WAV".

A atualização do guia de montagem e teste vai ser feita em conjunto com o Igor, que vai montar uma interface na versão de 50 pinos, enquanto eu vou montar uma outra na versão de 34.

O consumo em modo de gravação eu vou medir na casa do Igor durante o feriado de páscoa. Pretendemos testar no Expert, no Hotbit e também no Turbo R que ele tem.