Micro Sistemas 63

Linguagem de Máquina no MSX - I

Artigo Original: Daniel José Burd, Digitação: Wilson Pilon

Este curso vem para auxiliar àqueles que possuem fundamentos em linguagem de máquina e que desejam conhecer e, consequêntemente, se comunicar com os auxiliares do microprocessador Z-80 no MSX. O curso é composto de oito aulas, distribuídas da seguinte forma:

  • Aula 1: Apresentação da arquitetura MSX.
  • Aula 2: O armazenamento da tela na RAM(VRAM).
  • Aula 3: Uso do teclado e do gravador cassete.
  • Aula 4: Sprites e animação.
  • Aula 5: Som no MSX.
  • Aula 6: Hooks ou traps.
  • Aula 7: Chamadas úteis da ROM
  • Aula 8: Programa exemplificando as principais técnicas vistas no curso.

Bem, vamos aogra começar a nossa exploração pelo incrível reino no MSX. Boa viagem a todos!

Apresentação

Se o cérebro do computador é o microprocessador por ele usado, então o MSX, TK90x, Ringo, etc., que possuem o mesmo microprocessador (Z80), são basicamente iguais?

Não exatamente. O microprocessador é o cérebro do computador, porém concluir que micros com o mesmo cérebro sejam iguais não seria correto.

O que existe de comum nesses computadores é a linguagem de comunicação entre o programador e o cérebro do computador (que é a linguagem de máquina ou Assembly). Se você conhece a linguagem de máquina do TK90x, poerá usá-la no MSX ou Ringo, pois é a mesma. Ah! Então os micros são iguais?

Se olharmos cuidadosamente o conjunto de instruções Assembly do microprocessador Z80 (que é usado no MSX), veremos que não existe uma instrução sequer que lide com gráficos e nem tão pouco uma instrução que gere sons. Todas as instruções, sem excessões, lidam com número e memórias. Mas que faz os gráficos e sons do computador, já que o Z80 é incapaz?

Existem peças (circuitos) especializados em som, gráficos e outras funções diversas que veremos mais tarde. O circuito de som é que determina as características sonoras do computador e não o microprocessador. É verdade, no entanto, que o micrprocessador comanda esse circuito.

Portanto, o computador é provido com o mais potente microprocessador existente e, no entanto, esquecem de supri-lo de um circuito gráfico; este computador será incapaz de colocar um ponto sequer na tela, da msma forma que se colocarem um cirtuito gráfico ruim, inevitavelmente os seus gráficos serão ruins, afinal o microprocessador só sabe lidar com números.

Fica claro que as qualidades de um computador são determinadas pelo seu microprocessador em conjunto com os circuitos especializados que o auxiliam. Para nós que "conversamos" diretamtente com o Z80 via linguagem de máquina, é de fundamental importância conhecermos bem seus auxiliares, pois só assim poderemos extrarir o máximo do MSX. Sem estarmos familiarizados com o circuito de som do MSX será impossível criar uma música, e, sem conhecermos o circuito gráfico seremos incapazes de fazer qualquer gráfico. Sentiram o drama?

O Hardware

Os micros de maior sucesso no mercado nacional, até o evendo do MSX, eram compostos basicamente pelo chip Z80, que era o responsável pelo vídeo, sons e tudo mais, já que seus auxiliares eram muito fraquinhos, exigindo muita atenção do microprocessador. Sem dúvida, o Z80 é capaz de dar conta de todos esses controles, porém isso compromete seu rendimento, além do que, ele foi feito para fazer contas e endereçamentos e não para tocar músicas.

No MSX, o Z80 não é mais obrigado a pintar a tela ou executar uma canção, pois ganhou poderosíssimos auxiliares, como o TMS9128A da Texas Instruments (pouco romântico seu nome, não?). Não se sabe ao certo onde esse Miguel Ângelo adquiriu sua habilidade artística, contudo seu currículum não deixa dúvidas quanto a sua habilidade:

  • Resolução de 256 por 192 pontos.
  • 15 cores mais o transparente;
  • Mais de 30 sprites (pequenos desenhos criados pelo usuário, que podem ser facilmente movimentados pela tela).

Além desses atributos e muitos outros, o nosso Miguel Ângelo possui ateliê próprio, isto é, sua obra é feita em um lugar especial, a VRAM, onde só ele mexe, dispondo para tal de 16Kb. Dessa forma, temos 64Kb integrais para o Z80 acessar e mais 16Kb para o nosso artista.

O artista de cada micro é diferente da maioria dos artistas famosos que ouvimos falar no tocante à solciabilidade, pois o TMS9128A é muito sociável. Em lições posteriores iremos ver como encomendar pinturas a esse novo amigo, falando a sua língua, a linguagem de máquina.

Apresento agora o Beethoben, ou, se preferir, o Sivuca do seu MSX: o PSG (Programmable Sound Generator) AY8910 (não comento esse nome), que além de executar composições em três canais simultâneos e independentes atingindo até oito oitavas, ainda controla os joysticks, a leitura do gravadro cassete e outras coisas.

Por fim, apresento o terceiro grande auxiliar o Z80 no seu MSX: o PPI (Programmable Periferal Interface) 8255. A sua história é diferente da dos outros artistas, já que não tendo aptidões para as artes, sua mãe o colocou em um curso de administração de memórias; seus dotes logo afloraram e noso administrador mostrou-se capaz de controlar também a leitura do teclado, escrita no gravador cassete e muitas outras tarefas.

Vê-se que o Z80 está bem assessorado no seu MSX e isto aumenta significativamente a responsabilidade do programador, máquinas para grandes obras ele tem, basta agora deixá-las frutificarem!

A RAM

O leitor já deve ter ouvido falar que o MSX possui 64Kb de RAM (além dos 16Kb de Vídeo RAM) e 32 Kb de ROM. Porém, como todo bom conhecedor do Z80 sabe que este só é capaz de acessar 64Kb, surge então a questão: como usar os 96 Kb (64Kb mais 32Kb) de memória disponíveis no MSX? O sistema, mui sabiamente bolado para organização de memória, é composto por quatro páginas (ver figura 1), sendo cada uma capaz de armazenar 16 Kb, dando um total de 64Kb. Até aqui tudo bem.

O MSX possui vários blocos de memória que podem ocupar a memsma página e, dessa forma, é feito o chaveamento, o qual indica quais blocos estão sendo acessados simultaneamente. Para identificar um dado bloco, é necessário especificar a página (0 a 3) e o slot (0 a 3), sendo que nunca poderemos acessar dois blocos que possuam a mesma página. No caso da figura abaixo, não podemos usar a ROM junto com as páginas 0 e 1 do slot 3, pois sendo elas destinadas a RAM, ao acessá-las perdemos o acesso a ROM e, consequêntemente, o BASIC. Portanto, muito cuidado ao se chavear memória!

Sistema de slots do MSX:

ms 63 assembly01

Este sistema de chaveamento nos permite ter até 16 Kb x 16 páginas, totalizando 256 Kb de memória. No entanto, cada slot pode ainda ser expandido dando lugar a outros quatro slots e, dessa forma, a máxima capacidade de memória que seu MSX pode ter é de 256x4, isto é 1Mb. Nada mau, você não acha?

Veremos como se chaveia a memória na aula sobre o senhos PPI.

A Estrutura de Armazenamento de Dados

Quando usamos o BASIC, temos "ligados" 23Kb de RAM que ocupam as páginas 2 e 3 do slot 2 no Expert e estão no slot 3 do HotBit. Essa RAM é dividida da forma esquematizada na figura abaixo.

Esquema da RAM no MSX:

ms 63 assembly02

O Armazenamento das Linhas do BASIC

As linhas de um programa em BASIC possuem uma estrutura bem definida. A figura abaixo mostra essa estrutura.

Estrutura das linhas do BASIC:

ms 63 assembly03

Observe que o número da linha é guardado de modo inverso ao qual estamos acostumados, isto é, o byte mais significativo (MSB) antes do byte menos significativos (LSB). O exmeplo a seguir esclarece isto:

NEW
10 PRINT "PAZ"
20 END

  8001h                   800Bh
Linha 10 0C 80 0A 00 91 22 70 61 7A 22 00
  Próxima linha
se inicia em
800Ch
Linha
número
10
P
R
I
N
T
" P A Z " Fim de
linha

 

  800Ch         8011h
Linha 20 12 80 14 00 81 00
  Próxima linha
se inicia em
8012h
Linha
número
10
E
N
D
Fim de
linha

 

  8012h  
               00 00
  Indica fim
do programa
BASIC

O Armazenamento de Variáveis

Como já sabemos, as variáveis do BASIC podem ser divididas em numéricas ou não-numéricas. Dentre as numéricas, ainda temos três tipos:

  • Variáveis inteiras (simbolizadas por %): ocupam dois bytes cada.
  • Variáveis de precisão simples (simbolizadas por !): ocupam quatro bytes cada.
  • Variáveis de dupla precisão (simbolizadas por #): ocupam oito bytes cada.

A figura "Esquema da RAM no MSX" indica onde são armazenadas essas variáveis. Veremos agora a forma desse armazenamento. Cada variável, tanto string quanto numérica, é armazenada segundo o esquema da figura abaixo.

Esquema do armazenamento de variáveis:

ms 63 assembly04

No caso de variáveis numéricas, o valor da mesma é armazenado na área de variáveis, já com strings isso não ocorre. Neste caso, é armazenado um vetor composto por três bytes. Veja a figura abaixo.

Vetor que contém as características da string:

ms 63 assembly05

O endereço da string pode ser tanto no próprio programa BASIC como também na área de strings. Vejamos um exemplo que esclarecerá esse ponto:

NEW
10 A1$="PAZ"
RUN

  8001h                 800Ah       800Eh
Linha 10 0F 80 0A 00 41 31 24 EF 22 70 61 7A 22 00
  Próxima linha
se inicia em
800Ch
Linha
número
10
A 1 $ = " P A Z " Fim de
linha

 

  800Fh  
               00 00
  Indica fim
do programa
BASIC

Conteúdo da variável VARTAB=8011h

8011h          
03 41 31 03 0A 80
[1] A 1 [2] Endereço da
string=800Ah
  Nome da
variável
   
  • [1] N=3 indica que se trata de uma string
  • [2] Tamanho da string

Em certos casos não é possível que o ponteiro da string aponte para o programa, pois não há linha do programa em BASIC que contenha toda a string. O exemplo a seguir mostra esta situação, sendo importante ressaltar que estruturas como INPUT A$ e A$=A$+B$ apresentarão a mesma característica.

(OT) A revista comete um engano e não mostra o armazenamento de variávies string e sim de dupla precisão, tenho preferido deixar o texto original.

NEW
10 A =1
RUN

  8001h                
Linha 10 0A 80 0A 00 41 20 EF 12 00
  Próxima linha
se inicia em
800Ch
Linha
número
10
A [SAPACE] =    

 

  800Ah  
               00 00
  Indica fim
do programa
BASIC

Conteúdo da variável VARTAB=800Ch

800Ch                    
08 41 00 41 10 00 00 00 00 00 00
[1] A   Representação do número 1
em 8 bytes
  Nome da
variável
   
  • [1] N=8 implica em variável de dupla precisão

As matrizes são guardadas de modo análogo. Verifique!

Na próxima aula veremos como funciona a parte gráfica do MSX, conhecendo a estrutura de cada SCREEN e manipulando diretamente a VRAM.

Um abraço a todos e até a próxima.