El Spectrum no tiene reloj del sistema.
La ISR que hay activa en el intérprete de BASIC lleva una cuenta de las veces que se ejecuta, lo que resulta en una cuenta efectiva de los frames que lleva el Spectrum encendido (50 frames por segundo). El problema es que esa ISR está desactivada cuando se está ejecutando el juego.
No sé si estás haciendo algo por tu cuenta o estás usando MK1 o MK2. En el caso de nuestros motores, si estás en modo 128K tienes una ISR disponible que es la que llama al player que hace sonar el AY. Puedes poner ahí un incremento de una variable global y usarla como temporizador, se incrementará 50 veces por segundo. Si estás en modo 48K, no hay ISR y tendrás que añadirlo. El problema es que el mapa de memora del modo 48K de MK1 y en especial de MK2 está bastante ajustado y el espacio reservado en el modo 128K para el vector de saltos necesario está ocupado con otras cosas.
Si estás por tu cuenta, creo que si no haces nada el programa se ejecuta en modo IM1 y con las interrupciones habilitadas, con lo que estaría funcionando el ISR del BASIC y tendrías esa cuenta de frames disponible. Es un valor de 24 bits que puedes consultar leyendo de la variable del sistema BASIC llamada "FRAMES". Mira aquí:
http://www.worldofspectrum.org/ZXBasicM ... hap25.html y aquí:
http://www.worldofspectrum.org/ZXBasicM ... hap18.htmlPersonalmente, y aunque no es una medida de tiempo demasiado robusta, yo siempre cuento cuadros de juego. El timer de MK1 y MK2 funciona así, por ejemplo. Obviamente, cuanto más faps tenga tu juego, más rápido contarás el "tiempo", pero uno se apaña.
Para ver el valor de las variables tienes que usar un emulador con debugger (como Spectaculator) y encontrar donde están en la memoria, no hay otra. Supongo que z88dk, como otros compiladores, tiene la opción de sacarte un mapa de donde coloca las cosas. Ojete, que si las variables son locales o parámetros estarán en la pila y tendrás que mirar ahí. Otra forma es tener una dirección RAM de memoria libre siempre y usarla para "ver" las variables simplemente escribiendo su valor ahí y mirando con el debugger o con un visor de memoria qué valor va tomando.
$this->bbcode_second_pass_code('', '*((unsigned char *) (22528)) = valor; // por ejemplo')