Me tome el trabajo de desensamblar la rutina de la rom que atrapa la NMI, para los interesados en breve posteo el listado comentado.
Basicamente funciona de esta manera.
Cada vez que hay una NMI la rom chequea (es decir que el dispositivo genera una NMI cuando hay una lectura de cualquier port con A5=0)
si se esta ejecuntando una instruccion IN lee el joystick de la TS (los 2 ports a la vez) y transforma los datos a formato kempston.
Dependiendo la la instruccion IN encontrada deja el valor en el registro correspondiente.
Si no era una IN (el usuario presiono el boton NMI del dispositivo Magic Button) entra a una rutina de verificacion de teclado que busca por las teclas
ENTER: retorna a la ejecucion del programa que se interrumpio
N: ejecuta la rutina de la ROM correspondiente a la instruccion NEW
R: ejecuta la rom desde la direccion 0, es decir hace un cold restart
P: garba en cinta el contenido de la pantalla
S: graba en cinta el contenido de la memoria+un programa cargador. basicamente es un copiador de juegos.
C: genera los UDGs en español chr#(144) a chr$(154) copiandolos de la definicion en ROM
B: carga el SP y otros registros y trata de retornar al BASIC
Por lo encontrado el Magic button deberia ser un periferico muy facil de duplicar.
Lo fundamental puede resumirse en el circuito que adjunto, es muy basico, habria que agregarle un timer para que responda exactamente a los 23T states que necesita la NMI que esta abajo y el pulsador de usuario. si alguien se anima a mejorarlo es bienvenido.
La solucion encontrada para emular por soft la interfase kempston tiene un problema, es muchisimo mas lenta que leer la original, por lo que si un programa cuenta con un tiempo preciso incluyendo la lectura del joystick va a dejar de funcionar correctamente.
Saludos.