RSC II
Iniciando



  Para começar a utilizar o RSC II, você deverá gravar os arquivos necessários ao funcionamento do RSC em um disquete real ou virtual, caso você esteja utilizando um emulador de MSX. São eles:

  O programa está disponível na página MSX Archive (antiga Funet).

  A partir do BASIC, digite o comando:
 BLOAD"RSCII.BIN",R
  Pronto. Você agora está no ambiente de programação do RSC II.
  Esse ambiente é igualzinho ao BASIC, com a diferença óbvia das linguagens serem diferentes.
  As teclas de atalho do Basic, como por exemplo o CTRL+U (apaga a linha), funcionam aqui.

  Alguns comandos equivalentes ao Basic:
  • IN - Auto, cria linhas automaticamente para o programa.
  • LT - List, lista o programa.
  • RE - Renum, renumera as linhas do programa de 10 em 10.
  Nesse ambiente, não há um comando equivalente ao RUN do Basic. Para executar um programa Assembly, devemos "assemblar" o código Mnemônico e depois executá-lo, de preferência no Basic do MSX.
  Para começar, vamos fazer um programa simples em linguagem de máquina (LM). O objetivo desse programa é colocar a letra A (&H41) na coordenada 0,0 da tela, modificando o endereço 0 da VRAM.
  Digite IN (IN equivale ao AUTO do BASIC) e tecle enter. Copie o código a seguir (ou da figura ao lado).

Linha Código Comentário
10 ORG &HC000 Endereço inicial onde o programa será colocado na memória.
20 LD HL,0 Indica posição 0 da VRAM.
30 LD A,&H41 Carrega o registrador A com o código ASCII da letra "A"
40 CALL &H004D Chama a rotina da BIOS que escreve na tela.
50 RET Devolve o controle de onde foi chamado. Similar ao RETURN que devolve o controle ao GOSUB no Basic.
A rotina &H004D da BIOS recebe como entrada o conteúdo do registrador HL que indica o endereço da VRAM onde um caractere será escrito, e o registrador A recebe o código ASCII correspondente a esse caractere.
 Endereço..... 004DH
 Nome......... WRTVRM
 Entradas..... A=Código ASCII, HL=Endereço VRAM
 Saídas....... Nada
 Modifica..... EI

 Rotina padrão para escrever um byte na VRAM.
  Uma vez digitado o programa no RSCII, será necessário converter o código fonte (mnemônico) para código de máquina. A este procedimento chamamos de "assemblar" o código.
  Digite a instrução EN do RSCII e tecle return.
  Digite a opção 3 para "No. de opción" e, em seguida, digite H (hexadecimal) para "Modo (H/D)".
  Ao "assemblarmos" nosso código, será gerado o código de máquina equivalente ao programa fonte, a partir do endereço de memória designado pelo comando ORG <mem>.
  Diferente do Basic, onde o interpretador gerencia o local de memória onde o programa reside, em Assembly nós DEVEMOS indicar em que local de memória irá residir nosso programa.
  Nesse exemplo, o endereço inicial do programa é &HC000 (ou 49152, em decimal).
  Pronto. Se você digitou corretamente o programa, não haverá erros e a listagem do processo de conversão será visualizada, juntamente com o código em linguagem de máquina.
  Observando a listagem na figura ao lado, temos a seguinte configuração:
 Endereço | Código de Máquina | Linha | Mnemônico
----------+-------------------+-------+-------------
 C000     |                   | 10    | ORG &HC000
 C000     | 21 00 00          | 20    | LD HL,0
 C003     | 3E 41             | 30    | LD A,&H41
 C005     | CD 4D 00          | 40    | CALL &H004D
 C008     | C9                | 50    | RET
  Uma etiqueta é uma palavra utilizada para substituir um endereço de memória. Ela pode ser uma valor estático ou dinâmico.
  No caso do programa acima, poderíamos criar uma etiqueta com endereço estático para a rotina WRTVRM da seguinte maneira:
 15 WRTVRM: EQU &H4D
 ...
 40 CALL WRTVRM
  Assim, o endereço &H004D poderá ser substituído pela etiqueta WRTVRM na linha 40.
  Quando criamos uma etiqueta ao lado de um determinado trecho do código, estamos criando uma etiqueta com um endereço dinâmico, que serve para referenciar esse trecho do código. Ele é dinâmico, pois depende da posição em que o trecho de código irá ficar na memória. Assim, se colocássemos:
 20 PONTO1: LD HL,0
 ...
 40 CALL PONTO1

  PONTO1 seria substituído pelo valor &HC000 quando fosse gerado o código em LM.

  Obs: a modificação apresentada para a etiqueta de endereço dinâmico não faz nada, pois irá ficar em um loop infinito. Foi apresentada apenas para ilustração.
  Voltando ao programa original, observamos que cada byte ocupa uma posição de memória.
  Dessa forma, o programa começa em &HC000 e termina em &HC008 (pois a última linha possui apenas um byte - C9).
  O código em Assembly gerado fica: 21, 00, 00, 3E, 41, CD, 4D, 00, C9.

  Uma vez gerado com sucesso o código em Assembly, podemos salvar o código fonte da seguinte maneira:
 GT"EXEMPLO1.ASM"
  Para rodar o programa, temos as seguintes opções:
  • Ir ao Basic e rodar o programa que já está na memória.
  • Anotar o código em Assembly e criar um programa Basic para rodá-lo.
  • Salvar o código em arquivo binário, para rodá-lo.
  A primeira opção é a mais indicada para testar, pois o programa já está residente na memória após o termos "assemblado".
  Vamos dar um pulinho ao BASIC. Digite BA no RSC II e tecle enter.
  Para executar programas em LM no ambiente do Basic, usamos o comando USR. Antes disso, definimos o endereço inicial do programa em LM (&HC000) através do comando DEFUSR.
 DEFUSR=&HC000
 X=USR(0)
  Viu? A letra "A" apareceu no canto 0,0 da tela.
  Volte ao RSC II, carregando o programa VOLVER.BIN.
  Dê o comando LT para listar o programa e para surpresa ... lá está ele!
  Vamos a segunda opção.
  No Basic, digite o seguinte programa:
 10 FOR E=&HC000 TO &HC008
 20 READ A$
 30 POKE E,VAL("&H"+A$)
 40 NEXT E
 50 DEFUSR=&HC000:X=USR(0)
 100 DATA 21,00,00,3E,41,CD,4D,00,C9
  Observe que a linha 100 possui o código em Assembly do nosso programa.
  Terceira opção.
  Para gravar no formato binário no RSC II:
 GB"EXEMPLO1.BIN",&HC000,&HC008
  Para gravar no formato binário no ambiente Basic:
 BSAVE"EXEMPLO1.BIN",&HC000,&HC008
  Para rodar em Basic:
 BLOAD"EXEMPLO1.BIN",R


<< Anterior RSC II Próxima >>


MarMSX/Cursos/Assembly/RSCII/Cap1