|
|
1.1 root 1: /* intvectors_mecb.h: header file for interrupt programming on mecb */
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:
8: #define SPURVEC (*(intvec *)0x60) /* spurious interrupt */
9: #define SLUVEC1 (*(intvec *)0x74) /* the SLU1 int vec at addr 0x74: console */
10: #define SLU1LEV 5 /* interrupt level for SLU1 */
11: #define SLUVEC2 (*(intvec *)0x78) /* SLU2 int vec: "host line" */
12: #define SLU2LEV 6 /* int lev for SLU2 */
13: #define ABORTVEC (*(intvec *)0x7c) /* int vec for abort interrupt */
14: #define ABORTLEV 7 /* nonmaskable, even at CPU pri 7 */
15:
16: /* the location of the PI/T timer int vector, in user vector area, 100-3fc-- */
17: #define CLOCKVECADDRESS ((intvec *)0x100) /* we choose this, in 100-3fc */
18:
19: /* the int vector itself--at location we chose-- */
20: #define CLOCKVEC (*(intvec *)CLOCKVECADDRESS)
21: #define CLOCKLEV 2
22:
23: /* The parallel port uses level 3--in block of four vectors, */
24: /* with base address binary XXXXXX0000, XXXXXX from pivr. */
25: /* Then during interrupt cycle, 68230 sets bits 2 and 3 based */
26: /* on specific PI event: 00 for H1 event, 01 for H2, 10 for H3, 11 for H4*/
27: /* so we end up with 4 interrupt vectors, one for each handshake line */
28: /* but the MECB has output buffering on H2 and H4, so only H1 and H3 */
29: /* are really usable for interrupts */
30: #define PI_BASEVECADDRESS ((intvec *)0x110) /* we choose this, in 100-3fc */
31: #define PI_H1VECADDRESS PI_BASEVECADDRESS /* H1 is 0'th of the four */
32: #define PI_H3VECADDRESS (PI_BASEVECADDRESS+2) /* H3 is 2nd of the four */
33:
34: /* the int vectors themselves--at locations specified above-- */
35: #define PI_H1VEC (*(intvec *)PI_H1VECADDRESS)
36: #define PI_H3VEC (*(intvec *)PI_H3VECADDRESS)
37: #define PILEV 3
38:
39:
40: /* Assembly language envelope routines are available in the mecb
41: library for the interrupt handlers needed for each of the vectors
42: defined above. For example, for the console, SLU1, device, there
43: is:
44: .globl _slu1int | make _slu1int extern
45:
46: _slu1int: movel a0,sp@- | save C scratch regs
47: movel a1,sp@-
48: movel d0,sp@-
49: movel d1,sp@- | (or use movem for better performance)
50: jsr _slu1intc | C will save other regs on entry to routine
51: movel sp@+,d1
52: movel sp@+,d0
53: movel sp@+,a1
54: movel sp@+,a0
55: rte | return from interrupt
56:
57: Similar routines are available for:
58: slu2int, calling slu2intc
59: clockint, calling clockintc
60: spurint, calling spurintc
61: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.