******************************************************************************* * interrupt.device.S Written by Readysoft. * Copyright 1992,1993,1994 RS. All rights reserved. 1992.06.08.-1994.05.18. * v1.2. ******************************************************************************* ******************************************************************************* * Macros ******************************************************************************* ;------------------------------------------------------------------------------ ; InterruptName Macro ;------------------------------------------------------------------------------ INT.NAM MACRO DC.B 'interrupt.device',0 EVEN ENDM ******************************************************************************* * DEV Macro ******************************************************************************* INT.DEV MACRO ******************************************************************************* * Constant Definitions ******************************************************************************* ;------------------------------------------------------------------------------ ; Error Codes ;------------------------------------------------------------------------------ int_er_OK EQU $00000000 all right int_er_ErrorInt EQU $80020000 error interrupt raised int_er_UnDef EQU $8002ffff undefined error ******************************************************************************* * Varibles ******************************************************************************* RSRESET int_CIAAICR RS.B 1 CIAA interrupt reg. int_CIABICR RS.B 1 CIAB interrupt reg. int_SizeOf RS.B 0 ******************************************************************************* * Routine Offsets ******************************************************************************* RSRESET RS.B -6 int_Init RS.B -6 ******************************************************************************* * Code ******************************************************************************* jmp int.Init interrupt.dev BLK.B int_SizeOf,0 EVEN ;------------------------------------------------------------------------------ ; Init NoOp ;------------------------------------------------------------------------------ int.Init movem.l d0-d1/a0-a1/a5,-(a7) lea interrupt.dev(pc),a5 move.l a5,a0 clear varible area move.w #int_SizeOf-1,d0 .Clear clr.b (a0)+ dbf d0,.Clear lea 8,a1 move.l #int.Error,d0 move.w #61,d1 .Vectors move.l d0,(a1)+ dbf d1,.Vectors move.w #191,d1 .Vectors2 clr.l (a1)+ dbf d1,.Vectors2 move.l #int.Interrupt1,$64 move.l #int.Interrupt2,$68 move.l #int.Interrupt3,$6c move.l #int.Interrupt4,$70 move.l #int.Interrupt5,$74 move.l #int.Interrupt6,$78 move.l #int.Interrupt7,$7c move.l #int.Alert,$80 movem.l (a7)+,d0-d1/a0-a1/a5 rts ;------------------------------------------------------------------------------ ; Interrupt1 ;------------------------------------------------------------------------------ int.Interrupt1 movem.l d0-a6,-(a7) lea interrupt.dev(pc),a5 lea cus_BASE,a6 move.w #$0007,cus_INTREQ(a6) movem.l (a7)+,d0-a6 rte ;------------------------------------------------------------------------------ ; Interrupt2 ;------------------------------------------------------------------------------ int.Interrupt2 movem.l d0-a6,-(a7) lea interrupt.dev(pc),a5 lea cus_BASE,a6 move.b cia_AICR,int_CIAAICR(a5) moveq #0,d0 move.b int_CIAAICR(a5),d0 bsr kbd.Interrupt2 keyboard.device moveq #0,d0 move.b int_CIAAICR(a5),d0 ;bsr dos_Interrupt2 dos.library move.w #$0008,cus_INTREQ(a6) movem.l (a7)+,d0-a6 rte ;------------------------------------------------------------------------------ ; Interrupt3 ;------------------------------------------------------------------------------ int.Interrupt3 movem.l d0-a6,-(a7) lea interrupt.dev(pc),a5 lea cus_BASE,a6 moveq #0,d0 move.w cus_INTREQR(a6),d0 bsr inl.Interrupt3 intuition.library move.w #$0070,cus_INTREQ(a6) movem.l (a7)+,d0-a6 rte ;------------------------------------------------------------------------------ ; Interrupt4 ;------------------------------------------------------------------------------ int.Interrupt4 movem.l d0-a6,-(a7) lea interrupt.dev(pc),a5 lea cus_BASE,a6 move.w #$0780,cus_INTREQ(a6) movem.l (a7)+,d0-a6 rte ;------------------------------------------------------------------------------ ; Interrupt5 ;------------------------------------------------------------------------------ int.Interrupt5 movem.l d0-a6,-(a7) lea interrupt.dev(pc),a5 lea cus_BASE,a6 move.w #$1800,cus_INTREQ(a6) movem.l (a7)+,d0-a6 rte ;------------------------------------------------------------------------------ ; Interrupt6 ;------------------------------------------------------------------------------ int.Interrupt6 movem.l d0-a6,-(a7) lea interrupt.dev(pc),a5 lea cus_BASE,a6 move.b cia_BICR,int_CIABICR(a5) move.w #$2000,cus_INTREQ(a6) movem.l (a7)+,d0-a6 rte ;------------------------------------------------------------------------------ ; Interrupt7 ;------------------------------------------------------------------------------ int.Interrupt7 movem.l d0-a6,-(a7) movem.l (a7)+,d0-a6 rte ;------------------------------------------------------------------------------ ; Error ;------------------------------------------------------------------------------ int.Error move.l #int_er_ErrorInt,d0 jmp int.Alert ;------------------------------------------------------------------------------ ; Alert ;------------------------------------------------------------------------------ int.Alert movem.l d0-a6,-(a7) lea $bfe001,a0 .Loop move.w #$000,$dff180 move.w #$f00,$dff180 btst #6,(a0) bne.s .Loop movem.l (a7)+,d0-a6 rte ******************************************************************************* * DataArea ******************************************************************************* DC.W -1 ENDM