segunda-feira, 28 de maio de 2007

Primeira versão operacional

Terminei hoje de debugar a primeira versão do 'bootloader' J2C. Havia um pequeno erro na rotina de leitura de blocos, mas este erro (basicamente de conceito) foi corrigido e o carregador está funcionando legal, carregando 32Kbytes em 14 segundos (2,28KBytes/segundo).

Para experimentar via Basic (sem ter que gravar uma ROM), basta carregar o arquivo .rom a partir do comando:
bload"SUBROM.BIN",&H3F72:DEFUSR=&HC000:a=usr(0)
Isso vai carregar um bloco 32Kbytes na memoria a partir do bootloader ou de um picodrive conectado na porta de joystick 1.

Detalhe importante é que esta versão procura pela e2prom no sub-endereço 0 (zero) da porta 1 de joystick, por isso, pra funcionar no expert (ou qualquer outro MSX que possua resistores de 'pull-up' nas linhas de 'joystick', é necessário forçar a nível baixo os pinos 1 e 2 do conector de joystick, para forçar o endereço da e2prom a zero, ou então conectar na porta 0 (zero) de um HUB para picodrives.

(ou então, carregar via o seguinte comando):
bload"SUBROM.BIN",&H3F72:DEFUSR=&HC000:
poke&HC004,&HA6:poke&HC011,&HA6:a=usr(0)

Interface Compact Flash Interna

Vasculhando os sites do ZX spectrum encontrei um site com um projeto muito interessante, chamado ZXCF. O mais importante neste projeto é a informação do que os cartões Compact Flash possuem um modo de acesso por memória (não IDE). Isso significa que com um mínimo de componentes é possível fazer uma interface para cartões Compact Flash.

No caso do MSX, é possível utilizar uma saída livre de um decodificador interno, obtendo-se assim uma interface sem utilizar componente algum, apenas o soquete do cartão.

Eis o diagrama:



A página de onde retirei estas informações tem ainda as rotinas básicas de acesso ao cartão. No caso de usar-se a saída Y7 do decodificador interno, isso equivale a utilizar o endereço 0B8h como base e os seguintes valores de portas devem ser utilizados no código do 'driver'.


DAT EQU 0B8H
PAR EQU 0B9H
SEC EQU 0BAH
STA EQU 0BBH
ZYL EQU 0BCH
ZYH EQU 0BDH
HEA EQU 0BEH
COM EQU 0BFH

quinta-feira, 17 de maio de 2007

Novos Requisitos

Dei uma revisada nos requisitos do 'bootloader' após várias considerações que estão surgindo durante o desenvolvimento do mesmo. Eis a lista atualizada.

Requisitos de Hardware:

O 'Hardware' do carregador de boot:

  • Deverá ser uma interface conectada entre o PC e o MSX;
  • Deverá permitir duas possibilidades de conexão ao PC, nas portas Serial e Paralela;
  • Deverá possuir uma opção com eeprom serial de 32Kbytes;
  • Deverá possuir uma opção com plug P2 estéreo com os sinais I2C;

Requisitos de Software:

O 'Software' do carregador de boot deverá:
  • Ser capaz procurar por um picodrive em até 4 sub-endereços I2C da porta A de joystick, totalizando assim 4 possibilidades de 'boot';
  • Executar a seguinte sequência de varredura durante o boot (PORTA.SUB_END): A.0; A;1; A.2; A.3;
  • Selecionar o primeiro dispositivo encontrado com a sequência de varredura acima;
  • 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;
  • Identificar o conteúdo da e2prom com base no primeiro 'byte' e carregar o conteúdo da e2prom de acordo com o tipo de conteúdo, definido na tabela abaixo:

Identificador

Tipo

Ação

FEh

Binário

Carrega um arquivo .bin. Os 7 primeiros bytes têm a mesma função que no Basic Disco (endereços Inicial, Final e

FFh

Basic

Carrega programa BASIC

41h

Imagem ROM

Carrega uma ROM de 32K entre 4000h a BFFFh

4Ah

Tic-Tac

(reservado para implementação futura)

segunda-feira, 14 de maio de 2007

Testes do final de semana

Eu e o Igor testamos neste final de semana o circuito da interface SD/MMC funcionando a 14MHz com um 'clock' gerado a partir de um cristal. O Objetivo é transferir os dados em até 1,7uS após a instrução INI/OUTI, pra poder funcionar no TurboR em modo R800.

O crítico é o circuito de adaptação de lógica TTL para 3V, que até 3,5MHz funciona bem, mas com uma frequência mais alta ele simplesmente não consegue acompanhar. Vamos agora testar circuitos de adaptação baseados em um transistor na configuração Base Comum, dotado de um 'pull up' ativo.

Nas medições que fizemos descobrimos também que que o inversor a transistor demora muito tempo para desligar (sair da saturação ao corte) e o substituímos por uma porta lógica, aproveitada do próprio circuito oscilador.

quarta-feira, 2 de maio de 2007

PonyProg

O programa Ponyprog também serve para programar a E2PROM do 'bootloader'. A configuração é a seguinte: