Emulando o HB-4100 no openMSX

hb4100_abertura.png

Um pouco de arqueologia… em algum ponto de 1987 a EPCOM SHARP lançou¹ diversos periféricos para a linha MSX, mais especificamente para o modelo deles, o HOTBIT (ou HB-8000 de 1985). Os mais conhecidos deste pacote são certamente o HB-3600 (conjunto com a interface controladora, fonte de alimentação e a unidade de drive de disquetes de 5,25″ DD) e o HB-6000 (a unidade adicional de drive de disquetes).

Entre os lançamentos também estavam o HB-3000, uma interface serial, o HB-4000, cartão de 80 colunas, o HB-4100, expansão de 64KiB de RAM — estes dois últimos pensados como complemento ao HB-3600 — e ainda haveria o HB-4200, um (necessário) expansor de slots que acabou não passando da fase de protótipo.

Tanto o HB-3600 quanto o HB-4000 são emulados pelo openMSX e justamente para matar minha curiosidade com relação ao funcionamento da HB-4100 acabei criando por acidente uma extensão dela para o openMSX.

(¹) Esta sequência culminou com o lançamento da versão 1.2 do HOTBIT (o “HOTBIT preto”) no final deste mesmo ano.

O que é o HB-4100?

É um cartucho com 64KiB de expansão de RAM para micros MSX.

TL;DR… É uma expansão de memória RAM que disponibiliza um banco de 16KiB em cada um dos quatro segmentos² nos qual o espaço de endereçamento de 64KiB do Z80 se encontra dividido. Isto é feito através da PPI e é o jeito “oficial” de se expandir a memória RAM no MSX e que permitia alcançar teóricos 1024KiB de RAM (16 cartuchos de 64KiB conectados em cada um dos 16 subslots possíveis).

Especificamente no caso da CASIO, ela vendeu cartuchos com 8KiB, 16KiB que serviam para ampliar a memória RAM naqueles modelos xexelentos de 8KiB e 16KiB que ela vendia, ou seja, você espetava o cartucho e conseguia notar o aumento da memória. Cartuchos de 64KiB também estavam disponíveis, tanto pela própria CASIO como também pela PHILIPS, SONY e, claro, a SHARP.

Mas estes sujeitos são anteriores ao advento da Memory Mapper que, além de ter maior capacidade (4096kiB por subslot, alcançando teóricos 64MiB), era bem mais fácil de ser utilizada.

(²) As faixas de endereços entre 0x0000-0x3FFF, 0x4000-0x7FFF, 0x8000-0xBFFF e 0xC000-0xFFFF.

O suporte ao HB-4100 (e seus similares)

Em modelos de MSX com menos de  64KiB de RAM ele será utilizado pela MSX-BIOS para “completar” os 32KIB de RAM necessários no MSX-BASIC e pelo MSX-DOS para “completar” os 64kiB de RAM. Em modelos com 64KiB de RAM será inócuo, nada diferente irá acontecer, e caso deseje utilizar esta RAM extra você precisará explicitamente procurar pela sua localização (varrer slots e subslots) e acessá-la, por exemplo, através das funções RDSLT (0x000C) e WRSLT (0x0014).

Ele também é utilizado pelo HB-MCP, a versão do CP/M que vinha com o HB-3600, e qualquer programa que resolva verificar por conta própria quantos bancos de RAM estão disponíveis no sistema e neste caso só conheço um programa que faça isto o MT-BASE da holandesa Micro Technology e que foi vendido pela SHARP com o nome de HOTDATA — eles o traduziram para o português, acrescentaram uma opção de seleção de filtro de impressora e mais algumas outras coisinhas…

Um HB-4100 para o openMSX

Quem usa o openMSX 0.13.0 pode usar a extensão “ram64k”, que está disponível tanto nesta versão quanto no repositório git do projeto, que terá o mesmo efeito e apenas troque “Sharp_HB-4100” por “ram64k”. Por usar a versão 0.12.0 acabei reinventando a roda, mas foi divertido estudar os arquivos que definiam as outras extensões para criar uma que se comportasse tal qual a HB-4100Não disse que tinha sido acidental? Aliás os arquivos são quase que idênticos!

As extensões são definidas a partir de um arquivo XML e, claro, do respectivo código dentro do openMSX para implementá-lo — que neste caso não era necessário pois já existe suporte a RAM no emulador. 🙂

Tudo o que ele faz é dizer ao emulador para colocar um banco de RAM de 65.536  bytes começando do endereço de memória 0 e em qualquer slot ou subslot do computador.

E você pode copiar este XML tanto para “/usr/share/openmsx/extensions” quanto para “~/.openMSX/share/extensions”, o emulador procurará por ele nestes dois lugares. E, se não estou enganado, usando o openMSX Catapult deve-se usar a opção de pesquisar/atualizar as extensões disponíveis.

Um Hotbit com 128KiB de RAM

O manual do HB-4100 contém  dois programas de exemplo que fazem a leitura e a gravação de bytes individuais mas preferi não utilizá-los.

HB-MCP

O HB-MCP pode ser baixado na página do FRS, basta extrair a imagem de disco de lá. Para executá-lo no openMSX use:

$ openmsx -machine Sharp_HB-8000_1.2 \
  -exta Sharp_HB-3600 \
  -extb Sharp_HB-4100 \
  -diska ~/HB-MCP1.1.dsk

Aguardar pela correta inicialização do HB-MCP:

hb4100_hb-mcp

A ramdisk é criada automaticamente e responde como drive F: e para maiores informações use:

A>STAT F: DSK:

O resultado será:

hb4100_ramdisk

No manual do cartucho esta mensagem está em inglês mas o importante é que o tamanho indicado na ramdisk de 63KiB, ou seja, o cartucho foi realmente detectado e está sendo utilizado pelo sistema operacional.

MT-BASE e HOTDATA

Como dito o MT-BASE e sua versão nacionalizada o HOTDATA, são até o momento, os únicos programas de MSX a detectar automaticamente e utilizar este tipo de expansão de memória RAM que conheço.

O MT-BASE te informa o total da memória (Geheugen grootte) é de 128KiB — os 64KiB do computador mais os outros 64kiB da expansão:

hb4100_mt-base

Enquanto que o HOTDATA parece ser mais honesto e informando a memória útil, os mesmos 128KiB porém retirando os 16Kib ocupados por ele mesmo e que, obviamente, não estão disponíveis.

hb4100_hotdata

Tanto a versão do MT-BASE quanto do HOTDATA que consegui são arquivos binários sendo carregados em RAM e não imagens de cartuchos rodando em ROM.

Finalizando…

Antes que alguém faça a pergunta, o HB-MCP não parece procurar por mais de uma expansão de RAM no sistema, com duas ele continua criando a ramdisk de 63KiB e ao acrescentar una terceira ele nem inicializa! O mesmo acontece com o MT-BASE.

Porém o HOTDATA parece ter uma rotina bem mais inteligente:

 $ openmsx -machine Sharp_HB-8000_1.2 \
   -exta slotexpander -extb slotexpander \
   -ext Sharp_HB-3600 -ext Sharp_HB-4100 \
   -ext Sharp_HB-4100 -ext Sharp_HB-4100 \
   -ext Sharp_HB-4100 -ext Sharp_HB-4100 \
   -ext Sharp-HB-4100 -ext Sharp_HB-4100 \
   -diska HOTDATA.dsk

Isto seria um HOTBIT com dois expansores de slot, uma HB-3600 e sete HB-4100 (64×7=448KiB, mais 64KiB) e o resultado:

hb4100_hotdata512

Pelo visto, além da tradução e da opção de filtro de impressora o pessoal da SHARP também mexeu na rotina de detecção de RAM dentro do programa

Agora fiquei curioso em saber se existem outros programas de MSX que utilizam expansões de memória do tipo do HB-4100. 🙂

Anúncios

Um comentário sobre “Emulando o HB-4100 no openMSX

  1. Pingback: Episódio 75 – O office antes do Office: Bancos de Dados – Parte B | Retrocomputaria

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s