 f--------------------------------------------------------------------------

            M  D U L O    O P E R A C I O N A L    T R A C E

--------------------------------------------------------------------------
PUBLICADO NA REVISTA MICRO SISTEMAS EDIO NR.63 (DEZEMBRO DE 1986)
--------------------------------------------------------------------------
AUTOR: RICARDO DE PAOLA
--------------------------------------------------------------------------
CONVERTIDO POR KELLY ABRANTES MURTA - BRASIL - JULHO 2000
--------------------------------------------------------------------------

INTRODUO
==========

O programa trace funciona como um mdulo operacional do Microbug, e 
rene as funes de Disassembler e simulador de programas assembler.
Ele implementa os comandos S (simulador de instrues) e T (Disassembler),
alm de U e V como auxiliares do comando S.


COMANDOS DO TRACE
=================

COMANDO T:  serve para disassemblar trechos de memria. Funciona como os
comandos M e D tendo a seguinte estrutura: T <endereo>. Se no for 
digitado o endereo, continua-se a partir da instruo seguinte  ltima
disassemblada. A tecla K vai disassemblando as instrues dali em diante 
e para sair deste comando  s dar <BREAK>. Existem os seguintes comandos
SHIFT:

 - SHIFT E/SHIFT S: como nos outros comandos do Microbug.
 - SHIFT A: chaveia a impresso ou no dos bytes que compem a instruo.
 - SHIFT 3: chaveia em decimal/hexa a impresso dos bytes da instruo.
   Quando for usada a impresso em decimal, em algumas instrues os bytes
   sobreporo o cdigo da instruo.
 - SHIFT D: chaveia em decimal/hexa a impresso dos bytes dos operandos da
   instruo.


COMANDO S:  serve para fazer a simulao passo-a-passo de um programa em
Assembler. Seu formato  S <endereo>. Se o endereo no for digitado,
assume-se o ltimo endereo usado no comando S (e no o seguinte a ele).
O comando S disassembla a instruo nesse endereo e mostra, nas duas 
ltimas linhas da tela, a tela do comando H, onde esto os principais
registradores do Z80 (AF, HL, DE, BC), seus contedos em hexa e o valor
binrio dos flags. A partir da existem as seguintes opes:

 - Tecla V: mostra, na primeira linha da tela, os seguintes elementos:
   * O valor da posio de memria apontada por HL, ou por IX,IY+d, se a
     instruo que foi disassemblada fizer referncia a IX ou IY.
   * O valor de seu SP.  um valor diferente do SP do sistema, e deve 
     apontar para alguma rea da RAM com pelo menos uns 20 bytes, mais os
     nveis de stack que voc vai precisar. Inicialmente tem valor 6C00.
   * O valor de (SP), ou seja, o prximo valor a ser trazido da pilha por
     POP ou RET.

 - Tecla K: simula a instruo que est sendo mostrada na tela e exibe a 
   seguinte. Para se fazer a simulao  colocado um break-point na 
   instruo seguinte, carrega-se nos registradores o valor mostrado na
   tela e desvia-se para aquela instruo. Logo depois os registradores 
   so salvos e  mostrada a prxima instruo (a no ser em instrues
   JP, CALL e RET, onde o processo  outro).
   As chamadas  ROM (endereos menores que 8192) no so simuladas, e sim
   executadas por completos, porque no h como colocar break-points na 
   ROM. Se voc quiser acopanhar a execuo de alguma rotina, deve mov-la
   para a RAM e realocar seus endereos.

 - Tecla +: faz o mesmo que a tecla K, porm a tela  rodada junto com o
   valor dos registradores.

 - Tecla N: avana para a instruo que est sendo mostrada.

 - BREAK: termina o comando.

 - Comando U: serve para dar um novo valor ao seu SP ( um N s para o 
   SP). O formato  U <novo valor>.

 - Comando V:  idntico ao comando H, porm ele exibe tambm o valor de
   (HL) ou (xy+d), do SP e (SP).


CONSIDERAES:

Nos endereos 711D e 7158 est o valor 7D8D, que  o endereo da rotina
$RCP do Microbug. Se voc quiser fazer algum preparo, antes que cada
instruo seja simulada (tal como posicionar o cursor, inicializar 
posies, trocar o arquivo de imagens pelo contedo de um buffer, passar 
o micro para FAST, alterar o valor de IX ou IY ou ainda qualquer outra
coisa), coloque nestas duas posies de memria o endereo de sua rotina,
lembrando de termin-la com um JP $RCP ou coisa parecida.

Nos endereos 7127 e 715E est o valor 7D7C, que  o endereo da rotina
$ARQ. Aqui se desvia, depois de ter sido simulada, a instruo de seu
programa. Nesta situao, voc passaria o micro para SLOW e voltaria o
valor de IX e IY, no sendo necessrio reposicionar o cursor nem voltar a
tela que estava sendo mostrada antes.

Os endereos 4021, 407B e 407C so variveis temporrias dos comandos S e
T, portanto voc deve salv-las, inicializ-las com seu valor desejado e 
depois retorn-las, se fizer uso dessas posies em seu programa.

Se voc vai fazer uso dos registradores IX ou IY, altere tambm os 
endereos 71CB, 71CC e 71CD, que tm as instrues PUSH IX/POP HL, para
LD HL (seu ix); e os endereos 71D1, 71D2 e 71D3 para LD HL (seu iy).