En mí caso, al no saber código máquina, me conformaba con el poder regresar al BASIC de una forma o de otra, y siempre me fascinaba el poder salir de un juego o programa y volver al editor, cuando posible, para descubrir un listado escondido o simplemente usar el editor para crear un pequeño programa en BASIC y analisar los contenidos de la memoria.
La curiosidad ha regresado, y aunque aún no domine el código máquina, sigo interesado en usar el editor de BASIC. Sé que el debugger y las nuevas utilidades son mucho rápidas y efectivas, pero es cosa de nostalgia.
Sabía que en algunos casos no era posible volver al BASIC porque la memoria ya estaba ocupada por otra cosa o el editor no era estable lo suficiente y cualquier cosa podría terminar en un crash. Los amigos en WOS me dieron algunas ideas que, aunque borran parte de la memoria, me permiten hacer lo que quiero a través de cualquier emulador que soporte ensamblador (como el ZX Spin). Pongo la rutina en la memoria de la pantalla, la ejecuto, el comando NEW limpia y prepara el editor de BASIC pero conserva todo el contenido de la RAM después de la dirección que se defina.
Quería compartir lo que me dieron en WOS y espero que sea útil para alguien. La primera rutina es la que uso, la segunda aún no la he probado. Os aseguro que esto funciona mejor que lo que hacían los Multifaces al intentar volver al BASIC. Saludos.
Frank: From Jon North's How To Hack articles.
If you want to hack a protected game, it is more than likely that it will crash if you try to load it and then return to Basic. The following routine will cause a NEW to 25600 (I have never seen a game where the code from 16384 to 25600 is needed to get infinite lives), so you can return to Basic which makes hacking easier.Código: Seleccionar todo
DI
XOR A
LD DE, 25600 ; (change this if you want, but not lower than about 23808)
JP 4555
Marko: The following code will set the stack and ERR_SP system variable before jumping to the BASIC interpreter - note that on a 128K machine, it will leave the speccy in 48 BASIC:Código: Seleccionar todo
res 4, (iy+1) ; clear 128 mode bit in FLAGS
ld hl, (23730) ; get RAMTOP
inc hl ; increase by one
ld sp, hl ; set the stack
ld hl, $3E00 ; copied this one from SP - never did know what it was :p
push hl
ld hl, 4867 ; address of MAIN-4 in ROM
push hl
ld (23613), sp ; errors return here
jp 7030 ; address of STMT-RET in ROM
Hope that helps!