RSC II
Iniciando
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:
|
|||||||||||||||||||
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).
|
|||||||||||||||||||
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 WRTVRMAssim, 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:
|
|||||||||||||||||||
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,C9Observe 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,&HC008Para gravar no formato binário no ambiente Basic: BSAVE"EXEMPLO1.BIN",&HC000,&HC008Para rodar em Basic: BLOAD"EXEMPLO1.BIN",R |
<< Anterior | RSC II | Próxima >> |