MSX Sunrise-like IDE devices programming

Since I wrote my first post about IDE devices (Sunrise-like) on MSX computers, I’ve been thinking to write a new post about this subject.

Well, the MSX community already knows about my last efforts to develop disk tools for MSX computers and how I’m spending some energy to build a framework that will help the development of new software compatible with IDE (Sunrise-Like) devices.

In the last year I finished my first project using MSX IDE standard. The result was the creation of a disk editor known as MSXDUMP.

In conjunction with MSXDUMP, an important part of the framework has been developed. It is responsible to perform the access between the high level software layer and the low level hardware layer.

Of course this piece of my framework was possible thanks to the work done by Sunrise team, long time ago when they wrote the IDE BIOS containing all low level calls available to the software programmer.

Also it is possible to write software for Sunrise-like IDE devices using direct access through I/O ports dedicated to this device, but in this case the work would be very hard and unnecessary because the IDE BIOS routines cover everything needed by the device.

For this reason, this article won’t cover direct access.

A world without standard

In the 80’s the software industry was very primitive and the software developers seemed to be living in a wild jungle with several kinds of hardware to program and control. With different hardware standards those days were very hard for developers, considering the lack of software standardization in this primitive industry.

Everything was focused on hardware for the most part of existing standards found in the 80’s. The MSX was the first attempt, in the 8 bit world, to join the hardware with the software to act like the operating systems do today.

Then the concept of BIOS functions, generally introduced through a cartridge, was born with MSX computers and with it came the almost infinite expansibility of the MSX standard.

The Sunrise IDE BIOS

When I got my first Tecnobytes ATA/IDE interface, that was a Sunrise compatible interface manufactured in Brazil by Tecnobytes Classic Computers, for the first time I could understand the workings and limitations of this device.

Tecnobytes ATA IDE Sunrise-like interface

The big part of the device’s limitation is related to the software’s inherent lack for this device. This was the reason why I started to study Sunrise compatible device internals.

Fortunately the current Brazilian MSX community has been the best since MSX was introduced here in the 80’s and thanks to the internet we can find all the information needed to know most details about this device.

I want to cite and thank Ricardo Oazem of Tecnobytes Classic Computers who provided me all technical details including documents and source code about I/O ports and BIOS functions of Sunrise IDE.

All technical information found in this article is compatible with any Sunrise-like IDE devices, like, Sunrise, Tecnobytes and Carchano IDE.

IDE Sunrise-like interface by Carchano.
IDE Sunrise-like interface by Carchano.

Inside the BIOS

After a long period studying the source code of the Sunrise BIOS and the documents found on the Sunrise website, I finally understood how it works in details.

Functions versioning

Internally the IDE has some addresses dedicated to versioning and a IDE signature, like described below.

Const
      ctDefaultWrkspcPage     = 3;     { Default workspace slot page }
      ctIDENotFound           = 255;   { IDE not found }
      ctBIOSMajorVerAddr      = $7FB6; { BIOS major version address }
      ctBIOSMinorVerAddr      = $7FB7; { BIOS minor version address }
      ctBIOSRevisionAddr      = $7FB8; { BIOS revision version address }
      ctIDESignatureAddr      = $7F80; { IDE signature address }

(* Workspace BIOS Call Routines *)
      ctBIOSGetDriveFieldAddr = $7FBF; { Get drive field address }

The first operation to do is to discover what slot the IDE is connected to. This can be done using the address &H7F80 (IDE signature address) for each slot/sub-slot of MSX, looking for the bytes ‘I’ followed by ‘D’ and ‘#’, until you find it.

After discovering the slot that the IDE is connected to, you can get the BIOS version used by the interface. This is easily found at following addresses.

Const
      ctBIOSMajorVerAddr      = $7FB6; { BIOS major version address }
      ctBIOSMinorVerAddr      = $7FB7; { BIOS minor version address }
      ctBIOSRevisionAddr      = $7FB8; { BIOS revision version address }

Retrieving the BIOS version isn’t a mandatory step but is a good idea to check it. If you’re not sure about the existence of a feature provided by the BIOS of your device so this checking will be useful.

The Drive Field structure.

MSX computers are limited devices with low resources capacity, for this reason the MSX-DOS can handle just 8 simultaneous logical drives. The Sunrise IDE allocates 6 of these 8 logical drives, so the maximum capacity of simultaneous connected IDE devices is 6.

This allocated area for these 6 drives is a structure known as Drive Field. Each drive field contains the following structure below.

(*
 * Drive field definition. The size of drive fields is variable
 * and can change according BIOS version. The current rule is written
 * like below:
 * 8 for BIOS 1.9x and 2.xx;
 * > 8 for BIOS 3.xx and higher;
 * See idesys.txt for details
 *)
Type TDriveField = Record
  nDeviceCodeByte     : Byte;
  n24PartitionStart,                        { 24Bit absolute sector number }
  n24PartitionLenght  : TInt24;             { 24Bit sector (count - 1) }
  nAdditionalPartInfo,                      { Addition partition info }
  (* The two bytes below is reserved to BIOS 3.xx or higher *)
  nPartitionStart,                          { Partition start bit 24 to 31 }
  nPartitionLength    : Byte;               { Partition (lenght - 1) 24 to 31 }
End;

As you can see there are two bytes at the end of the structure above and in the “official” documentation of IDE, it says “RESERVED TO BIOS 3.xx OR HIGHER”. I suppose that these two bytes was put there for future use in FAT16 and FAT32 native support in the Sunrise IDE devices.

The WorkSpace

The Sunrise specification defines  an area that contains all the 6 DriveFields structures managed by the interface, plus another structure known as the DeviceInfoBytes, followed by an unused free space of 18 bytes.

This structure formed by 6 DriveFields + DeviceInfoBytes + Free space (18 bytes) is known as the IDE WorkSpace.

The IDE WorkSpace is filled at the machine start up and loads the first 6 partitions available to the IDE connected interface.

Const
(*
 * IDE interface Workspace allocate at boot process.
 * More details check idesys.txt file at this library
 * directory.
 *)
Type TIDEWorkspace = Record
  ptrDriveField      : Array[0..ctDriveFieldSize] Of PDriveField;
  ptrDeviceInfoBytes : PDeviceInfoBytes;
  ptrFreeSpace       : PFreeSpace;
End;

NOTE: It is possible to exchange the partition content pointed to a different DriveField just using the IDEPAR command line utility.
In a hypothetical situation where your drive letter B: points to the second partition in the disk, you could point this drive B: to another formatted partition higher than 6 crossing the limits imposed by the Sunrise interface.
This could be done using the IDEPAR utility, but it use is not covered by this article.

The DeviceInfoBytes structure

The DeviceInfoBytes structure is an important and useful area of the IDE WorkSpace because it contains some information about the physical device that is connected in the interface, like the number of heads from device master and slave, maximum of cylinders by sector on both, master and slave connected disks.

The structure is defined as shown below:

(*
 * Device info bytes definition.
 * 6 bytes for BIOS 1.9x and 2.xx.
 *)
Type TDeviceInfoBytes = Record
  nNumOfHeadsMaster,             { For ATA Devices }
  nNumOfHeadsSlave,              { For ATA Devices }
  nNumSectorsCylMaster,          { For ATA Devices }
  nNumSectorsCylSlave,           { For ATA Devices }
  nDeviceTypeMaster,
  nDeviceTypeSlave,
  nUndefined           : Byte;   { Undefined yet - don`t use them }
End;

Type PDeviceInfoBytes = ^TDeviceInfoBytes;  { TDeviceInfoBytes pointer type }

The new BIOS functions

The Sunrise interface introduces at least 4 new BIOS function calls that can be used by applications compatible with Sunrise devices.

ATAPI BIOS calls

The two first functions are listed below:

(* Sunrise-like IDE BIOS calls *)

Const     ctBIOSSelectATAPIDevice = $7FB9; { Select master or slave device }
          ctBIOSSendATAPIPacket   = $7FBC; { Send ATAPI to selected device }

These two functions are related to control ATA devices, like a CDROM, using the ATAPI command packets. An example is an application that commands the CDROM device to open the tray.

Sector I/O BIOS calls.

It is known that IDE devices can handle a mass storage with higher capacity than the old disk drives. In fact, old disk drives just can manage sectors from 0 (zero) to 65535 (the maximum value accepted by a 16 bit unsigned number).

Fortunately today we have some storage devices supporting megabytes, gigabytes and recently terabytes.

The Sunrise IDE interface brought the possibility of connecting with these higher capacity devices, but unfortunately the MSX-DOS BDOS functions and old softwares cannot handle the full capacity of these new devices.

Fortunately Sunrise already developed alternative I/O sector functions capable of managing devices that can handle a big amount of data.

Two new I/O functions were introduced into the IDE BIOS to do the sector’s handling using 24 bit unsigned numbers (0 to 16.777.215). These functions are listed below:

(* Sunrise-like IDE BIOS calls *)

Const     ctBIOSAbsSectorRead  = $7F89;  { Absolute sector read function  }
          ctBIOSAbsSectorWrite = $7F8C;  { Absolute sector write function }

These two functions should be used by applications that handle sector management instead the MSX-DOS BDOS functions ABSREAD (&H2F) and ABSWRIT (&H30), because the new functions support unsigned 24 bit sector’s handling instead the MSX-DOS old functions that support only 16 bit setor’s handling.

The Big Number library

The MSX computers can perform 16 bit operations directly and to use the new I/O functions provided by the BIOS, the programmers should provide a way for MSX perform 24 bit operations.

Fortunately I created a library (BigNumber) that can handle numbers of any size, since 8 bit, 16 bit, 24 bit, 32 bit to infinite bits.

This library can be found at OldSkoolTech and is fully written and compatible with Turbo Pascal 3 and has been used in my own softwares like the MSXDUMP 0.2, compatibles with Sunrise devices.

Well, I believe that this article could be an useful article to technicians and developers that are interested in creating new softwares to use the full capacity of Sunrise devices, so enjoy it !!

PopolonY2k

References

Análise da interface ATA IDE – Tecnobytes
http://www.popolony2k.com.br/?p=409

MSXDUMP v0.2 (final) liberado no SourceForge.net
http://www.popolony2k.com.br/?p=2125

Memory-mapped I/O ports
http://en.wikipedia.org/wiki/I/O_port

Tecnobytes Classic Computers
http://www.tecnobytes.com.br/

Sunrise for MSX home page
http://www.msx.ch/sunformsx/

MSX-DOS Wikipedia
http://en.wikipedia.org/wiki/MSX-DOS

Carchano MSX IDE interface
http://www.carchano.com.br/loja/

ATAPI packets (Wikipedia)
http://en.wikipedia.org/wiki/ATA_Packet_Interface

CP/M-BDOS (Wikipedia)
http://en.wikipedia.org/wiki/BDOS#BDOS

PopolonY2k’s BigNumber library at SourceForge.net
http://sourceforge.net/p/oldskooltech/code/HEAD/tree/msx/trunk/msxdos/pascal/bigint.pas

OldSkoolTech project (SourceForge.net)
http://sourceforge.net/projects/oldskooltech/

Turbo Pascal (Wikipedia)
http://en.wikipedia.org/wiki/Turbo_Pascal

MSXDUMP v0.2 (final) liberado no SourceForge.net

Finalmente após as previsões extremamente otimistas feitas no final do ano passado quando lancei a primeira versão do primeiro utilitário da suite MSX Disk Doctor (MSXDD), denominado MSXDUMP e que finalizaria o mesmo em dezembro de 2012, posso dizer que esse software está completamente pronto e funcional, incluindo o suporte a dispositivos de armazenamento em massa de grande capacidade (IDE) que eu havia prometido.

MSXDUMP 0.0 Main screen
MSXDUMP 0.2 Main screen

Com isso, o MSXDUMP v0.2 pode editar setores em dispositivos conectados à interfaces IDE Sunrise-like, de fabricantes como ACVS, Tecnobytes e lógicamente Sunrise.

Abaixo vou fazer uma compilação de algumas informações que já foram descritas nos posts anteriores sobre o MSXDUMP e que fazem mais sentido que estejam centralizadas nesse post final, uma vez que se trata da versão final estável do software e também porque existem modificações no comportamento de alguns parâmetros que foram redefinidos e não serão mais modificados a partir dessa versão.

Operação através do teclado

Com uma interface tradicional característica da maioria dos editores de setores, o MSXDUMP tem alguns poucos shortcuts que permitem ao usuário um completo controle sobre a edição de arquivos e setores.

Os shortcuts estão descritos logo abaixo:

  • SELECT – Alterna o modo de operação das setas direcionais. Quando em modo DISK, as setas direcionais podem avançar ou retroceder o ponteiro de setor/arquivo que está sendo editado. No modoEDIT, as setas direcionais podem se movimentar pelos dados exibidos na tela, permitindo assim a edição do buffer de memória que está sendo visualizado;
  • CTRL+S – Quando em modo DISK, essa combinação de teclas salva o conteúdo do buffer carregado;
  • CTRL+A – Quando em modo DISK, avança o ponteiro de setor/arquivo, carregando e exibindo os dados do setor lido. As direcionais UP e RIGHT, quando em modo DISK, tem a mesma função de CTRL+A;
  • CTRL+R – Quando em modo DISK, retrocede o ponteiro de setor/arquivo, carregando e exibindo os dados do setor lido. As direcionais DOWN e LEFT, quando em modo DISK, tem a mesma função de CTRL+R;
  • Direcionais UP, DOWN, LEFT, RIGHT – Quando em modo EDIT, podem ser utilizadas livremente para posicionar o cursor no dado a ser modificado;

ATENÇÃO:
O MSXDUMP não salva o conteúdo editado pelo usuário “automagicamente“, por isso, sempre que se editar dado, deve-se sair do modo de edição (através de SELECT) e salvar o buffer atual, antes de navegar para o próximo setor, senão a alteração será perdida ao se mudar de setor.

Parâmetros de startup por linha de comando.

O MSXDUMP pode ser iniciado com as seguintes opções de linha de comando.

-h Mostra a tela de help do MSXDUMP. Chamar o software com uma opção inválida ou sem parâmetros, também ativa a tela de help;

-f <filename> Essa opção especifica o nome do arquivo que se deseja editar, onde <filename> pode conter uma especificação completa da origem do arquivo, no formato drive:\path\filename, aceito pelo MSXDOS 2;

Ex (MSXDOS2): msxdump -f a:\MSXDD\MSXDUMP.PAS
Ex (MSXDOS): msxdump -f MSXDUMP.PAS

-d <drive> Essa opção especifica a unidade de disco dos setores a serem editados. Pode ser qualquer unidade de disco (A:, B:, C:, …., H:) aceita pelo MSX, incluindo dispositivos FLOPPY, IDE e RAMDISK;

Ex: msxdump -d a:

-s <sector_number> Essa opção especifica onde o ponteiro de setores será posicionado inicialmente para edição através do MSXDUMP. Um detalhe importante para o parâmetro -s <sector_number>, a partir dessa versão, é que número do setor especificado no parâmetro pode ser qualquer valor de zero até o limte máximo de um inteiro sem sinal (unsigned) de 24bits, nesse caso, 16777215.
Outro detalhe importante sobre o valor de <sector_number> é que o mesmo descreve o numero do setor de maneira relativa à partição apontada pela unidade especificada no parâmetro -d <drive>. Para discos conectados a uma IDE, onde geralmente existe mais de uma unidade mapeada a um unico dispositivo IDE, cada unidade inicia em um setor físico diferente de 1.

Considere um disco IDE com duas partições FAT12. A primeira partição (drive A:) inicia em 1 e a segunda partição (drive B:), digamos que por exemplo inicie em 65000.

Com base nesse cenário, caso o MSXDUMP seja chamado conforme exemplo abaixo:

Ex: msxdump -d b: -s 1

MSXDUMP irá posicionar o ponteiro do disco no setor físico relativo à posição inicial da unidade B:, ou seja, 65001.

-a Essa opção especifica que o valor apontado por <sector_number> será sempre absoluto, ou seja, se o parâmetro -a for chamado no startup, o valor de <sector_number> será interpretado como a posição absoluta no disco, independente da posição física do primeiro setor da unidade de disco especificada em -d <drive>;

Considerando o mesmo exemplo anterior, onde temos um disco IDE com duas partições FAT12. A primeira partição (drive A:) inicia em 1 e a segunda partição (drive B:), digamos que, por exemplo, inicie em 65000.

 Com base nesse cenário, caso o MSXDUMP seja chamado conforme descrito abaixo:

Ex: msxdump -d B: -s 1 -a

Na verdade o setor físico do disco será posicionado no primeiro setor do dispositivo IDE, ou seja, no setor 1 do drive A:, uma vez que estamos trabalhando no modo de apontamento absoluto.

OBS: O modo padrão de apontamento de setores do MSXDUMP é sempre relativo à posição fisica inicial do setor da unidade de disco selecionada, caso queira mudar para o modo absoluto, especificar a opção -a no startup da aplicação.

Código fonte

Juntamente com o MSXDUMP foi desenvolvido um Framework com funções que possibilitam acesso em alto nível a funcionalidades internas do MSX, como chamadas a funções da BIOS, funções do sistema operacional MSXDOS, MSXDOS2, chamadas à funções de baixo nível da IDE Sunrise-like, funções de matemáticas para manipulação de BigInt, o que possibilitou a manipulação de setores em 24Bits presente nas IDE Sunrise-like, dentre outras possibilidades que já estão disponíveis e outras que estão planejadas para futuros desenvolvimentos.

Os fontes foram desenvolvidos em Turbo Pascal 3 e Assembly Z80, estão completamente comentados e disponíveis no repositorio do projeto, o Old Skool Tech, sob licença GPLv3.

Apesar de ter otimizado o código visando um melhor aproveitamento de memória e velocidade, infelizmente não foi possível gerar um binário único, uma vez que o software foi pensado para funcionar em qualquer MSX com no mínimo 64Kb e MSXDOS.

No futuro pretendo otimizar mais o Framework e adicionar a possibilidade de trabalhar com módulos carregáveis, como nos sistemas operacionais modernos como Windows (.DLL) e Linux (.SO) e também adicionar suporte a detecção e uso de todas as memórias existentes no MSX, como Memory Mapper e Megaram.

Mas enquanto isso não acontece, precisei deixar o MSXDUMP em 3 binários separados, conforme descrevo abaixo:

MSXDUMP – Módulo base para edição de arquivos (MSXDOS e MSXDOS2);

MSXDUMPD – Módulo base para edição de setores (FLOPPY, IDE, …);

MSXDUMPHHelp do sistema;

Todos os módulos binários estão interconectados, ou seja, se por exemplo o módulo MSXDUMP for chamado com opções suportadas apenas pelo  MSXDUMPD, o primeiro chama o segundo repassando para esse o controle da operação.

Instalação

A instalação do MSXDUMP é simples, basta copiar todos os binários para uma pasta (no caso do MSXDOS2) e adicionar essa caminho na variável de ambiente PATH do MSXDOS2, conforme exemplo abaixo:

SET PATH=<suas definições de PATH aqui> B:\MSXDD 

Outro detalhe muito importante é definir uma variável de ambiente no AUTOEXEC.BAT do MSXDOS2, chamada MSXDD e setar essa variável com o caminho de onde está instalado o MSXDUMP e também onde estarão os futuros utilitários do MSX Disk doctor, conforme exemplo abaixo:

SET MSXDD=B:\MSXDD

Com isso os binários estarão interconectados e um poderá chamar o outro, conforme expliquei anteriormente.

Considerações finais e download.

Bom, realmente no ano passado e inicio desse ano dediquei bastante tempo nesse software e toda a base do Framework desenvolvido, entretanto agora é hora de colher os frutos desse trabalho pois daqui para frente os novos projetos serão cada vez mais fáceis de desenvolver, uma vez que a base já está criada e estará com novas features a cada novo lançamento.

Se tudo der certo, em breve teremos um dd, ScanDisk e um Defrag, para compor e ampliar a suite MSX Disk Doctor.

Segue abaixo os links para download do código fonte e binários do MSXDUMP v0.2.

MSXDUMP v0.2 – Código Fonte (Old Skool Tech – SourceForge.net)

http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-src.zip/download  (Zip)
http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-src.lzh/download  (Lzh)

MSXDUMP v0.2 – Binários (Old Skool Tech – SourceForge.net)

http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-bin.zip/download  (Zip)
http://sourceforge.net/projects/oldskooltech/files/MSX/MSXDD/v0.2/msxdd-bin.lzh/download  (Lzh)

[]’s
PopolonY2k

Digilent BASYS 2 – FPGA Kit unboxing

O ultimo ano foi bastante dinâmico não só para a comunidade MSX mas também para a comunidade de desenvolvimento de software e hardware em geral.

Vale ressaltar na comunidade MSX sobre o desenvolvimento, no Brasil, de tecnologias que já estão disponíveis há um certo tem em outros países como por exemplo a placa de rede para MSX, baseada na Obsonet, construída por Ricardo Oazem da Tecnobytes. Outra novidade original do Brasil é a placa IDE, também da Tecnobytes, com 512 Kbytes de Memory Mapper e como senão bastasse essa quantidade a mais de memória mapeada, essa Mapper é reconhecida em qualquer MSX, inclusive os de primeira geração.

Isso tudo é para exemplificar que o mercado MSX está repleto de coisas novas e no meio dessas coisas novas de MSX muitas outras existem em paralelo, principalmente no desenvolvimento de hardware e software embarcados, que é um mercado emergente no Brasil, principalmente através de tecnologias de hardware open source para hobbystas, como a Arduino e também através de tecnologias mais profissionais para desenvolvimento de hardware reprogramáveis, como a FPGA.

Em um futuro próximo escreverei um post sobre a tecnologia Arduino, no momento o meu interesse é sobre a FPGA, tecnologia essa que tive contato pela primeira vez em 2004, quando naquela época eu arquitetava e desenvolvia o software que controlava toda a inteligência de um veículo aéreo autônomo, ou UAV, para um grande cliente.

Foi um contato rápido mas que me deixou bem interessado nessa tecnologia, pois na mesma época o One Chip MSX (OCM) começava a despontar no cenário da comunidade MSX mundial. assim como em diversos outros projetos que começavam a ser desenvolvidos em torno dessa tecnologia. Foi o suficiente para saber que existem 2 grandes players nesse mercado de FPGA, sendo a líder a Xilinx, seguida de perto pela Altera.

Acompanhando o autor do projeto MSX ARM, Rogério Machado, até um revendedor de placas baseadas em FPGA, na ultima semana, fiquei bastante empolgado em começar a desenvolver coisas baseadas em FPGA e terminei adquirindo um kit de aprendizado, o BASYS 2 da Digilent Inc., nada parecido com a DE0-Nano, da terasIC, baseada em Altera e utilizada para auxiliar o desenvolvimento do protótipo do MSX ARM e que  possui uma grande quantidade de  I/O, 1 conversor A/D de 8 canais e 1 acelerõmetro, 32MB de memória entre outras características interessantes, mas para mim a BASYS 2 já é um excelente começo.

Abaixo segue as imagens do unboxing…..

Digilent BASYS 2

……e o detalhe da plaquinha.

BASYS 2 - FPGA Kit (Xilinx based)

Características técnicas do Kit.

  • Xilinx Spartan-3 E FPGA, 100K ou 250K;
  • Possui 18 bits multiplicadores, 72Kbits de RAM, e 500MHz;
  • 2 Portas USB de velocidade total para configuração e transferência de dados;
  • Adept 2.0 software disponível como um download gratuito;
  • XCF02 Plataforma Flash ROM que armazena as configurações FPGA indefinidamente;
  • Freqüência de oscilação configurável pelo usuário (25, 50 e 100 MHz);
  • Reguladores de voltagem (1.2V, 2.5V e 3.3V), que permite o uso de 3.5V-5.5V;
  • 8 LEDs, 4 displays de sete segmentos, quatro botões, 8 comutadores, porta PS / 2 e uma porta de 8-bit VGA;
  • Quatro conectores de 6 pinos para o usuário;

.

BASYS 2 (XILINX based)

Ou seja, é uma placa básica mas que de imediato dá para perceber que tem um potencial para desenvolver até coisas não triviais, como por exemplo implementar uma placa de vídeo VGA e testar o resultado através do conector VGA presente no kit. Sem contar os 4 displays que podem, entre outras coisas, ser utilizados para interação com o usuário ou até mesmo para mostrar informações de debug.

As 8 chaves comutadoras e os 4 botões são mais do que suficientes para possibilitar a entrada de dados por parte do usuário, sem contar a porta PS/2 que possibilita a implementação de entrada de dados via teclado.

O FPGA utilizado na placa é o Xilinx Spartan-3 E, com capacidade suficiente para as minhas necessidades de iniciante :), onde já até penso em criar algum projeto, quem sabe um Atari 2600.

É claro que não poderia faltar um material impresso ou até mesmo em formato eletrônico para o aprendizado de alguma linguagem para desenho e especificação de hardware e a mais conhecida é a HDL,  que, é claro, tem suas variações e forks.

Abaixo a imagem dos 2 livros que aquiri juntamente com o kit…….

Introduction to Digital Design - Using Digilent FPGA Boards

….depois de comprar esses 2 livros, descobri que a própria Digilent disponibiliza um preview desses, e outros, livros gratuitamente em PDF, então você pode consultar o conteúdo do livro antes de adquiri-lo, inclusive você pode fazer a compra diretamente no site da própria Digilent.

  • Digital Design – Using Digilent FPGA Boards (VHDL/ActiveHDL Edition)  – 75+VHDL Examples – Richard E. Haskell,  Darin M. Hanna – LBE Books;
  • Digital Design – Using Digilent FPGA Boards (VHDL/ActiveHDL Edition)  – 30 VHDL/Active-HDL Examples – Richard E. Haskell,  Darin M. Hanna – LBE Books;

Segue abaixo os links para download e compra:

http://www.digilent.cc/Products/Catalog.cfm?NavPath=2,729&Cat=14

Pesquisando na internet é possível encontrar diversos projetos que utilizam a FPGA Spartan 3 da Xilinx e que com alguma ou nenhuma alteração poderão ser utilizados no BASYS 2 da Digilent, entretanto o objetivo desse post é apenas fazer uma apresentação do kit para que no decorrer do ano que se inicia  eu possa mostrar seu funcionamento e exemplos de utilização.

[]’s
PopolonY2k

Referência na internet

Obsonet (MSX.Org)
http://www.msx.org/articles/obsonet

Obsonet
http://obsonet.blogspot.com/

Tecnobytes
http://www.tecnobytes.msxall.com/

Arduino (Wikipedia)
http://en.wikipedia.org/wiki/Arduino

FPGA (Wikipedia)
http://en.wikipedia.org/wiki/Fpga

UAV (Wikipedia)
http://en.wikipedia.org/wiki/Unmanned_aerial_vehicle

One Chip MSX (Wikipedia)
http://en.wikipedia.org/wiki/1chipMSX

XILINX (Wikipedia)
http://en.wikipedia.org/wiki/Xilinx

Altera (Wikipedia)
http://en.wikipedia.org/wiki/Altera

Digilent Inc.
http://www.digilentinc.com/

BASYS 2 (Digilent)
http://www.digilentinc.com/Products/Detail.cfm?Prod=BASYS2

terasIC
http://www.terasic.com.tw/en/

DE0-Nano (terasIC)
http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&No=593

VGA (Wikipedia)
http://en.wikipedia.org/wiki/Video_Graphics_Array

Atari 2600 (Wikipedia)
http://en.wikipedia.org/wiki/Atari_2600

Hardware description language – HDL (Wikipedia)
http://en.wikipedia.org/wiki/Hardware_description_language

Análise da Interface ATA IDE – Tecnobytes

O mercado nacional de hardware para MSX está bastante movimentado nos últimos 3 anos, sob minha percepção, pois são construídos pelos produtores independentes, muitas novidades bem interessantes para os saudosistas, hobbistas e entusiastas, como esse que vos escreve.

A coisa está tão boa para o MSX aqui no Brasil, que no momento em que escrevo esse review, estou me deliciando com os mais de 20Mb de arquivos MOD, que baixei a noite passada e que o meu Panasonic A1WX MSX 2+ ficou um bom tempo descompactando, onde os reproduzo agora através da minha OPL4 Shockwave, uma placa Moonsound-like e que finalmente podemos adquirir aqui no Brasil graças a produção de Ricardo Oazem da Tecnobytes.

E por falar em Tecnobytes……

….para quem não se lembra, ou sabe, é uma produtora de hardware para MSX que vem desenvolvendo e comercializando coisas desde a década de 80/90 e que produziu naquela época uma placa compatível com as Panasonic FM-Pac, a famosa FM-Stereo.

E desde aquela época já percebemos o diferencial nas produções da Tecnobytes, que desenvolve produtos completamente compatíveis com os lançados no mercado internacional porém sempre com uma inovação extra, no caso da FM-Stereo, a característica Stereo dessa placa e sua qualidade sonora superior a FM-PAC original.

Bom, se inovação é a praia dos produtos da Tecnobytes, é bom sempre esperar algo diferenciado vindo deles e no caso da interface IDE o maior benefício, para mim, foi  a possibilidade de colocar o MSX no mesmo patamar de armazenamento existente no mundo dos PC’s,  considerando as devidas proporções, o que no final me tira o peso psicológico de que não estou vivendo e sim sobrevivendo no mundo MSX.

E por falar em sobrevivência….

…nós sobrevivemos……

….durante anos e anos com nossos disquetes e que mais tarde se transformaram em imagens .dsk para emuladores, como os fMSX, OpenMSX e BlueMSX e graças aos BBS e a internet, esses programas também “sobreviveram” até os dias atuais.

Ganhamos tempo suficiente para conseguir desenvolver tecnologia e adequar os nossos MSX aos padrões mais atuais de armazenamento de dados, como as interfaces IDE.

Tecnobytes ATA IDE Interface

Interface IDE não é algo novo no mundo MSX, pois já existe desde o final dos anos 90, através do produtor internacional de hardware para MSX, a Sunrise. No Brasil uma interface similar já foi produzida e comercializada pela ACVS, que é um outro player que está, digamos, um pouco inativo no cenário MSX nos últimos anos e por último temos a Tecnobytes, que vem produzindo hardware de forma mais constante, bem como produzindo algumas peças de hardware em edição limitada, como o caso das OPL4 Shockwave e V9990 PowerGraph.

Sobre a IDE da Tecnobytes anotei algumas características, após alguns meses de uso, descritas abaixo:

  1. Possibilidade de utilização de dispositivos baseados em memória flash, ou Compact Flash.
  2. Pelo fato de ser uma interface Sunrise-like, tem compatibilidade total com os softwares produzidos para a interface da Sunrise, que são muitos, bem como podemos aproveitar qualquer especificação de funções da BIOS dessas interfaces, disponível na internet, para escrever softwares utilitários para essa interface.
  3. Possibilidade de atualização de BIOS, como a nova 2.50 (beta) que está saindo do forno do Laboratório da Tecnobytes, segundo informações do próprio Ricardo Oazem através da lista MSXBR-L.
    .
MSX 2+ Panasonic A1WX + Interface ATA IDE Tecnobytes.

Limites das IDE’s no MSX.

WARNING
Apesar de possível o uso de dispositivos com qualquer capacidade nas interfaces IDE para MSX (Sunrise-like), existem limitações quanto ao número de partições que essas interfaces podem endereçar no MSX, que chega ao valor máximo de 31 partições.

O sistema operacional do MSX (MSXDOS) também tem limitação de trabalhar com FAT12 que por sua vez pode endereçar até 32Mb, ou seja, poderíamos endereçar o máximo de 31 partições com 32Mb, totalizando aproximadamente 1Gb, ou seja, dispositivos com 2Gb, 4Gb, ou 6Gb não seriam aproveitados em sua totalidade.

Porém existe a possibilidade de utilização do MSXDOS2, que com o devido patch aplicado, poderá suportar partições com FAT16, aumentando assim a capacidade de endereçamento do sistema operacional, que passará suportar partições de até 2Gb. Infelizmente, esse patch é um software residente que deve ser carregado após o boot do sistema operacional, ou seja, você deverá ter pelo menos uma partição com FAT12 configurada em seu disco, para a carga inicial do sistema operacional, podendo deixar as demais com FAT16, por exemplo, possibilitando assim o uso completo de dispositivos acima de 2Gb até aproximadamente 60Gb.

Acredito que a versão 2.44 do MSXDOS2, liberada pelo pessoal da TNI conforme esse anuncio, suporte FAT16 nativamente sem a necessidade de softwares residentes, porém ainda não testei.

Apesar de existir a possibilidade de utilização da IDE com o MSXDOS, na prática sua utilização fica limitada pela falta de capacidade de manipulação de sub-diretórios por esse sistema operacional e também pelo fato do número máximo de arquivos possíveis por diretório no MSXDOS ser 512, e como o MSXDOS suporta 1 diretório apenas, logo temos um total de 512 arquivos possíveis em um dispositivo conectado à controladora IDE.

Mas quem em sã consciência irá utilizar um dispositivo de 1Gb, 2Gb, 4Gb ou 8Gb para armazenar 512 arquivos apenas ???

TIP
Existe a possibilidade de se burlar essa limitação do número de diretórios no MSXDOS e existe alguns comandos externos, cd.com, rd.com, md.com, que foram desenvolvidos e explicados em um artigo da Revista CPU na metade da década de 90, e que adicionam essa capacidade de manipulação de sub-diretórios no MSXDOS.

Entretanto, como esses comandos não são comandos built-in do sistema operacional, sua utilização requer malabarismos que praticamente impossibilitam o seu uso nesse sistema operacional, por isso ao utilizar uma IDE, prefira o MSXDOS2, que já possui todos os requisitos para manipulação de dispositivos de grande capacidade que uma interface IDE proporciona ao MSX.

Testes de compatibilidade

Realizei testes de compatibilidade com diversos dispositivos IDE, utilizando a interface ATA IDE Tecnobytes e o resultado dos testes estão descritos abaixo.

HARDWARE HOTFIX !!! IMPORTANTE !!!!
No dia 02/02/2011 a Tecnobytes, através de Ricardo Oazem, liberou na MSXBR-L um HotFix que corrige um problema de detecção de alguns dispositivos IDE, principalmente HD‘s.
Para as interfaces ATA IDE Tecnobytes construídas antes dessa data, o HotFix deve ser aplicado caso o usuário dessas interfaces estejam enfrentando problemas na detecção de dispositivos IDE.
No anúncio, o fabricante informou que caso o usuário não se sinta seguro de fazer o HotFix, basta enviar a interface a ele que a alteração será realizada.
O custo do capacitor cerâmico utilizado no HotFix, foi de R$0,10 (10 centavos) e o tempo que levei para aplicar esse Patch, foi de 1 minuto, ou seja, é muito simples.

Bug fix para o caso em que ocorre a mensagem WARNING! DATA CORRUPTION DETECTED! ao dar boot pela IDE. Esta correção consiste de um simples capacitor cerâmico de 1nf (102) ligado entre o pino 25 da IDE e o GND (Terra). Imagem cedida por Ricardo Oazem (Tecnobytes).

WARNING2
Apesar do MSX nem sonhar com transferências disponíveis a dispositivos IDE UDMA (Ultra DMA), que chegam a no mínimo 33mb/s, todos os testes realizados com dispositivos que utilizam cabo IDE (Hard Disks, CDROM‘s, etc, …), antes do HotFix da Interface, só funcionaram quando utilizado um cabo UDMA (80 vias), sendo que quando testados com um cabo de 40 vias, esses dispositivos sequer foram reconhecidos.
Após o HotFix da Interface, os dispositivos passaram a funcionar com cabos IDE de 40 vias.

Teste de compatibilidade com Hard Disks.

Dispositivos HD’s são um dos principais motivos da existência do padrão IDE e também por muito tempo foi o sonho de consumo dos usuários de plataformas antigas da década de 80 e apesar de existir hoje dispositivos mais modernos e compactos, há ainda uma grande procura, no mercado, por  Hard Disks IDE. Por esse motivo, realizei alguns testes com alguns HD‘s disponíveis na minha bancada de testes.

São eles:

  1. Quantum Fireball 500Mb.
  2. Quantum Fireball lct 20.4Gb.
  3. Western Digital 160Gb SATA com adaptadores SATA->IDE.

.

Antes do HotFix da interface, apenas o Fireball 500Mb havia sido reconhecido, formatado e utilizado na interface IDE Tecnobytes e embora o Western Digital 160Gb SATA tenha sido apenas um teste despretensioso onde eu já esperava o seu não funcionamento, pois  o mesmo é instável até mesmo quando utilizado com adaptadores SATA->IDE no PC, a surpresa ficou quanto ao não reconhecimento e funcionamento do Quantum Fireball lct 20.4Gb, entretanto esse mesmo dispositivo funcionou após o HotFix disponibilizado pela Tecnobytes, confome descrito anteriormente.

Western Digital SATA + Adaptadores SATA-IDE (Hummmm....não no MSX).

WARNING3
Em teoria as IDE Sunrise-Like suportam qualquer Hard Disk, até mesmo os de 160Gb, porém na prática, conforme explicado anteriormente, essas interfaces só conseguem endereçar aproximadamente 60Gb desse dispositivo, devido as limitações do número de partições dessas interfaces, aliado ao limite de tamanho das partições FAT(12/16) do sistema operacional MSXDOS/MSXDOS2.

Teste de compatibilidade com CDROM’s.

Apesar de existir dispositivos de CDROM compatíveis com o padrão IDE e todos esses, em teoria, ter compatibilidade garantida com a IDE da Tecnobytes, resolvi fazer alguns testes com 2 modelos que estavam disponíveis aqui em minha bancada de testes.

São eles:

  1. LG RW 16x~40x.
  2. CDROM Genérico 56X (Xing-Ling).

.

WARNING4
Antes do HotFix da interface, esses dois dispositivos foram reconhecidos apenas quando utilizados com um cabo IDE 80 vias (UDMA) e após o HotFix, os mesmos funcionaram com cabos IDE 40 vias.

Fiz alguns testes, utilizando o pacote do MSXDOS2 e utilitários que está disponível no tutorial de instalação e configuração para IDE‘s Sunrise-Like no site da MSX Pró e após executar o comando IDECDEX.COM, o CDROM ficou mapeado como drive C: em meu MSX e a partir daí consegui navegar em diversos CD‘s de dados, validando assim o funcionamento desses dispositivos de CDROM na IDE Tecnobytes.

Teste de compatibilidade com DiskOnChip.

Um dispositivo bastante incomum, mas que testei também na interface IDE da Tecnobytes, foi o DiskOnChip IDE.

Para quem não conhece, o DiskOnChip é uma tecnologia de Flash Disks desenvolvida pela empresa Israelense M-Systems, conhecida por ser a pioneira no desenvolvimento da tecnologia SSD e que no inicio dos anos 2000 foi adquirida pela SanDisk, empresa líder em tecnologia de armazenamento em memórias Flash.

Existem diversos tipos de DiskOnChip, que vão desde chips que podem ser integrados a dispositivos embarcados, até DiskOnChip já integrados a uma interface IDE, podendo ser conectados a PC‘s comuns, mas que geralmente são utilizados em dispositivos embarcados com arquitetura de PC comum, como por exemplo placas PC/104 e SBC (Single Board Computer).

Fiz um teste utilizando o meu DiskOnChip de 256Mb com a interface IDE Tecnobytes e a mesma não reconheceu esse dispositivo. Não fiz nenhuma pesquisa técnica sobre as capacidades da interface IDE presente no DiskOnChip M-Systems que possuo, em busca de algum requisito mínimo desse dispositivo e também  não consultei os limites da Interface IDE da Tecnobytes em busca alguma incompatibilidade entre a mesma e dispositivos desse tipo.

Caso a IDE Tecnobytes conseguisse reconhecer esse dispositivo, existiria um outro impecilho para seu uso no MSX, uma vez que DiskOnChip utilizam um FileSystem específico denominado TrueFFS, cuja implementação da camada gerenciadora de FileSystem do sistema operacional hospedeiro deve estar disponível para que se tenha acesso a dispositivos DiskOnChip, o que já acontece nos Sistemas Operacionais, Linux, Windows e todos os BSD‘s existentes.

Diversos DiskOnChip's

Teste de compatibilidade com Compact Flash.

Eu me aprofundei nos testes da IDE com dispositivos Compact Flash e cheguei a conclusão que , além de mais confiáveis e rápidos, os CF’s no MSX terão menos problemas de reconhecimento pela IDE no MSX do que qualquer outro dispositivo.

Quando iniciei minha bateria de testes com dispositivos Compact Flash na IDE Tecnobytes em meus MSX, fiquei receoso de que algumas marcas pudessem não funcionar devido alguma limitação tanto por parte da IDE quanto por parte do  Compact Flash, porém após fazer um estudo para escrever a segunda parte do Dossiê Storage Devices – Compact Flash, percebi que os Compact Flash, principalmente os mais modernos, são dispositivos extremamente inteligentes e que suportam diversos modos de operação, tanto como dispositivos USB ou IDE, suportando modos de transferência de dados mais rápidos UDMA ou mais lentos PIO, …… e independente de um Compact Flash ter suporte a UDMA e o MSX nem sonhar com uma taxa de transferência próxima  de um dispositivo UDMA (mínimo de 33Mb/s), os Compact Flash, devem suportar modos que possibilitem o seu acesso por dispositivos mais antigos, segundo as especificações atuais da Compact Flash Association, ou seja, por enquanto teoricamente, todo e qualquer Compact Flash que você adquirir, deverá funcionar em sua interface IDE.

Detalhes internos da Interface ATA IDE Tecnobytes (Imagem cedida por Ricardo Oazem)

Segue a lista de dispositivos Compact Flash que utilizei e testei com minha interface ATA IDE Tecnobytes:

  1. Transcend 4Gb UDMA;
  2. Dane-Elec 8Gb;
  3. Dane-Elec 2Gb;
  4. Memory Technology Company 256Mb;

.

De todos, o melhor que achei foi o Transcend 4Gb UDMA, pois me pareceu mais veloz do que os demais. Não fiz nenhum benchmark entre os Compact Flash, tarefa que deixarei para a segunda parte desse review, então a “medida” foi apenas baseada na percepção “visual“.

O Dane-Elec de 8Gb é o que está rodando oficialmente em meu micro, devido a seu tamanho de 8Gb.

Passeando pela Santa Efigênia em São Paulo, encontrei um SanDisk de 32Gb UDMA que deve ser uma obra prima, pois são os inventores do Compact Flash. Devo admitir que “formigou” a mão para comprar….

Segue abaixo outros dispositivos de Compact Flash que obtive feedback por parte de usuários de IDE (Tecnobytes, ACVS, Sunrise) de MSX e que me reportaram funcionar bem.

  1. SanDisk Exteme III 2Gb;
  2. Kingston 4Gb;
  3. Kingston 1Gb;

.

Compact Flash testados 100% compatíveis.

Para mim essa questão da compatibilidade está desmistificada e acredito que todas as marcas atuais funcionem bem com a Interface ATA IDE da Tecnobytes e talvez com as demais baseadas em Sunrise, porém fique atento ao adaptador de Compact Flash.

A maioria dos adaptadores de Compact Flash atuais tem suporte a DMA,  que a grosso modo é a presença de alguns pinos que interligam a IDE e o PCMCIA do Compact Flash possibilitando a transferência de dados via DMA, que é bem mais rápida em hosts que suportam DMA.

Infelizmente suporte a DMA não é a realidade para interfaces conectadas aos slots de expansão no MSX, entretanto percebi que todos os  adaptadores de Compact Flash que tem suporte a DMA tem uma qualidade melhor e funcionam 100% com a interface ATA IDE Tecnobytes, quando se está utilizando dispositivos Compact Flash com suporte a UDMA, como o Transcend 4Gb UDMA.

Outros adaptadores CF->IDE sem suporte a DMA, causaram instabilidade no I/O, truncando os arquivos, quando utilizados com Compact Flash UDMA (Transcend 4Gb UDMA).

TIP
A ausência do suporte a DMA no adaptador não influencia em nada o uso de dispositivos Compact Flash não UDMA no MSX, porém ao utilizar um Compact Flash UDMA com adaptadores sem suporte a DMA, percebi que foi o diferencial para o inicio de falhas nas operações de I/O.
Acredito estar relacionado apenas a qualidade superior dos adaptadores com suporte a DMA frente aos que não tem suporte a DMA.
Lembrando que, caso você queira utilizar um Compact Flash UDMA em hosts que suportam UDMA (PC, etc ….), o primeiro requisito do adaptador é que tenha suporte a DMA e o segundo é que seja compatível com dispositivos UDMA.
Logo a minha sugestão é a seguinte, compre adaptadores que tem a inscrição DMA em uma, ou nas duas, de suas faces, pois é mais seguro que funcione estável em dispositivos Compact Flash com ou sem suporte a UDMA. Caso tenha a especificação do produto em mãos, verifique também se o adaptador tem suporte a UDMA.

Notícias do Front:

Boas notícias quanto ao desenvolvimento de produtos baseados em tecnologia IDE pela Tecnobytes, pois o próprio autor já informou em um anúncio na lista MSXBR-L, que está desenvolvendo uma nova BIOS (2.50 beta) e que a mesma possibilitará suporte a FAT16 nativo, ou seja, em breve não necessitaremos da FAT12 para dar o boot na IDE, para mim esse é um primeiro passo para a FAT32.

Outra excelente notícia é que juntamente com a nova BIOS, teremos uma Memory Mapper, de fabricação da Tecnobytes,  que é imprescindível para o uso da IDE devido ao MSXDOS2 necessitar da mesma, o que dá aos possuidores de MSX2 e MSX2+, sem Memory Mapper, a possibilidade de ampliação do potêncial dessas máquinas.

Como senão fosse suficiente todas essas boas notícias, essa nova Mapper também funcionará em MSX1. Isso mesmo, Memory Mapper no MSX1 sem a necessidade de alterações no hardware ou atualização da BIOS do MSX…….sim, aqueles HotBit’s e Expert’s que temos guardados e quase esquecidos em nossos armários, poderão ter um dispositivo IDE e mais memória do que os eternos 64Kb.

Só nos resta aguardar mais um pouco.

Sugestões ao autor do produto:

A minha sugestão é única e simples. Os conectores IDE nos hosts geralmente vem com um pino a menos, no centro do conector, sendo que os cabos IDE, incluindo todos UDMA (80 vias), também vem com esse pino coberto no conector do cabo, o que muitos constumam chamar de mata-burro.

Pois bem, a IDE da Tecnobytes, não vem com esse pino faltando em seu conector, como na maioria dos hosts (PC’s, etc, …), o que termina obrigando a quem vai trabalhar com dispositivos que utilizam cabo IDE (CDROM, HD, …) a furar esse pino, no cabo IDE, uma vez que o mesmo está coberto, evitando assim qualquer dano à interface IDE quando se está utilizando um cabo desse tipo, ou seja, todos UDMA de 80 vias.

Cabo IDE

Finalizando….

…deixo aqui meus agradecimentos aos seguintes amigos da lista MSXBR-L que ajudaram compartilhando informações sobre seus Compact Flash e Adaptadores.

  • Antonio Sanches Parra – Pelo report, com imagens, relatando que seu Compact Flash Kingston 1Gb funcionou de maneira instável com os 2 adaptadores sem suporte a DMA, causando truncamento dos arquivos gravados no Compact Flash, sendo que o mesmo Compact Flash funcionou perfeitamente em outro adaptador com suporte a DMA.
  • Daniel Campos – Pelo report relatando a instabilidade no funcionamento de seu conversor SD->CF, tendo os mesmos problemas de truncamento de arquivos, relatados pelo Antonio Sanches Parra e também pelo report em que relatou que seu adaptador SD SDHC MMC para IDE 3.5″ funcionou corretamente na interface Tecnobytes.
  • Silvio Borges – Pelo HotFix feito na IDE da Tecnobytes e por ter disponibilizado a informação ao fabricante, que repassou a todos os usuários.
    .

Bom, por enquanto fico por aqui, sendo que reservei para a segunda parte dessa análise, um teste comparativo de performance dos diversos meios que podemos utilizar na IDE Tecnobytes ou qualquer outra interface IDE Sunrise-Like.

[]’s
PopolonY2k

Referências

Site Oficial da Tecnobytes

http://www.tecnobytes.msxall.com/

Anúncio do MSXDOS 2 Vrs2.44 (TNI)

http://www.tni.nl/news/command2com-version-244-released

Dossiê Storage Devices – Compact Flash

http://www.popolony2k.com.br/?p=130

Sunrise IDE Technical Information

http://map.grauw.nl/viewer.php?f=/resources/disk/IDETECH.TXT

Sunrise IDE Technical Information II

http://www.msx.ch/sunformsx/download/idetxt/idetech.html

Sunrise IDE Technical Information III (BIOS documentation)

http://www.msx.ch/sunformsx/download/idetxt/idesys.html

LBA Definition (Guia do Hardware)

http://www.guiadohardware.net/termos/lba

LBA Definition (PC Guide)

http://www.pcguide.com/ref/hdd/bios/modesLBA-c.html

Tutorial de configuração de interface IDE (Sunrise-like) no MSX (MSXPró)

http://www.msxpro.com/ide.html