Buenas a todos
lo primero un poquito de presentación me llamo Juan Carlos y soy de por aquí abajo a la derecha (Alicante).
Bueno queria comentar un poquito el tema del "ULA Snow" porque así entre programadores si nos ayudamos un poquito mejor.
Estoy haciendo un nuevo emulador de spectrum y de todo esto he aprendido un poquillo estos últimos meses.
Cuando he leido lo del fallo de Ninjajar (PEAZO JUEGO) de la ULA Snow al principio no lo he entendido, pero luego probándolo en mi Emu en ciernes me he dado cuenta de que el sample de "morir" no suena igual en un +2 que en un +2A
Aunque desde fuera lo parezcan el spectrum 128k / +2 y los spectrum +2A/B +3 Internamente se parecen muy poco.
Pero bueno para el que no tenga ni pajolera idea de lo que estoy hablando voy a intentar explicarlo lo mas fácil que pueda:
Todos los spectrum tienen unas zonas de su memoria que funcionan más lentas que el resto, en el 48k es muy fácil, la memoria lenta es la que va de 0x4000 a 0x7fff, básicamente donde esta la pantalla. Esto es así porque dos dispositivos no pueden acceder a la RAM a la vez y en esta zona de memoria el z80 (la cpu) y la ULA (podríamos llamarlo la GPU) se "dan de ostias" por quien accede primero. El tío Sinclair tomo la opción de que mandaba la ULA (porque sino en la pantalla pasarían cosas raras) así que el z80 se frena al acceder a esta zona de memoria.
En los 128k la cosa se complica un poquito más, los 128k están divididos en 8 módulos de 16k cada uno numerados del 0 al 7, los pares son rápidos (0,2,4,6) los impares lentos (1,3,5,7 porque la pantalla siempre esta en el 5 o en el 7).
La gran "putada" viene en los +2A / +3 ya que en Amstrad se ve que estaban aburridos y dijeron "vamos a reinos un rato de estos", total que cambiaron y los rápidos son el 0,1,2 y 3 y los lentos el 4,5,6 y 7.
Cuando hacemos una rutina muy dependiente del tiempo (como reproducir un sample o leer el cassette etc...) es importante ponerla en uno de los comunes rápidos (el 0 y el 2) o bien detectar antes si es un +2 o +2A y cambiar los bloques lo que puede ser una tortura china.
Como ejemplo de esto si cargáis el "Carrier Command" en un buen emulador como FUSE en un +2 o en un +3 veréis como en el +2 la música se oye bien y en el +3 se oye más lenta (Me pase una semana para darme cuenta de que esto no era culpa mía).
Todo este rollo es lo que en "inglis pitinglis" se llama Contended Memory. Y creo que es lo que le pasa a Ninjajar con el sample. More info jere
http://www.zxshed.co.uk/sinclairfaq/index.php5?title=Contended_memoryEn cuanto al "Snow Effect" es otra cosa aun peor que solo le pasa al 48k/128k/+2, y es que si ponemos el registro I (Que no sirve casi para nada) entre 0x40 y 0x7f el z80 y la ULA se lian del todo y empieza a verse pixeles raros por toda la pantalla. Podeis ver aquí un video
https://www.youtube.com/watch?v=4FIUCIyMSD4Bueno os dejo que voy a jugar a Ninjajar que estoy enganchao Un Abrazo