Nuevas opciones debugger para ZEsarUX 4.1

Foro dedicado a la emulación de sistemas clásicos en el PC o en otros sistemas.
Avatar de Usuario
chernandezba
MSX Turbo R
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

Nuevas opciones debugger para ZEsarUX 4.1

Mensajepor chernandezba » 17 Mar 2016, 19:07

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
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
mcleod_ideafix
Amiga 2500
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

Mensajepor mcleod_ideafix » 17 Mar 2016, 19:16

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

Avatar de Usuario
chernandezba
MSX Turbo R
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

Mensajepor chernandezba » 17 Mar 2016, 19:41

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
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
chernandezba
MSX Turbo R
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

Mensajepor chernandezba » 17 Mar 2016, 20:20

Actualizo: He subido nuevas versiones beta Win/Mac con estos cambios en la ruta habitual:

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

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Urusergi
MSX Turbo R
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

Mensajepor Urusergi » 17 Mar 2016, 23:25

Mola! =P~
¿estas opciones de breakpoint se aplican a todas las máquinas emuladas? ¿amstrad cpc464? [-o<

Avatar de Usuario
chernandezba
MSX Turbo R
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

Mensajepor chernandezba » 18 Mar 2016, 00:22

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
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Avatar de Usuario
radastan
Amiga 2500
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

Mensajepor radastan » 18 Mar 2016, 08:33

Que bien me va a veniiiiiiiiiir.

Gracias.
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝

Avatar de Usuario
chernandezba
MSX Turbo R
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

Mensajepor chernandezba » 18 Mar 2016, 09:14

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
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux

Urusergi
MSX Turbo R
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

Mensajepor Urusergi » 18 Mar 2016, 15:06

Genial!!!!! esto es una pasada =D>

muchas gracias

Avatar de Usuario
chernandezba
MSX Turbo R
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

Mensajepor chernandezba » 18 Mar 2016, 18:47

Urusergi escribió:Genial!!!!! esto es una pasada =D>

muchas gracias


De nada :)
Gracias a vosotros por usarlo
----

ZEsarUX
ZX Second-Emulator And Released for UniX
https://github.com/chernandezba/zesarux


Volver a “Emuladores”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 7 invitados