O cartão de 80 colunas da DDX – parte 1

ddx80-1_abertura

Ganhei de um amigo uma interface DDX80, o “cartão” de 80 colunas lançado pela Digital Design Eletrônica para computadores MSX em 1988 mas ao pesquisar um pouco sobre ela na Internet me dei conta de que não havia muita informação disponível tanto sobre ela como também sobre a VMX-80, esta lançada pela Microsol em 1987 e que serviu de “inspiração” para a interface da DDX.

Então, além de escrever um pouco a respeito do que aprendi sobre a DDX80, resolvi também comprar uma VMX-80 para também poder compará-las! 🙂

Cartões de 80 colunas?

O termo “cartão de 80 colunas” — uma tradução literal para o card em  80-column text card — era o termo utilizado para fazer referência ao hardware que habilitava um modo texto de 80 colunas em equipamentos que não o possuíam por padrão, como era o caso dos computadores MSX mas também dos Apple II/II+, TRS-80 Color e alguns outros.

Especificamente no Brasil, além da DDX e Microsol, a Gradiente lançou dois modelos de cartão de 80 colunas o CT-80E (com o processador de textos ASTEX embutido) e a CT-80NET (com porta serial padrão RS-232) enquanto que a Sharp o HB-4000 — que funcionava somente a partir dos sistemas operacionais HB-DOS (uma versão do MSX-DOS) ou HB-MCP (uma versão do CP/M).

Um pouco mais sobre a DDX80

TL;DR… a DDX80 é uma cópia com melhorias da VMX-80 da Microsol… 😀

O que tem de igual à VMX-80.

Assim como a interface SVI-727 da Spectravideo, tanto a VMX-80 como a DDX80 utilizam o MC6845¹ da Motorola para a geração do sinal de vídeo² e ambas, durante a inicialização, alteram alguns hooks da BIOS para pendurar neles suas próprias rotinas e assim habilitar o modo texto de 80 colunas diretamente a partir do MSX-BASIC ou do MSX-DOS — este recurso não disponível na SVI-727 que aparentemente requer a carga de um programa no MSX-DOS para ativar o modo de 80 colunas.

Assim como a VMX-80 ela possui dois cabos de vídeo, um para conectar na saída de vídeo composto do MSX e outro para conectar ao aparelho de TV ou monitor de vídeo. A interface cuida de fazer o bypass do sinal do computador para o dispositivo de vídeo, desligando-o quando o modo de 80 colunas é ativado.

Do ponto de vista funcional ambas utilizam o espaço de endereçamento entre 0x4000 e 0x7fff (página 1) onde ficam mapeadas tanto ROM como também RAM (a página de vídeo do MC6845).

A ROM ocupa a área entre 0x4000 e 0x5fff — a DDX80 consome todo este espaço de 8192 bytes enquanto que a VMX-80 usa apenas a primeira metade e espelha o conteúdo na segunda. Em ambas a memória de vídeo totaliza 2048 bytes, iniciando em 0x6000 0x7000* e indo até 0x67ff 0x77ff que além da tela propriamente dita (80 colunas × 25 linhas = 2000 caracteres) estão mapeados dois endereços, 0x6000 e 0x6001, para a leitura e escrita dos registradores dos MC6845. O primeiro endereço seleciona o número do registradores enquanto que no segundo é possível ler ou altera seu conteúdo.

E em ambos o modo o sinal de vídeo em 80 colunas é monocromático… 😦

(*) Errei aqui, mas já fiz a devida correção.

O que é diferente da VMX-80

Enquanto a ROM da VMX-80 contém apenas as rotinas necessárias para inicializar o MC6845 e habilitar o modo de vídeo de 80 colunas, a ROM da DDX80 contém diversos comandos implementados através do CALL do MSX-BASIC que facilitam o uso da interface.

Um deles é o “CALL DDXH” e que permite conhecer os demais.

CALL DDXH

HELP - CARTAO DDX80T
====================

DDXH    - Esta lista
DDXV    - Mostra versao do cartao
DDX80   - Chaveia para 80 colunas
DDX40   - Chaveia para 40 colunas
DDXINV  - Modo video inverso
DDXNORM - Modo video normal (nao inverso)
DDXMSX  - Set de caracteres MSX
DDXPC   - Set de caracteres IBM PC

DDXO - Lista de opcoes do modo serial/terminal

Apenas como curiosidade é possível também alternar entre os conjuntos de caracteres do MSX e do IBM-PC (CP437) através da combinação de teclas «Shift»+«Control»+«Code» e entre os modos de vídeo normal (caracteres brancos com fundo preto) e invertido (caracteres pretos com fundo branco) com a combinação «Shift»+«Control»+«Graph».

A ROM da DDX-80 possui também as rotinas utilizadas por um outro produto, a DDX80T³, que adicionava uma porta serial RS-232 e contém comandos para configurar a UART e ativar um emulador de terminal (provavelmente VT-52):

CALL DDXO

OPCOES DO MODO SERIAL/TERMINAL DE VIDEO
=======================================

DDXSabcd - Inicializa porta serial:
    a    : baud-rate 0=50,1=75,2=110,3=150,4=300,
           5=600,6=1200,7=2400,8=4800,9=9600
     b   : paridade 0=SEM,1=IMPAR,2=PAR
      c  : bits 5=5,6=6,7=7,8=8
       d : stop bits 1=1,2=2", CRLF
DDXTabc  - Entra no modo emulacao de terminal
    a    : [0]=modo normal, 1=CR dig. gera CR+LF
           2=CR rec. gera CR+LF, 3=opcoes 1+2
     b   : echo [0]=off,1=on
      c  : [4]=24 linhas, 5=25 linhas
DDXGa    - registro 'a' do UART sera lido pela funcao FPOS
DDXDa    - seta DTR ON se a=1, ou OFF se a=0
DDXRa    - seta RTS ON se a=1, ou OFF se a=0
OBS: Ao ser inicializada, a porta serial e setada para
     9600,sem paridade,8 bits e 1 stop bit.

A placa da minha DDX80 há espaço para a instalação dos componentes e do conector da DDX80T, só preciso descobrir exatamente quais são e pelo que tudo indica não é uma porta serial padrão de MSX e não estende o MSX-BASIC com comandos para utilizá-la.

E para terminar, há uma pequena “chave” no cartucho que permite a interface seja desabilitada durante a inicialização.

(¹) O mesmo MC6845 foi utilizado em diversos computadores como os Amstrad CPC e o BBC Micro e também para implementar as placas de vídeo CGA, EGA, MDA e VGA nos IBM-PC (e compatíveis).

(²) No caso das interfaces da Gradiente e da Sharp a geração do sinal de vídeo é feita utilizando um V9938 da Yamaha (o mesmo processador de vídeo dos MSX2) com 16 KiB de memória de vídeo instalada.

(³) Na edição Nº98 (~1991) da revista Micro Sistemas , há um extenso material promocional da própria DDX onde são apresentados diversos produtos comercializados por ela, inclusive a DDX80 mas não há menção à DDX80T.

Extraindo a ROM

Ao contrário da ROM da VMX-80 facilmente encontrada para baixar, as ROM da DDX80 disponíveis para download são cópias diretas da EPROM e os dados estão embaralhados — prática comum da DDX que tanto dificultava a cópia como também barateava o desenho das placas de circuito impresso — e assim, “inúteis” para quem apenas desejar visualizar o conteúdo.

Assim, escrevi um programa bem simples que usa a rotina RDSLT (0x000c) da BIOS para copiar 8192 bytes da página 1 no slot onde o cartucho está conectado e colocá-los onde o BASIC consegue enxergar.


;
; READBLCK.ASM
; pasmo -d -v readblck.asm readblck.bin
;
RDSLT: equ 0x000c
slotID: equ 2 ; cartucho no slot 2
org 0x9000-7
proc
db 0xfe ; arquivo binário do MSX-BASIC
dw start
dw stop
dw exec
start:
exec:
ld bc,0x2000 ; tamanho do block (8192 bytes)
ld de,0xa000 ; endereço de destino
ld hl,0x4000 ; endereço de origem
loop:
push bc ; salva 'BC' na pilha
push de ; salva 'DE' na pilha
ld a,slotID ; slot a ser lido
call RDSLT ; lê endereço 'HL' no slot.
pop de ; recupera 'DE' da pilha
pop bc ; recupera 'BC' da pilha
ld (de),a ; salva o valor de 'A' no
; endereço apontado por 'DE'
dec bc ; decrementa 'BC'
inc de ; incrementa 'DE'
inc hl ; incrementa 'HL'
ld a,b ; 'A' = 'B'
or c ; 'A' = 'A' or 'C'
cp 0 ; compara com zero
jr nz, loop ; se != 0, vá para "loop"
ret ; sai do programa
stop:
endp

view raw

readblck.asm

hosted with ❤ by GitHub

Daí pude fazer tanto uma cópia da ROM da DDX80 para ver o que havia dentro, como também da VMX-80, para validar meu processo de cópia. E comparando o conteúdo das duas ROM resgatei um curioso bate-papo entre quem escreveu o código para a VMX-80 na Microsol

ddx80-1_microsol

…e quem “adaptou” o código para a DDX80 na DDX.

ddx80-1_ddx

De resto, há bastante similaridade entre os dois códigos, apesar de ser perceptível um certo trabalho para relocar parte do programa para adicionar mais coisas — só comecei a fuçar no código!

Próximos passos

Considerando que o MC6845 tem 18 registradores e que o ajuste deles permite a geração de diversos outros modos de vídeo que não necessariamente de 80 colunas, o próximo passo é justamente alterá-los só para “ver o que acontece”… 🙂

Até!