Generate_Interrupt IDNT ; title Rev 17-FEB-1994 SECTION Generate_Interrupt,4,C ; Declare a noncommon code ; section. Align to Longwords. INCLUDE 135Bug_Equates.Include ; Get the 135Bug "Sytem Calls". ************************************************************************* * This section defines program-specific macros: * * * * SOFTWAIT: Software delay timer for short waits * * * ************************************************************************* SoftWait MACRO ; Software timer loop. LOCAL WaitMore ; Define a local symbol. MOVE.L \1,D4 ; Load delay time \1 into D4. WaitMore SUBI.L #1,D4 ; Decrement loop counter. BNE WaitMore ; Test for end of delay. ENDM ; Called with an argument ; of $1000 and with cashe off causes a delay of about 4 ; mill seconds, with cashe on the delay is 2.4 mill sec. Start MOVE.L #1,D0 ; Get the Cashe running MOVEC D0,CACR MOVE.L #$F92C,D0 ; Enable the VSB Interface MOVE.L #$FFFA0000,A1 ; (as the Controller) MOVE.W D0,(A1) Loop PEA.L Hello_0_Loc ; push message address on stack. JSR ChrStrgOut ; and send it out. PEA.L Hello_1_Loc ; push message address on stack. JSR ChrStrgOut ; and send it out. PEA.L Hello_2_Loc ; push message address on stack. JSR ChrStrgOut ; and send it out. PEA.L Hello_Q_Loc ; push message address on stack. JSR ChrStrgOut ; and send it out. SOFTWAIT #$1000 ; Wait about 3 mill seconds. PEA.L CharSpace ; Push space and carage return message JSR ChrStrgOut ; on the stack and send it out. SUBQ.L #2,SP ; Allocate stack space for result SYSCALL .inchr ; Get a character MOVE.B (SP)+,D0 ; Put the character in D0 PEA.L Char_is_Loc ; push message address on stack JSR ChrStrgOut ; and send it out MOVE.L D0,-(A7) ; Put keypress on stack JSR SendCharP1 ; and send it out PEA.L CharSpace ; Push space and carage return message JSR ChrStrgOut ; on the stack and send it out. CMPI.B #'1',D0 ; is the character a "1"? Beq NMIs ; if yes, go to NMI Generator CMPI.B #'2',D0 ; is the character a "2"? Beq IIOF2s ; if yes, go to IIOF2 Generator CMPI.B #'Q',D0 ; is the character a "Q"? Beq Quit ; if yes, go to Quit routine CMPI.B #'q',D0 ; is the character a "q"? Beq Quit ; if yes, go to Quit routine PEA.L BadCharLoc ; push message address on stack. JSR ChrStrgOut ; and send it out. PEA.L CharSpace ; Push space and carage return message JSR ChrStrgOut ; on the stack and send it out. JMP Loop ; Go back! NMIs MOVEA.L #DSP_A1_ICR,A1 ; Put DSP #A1 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on A1 MOVEA.L #DSP_A2_ICR,A1 ; Put DSP #A2 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on A2 MOVEA.L #DSP_A3_ICR,A1 ; Put DSP #A3 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on A3 MOVEA.L #DSP_A4_ICR,A1 ; Put DSP #A4 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on A4 MOVEA.L #DSP_B1_ICR,A1 ; Put DSP #B1 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on B1 MOVEA.L #DSP_B2_ICR,A1 ; Put DSP #B2 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on B2 MOVEA.L #DSP_B3_ICR,A1 ; Put DSP #B3 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on B3 MOVEA.L #DSP_B4_ICR,A1 ; Put DSP #B4 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on B4 MOVEA.L #DSP_C1_ICR,A1 ; Put DSP #C1 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on C1 MOVEA.L #DSP_C2_ICR,A1 ; Put DSP #C2 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on C2 MOVEA.L #DSP_C3_ICR,A1 ; Put DSP #C3 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on C3 MOVEA.L #DSP_C4_ICR,A1 ; Put DSP #C4 Interrupt Control Reg ; Address in A1 JSR Generate_NMI ; Make NMI on C4 JMP LOOP ; Go Back IIOF2s MOVEA.L #DSP_A1_ICR,A1 ; Put DSP #A1 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on A1 MOVEA.L #DSP_A2_ICR,A1 ; Put DSP #A2 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on A2 MOVEA.L #DSP_A3_ICR,A1 ; Put DSP #A3 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on A3 MOVEA.L #DSP_A4_ICR,A1 ; Put DSP #A4 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on A4 MOVEA.L #DSP_B1_ICR,A1 ; Put DSP #B1 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on B1 MOVEA.L #DSP_B2_ICR,A1 ; Put DSP #B2 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on B2 MOVEA.L #DSP_B3_ICR,A1 ; Put DSP #B3 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on B3 MOVEA.L #DSP_B4_ICR,A1 ; Put DSP #B4 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on B4 MOVEA.L #DSP_C1_ICR,A1 ; Put DSP #C1 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on C1 MOVEA.L #DSP_C2_ICR,A1 ; Put DSP #C2 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on C2 MOVEA.L #DSP_C3_ICR,A1 ; Put DSP #C3 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on C3 MOVEA.L #DSP_C4_ICR,A1 ; Put DSP #C4 Interrupt Control Reg ; Address in A1 JSR Generate_IIOF2 ; Make IIOF2 on C4 JMP LOOP ; Go Back Generate_NMI MOVE.B #Gen_NMI,D1 ; Set D1 to generate NMI MOVE.L D1,(A1) ; and program the DSP's ICR PEA.L NMI_Service ; push message address on stack. JSR ChrStrgOut ; and send it out. PEA.L CharSpace ; Push space and carage return message JSR ChrStrgOut ; on the stack and send it out. MOVE.B #Default_ICR1,D1 ; Set D1 to default ICR value MOVE.L D1,(A1) ; and program the DSP's ICR RTS Generate_IIOF2 MOVE.B #Gen_IIOF2,D1 ; Set D1 to generate IIOF2 MOVE.L D1,(A1) ; and program the DSP's ICR PEA.L IIOF2_Service ; push message address on stack. JSR ChrStrgOut ; and send it out. PEA.L CharSpace ; Push space and carage return message JSR ChrStrgOut ; on the stack and send it out. MOVE.B #Default_ICR,D1 ; Set D1 to default ICR value MOVE.L D1,(A1) ; and program the DSP's ICR RTS Quit PEA.L Goodbye_Loc ; push message address on stack. JSR ChrStrgOut ; and send it out. PEA.L CharSpace ; Push space and carage return message JSR ChrStrgOut ; on the stack and send it out. SYSCALL .return Hello_0_Loc DC.B 50,' Hello from the Make-an-Interrupt Program ' Hello_1_Loc DC.B 50,' 1: generate a NMI on ALL 12 DSPS ' Hello_2_Loc DC.B 50,' 2: generate an IIOF2 on ALL 12 DSPS ' Hello_Q_Loc DC.B 50,' Q: exit this program (return to 135BUG) ' Char_is_Loc DC.B 50,' You have pressed the following key: ' BadCharLoc DC.B 50,' The key you pressed is illegal. ' NMI_Service DC.B 50,' NMI Service subroutine executed ' IIOF2_Service DC.B 50,' IIOF2 Service subroutine executed ' Goodbye_Loc DC.B 50,' Goodbye from the Make-an-Interrupt Program ' CharSpace DC.B 4,' ' Low4Long DC.L $0000000F ; Low order 4 bits set, Mask for Sync. DSP_A1_ICR EQU $00A10810 DSP_A2_ICR EQU $00A10814 DSP_A3_ICR EQU $00A10818 DSP_A4_ICR EQU $00A1081C DSP_B1_ICR EQU $00B10810 DSP_B2_ICR EQU $00B10814 DSP_B3_ICR EQU $00B10818 DSP_B4_ICR EQU $00B1081C DSP_C1_ICR EQU $00C10810 DSP_C2_ICR EQU $00C10814 DSP_C3_ICR EQU $00C10818 DSP_C4_ICR EQU $00C1081C Gen_IIOF2 EQU $14 Gen_NMI EQU $22 Default_ICR EQU $04 Default_ICR1 EQU $20 XREF ChrStrgOut,ChrWrtOut,BinASCII,SendCharP1 XDEF Low4Long END