La familia de microprocesadores 65xx , que consta de MOS Technology 6502 y sus derivados, WDC 65C02 , WDC 65C802 y WDC 65C816 y CSG 65CE02 , todos manejan las interrupciones de manera similar. Hay tres señales de interrupción de hardware comunes a todos los procesadores 65xx y una interrupción de software , la instrucción BRK . El WDC 65C816 agrega una cuarta interrupción de hardware , ABORT , útil para implementar arquitecturas de memoria virtual, y la instrucción de interrupción del software COP (también presente en el 65C802), diseñada para su uso en un sistema con uncoprocesador de algún tipo (por ejemplo, un procesador de punto flotante ). [1] [2]
Tipos de interrupción
Interrumpir | Vector (hexadecimal) | |
---|---|---|
LSB | MSB | |
ABORTAR [nb 1] | FFF8 | FFF9 |
COP [nb 2] | FFF4 | FFF5 |
IRQ / BRK | FFFE | FFFF |
NMI | FFFA | FFFB |
REINICIAR | FFFC | FFFD |
Las señales de interrupción de proceso son todas activas bajas y son las siguientes: [1]
- REINICIAR
- una señal de reinicio , activada por nivel
- NMI
- una interrupción no enmascarable , disparada por flanco
- IRQ
- una interrupción enmascarable , activada por nivel
- ABORTAR
- una interrupción de propósito especial, no enmascarable (solo 65C816, ver más abajo), activada por nivel
La detección de un La señal RESET hace que el procesador entre en un período de inicialización del sistema de seis ciclos de reloj, después de lo cual establece la bandera de desactivación de solicitud de interrupción en el registro de estado y carga el contador del programa con los valores almacenados en el vector de inicialización del procesador ( $ 00FFFC - $ 00FFFD ) antes de comenzar la ejecución. [1] Si está operando en modo nativo, los 65C816 / 65C802 vuelven al modo de emulación y permanecen allí hasta que regresan al modo nativo bajo el control del software.
Interrumpir | Vector (hexadecimal) | |
---|---|---|
LSB | MSB | |
ABORTAR [nb 1] | 00FFE8 | 00FFE9 |
BRK | 00FFE6 | 00FFE7 |
COP [nb 2] | 00FFE4 | 00FFE5 |
IRQ | 00FFEE | 00FFEF |
NMI | 00FFEA | 00FFEB |
REINICIAR | Ninguno [nb 3] |
La detección de un NMI o Señal IRQ , así como la ejecución de una La instrucción BRK provocará la misma secuencia general de eventos, que son, en orden: [1] [3]
- El procesador completa la instrucción actual y actualiza los registros o la memoria según sea necesario antes de responder a la interrupción.
- 65C816 / 65C802 cuando se opera en modo nativo: El registro del banco de programas ( PB , el A16-A23 parte del bus de direcciones ) se inserta en la pila de hardware .
- El byte más significativo (MSB) del contador de programa ( PC ) se inserta en la pila.
- El byte menos significativo (LSB) del contador de programa se inserta en la pila.
- El registro de estado ( SR ) se empuja a la pila.
- La bandera de desactivación de interrupciones se establece en el registro de estado.
- 65C816 / 65C802: PB está cargado con $ 00 .
- La PC se carga desde el vector correspondiente (ver tablas).
El comportamiento del 65C816 cuando Se afirma que ABORT difiere en algunos aspectos de la descripción anterior y se analiza por separado a continuación.
Tenga en cuenta que el procesador no empuja el acumulador y los registros de índice a la pila; el código en el manejador de interrupciones debe realizar esa tarea, así como restaurar los registros al finalizar el procesamiento de interrupciones, según sea necesario. También tenga en cuenta que el vector para IRQ es el mismo que para BRK en todos los procesadores 65xx de ocho bits, así como en el 65C802 / 65C816 cuando se opera en modo de emulación. Cuando opera en modo nativo, el 65C802 / 65C816 proporciona vectores separados para IRQ y BRK . [4]
Cuando se establece, el indicador de desactivación de solicitud de interrupción (el Me mordí en el registro de estado) deshabilitará la detección de la IRQ señal, pero no tendrá ningún efecto sobre las otras interrupciones (sin embargo, véase más adelante la sección sobre la Instrucción WAI implementada en procesadores WDC CMOS). Además, con el 65 (c) 02 o el 65C816 / 65C802 operando en modo de emulación, la copia del registro de estado que se empuja a la pila tendrá la Bandera B activada si un BRK ( interrupción de software ) fue la causa de la interrupción, o se borró si un IRQ fue la causa. [nb 4] Por lo tanto, la rutina del servicio de interrupción debe recuperar una copia del registro de estado guardado desde donde fue empujado a la pila y verificar el estado del Bandera B para distinguir entre un IRQ y un BRK . [1] [2] [4] Este requisito se elimina cuando se opera el 65C802 / 65C816 en modo nativo, debido a los vectores separados para los dos tipos de interrupciones. [2]
ABORT interrupción
Los 65C816 La entrada de interrupción ABORTB está destinada a proporcionar los medios para redirigir la ejecución del programa cuando se detecta una excepción de hardware, como una falla de página o una violación de acceso a la memoria . De ahí la respuesta del procesador cuando el La entrada ABORTB se afirma (se niega) es diferente de cuando IRQB y / o NMIB se afirman. Además, lograr un correcto funcionamiento en respuesta a ABORTB requiere que la interrupción ocurra en el momento adecuado durante el ciclo de la máquina , mientras que no existe tal requisito para IRQB o NMIB .
Cuándo ABORTB se afirma durante un ciclo de memoria válido, es decir, cuando el procesador ha afirmado la VDA y / o Salidas de estado de VPA , se producirá la siguiente secuencia de eventos: [2]
- El procesador completa la instrucción actual pero no cambia los registros o la memoria de ninguna manera ; los resultados computacionales de la instrucción completa se descartan. Una interrupción de aborto no aborta literalmente una instrucción. [2]
- El banco de programas ( PB , ver arriba) se empuja a la pila.
- El byte más significativo (MSB) de la dirección de la instrucción abortada se inserta en la pila.
- El byte menos significativo (LSB) de la dirección de la instrucción abortada se inserta en la pila.
- El registro de estado se inserta en la pila.
- La bandera de desactivación de interrupciones se establece en el registro de estado.
- PB está cargado con $ 00 .
- El contador de programa se carga desde el ABORT vector (ver tablas).
Como la dirección empujada a la pila es la de la instrucción abortada en lugar del contenido del contador del programa, la ejecución de una RTI ( R e T urn from I nterrupt) después de una La interrupción ABORT hará que el procesador regrese a la instrucción abortada, en lugar de a la siguiente instrucción, como sería el caso con las otras interrupciones.
Para que el procesador responda correctamente a un aborto, la lógica del sistema debe afirmar (negar) la ABORTB entrada tan pronto como se haya colocado una dirección válida en el bus y se haya determinado que la dirección constituye una falla de página, violación de acceso a la memoria u otra anomalía (por ejemplo, intento de ejecución de una instrucción privilegiada). Por tanto, la lógica no debe afirmar ABORTB hasta que el procesador haya afirmado la VDA o Señales VPA . También, ABORTB debe permanecer afirmado hasta la caída del reloj de la fase dos y luego ser liberado inmediatamente. Si no se observan estas limitaciones de tiempo, el propio manejador de interrupción de aborto puede abortarse, provocando que los registros y / o la memoria se modifiquen de una manera posiblemente indefinida. [2]
Interrumpir anomalías
En el NMOS 6502 y derivados (por ejemplo, 6510), la afirmación simultánea de una línea de interrupción de hardware y la ejecución de BRK no se tuvo en cuenta en el diseño: el La instrucción BRK se ignorará en tal caso. Además, el estado del indicador de modo decimal en el registro de estado del procesador no cambia después de una interrupción de cualquier tipo. Este comportamiento puede resultar potencialmente en un error difícil de localizar en el controlador de interrupciones si el modo decimal está habilitado en el momento de una interrupción. Estas anomalías se corrigieron en todas las versiones CMOS del procesador. [2]
Consideraciones sobre el controlador de interrupciones
Un manejador de interrupciones bien diseñado y conciso o una rutina de servicio de interrupciones (ISR) no solo atenderá rápidamente cualquier evento que cause una interrupción, sino que lo hará sin interferir de ninguna manera con la tarea de primer plano interrumpida; el ISR debe ser "transparente" para la tarea interrumpida (aunque pueden aplicarse excepciones en casos especializados). Esto significa que el ISR debe preservar el estado del microprocesador (MPU) y no alterar nada en la memoria que se supone que no debería alterar. Además, el ISR debe ser completamente reentrante , lo que significa que si dos interrupciones llegan en sucesión cercana, el ISR podrá reanudar el procesamiento de la primera interrupción después de que se haya reparado la segunda. La reentrada generalmente se logra utilizando solo la pila de hardware MPU para el almacenamiento (aunque existen otros métodos posibles).
Preservar el estado de la MPU significa que el ISR debe asegurarse de que los valores que estaban en los registros de la MPU en el momento de la interrupción estén allí cuando termine el ISR. Una parte del proceso de preservación es manejada automáticamente por la MPU cuando reconoce la interrupción, ya que empujará el contador de programa (y el banco de programa en el 65C816 / 65C802) y el registro de estado a la pila antes de ejecutar el ISR. Al finalizar el ISR, cuando el Se ejecuta la instrucción RTI , la MPU invertirá el proceso. Ningún miembro de la familia 65xx empuja ningún otro registro a la pila. [2]
En la mayoría de los ISR, el acumulador y / o los registros de índice deben conservarse para asegurar la transparencia y luego restaurarse como los pasos finales antes de ejecutar RTI . En el caso del 65C816 / 65C802, debe tenerse en cuenta si está funcionando en modo emulación o nativo en el momento de la interrupción. Si es lo último, también puede ser necesario preservar el banco de datos ( DB ) y página directa (cero) ( DP ) registros para garantizar la transparencia. Además, un sistema operativo en modo nativo 65C816 puede usar una ubicación de pila diferente a la del software de la aplicación, lo que significa que el ISR tendría que conservar y restaurar posteriormente el puntero de pila ( SP ). Para complicar aún más las cosas con el 65C816 / 65C802 es que los tamaños del acumulador y los registros de índice pueden ser de 8 o 16 bits cuando operan en modo nativo, lo que requiere que se conserven sus tamaños para una restauración posterior. [2]
Los métodos mediante los cuales se conserva y restaura el estado de la MPU dentro de un ISR variarán con las diferentes versiones de la familia 65xx. Para los procesadores NMOS (por ejemplo, 6502, 6510, 8502, etc.), solo puede haber un método por el cual se conservan el acumulador y los registros de índice, ya que solo el acumulador puede empujarse y extraerse de la pila. [5] Por lo tanto, el siguiente código de entrada ISR es típico:
PHA ; guardar acumulador TXA PHA ; guardar el registro X TYA PHA ; guardar CLD de registro Y ; asegurar el modo binario borrando la bandera decimal
La La instrucción CLD es necesaria porque, como se señaló anteriormente, las versiones NMOS del 6502 no borran la Indicador D (modo decimal) en el registro de estado cuando se produce una interrupción.
Una vez que se han conservado los registros de índice y acumulador, el ISR puede utilizarlos según sea necesario. Cuando el ISR haya concluido su trabajo, restauraría los registros y luego reanudaría la tarea de primer plano interrumpida. Nuevamente, el siguiente código NMOS es típico:
PLA TAY ; restaurar PLA TAX del registro Y ; restaurar PLA de registro X ; restaurar el acumulador RTI ; reanudar la tarea interrumpida
Una consecuencia de la La instrucción RTI es que la MPU volverá al modo decimal si ese era su estado en el momento de la interrupción. [5]
El 65C02 y el 65C816 / 65C802 cuando operan en modo de emulación, requieren menos código, ya que pueden presionar y tirar de los registros de índice sin usar el acumulador como intermediario. [2] También borran automáticamente el modo decimal antes de ejecutar el ISR. [2] Lo siguiente es típico:
PHA ; guardar acumulador PHX ; guardar PHY del registro X ; guardar registro Y
Al terminar, el ISR revertiría el proceso:
PLY ; restaurar el registro Y PLX ; restaurar PLA de registro X ; restaurar el acumulador RTI ; reanudar la tarea interrumpida
Como se indicó anteriormente, hay un poco más de complejidad con el 65C816 / 65C802 cuando se opera en modo nativo debido a los tamaños de registro variables y la necesidad de tener en cuenta el DB y Registros DP . En el caso de los registros de índice, se pueden insertar sin tener en cuenta sus tamaños, ya que el cambio de tamaño establece automáticamente el byte más significativo (MSB) en estos registros en cero y no se perderán datos cuando se restaure el valor insertado, siempre que el los registros de índice tienen el mismo tamaño que cuando se presionaron. [2]
El acumulador, sin embargo, es realmente dos registros: designado .A y .B . [2] Empujar el acumulador cuando está configurado en 8 bits no preservará .B , [2] que podría resultar en una pérdida de transparencia si cambia el ISR .B de cualquier forma. Por lo tanto, el acumulador siempre debe establecerse en 16 bits antes de empujarlo o tirarlo si el ISR va a utilizar .B . También es más eficiente establecer los registros de índice en 16 bits antes de presionarlos. De lo contrario, el ISR debe enviar una copia adicional del registro de estado para poder restaurar los tamaños de los registros antes de extraerlos de la pila.
Para la mayoría de los ISR, el siguiente código de entrada logrará el objetivo de transparencia:
PHB ; guardar el banco de datos actual PHD ; guardar el puntero de página directo REP # % 00110000 ; seleccionar registros PHA de 16 bits ; guardar acumulador PHX ; guardar PHY del registro X ; guardar registro Y
En el fragmento de código anterior, el símbolo % es tecnología MOS ysintaxis de lenguaje ensamblador estándar WDC para un operando bit a bit .
Si el ISR tiene su propia ubicación de pila asignada, la conservación del puntero de pila ( SP ) debe aparecer en la memoria después de que se hayan producido los empujes anteriores; debería ser evidente por qué es así. El siguiente código, agregado a la secuencia anterior, manejaría este requisito:
TSC ; copiar el puntero de la pila al acumulador STA stkptr ; guardar en algún lugar seguro RAM LDA isrptr ; obtener el puntero de pila de ISR & ... TCS ; establecer nueva ubicación de pila
Al finalizar el ISR, los procesos anteriores se revertirían de la siguiente manera:
REP # % 00110000 ; seleccionar registros TSC de 16 bits ; guardar el SP de ISR ... STA isrptr ; para uso posterior LDA isstkptr ; obtener SP & ... TCS de la tarea en primer plano ; configurarlo PLY ; restaurar el registro Y PLX ; restaurar PLA de registro X ; restaurar acumulador PLD ; restaurar el puntero de página directo PLB ; restaurar el banco de datos actual RTI ; reanudar la tarea interrumpida
Tenga en cuenta que al ejecutar RTI , el 65C816 / 65C802 restaurará automáticamente los tamaños de registro a lo que eran cuando ocurrió la interrupción, ya que al extraer el registro de estado previamente guardado se configuran o borran ambos bits de tamaño de registro a lo que eran en el momento de la interrupción. [2]
Si bien es posible cambiar el 65C816 / 65C802 del modo nativo al modo de emulación dentro de un ISR, esto conlleva muchos peligros. [2] Además de forzar el acumulador y los registros de índice a 8 bits (causando una pérdida del byte más significativo en los registros de índice), ingresar al modo de emulación truncará el puntero de la pila a 8 bits y reubicará la pila en la RAM de la página 1 . [2] El resultado es que la pila que existía en el momento de la interrupción será inaccesible a menos que también estuviera en la RAM de la página 1 y no supere los 256 bytes. En general, el cambio de modo mientras se da servicio a una interrupción no es un procedimiento recomendado, pero puede ser necesario en entornos operativos específicos.
Usando BRK y COP
Como se señaló anteriormente, BRK y COP son interrupciones de software y, como tales, se pueden utilizar de diversas formas para implementar funciones del sistema.
Un uso histórico de BRK ha sido para ayudar a parchear PROM cuando se descubrieron errores en el firmware de un sistema . Una técnica típica que se utiliza a menudo durante el desarrollo del firmware era organizar la Vector BRK para apuntar a un "área de parche" no programada en la PROM. En el caso de que se descubriera un error, el parche se lograría "soplando" todos los fusibles en la dirección donde se encontraba la instrucción defectuosa, cambiando así el código de operación de la instrucción a $ 00 . Al ejecutar el resultado BRK , la MPU se redirigiría al área de parche, en la que se escribiría el código de parche adecuado. A menudo, el código de área del parche comenzaba "rastreando la pila" para determinar la dirección en la que se encontró el error, permitiendo potencialmente la presencia de más de un parche en la PROM. El uso de El BRK para el parcheo de PROM disminuyó una vez que las EPROM y EEPROM estuvieron comúnmente disponibles.
Otro uso de BRK en el desarrollo de software es una ayuda de depuración junto con un monitor de lenguaje de máquina . Al sobrescribir un código de operación con BRK ( $ 00 ) y dirigiendo el BRK vector hardware al punto de entrada del monitor, uno puede hacer que un programa se detenga en cualquier punto deseado, permitiendo que el monitor tome el control. En ese momento, uno puede examinar la memoria, ver los valores de registro del procesador, el código de parche, etc. La depuración, como abogan Kuckes y Thompson, puede facilitarse rociando generosamente el código de uno con Instrucciones NOP (código de operación $ EA ) que puede ser reemplazado por Instrucciones BRK sin alterar el comportamiento real del programa que se está depurando. [5] [6] [7]
Una característica de la BRK y Las instrucciones COP son que el procesador trata como una instrucción de dos bytes: el código de operación en sí y el siguiente byte, que se conoce como la "firma". [2] Tras la ejecución de BRK o COP , el procesador agregará dos al contador del programa antes de empujarlo a la pila. Por lo tanto, cuando Se ejecuta RTI ( R e T urn from I nterrupt), el programa interrumpido continuará en la dirección inmediatamente siguiente a la firma. Si BRK se utiliza como un dispositivo de depuración, es posible que el contador del programa deba ajustarse para que apunte a la firma para que la ejecución se reanude donde se esperaba. Alternativamente, un NOP se puede insertar como un "marcador de posición" de firma, en cuyo caso no se requerirá ningún ajuste del contador del programa.
El hecho de que BRK y El doble incremento de COP del contador del programa antes de empujarlo a la pila facilita la técnica de tratarlos como instrucciones de llamada de supervisor , como se encuentra en algunas computadoras mainframe . El procedimiento habitual es tratar la firma como un índice de servicio del sistema operativo. El sistema operativo BRK o El controlador de COP recuperaría el valor del contador del programa enviado a la pila, lo reduciría y leería desde la ubicación de memoria resultante para obtener la firma. [8] [9] Después de convertir la firma en un índice de base cero, se puede consultar una tabla de búsqueda simple para cargar el contador del programa con la dirección de la rutina de servicio adecuada. Una vez completada la rutina de servicio, el La instrucción RTI se usaría para devolver el control al programa que realizó la llamada al sistema operativo. Tenga en cuenta que la firma de BRK puede tener cualquier valor, mientras que la firma para El COP debe limitarse al rango $ 00 - $ 7F . [2]
El uso de BRK y / o COP para solicitar un servicio del sistema operativo significa que las aplicaciones de usuario no tienen que conocer la dirección de entrada de cada función del sistema operativo, solo el byte de firma correcto para invocar la operación deseada. Por lo tanto, la reubicación del sistema operativo en la memoria no romperá la compatibilidad con las aplicaciones de usuario existentes. Además, como ejecutando BRK o COP siempre dirige el procesador a la misma dirección, se puede usar un código simple para preservar los registros en la pila antes de transferir el control al servicio solicitado. Sin embargo, este modelo de programación resultará en una ejecución algo más lenta en comparación con llamar a un servicio como una subrutina , principalmente como resultado de la actividad de la pila que ocurre con cualquier interrupción. Además, las solicitudes de interrupción se habrán deshabilitado ejecutando BRK o COP , requiriendo que el sistema operativo los vuelva a habilitar.
Instrucciones WAI y STP
WAI ( WA it for I nterrupt, opcode $ CB ) es una instrucción disponible en la versión WDC de los microprocesadores 65C02 y 65C816 / 65C802 (MPU) que detiene la MPU y la coloca en un estado semi-catatónico hasta que ocurre una interrupción de hardware de cualquier tipo. [2] El uso principal de WAI se encuentra en sistemas integrados de baja potencia donde la MPU no tiene nada que hacer hasta que ocurre un evento esperado, se desea un consumo mínimo de energía mientras el sistema está esperando y se requiere una respuesta rápida. Un ejemplo típico de código que haría uso de WAI es el siguiente:
SEI ; deshabilitar IRQs WAI ; espere la interrupción del hardware ; ... la ejecución se reanuda aquí
En el fragmento de código anterior, la MPU se detendrá tras la ejecución de WAI y pasar a un estado de muy bajo consumo de energía. A pesar de que las solicitudes de interrupción (IRQ) se han desactivado antes de la WAI , la MPU responderá a cualquier interrupción de hardware mientras espera. Al recibir una interrupción, la MPU se "despertará" en un ciclo de reloj y reanudará la ejecución en la instrucción inmediatamente siguiente. WAI . Por lo tanto, la latencia de interrupción será muy corta (70 nanosegundos a 14 megahercios), lo que dará como resultado la respuesta más rápida posible a un evento externo.
Similar en algunos aspectos a WAI es elSTP ( ST o P , código de operación $ DB ), que apaga completamente la MPU mientras espera una única entrada de interrupción. [2] Cuando Se ejecuta STP , la MPU detiene su reloj interno (pero retiene todos los datos en sus registros) y entra en un estado de bajo consumo. La MPU sale de este estado tirando de su pin de entrada de reinicio ( RESB , que se clasifica como una entrada de interrupción) bajo. Luego, la ejecución se reanudará en la dirección almacenada en las ubicaciones. $ 00FFFC- $ 00FFFD , el vector de reinicio de hardware. Al igual que con WAI , STP está diseñado para su uso en aplicaciones integradas de baja potencia donde pueden transcurrir largos períodos de tiempo entre eventos que requieren la atención de MPU y no se requiere ningún otro procesamiento. STP no se utilizaría en la programación normal, ya que daría lugar al cese total del procesamiento.
Notas al pie
- ^ a b El La entrada ABORT está disponible solo con el W65C816S. [2]
- ^ a b El La instrucción COP está disponible en ambos modos de funcionamiento. [2]
- ^ El 65C816 / 65C802 no tiene un vector de interrupción de modo nativo para el Señal RESET , ya que un reset siempre revierte el procesador al modo de emulación. [2]
- ^ El valor de la La bandera B en el propio registro de estado es siempre 1 , independientemente del tipo de interrupción. B es significativo solo en la copia del registro de estado que se inserta en la pila en respuesta a una interrupción, y no existe realmente en el registro de banderas. [2]
Referencias
- ↑ a b c d e J. S. Anderson (1994). Tecnología de microprocesador . Butterworth-Heinemann. págs. 143-144. ISBN 9780750618397.
- ^ a b c d e f g h i j k l m n o p q r s t u v w x y z aa David Eyes y Ron Lichty (28 de abril de 1992). "Programación del 65816" (PDF) . The Western Design Center, Inc. Archivado desde el original (PDF) el 23 de julio de 2012 . Consultado el 29 de noviembre de 2012 . Cite journal requiere
|journal=
( ayuda ) - ^ a b "Arquitectura básica" . 6502 . 2002-01-02.
- ^ a b Leo J. Scanlon (1980). 6502 Diseño de software . HW Sams. págs. 172-173 . ISBN 9780672216565.
- ^ a b c Lance A. Leventhal (1986). 6502 Programación en lenguaje ensamblador . Osborne / McGraw-Hill. ISBN 9780078812163.
- ^ Ronald J. Tocci y Lester P. Laskowski (1979). Microprocesadores y microcomputadoras: hardware y software . Prentice Hall. pag. 379 . ISBN 9780135813225.
- ^ Arthur F. Kuckes y BG Thompson (1987). Apple II en el laboratorio . ARRIBA Archivo. pag. 93. ISBN 9780521321983.
- ^ Harrod, Dennette A. (octubre de 1980). "6502 obtiene instrucciones microprogramables" . BYTE . Vol. 5 no. 10. McGraw Hill . págs. 282-285. Archivado desde el original el 25 de mayo de 2006 . Consultado el 31 de mayo de 2009 .
- ^ Richard R. Smardzewski (1984). Programación y aplicaciones de microprocesadores para científicos e ingenieros . Elsevier. pag. 125 . ISBN 9780444424075.
Otras lecturas
- Brad Taylor. "6502 Bandera 'B' y código de operación BRK" . Cite journal requiere
|journal=
( ayuda ) - Recursos y foro de microprocesadores de la familia 6502
- Introducción a las interrupciones 65xx : una discusión extensa sobre el procesamiento de interrupciones de la familia 65xx.
- Investigación de interrupciones del 65C816 : un análisis extenso del procesamiento de interrupciones que es específico del funcionamiento en modo nativo del 65C816.