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
Nuevas opciones debugger para ZEsarUX 4.1
- chernandezba
- MSX Turbo R
- Mensajes: 264
- Registrado: 11 Mar 2015, 10:42
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: ZX81
- consola_favorita: NeoGeo
- Primera consola: Atari 2600
- Gracias dadas: 13 veces
- Gracias recibidas: 167 veces
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: Nuevas opciones debugger para ZEsarUX 4.1
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)
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- chernandezba
- MSX Turbo R
- Mensajes: 264
- Registrado: 11 Mar 2015, 10:42
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: ZX81
- consola_favorita: NeoGeo
- Primera consola: Atari 2600
- Gracias dadas: 13 veces
- Gracias recibidas: 167 veces
Re: Nuevas opciones debugger para ZEsarUX 4.1
Todos estos que pides ya se pueden hacer, échale un vistazo al video 
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
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
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

- 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
- chernandezba
- MSX Turbo R
- Mensajes: 264
- Registrado: 11 Mar 2015, 10:42
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: ZX81
- consola_favorita: NeoGeo
- Primera consola: Atari 2600
- Gracias dadas: 13 veces
- Gracias recibidas: 167 veces
Re: Nuevas opciones debugger para ZEsarUX 4.1
Actualizo: He subido nuevas versiones beta Win/Mac con estos cambios en la ruta habitual:
https://sourceforge.net/projects/zesaru ... _versions/
https://sourceforge.net/projects/zesaru ... _versions/
-
- MSX Turbo R
- Mensajes: 418
- Registrado: 21 Dic 2011, 10:11
- Ubicación: Madrid
- Gracias dadas: 811 veces
- Gracias recibidas: 31 veces
Re: Nuevas opciones debugger para ZEsarUX 4.1
Mola! 
¿estas opciones de breakpoint se aplican a todas las máquinas emuladas? ¿amstrad cpc464?

¿estas opciones de breakpoint se aplican a todas las máquinas emuladas? ¿amstrad cpc464?

- chernandezba
- MSX Turbo R
- Mensajes: 264
- Registrado: 11 Mar 2015, 10:42
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: ZX81
- consola_favorita: NeoGeo
- Primera consola: Atari 2600
- Gracias dadas: 13 veces
- Gracias recibidas: 167 veces
Re: Nuevas opciones debugger para ZEsarUX 4.1
Urusergi escribió:Mola!
¿estas opciones de breakpoint se aplican a todas las máquinas emuladas? ¿amstrad cpc464?
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
- radastan
- Amiga 2500
- Mensajes: 4542
- Registrado: 11 Jun 2007, 19:29
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Sega Genesis/Megadrive
- Primera consola: TV Games/Pong Clone
- Ubicación: Córdoba
- Gracias dadas: 9 veces
- Gracias recibidas: 40 veces
- Contactar:
Re: Nuevas opciones debugger para ZEsarUX 4.1
Que bien me va a veniiiiiiiiiir.
Gracias.
Gracias.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝
- chernandezba
- MSX Turbo R
- Mensajes: 264
- Registrado: 11 Mar 2015, 10:42
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: ZX81
- consola_favorita: NeoGeo
- Primera consola: Atari 2600
- Gracias dadas: 13 veces
- Gracias recibidas: 167 veces
Re: Nuevas opciones debugger para ZEsarUX 4.1
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

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
- chernandezba
- MSX Turbo R
- Mensajes: 264
- Registrado: 11 Mar 2015, 10:42
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: ZX81
- consola_favorita: NeoGeo
- Primera consola: Atari 2600
- Gracias dadas: 13 veces
- Gracias recibidas: 167 veces
Re: Nuevas opciones debugger para ZEsarUX 4.1
Urusergi escribió:Genial!!!!! esto es una pasada![]()
muchas gracias
De nada

Gracias a vosotros por usarlo
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados