# 3/8/2001

- Liberada versión 0.0.5

# 2/8/2001

- Implementé un diálogo para ver y cambiar el contenido de las unidades de disco.
- Agregué soporte para más de un drive.
- Corregí un bug que se producía al pausar GLECK cuando estaba paginada la ROM de TR-DOS.
- La consola funciona más rápido y no parpadea como antes.

# 31/7/2001

- Terminé de implementar una primera versión de manejo de diskettes. En este momento, el único formato soportado es .TRD, que es utilizado por el Pentagon y el Scorpion. Solo está implementada la lectura de discos. Aún no se puede escribir en ellos.

# 30/7/2001

- Comencé a escribir un "framework" que soporte diferentes configuraciones de unidades de disco.

# 29/7/2001

- Primer bosquejo de emulación de TRD. Solo puedo hacer las pruebas en Pentagon, porque la emulación de Scorpion no funciona correctamente aún.

# 23/7/2001

- Instalé Windows 2000, lo que me permitió hacer algunas pruebas que Windows 98 no me dejaba. Por ejemplo, detecté varios errores relacionados con no liberar objetos GDI, lo cual consumía memoria extra. Ya quedó solucionado.

# 22/7/2001

- Agregué una opción para modificar la paleta de colores, modificando los valores RGB de cada color.

# 31/5/2001

- Implementado uso de parches en la ROM. Actualmente, se parchean las rutinas de carga de cinta, así que no es necesario chequear el PC luego de cada instrucción. Esto llevó a un leve aumento de FPS.

# 16/5/2001

- Cambió la configuración del teclado:

- Shift Derecho equivale a Caps-Shift.
- Shift Izquierdo equivale a Symbol-Shift.
- Caps-Lock equivale a Caps-Shift + 2.
- Las teclas de cursor del PC equivalen a las del Spectrum.
- Las teclas Control derecho e izquierdo se usan solo para emulación de joystick.

# 11/5/2001

- Sonido en 8 bits Stereo ahora suena a la frecuencia correcta.
- Los modos gráficos con scanlines ahora chequean los bordes para ver si deben ser redibujados o no. Esto aumenta la velocidad.
- Optimicé a mano una parte de las rutinas de display. Logré un aumento de unos 10 FPS.

# 6/5/2001

- Se maneja el bloque "Select" de TZX

# 3/5/2001

- Liberada versión 0.0.4

# 25/4/2001

- La primera vez que se vaya a cargar un archivo, el explorador mostrará el directorio que hayamos dado por defecto. Luego, las veces siguientes, el explorador mostrará el último directorio en el que hayamos estado. Esto se pierde al salir del emulador. Creo que así resulta más cómodo para navegar.

# 22/4/2001

- Implementada carga de SPs desde dentro de un ZIP.
- Implementada carga del resto de los archivos desde dentro de un ZIP. Si el ZIP tiene más de un archivo que se pueda cargar, abre una ventana para que el usuario elija cuál desea abrir.
- Corregido un fallo. Cargar un TAP sin interceptar la ROM colgaba el emulador al llegar al final de la cinta.
- Ni sé cómo, pero el Heartland (.z80) ahora carga.
- Los pokes son soportados tanto en el Drag'n Drop como en la ventana de carga de archivos.

# 19/4/2001

- Corregido un fallo en la emulación del Pentagon. No se cuelga más en modo BASIC.
- Corregido un fallo en la instrucción CPL. Estaba poniendo dos bits (dos!) mal. Eso hacía que los juegos con protección Digital Integration no cargaran. Ahora lo hacen.
- Ahora, si no hay sonido disponible, el emulador arranca, precisamente, sin sonido, en lugar de avisar y cerrarse.
- El emulador cambia de nombre. Ahora se llama GLECK. Gracias a Mario Sevillano Mansilla (de es.comp.sistemas.sinclair) por el nombre. Por las dudas, el nombre viene por los diferentes modos de cursor del Spectrum. G-raficos, L-owercase, E-xtended, C-aps lock, K-eyword
- Implementado preview desde archivos ZIP. Busca un SCR dentro del Zip. Si no lo encuentra, busca el primer archivo reconocido e intenta mostrarlo (SNA, SP, TAP, Z80 y TZX).
- Implementada carga de SNAs desde dentro de archivos ZIP.

# 15/4/2001

- Implementada emulación de Issue 3 e Issue 2.

# 15/4/2001

- No me aguanté y me puse a trabajar en la versión 0.0.4b.
- Los dos idiomas están integrados. Mediante el archivo de configuración se elige el idioma, así no tengo que andar sacando dos versiones separadas (era muy molesto tener que traducir todo el texto cada vez).
- Reescribí partes de la carga de TZX para que no se coma tanta memoria. Estaba creando demasiadas estructuras en memoria, con mucha información inútil y repetida.
- Corregido un fallo idiota en el que los archivos SCR que uno grababa quedaban con 16K de largo en lugar de 6912 bytes.
- Si se ejecutaba el emulador y no encontraba el archivo de configuración, se colgaba. Ya no más.
- Si se ejecutaba el emulador y no encontraba la ROM del modelo elegido, también se colgaba. Ahora tampoco pasa eso.
- El abrir el explorador de cintas automáticamente no funcionaba. Se abría y se cerraba solo (era una idiotez de las mías...)
- Para resolver luego. Si abro uno tras otro 32 TZX el emulador se cuelga. ¿?¿?¿?
- El TZX del "Astro Marine Corps" tiene 1604 bloques. Yo no preví que hubiese algún programa con tantos, y manejaba un máximo de 1024. Ahora subí el máximo a 2048, pero un futuro voy a usar una lista linkeada en lugar de un array para guardar los bloques.
- Corregí un error idiota que ahora permite que el TZX del Skool Daze cargue. Estaba guardando un valor de 24 bits en una variable de 16...

# 14/4/2001

- Liberada versión 0.0.3b

# 13/4/2001

- Se corrigió una enorme cantidad de fallos. Y la verdad es que me olvidé qué cosas se han corregido, pero a grandes rasgos se eliminaron problemas en el debugger, en los gráficos, en el sonido, en el manejo de ventanas, en el manejo de pokes, etc.
- El modo pantalla completa aparentemente funciona bien ahora, pero es un tanto lento, comparado con otras cosas que he visto por ahí.
- El emulador no se come el 100% de la CPU cuando está en pausa.
- Corregido un error extraño al cambiar entre modelos.
- No se emula el chip AY en modo 48K, a menos que se indique expresamente mediante la configuración.
- Se aumentó el uso de threads, lo cual mejoró el rendimiento y algunos temas de sincronización.

# 8/4/2001

- Implementé una nueva técnica para los gráficos. En modos DirectX, si se trabaja con sin memoria de video, hago un Lock de las superficies una única vez, lo cual aumenta enormemente la performance. Esto no es posible si las superficies se crean en memoria de video. Hay que tener en cuenta que esto podría causar algún problema, pero en las máquinas que lo probé funciona a la perfección.
- Creé una nueva "clase" para manejar exclusivamente el modo de pantalla completa. Así elimino el código repetido y centralizo los cambios.
- El modo de pantalla completa es aún muy lento y funciona de forma rudimentaria.

# 7/4/2001

- Ahora se puede cambiar la resolución y colores del escritorio en Windows con el emulador funcionando, ya que detecta el cambia y se reinicializan las estructuras de display para seguir funcionando con la nueva configuración.

# 6/4/2001

- Corregido un fallo que hacía que los pokes que uno introducía y grababa como archivo .POK no eran reconocidos y colgaban el emulador.
- Corregidos un par de cuelgues al usar el explorador de cintas.
- Agregué un ProgressBar al explorador de cintas.

# 5/4/2001

- Implementada grabación de archivos .POK.
- Corregida carga de archivos .POK.
- El diálogo de manejo de Pokes ahora funciona de forma no modal (mucho más cómodo).
- Reestructurada ligeramente la jerarquía del manejo de archivos.
- Corregido un fallo que se producía al borrar un Poke.
- Mejorado el mecanismo para activar los pokes.

# 4/4/2001

- Implementada grabación de snapshots de 128K. (.SNA)
- Implementada lectura de snapshots de 128K. (.SNA)
- Implementada grabación de snapshots .Z80 (version 2.0) (en 48K y 128K) sin compresión.
- Implementadas opciones para ver el rendimiento de la emulación en frames por segundo (FPS) y para ver la velocidad con que se procesa el display (ms). Desactivando esta última opción, el rendimiento del emulador puede incrementarse hasta en 20 FPS (según lo que pude probar).

# 3/4/2001

- Solucionado un error de memoria al cambiar entre algunos modos de sonido. Estaba escribiendo sobre memoria no reservada.
- Implementado sonido AY ACB y ABC, con opciones para cambiar dicha configuración durante la ejecución.

# 24/3/2001

- Agregué mucha de la funcionalidad faltante al reproductor de TZXs (moverse por los bloques, mover el puntero por la cinta, etc).
- Se agregó un símil del reproductor de TZX pero para TAPs.
- Implementadas opciones para explorar automáticamente las cintas al abrirlas, escuchar el sonido de carga y cargar a máxima velocidad.
- Se arregló un fallo enorme que hacía entre otras cosas que si con el emulador en marcha se cambiaba de modelo, cambiaba todo, pero se seguía ejecutando como si fuese el modelo anteriormente seleccionado.
- Ahora mediante el reproductor de TAPs podemos cambiar el puntero de la cinta (o sea que se puede "avanzar" y "retroceder" la cinta a la posición que uno quiera).

# 24/3/2001

- Hice un intento más por llevar las rutinas de display a un thread aparte y obtuve mejores resultados que las veces pasadas, pero como también implementé el modo de pantalla completa (se puede pasar de P/C a ventana sin que se cuelgue el emulador) estas dos cosas no estaban muy compatibles que digamos.
- Mejoré ampliamente el sonido! Estaba sampleando siempre a 22050 sin darme cuenta y eso hacía que la música de muchos juegos (beeper) no sonara muy bien comparado a otros emuladores.
- Esto último implicó corregir todas las rutinas de sonido por WaveMapper, y dejó en evidencia un error (o lo introduje ahora?) al switchear el Digisound.

# 24/3/2001

- El debugger se implementó como una ventana no modal, o sea que se puede tener el debugger funcionando a la vez que el emulador (antes eran excluyentes). Implicó reescribir el loop de la emulación, lo cual pudo haber introducido nuevos errores (muy probable).
- Arreglado un fallo en la instrucción SLL. Ahora, el GhostBusters 2, que usa protección Alkatraz para desencriptarse funciona correctamente. Tambien el Cyberbig funciona correctamente ahora.
- Solucionado el bug que hacía que dos rutinas concurrentes intentaran lockear a la vez la superficie secundaria DirectX.
- Solucionado un bug que hacía que si salía del emulador con el debugger funcionando, quedara activo el loop que el debugger estuviese ejecutando.
- Corregidas las instrucciones CPD, CPDR, CPI y CPIR. Calculaban mal el flag de acarreo y los flags 5 y 3. Ahora, el "Zone Trooper" funciona bien.
- Corregidas las instrucciones LDI, LDIR, LDD, LDDR, INI, INIR, IND e INDR. Las IN fueron implementadas recién. A las de LD se les corrigieron los flags.
- Implementadas instrucciones OUTI, OTIR, OUTD y OTDR. Si bien, alguna de ellas ya estaba hecha, lo estaba de muy mala manera.

# 22/3/2001

- Finalmente, tras días y días de luchar con el lector de TZX, puedo afirmar que mis rutinas de carga funcionan perfectamente. Todos los TZX que he probado hasta ahora funcionan, inclusive los que tienen carga Speedlock 7. ¡¡¡Por fín!!!
- Implementada carga y grabación de snapshots a memoria.

# 19/3/2001

- Resolví un problema de display en modo 128K. Dos juegos (Abadía del Crimen y Starglider) no se veían, pero no se colgaba el juego. Resultó ser que en ciertas situaciones, armaba al display en base a una página de RAM equivocada.
- Resolví un error en la lectura de puertos, que había hecho que Revolution, que una vez arreglé dejase nuevamente de funcionar. Ahora funciona correctamente.
- Desde hace 3 o 4 días estoy trabajando en un "visor y reproductor" para los archivos TZX, pero dado que tengo grandes problemas con dicho formato y muchos juegos no me cargan aún, quedó un poco postergado.

# 11/3/2001

- Saqué todas las referencias a MFC. Ahora el código es más independiente de Visual C++.
- Solucioné un bug que permitía que figuraran archivos inexistentes en la lsta de archivos usados recientemente.
- Solucioné un bug que hacía que si se ejecutaba dos veces el emulador, se colgaba (se llamaba un puntero a función que aún no había inicializado).
- Ahora se puede definir un directorio por defecto donde buscar los programas.
- Arreglé algunos pequeños bugs por acá y por allá.
- Limpiando el código y cambiando las cosas para poder aplicar las optimizaciones de VC++, pase de tener 66 FPS a 92 FPS!!!
- Cuando en el preview de archivos no se encuentra una pantalla de carga, aparece un cartel indicandolo.
- Pude probar las rutinas DirectX 24 bits (en el notebook) y vi que estaban completamente mal. Ahora no solo andan bien, sino que estan escritas gran parte en Assembler, así que aumentó la velocidad de las mismas.

# 2/3/2001

- Arreglé el modo de sonido Mono 16 bits. Ahora suena bien con Digisound, pero lento sin él. Arreglé algo los modos de 8 bits (pero faltan cosas por corregir) y aceleré un poco las rutinas de sonido eliminando algo de código repetitivo.
- Implementé una opción para elegir si el display (bajo DirectX) se crea usando memoria de video o memoria de sistema. Usualmente, la memoria de video suele ser más lenta, pero, como es mi caso, esto es al revés, así que es mejor que lo elija el usuario.

# 24/1/2001

- Reescribí partes de la emulación que estaban hechas en C++. Ahora están escritas en C, usando punteros a funciones para simular "objetos". Ahora tengo un código igualmente estructurado, pero bastante más rápido (obtuve un aumento de 4 FPS).

# 23/1/2001

- Implementada instrucción INI.
- Solucionado bug que mostraba mal el preview de algunos archivos .Z80 (Gracias a Rodolfo Edison Guerra).
- Implementada instrucción SLL. El "Revolution" ahora funciona bien.

# 20/1/2001

- Liberada versión 0.02 del emulador (inglés).

# 19/1/2001

- Corregido fallo en el debugger (hacía que las rutinas de display pisaran partes del código).
- Nuevo intento frustrado de poner el display en un thread aparte. No hay caso, no entiendo cómo cuernos hacer...
- Liberada versión 0.02 del emulador (español).

# 18/1/2001

- La carga de TZX ha mejorado algo. Algunos que hacen cosas extrañas funcionan (p.e. Joe Blade 2, que permite jugar un pacman mientras carga de la cinta).
- Se da la opción de cargar los TAPs a velocidad normal (sin interceptar la rutina de la ROM y cargarlo por la entrada EAR).
- Implementé una consola para ir mostrando información sobre la emulación.

# 9/1/2001

- Implementé carga de archivos TZX. Por ahora solo carga bloques a velocidad standard, pero hay algún problema, y cuando terminan de cargar los programas, se cuelgan o pasa algo raro.

# 14/11/2000

- Implementé una lista de archivos usados recientemente (MRU).
- Solucionado un problema que tenía (el destructor de los displays nunca era llamado) por el cual si cambiaba muchas veces de modo gráfico, se comía la memoria de la tarjeta de video.

# 12/11/2000

- Implementé una barra de status donde pongo el modelo que está corriendo, el tiempo que demora en dibujar la pantalla y los cuadros por segundo (FPS) que se están logrando. Salvo el segundo parámetro, que pronto va a volar (porque solo me resulta útil a mi), los otros dos permiten dar una idea de cómo está corriendo la emulación.
- También, en la barra de status, parpadea un cartel de "TAPE" cuando se está leyendo una cinta.
- Corregí el código del timer. Parece que ahora, la sincronización es un poco mejor (aparte que puedo contar cuantos FPS estoy alcanzando).
- No tengo idea de porqué (parece que lo hizo solo) pero está andando mejor. Suerte, porque hoy casi mando todo al diablo...

# 10/11/2000

- Nuevamente, una sugerencia de Santiago Romero aceleró la velocidad de las rutinas gráficas. Me sugirió usar buffers más chicos para las tablas con el mapeo de la memoria de video. Ahora, esas tablas son de 800 bytes en vez de 200K, y pueden entrar en la caché de la CPU, con lo que en algunos procesadores, la ganancia de memoria es notoria.

# 8/11/2000

- Gracias a la ayuda de Santiago Romero, aceleré un poco más las rutinas de dibujo con scanlines, usando Assembler.
- Modificadas las rutinas de gráficos para que en modo 128K dibujen la cantidad correcta de líneas. Ahora los efectos de borde en 128K se ven mejor, pero falta la emulación de memoria contendida aún.
- El modo de gráficos en 32 bits se sigue arrastrando. Creo que voy a tener que usar una paleta de menos colores (me da la sensación que mi algoritmo es el que me da los problemas de velocidad...)

# 3/11/2000

- Mandé la emulación de AY-8910 a una clase. Las cosas se hacen prolijas o no se hacen.

# 29/10/2000

- Implementé Drag and Drop de archivos sobre el emulador ejecutándose y antes de abrirse (puede recibir un archivo como parámetro en la línea de comandos).
- Implementé seteo de la prioridad del emulador. Ahora puede ejecutar con una de 4 prioridades (Idle, Normal, High y Realtime).
- El borde del juego Vectron ahora está correcto!

# 22/10/2000

- Intenté nuevamente usar un thread para el display. Los resultados no fueron malos en el notebook, pero en mi PC anda mal. Lo dejo de lado por un tiempo hasta que entienda todo este asunto de los threads.
- Implementé emulación del joystick Kempston, utilizando las flechas del teclado y los CTRL para disparar.
- Implementé emulación del joystick Fuller (de la Fuller box, solo el joystick, el audio aún no lo hice). Utiliza las mismas teclas que el joystick Kempston (cursores y CTRL).

# 21/10/2000

- Solucionado un problema en que si se arrastraba sobre el emulador dos veces el mismo .TAP, se colgaba.
- Aceleré ligeramente las rutinas de dibujo de scanlines GDI.
- Solucionado un problema en que los .Z80 grabados con el SamRam paginado no funcionaban.
- Implementada la instrucción OUT (C),0. Ahora, la demo "Hercules", entre otras, funciona.
- Corregido timing de las instrucciones LD IXh, IXl, IYh e IYl. La música de algunos juegos de Dinamic (Phantis, Nonamed, Phantomas) ahora suena mejor gracias a ello.
- Solucionado el problema de que al cambiar de modo de sonido se perdía el beeper. En realidad, el volumen se bajaba automáticamente y no me daba cuenta.
- Aceleré ligeramente las rutinas de DirectX en 8 bits, usando memset para dibujar los bordes, en lugar de un while (lento). Hasta que no escriba mi propio memset en assembler para WORDs y DWORDs, no voy a poder hacer lo mismo con las rutinas de 16, 24 y 32 bits.
- Los cambios de modo gráfico desde el panel de opciones ahora setean correctamente el tamaño de la ventana.

# 20/10/2000

- Implementada carga y grabación de opciones. Hay un archivo "setup.ini" donde se almacena la configuración del emulador. Por ahora, las opciones que se graban son las de Gráficos, Sonido y el modelo que se está emulando.
- Implementado Drag'n'Drop de archivos!! (Era más fácil de lo que pensé). Ahora si se "tira" un snapshot en el emulador se ejecuta enseguida, salvo los archivos de cinta, que aún hay que escribir LOAD "" o lo que corresponda.

# 19/10/2000

- Ahora funciona la emulación del +2A y el +3. Aparte de paginar mal la memoria, no emulaba el puerto 2FFD. Ahora devuelvo un valor por defecto. Esto me sirve para salir del paso. No están emulados los modos especiales de paginación. Ya me daré cuenta cuándo es que estos se precisan.
- Vil intento de meter el display en un thread aparte. Salió tan mal que andaba más lento que antes...
- Implementada la carga y grabación de archivos .SP
- Arreglada la grabación de archivos .SNA
- Implementada la carga de archivos .BLK
- Ahora el Spctrum 16K tiene SOLO 16K.
- Corregida emulación del TR-DOS. Ahora se pagina correctamente, pero no funcionan los archivos .trd (no emulo la unidad de disco).
- Por eso, y otros detalles más, ahora funciona la emulación del Pentagon 128K y del Scorpion 256K. El Pentagon parece andar bien, pero el Scorpion, en modo Basic 128, se resetea al ingresar una linea o ejecutar un comando directo. Es que el código de la paginación es una mugre.

# 11/10/2000

- Corregí los flags de varias instrucciones. No alteró mucho la ejecución de los programas que probé hasta ahora, pero es un paso adelante hacia tener una emulación perfecta de los flags.
- Parcialmente solucionado el tema de cambiar de modo de audio (WaveMapper, PC Speaker y DirectSound). Ahora no se cuelga al cambiar de un modo a otro, pero no sé por qué, luego de cambiar, el WaveMapper deja de generar el audio del beeper (pero sigue funcionando el audio del chip AY).
- Mejorada la estructura de clases del programa. Me debería dar la posibilidad de tener un código más modular y mantenible.
- Ahora, cada modelo maneja su esquema de memoria, los accesos a la misma y los puertos E/S. Esto me permite evitar montones de IFs y acelerar un poco esas partes de código.
- Lo anterior, mejoró un poco la paginación en modo 128K. Aún no funciona la de +2A y +3, pero algo es algo.

# 21/9/2000

- La instrucción DJNZ estaba seteando mal sus TEstados. Como efecto lateral, la música en el Knightlore suena a la velocidad correcta y ahora, las barras al grabar con SAVE tienen el ancho correcto.
- Solucionado parcialmente el problema del Sidewize. Tiene que ver con la lectura de los puertos inválidos (0xFF por ejemplo). Debería devolver datos de la pantalla y atributos mezclados. En lugar de eso, por ahora, devuelvo valores al azar, con ciertas restricciones, porque sinó no funciona el Arkanoid.
- Necesito hacer un thread aparte para los gráficos. Si uso scanlines, el sincronismo del audio se me va al carajo.
- Solucionado un bug estúpido que no me dejaba grabar archivos .SNA ni archivos .SCR (estaba usando la variable de archivo incorrecta!)
- Solucionado otro bug idiota que hacía que en el debugger no funcionara el ejecutar paso a paso (al hacer click en el botón estaba llamando a la función equivocada...)
- Otro bug idiota más! El display GDI con scanlines no actualizaba el atributo de FLASH. Ahora está pronto.

# 20/9/2000

- Solucionado el audio en modo 128K. Funcionan los tres canales del chip AY-8912 más el canal del beeper juntos. Implementé una rutinita para mezclar el audio (aunque es bastante rudimentaria: sumo los canales y evito pasarme del máximo audible 0x7fff).
- El audio por WaveMapper funciona a 44100, 16 bits, Stereo. Tendré que dar opciones para regular eso en el caso de máquinas más lentas o tarjetas de audio poco compatibles.
- El Sidewize anda muy mal. Tengo que investigar cuál es el problema.
- La música del Knightlore va muy rápido.
- La voz digitalizada del Robocop no se escucha. Creo que ya sé por qué.
- La mayoría de los TAPs en 128K no funcionan. Ni idea.

# 10/9/2000

- Implementada emulación de los modelos 128K, +2, +2A y +3. Los dos ultimos no andan, porque no hago bien los cambios de bancos de las ROMs, y los dos primeros tienen problemas tambien, supongo que de los timings de las instrucciones y la paginación de memoria.
- Implementada emulación del chip AY-8912 utilizando parte de las rutinas de MAME, adaptándolas para funcionar en stereo.
- Implementado el sonido por WaveMapper. En algunas máquinas funciona mejor que DirectSound, dependiendo del hardware.
- Mejorado el modo gráfico GDI. Ahora la pantalla se dibuja en un bitmap en memoria antes de volcarla, al contrario de lo que hacía antes (usar SetPixel, que es muy lento para lo que preciso).
- A causa de eso, el preview de archivos funciona muchísimo más rápido ahora.
- El modo GDI ahora soporta también scanlines.
- Mejorado el sonido DirectSound (sin emulación de AY-8912), utilizando una técnica de buffers similar a la que uso para WaveMapper (mejoró el rendimiento en mi notebook, que es más quejoso en cuanto al audio).

# 6/9/2000

- Implementé el sonido por PC Speaker como una clase más. Aún no se puede elegir desde la ventana de Opciones.
- Funciona el display en 256 colores. Tenía un problema con la paleta. Voy a tener que probarlo en distintas máquinas a ver como anda.

# 5/9/2000

- Arreglé los BEEPs de la ROM. Ahora suena el chasquido de las teclas y la música del "Abu Simbel Profanation" por ejemplo.
- Agregué display por DirectX con 8 bits (256 colores). La paleta a veces se vé horrenda. Ni idea de cómo solucionar esto por ahora...
- Optimicé a mano las rutinas de DirectX de 16 bits. Queda por propagar el cambio a las de 8, 24 y 32 bits y quizá en un futuro, pasarlas a Assembler.
- Ahora sé como hacer el sonido por PC-Speaker. Suena horrendo, pero es una opción más si no hay tarjeta de audio.

# 27/8/2000

- Carga y grabación de archivos .SCR (pantallas)
- Grabación de archivos .SNA
- La carga de archivos se hace desde una misma ventana en lugar de una distinta para cada tipo.
- El display ahora funciona con 16, 24 y 32 bits de color (24, supongo, aún no lo probé)
- Las rutinas de carga buscan en la cinta los bloques pedidos antes de dar error. Mejora el uso de los programas que cargan sus niveles desde la cinta.
- Ahora, LOAD "cualquier cosa" puede ser interrumpido. Antes no había forma de salir del loop de la cinta.
- Introducción de pokes. Se pueden aplicar y luego, volver al estado anterior. Permite cargar archivos .POK.

# 24/8/2000

- Corregida la rutina de carga de la ROM. Ahora funcionan los juegos multicarga (y a grandes rasgos, todo juego que use encabezados extraños en los bloques de cinta, pero lea los datos usando la ROM). O sea, los juegos grabados con Speedlock no van a andar por ahora.

# 23/8/2000

- Ahora, al cambiar de modo gráfico, la ventana no cambia de posición. Sólo de tamaño.
- La carga de archivos .TAP está más complicada de lo que pensé. Los programas que no usan las rutinas de la ROM, sino solo partes de ella, no funcionan. Ni hablar de las protecciones por SpeedLock.
- La ventana del Debugger dejó de ser MFC. Ahora anda mucho más rápida, y además, ahora anda.

# 22/8/2000

- Arreglé los cambios de modos (ahora se respetan los tamaños según si dibujo con scanlines o no). Cambiar una opción de gráficos respeta los seteos de las demás opciones.
- Ahora, al resetear, no se pierde el .TAP que se había elegido.

# 21/8/2000

- Arreglé la ventana de carga de snapshots. Ahora anda bien y además tiene un preview de archivos .TAP, .SNA y .Z80.
- Primer intento de ajustar la velocidad de la emulación. ¡Bastante bien! La música suena a la velocidad correcta aunque se corta a veces (creo que es culpa del DirectSound). Voy a ver que hago.
- Le estoy agarrando la mano a las APIs y ya me deshice de bastante código MFC, lo cual es algo bueno en términos de performance. El tamaño del ejecutable se redujo ya que saqué un montón de basura que andaba dando vueltas por ahí.

# 20/7/2000

- Pasaron casi dos meses desde la última actualización. En ese tiempo, corregí la gran mayoría de los problemas de las versiones anteriores.
- Se chequearon todas las instrucciones y casi puedo asegurar que estan 100% correctas.
- Emulo correctamente el registro R, así que los programas de Jonathan Smith (Hypersports, Firefly, Hysteria, Batman: The Caped Crusader) funcionan correctamente.
- Agregué una rutina de sonido muy rudimentaria. Como la velocidad no se sincroniza con nada, hay veces que pierdo samples.
- Aceleré algo las rutinas de video (GDI y DirectDraw). GDI es muy lenta aún.
- Carga archivos .TAP
- Queda por resolver el tema de la memoria lenta, sincronizar el barrido de pantalla con las interrupciones, ajustar el sonido, tirar al diablo todo lo que sea MFC y me esté enlenteciendo la emulación, etc.

# 22/5/2000

- Arreglé las instrucciones RL, RR, RLCA y RRCA. Antes, no tomaba en cuenta el acarreo anterior (o sea, el byte no rotaba, sinó que se desplazaba hacia un lado y el bit saliente se perdía). Esto significa que ahora funciona el scroll del Jet Set Willy II y Willy aparece en la posición correcta (no se cae varias pantallas al empezar).
- PRINT 10 ahora da 0.01010101E8, lo cual es un gran avance desde el 0 que obtenía anteriormente. Los responsables: RL C no andaba.
- Funciona el Jet Set Willy II, el Fairlight sin teclado y parece que puedo ejecutar programas en BASIC (funciona el High Noon).

# 21/5/2000

- Arreglé los cambios que las instrucciones le hacen al PC. Antes, habían opcodes que le sumaban más de lo necesario, perdiendome cada tanto algunas instrucciones.
- Ahora andan los programas en BASIC, pero no puedo hacer cálculos numéricos.

# 11/5/2000

- Comienza la historia...