| 
					
				 | 
			
			
				@@ -228,3 +228,155 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define SPI_IRQ_NUM	0	/* SPI interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define TMR_IRQ_NUM	1	/* Timer interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define UART_IRQ_NUM	2	/* UART interrupt */	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	WDT_IRQ_NUM	3	/* Watchdog Timer interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define RTC_IRQ_NUM	4	/* RTC interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	KB_IRQ_NUM	6	/* Keyboard Interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PWM_IRQ_NUM	7	/* Pulse-Width Modulator int. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	INT0_IRQ_NUM	8	/* External INT0 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	INT1_IRQ_NUM	9	/* External INT1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	INT2_IRQ_NUM	10	/* External INT2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	INT3_IRQ_NUM	11	/* External INT3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IRQ1_IRQ_NUM	16	/* IRQ1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IRQ2_IRQ_NUM	17	/* IRQ2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IRQ3_IRQ_NUM	18	/* IRQ3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IRQ6_IRQ_NUM	19	/* IRQ6 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IRQ5_IRQ_NUM	20	/* IRQ5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SAM_IRQ_NUM	22	/* Sampling Timer for RTC */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define EMIQ_IRQ_NUM	23	/* Emulator Interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* '328-compatible definitions */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define SPIM_IRQ_NUM	SPI_IRQ_NUM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define TMR1_IRQ_NUM	TMR_IRQ_NUM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/*  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Here go the bitmasks themselves 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MSPI 	(1 << SPI_IRQ_NUM)	/* Mask SPI interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IMR_MTMR	(1 << TMR_IRQ_NUM)	/* Mask Timer interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MUART	(1 << UART_IRQ_NUM)	/* Mask UART interrupt */	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IMR_MWDT	(1 << WDT_IRQ_NUM)	/* Mask Watchdog Timer interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MRTC	(1 << RTC_IRQ_NUM)	/* Mask RTC interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IMR_MKB		(1 << KB_IRQ_NUM)	/* Mask Keyboard Interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MPWM	(1 << PWM_IRQ_NUM)	/* Mask Pulse-Width Modulator int. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IMR_MINT0	(1 << INT0_IRQ_NUM)	/* Mask External INT0 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IMR_MINT1	(1 << INT1_IRQ_NUM)	/* Mask External INT1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IMR_MINT2	(1 << INT2_IRQ_NUM)	/* Mask External INT2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IMR_MINT3	(1 << INT3_IRQ_NUM)	/* Mask External INT3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MIRQ1	(1 << IRQ1_IRQ_NUM)	/* Mask IRQ1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MIRQ2	(1 << IRQ2_IRQ_NUM)	/* Mask IRQ2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MIRQ3	(1 << IRQ3_IRQ_NUM)	/* Mask IRQ3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MIRQ6	(1 << IRQ6_IRQ_NUM)	/* Mask IRQ6 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MIRQ5	(1 << IRQ5_IRQ_NUM)	/* Mask IRQ5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MSAM	(1 << SAM_IRQ_NUM)	/* Mask Sampling Timer for RTC */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MEMIQ	(1 << EMIQ_IRQ_NUM)	/* Mask Emulator Interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* '328-compatible definitions */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MSPIM	IMR_MSPI 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IMR_MTMR1	IMR_MTMR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/*  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Interrupt Status Register  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_ADDR	0xfffff30c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR		LONG_REF(ISR_ADDR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_SPI 	(1 << SPI_IRQ_NUM)	/* SPI interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	ISR_TMR		(1 << TMR_IRQ_NUM)	/* Timer interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_UART	(1 << UART_IRQ_NUM)	/* UART interrupt */	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	ISR_WDT		(1 << WDT_IRQ_NUM)	/* Watchdog Timer interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_RTC		(1 << RTC_IRQ_NUM)	/* RTC interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	ISR_KB		(1 << KB_IRQ_NUM)	/* Keyboard Interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_PWM		(1 << PWM_IRQ_NUM)	/* Pulse-Width Modulator interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	ISR_INT0	(1 << INT0_IRQ_NUM)	/* External INT0 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	ISR_INT1	(1 << INT1_IRQ_NUM)	/* External INT1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	ISR_INT2	(1 << INT2_IRQ_NUM)	/* External INT2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	ISR_INT3	(1 << INT3_IRQ_NUM)	/* External INT3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_IRQ1	(1 << IRQ1_IRQ_NUM)	/* IRQ1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_IRQ2	(1 << IRQ2_IRQ_NUM)	/* IRQ2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_IRQ3	(1 << IRQ3_IRQ_NUM)	/* IRQ3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_IRQ6	(1 << IRQ6_IRQ_NUM)	/* IRQ6 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_IRQ5	(1 << IRQ5_IRQ_NUM)	/* IRQ5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_SAM		(1 << SAM_IRQ_NUM)	/* Sampling Timer for RTC */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_EMIQ	(1 << EMIQ_IRQ_NUM)	/* Emulator Interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* '328-compatible definitions */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_SPIM	ISR_SPI 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define ISR_TMR1	ISR_TMR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/*  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Interrupt Pending Register  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_ADDR	0xfffff30c 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR		LONG_REF(IPR_ADDR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_SPI 	(1 << SPI_IRQ_NUM)	/* SPI interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IPR_TMR		(1 << TMR_IRQ_NUM)	/* Timer interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_UART	(1 << UART_IRQ_NUM)	/* UART interrupt */	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IPR_WDT		(1 << WDT_IRQ_NUM)	/* Watchdog Timer interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_RTC		(1 << RTC_IRQ_NUM)	/* RTC interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IPR_KB		(1 << KB_IRQ_NUM)	/* Keyboard Interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_PWM		(1 << PWM_IRQ_NUM)	/* Pulse-Width Modulator interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IPR_INT0	(1 << INT0_IRQ_NUM)	/* External INT0 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IPR_INT1	(1 << INT1_IRQ_NUM)	/* External INT1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IPR_INT2	(1 << INT2_IRQ_NUM)	/* External INT2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define	IPR_INT3	(1 << INT3_IRQ_NUM)	/* External INT3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_IRQ1	(1 << IRQ1_IRQ_NUM)	/* IRQ1 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_IRQ2	(1 << IRQ2_IRQ_NUM)	/* IRQ2 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_IRQ3	(1 << IRQ3_IRQ_NUM)	/* IRQ3 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_IRQ6	(1 << IRQ6_IRQ_NUM)	/* IRQ6 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_IRQ5	(1 << IRQ5_IRQ_NUM)	/* IRQ5 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_SAM		(1 << SAM_IRQ_NUM)	/* Sampling Timer for RTC */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_EMIQ	(1 << EMIQ_IRQ_NUM)	/* Emulator Interrupt */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* '328-compatible definitions */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_SPIM	IPR_SPI 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IPR_TMR1	IPR_TMR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/********** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 0xFFFFF4xx -- Parallel Ports 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ **********/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Port A 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PADIR_ADDR	0xfffff400		/* Port A direction reg */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PADATA_ADDR	0xfffff401		/* Port A data register */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PAPUEN_ADDR	0xfffff402		/* Port A Pull-Up enable reg */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PADIR		BYTE_REF(PADIR_ADDR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PADATA		BYTE_REF(PADATA_ADDR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PAPUEN		BYTE_REF(PAPUEN_ADDR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PA(x)		(1 << (x)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/*  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Port B 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PBDIR_ADDR	0xfffff408		/* Port B direction reg */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PBDATA_ADDR	0xfffff409		/* Port B data register */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PBPUEN_ADDR	0xfffff40a		/* Port B Pull-Up enable reg */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PBSEL_ADDR	0xfffff40b		/* Port B Select Register */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PBDIR		BYTE_REF(PBDIR_ADDR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PBDATA		BYTE_REF(PBDATA_ADDR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PBPUEN		BYTE_REF(PBPUEN_ADDR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PBSEL		BYTE_REF(PBSEL_ADDR) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PB(x)		(1 << (x)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PB_CSB0		0x01	/* Use CSB0      as PB[0] */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PB_CSB1		0x02	/* Use CSB1      as PB[1] */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PB_CSC0_RAS0	0x04    /* Use CSC0/RAS0 as PB[2] */	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PB_CSC1_RAS1	0x08    /* Use CSC1/RAS1 as PB[3] */	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PB_CSD0_CAS0	0x10    /* Use CSD0/CAS0 as PB[4] */	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PB_CSD1_CAS1	0x20    /* Use CSD1/CAS1 as PB[5] */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PB_TIN_TOUT	0x40	/* Use TIN/TOUT  as PB[6] */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PB_PWMO		0x80	/* Use PWMO      as PB[7] */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/*  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Port C 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PCDIR_ADDR	0xfffff410		/* Port C direction reg */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PCDATA_ADDR	0xfffff411		/* Port C data register */ 
			 |