|
|
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.