|
|
1.1 ! root 1: /* intvectors.h: header file for interrupt programming on att7300 */ ! 2: ! 3: typedef int (*intvec) (); /* an intvec is a ptr to a fn */ ! 4: ! 5: /* each vector is at address = 4*(intvec slot #) */ ! 6: /* for ex. the console is at vec slot 29, at address 4*29=116=0x74 */ ! 7: /* All interrupts on the ATT7300 are "autovectored", so they have */ ! 8: /* fixed vector locations as follows-- */ ! 9: ! 10: #define CLOCKVEC (*(intvec *)0x78) /* clock interrupt */ ! 11: #define CLOCKLEV 6 ! 12: #define SLUVEC1 (*(intvec *)0x70) /* the SLU1 int vec at addr 0x70 */ ! 13: #define SLU1LEV 4 /* interrupt level for SLU1 */ ! 14: #define SLUVEC3 (*(intvec *)0x6c) /* SLU3 int vec: keyboard */ ! 15: #define SLU3LEV 3 /* int lev for SLU3 */ ! 16: #define PIVEC (*(intvec *)0x68) /* the parallel port, also floppy */ ! 17: #define PILEV 2 ! 18: ! 19: /* Assembly language envelope routines are available in the att7300 ! 20: library for the interrupt handlers needed for each of the vectors ! 21: defined above. For example, for the console, SLU1, device, there ! 22: is: ! 23: .globl _slu1int | make _slu1int extern ! 24: ! 25: _slu1int: movel a0,sp@- | save C scratch regs ! 26: movel a1,sp@- ! 27: movel d0,sp@- ! 28: movel d1,sp@- | (or use movem for better performance) ! 29: jsr _slu1intc | C will save other regs on entry to routine ! 30: movel sp@+,d1 ! 31: movel sp@+,d0 ! 32: movel sp@+,a1 ! 33: movel sp@+,a0 ! 34: rte | return from interrupt ! 35: ! 36: Similar routines are available for: ! 37: slu2int, calling slu2intc ! 38: clockint, calling clockintc ! 39: spurint, calling spurintc ! 40: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.