
--- QL ---

*cpu stats: quiza no porque hay mas instrucciones que z80....
-Soporte microdrive / floppy QL real
-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_return_full_path: gestionar retorno valor 1 en todos los casos?
-gestionar if (hacer_trap) { aunque device no sea valido?
-ql_microdrive_floppy_emulation: misma gestion cuando mdv1 o mdv2 o flp1 no esten habilitados. Creo que esto ya está correcto



Acciones sobre los dos microdrive y el floppy separar en menús
Y poder activar uno independientemente del otro
Pero implicaria un menu antes solo para decir que a nivel global esta habilitado o no, demasiados submenus creo...
O quiza que salte al menu con la linea de opcion seleccionada donde corresponde

-QL mejorar teclado y repeticiones:
*si pulsar menos de 1 segundo, devolver esa tecla y ninguna mas en ese segundo
*si pulsar mas de 1 segundo, devolver tecla con repeticiones
*ver traps de qdos y ipc afectado en esto

-Poder usar tecla F5


-interrupciones de timer. Ver como lo hace uqlx:

-Delete file mdv hacer trap?

"
Q: How do you manage the 50 hz interrupt of the 8049 and the Keyboard interrupt?

A: First: I don't emulate the keyboard interrupt. Anyway the keyboard is polled by QDOS every 50th of second via the IPC commands 1 (test IPC status) and 8 (read characters from the IPC keyboard buffer). As for the 50Hz interrupt, I have a timer which sets some variables every 20ms. These variables cause an interrupt 2 exception: pendingInterrupt=2; *((uw8*)theROM+0x280a0l)=16; extraFlag=true; nInst2=nInst; nInst=0; Before this, however, the routine checks if interrupt are enabled and if so set the interrupt mask (=8). It also disables further 50Hz interrupts. When the QDOS I2 handler is called, it reads from an hw register the interrupt mask and the value 8 tells it that the cause of the interrupt was the 50hz interrupt. When the QDOS handler has completed, it reenables the interrupts by writing to an hardware register.
"

Ver funcion de uqlx:

void FrameInt(void)
{
  if((intReg&8)!=0) /* controlla che sia abilitato */
    {
      theInt=8;
      intReg^=8;
      pendingInterrupt=2;
      *((uw8*)theROM+0x280a0l)=16;
      extraFlag=true;
      nInst2=nInst;
      nInst=0;
    }
}


-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



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



-Chip de sonido QL se debería hacer como el AY o el SN, para evitar ciertas frecuencias que se repiten
Pero dado que aún no se los otros parámetros cómo funcionan (step, fuzziness etc) de momento lo dejo como está
-ql notas con G y F# acaban teniendo misma frecuencia efectiva. probar con playscale
es problema de esto:
ql_audio_pitch_counter_initial=(FRECUENCIA_CONSTANTE_NORMAL_SONIDO/2)/frecuencia;
que acaba generando mismo valor entero
Chip de sonido QL se debería hacer como el AY o el SN, para evitar ciertas frecuencias que se repiten
Pero dado que aún no se los otros parámetros cómo funcionan (step, fuzziness etc) de momento lo dejo como está


-Agregar ipc


*rand_cmd equ    14      random number generator, returns a sixteen bit number.


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


-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

-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

-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


-Mdv dos formatos

http://qlforum.co.uk/viewtopic.php?t=749&start=20

You know that q-emulator supports two different types of mdv image files Both with ".mdv" file extensions?

QLay style, and Q-emulator style made with the mdump_exe program.

QLay image files are 174,930 bytes long, and q-emulater image files are of a varying length due to only storing the good sectors of the Microdrive.


--juegos funcionan bien en ql (hay muchos mas, pero estos estan bien y ademas tienen sonido):
catchjack.zip
bullshot.zip
trek1/2
fred(aunque creo que es basic)
qbert
starburst
golf(basic)
starport
thress
psion chess (chess_exe)
games/Fives
match point

Ya conocidos:
spook
spacepods

squidgy falla pero a saber por que... parece que sobreescribe el archivo mazes y luego lo quiere abrir...

-SV_FSTAT $AA word flashing cursor status

Ver en uqlx:

void FrameInt(void)
{
  if((intReg&8)!=0) /* controlla che sia abilitato */
    {
      theInt=8;
      intReg^=8;
      pendingInterrupt=2;
      *((uw8*)theROM+0x280a0l)=16;
      extraFlag=true;
      nInst2=nInst;
      nInst=0;
    }
}

y en la doc de uqlx:

Q: How do you manage the 50 hz interrupt of the 8049 and the Keyboard interrupt?


-QL: Gestión de teclado QL quizá sufre de lectura de teclas desde emulación (que va a ráfagas cada frame de pantalla). Gestionarlo mejor todo desde timer?

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



--- MK14 ---

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


-mk14 en fbdev hace parpadeo

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



--- Jupiter Ace ---

-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

-Lectura de flag de cinta en cintas TZX: como standard tape (no real audio) el flag se guarda en TZX. En TAP en cambio no se guarda flag.
Cuando se agregó soporte de TZX correcto (Enero 2022) simplemente el flag en lectura se ignora, carga cualquier bloque, sin tener en cuenta el flag.
si por ejemplo en tu cinta tienes dos dict:

dict: prueba1
dict2: prueba2

Como sabemos, cada bloque tiene una cabecera (flag 0) con el nombre y descripción del bloque. Y después de ese bloque, vienen los datos en si. Por lo que realmente tus dos diccionarios, se traducen en cinta como:

flag 0. dict prueba1
flag 255. datos de dict prueba1
flag 0. dict prueba2
flag 255. datos de dict prueba2

Si haces un "load prueba2", la rom le saltará el primer bloque de cabecera, pero el bloque de flag 255 , al no leer ese flag 255, interpretará que es flag0 y te mostrará por pantalla algo parecido a "bytes: XXXXX", donde ese XXXXX es texto aleatorio/basura. O sea, en pantalla al ejecutar "load prueba2" verás algo como:

Dict: prueba1
Bytes: XXXXXX (basura)
Dict: prueba2    OK

Esto es tal cual tenia el soporte de TAP, al no guardar el flag, eso no se puede corregir. Ahora con mi soporte de TZX corregido, lo ideal seria que esa gestión de flag fuese correcta en carga, para evitar esos bloques de "basura". Pero, dado que esto implica mas dedicación, y teniendo en cuenta que nadie me ha reportado esto desde que he agregado emulación de Jupiter Ace en ZEsarUX, hace 6 años, no creo que sea prioritario

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


--- Chrome ---



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




--- TSConf ---

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


http://speccy.info/Pentagon

Misma wiki para info de cosas de TSConf, como el z controller ide


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

-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

-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

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



--- Inves ---

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

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



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

-No deja desactivar timing pentagon cuando la maquina seleccionada es pentagon. dado que reinicializa el valor

-pentagon turbo mode

-16c. hay modo con paleta?

http://zxpress.ru/article.php?id=8610

Probar en zxevo fisico

Ball quest en formato trd
http://www.pouet.net/prod.php?which=33976

http://www.pouet.net/groups.php?which=10734

https://github.com/tslabs/zx-evo/blob/master/pentevo/docs/ZX/zx-ports-full-table.txt

https://cs.wikipedia.org/wiki/Pentagon_1024SL

Modo 384 x 304 ?

-emular este bit de eff7 en pentagon:
port EFF7: (adressation 1110xxxx xxxx0xxx )
D3 = 1 - disable rom and connect ram page 0 in adress space 0-3FFF


-Page cashe pentagon:

Try use D3(counting from zero) bit for EFF7  - zero page will be displayed to #0000 address.

There also other schematics that uses ports(Like LPRINT 3):
 * IN 251 - Enable cache
 * IN 123 - Disable cache

IN #FB - enable cache/ IN #7B disable.

Zero page is ram0 from 128kb ram
On pentagon


EFF7 - just memory managment
This strange thing "CASHE MEMORY"

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

--- ZX Spectrum Next ---


-----tbblue:
Se probaron cambios presentes en carpeta tbblue_cambios_pruebas_ultimo_cambio_alt_rom_ZEsarUX_10_10/

* carga nex falla. aunque tileeditor.nex funciona, tambien show512.nex
* carga z80 falla
* carga tap falla
* carga sna falla
* guide desde el menu principal falla
* tape loaded desde menu principal falla
* saltar a 48kb basic desde el menu principal funciona
* saltar a 128kb basic desde el menu principal falla
* tape loader desde menu no carga

* carga Bas FUNCIONA
* juegos zx81 FUNCIONA
* juegos zx80 FUNCIONA
* juegos zmachine FUNCIONA
* dizzy.dsk FUNCIONA
* .aky songs FUNCIONA
* dot commands desde cli FUNCIONA. ejemplo .cowsay. PERO .mem peta


*registro C0. lo pone a 8 en el boot

0xC0 (192) => Interrupt Control
(R/W) (soft reset = 0)
  bits 7:5 = Programmable portion of im2 vector*
  bit 4 = Reserved must be 0
  bit 3 = Enable stackless nmi response**
  bits 2:1 = Reserved must be 0
  bit 0 = Maskable interrupt mode: pulse (0) or im2 (1)
* In im2 mode the interrupt vector generated is:
  bits 7:5 = nextreg 0xC0 bits 7:5
  bits 4:1 = 0  line interrupt (highest priority)
    = 1  uart0 Rx
    = 2  uart1 Rx
    = 3-10  ctc channels 0-7
    = 11 ula
    = 12 uart0 Tx
    = 13 uart1 Tx (lowest priority)
  bit 0 = 0
* In im2 mode the expansion bus is the lowest priority interrupter
  and if no vector is supplied externally then 0xFF is generated.
** The return address pushed during an nmi acknowledge cycle will
  be written to nextreg instead of memory (the stack pointer will
  be decremented) and the first RETN after the acknowledge will
  take its return address from nextreg instead of memory (the stack
  pointer will be incremented).  If bit 3 = 0 and in other
  circumstances, RETN functions normally.


-registros que se resetean con soft reset. tanto al escribir registro 2 como cpu reset de menu
-quiza soft reset no esté activando trap de divmmc (si es que se cumplen las condiciones)

-revisar altrompointer en poke_byte
---- fin tbblue



-Activar el kempston mouse entra en conflicto con el editor de basic.
Al mover raton hace cosas raras. Tambien en el menu de tbblue: probablemente eso sea error de NextOS tal cual,
o bien que están limitando a puerto 1f y 3f el kempston joystick y el mouse entra en conflicto
Quiza deberia leer el kempston solo por 1f o 3f??

-parpadeo en windows, maquina Next, al entrar cada linea en basic. Sin realvideo no lo hace. Sin autoframeskip, lo hace igual.
Activando el maximo turbo permitido, tambien hace una franja negra en el border, arriba del todo

-Revisar tbblue dma con efectos sonido cuadragon next


-Poder descargar cp/m dentro de la imagen mmc de TBBlue, usando libreria Chan FatFS

-zoom sprites. coordenadas no siempre correctas. ver BigSprite.sh

-priority sprites. ver BigSprite4b.sh

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

-Multiface: Nextreg 0x0A selects multiface version from 1, 128 v87.12, 128 v87.2 or +3

-Salir de CP/M deja el modo tiles activo


-the next war: revisar border deberia desactivar. musica en menu no se oye bien


-cambiar de maquina no tbblue a tbblue provoca que no funcione divmmc
porque?

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

-sonido repetitivo en el browser de next al llevar el cursos mas abajo de lo normal: parece que es culpa de el driver de audio,
la cpu se satura y (puede) que el buffer de audio se envie varias veces. Sucede cuando hay saturación en la cpu
Sucede tambien si por ejemplo iniciamos la scrollnuter compilando sin O2
* pruebo a meter un vaciado de buffer de audio cuando fps esta bajo: no da buen resultado, también se producen clicks
-> es casi peor porque produce clicks en momentos que no hay audio. incluso inicializando array mediante memset, tambien se produce

El parchecillo va en core_spectrum.c , aqui:

        int linea_estados=t_estados/screen_testados_linea;

                while (linea_estados<312) {
					audio_send_stereo_sample(audio_valor_enviar_sonido_izquierdo,audio_valor_enviar_sonido_derecho);
					//audio_send_mono_sample(audio_valor_enviar_sonido_izquierdo);
                                        linea_estados++;
                }

+				//Si fps bajo
+				printf ("Ultimo fps: %d\n",ultimo_fps);
+				if (ultimo_fps<15) {
+					printf ("Cleaning audio buffer\n");
+					memset(audio_buffer,0,AUDIO_BUFFER_SIZE*2);
+					//int i;
+					//for (i=0;i<AUDIO_BUFFER_SIZE*2;i++) audio_buffer[i]=0;
+				}


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


 -otros cambios registros: ejemplo 0x68 , bits 5-1


-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


-Mantener archivo de especificaciones de next (la lista completa de los registros internos) tal cual como los emulo.
Así es más fácil saber cuando agregan o modifican algo nuevo
-Ensamblador opcodes extendidos next
-Puerto dffd next
https://specnext.dev/wiki/Next_Memory_Bank_Select



-Soporte ulaplus en Next


-reloj deberia salir en nextos, ya que implementa el chip de reloj. Aparece pero con valor 000
-probar que pasa cuando llega a mas de MAX_SPRITES_PER_LINE (100) sprites en linea tbblue
-no dejar aumentar memoria divmmc mas de 128kb, pues tbblue no tiene mas que eso. sino, se accederia a memoria mas alla del divmmc

-para emulacion de +3e, la sd se utiliza la sd secundaria. emular segunda SD????


-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



-tbblue: considerar mejor prioridades de capas de memoria, por ejemplo al escribir altrom esta comprobando aparte si esta diviface habilitdo
esto por ejemplo fallaria si alguien le da por escribir en altrom pero habilitando layer2, creo que layer2 tiene mas prioridad por tanto altrom no se deberia escribir
Hay una lista de capas de prioridades en el codigo fuente de la fpga. Segun src/zxnext.vhd:

   -- memory decode order
   --
   -- 0-16k:
   --   1. bootrom
   --   2. machine config mapping
   --   3. multiface
   --   4. divmmc
   --   5. layer 2 mapping
   --   6. mmu
   --   7. romcs expansion bus
   --   8. rom
   --
   -- 16k-48k:
   --   1. layer 2 mapping
   --   2. mmu
   --
   -- 48k-64k:
   --   1. mmu



-Allow config mode banking to reach the entire 2MB memory space (nextreg 0x04)


Implementar 48KB puerto layer2 0x123B:
-0x123B Layer 2 control
(R/W) If bit 4 = 0:
  (soft reset = 0)
  bits 7:6 = layer 2 memory map type
    00 = first 16K of layer 2 in the bottom 16K
    01 = second 16K of layer 2 in the bottom 16K
    10 = third 16K of layer 2 in the bottom 16K
    11 = first 48K of layer 2 in the bottom 48K
  bit 5 = Reserved, must be 0
  bit 4 = 0
  bit 3 = 0 to map active layer 2 (nextreg 0x12), 1 to map shadow layer 2 (nextreg 0x13)
  bit 2 = 1 to enable mapping for memory reads
  bit 1 = 1 to enable layer 2 display
  bit 0 = 1 to enable mapping for memory writes
(W) If bit 4 = 1:
  (soft reset = 0)
  bits 7:5 = Reserved, must be 0
  bit 4 = 1
  bit 3 = Reserved, must be 0
  bits 2:0 = 16K bank offset applied to layer 2 memory mapping

Memory pointed at by nextreg 0x12 or nextreg 0x13 can be mapped into the lower 16K or 48K if
layer 2 memory mapping is enabled in bit 2 and/or bit 0.  This mechanism is separate from MMU
and will overlay the paging state set by MMU but only if the memory access type matches
the enable condition (read-only, write-only). The particular 16K bank(s) mapped in begin
at the pointed bank plus an optional offset written when bit 4 = 1.  For out of range banks,
writes do not have an effect and reads return unspecified data.


---

A mejorar en Next para próxima versión:

Pruebas en carpeta tbblue_new_behaviour_divmmc. Ver README para info adicional

-nextos funcionando (mi imagen tbblue): 2.06H
-2.06I arranca pero en basic, por ejemplo input a$, no va bien
-nueva imagen (que falla): 2.07k:

-2.07 fallan todas

-2.06 ok

commit ae03a1011aa972e1445a1defdfe0fa91e3084f0d
Author: Garry Lancaster <garrylancaster@gmail.com>
Date:   Wed Oct 14 23:33:06 2020 +0100

    Updated NextZXOS to v2.06N

imagen de v2.06N:
firmware 1.29e
core 3.01.08

imagen de v2.07a (Sun Feb 27 09:58:54 2022):
firmware 1.31
core 3.01.11?
-mas lenta en arrancar
-no inicia nextzxos

2.06N: parece que no va bien un input a$!
2.06H: bien
2.06I: mal input a$

Commits interesantes de la fpga:

commit f2e9a1793f0f03d2a6c9067e5ce68d4b211e86b5
Author: aralbrec <alvin_albrecht@hotmail.com>
Date:   Tue Jan 5 20:27:15 2021 -0700

    DIVMMC: Corrections in automap reset logic, disable address range made active even when ROM3 is not present

commit 8b052d1b53894ea397a3c1c625ffc5644dd46298
Author: aralbrec <alvin_albrecht@hotmail.com>
Date:   Wed Jan 6 23:48:14 2021 -0700

    DIVMMC: Nextreg 0xB8 and 0xB9 control which entry points are active, a second set of tape traps added for nextzxos

commit f692cd726072fb160435566ad33657a7a90ddcff
Author: aralbrec <alvin_albrecht@hotmail.com>
Date:   Wed Jan 6 23:47:19 2021 -0700

    DIVMMC: Disable addresses 1FFX should be active even if ROM3 is not present




commit d6397d4e2237bebc5240e29b82a508bf3ba57780
Author: aralbrec <alvin_albrecht@hotmail.com>
Date:   Thu Jan 7 09:46:35 2021 -0700

    Provide a means to re-enter config mode in order to launch other cores from nextzxos

->ver git diff 8b052d1b53894ea397a3c1c625ffc5644dd46298 d6397d4e2237bebc5240e29b82a508bf3ba57780
QUIZÁ implica que al llamar a tbblue_set_value_port_position, cambiar registro 3, siempre tiene que meter tbblue_bootrom.v=0,
sin condiciones
Y parece que al poner maquina 7, se habilita tbblue_bootrom.v?
->Hecho


commit 738f0147f6c9fa9a9c1e5b4beaa7cb044a2bf10c
Author: aralbrec <alvin_albrecht@hotmail.com>
Date:   Mon Jan 11 23:58:49 2021 -0700

    DIVMMC: Add all RST as entry points, make triggering programmable via nextreg 0xB8 - 0xBB, add nextzxos tap traps to improve compatibility


commit 8c09cba2d2819410f260dc47531b96c92061457d
Author: aralbrec <alvin_albrecht@hotmail.com>
Date:   Sun Jan 17 14:44:17 2021 -0700

    DIVMMC: Simplify logic during sram address calculation

commit e6fa3a4a4ccb8ddf7be7b2e8befb59ef67a34956
Author: aralbrec <alvin_albrecht@hotmail.com>
Date:   Mon Jul 12 21:55:14 2021 -0600

    #6 #7: Divmmc bank 3 always read only when mapram is set, conmem does not bring in divmmc rom when mapram is set (departure from standard divmmc hardwa
re)



-registros 184 a 187, mapeo de divmmc

mirar registro 10


0x0A (10) => Peripheral 5 Setting
(R/W)
  bit 7:6 = Multiface type (hard reset = 00) (config mode only)
    00 = Multiface +3 (enable port 0x3F, disable port 0xBF)
    01 = Multiface 128 v87.2 (enable port 0xBF, disable port 0x3F)
    10 = Multiface 128 v87.12 (enable port 0x9F, disable port 0x1F)
    11 = Multiface 1 (enable port 0x9F, disable port 0x1F)
  bit 5 = Reserved, must be zero
  bit 4 = Enable divmmc automap (hard reset = 0)




-resumen : partiendo de codigo 10.2 tal cual, si en traps diviface digo que salten 0x3d00 y 0x1ff8 && reg_pc<=0x1fff, sin tener en cuenta
diviface_allow_automatic_paging.v, y quitando comportamiento mmc de registro 6, acaba arrancando
Petaba porque justo ant

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


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

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


--- ATM turbo ---


https://www.zxuno.com/forum/viewtopic.php?t=4091

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


--- SAM coupe ---

-real video
-Alt derecha en PC es altgr?
-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 ---

-Cat en cpc 6128 con pd765 desactivado, se cuelga

-dandanator no va bien en cpc 664, 6128. ejemplo bruce lee carga pantalla y luego se cuelga. rambo II también falla
Probado en sitios que hace:

if (MACHINE_IS_CPC_HAS_FLOPPY) {
cambiar por
if (MACHINE_IS_CPC_HAS_FLOPPY && dandanator_enabled.v==0) {
Pero sigue sin ir...


-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
-Que pasa con keymap y otras teclas de cpc en drivers que no soportan keymap
-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

-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

-segundo boton fire joystick

-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



-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


-revisar cpc:

https://www.cpc-power.com/cpcarchives/index.php?page=articles&num=67

When the interrupt is acknowledged, this is sensed by the Gate-Array. The top bit (bit 5), of the counter is set to "0" and the interrupt request is cleared. This prevents the next interrupt from occuring closer than 32 HSYNCs time.
If bit 4 of the "Select screen mode and rom configuration" register of the Gate-Array (bit 7="1" and bit 6="0")
is set to "1" then the interrupt request is cleared and the 6-bit counter is reset to "0".

no estoy haciendo caso del bit del gate array registro 2:

Registro 2:

Bit	Value	Function
7	1	Gate Array function
6	0
5	-	not used
4	x	Interrupt generation control
...

Deberia mirar ese bit esta a 1 para poner el contador a 0?

-Pendiente cpc: no soportamos pantallas de mas de 16kb, se deberia agregar el calculo correspondiente:
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


*puerto DF en snapshot zsf
*si no hay pd765 enabled, se cuelga al hacer cat (en 664 tambien??)
*snap ver cosas de cpc 464 y si faltan para 6128 y 664

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

--- PCW ---

--pendiente pcw 8256,8512:
-caps lock no va...
-tecla keypad_enter en fbdev no la distingue del enter normal,
-nota: queda tecla libre a la izquierda del 1 para mapear (la UTIL_KEY_COMMON_KEYMAP_BACKSLASH)
-cpm spanish (version superior a 1??) no va
--fin pendiente pcw 8256,8512

- que formatos existen de Snapshots de pcw o cpc??


-pcw: soporte puerto FF para cambiar modo video, poder definir una zona en pantalla donde aplicar modo color o modo normal.
https://github.com/MiSTer-devel/Amstrad-PCW_MiSTer

-pcw modo color. knight lore por ejemplo. Implementado modos 0-2

https://www.habisoft.com/irmia/comentarios.asp?id=358

Modo 0 (720x256x2), el nativo del PCW: negro y verde, o Negro y blanco, a elegir vía puente.
Modo 1 (360x256x4): los colores de la paleta 1 con intensidad del modo de 4 colores de la CGA.
Modo 2 (180x256x16): los colores de la paleta de la CGA (los 16 clásicos que trae por defecto la EGA).
Modo 3 (360x256x16): los mismos colores que el modo 2. Aquí tenemos píxeles cuadrados, como el modo 1 pero con los colores del modo 2. ¿La trampa? Es un modo de atributos: no podemos tener más de dos colores distintos en una celda 1x8. Facilita mucho portar cosas de Spectrum, MSX, Thomson, … Y si mantenemos los colores tenemos la mitad de memoria de vídeo, con lo que es más rápido el volcado, movimiento de sprites, etc.


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


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


-Meter file browser zxuno en imagen zxuno mmc

https://spectrumcomputing.co.uk/forums/viewtopic.php?t=2553

------


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

-Zx99 interface para zx81

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


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

- si quiero cargar de wav en real tape por ejemplo, si hago LOAD "" va bien
Pero si hago LOAD "nombre", me inserta siempre un standart tape nombre.p, por tanto
no puedo cargar de real tape cuando uso load "nombre"
Deberia haber alguna opcion para evitar esos traps de cinta

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


-lanzar esto para z88:
./zesarux --noconfigfile --enable-silencedetector --verbose 3 extras/media/z88/lem.epr

hace que splash logo se vea mal inicialmente

-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?
-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: parece que se activa momentáneamente al abrir flap cuando el bit de STA está forzado (blink_sta |=8)

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

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


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

-establecer battery low no va. por que? Ver funcion z88_set_low_battery

------



--- menos prioritarios Z88 ---

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

-Z88 teclado virtual para Z88 y/o resto de modelos

-Z88. Probar a compilar programas con z88dk

-poder hacer browse de los archivos en RAM de z88. Ver en codigo fuente de oz, archivo def/sysvar.def. quiza ahi hay alguna pista


------





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

**


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


--- MSX ---

-expulsar cartucho en msx, svi etc solo deberia aparecer si cartucho insertado? Pero luego como se extrae un cartucho al cargar un snapshot con cartucho? Porque en ese caso no sabe que tiene cartucho aunque esta aho

- Msx games browser desde planetemu. Mismo sirve para coleco y sg1000. Problema: quiza planetemu no admite peticiones http simple.
Probado con curl y no parece funcionar

-Contención en hacer out e in a vram?
-msx timings accesos a vram write/read y depende de modo
-config slots memoria?
Como ejemplo, el Toshiba HX-10 (un modelo de 64KB) tiene esta configuración de memoria:
* 		ROM en las páginas 0 y 1 del slot 0.
* 		RAM en las páginas 0 a 3 del slot 2.
* 		Slots 1 y 3 están conectados a las ranuras de cartucho.
* 		Páginas 2 y 3 del slot 0 no se usan.

-teclas que falten por emular.  cuales mas?

-carga real tape no va

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


--- Spectravideo ---

-Quizá para 16kb svi 318 hacer que si direccion > 16kb, retorne tipo vacío y así no escribe ni lee nada
O quizá esa rom es del 328 en vez del 318
-muchas cintas .cas no cargan o cargan mal el juego

-teclas que falten por emular.  cuales mas?


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

--- Master System ---

-mostar paginas memoria mapeadas en debug cpu

-Modo 50Hz o 60Hz para Master system?

-fallos en varios juegos sms:

outrun, F1: pista se desplaza raro al moverse izquierda/derecho
creo que falla por esto ???:
 After each column is drawn, the starting column value is incremented by
 one. It wraps at 32. When bit 7 of register #1 is set, it is the column
 counter, not the starting column value, that is checked to see when the
 vertical scroll value will be set to zero on columns 24 to 31.

terminator: se ven mal la mayoria de tiles

road rash: se ralentiza mucho en juego y en intro
pitufos: fase dos en rio se ve raro
micromachines: se ve mal (pero esto creo que es debido a que usa mas de 192 lineas)
bank panic: scroll mal, parece que se corrige con setting scroll hack
space harrier: no va con line interrupt. hay que desactivarla para poder iniciar el juego y luego activarla para que se escuche musica,
y haga efecto de cambio de colores en scanline concreto
missile defense 3d: saltos de pantalla continuos

wonder boy: parece que se corrige con setting scroll hack

-scroll incorrecto "parpadeo" con varios planos (algunos se corrige con setting wonder boy hack):
aladdin
astro flash
missile defense 3d
gp rider
F1

-scroll incorrecto "tipo juego carreras"
out Run
hang on
road rash
chase hq

-juegos sms que directamente no inician:
cosmic spacehead
golvellius

-al seleccionar algun juego de sms que falla, deja emulacion que no funciona correctamente (parece error con vram),
quiza el flag que habilita escritura en cram??

-line interrupts:
 Line interrupts

There is another vdp interrupt called the line interrupt.
This is a value set by the programmer which counts down during the active display period
(and the first line of the inactive display period)each time the vdp moves onto a new scanline.
This is so the programmer can be informed of when the vdp starts drawing a specific scanline.
When the line counter goes below zero then the vdp requests an interrupt
(only if the line interrupts are enabled by setting bit 4 of control register 0)
and the line counter is reset to the value of register 10. If the cpu decides to
ignore the vdp interrupt then the request is lost so this interrupt is either handled
straight away or not at all. The value of the line counter is set to the value of register 10
however the line counter is only set to the value of register 10 when the current scanline is
past the FIRST scanline of the inactive display period

 D4 - (IE1) 1= Line interrupt enable


- quiza wonderboy falla porque cambia el scroll pero luego lo lee (de donde?) de algun sitio que se lee mal y lo cambia a 0??



-snapshot en master system sonic2 al entrar restaura siempre al principio (grabando desde la intro del juego por ejemplo): quizá falta algún estado/registro de hardware que no se guarda en snapshot,
o bien algo de proceso de grabado/carga del snapshot que no se hace bien
