Snooping

De que se trata

Snooping es una funcionalidad de WHDLoad que realiza la validación y registro de los accesos a los registros Custom y de la CIA. Si Snoop esta activo todos los accesos inválidos crearán una Falla de Acceso y el programa instalado terminará. Dichos accesos son: Los registros Strobe pueden ser leídos o escritos. El conjunto de registros Custom válidos puede variar entre OCS (Old ChipSet - A500, A1000, viejas A2000), ECS (Enhanced ChipSet - A600, nuevas A2000, A3000) y AGA (Advanced Graphics - A1200, A4000). Esto es útil especialmente para localizar errores en programas viejos causados por accesos no definidos a los nuevos registros AGA.

Como trabaja

Si Snoop esta activado, WHDLoad marca las direcciones de los registros Custom y CIA como inválidas en el árbol de traducción de la MMU. Debido a esto, cada acceso a un registro Custom o CIA ocasionará una excepción de Falla de Acceso. El gestor de excepciones dentro de WHDLoad manejará esta excepción. Primero controlará si el acceso es válido. Si el acceso es inválido el programa será terminado. Si el acceso es válido y es una operación de lectura será emulado y la ejecución del programa continuara. Si es una operación de escritura WHDLoad adicionalmente guardara los valores escritos en un espacio de almacenamiento interno.
Debido a la sobrecarga de la excepción y la secuencia de emulación la ejecución del programa se enlentecera. Cuando dependerá del tipo de CPU, el tipo de Memoria Chip (16/32 bits) y el alineamiento del Puntero de Pila si la Memoria Chip es de 32 bits (Palabras Largas alineadas o no). También diferirá por el tipo de acceso (Byte/Palabra/Palabra Larga, Lectura/Escritura). En el 68030 la Escritura será mas rápida que la Lectura (debido a que durante las lecturas el entorno de pila es de 92 bytes, y en escrituras 32 bytes), en el 68060 las Lecturas serán mas rápidas debido a que la emulación para las Escrituras es mas compleja.

Modo Snoop Rápido (Fast Snoop)

La opción Snoop/S activa el modo de snoop rápido. Los accesos de lectura no serán comprobados. No se realizan controles especiales. Este modo solo será útil para obtener el contenido de los registros Custom, por ej. para salvar una pantalla usando SP.

Analizador de la CopperList

Desde la versión 13 de WHDLoad también la copperlist en si será comprobada. El analizador se activará durante las escrituras a los registros coplc si el DMA de copper esta activado, o cuando el programa instalado active el DMA de copper escribiendo el registro dmacon. El analizador seguirá la copperlist y validara todas las instrucciones Move aplicando las restricciones causadas por la opción Snoop (OCS/ECS/AGA). Las instrucciones Skip y Wait (excepto CEND) serán ignoradas. Cuando encuentre entradas inválidas el programa instalado terminara. El analizador sigue las ramificaciones (copjmp), detecta ciclos y comprueba hasta 16 sublistas. Los Move's en la copperlist serán salvados en el archivo interno de registros Custom que se vuelca al salir de WHDLoad. El analizador también no estará activo en el modo Snoop Rápido.

Comprobación de la Prioridad del Blitter

Cuando la opción ChkBltHog/S este activa WHDLoad comprobará que el programa instalado no active el bit BltHog bit escribiendo al registro dmacon. La Prioridad del Blitter puede causar problemas en algunas configuraciones de hardware en conjunto con grandes operaciones del blitter (donde se usen todos los canales).

Comprobación del Tamaño del Blitter

Cuando se activa la opción ChkBltSize/S WHDLoad comprobará que los trabajos del blitter no accedan memoria fuera del área BaseMem. En accesos de escritura a bltsize o bltsizh comprueba si el modo lineal esta activado en bltcon1. Si el modo lineal esta activado, cancelará el control de tamaño. En caso contrario WHDLoad calculara la primer y ultima palabra a acceder para cada canal activo de DMA. Si una dirección esta fuera del área BaseMem el programa será terminado con un cuadro de diálogo. El calculo esta diseñado para trabajar en todos los modos (ascendente/descendente, módulos positivos/negativos, módulos/punteros impares).
Recuerde que el modo de dibujo de líneas no será verificado y que todos los registros del blitter pueden ser escritos por el copper si copcon esta configurado.

Comprobación de la Espera del Blitter

Cuando la opción ChkBltWait/S esta activa WHDLoad usara un seguimiento de instrucciones para verificar que el programa instalado espera correctamente a que el blitter termine antes de lanzar otro trabajo de blitter. Usa una variable interna que representa el estado de trabajo del blitter. La variable es configurada cuando se produce un acceso de escritura a bltsize o bltsizh y desactivada cuando se realiza un acceso de lectura al registro dmaconr. En cada escritura a un registro del blitter el valor de la variable interna es comprobado, si demuestra un trabajo de blitter en ejecución el programa instalado será terminado y WHDLoad reportara el PC del ultimo trabajo de blitter arrancado conjuntamente con el acceso actual.
Hay dos cuellos de botella principales en esta funcionalidad. Primero, el uso de blitter a través del copper no se comprueba, y segundo, el uso de las interrupciones del blitter ocasionara que la rutina de comprobación reporte errores inexistentes.

El futuro

Esta planeado implementar funcionalidades tales como Congelado e Iconificado. Para las mismas, Snoop es un requisito necesario. Por lo tanto es recomendable que los autores de los instaladores comprueben sus instaladores con Snoop para asegurar la compatibilidad futura.

Requerimientos

Se requiere una MMU para la funcionalidad Snoop. WHDLoad también debe usar la MMU, por lo tanto MMU/S debe estar activo en máquinas con 68030.

Limitaciones