O Super-X, talvez seja um dos melhores debugadores 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.
Introdução
Artigo Original: Wilson Pilon
Este tutorial, baseado na versão 1.22, mostra as principais funcionalidades desta poderosa ferramenta, tornando-a um pouco mais acessível para os usuários brasileiros e portugueses. Você pode 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 debugador 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 debugar a pilha, acesso a toda a memória e dispositivos de I/O, assemblador básico, poderoso desassemblador, 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:
- Customização de Fontes.
- Forçar jogos da Konami a serem executados em inglês a partir de máquinas Turbo-R.
- Edição de arquivos DOS.
Mais detalhes podem ser vistos na página do Nyyrikki ou na página do MSX.ORG.
Iniciando
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.BAT"
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 @
: Iniciar o Super-X.CALL S
: Funciona como atalho para CALL SYSTEM.CALL CHCPU(N)
: Troca o modo da CPU (apenas para Turbo-R), onde N=0→Z80/ROM, N=1→R800(ROM), N=2→R800(DRAM), N=3→Z80(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.
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 caractere '?', 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
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
- [GRAPH]+[SPACE] - Abre a janela de Help
Teclas Gerais
- [SPACE] ou [RETURN] pausa a execução do comando, pressionando novamente a tecla, a execução continua (por exemplo, ao listar algo na tela)
- [ESC], [BackSpace] interrompe a execução do comando
- [CTRL]+[STOP] na entrada de comandos/parâmetros, cancela a mesma
Modo Interativo
Alguns recursos, como a entrada de prompt, a função de busca, o assemblador, funcionam em modo de tela cheia, de uma maneira muito similar ao MSX-BASIC, inclusive aceitando praticamente todos os atalhos deste. Dentre os atalhos mais comuns, destaco:
- [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, da posição do cursor até o final da mesma.
- [CTRL]+[U] - Limpa toda a linha, movendo o cursor para o início da mesma.
- [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
Outros comandos possuem seus próprios atalhos que serão descritos em suas próprias sessões, mas de maneira geral, temos as seguintes teclas.
- [CURSOR] - Movimento do cursor.
- [BackSpace] - Apaga o caractere 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] - Prompt para entrada de novo endereço.
- [RETURN] - Modo de Menu, geralmente 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
O Super-X usa um sistema de endereçamento estendido, 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>
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 números decimais ou binários também são aceitos, além de números negativos, 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 precedência de operação relativa a operandos, a fórmulas sempre são calculadas da esquerda para a direita sem exceção.
Exemplos:
CL 10-1|80H
CL 'A'&15
Outras Considerações Iniciais
Variáveis usadas na depuração
Sete endereços podem ser 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>]
Para mostrar o conteúdo de todas as variável, basta digitar @ no prompt de comando.
Mostrando variáveis
Nome do Arquivo Carregado
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.
Repetição de Comando
Ao pressionar [RETURN] numa linha de comando em branco, o comando anteriormente introduzido é mostrado, podendo ser alterado e executado.
Mudar o Drive Corrente
Para mudar a unidade corrente de disco, basta usar o mesmo método do MSX-DOS, teclando A:, B:, etc.
Função de Notações
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
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.
NTTodos estes conceitos iniciais serão melhores explicados ao longo do tutorial, estão no começo apenas para servir como referência rápida.
Comandos Básicos
Existem basicamente cinco modos diferentes que você pode interagir com o Super-X, você pode trocar o modo de interação rapidamente 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 / binario)
- [CURSOR DIREITA] - Modo assembly
- [CURSOR BAIXO] - Modo disassembly
A partir da linha de comando, temos os seguintes modos.
Edição / Listagem de dump de memória em hexadecimal
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.
Edição / Listagem de dump de memória em ASCII
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.
Edição / Listagem disassembly
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 características 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
Edição / Listagem de Caracteres
Comando:
H<endereço inicial>[#<slot>] [,<endereço final>[,<nome de arquivo>]]
Função: Mostra a memória no formato de definição de caractere 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 significado especial:
- [ESPACO] - Alterna entre 1 e 0 o bit sob o cursor
- [SHIFT]+[ESPACO] - 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
Exemplo H1BBF#0 (obviamente, os comandos de edição não funcionam aqui pois estamos na ROM):
Entrada de comandos Assembly
Comando:
M<endereço inicial>[#<slot>]
Função: Entra no modo interativo de edição assembly, mostrando o endereço informado e aguardando a entrada de comandos. O endereço é automaticamente incrementado quando um comando tem sua entrada bem sucedida. Comandos do R800 são normalmente aceitos.
Estando no modo interativo, podemos informar I<número de linhas>] para obter uma listagem de N linhas (20 se o número de linhas não for informado), como o comando LIST do MSX-BASIC. Ainda neste modo, podemos usar as setas cursoras para nos deslocarmos até uma entrada e alterar a mesma, de modo semelhante a edição de programas em MSX-BASIC.
Neste modo, todas as teclas padrão de edição estão disponíveis, adicionalmente existem modos alternativos de entrada de comandos, seguindo o padrão:
<endereço>[#<slot>][<tipo>[<data1>,<data2>,...,<datan>]]
onde tipo pode ser:
- . 1 byte hexadecimal (ex: C000.CD,4D,00)
- : 2 bytes hexadecimal (ex: C000:1234,ABCD)
- ; valor numérico em dois bytes (ex: C000;"A"*100,18200|11b)
- [ valor numérico em um byte (ex: C000[100,"#")
- " cadeia de caracteres (ex: C000'O Super-X e fora de serie!')
- A saída com [ESC] tem comportamento diferenciado neste comando, remetendo aos comandos de menu, para voltar a linha de comando use [CTRL]+[STOP]
Também podemos usar as variáveis do debugger (descritas acima) quando uma entrada de 16 bits é necessária.
Outros Comandos
Listagem MSX-BASIC
Comando:
BL<número da linha>
Função: Exatamente como o LIST do MSX-BASIC, lista o programa que consta na área de BASIC do sistema, caso esta área (normalmente a partir de &H8000) contenha outra coisa que não um programa em BASIC, a listagem se torna instável.
Transformar Teclado Destacado em Teclado Hexadecimal
Comando:
TK<número>
Função: Para máquinas que contam com teclado numérico destacado (como o Expert ou o NMS8250), transforma o bloco numérico em um teclado hexadecimal, transformando as teclas [+], [-],[/],[*],[,],[.] nos dígitos hexadecimais 'A', 'B', 'C' , 'D', 'E', 'F'. Esta composição depende do teclado e do parâmetro <número> passado pelo comando TK (<número> pode variar de 1 a 4), gerando diversas combinações.
Transferência de Bloco de Memória
Comando:
BT<endereço inicial>[#<slot>], <endereço final>, <endereço de destino>[#<slot>]
Função: Transfere os bytes contidos entre o endereço inicial e final para o endereço de destino, mesmo que entre slots diferentes.
Limpeza de Tela
Comando:
CLS
Função: Limpa a tela, da mesma maneira que o atalho [SHIFT]+[HOME].
Troca de Diretório
Comando:
CD <nome do diretório>
Função: Este comando troca o diretório corrente pelo especificado, porém só funciona em MSX-DOS 2
Relocação de Programa
Comando:
RT<endereço inicial>[#<slot>],<endereço final>,<endereço de destino>[#<slot>]
Função: Este comando transfere um programa em linguagem de máquina de uma área para outra. Todos os ponteiros de memória dentro da área serão atualizados e suas alterações listadas em tela.
Preenchimento de Memória
Comando:
FL<endereço inicial>[#<slot>],<endereço final>,<valor>
Função: Preenche a área de memória indicada pelos endereços com o byte indicado em valor.
Comparação de áreas de Memória
Comando:
CM<endereço inicial>[#<slot>],<endereço final>,<endereço inicial da comparação>[#<slot>][,S]
Função: Compara duas áreas de memórias (mesmo em segmentos diferentes) mostrando suas diferenças na tela. O parâmetro S serve para listar os valores idênticos e não os diferentes.
Busca de Dados
Comando:
FD<endereço inicial>[#<slot>],<endereço final>
Função: O comando solicita a entrada de uma string e busca na área de memória especificada todas as ocorrências da mesma. O formato da string segue o mesmo padrão do comando M, porém JUMPs relativos não podem ser encontrados (JR e DJNZ).
Checksum
Comando:
TS<endereço inicial>[#<slot>],<endereço final>
Função: Calcula o checksum do segmento de memória informado.
Comando:
CS
Função: Muda o tipo do checksum de 'NORMAL' onde apenas o bytes são somados, para o modo '+ADR' onde além dos bytes, o endereço inicial da área também é somado. O comando apenas muda de status, sendo assim, repetir o mesmo comando volta ao estado anterior.
Execução de Programa na Memória
Comando:
GO<endereço>[#<slot>]
Executa o programa em linguagem de máquina a partir do ponto definido pelo endereço.
Comando:
TR<endereço>
Função: Executa uma única instrução por vez e mostra os registros após as devidas alterações. As teclas [BACKSPACE] ou [ESC] encerram a execução.
Uma dica interessante, quando devemos depurar um programa que altera a tela, podemos preceder o comando TR com '?', desta forma a saída do TR será dada pela impressora, facilitando em muito o processo.
Verificação / Edição de Registros
Comando:
RG[*]|[+]|[<nome do registro>,<valor>
Função: Mostrar e editar o estado dos registros A, B, C, D, E, F, H, L, A', B', C', D', E', F', H', L', AF, BC, DE, HL, AF', BC', DE', HL', IX, IY, IXH, IXL, IYH, IYL, SP, BP e PC.
Note que o registrador BP não faz parte do Z-80, ele é usado pelo Super-X como Break Point de execução, usado na depuração.
RG sem parâmetros lista todos os registradores, RG * limpa todos os registradores exceto a pilha, RG+ reseta a pilha para o endereço inicial e no formato RG <registro>,<valor> altera o registro com o valor especificado.
Com o BP setado para um endereço (em RAM), quando a execução do comando GO encontrar o endereço de BP (desde que ambos no mesmo slot), a execução é suspensa, os registros são salvos e o PC é setado para o BP e a pilha não é afetada.
Obviamente são exigidos os cuidados normais ao alterar o registro SP, principalmente por ele alterar diretamente a pilha, lembrando que o endereço não pode ser inferior a &H80FF.
Informações da Máquina
Comando:
CK
Função: Mostra informações sobre o estado atual da máquina, é basicamente a mesma tela exibida na entrada do programa, porém agora refletindo as alterações feitas com o uso dos recursos do programa.
- Slot - Qual slot se encontra ativo atualmente.
- RAM - Onde se encontra a RAM do sistema.
- X - Localização do Super-X na memória.
- MAIN-ROM - Localização da BIOS principal.
- SUB-ROM - Localização da BIOS secundária.
- FDC-ROM - Localização da BDOS.
- EXP - Indica a presença de slots expandidos para cada slot principal (0 expandido, /* não expandido).
- DISK - Unidades de disco disponíveis no sistema.
- STACK - Ponteiro da pilha.
- MAPPER SUPPORT - Indica se existe rotina de suporte à mapper (DOS2 entre outros), caso não exista mapper ou o gerenciador, as informações não são exibidas.
- MAPPER RAM - Indica os slots e os segmentos de mapper disponíveis para o sistema.
- MAPPER - Mostra os segmentos selecionados de mapper para cada página da RAM.
Definir Atalhos para Teclas de Função
Comando:
SF[<número da tecla(valor numérico)>,<cadeia de caracteres>]
Função: Redefine as teclas de função do MSX, de F1 a F10.
Quando um valor numérico é informado entre "[" e "]", o mesmo é usado como um código da tabela ASCII (ex: [65] = A). Introduzindo SF sem parâmetros, todas as teclas são reinicializadas para seus valores padrão.
Cálculos de Expressões
Comando:
CL<expressão>
Função: Retorna os valores binário, hexadecimal e decimal provenientes do cálculo de uma expressão dada.
Busca de String em Programas MSX-BASIC em memória.
Comando:
BF
Função: Após introduzir o comando, o Super-X solicita uma cadeia de caracteres, e em seguida busca ocorrencias da mesma dentro da listagem em BASIC que atualmente está em memória. O programa busca tanto cadeias alfanuméricas, quando comandos do MSX-BASIC. Porém, se a área de programa BASIC (normalmente a partir de &H8000) contiver outra coisa que não um programa BASIC, os resultados poderão ser os mais diversos possíveis, causando inclusive instabilidade no programa.
Seleção de Segmentos de Mapper
Comando:
PP[<página>,<segmento>]
Função: A página informada, após a execução do comando, aponta para o segmento de mapper indicado, permitindo a troca dos segmentos para uso. Em teoria até 255 segmentos podem ser acessados, porém, deve-se respeitar a quantidade de segmentos que a máquina tem a disposição no momento.
O comando somente é executada se existir alguma rotina de suporte a memória mapeada (como as rotinas do MSX-DOS 2). Caso não exista tal rotina, os segmentos devem ser selecionados com o comando PO.
PP sem parâmetros inicializa a mapper.
Super Disassembler / Exportação de Dados
Comando:
SD <nome de arquivo>,<endereço inicial>[#<slot>],<endereço final>[,<tipo de exportação (B|D|X)>]
Função: Por padrão o programa gera uma listagem disassemblada em disco, em arquivo texto especificado, da região de memória indicada, porém os dados podem ser exportados de outras maneiras usando o parâmetro tipo de exportação, onde B gera linhas DEFB apropriadas para assembladores (DEFB 3EH,80H,0CDH,80H,01H,0C9H), X gera códigos em linguagem de máquinas "inline" para serem usados dentro do X-BASIC (10001 "I&h3E,&H80,&HCD,&H80,&H01,&HC9), D gera linhas DATA para o MSX-BASIC (10001 DATA 3E80CD8001C9)
No caso de linhas DATA do MSX-BASIC, a seguinte rotina pode ser usada para carregar o programa em linguagem de máquina para a memória:
10 AD=&HC000
20 READ A$:FORI=0 TO LEN(A$)\\2-1:POKE AD+I,VAL("&H"+MID$(A$,I*2+2,2)):NEXT I
30 DATA 3E80CD8001C9
Lista de Arquivos / Espaço Ocupado do Disco
Comando:
FS<letra da unidade>
Função: Lista os arquivos contidos no disco corrente, ou no disco especificado pela letra da unidade. Caso o DOS2 esteja disponível, você pode informar o diretório e uma máscara de arquivo após o comando.
Comando:
CI<letra da unidade>
Função: Mostra o número de cluster utilizados e o total de cluster do disco.
Definição de Deslocamento Global
Comando:
OF[<offset>]
Função: Define um endereço de deslocamento que será aplicado a todas as indicações de endereço dentro do Super-X, incluindo outros deslocamentos e rotinas de disco (deslocamento=offset). Apesar da necessidade de cuidado a ser tomado para evitar problemas com o sistema operacional e o hardware, o comando é muito útil para depurar em outro endereço programas que são executados em um endereço em particular que geraria conflito com o Super-X ou a BIOS. Para entender melhor, a partir da definição de um offset, o endereço 0 da máquina passa a ser o endereço informado pelo parâmetro offset. O comando sem parâmetros devolve o deslocamento para o endereço 0, como é padrão após o boot.
Um exemplo prático, se necessitarmos depurar o "command.com" que é executado em &H100, conflitaria com as rotinas da BIOS, podemos mudar o offset para 8100 (OF 8100), carregar o "command.com" (LD#command.com,100), a partir deste momento, a depuração pode ser feita normalmente (I 100).
Mudar o Modo de CPU para o MSX Turbo-R
Comando:
CU[<número>]
Função: Chaveia o modo de CPU do processador R800 existente no Turbo-R, se não for informado parâmetro, o modo corrente é mostrado, e os parâmetros validos podem ser 0 modo Z80, 1 modo R800 (ROM), 2 modo R800 (DRAM) ou 3 modo Z80 (DRAM).
Mudar a Cor da Tela
Comando:,
CO[<cor de letra>],[<cor de fundo>],[<cor de borda>]
Função: Mudar a cor da tela, pelo menos um parâmetro deve ser informado.
Operações Matemáticas
Comando:
CL<expressão>
Função: Efetuar cálculos simples, apresentando a resposta em Hexa, Decimal (com e sem sinal), Binário.
Mostrar Arquivos em Tela
Comando:
TP<nome do arquivo>
Função: Mostra o arquivo texto na tela. Caso o arquivo não seja texto, o programa se torna instável.
Os atalhos de teclado são:
- [RETURN] ou [SPACE] - Pausa na impressão.
- [ESC] - Encerra a listagem.
Funções de Texto Kanji/Japonês
Comando:
KR<endereço>[#slot]
Função: Mostra o conteúdo da memória usando a fonte de caracteres japoneses (ASCII 128-255, 0-127 são os caracteres normais)
Comando:
KT<nome de arquivo>
Função: Mostra o arquivo indicado usando os caracteres Kanji.
As teclas de atalho diferenciadas para este comando são:
- [RETURN] ou [SPACE] - Pausa na exibição.
- [ESC] - Encerra.
Comando:
KL[<letra de unidade>]
Função: Recarregar o arquivo de fontes japonesas ("SUPER-X.FNT") no slot da VRAM.
Carregar e Salvar Arquivos /Setores em Disco
Comando:
SV<nome de arquivo>,<endereço inicial>[#<slot>],<endereço final>,[<endereço de execução>[,<deslocamento>]]
Função: Trabalha de maneira similar ao comando BSAVE do MSX-BASIC, porém permite especificar um offset para a leitura dos dados, onde os endereços do cabeçalho são afetados para o BASIC.
Comando:
LD<nome de arquivo>[,<deslocamento>[#<slot>]]
Função: Comando de carga, similar ao BLOAD do MSX-BASIC.
Comando:
S#<nome de arquivo>,<endereço inicial>[#<slot>],<endereço final>
Função: Faz um dump da memória indicada em disco, despejando os dados no arquivo especificado. Diferentemente dos comandos SV e LD, estes comandos são do tipo RAW, ou seja, dados sem header.
Comando:
L#<nome de arquivo>,<endereço de carga>[#<slot>]
Função: Carrega o arquivo RAW especificado do disco para a região de memória indicada.
Comando:
S%[<unidade de disco>:]<setor inicial(valor numérico)>,[<setor final>],<endereço>[#<slot>]
Função: Salva o conteúdo especificado pelo endereço de memória, num setor específico do disco. Se não for informado o setor final, apenas um setor será gravado.
Comando:
L%[<unidade de disco>:]<setor inicial(valor numérico)>,[<setor final>],<endereço>[#<slot>]
Função: Carrega o conteúdo dos setores especificados no endereço de memória indicado. Se não for informado o setor final, apenas um setor será carregado.
Uso do Sistema de Notas de Endereços Especiais
Comando:
iM<endereço>,<tipo do slot>,<tipo do dado>
Função: Adiciona uma nova nota ao arquivo de notações do Super-X. Estas notas facilitam o trabalho de depuração, visto que pode-se associar endereços aos nomes comumente conhecidos.
O tipo de slot pode ser 0 Geral, 1 Main ROM, 2 Sub ROM, 3 BDOS, 4 RAM e o tipo de dado pode ser 0 Geral, 1 BIOS, 2 área de Trabalho, 3 Dado, 4 Porto, 5 Matemático, 6 Tecla e 7 HOOK.
Para a edição, os seguintes atalhos especiais estão disponíveis:
- [CURSOR] - Move o cursor pela tela.
- [RETURN] - Salva a nota no arquivo de notas.
- [ESC] - Cancela a operação.
Selecionado o slot da VRAM:
Comando:
iC<endereço>
Função: Verifica se existe um arquivo de nota no endereço informado.
Comando:
iL<unidade de disco>
Função: Carrega o arquivo de notas existente na unidade especificada, ou na unidade corrente caso a mesma não for informada.
Comando:
iS<unidade de disco>
Função: Salva o arquivo de notas na unidade especificada, ou na unidade corrente caso a mesma não for informada.
Leitura e Escrita em Portos de Dados
Comando:
PI<porto>
Função: Lê um byte do porto de I/O especificado.
Comando:
PO<porto>
Função: Escreve um byte no porto de I/O especificado.
Encerrando o Super-X
Comando:
QT
Função: Retorna ao BASIC. O Super-X continua carregado em memória, assim como o programa em BASIC que existia antes da chamada _@ está preservado (caso nada tenha sido alterado na região que contém o programa em BASIC). Deste modo fica facilitado o trabalho de misturar rotinas BASIC com Assembly.
Prática
Até agora, basicamente foi mostrado o conteúdo do manual em português e um pouco melhor agrupado que a versão em inglês. Deste ponto em diante, serão mostrados alguns exemplos práticos de como usar o Super-X. Esta página estará em constante manutenção, sempre adicionando novos exemplos conforme forem surgindo. Para iniciar, vamos a uma execução prática de um exemplo do livro linguagem de máquina para MSX usando o Super-X ao invés do monitor descrito no livro.
Usando o Super-X como Programa Monitor para o Livro Linguagem de Máquina
Logo no primeiro capítulo, após a listagem do programa monitor (página 19), o livro sugere um pequeno teste, usando os recursos de edição e dump de memória, vamos ver como fazer o mesmo exemplo a partir do Super-X.
é solicitado a entrada dos seguintes dados (A4, B7, 04, 12, 06, 71, FD, A1, 00, CE) em &HC000 a partir do comando M (do monitor).
Para efetuarmos o procedimento, antes devemos carregar o Super-X e em seguida chamar o programa, com os seguintes comandos, a partir do MSX-BASIC:
RUN "SUPER-X.BAS"
CALL @
Depois informamos o seguinte comando, no prompt do Super-X, para abrir a tela de edição de memória no endereço &HC000.
D C000
A partir deste ponto, basta informarmos os códigos hexa do livro um após o outro.
O programa pede para dar um DUMP em seguida usando o comando D &HC000, podemos usar o próprio comando D do Super-X acima, pois ele serve tanto para visualização quanto para edição.
O livro prossegue com listagens sempre da mesma forma, dispostas em colunas, onde temos, respectivamente, o endereço corrente, os códigos do comando e parâmetros, os mnemonicos e seus parâmetros e um comentário no final. O Super-X não suporta comentários, para isso você pode usar outro assemblador (veja tutoriais sobre o GEN80, o M80/L80, o Mega Assembler e o Compass). Mas podemos efetuar uma parte deste procedimento usando o comando I.
Por exemplo, na página 28 temos o seguinte programa:
C000 2600 ld h,00H ;carrega H com 0
C002 1E2A ld e,2ah ;carrega e com 2Ah
C004 44 ld b,h ;copia h em b
C005 4B ld c,e ;copia e em c
C006 C9 ret ;volta ao BASIC
Podemos entrar com estas informações de duas maneiras distintas, via o comando D e informando os códigos (como fizemos no exemplo anterior) ou usando o comando M usando os mnemonicos com a seguinte sintaxe:
M C000
A partir deste ponto, podemos informar os mnemonicos. Lembrando que o Super-X, neste comando, trabalha por padrão com números decimais, para trabalharmos com hexadecimais, devemos terminar o valor com H, e caso o valor inicie com uma letra, devemos colocar um 0 adicional à esquerda do mesmo. Veja como ficaria a entrada usando este método.
Em seguida podemos usar o comando I para termos uma listagem muito próxima da apresentada pelo livro.
I C000
Outra questão é que, a não ser por programas que tem resultado em tela ou devolvem algum valor para o MSX-BASIC, em momento algum temos os resultados dos programas, nem mesmo existe a possbilidade de uma execução passo a passo para ver na prática a explicação que o livro propõe. Porém com o Super-X isso é perfeitamente possível usando comandos como TR e RG. Vamos, executar passo a passo o mesmo programa anterior, com o comando:
TR C000
O comando lista os registradores e para na primeira instrução (LD H,00H), pressionando [RETURN] executamos esta instrução, os registradores são mostrados novamente refletindo a alteração, e o programa para na próxima instrução (LD E,2AH), podemos repetir o processo assim até o comando RET, quando podemos pressionar [CTRL]+[STOP] para interromper o procedimento.
Se quisermos ver o efeito do comando LD H,00H (que aparentemente não fez nada, pois o registro H já continha 0), podemos editar o registro H antes de executar o comando, assim presenciando a alteração a partir do comando TR. Para tanto, usamos:
RG H,41H
e em seguida
TR C000
e processamos a instrução LD H,00H, percebendo assim a alteraçao do registro.
Outros exemplos em breve...
Documentação Oficial
Artigo Original: Romi e NYYRIKKI, Revisão: Wilson Pilon
SUPER-X version 1.22 documentation
SUPER-X version 1.2 Copyright 1994 Romi
Unofficial SUPER-X version 1.22 Made By: NYYRIKKI (2011)
Forewords
SUPER-X is the best monitor & debugger in MSX history. Tremendous power is shown in developing, analysing and debugging of a machine language program. This fan version is expanded from the official version. I've been trying to expand the debugging possibilities while still keeping the original look & feeling. Some clear bugs have been removed and some commands have been changed. Unfortunately I have not been able to contact Romi who is the original author of this program.
I want to thank JP Grobler for making the English translation from original Japanese documentation. This up to date documentation would not exists without his previous efforts. The original Japanese documentation does not anymore ship with Super-X as I have no way to keep it updated as I totally lack Japanese skills.
Development of Super-X started 20 years ago, so this version can now be seen as kind of birthday version!
NYYRIKKI - April 2011
List of files
At least these seven files should be delivered with the program package:
- 'SUPER-X.BAT' Batch file for DOS
- SUPER-X.BAS' Basic file that bloads 'SUPER-X.LDR'
- 'SUPER-X.LDR' RAW Loader - binary file
- 'SUPER-X.BDY' SUPER-X itself
- 'SUPER-X.TNK' Note File (description later). If it is on the disk, it is loaded to the VRAM
- 'SUPER-X.FNT' Japanese character font file. (Optional)
- 'SUPER-X.DOC' This file
Loading SUPER-X
From BASIC type:
RUN "SUPER-X.BAS"
From DOS type:
SUPER-X
You can skip TNK and FNT file loading by holding GRAPH down.
Added commands to BASIC
- CALL @: Start Super-X
- CALL S: Can now be used instead of CALL SYSTEM
- CALL CHCPU (N): Change CPU (MSX tR only) N = 0 Z80 (ROM) N = 1 R800 (ROM) N = 2 R800 (DRAM) N = 3 Z80 (DRAM)
Basic knowledge
In this documentation we use the following formatting:
- < … > required parameter
- [ … ] optional parameter
- { … } keyboard button
Before we start this is the basic knowledge you should have:
- When SUPER-X is started a summary of the machine's info will be displayed and a command prompt appears ('A:' or 'B:' etc)
- Commands are entered after the prompt
- The prompt indicates the current active drive (like DOS)
- All commands are case sensitive
- Pressing {GRAPH} + {SPACE} opens the help window
- During command execution if you push {SPACE} or {ENTER} execution halts. If pressed for a second time execution continues
- Pressing {ESC} or {BackSpace} (or {CTRL} + {STOP} during input) ends execution of a command
- Command parameters can be separated by a blank space ' ' or a comma ',' a space between the command and the first parameter is also allowed, for easy reading / input: Example: >D 0000 1000 or A>D0000,1000
- Command functions can differ depending upon the number of parameters: One Address display block for editing / Two Addresses give a non stop list output (used mostly for printer output)
Command line, search and assembly input modes use full screen editor that works like built in MSX-BASIC editor. You can move around with cursors and use same keyboard shortcuts including function keys. Here is list of some of the most important BASIC & Super-X common keyboard shortcuts in these modes:
Interactive mode keyboard shortcuts:
- {HOME} Move cursor to upper left corner
- {SHIFT} + {HOME} Clear screen and move cursor to upper left corner
- {CTRL} + {N} Move cursor to end of line
- {CTRL} + {E} Clear end of the line starting from cursor
- {CTRL} + {U} Clear whole line and move cursor to beginning of line
- {CTRL} + {F} Move cursor to start of next word
- {CTRL} + {B} Move cursor to start of previous word
Other basic commands have their own keyboard shortcuts. The details / exceptions have been explained under each command, but generally the logic goes like described in table below.
General keyboard shortcuts:
- {cursor keys} Cursor movement
- {BackSpace} Cursor one character back
- {SHIFT}+{SPACE} Information of the address at the cursor
- {HOME} Moves cursor to top left
- {SHIFT}+{HOME} Changes the display address to the current cursor position
- {INS} One screen down
- {DEL} One screen up
- {\} or {TAB} Input displayed address
- {ENTER} Command menu mode
- {CTRL}+{S} Search for data. The command waits for the search string. See FD command
- {CTRL}+{F} Repeat search forward (The string entered above is searched)
- {CTRL}+{D} Repeat search backward
- {CTRL}+{Z} Reset global offset to zero (Pressing again will undo the reset)
- {ESC} Exits editing
General information about SUPER-X
Address with slot assignment
- Format: [address] # [primary slot number] - [extended slot number]
- Example: Address 1234h in primary slot 3: 1234#3
- Example: Address 1234h in slot 3-1: 1234#3-1
- Example: Address 1234h in slot 1-3: 1234#1-3
- The normal (boot up) slot state can be chosen with #S or #5
- The VRAM slot can be chosen with #V or #4
The current slot
- If the slot number is left out of an address the current slot is assumed
- The current slot is the slot last selected via a basic command (Dump, ASCII, dIsassembler and asseMbly input)
- The basic commands change the active slot if specified in the address. You can see currently active slot by looking information area.
The VRAM slot
- SUPER-X can access the VRAM same way as normal ram. Select the VRAM with slot #V or #4
- Because the Japanese font is in the VRAM it might be displayed wrong if the VRAM is accessed
- Also the Note File is located in the VRAM so proceed with caution if you need these features
Numerical values
- SUPER-X input address and such are generally hexadecimal numbers, but other values are input as 'numerical values'
- SUPER-X can accept binary, decimal and hexadecimal numbers (See 'assembly input' in 'basic commands'), negative numbers, formulas (calculation range 2 bytes) and can handle overflow
- ASCII codes can be used as numbers by surrounding max 2 letters with '´'
- Please note: There is no precedence in operators. They are calculated from left to right!
- Available math operations are: + add, - subtract, * multiply, / divide, % modulus (like MOD in BASIC), | logical OR, & logical AND, ^ logical XOR
Examples:
CL 10-1|80H
CL "A"&15
The information area
- At the bottom of the screen there is the information area. It holds following information:
- [<current command> : <address of cursor> : <debug stack count>] SLOT: <current slot> 0=<global offset >
Screen print / Screen shot
- {CTRL}+{P} contents of the screen is printed, {CTRL} + {V} contents of the screen is copied to VRAM
- To view captured screenshot from VRAM, press {SELECT}
Commas in inputs can be replaced with spaces
Example:
SD0,1000,FILENAME or, SD0 1000 FILENAME
Printer output of a command
Place a "?" in front of the command
Example: ?D0 100 This dumps address 0 to 100h to the screen and printer
Debugger variables
7 Addresses can be saved in variables (address + slot number)
An address in a command, can be substituted by these variables @[variable number]
Normal variables are numbered from 0 to 3. Commands store base address in variable 0
There are also 3 special variables that are set automatically by disk load functions:
- @B = Begin address, @E = End address, @S = Start address / Size
Do display content of variables, you can type "@" in command prompt
To set variable, type:
- @<variable name/number>=<address>[#<slot>]
Example:
- @0=1000#3-1 sets @0 to 1000H in slot 3-1, D@0 will dump 1000H in slot 3-1,@1=FF2 sets @1 to 0FF2H, CL @1+1 will display 0FF3H in various number formats
Loaded filename
When a file is loaded LD of L# commands, file name will be copied to Function key 1
Repeat command function
If {ENTER} is pressed on a blank command line, the previous command is echoed and can be executed or changed.
Change the current drive
Same as DOS: Type A:or B: (up to H:)
Note function
Notes can be added to addresses. The Note File is "SUPER-X.TNK"
The Note File is located from 8000H - FFFFH in the VRAM
The number of possible notes is 512.
About 470 notes is already in the file supplied with SUPER-X. It contains the main BIOS, the main work area, the main hook and the main I / the O port et cetera (Currently only in Japanese)
When contents of the VRAM are changed, the Note File is destroyed, please reload it with the iL command.
The format of the Note File:
+ 512 * total number of notes left
first 2 bytes
address 2 bytes, slot data 1 byte, type data 1 byte, explanatory data 60 bytes
= 32770 bytes (32kB)
Debug stack (Jump / call stack)
When in disassembly mode a call / jump can be followed by pressing {CURSOR RIGHT}.
{CURSOR LEFT} returns to the origin of the jump / call.
Up to 16 jumps / calls can be stored (the slot, address and cursor position are stored)
For example:
1. During disassembling editing, say there was a line, "CALL 0134h "., 2. Then when the cursor is on the line and {CURSOR RIGHT} is pressed "P>> [0134 # _-_]" will appear and the base address of disassembling editing changes to 134h when {ENTER} is pushed., 3. You can keep on analysing as normal., 4. When {CURSOR LEFT} is pressed SUPER-X returns to the address which called 0134h in the first place
Basic commands
There exists 5 different basic editor modes that you can interact with.
When you are in one of these editor modes, you can quickly change beween them:
Press {ENTER} to open the basic command window, then use the {CURSORS} or {SPACE} to choose the command.
------ {CURSOR UP} switch to Dump mode, ------|Dump|------ {CURSOR LEFT} switch to Ascii mode, |Ascii Char Multi| {SPACE} switch to Character (font / sprite / binary )mode, -----|Disasm|----- {CURSOR RIGHT} switch to asseMbly input) mode, -------- {CURSOR DOWN} switch to dIsassembly mode
From command line these modes can be accessed with following commands:
HexDump editing / Listing
D <begin address>[#<slot>][,<end address>[,<file name>]]
Gives a hex dump of the memory
All general keyboard shortcuts are available. Also following keys have special meaning on this mode:
{0} - {F} Hexadecimal data entry, {"} ASCII entry, {SHIFT} + {cursor UP / DOWN} Scrolls the page up / down, {@} Repeat previous byte
ASCII editing / Listing
A <begin address>[#<slot>][,<end address>[,<file name>]]
Gives an ASCII listing of the memory
General keyboard shortcuts are available. Most of the keys function as data input on this mode.
Example:.
To Edit #4000 in slot 3-2, A4000#3-2
Disassembly editing / Listing
I <begin address>[#<slot>][,<end address>[,<file name>]]
Gives a disassembles output of the memory
General keyboard shortcuts are available. Also following keys have special meaning on this mode:
{DEL} 32 bytes back, {SHIFT} + {SPACE} Information of the command address parameter pointed by cursor, {UP} Move cursor up (move to previous command or byte), {DOWN} Move cursor down (move to next command), {RIGHT} Follows a jump / call (push to debug stack), {LEFT} Returns to previous call / jump address (pop from debug stack), {CTRL} + {O} Set global offset (relative to current offset)
Example:. To disassemble address #4000 in slot 3-2
I4000#3-2
Character editing / Listing
H <begin address> [#<slot>][,<end address>[,<file name>]]
Displays the memory as compilation of sprite and the character font. (Binary editing)
The 2 bytes after the cursors is the Kanji character code
A graphic window of a 16x16 Font is displayed
General keyboard shortcuts are available. Also following keys have special meaning on this mode:
{SPACE} Toggles bit on or off, {SHIFT} + {SPACE} Information on the address at the cursor, {U} The data at the cursor and above is exchanged., {D} The data at the cursor and below is exchanged, {R} The data at the cursor is moved to the right. If the X position of the cursor is 7 or 8 the whole line is moved!, {L} The data at the cursor is moved to the left. If the X position of the cursor is 7 or 8 the whole line is moved!, {V} The data at the cursor is reversed, {O} All dots at the cursor are turned on, {F} All dots at the cursor are turned off, {C} Clears the whole data range
Assembly input
M <begin address>[#<slot>]
Enters interactive mode, displays address and waits for input which is written to memory. Address counter is automatically increased after successful write to memory. By default the input is assembler (R800 commands are also accepted).
When you are in interactive mode you can also type: I [<number of lines>]
This lists the following <number of lines> instructions - like basic list command
With cursor keys you can now go up and change commands or addresses. If <number of lines> is empty then 20 lines is displayed. All default editing keys are available in this mode.
You can also use this command mode to edit memory directly like this:
<address>[#<slot>] [<type sign>[<data 1>, <data 2>, ...,<data n>]]
Type sign is as follows:
. 1 byte hexadecimal example: 0000 .CD, 4d, 00, : 2 byte hexadecimal example: 0000 :1234, ABCD, ; numerical value (range 2 byte) example: 0000 ; "A" * 100 , 18200 | 11b, [ numerical value (range 1 byte) example: 0000 [100, " # ", " character string data example: 0000 " the LAUGHTER MEDITATION"
It is also ok to use debugger variables when 16bit input is required.
Example:
M@E, D000 LD HL,@B, D003 LD DE,@2, D006 LD BC,@E-@B, D009 LDIR, D00B RST 30H, D00C .1, D00D ;@S, D00F RET
Please note: This command has special exit. To exit back to command line mode, you need to press {CTRL}+{STOP}
Other commands
BASIC list
BL <line number>
LIST same as BASIC
When this command is executed and the memory area where BASIC should be stored contains other than BASIC program data the routine may be unstable
Hexadecimal keypad setting
TK <number>
Used if you have a numeric keypad on your MSX. This selects the order of ABCDEF on the keypad for hex input:
ABCDEF will be on the '+' '-' '/' '*' ',' '.' keys
A Number can be from 1 to 4 (The following table comes from NMS8250):
- * / + . , (KEYS)
D F E C A B (Number 1)(Type 1 Arrangement 1)
C A B D F E (Number 2)(Type 1 Arrangement 2)
F E D C B A (Number 3)(Type 2 Arrangement 1)
A B C D E F (Number 4)(Type 2 Arrangement 2)
Block transfer
BT <source begin address>[#<slot >],<source end address>, <destination begin address>[#<slot>]
Transfers a block of data
Clear screen
CLS
Clears the screen. You can also use {SHIFT} + {HOME} to do same thing.
Change directory
CD <name of directory>
This command requires MSX-DOS 2.
Relocate
RT <source start address>[#<slot >],<source end address>, <destination start address>[#<slot>]
This command transfers machine language program to another address. All the memory pointers that point inside transfer area will be updated and changes will be listed to screen.
Filling memory
FL <begin address>[#<slot >],<end address>,<value>
Fills memory with a single value.
Memory comparing
CM <begin address>[#<slot>],<end address>,<compare begin address>[#<slot>][,S]
By default differences are listed.
"S" switch lists similar values
Data searching
FD <begin address>[#<slot>], <end address>
This command lists all memory addresses where searched can be found.
Command asks for search string input which can be same as in M command although relative jump (JR and DJNZ) can not be searched. Search can be terminated with the {BS} or {ESC} key if needed.
Checksum type
CS
Changes checksum type (toggle)
"NORMAL" adds all the bytes together, "+ ADR" adds start address + all the bytes together
Calculate checksum
TS <begin address>[#<slot>], <end address>
The checksum of the memory segment calculated.
Execution of program in memory
GO <address>[#<slot>]
Executes machine language program from defined memory address. For break point information, see RG-command.
Registers
RG Displays all the resisters., RG * All areas other than stack are cleared., RG + The stack is reset to the start address., RG , Register is changed to the new value.
Supported register names: A, B, C, D, E, F, H, L, A", B", C", D", E", F", H" , L", AF, BC, DE, HL, AF", BC", DE", HL", IX, IY, IXH, IXL, IYH, IYL, SP, BP and PC.
Please note: When the SP is changed (the stack pointer), the stack of the system changes! Stack pointer can not be set below 80FFH.
The BP (break point) is not a CPU register, but can be used for debugging.
If a GO command executed in the current slot and the BP address is reached, the program execution stops! Registers are saved, PC (the program counter) changes to the BP address and the stack stays the same. BP address can only be in the RAM.
Trace
TR <address>
Executes one instruction at a time and displays the registers afterwards.
[ESC] or [BS] quits
When printer output is specified ( A>?TR ) the trace results are printed - used for tracing programs which alter the screen.
Machine check
CK
Returns information on the machine. This information is printed to screen also when Super-X is started.
SLOT Slot which is currently active., RAM System RAM slot, X Location of Super-X in memory., MAIN-ROM Location of main ROM in memory., SUB-ROM Location of SUB-ROM (or EXT-ROM) in memory., FDC-ROM Slots of floppy disk conrollers., EXP Presence of expansion of each basic slot (o = it is expanded, / * = it is not)., DISK Drive names that are available., STACK Stack pointer., MAPPER SUPPORT If a mapper support routine (DOS2 etc) is not found mapper details are not printed., MAPPER RAM Slots and available RAM segments (mapper pages) listed., MAPPER: Selected segments for each RAM page.
Setting of the function key
SF [<key number (numerical value)>, <character string>]
Defines a function key
When a numerical value is surrounded with "[" and "]", it is seen as a character code. For example [65] = A
Command only without parameters initialises all the function keys.
Calculate
CL <expression>
The binary, hexadecimal and decimal of a expression is returned. (See: Numerical values)
Searching string in BASIC listing
BF
Search for data. The search string is asked.
"?"can be used as a single character wildcard
When this command is executed and the memory area where BASIC should be stored contains other than BASIC program data the routine may be unstable.
Mapper page select
PP [<page>,<segment>]
The mapper segment which is assigned to the page which is appointed, is set.
255 Segments are possible.
This routine can only execute if a mapper support routine is present. If mapper support is not present you can use PO command instead. The command without parameters initialise the mapper.
Super Disassembler / data export
SD <file name>,<begin address>[#<slot>],<end address>[,<data export switch (B|D|X)>]
By default this command disassembles and saves a text file to disk
Data can be exported to other formats by adding data export switch. Available switches are:
B DEFB type for assemblers., Example: DEFB 3EH,80H,0CDH,80H,01H,0C9H
X X-BASIC type of inline ML, Example: 10001 ´#I &H3E,&H80,&HCD,&H80,&H01,&HC9
D DATA type for BASIC., Example: 10001 DATA 3E80CD8001C9, Example of reading in BASIC:, READ A$: FOR I = 0 TO LEN(A$)\2-1:POKE AD + I, VAL ("&H " + MID$ (A$, I * 2 +1, 2)): NEXT I
Example
SD MYPROG.ASM,9000,9014
Output
;9000H-9014H
LD HL,X900E
LD DE,0C000H
LD BC,0123H
LDIR
JP 0C000H
X900E: LD H,40H
LD A,01H
PUSH AF
PUSH HL
CALL 0024H
File summary (Directory listing)
FS <drive name>
Lists files on disk. If DOS2 is available, you can also define directory or filemask after command.
Usage of the disk
CI <drive name>
Shows "<the number of used clusters> / <number of all clusters>".
Global offset
OF [<offset>]
Sets offset address that is applied to all addresses inside Super-X including for example other offsets and disk routines.
Great care must be taken to avoid problems with OS and hardware, but this can be used for example to debug routines that are located in other than the real execution address. Offset parameter is absolute offset subtracted from real hardware memory address 0. (Parameter will become new address 0) If command is executed without parameters global offset will be set to zero.
Example:
OF 8100, L#COMMAND2.COM,100, I100
This will load and start disassembling COMMAND2.COM from it"s normal load address (100H) while the program is loaded to real life address 08000H
Change CPU mode
CU [<number>]
Change the CPU. (MSX tR only)
If parameter is not given, this will display current CPU mode.
0 = Z80, 1 = R800 (ROM), 2 = R800 (DRAM), 3 = Z80 (DRAM)
Colour of the screen
CO [<foreground>], [<background>], [<edge>]
Change the colour of the screen.
Displays memory in text using Japanese font
KR <address>[#<slot>]
Display memory using Japanese font.
(Japanese characters start from ASCII 128 - 255, 0-127 is the normal character set)
Type japanese text file on screen
KT <file name>
Displays text file on screen with the Japanese character set.
(Japanese characters start from ASCII 128 - 255, 0-127 is the normal character set)
{ENTER} or {SPACE} = Pause, {ESC}=Quit
Type text file on screen
TP <file name>
Displays text file on screen.
{ENTER} or {SPACE} = Pause, {ESC}=Quit
Loads the Japanese character font.
KL [<drive name>]
(re)Loads the Japanese character font file "SUPER-X.FNT " into the VRAM slot.
Save (BSAVE)
SV <file name>,<begin address>[#<slot>],<end address>,[<start address>[,<offset>]]
Similar to BSAVE of the BASIC, but you can also set offset for data loading. Using offset here will only affect the BASIC binary file header.
Load (BLOAD)
LD <file name>[,<offset>[#<slot>]]
Similar to BLOAD of BASIC.
RAW Saving
S# <file name>,<begin address>[#<slot>],<end address>
Memory contents are saved in the file.
Example:
To save 4000 - 7FFF of slot 2 as file "DUMP.ROM", S#DUMP.ROM,4000#2,7FFF
RAW Load
L# <file name>,<address>[#<slot>]
Loads the selected file to the selected memory (and slot) address
Sector saving
S% [<drive name>:]<begin sector (numerical value)>,[< end sector>],<address>[#<slot>]
Writes contents of memory to sector(s)
If no end sector is selected then only one is saved!
Sector load
L% [<drive name>:]<begin sector (numerical value)>,[< end sector>],<address>[#<slot>]
Loads the content of sector(s) to memory
If no end sector is selected then only one is loaded!
Add a note
iM <address>, <slot data>, <type data>
A new note is saved in the Note File.
{cursor keys} move., {ENTER} saves the note., {ESC} cancel.
The slot data and the type data add a supplemental explanation of the note:
Slot data 0: General 1: MAIN 2: SUB 3: FDC 4: RAM, Type data 0: General 1: BIOS 2: WORK 3: DATA 4: PORT 5: MATH 6: KEY 7: HOOK
Read note on address
iC <address>
Checks to see if there is an note for the address given
Load the Note File
iL <drive name>
Loads the Note File.
Save the Note File
iS <drive name>
Saves the Note File.
I/O port in
PI <port>
Reads a byte from the I/O port.
I/O port out
PO <port>, <numerical value>
Writes a numerical value to the I/O port.
Quit
QT
Returns to BASIC from SUPER-X. (Exits)
Download
Autor: Diversos, Montagem: Wilson Pilon
superx.zip
Arquivo em formato ZIP contendo os programas do Super-X.
superx.dsk
Imagem de disco contendo o MSX-DOS e o Super-X.
Downloads
- super-x.zip: Arquivo compactado com o Super-X
- super-x.dsk: Imagem de disco do Super-X
Links
- msx.org: Nota sobre a versão em inglês do Super-X na MSX.ORG
- NYYRIKKI: Site do NYYRIKKI com a versão alterada por ele do Super-X