Para versión siguiente:

-------------
---Errores---
-------------



-parpadeos en driver xwindow en zx desktop al moverse por menus


-con daad debug, si hago un cambio de gui style, se activa la opcion de watch en daad debug... quiza no está gestionando bien el overlay??

-en daad debug, pulsar m de condmessage, sale dos veces (con cozumel 1 y inventario)

-revisar en menu_debug_change_registers(void),
//Si lanzo con debug_print ERR, y estamos en modo step, se habilita multitarea, por que?


-archivos de cintas que no se cierran en windows al expulsarlas




-rutinas speech y kill speech se llaman aunque no haya nada pendiente. desde timer, llama a scrtextspeech_filter_run_pending



-revisar pantalla completa en SDL, X11
--en sdl1, con windows en maquina virtual, parece que pone una resolucion menor que la ventana de ZEsarUX, y el footer y la pantalla emulada quedan mezcladas


-cambio de maquina con full screen (16k a 48k) peta: quiza son en Mac?



-si se pulsa boton de cerrar todos los menus, desde una ventana que se ha abierto desde otra con menu tabulado, se cierra esa ventana de menu tabulado,
en vez de dejarse en background
Ejemplo: AY Player, pulsar Editar playlist, y ahí cerrar todos menus


-full screen en cpc + real video (y creo que sin real video tambien) se ve mal. Probar por ejemplo con brunilda dandanator


-Si se crea ventana de alto negativo, acaba haciendo panic al asignar memoria. Quizá controlar esto?

-keyboard help
- pulsar , o . en ZX81 con ventana abierta, deja apretada la N o M
- chloe. completar teclas extendidas. ver que hacer con combinaciones de shift...
- keyboard help no hace por ejemplo en cpc 664 teclas [ ] pulsando esas teclas en el teclado fisico: esto sucede porque en menu
no genera codigo de tecla al pulsar esas extendidas

---Fin Errores---



-------------
---Mejoras---
-------------



-algun tipo de build que no sea ni linux ni mac ni windows, sino simplemente UNIX_GENERIC o algo similar

-conviene ocultar Wall y Wextra en version estable? puede salir algun warning util solo en version estable? no deberia, son warnings muy especificos



-driver fbdev en pc , con "zesarux --noconfigfile --vo fbdev > /dev/null". al desactivar border, genera panic. tambien desactivando border
-fbdev en linux, fbdev_cls peta al cambiar de maquina. Ejemplo de 48k a +3


-texto speech en menu se oye antes que se empiece a mostrar filesel

-en rpi quiza compilar con onebitspeaker? o no? entiendo que pcspeaker no usara sino que intentara usar gpio


-Función joystick conmuta full screen
-F función cualquiera Tecla F por joystick


-Smartload path tiene setting en command line? si Y en menú? es el del ultimo archivo cargado con smartload



revisar paso de parametros en pthread_create, debe ser con estructuras estaticas (no en stack) o bien estructuras en malloc
y los miembros no deben ser punteros a *, sino contenido todo en la estructura
Por ejemplo en
menu_zsock_http(
    Si se cancela la query y el thread sigue activo, hay el riesgo de acceder a memoria que ya no esta disponible
Esa funcion se llama por ejemplo desde speccy browser y viene con punteros que habria que convertir todos en una estructura
mejorada de menu_zsock_http_struct en que no haya punteros
Lista en teoria completa de llamadas a pthreads con parametros a revisar:
menu_zsock_http
menu_download_file




-Process management: Render emulated display incluye tiempo de todas las ventanas? Si abro el text adventure map, que consume 6 ms con la guerra
de las vajillas, el tiempo de render dice 8 ms. si cierro text adventure map, el render baja a 3 ms




-Debug console quizá ancho debería considerar siempre el Máximo al calcular posición siguiente línea, esto en print y scroll
Asi se podría redimensionar siempre sin que se descuadren los textos anteriores . hecho?


-Posible driver nuevo u opción en curses en que el menú siga siendo estándar pero el output de la máquina emulada sea el mismo que stdout



-soporte libretro:
compilacion minima con 3 cores:

git clone https://github.com/libretro/libretro-super.git libretro-super
cd libretro-super
./libretro-fetch.sh fuse smsplus sameboy
./libretro-build.sh fuse smsplus sameboy


Copiar un core a retroarch, uno de ejemplo
 https://docs.libretro.com/development/cores/developing-cores/#skeletor-sample-core
cd /Users/cesarhernandez/Downloads/libretro-super
./libretro-build.sh skeleton

cd "/Users/cesarhernandez/Library/Application Support/RetroArch/cores"
cp /Users/cesarhernandez/Downloads/libretro-super/dist/osx-x86_64/skeleton_libretro.dylib .




-Soportar uft-8 en el footer, que sirva para texto footer normal pero tambien con opciones de --programsettingsinfo de archivos .config.
Quitar el parche para soportar la eñe en dicha opcion
Cuidado que  en la consola si hay verbose debug, se muestra caracter extraño para la ñ


-Teclado en pantalla en rpi borra el input de debajo


-Idea menús:
Clara distinción entre línea de menú y entre ventana con opciones
Menús solo deberían ser líneas navegables hasta un destino

Quizá main menu que sea ventana de 1 de alto con entradas menu tabuladas de
Smartload snapshot storage debug etc..
Y sin barra título
---Fin Mejoras---



-gac debug con condactos y paso a paso



-Incorporar bittransfe como manera de generar snapshot en .tap. Agregar parámetro de estado interrupciones, registro i. Otros registros que falten? R? Problema que está guardando algunos registros en parte alta de la memoria y puede interferir con el stack si no se ha cambiado el CLEAR



--- Documentar ---


-Documentar cómo van los archivos txt de update del server
-comentar desensamblado copion9
-diagrama de como funciona zeng online: quiza ya no hace falta porque hay la ventana de ZENG status

--- Fin Documentar ---


-quiza hsync_generator_active.v en zx80/81, que no se usa practicamente, puede servir para estabilizar la imagen en horizontal


-buscador opciones menu: creo que lo mejor es que cada menu indique, al crearse, la ruta donde se ubican
Por ejemplo "Betadisk" está en Main Menu->Storage->Betadisk



-menu display. teclado en pantalla. quiza poner aqui el nuevo de help keyboard. dejar ese viejo solo para drivers de video de tipo texto, cacalib, etc. considerar ademas que ese antiguo solo sale para spectrum y zx80/81. Ojo que el teclado en pantalla de texto debería también salir al pulsar tecla de OSD teclado, pero solo cuando es driver texto



-issues de submenus:
--quiza en un menu_dibuja_menu_dialogo_no_title_lang, al pulsar ESC, no debe activar salir_todos_menus
aunque no todos. por ejemplo en +3dsk, visor format disc, pulsar en archivo-> blocks, ahi si pulsa esc si que interesa que cierre todo



-con no border on full screen & no footer on full screen, al salir de full screen a veces peta
parece que es la llamada a menu_interface_border




-quiza menu_ventana_scanf_numero_enhanced deberia mostrar el error en ventana en vez de soltarlo por debug_printf,
porque luego hay sitios como Sectors info de microdrive que al cambiar de sector con tecla 's' tengo que detectar
si hay un pending error message y mostrarlo
->Al menos ya se retorna un valor de estado (si pulsado ESC o valor fuera de rango, retorna <0) por lo que algunas
llamadas ahi retornan sin hacer nada cuando es <0. en algunos casos no es necesario detectar pending error message,
pues si van a menu anterior, al abrir ese menu ya detectan error pendiente y lo mostraran

-botones superiores e inferiores que no estén pegados a la pantalla: moverlos una columna a la derecha




-en FAQ formatos MDR/RMD, DDH/RAW



-ppi chip 8255 el mismo en cpc y msx...

-En MSX y SVI no estoy usando usa msx_ppi_mode_port/svi_ppi_mode_port en lectura. Quien lo lee y para que?




-speech: caracteres con acentos, eñes etc no se leen bien en ventanas como por ejemplo help->changelog cuando idioma es español
sucede porque viene de zxvision_draw_window_contents y esta enviando por ejemplo caracter de eñe como 129, pues
es como esta en la ventana. pero deberia convertir ese 129 a la eñe de utf8, o bien, convertir ese 129 a una "n" y lo similar con otros
caracteres, por ejemplo convertir "á" en "a"
Para eso tendria que haber una tabla de cada caracter que uso desde 128 en adelante a su equivalente en utf8
En cambio, items de menus si se leen bien porque ahi se le envia linea a linea el texto original (con utf8) y no
se le envian los caracrteres desde zxvision_draw_window_contents

-Speccy online browser
Con speech cuando salen las diferentes opciones de un juego (tzx, tap etc) no se escuchan porque se lee la línea del nombre del juego y no la de debajo que dice el tipo


-Visual real tape: con cinta cdt de CPC (zynaps.cdt) dice que hay bloques de spectrum y no es asi


-modo 60 hz en atic atac, para next. Y quizá empezar con maquinas timex que tienen 60 hz, que tienen menos scanlines...



-poder grabar a cinta desde MSX en archivo .cas. Revisar otras máquinas que se pueda hacer


-Llamadas a menu_warn_message y similares, al iniciar ZEsarUX, cuando esta restaurando ventanas, como la de menu_microdrive_raw_map (comentada al principio: menu_warn_message("Visual Memory window is opened),
deja la ventana de ZEsarUX en un estado inconsistente
Quiza se deberia controlar que las llamadas a *message no hagan nada si no esta acabado de iniciar aun

-vofile con output para archivo bitmap raw en blanco y negro, para posible enlace con pantalla e-ink


-si tiene que avisar de nueva version disponible en github, parece que no sale aviso si salta un first aid de inicio (testeado en windows)

-Zumbido ZEsarUX en versión Windows a que se debe? A detector de silencio? lo he llegado a escuchar en haiku, con callback new

-top bar menu
ok*primero poder desactivar solo botones de arriba bajo demanda
ok*top bar tiene que poder aparecer como overlay. Así se puede hacer mostrar al mover ratón, y también mientras menús están activos
*si menu que se abre tiene seleccionado un item de submenu, al pulsar boton izquierdo en otro sitio provoca que esa ventana
la deja en lista de submenu
*busqueda indexada. que cuando se haya abierto top bar agregue automaticamente "Main Menu" a todos, siempre que no venga indicado
claro. o no, porque si hay top bar, "Storage" menu por ejemplo es un menu directo sin tener que pasar por Main Menu
*al estar en un menu y pulsar en otro de topbar, que se reabra, el truco creo que esta en activar menu_pressed_open_menu_while_in_menu.v
*con top bar no van pulsaciones botones inferiores. tampoco van botones superiores (aunque superiores se deberian ocultar
si esta top bar menu)
*con topbar, no van pulsaciones de raton sobre zx desktop
ok * desactivar botones superiores si esta topbar
*al salir de topbar, no refresca bien las ventanas en background
*Cuando desplega un menu, si pulsa tecla izquierda o derecha y no hay mas submenus (o menus previos), debería moverse por topbar
Por tanto hay que hacer que la función de menu pueda volver en esos casos y decir que se ha pulsado izq/der


-Juego mighty steel fighters cpc. Requiere expansión de RAM? Emularla
"Mighty Steel Fighters GGP" Amstrad CPC by AmstradGGP


-Poder enviar eventos a ventanas. Por ejemplo para el ay player, una función que diga enviar un mensaje (“next track”) a ventana (“ayplayer”).
El como acepta ese evento de momento es una incógnita
Quizá llama a la función que crea la ventana con algún flag específico

-Corregir algunos casos (todos?) en que se intenta cargar/grabar archivos desde una imagen mmc montada
y no va porque no uso funciones zvfs. Ejemplo cargar snapshot .z80


-Botones superiores no gestionan errores generados por un item
Ejemplo:
pulsamos boton network-> zeng online client-> list rooms
Si el remoto tiene diferente versión ZRCP, se genera error por debug_printf pero no se ve en el menu. El menu se cierra. Aparece el error al abrir el menu con F5
Si vamos desde menu principal-> network-> zeng online client-> list rooms, el error si que se ve
O sea parece que al pulsar desde los botones, se sale del menu y se quita el aviso de "abre menu debido a error"
(    	    	if_pending_error_message=1;
menu_fire_event_open_menu();
)


----

ZENG Online

-Si se hace get-snapshot sin haber uno primero, creo que peta: no deberia porque se controla que el size no sea 0
-Cliente sin permisos de get-snapshot, en el footer acaba diciendo OFFLINE. No deberia poner ese mensaje si no tiene permisos de get-snapshot


-Modo streaming
acabar de probar cambios maquina spectrum y no spectrum en master y slave, antes y despues de conectar


Revisar si hay mas sitios donde es necesario  pthread_testcancel();


Teclado en pantalla no va con Zeng online?

-Modo streaming video para ql? Moviendo memoria de video
------

-en external audio source. hago shift-e (flush) y mientras está la ventana splash, pulso en pantalla spectrum
No se cierra el menu realmente, solo pierde el foco. Deberia cerrar el menu
Si en cambio pulso justo al inicio de ventana splash, si que cierra el menu
Pasa en cualquier caso de ventana splash, por ejemplo en cpu statistics y clear statistics
->en external audio source cambio el mensaje de splash por uno normal de menu_generic_message, eso lo solventa
Pero habría que solventar esa problematica en splash
Creo que el origen viene porque al salir de ventana de splash, la variables de mouse_pressed_background_window
está a 0 , y esto sucede porque en zxvision.c, en este trozo al gestionar pulsacion de raton fuera de ventana:

					//Si la ventana activa permite ir a background, mandarla a background
					if (zxvision_current_window->can_be_backgrounded) {

La ventana de splash como tal no soporta background, y por eso no cumple esa condición
Luego entra por aquí:

					//Si la ventana activa no permite ir a background, cerrarla
					else {
							mouse_pressed_close_window=1;
					}

Y por tanto no asigna mouse_pressed_background_window
Quizá lo que debería hacer, si está en ventana de splash, al pulsar con raton fuera:
-activar mouse_pressed_background_window si la ventana que habia debajo de esa permite background
-cerrar ventana de splash (que ya lo hace hora)
Realmente tiene que haber algo diferente entre menu_generic_message_splash y menu_generic_message, porque con el primero,
al pulsar fuera, se queda el foco fuera de la ventana y con el menu cerrado. Pero con el segundo, el foco se queda en la ventana que habia debajo





-De alguna manera que se vea una miniatura de la pantalla del juego cargado
En alguna ventana nueva quizá

-Corregir timestamps. Con variables de 32 bits (31 realmente) se llega al límite en año 2038

-Ventana que permita agregar notas, que permita quedarse en bakground

-Copi128: poder meter traps al grabar que permita identificar cuando se va a generar un nuevo bloque en un tap,
y cada escritura de un byte del copi128 lo meta como byte en un tap. Asi se puede usar para grabar generando taps
Este lógicamente usa rutinas propias de grabación (y carga) para poder usar los 128kb de ram y por eso no funcionan
los traps que tenemos ahora

-En desktop contar último icono de la lista para que al dibujar solo se cuente hasta ese
En config se guarda número de icono? O solo se agrega? Eso permite que al cargar vengan si huecos entre medio
-en config se agregan uno a uno


-Conversion de audio datos ZX81
*Cuando encuentre un pulso sospechoso, llamar a un callback y que pregunte al usuario qué hacer
*poder editar la onda cuando haya un error - que se pare si hay un error (numero de pulsos desconocidos para valor de bit). Requeriria otra ventana diferente de la waveform?
No sé si vale la pena, porque los casos que veo suele ser de 5 pulsos (que convierte automáticamente a un bit 0) o de 9-10 pulsos (que convierte automáticamente a un bit 1). Creo que otros errores ya resultarían en archivos de audio de poca calidad que tendría que preguntar al usuario
miles de veces
*poder convertir audio de zx80? No sé si tiene mucho sentido, aunque se podría pero hay pocas cintas de zx80 por ahí para recuperar...
*poder convertir por linea de comandos. convert RWA a P/P81. Automático sin preguntar amplitud. Con --convert-...
*Luego también se podría integrar en visual real tape, la función que obtiene el nombre del programa y su longitud
*en menu_file_realtape_browser_show, con tecla V de view muestra los bloques de datos de un rwa, si es zx8081 o spectrum. creo que aqui
se llama tambien al usar visual real tape, esa info de bloques
*al insertar en standard tape un archivo smp/rwa, llama a snap_load_zx80_zx81_load_smp: ahi se deberia autodetectar,
y en algun sitio indicar si se usa el algoritmo viejo o el nuevo. OJO! que es comun a zx80 y zx81
*unkatris.wav, no es capaz de convertirlo. Quiza esto quiero que siga siendo asi, esa señal no tiene transiciones a valor 0 por ejemplo


-view basic variables: mejorar precisión en valores float, aumentando cantidad de bits que se tienen en cuenta

-Captura sonido a archivo de disco
*opcion para archivo de salida en ventana de captura

-alguna manera que desde external audio source:
abra hexedit con expresión follow de ix
abra watches con watch DE, IX etc para la carga
abra vista basic
defina también tamaños de esas ventanas?
Todo esto es para tener esas ventanas auxiliares útiles cuando se está cargando o copiando desde cinta





-SDL2 no deja cambiar a zoom 2 redimensionando con ratón

-sdl en debian 12 32 bits inicializa muy lento

-Volante:
*continental circus, ---steering-wheel-address b50ch, parece de 16 bits, pero no va bien. intentar que funcione
*en haiku se bloquea al arrancar si conectado un volante

-implementar máquinas de 60 Hz (timex, master system etc)
-implementar timings ula TK90x

-baseconf: intentar que arranque. Y si no, quitar de la lista


-zx desktop: opción de reorder icons automaticos. que cuando se cree o se borre uno, siempre haga un reorder

-convertir todos tabs a espacios: cmd-shift-p: convert indentation to spaces. Hacerlo uno a uno por cada fuente

-En Machine information que diga el chip de sonido que tiene

-ver gosub stack en zx80, zx81

-en ventana waveform, con valor minimo de onda (./zesarux --tonegenerator 2) no se ve

-Chrome. Menu "load dos from rom". que tiene que hacer? falta una rom?

-en Mac, con driver curses, el timer que se activa es usleep y va mas lento.
Tendria que saltar a timer tipo date, en caso que no se use driver de video cocoa
o cambiar la prioridad a date-usleep, que lo hace en caso de cocoa pero parece que no con curses

-hacer un reduce 0.5 (como el 0.75 pero a la mitad). soportar antialias también


-con --tape por consola, si hay un zesarux_autosave.zsf, no carga la cinta, aunque la inserta (y se queda topspeed y un pendiente load"").
Esto es porque primero se llama a tape_init() que inserta la cinta y posteriormente a autoload_snapshot();
quiza tape_init() tendria que ir despues de autoload_snapshot() pero hay que validarlo bien todo antes
Por que tape_init() se llama tan pronto?
--realtape falla de manera similar
validar también --snap, --slotcard, --outtape, no sé si fallan tambien cuando hay un zesarux_autosave.zsf
Preparo tests/autosnap_and_tape_test.sh que servirá para testear eso, que habrá que incluir en los tests automaticos
Ademas en algunos casos (no recuerdo que combinacion ahora), al hacer reinsert (o insert, si no estaba insertada) de cinta, generaba segfault

-modo linemode de ZRCP que se pueda cambiar temporalmente a través de ZRCP para que instancias de zeng o zeng online lo puedan desactivar
para poderse comunicar correctamente (ni zeng ni zeng online funcionan si está activado linemode telnet)

-view basic listing: al aumentar tamaño ventana (o dismunuir) debería renderizar de nuevo el listado

-pasar dumps de mis mdv exportando contenido entero a carpetas. Y poner carpetas con el label correspondiente
partir de /Users/cesarhernandez/Documents/ql/microdrives_recuperados
Y dejar originales tambien en codigo fuente
desde qemulator, montar el .mdv original en mdv1, y en mdv2_ una carpeta
usar WCOPY mdv1_ to mdv2_
Si hay archivos con acentos en el nombre, hay que copiarlos a mano

-en speech, parece evitar algunas lineas con acentos, por ejemplo menu opciones, item estadísticas (pero sí que lee por ejemplo archivo configuración)
-en speech, al cerrar ventanas de menu parece leer el titulo de la ventana en background mas arriba. Por ejemplo ir a help->about y cerrarla
