Inf.UFRGS - Simulador CESAR 2024 - M.Johann & Chat GPT-4 (TEST PHASE)
R0:  R1: 
 
 
R2:  R3: 
 
 
R4:  R6::SP
 
 
R5:  R7::PC
 
 
Flags N: Z: V: C:
RI:
NOP
Acessos: 0
Instruções: 0
Modes_R7: Silent:
Breakpoint PC     :
Breakpoint dstAddr:
Asynch Keyboard:
Cesar16i:
 
Em memória de Raul F. Weber

þþþ
key
þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ
HELLO! Cesar 2024 V.17/04/25 Ready!
Wiki UFRGS do Computador Cesar: arquitetura, simulador, referências
Quick Reference Help - Versão 17/04/2025 11am
-------------------------------------------------

Janelas de Memória: O simulador apresenta três janelas com visões diferentes da mesma memória de 64KBytes: A visão esquerda de memória mostra mnemônicos e sempre segue PC; A janela intermediária mostra palavras de 16 bits e segue SP ou srcAddr; As palavras nessa janela são alinhadas pela paridade de SP ou srcAddr; A visão de memória direita mostra caracteres ASCII e segue operandos não imediatos srcAddr ou dstAddr (acessos imediatos já aparecem junto ao código);

Edição de Memória: Clique uma vez sobre as células de memória para inserir novos valores em decimal ou hexadecimal, conforme modo da interface, ou nova instrução em assembly (montador de linha); Use ESC ou clique fora para sair sem alterar o valor atual; Após editar um valor, digite outros diretamente para inserir em endereços subsequentes; Um clique duplo na janela esquerda seta o Breakpoint do PC nesta posição; Um clique duplo na janela direita seta o Breakpoint de escrita na memória (dstAddr) nesta posição; Para alterar o valor do PC para uma posição que você localizou na janela da esquerda, use um click duplo com a tecla Shift pressionada.

Ponteiros:
→ verde = PC (próxima instrução);
< azul = srcAddr: operando lido da memória (incluindo dstAddr na instrução CMP);
> violeta = dstAddr: endereço de operando escrito na memória;
~ amarelo = SP: topo da pilha;
- cinza claro = posição de edição;
texto vermelho = posição do BreakPoint para PC;
texto azul = posição do BreakPoint para escrita de memória;
    * Lembre-se que o ponteiro indica apenas um endereço de memória (com um byte), mas, exceto na área mapeada para IO, o acesso das instruções quando executadas é sempre feito em palavras de 16 bits, e portando um dado de 16 bits é lido ou escrito no endereço indicado (MSB) e no endereço seguinte (LSB).

Sincronismo dos Mnemônicos:
A janela esquerda tem os mnemônicos sincronizados por 0 no início e é atualizada durante a execução ao acompanhar o PC; Essa atualização é local, limitada por instruções finais, acompanha normalmente quando a janela sofre scroll natural pelo PC, mas não garante sempre consistência de instruções decodificadas antes mais acima ou depois de um scroll arbitrário, notadamente em casos de saltos para meio de instruções ou código auto-modificado.

Campo Follow: Pelas seleções "Follow" acima de uma visão de memória você pode especificar qual elemento a janela segue quando não estiver em modo silencioso, ou nenhum; Esse campo também pode ser usado como "Goto", ao escrever um endereço específico; SP e PC também podem ser usados como Goto's para observar memória mas somente se o programa não estiver rodando;

Modo Silencioso: No modo silencioso o programa é executado cerca de 1000 vezes mais rápido, não chamando atualização das janelas de memória (conteúdo, ponteiros, cores e scroll), sem preencher o log de instruções, e atualizando os registradores apenas a cada 2000 instruções. Esse modo é recomendado ou necessário para execução de programas interativos, especialmente com interrupções. Entretando, a interface permanece viva, com todos os controles respondendo normalmente, e se você fizer scroll verá também a memória sendo atualizada;

Modos de Endereçamento: A opção Modes_R7, marcada por default, decodifica os mnemônicos exibindo os formatos imediato e absoluto, e quando desmarcada mostra os modos de endereçamento originais que foram usados, que são os pós-incrementados usando PC (R7).

Teclado Assíncrono: A opção de teclado assíncrono, inicialmente desmarcada, deixa o simulador armazenar novas teclas digitadas (em TECDT) mesmo quando o programa não sinalizou a leitura de tecla anterior resetando o bit 7 do endereço TECST, e pode ser útil para monitorar a entrada continuamente. O teclado aceita os códigos de controle ASCII, com Control-@ para 0, Control-A a Control-Z para códigos entre 0x01 e 0x1A, que serão representados no visor do teclado como ^tecla, seguidos de ^[ ^\ ^] ^^ e ^_ para os valores 0x1B a 0x1F.

Cesar16i: A opção Cesar16i, inicialmente marcada, ativa as funções do modelo atualizado com interrupções. Nesse caso, o acesso a memória à partir da posição 0xFFC0 é feito byte a byte, correspondendo a área de IO mapeada em memória. Precisa ser desativada para compatibilidade com o modelo original, onde a área de IO começa apenas à partir de 0xFFDA e a pilha era inicializada nos programas com SP = 0xFFDA, caso contrário os valores de 16 bits não serão escritos corretamente na pilha e valores poderão ser alterados pelo hardware.

Exportar/Importar:
Para salvar, carregar, copiar ou apagar toda ou parte da memória, use o Modal aberto no botão "Export/Import". Todas as operações são realizadas primeiro em um buffer separado e somente são copiadas de volta para a memória do simulador pelos botões de "Import Sel" ou "Import All".

O buffer recebe uma cópia da memória do simulador a cada vez que for aberto, e portanto as alterações são descartadas se ele for fechado sem uso dos botões de importar. Um mapa do buffer de memória mostra todos os bytes em escala de cinza, de 0 (branco) até 255 (preto), com a área atualmente selecionada em verde, para auxiliar a visualização das operações sendo feitas, antes de importação.

A carga de arquivo no modal também é limitada pela área selecionada, e por isso a seleção default inicial é toda a memória. Então, sim, há dois momentos onde você pode aplicar a seleção ao ler um novo arquivo .mem para fazer carga parcial, ao escolhê-lo (carga para o buffer) e ao importar do buffer para a memória pelo botão de "Import Sel". A operação de Paste (colar) pode ser feita com repetição para criar múltiplas cópias de área já copiada, preenchendo a área destino, quando a seleção nesse momento for maior.

Para carregar de forma mais simples e rápida toda a memória de um arquivo binário, use o botão direto "Quick Load Full Mem" no centro do simulador.

Reset: O botão de Reset zera todos os registradores, reseta flags NZCV, fazendo Z=1, reseta os contadores de instruções e acessos, reseta os registradores/flags de interrupções, reseta os registradores de entrada do teclado, e apaga o display. A carga de um novo arquivo pelos botões de importar (ou Quick Load) faz um reset e também reseta os breakpoints (para facilitar rodar diretamente novos programas), mas sem apagar o display, preservando a memória do arquivo entre 0xFFDC e 0xFFFF. Para apagá-la use o botão de Reset novamente.

TEST/DEBUG
Todos recursos implementados, em fase de testes, com correção de bugs e ajuste de operação. Interrupções de teclado e timer programável implementadas, correções e ajustes sendo completados. Montadores de linha e completo implementados e atualizados, disponíveis para teste.