RAM

1. Descrição

O módulo RAM implementa uma memória de acesso aleatório. O módulo possui duas entradas independentes para controlar a leitura e a escrita na memória. Ambas são activas a 0. A primeira chama-se "nRead" e a segunda "nWrite". Quando ambas estiverem desabilitadas o barramento fica em alta impedância (Figura 1). Para além destes sinais a RAM possui ainda um sinal denominado CS (Chip Select) que quando inactivo, a 0, coloca o barramento de dados em alta impedância e inibe a escrita na memória.

O número de bits do barramento de dados e de endereços é parameterizável a partir da janela de configuração.

 


Figura 1. Símbolo da RAM.

2. Interface gráfica

A interface gráfica das RAMs é comum a todas as memórias (presentemente RAMs e PROMs).

O objectivo da  interface gráfica das memória é permitir a visualização e alteração do conteúdo da memória. Esta visualização pode ser feita de duas formas distintas:

As memórias cuja barramento de dados esteja ligado ao barramento de dados de um processador apresentam ambas as interfaces, as restantes apresentam apenas a primeira.

2.1 Dump Hexadecimal

A janela de dump hexadecimal da memória (Figura 2) possui duas zonas:

Figura 2. Dump hexadecimal de uma memória.

Para carregar informações na memória deve-se usar o comando File->Load. Este comando carrega ficheiros com a extensão ".dat" que contenham texto ASCII em que cada linha tem o seguinte formato:

    endereço conteúdo

em que o endereço e o conteúdo são números hexadecimais (sem prefixos ou sufixos, i.e. sem '0x' no início ou 'h' no fim).

Para alterar uma posição de memória basta posicionar o cursor no local respectivo e escrever o novo valor.

2.1.2 Breakpoints

Para além de permitir a leitura e alteração do conteúdo da memória esta janela permite ainda colocar breakpoints quando uma posição de memória atingir determinado valor. Para tal é necessário clicar com o botão da direita do rato na posição respectiva de modo a aparecer a janela da Figura 3.

Figura 3. Colocação de um breakpoint na posição 51h da memória.

2.2 Código Assembly

A janela que permite a visualização do código assembly na memória (Figura 4) é a janela fundamental para o carregamento e depuração dos programas assembly a executar nos vários microprocessadores suportados pelo simulador. O assembly utilizado depende do processador a que a memória está ligado. Esta detecção é feita automaticamente pelo que o utilizador não tem que escolher qual o assembly e assembler a utilizar. Nota esta janela só é utilizada caso o processador não possua uma semelhante.

             

Figura 4. Duas visões da janela de  deassembly. Numa apenas a metade do código está preenchida,
 noutra apenas as variáveis estão preenchidas.

2.2.1 Janela de Código/Variáveis

Esta janela está dividida em duas partes. Na metade de baixo está o código assembly. Na metade de cima estão as variáveis definidas nesse código assembly. Nos casos dos sistemas embarcados o código estará em PROM pelo que as variáveis não podem ser declaradas na mesma memória. É o caso da Figura 4 em que o código está numa memória e as variáveis estão noutra.

Ambas as metades possuem três colunas. A primeira coluna indica o endereço onde está a instrução/variável, a segunda coluna indica a etiqueta que está associada à instrução/variável e a terceira contém a mnemónica da instrução assembly/o valor da variável, respectivamente.

2.2.2 Botões

A janela contém ainda dois conjuntos de quatro botões e uma janela de texto.

O primeiro conjunto de botões serve para:

O segundo conjunto de botões serve para:

A janela de texto indica ao carregador de código onde é que a referida memória está mapeada no espaço de endereçamento do processador. Deste modo o programa carregador só carrega em memória a parte do código que deve ficar naquela memória. Com esta solução é possível ter um único ficheiro com código carregado por várias memórias e todas elas ficarem com uma parte diferente do código.

2.2.3 Breakpoints

Para colocar/remover breakpoints para clicar com o rato na linha de código respectiva. As linhas que contenham breakpoints ficam assinaladas a Vermelho. A próxima instrução a executar fica assinalada a Azul.