    
--- 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



----------



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





--- 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 

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



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

--- 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 

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




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

--- FAQ ---

-Documentar un poco modo paginación zx uno


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






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

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





-Joystick simulation que se pueda lanzar por ZRCP también (y sin tener que activar —realjoystick-simulator).
 O quizá sí que necesita el setting, dado que necesita que real Joystick este activado 



-página man de ZEsarUX. que no diga opciones, que haga referencia a --help y --experthelp


*** Proceso compilacion ***

-Acceso telnet a servidor público para usar ZEsarUX. Con menú de borrado limitado. U otro usuario con permisos restringidos

* 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)



*** 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




*** Misc ***

-pzx: falla con speedlock: wtss.pzx (where time stool still), myth.pzx

-permitir que las direcciones de breakpoints se pongan con 0xNNNN ademas de NNNNh y decimal
incluso con $NNNN

-Estadísticas de uso:
-uso medio de cpu?

-sumas md5 que ya no se usan de autoselect. Ver si hay archivos .config alternativos para todo esto

-porque en algunos cores nested, debug_nested_core_call_previous se llama al principio y otros al final?

-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

-mapa localidades daad/paws/quill

-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


-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  





***********


** 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



-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



-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)


