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