Resumo de operação Super-X

From Programação no MSX
Jump to navigation Jump to search

O Super-X, talvez seja um dos melhores depuradores existentes. O Desenvolvimento foi feito em 1994 pelo usuário Romi, e em 2011, o Nyyrikki implementou novas funcionalidades, além de disponibilizar o manual traduzido por JP Grobler para inglês.

Este tutorial mostra as principais funcionalidades desta poderosa ferramenta, tornando-a um pouco mais acessível para os usuários brasileiros e portugueses.

Super-X Menu

Introdução[edit]

Artigo baseado na versão 1.22, disponibilizada gentilmente pelo usuário Nyyrikki em 2011, você verificar novas versões na página dele, além de outras ferramentas igualmente úteis.

A versão 1.22, foi baseada na versão 1.2 Copyright 1994 Romi, e conta com o manual traduzido para o inglês por JP Grobler, a partir do original em japonês.

O Super-X em sua primeira versão pública foi disponibilizado por Romi em 1991, apenas como um depurador e foi aperfeiçoando o mesmo por vários anos, até que o Nyyrikki retomou o desenvolvimento, eliminando alguns bugs e alterando alguns comandos, lançando ele como uma celebração de 20 anos de existência do software.

Alguns dos recursos existentes são a virtualização de memória, que permite acompanhar a execução de um programa sem alterar um único byte na memória real, poder para depurar a pilha, acesso a toda a memória e dispositivos de I/O, assembler básico, poderoso disassembler, editor de caracteres, facilidade para misturar códigos em Assembly com BASIC, além de muitos outros.

As melhorias implementadas pelo Nyyrikki incluem, código fonte compatível com o sjasm, possibilidade de exportar código "in-line" para o X-BASIC (MSX-BASIC kun compiler), documentação em inglês, os comandos LD e SV suportam offset e carregamento para qualquer área da memória, offsets globais (ASCII, DUMP, CHAR, DISASM), matemática lógica usando | (OR), ^ (XOR) e % (MOD), além da eliminação de diversos bugs.

Nos links a seguir, você pode ver o Super-X em plena atividade executando tarefas diversas:

Mais detalhes podem ser vistos na página do Nyyrikki ou na página do http://www.msx.org/news/software/en/super-x-122-added-downloads MSX.ORG].

Iniciando[edit]

O Super-X vem com uma série de arquivos, mas os únicos realmente necessários para operação são: SUPER-X.BAS, SUPER-X.LDR, SUPER-X.BDY, SUPER-X.TNK. Os arquivos SUPER-X.BAT, SUPER-X-FNT e SUPER-X.DOC, além dos códigos fontes (SUPER-X.ASM e LOADER.ASM) são opcionais, sendo que o .BAT é apenas para carga no MSX-DOS, o .FNT contém as fontes em japonês, o .DOC é a documentação em formato WORD.

Para carregar o Super-X, basta comandar:

RUN "SUPER-X.BAS"

a partir do MSX-BASIC ou

SUPER-X

a partir do MSX-DOS. Segurando a tecla GRAPH, você instrui o Super-X a não carregar os arquivos SUPER-X.TNK e SUPER-X.FNT.

Após a carga, as seguintes CALLs estarão disponíveis a partir do BASIC:

  • CALL @:REM Iniciar o Super-X
    
  • CALL S:REM Funciona como atalho para CALL SYSTEM
    
  • CALL CHCPU(N):REM Troca o modo da CPU (apenas para Turbo-R), onde N=0Z80/ROM, N=1R800(ROM), N=2R800(DRAM), N=3Z80(DRAM)
    

Após iniciar, o Super-X irá mostrar um prompt (A>, B>, etc.) referenciando a unidade de disco atual, os comandos devem ser inseridos neste prompt, sendo que todos os comandos fazem distinção quanto a maiúsculas ou minúsculas.

Iniciando
Iniciando
Super-X Menu

Os parâmetros dos comandos podem ser separados por espaço " " ou vírgula ",". Exemplo:

A> D 0000 1000

ou

A> D0000,1000

são formas válidas de comando. Iniciando o comando com o caracter "?", a saída do comando será direcionada para a impressora. Exemplo:

A> ?D 0 1000

O comando acima envia um "dump" da memória a partir do endereço 0 até o endereço 1000 para a impressora.

Observação: usando um único endereço como parâmetro, geralmente abre o modo de edição de bloco, enquanto dois endereços, efetua uma listagem dos dados (sem pausa, veja Teclas Gerais para pausar).

Atalhos de Teclado[edit]

O Super-X suporta uma boa quantidade de atalhos de teclado, além disso, uma série de comandos tem comportamento alterado por algumas teclas.

Ajuda[edit]

GRAPH+SPACE - Abre a janela de Help.

Teclas Gerais[edit]

SPACE ou RETURN - Pausa a execução do comando, pressionando a tecla a execução continua (útil em listagens).

ESC ou ← Backspace - Interrompe a execução do comando.

CTRL + STOP - Na entrada de comandos/parâmetros, cancela a mesma.

Modo Interativo[edit]

Alguns recursos, como a entrada de prompt, a função de busca, o assembler, funcionam em modo de tela cheia de uma maneira muito similar o MSX-BASIC, inclusive aceitando praticamente todos os atalhos deste, destacamos os mais comuns: HOME - Move o cursor para o canto superior esquerdo da tela.

⇧ Shift + HOME - Limpa a tela e executa o HOME

CTRL + N - Move o cursor para o final da linha.

CTRL + E - Limpa a linha a partir da posição atual.

CTRL + U - Limpa toda a linhas movendo o cursor para seu início.

CTRL + F - Move o cursor para o início da próxima palavra.

CTRL + B - Move o cursor para o início da palavra anterior.

Outros Atalhos[edit]

CURSOR - Movimento do cursor.

← Backspace - Apaga o caracter anterior, retrocedendo.

⇧ Shift + SPACE - Informações sobre o endereço corrente selecionado pelo cursor.

HOME - Move o cursor para o canto superior esquerdo.

⇧ Shift + HOME - Posiciona o endereço corrente, apontado pelo cursor, como o primeiro endereço da tela.

INS - Rola uma tela para baixo.

DEL - Rola uma tela para cima.

\ ou Tab ↹ - Prompr para entrada de novo endereço.

RETURN - Modo de Menu, geralmetne mostrando opções como DUMP, modo ASCII, modo MULTI ou DISASSEMBLY.

CTRL + S - Busca por string (a mesma deve estar entre aspas duplas (")).

CTRL + F - Repete a busca para frente.

CTRL + D - Repete a busca para trás.

CTRL + Z - Reseta o offset global para 0 (pressionando novamente, desfaz a alteração).

ESC - Sai da edição.

CTRL + P - Imprime o conteúdo da tela.

CTRL + V - Copia o conteúdo da tela para a VRAM.

SELECT - Visualiza a cópia da tela enviada para a VRAM.

Endereços, Slots e Números[edit]

O Super-X usa um sistema de endereçamento extendido, que permite selecionar um endereço qualquer, de qualquer slot, primário ou expandido. O formato usado é:

[endereço]#[slot primário]-[slot secundário]

O slot padrão (selecionado pelo boot), pode ser acessado com o atalho #S ou #5, e a VRAM pode ser acessada como slot #V ou #4. Exemplos:

  • C000#3 - Endereço &HC000 do slot primário 3.
  • C000#3-1 - Endereço &HC000 do slot expandido 3.1.
  • 1000#1-3 - Endereço &H1000 do slot expandido 1.3.

O slot corrente pode ser acessado simplesmente não informando os parâmetros de Slot/Sub-Slot. Um slot se torna corrente quando é selecionado por algum dos comandos pertinentes (como Dump, ASCII, dIsassembler e asseMbly) e pode ser conferido na área de informação, situada na linha inferior da tela, conforme exemplo abaixo, e tendo como formato:

[<comando corrente>:<endereço do cursor>:<contador da pilha>] SLOT:<slot corrente> 0=<deslocamento global>
Dump
Dump de Memória

Como dito anteriormente, você pode acessar a memória VRAM basicamente da mesma maneira que a memória RAM, tomando alguns pequenos cuidados, pois o arquivo de notas fica armazenado em VRAM, assim como o arquivo de fontes japonesas, sendo que alterações nestas áreas, podem danificar as informações carregadas dos mesmos.

Por padrão o Super-X trabalha com números hexadecimais, porém numeros decimais ou binários também são aceitos, além de números negaticos, cálculos simples (com resultados dentro da faixa de 2 bytes) além de lidar com o "overflow". Adicionalmente, códigos caracteres podem ser usados no lugar de números, bastando os mesmos estar entre aspas duplas (") e tendo no máximo dois caracteres.

As operações matemáticas disponíveis são: + soma, - subtração, * multiplicação, / divisão, % módulo, | or lógico, & e lógico, ^ xor lógico. Atente apenas para o fato de o Super-X não possuir precedencia de operação relativa a operandos, a fórmulas sempre são calculadas da esquerda para a direita sem excessão. Exemplos:

CL 10-1|80H
CL 'A'&15
Calculadora
Calculando

Outras Considerações Iniciais[edit]

Variáveis usadas na depuração[edit]

Sete endereços podem serm salvos como variáveis (endereços + slot), sendo que as mesmas podem ser usadas em substituição dos endereços nos comandos, usando a forma @[número da variável]. Estas variáveis são divididas em normais e especiais.

As variáveis normais, são numeradas de 0 a 3. As variáveis especiais são @B endereço inicial, @E endereço final e @S endereço de início/tamanho.

Para armazenar um endereço numa variável, use o formato:

@<número da variável/variável>=<endereço>[#<slot>]
Variáveis
Definindo
Uso

Para mostrar o conteúdo de todas as variável, basta digitar @ no prompt de comando.

Nome do arquivo carregado[edit]

Ao usar alguma função de carga de arquivo, como LD da série F#, o nome do mesmo é copiado para a tecla de função F1.

Arquivos
Carregando
F1

Repetição de Comando[edit]

Ao pressionar RETURN numa linha de comando em branco, o comando anteriormente introduzido é mostrado, podendo ser alterado e executado.

Repetição
Repetindo

Mudar Drive Correnteo[edit]

Para mudar a unidade corrente de disco, basta usar o mesmo método do MSX-DOS, teclando A:, B:, etc.

Troca Drive
Mudando o Drive Corrente

Função de Notas[edit]

Pode-se atribuir até 512 notações a endereços, facilitando assim o trabalho de depuração. 470 notas já se encontram no arquivo "SUPER-X.TNK", que é carregado para a área da VRAM entre os endereços &H8000 e &HFFFF. Estas notas previamente carregadas incluem labels para a BIOS, área de trabalho, HOOKs, portos I/O dentre outros (porém, atualmente apenas em Japonês).

Caso o conteúdo da VRAM seja alterado, os dados destas notas são destruídos, e para recarrega-los novamente, basta dar o comando iL.

O arquivo de notas tem o seguinte formato:

  • Total de notas ainda disponíveis: primeiros 2 bytes
  • + 512 * endereço (2 bytes) slot (1 byte) tipo (1 byte) nota (60 bytes)
  • Totalizando 32770 bytes (32 Kbytes).

Pilha de Depuração[edit]

Quando em modo de disassembly, pode-se seguir um jump/call usando a tecla CURSOR DIREITA, para retornar ao ponto inicial, usa-se CURSOR ESQUERDA. Até 16 jumps/calls podem ser armazenados (tanto o slot quando o endereço e o cursor são armazenados)

Por exemplo, durante o processo de depuração, temos uma linha do tipo

CALL 0134h

, pressionando CURSOR DIREITA, irá ser mostrado

P>>[0134#_-_]

como base de endereço, pode-se continuar a depuração e análise normalmente, quando pressionar CURSOR ESQUERDA você volta imediatamente para o endereço o qual chamou 0134h inicialmente.

Comandos Básicos[edit]

Existem basicamente cinco modos diferentes que você pode interagir com o Super-X, você pode trocar o modo de interação rápidamente usando a tecla RETURN, para chamar a tela de menu, e usar a tecla CURSOR ou SPACE para selecionar o comando.

  • CURSOR CIMA - Modo Dump.
  • CURSOR ESQUERDA - Modo ASCII.
  • SPACE - Modo caractere (fonte / sprite / binário)
  • CURSOR DIREITA - Modo Assembly
  • CURSOR BAIXO - Modo Disassembly
Operações
Menu
Disassembly

Dump / Edição de memória (HEXA)[edit]

Comando:

D<endereço inicial>[#<slot>] [,<endereço final>[,<nome de arquivo>]]

Função: Mostrar um dump de memória na tela (ou impressora, se precedido de "?", ou arquivo se informado)

Além de mostrar, abre o modo para edição de memória, com as seguintes teclas tendo função especial.

  • 0-F - Entrada hexadecimal de valores.
  • " - Entrada ASCII.
  • ⇧ Shift+CURSOR CIMA - Rola uma linha para cima.
  • ⇧ Shift+CURSOR BAIXO - Rola uma linha para baixo.
  • @ - Repete o byte anterior.
Dump
Dump de Memória Hexadecimal

Dump / Edição de memória (ASCII)[edit]

Comando:

A<endereço inicial>[#<slot>] [,<endereço final>[,<nome de arquivo>]]

Função: Mostrar uma listagem em ASCII da região de memória selecionada

Dump
Dump de Memória Texto

Edição / Listagem disassembly[edit]

Comando:

I<endereço inicial>[#<slot>] [,<endereço final>[,<nome de arquivo>]]

Função: Gerar uma listagem disassembly da região de memória selecionada.

Além das teclas padrão, as seguintes tem caracteristicas diferenciadas:

  • DEL - Volta 32 bytes na listagem.
  • ⇧ Shift+*SPACE - Mostra informação sobre o comando apontado pelo cursor.
  • CURSOR CIMA - Move o cursor para o byte ou comando anterior.
  • CURSOR BAIXO - Move o cursor para o próximo byte ou comando.
  • CURSOR DIREITA - Segue um Jump/Call, marcando o ponto na pilha de depuração.
  • CURSOR ESQUERDA - Retorna para o ponto anterior ao Jump/Call corrente, removido da pilha de depuração.
  • CTRL+*O - Armazena o deslocamento global, relativo ao deslocamento atual.
Dump
Dump Assembly

Edição / Listagem de Caracteres[edit]

Comando:

H<endereço inicial>[#<slot>] [,<endereço final>[,<nome de arquivo>]]

Função: Mostra a memória no formato de definição de caracter ou sprite (edição binária).

Os dois bytes após o cursor referem-se ao código Kanji. Uma janela 16x16 é mostrada e além dos atalhos padrão, as seguintes teclas tem siginificado especial:

  • SPACE - Alterna entre 1 e 0 o bit sob o cursor
  • ⇧ Shift+SPACE - Mostra informação sobre o endereço sob o cursor.
  • U - Troca a linha sob o cursor com a linha imediatamente anterior, se for a primeira linha, troca com a última.
  • D - Troca a linha sob o cursor com a linha imediatamente posterior, se for a última linha, troca com a primeira.
  • R - Desloca a linha para a direita em 8 bits, caso o cursor esteja antes do bit 7 ou após o bit 8, caso contrario desloca em 16 bits.
  • L - Desloca a linha para a esquerda em 8 bits, caso o cursor esteja antes do bit 7 ou após o bit 8, caso contrario desloca em 16 bits.
  • V - Inverte os 8 bits do byte (primeiro ou segundo da linha) apontado pelo cursor.
  • O - Liga todos os bits do byte (primeiro ou segundo da linha) apontado pelo cursor.
  • F - Desliga todos os bits do byte (primeiro ou segundo da linha) apontado pelo cursor.
  • C - Desliga todos os bits do range 16x16 corrente.
Caracter
Edição de Caracteres