 

--------Para próxima versión:

-Agregar incluir pthreadGC3.dll en ZEsarUX win ? en mi windows no lo usa

-->no todo. Clasificar en otras secciones menos prioritarias!!

-hex editor: muestra pagina entera cuando una zona de memoria por ejemplo solo es de 2 bytes. Probar por ejemplo con debug memory zone


-para comprobar coordenada y footer, calcular desde abajo de alto ventana. Y usar funcion comun en screen.c
-quiza funcion footer a scr_putchar_footer_comun_zoom se tiene que hacer con coordenadas 0,1 o 2 simplemente

-file browser no muestra dispositivos. importante para uart
Por alguna razón, en /dev no llega a leerlos ni entrando antes del filtro. Quiza algun parametro especial del directorio
o algo que no hago bien al leer directorio. La solución pasa por escribir el nombre directamente en el file selector (pulsando TAB o click de raton
arriba)

-ventana debug cpu: si se estaba en vista 8, y luego cargamos un juego que no sea de paws/daad/quill,
la vista 1 sera ventana grande pero con alto total reducido. Parecido a lo que sucedia al cambiar de vista

-alguna vez al abrir ay piano, pulsar boton derecho fuera de la ventana, desaparece la ventana y no vuelve a menu anterior
y no vuelve a abrir el menu, y parece que tampoco envia teclado a maquina emulada

-filtro AY se sigue escuchando cosas aun desactivando los 3 canales->tienen que ver envolventes y speech

-uso de settings.c y settings.h. revisar que tiene que ir ahi


-Copiar datos entre zonas memoria 

-unpaws con quill:
*compression tokens?

-unpaws: 
*compression tokens no siempre estan hasta el 255

-mapa localidades daad/paws/quill

-Turbo spool setting en tbblue -> va relacionado con la funcion de peek_byte turbo que se ve alterada al cambiar la velocidad de la cpu en nextos

-ejemplos para spool, como:
./txt_to_basic_lines.sh FAQ 3 si si no > pruebaspool2.txt

-al salir emulador desde exit-emulator de ZRCP no acaba de salir del todo. Luego salgo con ctrl-c y el footer luego arranca desactivado

-menu debug cpu: lineas desensamblado que aumente si ventana mas grande

-leer audio casette

-En mostrar registros IR
Decir cuál es el vector de interrupción 

--Formato pzx

-cpuid ("zxid") según especificación de mcleod

-al cargar smartload, por ejemplo ultimo cargado es thelosttapesofalbion. situa el cursor ahi bien, pero al subir para arriba desplaza desde scroll sin mover
cursor hasta que esta arriba. O sea, deberia mover siempre cursor y no empezar a hacer scroll hasta que no esta arriba

-reorganizar capturas de pantalla del readme.md para que esten todas las maquinas
-en github, Screenshot sir Fred pixel y ascii todo junto. el de ascii, esta cortado
-Revisar archivo install. En caso de Linux y otros binarios ya compilados, enseñarlo más fácilmente. Otro documento quizá que diga cómo compilarlo  


-AY partitura:
*que muestre los otros chips. ya está preparado el array para varios chips
*para el beeper tambien
*ideal para probar duraciones: golden axe

-temperatura cpu en mac
https://github.com/lavoiesl/osx-cpu-temp


-parece que cocoa no opengl no redibuja... que hago? lo corrijo o solo dejo cocoa opengl?

-quiza version mac debe tener dos versiones: una compilada con O2, otra sin
Que hacemos con cocoa no opengl?


-------- Fin cosas para la siguiente version


--- ZX Desktop

--Redimensionar ventana redibuja el zxdesktop?


--Posibles efectos para fondo ZX Desktop:
---Efecto de ZX Desktop barras colores animado?
---Imagen. BMP?
---Miniatura de pantalla spectrum
---Imagen. SCR
---Degradado vertical usando alguna tabla de colores concreta ya existente
---Botones o iconos pulsables 
---Easter egg al pulsar doble click en logo Z de fondo ZX Desktop
---Anaglifo usando segunda pantalla o extensión Desktop 
--Fbdev debe permitir ZX Desktop?
--sdl2: si se pone width de ZX desktop que no cabe en pantalla, se queda reabriendo continuamente la ventana

--- FIN ZX Desktop



--- ZX Vision

-en ventanas con can_use_all_width=1, no se habilita la barra de scroll vertical cuando hace falta

-menu_simple_ventana solo se usa al redefinir eventos joystick. No usa zxvision tal cual porque necesita evento de lectura de joystick,
solo dibuja la ventana al "viejo estilo" (pre-zx vision) y vuelve. Si no se puede migrar a zxvision, dejar tal cual


-hay algun limite de array o memoria etc en ventanas zxvision alto y alto 32x24? Creo que no


-Máximo ancho de ventanas de menú es siempre 32? O va según ancho  ventana programa?


-zxvision:
--que al redimensionar ventana se pueda hacer que vuelva a la funcion que la llama (como cuando se mueve raton?) para hacer
funciones de reajuste de disposicion de texto en ventana por ejemplo
->no hace falta ya que retorna de handle_zxvision al mover el raton. Hexadecimal editor ya lo hace
-que en menu de opciones si raton pulsa en ventana pero en zona que no hay opciones, no envie enter


-acabar de migrar todas menu_dibuja_ventana a zxvision. queda alguna?? las de definir evento joystick 

-Cuando se hace resize de ventana y desaparecen barras desplazamientos, habría que mover offset a 0?
O esta considerando mal el mostrar barras desplazamiento: quizá deberían salir siempre que offset sea mayor que 0, Y que quepa en pantalla

-Background windows
-activarlas con: int menu_allow_background_windows=1;
-Si ventana en background, no dejar volverla a llamar desde menu normal
-Solo funciona una ventana a la vez con pixel (por ejemplo ay piano y wave piano)
Ademas los pixeles siempre van a la ultima ventana arriba

-ultima ventana de arriba deberia salir como activa
-poder conmutar ventana activa
-Ventanas que se pueden enviar a background que tengan un botón  especial ? Quizá el &? 
-menu ventanas finalizan con:
	if (tecla==3) {
		//zxvision_ay_registers_overlay
		ventana->overlay_function=menu_debug_cpu_resumen_stats_overlay;
		printf ("Put window %p in background. next window=%p\n",ventana,ventana->next_window);
		menu_generic_message("Background task","OK. Window put in background");
	}

	else {
		zxvision_destroy_window(ventana);		
 	}

-ventanas en funcion de overlay hacen al principio
if (!zxvision_drawing_in_background) normal_overlay_texto_menu();


Ideas para background windows:
-se deben llamar a todas las funciones de overlay de las ventanas en background desde la función de overlay de menú
-ventanas en background son solo aquellas que no llevan asociado un menú implícito, casos aparte son el ay player, el view waveform, Visualmem etc (tienen algunas líneas de settings)
-todo lo que sale de settings no tiene sentido enviar a background-> son menús puros
-opción para desactivar completamente el background
-una ventana que se abre:
**si hay background, entrara y saldrá poniéndose en background, y cerrando todos los menús precedentes. Lo ideal es que luego el foco conmutase aquí, entrando de nuevo a primer plano
-como se ponen en primer plano ventanas que estaban en background? Quizá cuando se ponen en background deben registrarse indicando la función principal que las inicia. Esto se deberá leer desde el handle de zxvision para cuando se pulsa ahí, cambiar y arrancar ahí 


-Fin Background windows



-Osd keyboard sin multitarea en ZX81 no va fino

-Ventana scanf no se deja mover bien cuando multitask off. Quizá no llama bien a handle mouse?
 
-Sin multitarea, pulsaciones sobre la zona de scroll, hace efectivo el scroll cuando se mueve el raton o se pulsa boton o tecla

-menu: cuando habilita scroll vertical porque no caben opciones, aparece tambien scroll horizontal

-Rueda ratón sin multitarea no se mueve muy fino: parece que actualiza tarde la ventana

-botones/wheel left y right de X11??

-quiza que al crear ventana, si ancho visible no permite caber titulo, hacer mas ancho visible para que quepa

-Puntero en zxvision window a función que actualice ventana o quizá función de entrada a esa ventana?
Para poder hacer que funciones futuras puedan gestionar pulsaciones de ratón en ventana:
La ventana tendrá una función de callback donde se llamara cuando se pulse en zonas que no son barras de scroll
Además de llamar a ese callback, se debe salir de la función de espera tecla zxvision, para poder gestionar eventos que haya avisado dicho callback. Creo que ahora mismo no se sale de función de espera tecla en esos casos
->No se si es necesario pues en filesel lo hacemos de otra  manera
Este callback se le pasara el puntero a ventana y quizá eventos de ratón: que botón se ha pulsado, donde, etc

-Quizá zxvision generic message ya no debería tener el límite de array de líneas o ancho...
-quiza zxvision_print_string_defaults_fillspc deba ser la habitual zxvision_print_string_defaults


-al mover o redimensionar ventana, redibujar las de debajo en cascada, empezando por la mas antigua y subiendo

-menus zxvision:
--porque menus tabulados no rellenan con espacios? ah porque antes siempre se borraba texto con espacios al dibujar menu?

-ventanas zxvision que puedan salir parcialmente fuera de pantalla.  seria tenerlas por debajo del limite de la ventana

-rueda de raton que haga scroll ventana en horizontal y vertical

-zxvision_putpixel deja escribir pixeles mas alla de total_width o height. Esto no es un error en si
Lo hace realmente con visible_width y visible_height



--- FIN ZX Vision



--- expression parser


*codetests_expression_parser_expect(" 2*3 - 4*5 + 6/3 ",-12);
->da -16. acaba haciendo 2*3 - 4*5 - 6/3
en cambio: (2*3 - 4*5) + 6/3 da bien

es porque acaba desglosando:
2*3 -     4*5 + 6/3
6   -     20 +2
6   -     22   -> -16

el 20+2 deberia tener en consideracion quiza el signo de delante:
6 -      20 - 2 
6 - 18 -> -12 

O esto lo apunto como un bug que el usuario le ponga parentesis y listo

tambien:
10-1-1 -> no da 8
hace:

10   -    1-1
10   -    0  -> 10


*si imprime valor de 32 bits con bit ultimo alzado, sale negativo. Habria que imprimir siempre como positivo?
*case de registros y valores, meter switch en vez de if....

*pwa,pwv,mra,mwv etc requieren que breakpoints esten activos

*parece que a veces mra o pra por ejemplo no siempre se dispara. probar tambien pra. Quiza falla en los que se esta cambiando el cpu turbo continuamente?
Pero probado en next y funciona

*permite doble resta como a--b -> que eso al final es : a- (-b) -> a+b

-comparacion breakpoint parser. uso cpu:
no breakpoints: 10% cpu

--set-breakpoint 1 "A=3 AND IX=32768"
--set-breakpoint 2 "BC>32768 AND A=4 AND IX=20000"
new:  18% cpu. old: 37% cpu


--set-breakpoint 1 "A=3 AND IX=32768"
--set-breakpoint 2 "BC>32768 AND A=4 AND IX=20000"
--set-breakpoint 3 "IY>32768 OR IX=10000 OR I>200"
new: 21% cpu old: 52% cpu


--set-breakpoint 1 "A=3 AND IX=32768"
--set-breakpoint 2 "BC>32768 AND A=4 AND IX=20000"
--set-breakpoint 3 "IY>32768 OR IX=10000 OR I>200"
--set-breakpoint 4 "IY>32768 OR IX=10000 OR I>200 OR SP>65535"
new: 24% cpu old: 73% cpu

Incremento cpu nuevo algoritmo: 3%
Incremento cpu viejo algoritmo: 15-20%
Mejora: (15/3)=5 -> 5 veces mas rápido
 (20/3)=7 -> 7 veces mas rápido



----------


--- audio - fallos ---

-en alsa falla al cambiar velocidad cpu (tanto con pthreads con sin pthreads)
->no falla con todas las velocidades. por ejemplo con 200% falla pero no con 300%

-alsa no va stereo. dejamos de momento driver en mono

-pulse: sin pthreads:  chasquidos, pero igual que antes de tener stereo, quiza un poco mas de chasquidos. OK

-en dsp, con debian 8, mala calidad sonido dsp (eso cuando lo puede activar)
parece que emula dsp con osspd que da muy mal resultado
para poner oss por defecto (y NO usar alsa):
->http://forums.debian.net/viewtopic.php?f=16&t=52919
Ver alternativa con emulacion de oss por parte de alsa sin tener que sustituir todo alsa por oss
otras alternativas: padsp, osspd (los dos se oye mal el sonido)

-en pulse a veces falla al reiniciar driver audio. sucede incluso con sonido activo (audio_playing.v=1 y sin silencio) y cuando va a finalizar
caso 1) el thread lo finaliza correctamente, y luego da error al iniciar driver sonido
caso 2) error al finalizar pthread: Debug: Ending audiopulse thread
zesarux: pthread_mutex_lock.c:321: __pthread_mutex_lock_full: Assertion `robust || (oldval & 0x40000000) == 0' failed.
Aborted
caso 1 esta gestionado por el emulador y hace fallback a audionull. caso 2 provoca la salida directa del programa
probado agregando pausas al finalizar pero falla igualmente


- En Mac, parece que timer mediante pthreads no va bien, se oye "lento". En cambio sin pthreads SI que va bien

- En Mac, snap_tests/test3200z88.zx se oye entrecortado. En Linux por ejemplo con pulse se oye continuo (con algun cortecito de vez en cuando)


--- audio - mejoras ---

-dsp en cygwin distorsiona. se ha probado con buffer unsigned pero sigue distorsionando

-quizá envelopes no se están gestionando bien….


-------------


-------------


--- video - fallos ---


**SDL**
-Windows:
SDL1 con threads: ok
SDL1 sin threads: ok

SDL2 con threads: petardea al mover/redimensionar
SDL2 sin threads: petardea al mover/redimensionar
->Quiza es un bug de SDL?
http://gamedev.stackexchange.com/questions/127691/how-to-stop-sdl-from-freezing-the-rendering-while-resizing-the-window


-Linux:
SDL1 con threads: ok
SDL1 sin threads: ok
SDL2 con threads: petardea al intentar redimensionar ventana y no deja redimensionarla
SDL2 sin threads: petardea al intentar redimensionar ventana y no deja redimensionarla


-Mac:
SDL1 con threads: no crea ventana aunque se escucha
SDL1 sin threads: no crea ventana aunque se escucha
SDL2 con threads: petardea al redimensionar ventana
SDL2 sin threads: petardea al redimensionar ventana
**Fin SDL**

-sdl2 en linux no deja redimensionar ventana con raton

-en stdout, simpletext, cuando caracter de menu <32 o >127 mostrar '?'

-card browser/tape browser en caso de stdout. Función en caso de stdout no puede retornar línea a la que apunta cursor. En esos casos retornar -1. Todas llamadas a dicha función deben controlar ese -1
browser para flash. primer archivo es de “truco”

-desactivar border dentro de aalib no va muy bien.. se queda que no redibuja el menu hasta al cabo de un rato y/o apretar teclas

-cambio de driver video desde menu:
*probar hacia aalib. a este, va pero no mueve el cursor hasta que redimensiona ventana

-blue display en aalib no se ve nada


-mac os x: tecla borrar en curses no va. Parece que es codigo 127 pero solo en mac...hay que probarlo mas para saber que no haya otra tecla que tambien genere 127

-en fbdev, si se usa use-all-res-fbdev, si se cambia zoom o border desde menu, peta con segmentation fault

-en fbdev, lectura de tecla windows, usada en teclado chloe. parece que es una tecla compuesta

-en fbdev fadeout no hace fadeout de footer

-fbdev. lectura teclas F11 en adelante  

-probando el test testtimexmode6.tap, sin real timex 512x192, y luego cargar un spg (digger.spg por ejemplo), da segmentation fault en mac. quiza porque esta continuamente haciendo
clear putpixel cache?? Para que no pete, basta con poner timex modo normal (out 255,0) y ya va

-esc en curses parece que no va ni en mac ni en linux

-menus de debug tsconf en stdout no se ven bien del todo. y en lista de sprites y tiles no se puede salir. en menu debug cpu tampoco se puede salir


-cocoa: fullscreen distorsiona

-cocoa: en fullscreen, kempston mouse no se mueve

-cocoa: tecla alt derecha distinguir de izquierda

--fullscreen no hace bien en cocoa

-cocoa: a veces al redimensionar ventana con raton se queda que no refresca
a veces dice  en debug:
Debug: putpixel with pendienteredimensionar active
...continuo...
eso tambien pasa al redimensionar desde easter egg

a veces dice en consola:

warning, deleted thread with uncommitted CATransaction; set CA_DEBUG_TRANSACTIONS=1 in environment to log backtraces.

y si se activa esa variable hace el dump de:

CoreAnimation: warning, deleted thread with uncommitted CATransaction; created by:
0   QuartzCore                          0x00007fff9d748e5b _ZN2CA11Transaction4pushEv + 331
1   QuartzCore                          0x00007fff9d74921f _ZN2CA11Transaction15ensure_implicitEv + 281
2   QuartzCore                          0x00007fff9d8bb4b6 +[CATransaction(CATransactionPrivate) activateBackground:] + 34
3   AppKit                              0x00007fff9567281c +[_NSCGSTransaction currentTransaction] + 75
4   AppKit                              0x00007fff95672cd6 NSCGSTransactionSetObjectForKey + 49
5   AppKit                              0x00007fff956fbba5 NSCGSWindowAddToBatchAction + 172
6   AppKit                              0x00007fff956fba6b -[NSWindow _updateManagedDisplay] + 494
7   AppKit                              0x00007fff956192d7 -[NSWindow _setFrameCommon:display:stashSize:] + 4114
8   AppKit                              0x00007fff956182b7 -[NSWindow _setFrame:display:allowImplicitAnimation:stashSize:] + 222
9   AppKit                              0x00007fff956f36ec -[NSWindow setFrameOrigin:] + 405
10  AppKit                              0x00007fff9572a5a2 -[NSWindow center] + 287
11  zesarux                             0x000000010a3dd7a3 -[ZesaruxCocoaWindow redimensionaVentana:height:] + 675
12  zesarux                             0x000000010a3e17ca scrcocoa_refresca_pantalla + 106
13  zesarux                             0x000000010a3fb9da cpu_loop_refresca_pantalla + 42
14  zesarux                             0x000000010a45fe4c cpu_core_loop_spectrum + 1436
15  zesarux                             0x000000010a3dc64c emulator_main_loop + 60
16  zesarux                             0x000000010a3dc671 thread_main_loop_function + 17
17  libsystem_pthread.dylib             0x00007fffad189aab _pthread_body + 180
18  libsystem_pthread.dylib             0x00007fffad1899f7 _pthread_body + 0
19  libsystem_pthread.dylib             0x00007fffad1891fd thread_start + 13




-En Mac si tengo --vo curses y no está soportado, le específico otro driver por consola y no me hace caso


-mejorar fullscreen en Xwindows . en portatil, con debian 8, no cambia modo de video

-si arranca con ao sdl y vo sdl, si se cambia de driver desde gui settings a xwindows por ejemplo,
no cierra la ventana sdl. si en cambio el driver audio no es sdl, al cambiar de video driver si que cierra ventana sdl

-en windows, parece que en z88 no lee las dos mayusculas a la vez para hacer el suspendido del z88



--- video - mejoras ---

-Revisar xwindow con 16 bpp

-sdl: de momento xwindows tiene mas prioridad que sdl

-footer para stdout y simpletext (cuando esta autoredraw activo)

-con tooltip desactivados, no salen atajos ni repite texto speech de "Active item... ". Esto es normal dado que usan el contador de tooltip

-compare_char_step de screen.c hacerla mas elegante, utiliza punteros a direcciones de memoria en vez de usar peek_byte_no_time...

-opcion para reducir tamanyo border. Ahora solo se puede: completo o no visible. Se podria hacer algo para mostrar medio border o menos por ejemplo

-stdout. opciones que se activan con espacio  (como activar/desactivar breakpoints), poderlas activar en stdout tambien

-Opción en stdout para simular tecla edit o delete 

-------------


--- QL ---

QL: lectura de bloques basic no siempre funciona
*cpu stats: quiza no porque hay mas instrucciones que z80....
-Soporte microdrive / floppy QL
-Que QL, cuando busque un archivo, lo haga todo en minusculas y tambien todo en mayusculas
-Soft QL
http://www.rwapadventures.com/ql_wiki/index.php?title=Sinclair%20QL%20Home%20Computer&lang=en
-Mirar uqlx a ver cómo hace el load 

-QL:
parece que los fallos de lectura en sentencias basic no son del archivo original sino que es algún tipo de error del emulador.
No sera culpa de esa suma de punteros a1+a6 que no siempre se produce, y que depende de… lo de los traps que me dijeron en el foro

-Intento interceptar funciones de lectura de sectores de microdrive. MD.READ. aparentemente tiene que saltar desde la direccion 525CH pero ahi no parece saltar nunca,
si desactivo todo trap de rom de ql, se queda colgado despues del menu inicial, seguramente intentando detectar microdrive
si no desactivo traps, no parece llegar tampoco ahi, aunque esto me ha llevado a interceptar el trap FS.MDINF, que se usa en dir mdv1_,
cosa que ahora consigo mostrar sectores libres/usados aunque no aparece el nombre del microdrive (registro A1 donde hay que guardar eso contiene direccion 100H !)

-teniendo desactivada la emulacion de microdrive , igualmente consulta cosas al root path
Debug: Source path: MDV1_BOOT Device: mdv1 File: boot
Paranoid: File /Users/chernandezba/Documents/ZEsarUX/zesarux/extras/media/ql/spacepods/boot not found



Ejemplo:
demos/cueshell.zip 

Linea 70, la lee mal hacia el final. pero no siempre lo hace… :(

-solo cambiar en la ruta de archivos de ql, la primera _ empezando por la derecha es un ".", sin tener en cuenta logicamente el mdv1_
Necesario?? si se pone ruta entre comillas no hay que cambiar los . en el basic por _
casos antonimos:
archivo se llama mouse_bin y hace lbytes mdv1_mouse_bin  -> lo raro
archivo se llama spacepods.bas y hace lbytes mdv1_spacepods_bas -> lo normal

-tema mayusculas/ minusculas en ql solo funciona directo en mac... que pasa con windows? y mac?


-implementar exec_mdv1_... mismo ejemplo con cueshell, va a   Returning header for file on address 00100H y ahi peta



-get-stack-backtrace para motorola. hay que tener uno para el user stack (usp) y el otro para el stack de (sp)

-sonido y otros comandos parece que a veces dejan el ipc en estado inconsistente. Quiza tambien por eso algunos juegos, como el spacepods, se cuelga despues de una partida

-debug y otros items de menu preparados para QL. condiciones peek/poke de debug en QL no funcionan en teoria
-funciones peek, poke punteros a funciones legacy. luego con el tiempo hacer que las de ql llamen a las que sean correspondientes
-en ql , funciones peek , poke etc desde menu, disassemble y otros sitios no deben tener en cuenta direcciones que son i/o mapeadas

Funciones de peek y poke nested soporta punteros de Motorola?
Quizá no funciona bien en ql en el momento que se activa debug

NO. Dado que no usa peek byte y poke normales sino que tiene funciones propias a las que no le afecta el nested de peek y poke. 
Solo le afecta el nested del core cpu

-parpadeo de cursor
-resolucion esta ok pero tamanyo pantalla deberia ser 4:3. hacer escalado chungo...

-algunos archivos de juegos vienen con QDOS file header:
http://foro.speccy.org/viewtopic.php?f=15&t=2008&start=4
como el psion chess
ver docs/ql/qdos_file_header.txt

-software 
http://www.dilwyn.me.uk/downloads.html

-Pendiente todo lo relacionado con texto: drivers modo texto para curses, stdout, ocr, input spool file, etc

-Emulacion microdrive y/o floppy. Mediante traps a la rom

-Trap de F1 y F2 servirá para cuando se quiera hacer autoload. Por tanto no quitar estos traps

-Combinación de teclas de QL que... resetea el IPC? Mencionado en manual

-util z80 moto poke pokea en motorola pero sin protección de escritura en rom

-------------



--- MK14 ---

*condiciones registros, establecer registros
*input, output, teclas, visualizacion leds
*y posiblemente muchas mas cosas...


-mk14 en fbdev hace parpadeo

-------------



--- Jupiter Ace ---

-tape browser en jupiter ace. esta mostrando el de spectrum??
-emulacion joystick
-quiza detectar magic de cabecera de archivo ace al cargar?
-real video para poder hacer Video out to file
Conversión de tap a wav en ace. Requiere rutina diferente que la de spectrum

-Revisar contend en Ace: de momento no tiene contend
-F4 (ocr) no implementado aun

-------------



--- Sprite Chip ZGX ---

-Scroll circular sin relleno de nada?
-Sprites que empiezan en coordenadas x -7 o más deben aparecer en pantalla. Ver vídeo 5
-Limitar tabla de sprites a máximo 65536/40=1638 sprites
-Limite de sprites por scanline? Tener en cuenta que sean sprites activos
-Desactivar chip sprites si reset y máquina no spectrum. Pero en set_machine si se hace ahi, fuerza a desactivar aunque en el .config se haya habilitado
-Sprites de 16x16?

-----------------------


--- Programas mios de Spectrum ---

-Para cursor draw:
*iconos con mas de una opcion, que se les indique de alguna manera. con un punto??? Con 3 pixeles en arriba derecha asi:
  ##
   #
*que pregunte si hay soporte mouse el programa basic. Si no, activar algun flag en alguna dirección baja (ejemplo 30000)
y al inicio de cursor draw lo lea de ahi y lo guarde en un setting suyo
*control de raton en todos sitios. Por ejemplo en aplicar sprites no se mueve

En cursor draw, Para sumar incremento de kempston mouse, hay que saber primero si incremento es positivo o negativo. Para eso , al restar posición final, si no hay acarreo, es positivo. 
Si es positivo, hay que sumar ese salto a posición cursor. Si hay acarreo, significa que va más allá de 255 y por tanto, no actualizamos cursor
Si es negativo, restamos ese salto (mediante neg y haciendo sbc) a posición cursor. Si hay acarreo, significa que va menos de 0 y por tanto no actualizamos cursor. 
En caso de suma de posición vertical no permitir que vaya más allá de 191 tampoco. 

Probar también con Fuse u otro emulador que soporte kempston mouse 
El ORG deberia estar ajustado para que acabe en 65536 el final

-org 58068
-ent 58068
->bajamos todo 1000 bytes

-org 57068
-ent 57068


tamanyo total sprites?



Revisar que org de cursor draw no está Justo para que acabe en 65535
Si fuera así habría que bajar el org para permitir bytes de más de la rutina de kempston mouse

Kempston mouse tiene que leer incrementos de posición de posición anterior
Sumar esa posición a la actual de cursor. Si hay acarreo, no sumar
Y en caso de vertical, si es mayor que 191, no sumar. Tener en cuenta también Tecla symbol que limita bajar a zona inferior 

Quizá control kempston mouse simplemente preguntar en cargador Basic y que éste haga un poke de alguna dirección fuera de codigo, y cursor draw lo lee al iniciar. Si está pokeado, arriba kempston mouse. Si no, no lo activa 

-----------------------


--- Chrome ---



-----------------------


-datagear dma: timing (puesto tiempos arbitrarios), demos que hacen out no se ven bien, modo turbo next afecta a timing?
Y montones de flags y parámetros de dma que de momento no gestiono


--- TSConf ---

-Puerto 57 tsconf es mmc?? usado en zifi demo

-tsconf: quiza algunas demos no se ven bien efectos de linea debidos al turbo? se ven mas arriba: ejemplos chess, 200, 

-Tsconf render modo spectrum compatible debería leer de buffer atributos y pixeles ; para que demos como overscan se vean bien

-tsconf y tr-dos no deberia hacer nested_core, solo detectar cuando se esta en core trdos

-tsconf sin real video no borra border. al menos en demo carousel.spg

-mmc. Esto tambien para baseconf. Parece que envia un comando FF invalido y luego se queda en un bucle

con gigascreen activo, al pulsar teclas en el menu (cursores?) las demos se alteran! :(
gestion interrupciones (dma, linea, frame) a la vez. cosa poco probable?
truco para que las demos vayan mas fluidas: poner turbo x1, en algunas no se ralentiza el cambio de turbo y van perfectas a 50 fps

-ideas por que tsconf va lento algunas demos: porque basicamente usan modo turbo X4
hay rutinas, como gestion de sprites y tiles, que se podrian mejorar ligeramente, cacheando algunas cosas.... pero aun asi, aunque desactive los sprites o tiles del todo, el uso de cpu no baja significativamente, apenas 1 o 2 % en un uso total de 75%..... la solución seria que el core de Z80 usase menos cpu fisica, asi el modo turbo x4 funcionaria mas ligero

-factor compresion tsconf a texto en drivers curses, stdout, simpletext que sea configurable

-Tsconf: escritura dma en fmaps. No he encontrado ningun juego que lo haga

-tsconf:
*tsconf: 
-limite sprites en scanline
-revisar mapeo rom mediante 32765, parece que a veces no va fina

-Cuando se interpreta solo vram y cuando bit shadow de 128k?

-Más info tsconf
http://forum.tslabs.info/viewtopic.php?f=12&t=157 



para probar sprites: ny17, cfparallax, digger, fast, fishbone, 200, mustang, 3bm, alterego beta,
girlsun, hny2k16, jptst, merhaba_fixed, mf11intro, robfgift, sirababol, soco, tcircles, uwol


newschool: usa mirror xf, yf de sprites. uwol mirror xf
con mirror_x en sprite, xorig debe decrementarse y detectar cuando xorig<0 tiene que hacerse xorig=511

mirror x,y en tiles: hnk2015, merhaba_fixed usa los dos tipos de mirror
probar capas de sprites tsconf: 200, , sirababol, mustang, alterego, fast, fishbone, uwol, soco

-synchronization demo .trd es para tsconfig

-cargar scl:
http://www.zx-modules.de/fileformats/sclformat.html

-----------------------



--- Chloe ---

-Contended memory. Solo contended paginas 5,7
-Floating bus port?
-Video out to file?
-Bit de bloqueo de paginacion de 128 no le afecta. Deberia?
Bit timex interrupciones en prism? Y chloe?
Solo afecta a chloe

-output save filter
Activado de rainbow, timex y ulaplus de chloe genera algún error si se arranca con chloe desde línea de comandos?
-revisar chloe keymap en windows y otros
pasa lo mismo en Z88 y windows
-Chloe y curses, con Chloe keyboard, da problemas en menu (no lee letras)

-------------



--- Timex ---

-Floating bus port?
-Video out to file?
-Contended memory?
Bit timex interrupciones en prism? Y chloe?
Solo afecta a chloe

-Revisar si border cambia (pasando de color rojo por ejemplo) en modo timex 512 cuando hay reset
-aviso splash de 512x192 tener en cuenta setting y border
-Putpixel cache para timex 512x192 nuevo metodo
-Hacer que demo timex modo 6 cambie color papel
-output save filter
-Exrom debe estar replicado todos los 8kb?

-Timings. Parece que 60 Hz , 263 scanlines (contador desde 0 hasta 262). Ver documento en extras/docs/ts2068. Ese pdf extraido de http://www.polylith.com/~brendan/ClassicComputers/Timex/image/TS2068TM.PDF
-Agregar TC2068 y UK2068


-------------


--- Prism ---

-Modo turbo tipo VGA. Modo turbo solo hago los tipo CPU aunque no igual que Jeff: el envia 100 interrupciones por segundo en turbo x2
-Test franja borde vertical para prism, comparar en emulador y maquina real
-no hace sprite chip
-Prism: opcion de timex real 512x192 no tiene sentido, ya que siempre lo hace real al ser la pantalla siempre de 512 de ancho..?
-Bit de bloqueo de paginacion de 128 no le afecta. Deberia?
-mejorar sonido. al grabar por ejemplo se oye entrecortado y hace que no se pueda luego cargar una cinta grabada
-Modo interlaced en prism
-modo 4,5 de atributos (256 color modes) tienen que usar buffer border prism de manera similar como hace el refresco del border
Prism modo de atributo que usa color de border 0 ula2, no soportará más de un color por scanline. Habría que hacer un buffer similar al del border o de sonido que recoja cambios en el puerto ula2

temporal 0100 - 256 Colour mode 1 - D0-D7 = ink colour. Paper colour is determined by ULA2 BORDER (IO 0x9E3B)

de momento se coge el color del border tal cual

-Bit de bloqueo de paginación se debería seguir en prism
-Failsafe se debería mantener después de reset normal?
-Video out to file?
-output save filter
-Activado de rainbow, timex y ulaplus de prism genera algún error si se arranca con prism desde línea de comandos?
-Prism vmask debería tener en cuenta modos Dock de timex?
-Modos de video leen atributos de memoria de pantalla en cada scanline, no usa scanline_buffer (que es el que usa el spectrum 48k por ejemplo).
Pasa lo mismo que con spectra. No es prioritario pero tenerlo en cuenta para futuros efectos tipo overscan. Lo que si que se usa es el border buffer,
que si que permite cambiar el border en una misma scanline
-Modo gigablend. Estoy usando un valor medio para el color en vez del calculo que usa Jeff:
                                                //Y montamos colores finales
                                                //RED= REDa(3) & REDb(2) & REDb(1) & REDa(0)
                                                //GREEN = REDa(3) & REDb(2) & REDb(1) & REDa(0)
                                                //BLUE = REDa(3) & REDb(2) & REDb(1) & REDa(0)
                                                int red_final=(red_a &8) | (red_b &4) | (red_b & 2) | (red_a & 1);
                                                int green_final=(green_a &8) | (green_b &4) | (green_b & 2) | (green_a & 1);
                                                int blue_final=(blue_a &8) | (blue_b &4) | (blue_b & 2) | (blue_a & 1);


                                                //temp mi metodo de gigablend
                                                red_final=(red_a+red_b)/2;
                                                green_final=(green_a+green_b)/2;
                                                blue_final=(blue_a+blue_b)/2;

-Modos overlay y registro 7 acabar de probar
-Cambio colores paleta en test program
Test RAM con clear 32767
Edición de colores de paleta 2


-------------


--- Pentagon ---

-snapshot .zx
-No deja desactivar timing pentagon cuando la maquina seleccionada es pentagon. dado que reinicializa el valor
-pentagon 512 y superiores modos de paginacion ram
http://www.zxuno.com/forum/viewtopic.php?f=12&t=400
relacionado:
http://www.zxuno.com/forum/viewtopic.php?f=37&t=552&sid=88847dce1ad30a54353f35884937ef1f
-Demo across the edge se ve ligeramente mejor si se pone setting IM2 slow a yes
Parece que tambien mejora si al lanzar im2 se restan estados... hasta 30 o asi




-------------

--- TBBlue ---

-Activar el kempston mouse entra en conflicto con el editor de basic. Al mover raton hace cosas raras.

Refresco de Tbblue para curses , stdout y simpletext en caso de:
-rainbow y modos tiles etc habilitados. O simplemente modo rainbow  

Last of the incompatible changes to tilemap made.

(R/W) 0x6B (107) => Tilemap Control
  bit 7    = 1 to enable the tilemap
  bit 6    = 0 for 40x32, 1 for 80x32
  bit 5    = 1 to eliminate the attribute entry in the tilemap
  bit 4    = palette select
  bits 3-2 = Reserved set to 0
  bit 1    = 1 to activate 512 tile mode
  bit 0    = 1 to force tilemap on top of ULA

512 tile mode is solely entered via bit 1.  Whether the ula is enabled or not makes no difference

when in 512 tile mode, the ULA is on top of the tilemap.  You can change this by setting bit 0


512 mode is its like the 256 tile mode, but with twice as many 

The tile number is 9 bits instead of 8 bits.  The "ula on top" bit of the tilemap flags is take as bit 8.

Before this update, 512 tile mode was automatically entered when the ula was disabled.  In this case "ula on top" was useless so was made bit 9 of the tile number.  Now we're getting rid of the requirement that the ULA be turned off to access 512 tiles

"ULA over tilemap" was only bit 8 of the tile number if the ULA was disabled.  We're getting rid of that requirement by making it bit 8 when the 512 tile mode is enabled.  So no need to have the ULA disabled to get there anymore.


-.nex file format info:
https://specnext.dev/wiki/NEX_file_format



TBBLUE: 
*eliminar puerto 55h. Corregir demo tosprram para que use 5bh en vez de 55h
*y otras novedades * New machine type: Pentagon 128K.. Ver registros 3, 7, 21
*Desactivar puertos viejos de establecer paleta sprites get/set

-soporte mas botones joystick/mas joystick de tbblue
https://www.specnext.com/forum/viewtopic.php?f=6&t=1142

-buffer de real beeper + cambios de cpu speed en next se oye beeper repetido, porque esta usando un buffer que depende del total de testados en linea,
y eso lo altera continuamente. Se nota al bajar el cursor abajo del todo en tbblue browser y luego pulsar continuamente. sin real beeper no pasa
->el por que lo sigue haciendo en next aunque hayas soltado la tecla de cursor abajo es un miesterio


-tbblue extended opcodes
https://docs.google.com/spreadsheets/d/1CFjp6sRIPRTShESC_1I5-pR6v7kTymk0hhUC1TN9sgc/edit#gid=0

-tbblue: Permitir tener border desactivado:
--esta en cpu.c forzado, en set_machine_params
--en menu.c, no permitido en gui settings


-mostrar electron en tbblue, con modo turbo, refresca linea un poco por debajo de posicion electron

-mas patterns de sprites:
N6, despite the name, is the least significant bit.

This 7-bit pattern number can identify 128 patterns in the 16k pattern memory, each of which are 128 bytes in size. The full 7-bits are therefore used for 4-bit sprites.

For 8-bit sprites, N6=0 always. The remaining 6 bits can identify 64 patterns, each of which is 256 bytes in size.
De momento estoy haciendo 64 patterns-> por tanto, 256 bytes por pattern

-otros tipos de patterns (4 bit etc) y atributos extendidos sprites (quinto byte)

-en visor de sprites, dice Sprites y zona memory tambien. Quiza deberia decir mejor patterns?

	

-reloj deberia salir en nextos, ya que implementa el chip de reloj. Porque no aparece?
-probar que pasa cuando llega a mas de 12 sprites en linea tbblue
-Sincronizar bits de joystick de puerto config2
-no dejar aumentar memoria divmmc mas de 128kb, pues tbblue no tiene mas que eso. sino, se accederia a memoria mas alla del divmmc

-a veces al arrancar la maquina no encuentra archivos de la sd. Quiza por algun registro de la mmc que no se inicializa correctamente?
-para emulacion de +3e, la sd se utiliza la sd secundaria. emular segunda SD????
-considerar algunas escrituras de puertos que dicen:
only in bootrom or config mode:

-estoy considerando igual estado hard reset que estado power on
Ver registro 2:
(R/W)	02 => Reset:
			bits 7-3 = Reserved, must be 0
			bit 2 = (R) Power-on reset
			bit 1 = (R/W) if 1 Hard Reset
			bit 0 = (R/W) if 1 Soft Reset


*Contended en mmu tbblue. De momento la contencion la hace por bloques de 16 kb

-PIXELUP/DN quiza pueda ir mas alla de coordenada 191
https://www.specnext.com/forum/viewtopic.php?p=8226#p8226

-------------


--- Baseconf ---

-Baseconf:
hay dos tarjetas según:
Which card is activated, sets bit 4 port # 7FFD.?? -> pendiente

-No llega a arrancar la rom

-Baseconf soporta ulaplus


-------------

--- +3 ---
-+3: funcionan :

3d kit disco 1

zigurat software:
autocrash
carlos sainz
gp f1
jungle warrior
senda salvaje
sito pons

Mirar porque fallan muchos dsk

al cambiar funcion de busqueda sectores: ahora busca sector id de cada sector:
emilio sanchez vicario: usa sectores consecutivos
paris dakar: NO va, pero veo que usa sectores consecutivos tambien (a partir de pista 1)
drazen petrovic basket
night hunter. aunque luego no carga la cara b

-autoload en +3 de cinta no va, seguramente porque al tener un dsk insertado, la rutina salta diferente (o le envia el enter antes)



-------------

--- Betadisk ---

-betadisk: nmi no parece guardar el snapshot, aunque lo intenta

-------------

--- ZSF ---

-parece que ZSF no guarda estado ulaplus o timex. probar con view8x1.tap

-Incluir campo para numero de versión?
ZSF: con zxuno y divmmc, al cargar snapshot, esxdos no está presente. Si activo y desactivo setting de divmmc paging, ya aparece:
porque no habilita el nested_function de divmmc. Sera tan facil como guardar el setting de diviface-paged-enabled y si es asi, 
activar ese nested (por defecto tenerlo desactivado). En caso de zxuno, divmmc en zsf no debe guardar/grabar su memoria ram ya que es 
la propia memoria de zxuno quien lo tiene, lo mismo para tbblue, y prism
-seguir formato zsf:
-Opción para poder cargar snapshot pero sin cambiar la rom actual... útil por si grabamos un snapshot por ejemplo en máquina 128kb pero la rom era la del opense
->esto ya esta para .sna, hacer para zsf
-Opcion para forzar siempre snap grabar zsf de 48k

-Incluir campo con fecha grabacion snapshot


-quiza en set_machine, cuando hace:
  //Si estaba divmmc o divide activo, desactivarlos
  //if (divmmc_enabled.v) divmmc_disable();
  //if (divide_enabled.v) divide_disable();
  if (diviface_enabled.v) diviface_disable();
Igual deberia desactivar tambien setting divmmc_enabled y divide_enabled.v, porque sino, desactiva el setting diviface pero los otros 
pueden quedarse activos. Esto en load snapshot zsf de zxuno lo hace aparte

-Formato zsf: completar para mas maquinas
*tbblue: no hasta que no este mas estable la plataforma
*MK14: falta incluso funcion de grabar registros de la cpu      
*QL: falta incluso funcion de grabar registros de la cpu        
*TS2068   
*Z88      
*Sam      
*Chloe140 
*Chloe280 
*Chrome   
*Prism    
*TSConf   
*ACE      
*CPC464  



-al cargar un .zsf de zx8081 que contiene un .zsf.config,con parametros de wrx, se resetean despues:
Info: Parsing custom configuration file /Users/cesarhernandez/Documents/ZEsarUX/zesarux/src/pruebahero.zsf.config
Info: Enabling RealVideo
Info: Enabling WRX video mode
Info: Block id: 1 (ZSF_MACHINEID) Lenght: 1
Info: Setting timer_sleep_machine to 20000 us
Info: Setting ZX80/81 CPU core
Info: Disabling WRX video mode
Info: Loading keymap
Info: Emulating ZX81 with 16 KB (ramtop=32767)

-formato zsf debe guardar iff1 y iff2 por separado

-parece que en los zsf se genera al final un ZSF_NOOP. -> lo estoy metiendo yo por codigo:

  //test meter un NOOP
  zsf_write_block(ptr_zsf_file, NULL,0, 0);

->pasa casi lo mismo con un .zx pero en estos, hay parametro de si esta wrx activo (y aunque se pierda desde el config se lee desde el .zx),
pero con el --vsync-minimum-length se pierde y no esta en el .zx ...
->el config se carga primero. Luego el snapshot, y al meter core de zx80/81 se desactiva wrx y otros settings.
Quiza habria que parsear algunos parametros del .config tambien despues de cargar el snapshot. Cuales? por ejemplo --realvideo, --wrx, --vsync-minimum-length



-----------------------

--- SAM coupe ---

-real video
-Alt derecha en PC es altgr?
-soporte snapshot .zx
-refresco en curses:
*al pulsar esc en curses en sam se queda pulsado??
-refresco curses, text, stdout, F4
*linea inferior no funciona. porque????

-breakpoints para cuando pagina de ram o rom papeada, de tipo:
seg0=xxx
o ram0=xx ram1=xx ram2=xx ram3=xx
rom0=xx rom1=xx
-Mapeo cursores sam independientemente de tipo de joystick seleccionado?
-Cintas para probar en ftp://ftp.nvg.org/pub/sam-coupe/tapes/
-Interface trinity Ethernet /SD

-echar un vistazo a:
http://velesoft.speccy.cz/sam_zx128.htm

-Atomlite... intentar poder convertir floppy a imagenes atom lite
-atom lite: caso de lectura de reloj Dallas. Poner caso vacio

-Emulacion de floppy
-Beeper con real beeper no suena bien. Sin real beeper si
-beeper con chip sonido suena mal a veces. sin beeper suena bien
-Parece que si ponemos 256 KB de memoria no lo detecta el basic
-memoria contended. toda esta contenida?
-velocidad es correcta? t-estados por linea, mhz...

-rutina ascii_to_keyboard_port. la que permite enviar texto por spool o leer texto de drivers curses, stdout. Agregar simbolos?
-emulacion real del chip de sonido (no simulacion contra el AY como hay ahora)



-------------

--- CPC ---

-ay player en modo cpc no borra debajo de pantalla diferentes ventanas
--machine cpc464 en aa,caca en consola de texto real da segmentation fault
-dibujado de border cuando pantalla es menor de lo habitual, temporal, no va bien en casos como paperboy. Esto seria mejor para solucionarlo implementar realvideo
-debug i/o ports
-teclas cpc y keymap para otros drivers. ahora solo esta para cocoa y xwindows y sdl y fbdev
-Que pasa con keymap y otras teclas de cpc en drivers que no soportan keymap
-Hardware scroll no va fino
-Paginación de memoria cpc en la función por defecto array que tenga: 0,1,2,3
Luego en cpc con más de 64 kb se puede re mapear según registro 3 del gate array
-Modo realvideo
-cpc664. disco y rom de 24 kb. Paginacion de diferentes roms mediante puerto DFXX. http://www.grimware.org/doku.php/documentations/devices/gatearray#upper.rom

-Carga de .zx falla en uno (cara.zx)
-Video out to file?
-Cdt ahora entra siempre como real tape. Se debería detectar tipo si real tape o standard (para standard falta traps a ROM que aún no están)

-parece que hay juegos que apagan el motor cuando no deben: MEnfin, bubble bobble, cabal.
temporalmente desactivamos comando de stop real tape cuando motor off

-en debug paginas memoria, que muestre correctamente paginas dandanator cpc

-Implementar registros 12 y 13 crtc del cpc para scroll y cambio de buffer video

For a 16k screen:
screen start byte offset = (((R12 & 0x03)*256) + (R13 & 255))*2
For a 32k screen:
screen start byte offset = (((R12 & 15)*256) + (R13 & 255))*2
On a hardware scrolling screen, there is a problem:
C7FF->C000
CFFF->C800
D7FF->D000
DFFF->D800
E7FF->E000
EFFF->E800
F7FF->F000
FFFF->F800

Quizá esto dice que al incrementar de c7ff pasa a c000 en vez de c800

Seguramente al dibujar pantalla cuando se pasa de offset ffffh se vuelve a c000h, es decir, el offset cuenta siempre desde la base de pantalla y un contador que va de 0 a 16383 y luego resetea a 0 (si se define pantalla de 16k)

http://www.cpcwiki.eu/index.php/Programming:Hardware_scrolling_the_screen_using_the_CRTC

-Cpc traps Rom
http://www.cpcwiki.eu/index.php/Format:TAP_tape_image_file_format
-Cdt en amstrad es como tzx. Aprovechar rutinas de standard tape. pendiente

-refresco en drivers de modo texto (de pantalla entera: curses, stdout, simpletext): falta colores curses

-rutina ascii_to_keyboard_port. la que permite enviar texto por spool o leer texto de drivers curses, stdout. Agregar simbolos?

-Sd en cpc
http://www.spinpoint.org/2016/05/06/m4-board-retrofun-8-bit-amstrad-cpc-wifi/#comment-69



-------------



--- ESXDOS handler ---


-soporte LFN para esxdos handler. quiza acortar archivos al listar con "dir" y similares. que hacer si hacen fopen de archivo largo?
acortar archivo... pero habra que acortar tambien ruta subdirectorios....
complicado. quiza ver mejor como gestiona los nombres largos desde nextos

-"overlay" esxdos handler: sobreponer una segunda carpeta sobre la principal
Asi se puede tener una raiz por ejemplo para divmmc comun, y luego mapear carpetas adicionales para pruebas
O quiza, en vez de overlay, una segunda unidad de disco

-Esxdos. Decidir hl o ix según si está paginada la memoria divmmc?

Unhandled ESXDOS_RST8: B3H !!

al abrir, que pruebe con mayusculas y luego minusculas
quiza habra problemas con rutas como : /BIN/paco

si subo todo a mayusculas->no ira
si subo todo a minusculas->no ira
quiza aqui entonces mejor que el usuario tenga su ruta bien creada en disco todo minusculas o todo mayusculas
ver que hace zxpand aqui....

*recomendar que o bien usen todo mayusculas o todo minusculas... en mac o windows no hay problemas, en linux si
-FAQ esxdos handler. Comentar mayúsculas etc

-Evitar el uso de ../../ etc en esxdos handler para evitar que puedan salir del root de esxdos. Esto también está planteado para zxpand 

-------------





--- ZRCP remote command ---

Macros o lenguaje en ZEsarUX
Que permita integrar con ZRCP y acciones...

-Parseo de parámetros con comillas en ZRCP 

-Que se puedan ver errores debug verbose etc pero en ZRCP, de manera que no se vean en consola pero si en ZRCP. Eso permitiría debugar remotamente en raspiboy por ejemplo


-Protocolo remoto:
Ver si la simulación de pulsado de escape desde smartload de remote protocol no se detecta como space-break en zxuno

-al salir de socket en remote, ver si sock_conectat estaba asociado a algo

-en hexdump y hexdump internal, compara c>127 en caso de char? warning al compilar en linux

-Mejorar load source code. Poder saber líneas siguientes a un label empezando en siguientes líneas a label. Cache? Indices?

-comando send-keys-string  y send-keys-ascii no van si driver stdout. con otro (incluso con null) va. Quiza tampoco va spool file con stdout?

-opcion ZRCP que indique que memoria divmmc/divide esta mapeada: de momento dice divmmc sin mas

-opcion ZRCP para cargar y grabar binary

-Comandos ZRCP obtener datos sprites tsconf


-Comando genérico para alterar algunos settings desde ZRCP hacia settings de menú
Quizá haver función que mediante una string de entrada (quizá misma que command line) que pueda:
-establecer valor
-conmutar valor, en el caso de variables 0/1
Luego se podrá usar en el futuro para nuevos settings de menú y command line, y automáticamente desde ZRCP 


-for the get-visualmem-xxx commands, could you please add start address & length/end address params?
Mark Hutchings  

-exit-emulator de ZRCP no parece funcionar en Mac, pero en Linux si. Va como a medias, desactiva el sonido pero no sale


-------------



--- menu - fallos ---



-------------

--- menu - mejoras ---

-Color rojo de stick osd en tema clean, no se ve

-En info file de file utils, decir tipo de archivo. Usar alguna llamada común para tipo archivo y visor archivo 

-entradas de menu protegidas a lo ancho a mas de 32? En alto, si. pero y en ancho?
->ahora ya no da el cpu_panic de Window out of bounds
->y cuando x es 32 o mayor se controla desde void putchar_menu_overlay_parpadeo
en cuanto a maximo de la string en memoria, vale MAX_TEXTO_OPCION=60


-Mouse: para que no haga framedrop al moverse sobre un menu, quiza se deberia considerar cada x frames de tiempo.

-Gestor de menús que permita agregar función para cambio overlay texto 

-Quitar menu custom machine y meterlo dentro de machine selection, de tal manera que pida la ROM al seleccionar máquina

-Permitir teclas numericas como atajos. Para ello hay que reasignar gestion de teclas cursores que las convierte a '6' y '7'

-Al insertar mmc o ide debe ir primero a rutas shared, tal y como hace smartload por ejemplo. y tambien ir a ultima ruta al abrir selector archivos


-------------


------------------

--- FAQ ---

-Documentar un poco modo paginación zx uno


------------------



--- Accesibilidad ---

-tecla para accessibilidad, para poder escuchar contenido de una ventana de menu: quiza misma tecla asociada a OCR. que ademas envie ese texto al portapapeles o algun archivo
para poderlo inspeccionar despues


------------------




--- Mac OS X ---

-Poder asignar extensiones para abrir con zesarux en Mac OS X. Y de paso eliminar warnings de línea de comandos
-cocoa: En Mac, si se pone en .zesaruxrc: --vo curses Inicializa la ventana en blanco de Cocoa y luego abre ventana de curses donde transcurre todo...
Es poder saber antes las opciones de configuracion dado que la comprobacion del driver video (--vo) se hace en el main del scrcocoa.m
-full screen con cocoa gl. desde menu, no redimensiona ventana
y haciendo maximize desde ventana, hace full screen pero distorsionado
-cerrar el emulador desde el boton de cerrar ventana, con driver opengl, acaba provocando segmentation fault
-script de speech say falla cuando texto empieza con "-", como en README
-con app de "loopback audio", ejecutando ZEsarUX como app de Mac se oye diferente. ->  Desinstalando "loopback audio" no pasa

-Full screen cocoa gl

-en mac, con driver cocoagl o no cocoagl, hace una especie de parpadeo abajo en el footer a veces. quiza solo es en el no-opengl?


Comentar los cambios de cocoa con llamadas al main thread, que son debidos a:

"
Info: resizeContentToWidth 352 X 328
2018-09-28 20:53:10.714 zesarux[514:9037] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSWindow drag regions should only be invalidated on the Main Thread!'
*** First throw call stack:

https://discourse.libsdl.org/t/crash-on-macos-10-14-mojave-with-sdl-showmessagebox/25100/2

Apple only allows native UI functionality to be used on the main thread in macOS and iOS. It sounds like they have more robust runtime checks for that in 10.14, which is probably a good thing if the alternative is hard-to-diagnose glitches and crashes due to memory corruption etc.

See also: https://developer.apple.com/documentation/code_diagnostics/main_thread_checker 2

Ouch, thank you for the response – this will require some hard studying to figure out how to pull this off properly. Unfortunately most of the code I’m playing with is dimensions beyond me, but fingers crossed that I’ll be able to get it functioning.  :stuck_out_tongue:

"

------------------



--- windows - mingw - fallos ---

-footer en fullscreen no lo ubica bien. En SDL de Linux va bien

-probar con sdl audio y video simpletext . parece que no se oye el sonido. En Linux va bien

-Icono bmp para Windows. Y meter icono dentro del exe para que se vea en la barra de tareas
http://stackoverflow.com/questions/708238/how-do-i-add-an-icon-to-a-mingw-gcc-compiled-executable

-Utilidades aparte que vengan compiladas en Windows . quiza tambien para linux y mac?

-latencia sonido sdl

-rutas a utilidades externas no funcionan a no ser que esté en path actual, probado con gunzip (usado en rzx)

-rzx: eliminar dependencia de comando "cat"-> necesita ejecutarse en consola bash de mingw para que lo encuentre


-quiza version threads de windows no va bien porque usleep en windows está deprecated....


-detector de silencio solo activo por defecto para algunos como alsa y dsp sin threads
-Quizá clicks de sonido en Windows se debe a reseteo de buffer que hago para compensar delay? Creo que no
Poner dichas opciones en menú para poderlas editar. Y que permita grabarlas en config
Y si no las reconoce como command line, que las ignore (en casos de cambio de driver etc)
Fifosdlbuffersize 4 y sdlsamplesize 2048

-audio clicking en windows.pruebas
*esto con version sin pthreads. Con pthreads parece que lo hace mas

*con 3.1 antigua. mismos clicks
*con pthreads o sin pthreads: mismos clicks
*cambiando sdl_mixaudio por copia a mano: mismos clicks
*si dejo que arranque sin mas: acaba generando clicks al cabo de unos segundos
*si meto en buffer de audio todo 0: no hay clicks
*si meto en buffer de audio todo 1: hay clicks
*si meto en buffer de audio todo con valor 48: hay clicks
*si meto en buffer de audio todo con valor 30: hay clicks
*si meto en buffer de audio todo con valor 24: hay clicks
*si meto en buffer de audio todo con valor 12: hay clicks

*pongo solo sdl_pauseaudio(0) al inicio: hay clicks
*sin multitask en menu: hay clicks 
*suele aparecer despues de 5-10 segundos de iniciar el emulador, pero no antes de esos 5
*si desde el menu se cambia driver a null, y luego de nuevo a sdl, el click aparece despues de esos 5-10 segundos de habilitar driver

*clicking con tarjeta audio intel hd de virtualbox
*con virtualbox drivers: mismo efecto: clicking con tarjeta audio intel hd de virtualbox

*cambio a driver ich ac97: con 44hz, 16 bits: no hay click. con 8 bits: no hay click.  con frecuencia 15600: no hay click
*con este driver ich ac97: no hay clicking normalmente (solo quiza al cambiar de ventana o perder fps). BIEN

*con driver audio intel hd (el que tenia antes): hay clicking normalmente . MAL


-------------



------------------

--- MMC y DIVMMC ---

-Probar otros firmwares de divmmc, si es que los hay: fatware?

-Mmap para acceso a mmc/ide. Pero solo cuando se activa "persistent writes".
mmap tiene flags para decir que es solo lectura pero supongo que fallaria con segfault si escribimos en una zona de solo lectura
Sin persistent writes deberia hacerlo como siempre: escribiendo en memoria, sin mmap
Con mmap, se deja de hacer flush, ya que lo hará automáticamente (??) el sistema operativo, al activar mmap 

-TODO. Bit MAPRAM can be set to '1' only (when it's '1', only power-on can return it to '0').

-En Mac parece que siempre falla al escribir en imagenes de 2 GB (y superiores)
retorna:
ptr_mmcfile: 2017595472
escritos: -2147483648


-Revisar protección de escritura en páginas divmmc

-quizá accesos a mmc se deberían hacer directamente a disco, combinando fseek, en vez de memoria. hacer flush de por ejemplo imagen de 512MB en mac tarda unos 4 segundos. Fseek en Windows que limitaciones hay?

-Divmmc en teoría esto está mal:
It's also mapped instantly (100ns after /MREQ of that fetch is falling down) after executing opcode from area 3d00..3dffh.
->Debería paginar después de ejecutar opcode y en cambio lo está haciendo antes
->Pero realmente si lo cambio no funciona


-MMC (y tambien para IDE)
Mejorar mmc flush etc. Al escribir a disco, debería dejar las operaciones de escritura en espera, esto 
cuando se lanza desde otro thread desde timer Es critico. 
Si no hay threads, no hay problema, hay un solo hilo y los dos eventos no se dan nunca a la misma vez
Ejemplo:
Inicia escritura de byte en memoria mmc. Mete variable flush a 1. Pero aún no ha escrito
Inicia flush. Mete variable flush a 0. Aún no graba a disco
Sigue escritura de byte en memoria mmc. 
Sigue el thread de grabado a disco pero puede ser que el byte modificado no entre esta vez

Aunque entrará en el siguiente flush, si lo hay. 

En este caso esto puede quedar corregido simplemente si al expulsar mmc file siempre hacemos flush. 
Pero esto NO es recomendable pues entonces haríamos siempre flush de toda imagen, se haya escrito o no. 
Quizá activar flag cuando se escribe al menos una vez y al salir sabemos si hay que grabarlo o no 




------------------

--- IDE y DIVIDE ---

-Códigos ide de identify deberían tener los textos con los bytes alternados a pares
-No funciona IDE 8 bit

------------------


--- Interface 1 ---

Hacer un CAT se queda en bucle
Ahora de momento solo lee microdrive de prueba prueba.mdr
No hace ni read, ni write, ni format...
rom quitada de la distribucion. tiene nombre if1-v2.rom.demomento_desactivada

-------------------


--- SPECTRA ---

-no hace correctamente modos rainbow, ya que lee los atributos de pantalla tal cual de la memoria, y no como un modo normal
rainbow en que se coje del buffer buffer_atributos que se va escribiendo desde el core. Esto quiza es casi imposible de hacer,
aparte que no creo que en spectra se contemple esto, pues ademas el timing de la pantalla es diferente
Por tanto, solo tener en cuenta que con spectra activado, demos como la overscan no se ven bien

-no funciona scroll de sprite chip. Dado que spectra actualiza la pantalla segun su memoria interna, que se replica en cada operacion de poke_byte.
Pero el scroll del sprite chip no se realiza con poke_byte, sino con escritura directa a puntero de memoria

------------------

--- ZXPAND ---

-en CMDR, al mover archivos, mete el current dir apuntando al directorio de la derecha. Por tanto esto falla. Se puede corregir yendo a la izquierda y volviendo a seleccionar el directorio actual (si es el directorio raiz, seleccionar ".."). Pero esto parece un fallo de CMDR y no del emulador
-ordenacion de archivos en listado CAT

-operaciones de archivos son case insensitive (da igual si esta en mayusculas o minusculas). Pero subcarpetas dentro del zxpand filesystem debe
ser siempre en mayusculas. Carpetas siempre se muestran pero no se podran acceder las que no sean todo mayusculas


-zxpand en zx80 se ven caracteres de config por ejemplo mal. pero la rom tambien muestra caracteres mal, dado que usa una overlay rom de zx81, no de zx80

-lecturas que se producen al cargar CMDR pero despues de hacer fclose y sin hacer fopen. revisar:
debido a funcion setjoy. los valores de joystick deben volver incorrectos y hacen que puerto BC (registro B) se corrompa
(ver docs/zxpand_cmdr.txt)

-sound tracker de andy rea se cuelga. porque? stcplay , gasman y sound_demo usan el mismo player
requiere ramtop en 24999 y CONFIG "M=H"
carpeta aux_zesarux/zx81/sound_demo  tambien

-Zxpand+ nuevo firmware?
https://github.com/charlierobson/ZXpand-Vitamins/wiki/ZXpand---Online-Manual
------------------

--- Genericos - fallos ---

-breakpoint pc=0 no salta si debug->reset. Pero si que salta si se hace randomize usr 0



-uso de cpu aumenta con el tiempo, dejando maquina spectrum 48k recien arrancada
Al cabo de una hora pasa a consumir 60% cuando lo normal seria 17%
**Haciendo reset no recupera. Cambiando de driver de video tampoco.
**Parece que en Mac os X no sucede
**pruebas: ao null vo null no sucede
**ao null vo xwindows si que sucede. haciendo CTRL-Z y volviendo no se corrige
**ao null vo xwindows sin pthreads tambien sucede.
**parece que con SDL no sucede
**con xwindows, al arrancar, sin rainbow, sin memptr, sin visualmem, sin cpustats, con contended memory, 48k, ao null, vo x11, zoom 1
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5519 chernan+  20   0  208860   5692   3708 S  17,6  0,1   0:02.95 zesarux

-cuando lleva un rato:
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5519 chernan+  20   0  208860  46160   3708 S  65,7  0,6  26:10.33 zesarux

-con disableshm:
al arrancar:
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 6288 chernan+  20   0  208864   5564   3288 S  16,6  0,1   0:02.71 zesarux
cuando lleva un rato:
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 6288 chernan+  20   0  208864   5568   3288 S  16,2  0,1   7:29.56 zesarux

-Parece que es culpa de la shm!!
-ni XSync ni XFlush poniendolos detiene el uso de cpu aumentativo... debe ser algo que falte de la SHM.. o algo que falte ejecutar...
quiza solo falla en el portatil?
-quiza hay que "FIXME: should wait for an ShmCompletion event here" tal y como dice en el codigo?


-cintas de entrada (y de salida?) no realiza operacion fclose. Por tanto al abrir un archivo tap, tzx etc lo deja abierto. En
sistemas Unix no pasa nada, pero en Windows significa que una cinta que se haya usado, se quedara abierta y si se quiere borrar dicho archivo
tap, por ejemplo desde el windows explorer, dira que el archivo esta bloqueado, hasta que se cierre el emulador
Hacer que las funciones eject (y de cambio de cinta) realizen fclose...

-En lectura de tap, usar tal cual como ahora fread etc para poder leer archivos tap muy grandes y no tener que cargarlos en memoria


-a veces al salir con CTRL-C no se cierra. la ventana se queda en negro
Dice llamando a aofile_close y vofile_close pero nada mas
Parece que se cuelga en el refresca pantalla inicial de fadeout, con menu abierto
quiza es que pilla en medio de otra operacion de refresca_pantalla
Falla con drivers: sdl


en pruebas: -timer audio en raspberry, quiza pausa deberia ser menor en el caso de pthreads

-simulacion de carga: en zx80 no se deben ver las franjas

-con fbdev, full screen y zoom 1, en raspberry (con 16 pixeles de mas de margen) hace zoom escalado. sin fullscreen, no hace escalado. normal??




--- Genericos - mejoras ---

-Lock sdl al refrescar hace printf?


-fallback de video y/o audio no lo hace si se especifica --vo .... o --ao ...... cosa que normalmente ya estara en el .zesaruxrc y por tanto no se hara fallback

-Parámetro change slow en rpi que no venga por defecto
Y lo haga la gente manualmente y/ o se detecte si es rpi1

-Quizá componentes threads que se pueda decidir cuál se activa como threads y cual no 
Como variable de ejecucion

-remote command: Hexdump internal y de mapped memory debería ser misma función
Luego flags para ver ascii o ver hexa o quitar espacios en hexa, etc 

-remote command: poder hacer dump de codigo fuente de lineas concretas

-funciones ram refresh se deberian implementar con nested core:
void set_peek_byte_function_ram_refresh(void)
{

        debug_printf(VERBOSE_INFO,"Enabling RAM refresh on peek_byte");

        peek_byte_no_ram_refresh=peek_byte;
        peek_byte=peek_byte_spectrum_48k_refresh_memory;

}

void reset_peek_byte_function_ram_refresh(void)
{
        debug_printf(VERBOSE_INFO,"Setting normal peek_byte");
        peek_byte=peek_byte_no_ram_refresh;
}




-SDL2 mejor usar scancodes en vez de keycodes, al menos para teclas extendidas

-asumir opciones --enable-memptr --enable-visualmem --enable-cpustats por defecto activas
Opciones en cambio para desactivarlas en script configure

-en configure, al activar joystick, activa tambien pthread. porque???
LDFLAGS="$LDFLAGS -lpthread"

-Opción compilación para máquinas 'lentas':
Activo para rpi1 pero no para 2

-Comprobar si con rpi1, con el aumento de borde, sigue llenando la pantalla
rpi2 no? quizá es porque no he usado parámetro fullscreen y por tanto no ha redimensionado ventana

-Make utils al construir binario
Incluir bmp a sprite y bmp a prism en utils

-formato .zx:
Agregar:
-divmmc
-zxmmc
-zxpand

Formato .zx en máquinas bigendian los enteros 16 bits se guardan big endian



-Implementar flag Q? Ver docs/flagq.txt


-Mas archivos auto config pues versión Windows no tiene ssl

-en fbdev, con --no-use-ttyrawfbdev, enviar F6 y F7 en Z88 tal y como se hace en curses, por ejemplo (diamond, square).
he intentado meterlo en :
                                //Para Home
                                                                                                                case 49:
                                                                                                                        if (scrfbdev_kbhit() ) {
                                                                                                                                unsigned char tecla4;
                                                                                                                                tecla4=scrfbdev_getch();
                                                                                                                                printf (" tecla4 %u \n",tecla4);

                                                                                                                                switch (tecla4) {

                                                                                                                                        case 126:
                                                                                                                                                util_set_reset_key(UTIL_KEY_HOME,1);
                                                                                                                                                break;

                                                                                                                                        case 55:
                        printf ("F6 ");
                                                                                                                                                //F6 es Ctrl /diamond
                                                                                                                                                util_set_reset_key(UTIL_KEY_CONTROL_L,1);
                                                                                                                                                break

pero parece que envia otra tecla diferente



-en raspberry, al salir de fbdev, dejar la resolucion tal y como estaba

-Añadir a docs techs specs de zx81

-features zx80, zx81, zx88 y spectrum por separado

-teclado numerico para spectrum y otras maquinas. Para CPC si que esta.

-acabar de probar putpixel cache con zoom 1, en raspberry, con o si putpixel cache. que es mas rapido?
probar con over128

-Documento de cómo se usa la putpixel cache

Ampliar el que ya hay

Tanto para realvideo como sin

Con realvideo, cada vez que se refresca pantalla se lee de rainbow buffer. Se ahí, los putpixel que se hacen, si que pasan por la putpixel cache para ver si se envían a pantalla gráfica o no

Sin realvideo, similar, pero no hay rainbow buffer sino que se hace putpixel a cada refresco y se mira si está en la cache putpizel 



-detectar para cualquier tipo de carga si va mas alla de la ramtop

-footer para cacalib, aalib

-fadeout en aalib muy lento. de momento desactivamos

-al cambiar de cpc a z88 en aa, peta

-cambiar en aa, caca de cpc464 a timex peta el emulador


**para speech ,  rutinas deteccion de caracteres:

crear tambien metodos de deteccion de tercer trap? Aunque esto quiza solo sirve para el hobbit...



**

-Speech:
-enter le envia siempre speech pending. normal?
-en speech de mac, en english, al enviar opcion "yes/no", la "No" dice: "No. N"->eso lo traduce como "Number N"
-Tecla escape debería hacer break cuando se está escuchando speech
O quizá setting configurable 

-relee item menu cuando estas sobre item que no tiene tooltip. Ver codigo:
-				//TODO: esto no tiene efecto, sigue releyendo cuando estas sobre item que no tiene tooltip
				//menu_speech_tecla_pulsada=1;	

-settings activados con [X] se leen raro, con equis: ejemplo: "ex CPC mode" (activado), o "CPC mode" (desactivado)

-script de mac say no reproduce lineas que empiezan por "--", como algunas lineas del FAQ

-al leer lineas con varios hotkeys, solo lee el ultimo hotkey


-Misma tecla F definida como ocr que en ZX Vision haga ocr+speech también. Así se pueden leer siempre los menus
-Grabar vídeo text speech completo

-Speech al moverse por líneas de menú se escucha antes de que se mueva el cursor. Por que?
-speech: sin multitask, a veces se descuadra la linea de menu que lee. ejemplo: ir a accessibility settings, y cuando este leyendo "active item..." pulsar tecla. Creo que esto pasa desde siempre


-------------

--- Mejoras especificas de ZX-Uno: ---

-traps de cinta de bios zxuno deberia considerar solo opcodes y no registro pc

-al escribir archivo default spi flash, al buscarlo por entre todas las rutas, si en una lo encuentra pero no se puede escribir,
que no siga buscando y alerte del error de que esta pero no puede escribirlo, en vez de andar buscandolo por el resto de rutas

-Quizá al hacer random RAM en zxuno habría que excluir los primeros 16 Kb de la ROM? Y/o poner a 0 esa ROM antes de cargar la boot rom?

-Zxuno arranque recovery por cinta, que se pueda hacer trap de cinta?

-Sincronizar registro JOYCONF con joystick emulado

-Probar updates zxuno
http://www.zxuno.com/forum/viewtopic.php?p=4296#p4296

-Probar upgrade zxuno flash desde menu (aunque sea una version vieja!). Parece que falla porque usa comando 0x48 de mmc CMD8 preguntar a antonio villena

-nmi-divmmc opción no soportada en zxuno??




------


--- Fallos especificos de ZX-Uno: ---
Quizá demo raster zxuno falla porque la interrupción tarda demasiado...

-Divide en zxuno no debería permitir. Porque sino intentaría tener el firmware que lleva zxuno de divmmc? Esto no es realmente un fallo

-------------


--- Mejoras especificos de zx80/81: ---


-texto inverso en zx-80/81 con extension ansi y drivers de texto

-No hace auto turbo para real tape ZX 80, 81

-------------


--- Fallos especificos de zx80/81: ---


-timings de display seguramente incorrectos. Esta suponiendo inicio scanline en zona izquierda. es normal? aplica a funciones de repintado y 
tambien a screen_get_x_coordinate_tstates

-nuevo core segun http://www.sinclairzxworld.com/viewtopic.php?f=7&t=1780&sid=4a25aa27ef1c6d926f2d9c78f92052c9
nuevo_core_zx8081/core_zx8081.c
Andy is right. Horizontal syncs in a ZX81 are generated at a constant 207-cycle interval (63.7 usec / scanline), and this only gets reset by an interrupt acknowledge (Z80 /IORQ and /M1 both active). Unlike vertical syncs which are software-generated (the same way as in a ZX80, in fact) and don't affect hsync generator in any way.
The hsync counter is free running and reset all 207 cycles. It is additionally reset with a INT ACK. But if not INT ACK is present the hsync still appears every 207 clock cycles. This can not be turned off. This INT ACK reset is used for synchronization of display output only. The hsync pulse is delayed 16 clock cycles to the tv output and kept 16 clock cylces long as far as I know. It differs a bit to ZX80 logic.

The NMI is touched with every hsync pulse (synchronous). You can switch off the NMI but not the hsync.

The hsync counter is a hardware divider/counter. It works completely independently of the CPU. It is always on and always counting. As Pokemon and others have said, when it overflows, it automatically resets and restarts. It is also possible to reset and restart it as described above.

-HighResolution.A.* no siempre van

-ZXPaint solo carga como snapshot (no como cinta y load "")

-real video off consume mas cpu que real video on. normal?

-cargar .p snap grabado de zx81 como snap luego solo carga como snapshot pero no como cinta. tambien falla al cargar ese snapshot como cinta en eightone

-LINECNTR adjust. con pruebas a forzar contador a 0 en out_port_zx80_no_time, se ven bien todos los juegos excepto:
biplot, voyage: estos dos solo en el texto del menu
HR-GALAX.P en instrucciones al pulsar una tecla
HighRes.p despues de verse las caras en modo grafico y parar con break
xtricator ok
pacman bien tanto pantalla inicial como juego
->Y falla modo FAST!

-Para intentar eliminar modo LINECNTR, probar:
-zx80
-zx81 slow
-zx81 fast
-zx81 hires
-manic miner por ejemplo pone modo fast pero el ajuste de linea es el mismo que modo slow
-La clave estaria en distinguir modo fast de slow, a nivel de sync de pantalla
-A nivel de registro I creo que no hay diferencia entre un juego que necesita dicho ajuste y otro que no
-Tampoco parece haber diferencia entre nmi_generator_active a 1 o 0
-Quiza el problema es cuando se ejecuta generar_zx8081_horiz_sync, y esto igual tiene que ver con problemas con t-estados de instrucciones



--------------------



--- Fallos especificos de Z88 ---

-al copiar archivo ACKNOWLEDGEMENTS en eprom card luego no lo puede obtener desde el filer. Quiza el maximo de nombre hay que cortarlo?
-con flash acabada de crear el filesystem, el browser del menu muestra el archivo inicial Deleted. Es normal, pero deberia mostrar ese archivo?
-al meter modo turbo se desactiva si hay eprom insertada->porque acaba llamando a set_machine y ahi explusa cartuchos
-agregar RAM de 1MB. soft reset genera "FS error" y no ve la tarjeta. hay que hacer hard reset para que la vea. con RAM menor de 1MB la reconoce a la primera. esto NO es un fallo del emulador sino el comportamiento normal de OZ ROM

-en pipedream, si se mueve el cursor muy rapido a veces se queda que no contesta el ultimo cursor pulsado, y hay que pulsar otra tecla para liberarlo

-jetset willy. hasta que no acaba la musica las teclas no responden, ni deja ir al index ni nada

-bounder. cuando te matan, se bloquea, no deja ir al index ni nada

-al notificar envio tecla (notificar_tecla_interrupcion_si_z88), solo deberia enviar interrupcion cuando se permite ((blink_int & BM_INTKEY) == BM_INTKEY).
pero si se hace asi, lemmings no va, tampoco dstar, pipedream se bloquea...

-al insertar eprom, por ejemplo, cuando abre flap, no parece que detenga el sistema... por ejemplo, si estoy con un juego con musica,
e inserto una eprom, la musica no se corta en absoluto... creo que al abrir flap (y con la pausa que hay) se deberia detener todo un rato

-forzado low battery y no aparece.

-comprobar al cargar eproms o flash tamanyo maximo de archivo:
flash entre 512 y 1024
eprom 32,128,256
hay por ahi alguna epr de 16 kb??


-modo snooze: si habilito que se pueda activar, teclado responde de manera un tanto forzada y juegos se corta la musica hasta pulsar una tecla
(por ejemplo, en manic miner)
->desactivamos. ver variable int snooze_desactivado. cuando funcione quitar implementacion de esta variable

-quitar slot eprom (y flush) cuando se cambia de maquina






--- Mejoras especificas de Z88 ---

-tarjeta hibrida ram+flash:
tarjeta que probaba Thierry:
512K flash Eprom (AMIC 29040) and 512K SRAM. They are organized with ram on the bottom (bank 00-1F) and flash (bank 20-3F) on top.

-en footer, que parpadeen (o texto inverso) cuando se escriba (y se lea?) de una tarjeta de memoria

-revisar juegos de whatnow para agregar alguno mas...

-gestion tamanyo rom interna. necesario? quiza no pues la propia rom ya identifica su propio tamanyo

-implementar resto de puertos: rs-232, etc....

- driver pantalla.
*tecla diamond, square, F1, F2, F3 para stdout?

-establecer reloj del Z88 con el del sistema. Llamando a rutina RST adecuada
https://cambridgez88.jira.com/wiki/display/DN/Time+and+date+management
o quiza enviando secuencia de teclas..-> indice->panel->tab hasta fecha, etc

-envio de tecla /? desde menu en z88, entra en conflicto porque esa tecla es la -


------



--------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------




Otros TODO menos prioritarios, de aqui hasta el final del archivo:


*** Proceso compilacion ***

* probar en html ->emscripten
http://kripken.github.io/emscripten-site/

sin pthreads
sin *WORLD* constantes en sdl
cambiar gcc por emcc

copiar roms y archivos necesarios a carpeta "roms"
parchear codigo para que busque roms en roms/
eliminar warnings de funciones sin definir como extern

-s TOTAL_MEMORY=167772160 -o zesarux.html  --embed-file roms


-Alguna especie de "top" de partes del emulador 

-Efecto de encefalograma... para..?


* -Agregar todas desensamblado roms en txt
  http://www.fruitcake.plus.com/Sinclair/Spectrum128/ROMDisassembly/Spectrum128ROMDisassembly4.htm
*************

-Revisar qué roms de +3e conviene incluir: la de ide no se como va. E igual se puede incluir la de divide (aunque parece no ir tampoco)






*** Video ***

-nombre ultimo juego cargado en titulo ventana


-setting para desactivar realvideo cuando se haga reset

-poder hacer 50 FPS en carga top speed: problema, que al hacer top speed, ya no llevamos la cuenta de cuanto son 50 fps, pues no hay sleep de 
final de frame. Y al no haberlo , si metemos un refresco de pantalla al final de cada supuesto frame, se estara lanzando muchos mas de 50 veces por segundo
el refresco de pantalla y por tanto, se ralentiza todo y acaba yendo mas o menos a velocidad normal en vez de top speed



-watermark sin realvideo no hace zoom. importante???

Opcion desactivar colores que solo va en realvideo off:
-Quitar atributos que se pueda aunque esté modo rainbow 
-Quizá simplemente una paleta grayscale y cuando haga render final, que convierta valores rgb a gris


-sdl2 peta con easter-egg en linux

- Vídeo que muestre text to speech con aventura conversacional

-Contador fps cuando speed es 200% debería mostrar 100 fps

-Soportar azerty en Sdl, en Cocoa, fbdev

-OCR con colores y codigos ansi? para F4 y ZRCP 

-Clashbasher

http://www.worldofspectrum.org/forums/discussion/44669/clashbasher-a-new-interface-to-reduce-colour-clash/p3

-Mejorar frameskip con tiempo acumulativo


-Drag -  Drop en X11. En SDL2 y Cocoa si que funciona

-sin multitask, con filtro color azul por ejemplo, en menu, la pantalla de spectrum no aplica filtro color

-Splash en drivers caca?
->ya lo muestra dado que el splash es texto!

-Splash en drivers stdout? -> no tiene sentido

-Pantalla completa con resolución menor de lo habitual en sdl peta con seg fault

-kempston mouse o lightgun no se deberian leer cuando menu abierto:
un poco mas dificil para mouse debido a que se basa en coordenadas. con menu abierto que retornamos? no puede retornarse 0xFF...
para lightgun la mayoria de puertos son teclado o kempston, en que ya se controla menu abierto. en puerto DF seria la excepcion

-Poder activar dos drivers de video a la vez, en especial un grafico (sdl, x11) y otro de texto (stdout o simpletext).

-Posibilidad de tener dos drivers video a la vez, como xwindows y stdout, y que stdout muestre texto y lea de teclado

-Para acelerar fbdev, al refrescar pantalla, no calcular cada vez el offset en pantalla multiplicando sino que ir incrementando

-Si modo interlaced activo, al redimensionar ventana con raton y hacerla zoom=1, se deberia desactivar opcion interlaced (y scanlines)

-Quizá función putpixel z88 debería estar inicializada desde el principio con algo, por si acaso

-cacalib, en X windows pero haciendo export DISPLAY=, colores normales tienen parpadeo

-Fallback de X11 a cacalib no va bien. El menú lo abre como si fuera pixel

-funcion screen_print_splash_text que se pueda mostrar texto con menu abierto. Ideal por ejemplo para open flap del z88

-realvideo en spectrum para curses, stdout, simpletext -> YA esta. hecho para tsconf. hay funcion generica para convertir rainbow a texto (blanco y negro)

-Posibilidad de desactivar puntero raton para el resto de drivers: curses, 

-tab en curses en menu filesel no lo lee

-tecla delete en curses en menus no borra
-Salida de texto en simpletext y otros drivers texto: carácter 127 no es imprimible


-Imagen estereoscopica. Tanto anaglifo (azul + rojo) como imagen separada en dos ventanas para dos ojos

-En video init debe establecer a 1 o 0 cualquier variable de parámetro de video, como tiene-colores

-hilo interlaced http://foro.speccy.org/viewtopic.php?f=8&t=1508

-ventana o zona aparte del texto de juegos conversacionales.
ahora sale por consola del sistema operativo, quiza se podria tener una ventana aparte que guarde las X lineas ultimas


-salida vofile que soporte zoom>1, para soportar scanlines

-salida a html

-salida a gif animado (con video out)

-salida a png con colores

-archivo de video de salida en formato alternativo a raw, alguno mas compatible: mpg, mov, ogg, mkv, etc

-variables y estructuras comunes en xwindows y aalib, unificar. hay algunas hechas

-Auto detección de real video en spectrum cuando se hacen muchos accesos a la pantalla y/o cambios de colores??
->de momento cuando hay mucho cambio de border o lectura de puerto idle


-fullscreen para otros drivers: caca, aa. Si pueden hacer full screen y sino aumentar la ventana al maximo. Tener en cuenta modos consola texto tambien

-fullscreen en x11:
* no centra la ventana

- implementar para curses, stdout, simpletext, fbdev, simbolos especiales que necesitan extended mode:  { } [ ]  (funcion ascii_to_keyboard_port)

-Cambiar resolución salida de video en raspbery al activar border, para simulación de carga

-stdout como servidor web. quiza no hace falta, se puede hacer con pasarela telnet, netcat, etc...

-Rutina común en screen.c de refresco, que usen el X11 y Fbdev. X11 solo tiene añadido el xflush al final

-con zoom1 y fbdev quiza es mejor no usar putpixelcache??

-drivers alternativos de video... por ejemplo uno xwindows pero con zoom reducido... que se vea la pantalla mas pequeña que en spectrum

-Explicar cuando se usa escalado especial en fbdev

-hacer zoom a traves de xwindows con extensiones de... xvideo? opengl? libxv-dev?. Esto serviria para todo excepto para modo scanlines

-proponer formato .scr animado... un archivo con frames de 6912 bytes
Ver http://www.atc.us.es/svn/zxuno/software/modo_radastan/videos_radastanianos/ para videos formato ulaplus radastan (rdm files)

-cuando hay un error de debug_printf VERBOSE_ERR, que no solo aparezca el ultimo, sino tambien un historico de X mensajes

-en drivers que muestran debug_printf en ventana, como aa, caca, curses, hacer que si hay mas de un mensaje, aparezcan con pausa entre ellos

-Rst16 para stdout que permita número... Esto es para list de basic

-una vez al pasar de stdout a sdl luego sdl no leia teclas

*************



*** Audio ***

-Probar diferencia de sonido speech ay en versión actual y anteriores
Chase hq
Robocop 1
Dizzy 3
Demo covox
Etc...

-revisar mezclado ay+beeper . posiblemente set_value_beeper acaba sacando algun valor beeper 50*2 y se sale todo de rango?
o bien el mezclado de chip ay. Con que juegos se observa esto? O quiza con el test de 6/9 canales turbosound?

-Generador archivos .ay según lo enviado a chip de sonido. Soporte turbosound



-detector de silencio en sdl2, en 48k, genera zumbido en Linux
ver de momento workaround audio_using_sdl2

-Exportar sonido generado por el chip AY hacia mid

-Salida 16 bits sonido?

-con vo stdout y speech habilitado, parece que cambiar entre maquinas zx81 y spectrum, vuelve a decir texto de bienvenida. normal??

-Quizá inicializacion de ruido de cada chip debe ser diferente 

-agregar otro detector silencio, en este caso para specdrum. tiene sentido? total no altera mucho la onda de salida cuando lo activo y no se envia sonido 

-Futuro filtro conversor de real audio a Puerto fe, que sea capaz de saber cuando es 1 (onda arriba) y cuando 0 (onda abajo)

-pulse audio sin pthreads se oye chasquido a cada envio. esto creo que es dificil de evitar

-efecto reverberacion para sonido:
*mezclar el sonido con el mismo sonido pero unas decimas de segundo anterior

-aumentar frecuencia 15600 para mejor sonido

-lectura de sonido desde line-in, para poder cargar directo desde casette

-reducir fifo por defecto de pulse? de 10 a 2?
-reducir fifo por defecto de alsa? de 4 a 2?
-probar a reducir buffer sonido en otros drivers: dsp, alsa, pulse


*************



*** Menu  ***

-Snapshots automáticos de nombre que depende del archivo cargado. Para tener siempre uno cuando se cambia de juego 

-Opcional cargar snapshot y no cerrar menú. Mismo para Smartload pero solo con snapshots?

-Algunos items de menu, por ejemplo dentro del buscador de vidas, son lineas no seleccionables,
aunque se definen de tipo normal. Tendrian que ser de tipo separador. Pero en ese caso, habria que hacer que cuando se abra el menu,
si el cursor esta en un separador, que haga bajar el cursor -> esto parece que ya se intento, buscar comentario que dice:
//Nota: el separador no puede ser final de menu


-Estilo con tipo letra Chicago del Mac OS Classic 

-copy bytes desde menu debug quiza deberia usar memory zone

-Buscar bytes en memory zone -> problema: ahora las direcciones en memory zone pueden ser > 65535
En ql llega a buscar?

-Algo para poder generar mapas de todas pantallas
Tipo:
https://simonowen.com/spectrum/tilemap/

Pero para cualquier juego

Del estilo:
Hacer captura. Luego hacer captura de la derecha, etc

-Modo solo recreated en menú / Movimiento menus con 56780


-Quizá algunas operaciones de archivos que se cancelen con esc que avise con ventana temporal de dicha cancelación 

-secuenciador AY: linea para cada canal de audio que haga scroll horizontal de cada linea cuando nota cambie (teniendo en cuenta nota y octava, por ejemplo F#4)

-Convertir automático de cinta a wav, mediante uso de mantransfe

-Mi nombre con acentos en el about, siempre que no sea driver de sólo texto 

-menu char size afecta a dibujado de pantalla en zx8081 sin realvideo

-Alternativa en los menús tabulares tipo como el de sprites o colores, que usan cursores y pgup y down
-usar otras acciones / hotkeys para eso
-agregar un handler especial para esas teclas. Pero entonces como se mueve uno por los ítems? Con tecla tab?
Que uso se le da a tab? En file utils, si se tabula, cambia de sección. En menú tabular, el tab sale?

-F1 ayuda extensa en debug cpu, dentro de ventana y Antes en el ítem de menú 

-menus tabulados:
TAB conmutar a zona de acciones? Quiza nueva funcion para seleccion acciones, que permita:

**mover con cursor abajo/arriba e izquierda/derecha. TAB o ESC permite salir
**en file utils, por su parte, tambien permito acciones directas como ahora con shift+tecla. o no?

-eventos joystick para simular pgup, pgdn

-Estadísticas de diferentes componentes del core, ya sea cpu u otra cosa, como memoria usada para el rainbow buffer, el buffer de audio  y cosas así
Info de tamaño ventana. Y tamaño ventana sin zoom







-mejorar deteccion frecuencia sonido en audio wave form


-Poder buscar cadenas de texto en find byte. Al estilo de strings de linux, es decir, indicarle un minimo de caracteres juntos y saque todas las cadenas de texto
opcion tambien para bajar bit 7 final
-Buscar bytes (mas de uno)

-Mostrar juego cargado en titulo ventana. Desaparece al hacer reset 


-poder redefinir las teclas que emulan el joystick, en especial la tecla de disparo (como por ejemplo ponerla a TAB)

-poder hacer hotswap de una maquina a zx-uno

-insistir en el tema de hotswap entre zx80-zx81

-joystick derecha para tab. solo en menu

-watches necesita que show splash texts este activo. bug o feature?

-menu_ventana_scanf deberia retornar un codigo de retorno en caso de pulsado ESC

-visualmem podria tener en cuenta toda la ram de una maquina: 128kb en +2, Z88 etc.... aunque dificil para +2 y Z88.... y necesario?
-visualmem que siga memory zone

-lectura de nombre de archivo en fileselector para stdout no admite espacios

-zona en fileselector que muestre miniatura de: pantalla scr, snapshot, archivo de texto etc
Quiza como ventana emergente al esperar unos segundos o bien a la derecha del selector, teniendo el filesel mas grande

-sin multitask, no va repeticion de teclas. esto es porque no se ejecuta timer_check_interrupt
quiza estas funciones de contadores deberian venir con el thread del timer? aunque luego en version
no-thread no funcionara tampoco

-Mostrar consumo de cpu solo del proceso del emulador?

-acceso a cintas, snaps , etc de archive WOS. Hacer un browser sencillo html para poder navegar entre las cintas

-Browser cintas que permita alterar la posición de la cinta



-incluir pantallas de teclado spectrum, zx80,zx81, z88, etc

-descomprimir rar,gz, etc con espacio en nombres a veces falla. el comando system le envia las "" pero el propio comando
no gestiona bien nombres con espacios

-comprobacion de si hay actualizacion

-tecla ',' en zx80/81 no va en menu porque se interpreta como symbol+shift y es lo mismo que TAB para el menu

-en menu cambio z88 memory slots, que el apply changes salga justo en la ventana anterior, para poder cambiar varios slots a la vez y que se aplique solo una vez
(como abrir tapa, insertar 2 slots, y cerrar tapa)


*************


*** Debug ***

-Assembler para Motorola y MK14
-Assembler para opcodes del Next
-Assembler instrucciones DD/FD+CB no documentadas. ej: LD B,RLC (IX+dd)
-Detectar errores sintaxis en assembler

-Quizá agregar stack Trace en kernel panic. Que pasa con stack de mk14 y Motorola?
Implica leer memoria para sacar el stack. Conviene hacerlo después de un panic?

-Idea para mejorar el parser de breakpoints:
//Operadores AND, OR, XOR que ya esten calculados antes su indice (BREAKPOINT_CONDITION_OP_OR, BREAKPOINT_CONDITION_OP_AND, BREAKPOINT_CONDITION_OP_XOR) y no tener que hacer strcmp cada vez
//Registros DE, PC etc no tener que hacer strcmp cada vez, interpretarlos antes


Habria que hacer un parseo previo, evitando strcmp que convierta esto:

"[EXPRESSION][CONDITION][EXPRESSION]  [OPERATOR]  [EXPRESSION][CONDITION][EXPRESSION]  [OPERATOR] ... where: \n" \
"[EXPRESSION] can be a COMPLEXVARIABLE or a VALUE  \n" \
"[COMPLEXVARIABLE] is formed by [VARIABLE][VOP] \n" \
"[VARIABLE] can be a CPU register or some pseudo variables: A,B,C,D,E,F,H,L,AF,BC,DE,HL,A',B',C',D',E',F',H',L',AF',BC',DE',HL',I,R,SP,PC,IX,IY\n" \
"FS,FZ,FP,FV,FH,FN,FC: Flags\n" \
"(BC),(DE),(HL),(SP),(PC),(IX),(IY), (NN), IFF1, IFF2, OPCODE,\n" \
..
"[VOP] is optional is made of a Variable Operator and Variable Value, joined together with no space. Variable Operator can be:\n" \
"& : bitwise AND\n" \
"| : bitwise OR\n" \
"^ : bitwise XOR\n" \
"Variable Value is any value you want to apply with the operator\n" \
"Examples of [VOP]: \n" \
"|3 : Makes a bitwise OR with 3 to the Variable value\n" \
"&FH : Makes a bitwise AND with FH to the Variable value\n" \
"\n" \
"[CONDITION] must be one of: <,>,=,/  (/ means not equal)\n" \
"[VALUE] must be a numeric value\n" \
"[OPERATOR] must be one of the following: and, or, xor\n" \


En indices a cada expresion:
-Si expression es value, que tenga el valor int ya calculado
-Si expression es complex variable: que tenga el id de variable, el id de vop,y el valor int ya calculado
-Condition tiene que estar tambien indexado
-Operator también indexado

Haciendo estos cambios y eliminando funciones de strcmp , debería ser mas rápido





Menu debugger:
-Doble ptr, uno para codigo y otro para memoria

-posicion electron no va bien en: zx81, tsconf. Revisar otras maquinas. En 48k funciona bien

-Reducir el numero de breakpoints posibles (100 a menos) no mejora mucho el rendimiento
Pasamos de un programa de ejemplo que consume 14% con breakpoints desactivados. Si habilito breakpoints, con todos sin enabled, consume 19%. 
Si uso solo 15 breakpoints, consume 15%
Solo hay un 4% de incremento de cpu entre tener 15 o 100. Por tanto no vale la pena reducirlo

-poder indicar mas de una accion en misma breakpoint condition, ejemplo
condition: pc=4000h

action: prints hello ; menu

-cuando hay breakpoint pc en otras vistas, tambien mostrarlo

-al cambiar de core reduced o no, si habia breakpoints, aparecen como activos aunque realmente el core no esta usando el debug core (se ha perdido el nested)

-con multitarea on, en debug cpu, en step mode, por lo tanto, no ejecuta cpu opcodes de fondo, si se activa OSD, se ejecutaran opcodes mientras dure el OSD
En ese mismo OSD, si pulsamos una tecla en el OSD, se quedara colgado, pues no vuelve -> parece que incluso sin modo step, el osd se colgara al enviar una tecla : en el caso de que no es modo step, realmente no se ha colgado, solo que se ha quedado la tecla indicada pulsada-> pulsar misma tecla para liberarlo

-con menu abierto no se disparan acciones, excepto si se va a menu debug cpu: logicamente pues eso solo se gestiona al iniciar el menu

-Si un breakpoint de menu y otro de accion (prints por ejemplo) coinciden al mismo tiempo, solo salta el breakpoint de menu
->problema que el breakpoint que ha saltado, indicado por la variable catch_breakpoint_index, solo puede ser uno cada vez...

-en menu debug, poder ver sprites del chip de sprites ZGX

-Desensamblador, que permita copiar código assembler a texto
->desensamblador, pero de momento no puede copiar a texto

-condiciones outfired e infired no se disparan cuando son operaciones i/o de dma. es debido 
a que las variables debug_fire_in y out se resetean antes del core y se comprueban despues, 
pero la dma va aparte 


-debugger z80: que sea capaz de mostrar direcciones NNNN correctas (para JR CC DIS) aunque se este debugando con memory zone y direccion alta.
Por ejemplo:
estamos en full ram en zxuno, vamos a la direccion donde empieza propiamente la rom 0, a la 131072:

 20000 F3       DI
 20001 01036C   LD BC,6C03
 20004 0B       DEC BC
 20005 78       LD A,B
 20006 B1       OR C
 20007 20FB     JR NZ,0004

Este JR NZ deberia aparecer como 20004

-visor sprites: quizá mejorarlo para que se pueda elegir el incremento de salto para cada scanline... Por ejemplo, sprites de tsconf saltan de 256 en 256

-Paso a paso cuando hay condición de debug activa no deja salir (en menú) : ocurre porque sale y al momento salta 
breakpoint y vuelve a entrar. Es normal->opcion para poder salir de ahi aun con breakpoint activo? tiene sentido?

-menu debug keys. que muestre en pantalla las teclas que se pulsan

-Set breakpoint en dirección vista en ZRCP


->Esto siguiente de debug_dump_nested_functions ya está corregido en principio
void debug_dump_nested_functions(char *result)
  Ver en cada caso que haya algo en la lista y que ademas,
  el handler (por ejemplo, cpu_core_loop) apunte a handler nested
  Sucede que si por ejemplo activamos kartusho, y luego hacemos un smartload,
  el kartusho se desactiva, pero la lista contiene funciones nested, aunque los handler de peek y poke
  apuntan a los normales y no a kartusho (como debe ser)
->Se deberia tener algo que , cuando se cambian los handler (peek, poke, cpu etc) se borrase la lista nested,
aunque no es necesario, pues cuando se crea un elemento y el handler no apunta a nested, se crea lista nueva,
y ademas, la funcion de debug_dump_nested_functions ya controla esos casos y no retorna nada de la lista

*************


*** Core CPU ***



-replica entre dos ZEsarUX

*1 master y 1 slave
*ambos envian actualizaciones de pulsaciones/liberaciones de teclas, mismos valores que util_set_reset_key
*solo el master envia snapshots
*1 nested core que gestione el envio y/o recepcion de actualizaciones de teclas, que a su vez llame a un thread por debajo que haga la conexión UDP
*Como evitar problemas de acceso simultaneo a misma variable de thread? Por ejemplo longitud en la cola de envio/recepcion? 
Semáforos? Todos sistemas operativos lo permitiran? Windows inclusive?
*O quizá hacerlo por ZRCP?
*comando que envie pulsaciones teclas, como util_set_reset_key
*comando para enviar snapshot, pasando bytes del snapshot por comando. Quizá en base64? O en hexa?

-Poner sondas de tiempo para saber que funciones tardan más en ejecutarse para poderlas optimizar 
Que sea un tiempo que se acumule. Para hacer cálculos con más tiempo de muestreo
Parecido a core statistics pero con más sondas 
Quizá algunos que sólo se habiliten mediante variable de debug puesta a mano en compileoptions.h


-128ke parecido a +2B
http://scratchpad.wikia.com/wiki/ZX_Spectrum_128Ke
Rom derby
https://zx.itch.io/derbyplus

-UnoDOS text mode sale de ram últimas direcciones . util para drivers solo texto
es decir, la pantalla en ascii esta ubicada hacia el final de la ram. obtener de ahi los caracteres en modos de video curses, stdout, etc

-Implementar cp/m mediante emulación 

-overscan, con ula im2 slow a yes, se ven bien del todo

-Quizá quitar real-time cuando root? Casi nunca se ha probado
Y además casi nadie lo lanza como root 

-Visualmem pero que notifique mediante ZRCP de cada operacion de escritura que se realice. Quiza solo se puede hacer cuando este en modo "run" desde ZRCP

-Trap door. rutina de carga propia, aunque uses un tap. Se confunde los traps a rom y no carga bien. Poniendo como real tape si que carga

-Desensamblado mediante ejecución de código. Que desensamble solo lo que ejecute y lógicamente evite repetidos:
quiza se podria hacer mediante una tabla de 65536 posiciones, que indique si el registro PC ha pasado por una de esas posiciones.
Luego cuando se detenga el proceso, reseguir la tabla y desensamblar las posiciones indicadas solamente.
Esto solo sirve para programas de 48k: en 128k o mas, al paginar otra memoria, habrian confusiones: quiza en este
caso se podrian tener varias tablas de esas 65536 posiciones...
Cual es la finalidad de esta función: saber en un juego por ejemplo, donde hay código y donde hay gráficos o datos. En este caso
el problema reside en que si hay una zona de código que no llegamos a ejecutar (por ejemplo una pantalla a la que no llegamos) , no se 
desensamblará el código. Por lo que su uso va a ser muy minoritario....
Si al final es saber por donde se ha estado ejecutando un programa, se puede usar el transaction log.

-funcion strcasestr da warning al compilar en linux

-poder configurar lightgun por linea de comandos

-It would be interesting if an emulator could provide FIFOs or shared memory that the host operating system could
 read/write to that were made available to the emulated machine.


-Multiface 128 falla en algunos juegos, como abadia del crimen. En eightyone tambien falla en este caso

-Borrar enterrom y exitrom como debug breakpoint, que ya no tienen sentido


-Transaction log que también incluya byte anterior a operación de escritura 

-Opción de transaction log adicional que permita ir hacia atrás en el tiempo:
-apuntar en cada momento valores registros
-si hay modificación de memoria, apuntarse valor anterior a la escritura 
-que pasara con valores enviados a puertos. Esto es difícil de controlar
-operaciones realizadas por el usuario, como un reset, quedan fuera del alcance

-simulacion de carga spectrum hace un efecto raro en primera columna de pixeles. quiza se "contagia" el color del border?

-Establecer turbo desde línea comandos  

-Puerto debug ascii hace salto de línea con código 10 o 13

-Próxima canción AY en remote port protocol

-remote command info: ultimo uso cpu, últimos fps, velocidad relativa cpu


-Enabling RAM refresh lo hace mediante cambio de funcion peek. Deberia hacerlo mediante funciones nested

-top speed para Z88

-top speed spectrum con threads es el doble mas rapido que sin threads


-quiza tambien poder poner breakpoint y que vuelva a rutina que ha llamado (es decir, buscar en la pila la direccion de retorno y esperar a que vuelva ahi)


-Nuevas variables para breakpoint:
Modo de vídeo timex /Spectra/etc

-mejorar valor que se retorna cuando se lee bus idle port. Revisar rutina

-Al expulsar cinta real o insertar, meter speed a 100. Esto para cuando hay autoacelerar rutinas de carga

-warnings con daa comparaciones >0?

-instruccion o puerto para cargar stream de bytes externos

-timer con SDL

-temporizador con tarjeta de sonido?

probado - Variable traps que se activa por si hay load o save- hará que vaya más rápido

-Lec-80 rom y Soporte 80 kb


****************



*** ULAPlus  ***

-ULAplus mode 256x192 adicional (modo 11?), linear, igual que modo standard (256x192, flash, brillo, papel, tinta, 6144 longitud) pero lineal ?

-ULAplus agregar modos adicionales parecidos a los del sam coupe

-multicolor demo y otros modos ham (que usan interrupciones para cambiar paleta) no funcionan perfectos, seguramente a que:
en multicolor demo cambia la paleta al finalizar un scanline. Cuando finaliza cada scanline, yo meto en rainbow buffer ese scanline, junto
con el color de la paleta... pero esa paleta que yo leo es ya la siguiente paleta, de la siguiente linea, y no de la actual. Por eso
hay un desfase de lineas de color en el border en la multicolor

-Quizá mis modos lineales deberían usar vram en vez de direcciones lineales en prism?
No:
All modes except 9 uses RAM 5 or 7 depending on the bit 3 of port 7FFDh on Spectrum 128k models, or address 4000H on 48k/16k models.
Mode 9 start always at address 4000H, even on 128k models

Realmente lo que pasa es que estos modos usan más de 8kb y deberían saltar a la siguiente vram (0,1) cuando pasan del offset 8192. Esto para modos 3,5,7

Lo que pasa es que cuando asigno memoria vram hago los 32 k de golpe, por eso cuando se pasa del offset 8192 de vram0 automáticamente se salta a vram1

-ULAplus y timex 512x192. Solo va en modo real 512x192. No va color ulaplus en:
*escalado a 256x192
*maquina prism



****************



*** Tape ***

-random crash al lanzar ./zesarux prueba.tzx con prueba.tzx siendo archivo random
En este caso, sale error de tzx en menu, y al ir a cerrar mensaje de error, hay que cerrarlo dos veces, y la segunda vez, el 50% de las veces
da segmentation fault-> quiza el problema viene del lector tzx

-En real tape, iniciar carga a velocidad normal y poner carga acelerada en el momento que haya cargado la pantalla

-quiza quitar el "simulate real load", no tiene sentido, pues se puede hacer mediante carga real tape

-TZX. Segun tags detectar:
*si es juego 48 o 128

-Con auto load off. Si estamos dentro de rutina de la ROM, esperando a un load, si metemos standard tape, hará fallback a real tape pues detecta que estamos dentro de una rutina de carga. Esto es normal

-Que cuando haga fallback de standard a real tape, entre en real tape no toda la cinta sino desde donde se ha parado como standard (y ademas que no resetee la cpu ni escriba LOAD"") para asi poder continuar tal cual como real tape

-standard tape sea capaz de leer cintas grabadas a mas baudios (2100 por ejemplo)

-soporte de wav en entrada sin tener que usar sox

-Carga interna de bloque en spectrum es capaz de interpretar rwa generado. Carga interna de zx81 no carga un rwa generado

-Carga por line in

-Smpatap y leezx81 que soporten también rwa 15600 hz. comparar valores constantes de esos smpatap.c y leezx81.c con los que lleva el emulador

-tape_smp:
*carga de smp en zx80 no va
*carga de smp en zx81 no siempre va

-realtape load:
*carga de smp (convertidos desde rwa) no siempre cargan bien, ni carga binaria ni real tape

-Paso de cinta audio a spectrum en memoria que avise por ventana de lo que ha convertido

-Borrar archivo temporal al expulsar. Casos tmp smp y tmp wav

-hacer traps de carga, save en instrucciones determinadas (quiza cuando hay un DI), no continuamente en el bucle principal

-en simulacion de carga, con cintas tap, en pulseaudio, pausa entre cabecera y siguiente bloque es muy pequeño y casi no se oye los 17 bytes

-hacer un SAVE desde zx81, pasarlo a wav, luego intentar cargarlo en emulador, como smp, y no es capaz de cargar mas alla de los bytes del nombre del programa
->se debe poner t_states offset a 1 al grabar, seguramente porque despues de meter el nombre del programa en la grabacion, ejecuta algun opcode que no
esta haciendo bien el timing
->aun con la correccion de zesarux 1.4 y la eliminacion de t_states offset, esto sigue fallando, al cargar no lee mas alla del nombre del programa
->para reproducir: en zesarux->audio out to wav. leer en audacity. cambiar frecuencia proyecto a 11111. exportar datos en crudo 11111hz, 8 bit, mono, unsigned

-misma prueba de SAVE y load audio desde spectrum no funciona... parece que es porque el audio se graba la onda "en negativo" y la rutina de carga smp no reconoce ni un solo byte


-cinta smp en zx80/81 que permita mas de un bloque dentro del archivo de sonido

-Tzx de varias partes en zx81? De web de Kelly murta

- Cabecera tzx que incluya versión emulador


-Rutina cargar cualquier flag en copion
Usa
CP A
SCF
Quizá usa otro flag diferente del Z?
Eso explicaría que el rocman no me cargue cuando permito el any flag loading


-tzx:
*funciona way exploding fist, por ejemplo. lord of chaos tambien, este ademas tiene tags id 32
*quiza en tap antes de leer longitud habria que llamar a una funcion de "inicio de carga",
de tal manera que en tzx buscaria el siguiente id, y en tap no haria nada

-rutinas de carga en general: quiza:
* leer siempre cada bloque de bytes entero en un buffer
* retornar a funcion que llama el numero de bytes leido, y teniendo en cuenta si es any flag loading
* esto evitaria tener que ir haciendo seeks y similar y seria todo mas "limpio"

-poder cargar un .config sin mas, sin que cargue snapshot ni cinta ni nada, solo parseando el config. raro? en smartload estaran los dos, el juego y la config


***********



*** Snapshots ***

-RZX: mejorar. Falla carlos sainz. Pero por otra parte, abadia del crimen funciona en ZEsarUX y no en fuse
Quiza los de speculator no van bien del todo?
Los de SPIN parece que si que van. No siempre: abu simbel falla
Quiza el fallo no es al leer el RZX sino en la emulacion del spectrum... quiza hay algun momento en que se genera una interrupcion de mas? o de menos?
algo que descuadra la lectura de puertos (alguna de mas o de menos) y ya por eso deja de funcionar bien la secuencia de INs del archivo RZX


-soporte de carga szx? Y quizá grabación también? Problema con compresion de datos, hay que usar libreria externa

-comentar que formato esta pensado para little endian. Valores de 16/24/32 bits como se guardan? Tal cual? O los fuerzo a grabar de 8 en 8 bits y por tanto siempre little endian?

-Incorporar bittransfe como manera de generar snapshot en .tap. Agregar parámetro de estado interrupciones, registro i. Otros registros que falten? R?

-Si en 48k modo del 128 acaba grabando snap .zx de 48... Quizá no hacerlo así

ok-formato .sna
-48k ok
-128k . parece que snapshots grabados con fuse luego no van bien, ni desde el mismo fuse - probar abadia del crimen por ejemplo

-incluir en snapshot nombre de ultimo juego cargado, para saber de que snapshot se trata?
->rutinas ssl deben establecer nombre para juegos conocidos. quiza tambien una informacion del juego, teclas, descripcion del juego, etc?

-autoload snapshot: al cargar un autosnapshot, hay parametros que se desactivan, por ejemplo dsk enabled.
En ese caso, si por ejemplo estabamos con una maquina +3, con dsk activo, se guarda bien la config y el snapshot
Pero el "--enable-dsk", al iniciar el emulador, se parsea antes de cargar el snapshot. Al cargar el snapshot, en set_machine, se pone
dskplusthree_emulation.v=0 , con lo que arranca con dsk desactivado. Hay varios parametros como ese


*asignacion de eventos a botones de realjoystick ->no, porque depende del tipo de joystick
*asignacion de teclas a botones de realjoystick ->en teoria no, porque tambien depende del tipo de joystick,
pero se podria intentar hacer que se guardase de alguna manera... como intentando asociar, por ejemplo,
"boton arriba" -> tecla "w"
...
pero con esto solo podriamos tener facilmente las teclas de direcciones (son los ejes normales) (-0/+0 izq-der, -1/+1 arr-aba),
pero no otras teclas alternativas: enter, espacio, etc



************



*** Z88 ***

-Z88. Dejar algún programa de ejemplo con formato .bas y binario. Quizá el whatnow esta así?

-Z88 ventana principal tamaño normal de z88, eliminar zona gris. ventana aparte para menu (quiza esto para todos los modelos??... aunque
me gusta tener el menu encima de misma ventana del emulador, quiza podria ser una opcion seleccionable)
-Z88 teclado virtual para Z88 y/o resto de modelos

-Z88. Probar a compilar programas con z88dk

-Z88. Poder cambiar reloj del Z88 con el reloj real

***********



*** Misc ***

-Convertir cintas paws
-Otros componentes mas extraños, como "descubrir" puntuaciones actuales en un juego u otros parámetros,
como descubrir rutinas de pintado de sprites
*rutinas de pintado de sprites: quiza detectar cambios en pantalla al pulsar teclas. y ver desde donde se realizan esos cambios en pantalla
* de momento hay algo preliminar: ver spritefinder

-Extractor palabras paws gac etc que clasifique por verbos, nombres etc
-Extractor dibujos paws?

-unpaws , unquill para cpc
-Text keyboard editable desde menu?

-Joystick en Mac,Win
-quiza redibujar archivo logo tal cual con el boot logo
-Posible ocr con traducción de cirílico?

-Si hay error en config file no hace experthelp


***********


** Algunos fallos que se han visto una sola vez, o no consigo reproducir, o no recuerdo que son...

-cuando hay error en custom config no lo muestra hasta que no se abre el menu: ??

-Porque al mapear teclas de zx81 a joystick el menú sigue funcionando bien moviéndose con joystick? No debería pulsarse en el menú las letras correspondientes a cada menu?
Seguramente porque al leer teclas de menu, hay prioridad de lectura de eventos cursor
Si mapeamos un botón a una letra (botón que no este usado ya en eventos) en menu se puede escribir esa letra
Si es botón está también mapeado a un evento, entonces esa letra no se ve



***********



*************************







*** Otros ***

-Nueva característica: adivinar temperatura de la cpu o del disipador del spectrum según que esté ejecutando y después de x horas de estar encendido

-emulacion keypad spectrum 128

-Código konami para Easter egg

-Meter roms alternativas para divide

-sped52 que use 256 y 512 mb ram

-hotswap de 48k a 48k spanish

-Spectra: dos ventanas, una muestra pantalla principal (salida normal de spectrum) y la otra muestra la pantalla que genera la salida del spectra
quizá modo dual de spectra se puede hacer en misma ventana pero haciéndola el doble de ancho para que se vean las dos pantallas
->quiza no tiene mucho sentido porque se puede abrir ventana de sprites con visor de pantalla

* Nuevos componentes o hardware *

-Spectranet

-currah microspeech

-Scorpion emulation

-TRS-80 emulation

-Simular fallo de memoria (golpe) en zx81 ("wobble")

**





* sslfunctions *

-asignacion de botones a eventos en sslfunctions solo hacerlo para el tipo de joystick conocido.
la asignacion de direcciones, como los ejes 0 y 1 funcionan siempre para cualquier joystick, SI que se pueden hacer siempre,
pero evitar cualquier otro boton diferente de los ejes




**




* TK *

-puertos en tk9xxx:
-timing lineas. http://cantinhotk90x.blogspot.com.es/2012/05/temporizacao-de-video-do-tk90x-parte-5.html. hacer borde izquierdo y derecho igual
(18 t-stados)
-al arranque de maquina:  Out Port df unknown written with value 0, PC after=16
-al ejecutar cualquier comando: In Port 38bf unknown asked, PC after=4ba-> quiza un puerto COM1 ruso
Segun MESS:
15. The TK90X and TK95 roms output 0 to port #df on start up. The purpose of this port is unknown
	(probably display mode as TS2068) and thus is not emulated.

-modelos tk. contended memory?

-demo rotatrix tk90x se ve border desplazado. seguramente timings son diferentes

-Puerto joystick tk en puerto no estándar?

**



-Emular chips de memoria con fallos



-Inves. Ver que juegos se corrompe la memoria debido a interrupción. Quizá ver aquellos que no usan tabla entera de 257

-Mejorar emulación teclado issue 2,3. Etc. Inves

-Subir fotos pruebas inves reales al repo, comprimiendo imagenes?

-Probar dispositivo depuración puerto ffh mad mix game

-Emular mejor issue 2 y 3 y bit tape cuando cinta cargando o no cargando

-Método para crear hardware nuevo definible por el usuario

-Pasar cintas David a mac

-incluir foto cinta beep inves

-Incluir foto de cinta orquesta zx81

-input spool file: hacerlo mas fiable para entrada de teclado desde basic. hay el problema de la gestion de repeticion, pausa entre teclas, etc
es facil en cambio enviar teclas a la funcion INKEY$ (0x2634) pero no a la introduccion de texto desde basic (0x028e - key-scan). A key-scan
al final se reduce a enviar la tecla cada 20 ms por ejemplo, por tanto, es practicamente lo mismo que se hace ahora (mediante timer)

-spool: Sustituir tokens en input spool como opción seleccionable
-spool: Cambio variables sistema repetición al insertar y quitar cuando acabe
-spool: Ver si se puede hacer turbo en Ace, z88, zx80 y zx81
-spool: poder enviar sentencia especial, tipo \s para enviar shift, o \y para enviar symbol, etc

- Rasp en carcasa de spectrum


- lightgun. magnum light phaser no va bien
-magnum, con sinclair pack 2 (el primero) hay que dejar pulsado boton para que funcione
->en rookie, no va si seleccionamos realvideo
duracion del pulso de deteccion del electron?


-Línea de comandos, parámetros que son de activar/desactivar, soportar:
--enable-parametro y
--disable-parametro
E indicar valor por defecto

-Reset parámetros por defecto en quickload también para spectrum

ok- realtime, pero parece que a veces cuelga el pc

-Juegos fallan
-powerup. al cargar. hay que reinsertar cinta, y hay que cargarlo en modo usr0 . no me preocupa mucho porque es una demo de pentagon...
comparacion con zxspectr
powerup: ok


-en sped52, si se hace poke
49912,0
49913,0
se desactivan los caracteres "bold" y se generan caracteres normales que curses puede interpretar


-para probar envolventes:
cancione.tap, bubble.tap, binarylove, envelopes.tap

-memoedit codigo fuente formato GEN... convertir. hay que truncar muchas lineas largas  de DEFB

-snow effect se deberia parecer a:
https://www.youtube.com/watch?v=Ix9Wy2jhDwI

Ahora mismo se parece a eso pero con el threshold por defecto, no se parece a como se deberia ver en robocop3 por ejemplo,
hay que subirle el threshold
Robocop3 en real:
https://www.youtube.com/watch?v=ouWwhyutkiI

-Continuar programa cac10


------------


Otras máquinas:

https://en.wikipedia.org/wiki/Enterprise_(computer)

http://gafz.enterpriseforever.com/Dokumentacio/Konyvek/EXOS_2.1_technikal_information/index.html

Muchos modos de video diferentes. En un mismo frame se permiten varios modos


Colecovision
-chip de sprites
-muchos juegos

https://en.m.wikipedia.org/wiki/Exidy_Sorcerer


https://en.m.wikipedia.org/wiki/Grundy_NewBrain

https://en.m.wikipedia.org/wiki/ABC_80

https://en.m.wikipedia.org/wiki/Memotech_MTX


https://en.m.wikipedia.org/wiki/TRS-80
Mucha información. Video sencillo


Alguna calculadora de texas instruments


https://en.m.wikipedia.org/wiki/Philips_P2000


Master system

Msx
http://map.grauw.nl/resources/system/msxtech.pdf



https://en.m.wikipedia.org/wiki/ATM_(computer)


