Buscando un atajo para no tener que depurar toda la palabra LIST con el Z80 debugger, he localizado la palabra "headerless" que escupe como su inexistente nombre la basura:
~#(w.
En principio NO se puede, a partir de la basura que escupe el programa deducir cual es la headerless que lo hace, salvo que tengamos un listado con todos los CFAs de palabras headerless de la ROM e ir probando cada uno con una palabra (que tengo definida para otros fines) que imprime el nombre de una palabra de la ROM, y ver si coincide con nuestra basura en concreto.
Pero he tenido suerte. Me sonaba ese nombre-basura de haberlo visto antes. Y sí, lo ví
aquí (hace más de un mes). Esta pista ya me ha permitido localizarlo:
La palabra en cuestión es la que tiene
CFA=181B.
Es una palabra headerless que se usa como truco para que la rutina en c.m. que imprime el número en HL como entero con signo en pantalla (empieza en
$180E) pueda seguir ejecutando las palabras Forth que siguen a quién la llamó.
Esta rutina en
$180E solo es llamada por
LIST cuando imprime un número entero (por ende por
EDIT también) y por
F. cuando imprime el exponente de un número decimal (si no tiene exponente NO la llama).
He probado cargando en la pila un decimal con exponente y haciendo
DEBUG F. y aparece el
~#(w.
La cosa ahora ya es mucho más accesible a mis "fuerzas" actuales. Creo que ya podré solucionar el asunto. En cuanto lo tenga hecho, pongo la nueva versión de DEBUG en el primer post con la correspondiente nota de edición.NOTA: Lo extraño es que esta ya mañana sospeché de esta rutina en
$180E y puse un breakpoint en el debugger del Z80 y al ejecutar un LIST de una palabra con EDIT, escupía el nombre-basura en el depurador PERO NO SE INTERRUMPIA la ejecución por lo que la descarté como rutina sospechosa. Ahora, en cambio, veo que
F. sí que se interrumpe en iguales circunstancias.
O sea, durante el depurado de un decimal con exponente
F. llama a $180E que a su vez ejecuta la Headerless
~#(w pero en cambio durante el depurado deL
LIST de una palabra con
EDIT, aunque se informa que se va a ejecutar
~#(w, NO lo hace a través de
$180E. O lo hace por llamada directa (que no localizo en el desensamblado de la ROM) o es otra cosa que casualmente escupe el mismo nombre basura, pero siendo ambos casos debidos a la impresión de un entero en pantalla, lo dudo mucho
... RARO, MUY RARO...EDIT:(ahora mismo) He puesto un breakpoint en
$181D, que es dónde empieza la ejecución en c.m. de la headerless
~#(w y he verificado que es la que ejecuta LIST también. Lo que tengo que aclarar es como llega aquí sin llamar a
~#(w...