Página 1 de 1

Nuevas opciones debugger para ZEsarUX 4.1

Publicado: 17 Mar 2016, 19:07
por chernandezba
Hola!

Bueno según petición popular...

He agregado nuevas condiciones de debug, entre ellas poder activar un punto de paro cuando se escribe en una dirección concreta, como por ejemplo en la rom. Estas nuevas pseudo variables del debugger tienen el siguiente significado:

MRV: value returned on read memory operation
MWV: value written on write memory operation
MRA: address used on read memory operation
MWA: address used on write memory operation
PRV: value returned on read port operation
PWV: value written on write port operation
PRA: address used on read port operation
PWA: address used on write port operation

Así , por ejemplo, una condición de breakpoint tipo:
MWA=32768
Hará saltar un breakpoint cuando hagamos un poke en la dirección 32768
Otro ejemplo:
MWA=32768 and MWV=100
Hará saltar un breakpoint cuando se haga este poke: POKE 32768,100
Otro mas:
MWA<16384
Hará saltar un breakpoint cuando se intente escribir en el espacio de la ROM
He agregado dos mas también:

TSTATES: t-states total in a frame
TSTATESL: t-states in a scanline

Y además hay otra novedad, se permiten agregar "watches", o sea, variables y registros que se muestran en pantalla en tiempo real, aún con el menú cerrado. El nombre "watches" es el mismo nombre que se le daba a la misma función en Turbo Pascal/Turbo C si no recuerdo mal.

Así pues, podemos meter un watch como:
A ROM BC

Que nos mostrará en pantalla el valor del registro A, el número de ROM mapeada y el registro BC

He subido un video demostrativo con todo esto:
https://youtu.be/UyFZ4qUtVik

Recordad como siempre que esto está en el último código fuente, que lo podréis ver cuando suba una nueva beta o para quien quiera compilarlo de código.

Si se os ocurre alguna condición mas que pueda agregar ....

Saludos
César

Re: Nuevas opciones debugger para ZEsarUX 4.1

Publicado: 17 Mar 2016, 19:16
por mcleod_ideafix
chernandezba escribió:Si se os ocurre alguna condición mas que pueda agregar ....

Saludos
César


Huy, sí! :)

- Breakpoint cuando se lea o escriba en un cierto puerto de E/S
- Breakpoint condicional: o sea, un breakpoint normal y corriente, pero que sólo se active cuando se den ciertas condiciones, tales como que el registro A, oel HL valga tal o cual valor. En otros entornos se permite establecer condiciones booleanas al estilo C. Por ejemplo:
bpc 0x0010 if %a==0x30
Esta instrucción, en entornos similares al GDB, establece un breakpoint condicional en la dirección de memoria 0010h, pero sólo se dispara si el contenido de A es 30h. La dirección 0010h es el comienzo de RST 10h, que es el restart que usa la ROM del Spectrum para imprimir caracteres, concretamente, imprime el carácter cuyo código ASCII esté en el registro A, así que el breakpoint anterior se puede interpretar como "para la ejecución cuando la ROM esté a punto de imprimir un 0" (cuyo código ASCII es 30h)
- Breakpoint al salir o entrar de la ROM (éstos son calcados a los que hace SpecEmu)

Re: Nuevas opciones debugger para ZEsarUX 4.1

Publicado: 17 Mar 2016, 19:41
por chernandezba
Todos estos que pides ya se pueden hacer, échale un vistazo al video ;)

- Breakpoint cuando se lea o escriba en un cierto puerto de E/S


Cual puerto? Por ejemplo el 32765? Cuando se escriba por ejemplo? Tan facil como decirle:

PWA=32765
Esto solo se puede hacer con el último código que he subido hoy



- Breakpoint condicional: o sea, un breakpoint normal y corriente, pero que sólo se active cuando se den ciertas condiciones, tales como que el registro A, oel HL valga tal o cual valor. En otros entornos se permite establecer condiciones booleanas al estilo C. Por ejemplo:
bpc 0x0010 if %a==0x30


Esto se puede hacer desde hace mucho tiempo. Por ejemplo, que el registro PC sea menor que 4000, el A valga 20H y el IX sea mayor que 10000:

PC<4000 and A=20H and IX>10000



- Breakpoint al salir o entrar de la ROM (éstos son calcados a los que hace SpecEmu)


Bueno este no seria exactamente igual. Por ejemplo, un breakpoint cuando salga de la rom:
PC>16383
Pero claro, luego estará saltando continuamente si no se desactiva o si el PC está fuera de rom
De manera similar, cuando se entra:
PC<16384

Te hago copy-paste del menu de ayuda de breakpoints:

A condition breakpoint has the following format:
[REGISTER][CONDITION][VALUE] [OPERATOR] [REGISTER][CONDITION][VALUE] [OPERATOR] .... where:
[REGISTER] can be a CPU register or some pseudo variables: A,B,C,D,E,F,H,L,I,R,BC,DE,HL,SP,PC,IX,IY,"
(BC),(DE),(HL),(SP),(PC),(IX),(IY), (NN), IFF1, IFF2, OPCODE,
RAM: RAM mapped on 49152-65535 on Spectrum 128 or Prism,
ROM: ROM mapped on 0-16383 on Spectrum 128,
SEG0, SEG1, SEG2, SEG3: memory banks mapped on each 4 memory segments on Z88
MRV: value returned on read memory operation
MWV: value written on write memory operation
MRA: address used on read memory operation
MWA: address used on write memory operation
PRV: value returned on read port operation
PWV: value written on write port operation
PRA: address used on read port operation
PWA: address used on write port operation
TSTATES: t-states total in a frame
TSTATESL: t-states in a scanline

[CONDITION] must be one of: <,>,=
[VALUE] must be a numeric value
[OPERATOR] must be one of the following: and, or, xor
Examples of conditions:
SP<32768 : it will match when SP register is below 32768
A=10 and BC<33 : it will match when A register is 10 and BC is below 33
OPCODE=ED4AH : it will match when running opcode ADC HL,BC
OPCODE=21H : it will match when running opcode LD HL,NN
OPCODE=210040H : it will match when running opcode LD HL,4000H
SEG2=40H : when memory bank 40H is mapped to memory segment 2 (49152-65535 range) on Z88
MWA<16384 : it will match when attempting to write in ROM
Note: Any condition in the whole list can trigger a breakpoint

Saludos
César

Re: Nuevas opciones debugger para ZEsarUX 4.1

Publicado: 17 Mar 2016, 20:20
por chernandezba
Actualizo: He subido nuevas versiones beta Win/Mac con estos cambios en la ruta habitual:

https://sourceforge.net/projects/zesaru ... _versions/

Re: Nuevas opciones debugger para ZEsarUX 4.1

Publicado: 17 Mar 2016, 23:25
por Urusergi
Mola! =P~
¿estas opciones de breakpoint se aplican a todas las máquinas emuladas? ¿amstrad cpc464? [-o<

Re: Nuevas opciones debugger para ZEsarUX 4.1

Publicado: 18 Mar 2016, 00:22
por chernandezba
Urusergi escribió:Mola! =P~
¿estas opciones de breakpoint se aplican a todas las máquinas emuladas? ¿amstrad cpc464? [-o<



Y tanto! El debugger se puede usar en cualquier máquina!
Lo único que hay alguna pseudo variable que se aplica a alguna máquina concreta, por ejemplo, las páginas de ram mapeadas del z88. Pero vamos, todas las funciones del debugger, los breakpoints condicionales, los watches, etc valen para cualquier máquina

Re: Nuevas opciones debugger para ZEsarUX 4.1

Publicado: 18 Mar 2016, 08:33
por radastan
Que bien me va a veniiiiiiiiiir.

Gracias.

Re: Nuevas opciones debugger para ZEsarUX 4.1

Publicado: 18 Mar 2016, 09:14
por chernandezba
De nada :)
Ayer incluso añadí algo más, que no está en esos binarios beta que subí.
Hasta ahora había 3 operadores condicionales:
=
<
>
O sea, igual, menor que o mayor que. Pero no había un operador de 'diferente de' , aunque se puede simular mediante dos condiciones de mayor y menor.
Pues bien, añadí un operador de 'diferente de'. Dado que mis rutinas solo permiten operadores que sean 1 solo carácter, no puedo poner el típico del basic de
<>
O el que usa el C y otros lenguajes:
!=
Por tanto , he escogido un operador que se parece al que se usa en matemáticas, o sea, el igual con barra diagonal. Como ese carácter no existe en spectrum, he usado el de dividir /, ya que los operadores de suma, dividir etc no tienen sentido en el debugger (no se trata de una calculadora)
Así pues, una condición de paro que salte por ejemplo cuando el registro A no sea ffh sería:
A/FFh

Esto como siempre está en el código fuente pero no en la última beta. El que lo quiera tendrá que esperar a que genere la siguiente beta o compilar desde código ;)

Saludos

Re: Nuevas opciones debugger para ZEsarUX 4.1

Publicado: 18 Mar 2016, 15:06
por Urusergi
Genial!!!!! esto es una pasada =D>

muchas gracias

Re: Nuevas opciones debugger para ZEsarUX 4.1

Publicado: 18 Mar 2016, 18:47
por chernandezba
Urusergi escribió:Genial!!!!! esto es una pasada =D>

muchas gracias


De nada :)
Gracias a vosotros por usarlo