80
« en: Marzo 08, 2011, 23:09:42 »
Hola!
Hacía mucho que no escribía, aunque os leo muy a menudo y me alegra ver que paso a paso se van gestando cosas por aquí. Un saludo a todos.
Este año he empezado un ciclo de electrónica y para mi sorpresa, en la asignatura de Electrónica Digital, nos estamos centrando en el procesador 6502 (Imaginaos el subidón que me dio al saberlo), así que estoy aprendiendo ensamblador y disfrutando como un enano.
Por mi cuenta he empezado a ver el tema de interrupciones y he leído algunos libros respecto al tema, pero hay cosas que no me quedan claras.
Si no he entendido mal, a grandes rasgos, consiste en dos bytes que contienen el puntero a la dirección de memoria que se ejecutará cuando se realice la interrución. Cuando salte una interrupcion, el sistema irá a esta zona y ejecutará lo que haya de modo similar a si fuera una subrutina.
Mi primera pregunta es: ¿Cuando y cómo se llama a una interrupción?
También he leído que el sistema utiliza las interrupciones 60 veces por segundo (controlar el reloj, controlar la entrada de teclado, flasheo del cursor, etc...) Entonces supongo que esos dos bytes de puntero cambian en la memoria muchísimas veces ( de ahí la necesidad de usar la instrucción SEI) La cuestión es: cuando yo le meta a esas direcciones una dirección de mi rutina, entiendo que se machacará seguidamente por la que quiera usar el sistema. Entonces, si yo quisiera ejecutar esa rutina varias veces, ¿qué tendría que hacer?
A ver si alguien me puede aclarar un poco este tema, que en los libros no lo veo muy claro y tampoco encuentro muchos ejemplos que lo expliquen.
Os pongo un ejemplo de una interrupción que lee el teclado y escribe en pantalla. Lo que no consigo entender es en qué parte se llama a la interrupción en el programa... o simplemente poniendo la dirección en los dos bytes, ejecutaría mi interrupción... pero sólo lo haría una vez, porque se queda en un bucle infinito en la etiqueta HERE... No sé... hay algo que no termino de ver.
Bueno, muchas gracias por adelantado.
[code]
MAIN SEI
LDA #00
STA USRVTR
LDA #$C1
STA USRVTR+1
CLI
HERE JMP HERE
EQU $C100
IRQ JSR SCNKEY
LDX +$C6
BEQ OUT
DEX
STX +$C6
LDA $0277
JSR CHROUT
OUT LDA IRQCTL
PLA
TAY
PLA
TAX
PLA
RTI
[/quote]