! %TITLE 'SSDRIVER interrupt routines' MODULE ss_inter (IDENT = 'V01.0' ! File: SSINTER.BLI ) = BEGIN !++ ! ! FACILITY: VAX/VMS Executive, I/O Drivers ! ! ABSTRACT: ! ! ENVIRONMENT: Runs at any access mode - AST reentrant. ! ! AUTHOR: James A. Gray ! ! CREATED: 27 August 1982 ! ! MODIFIED BY: ! ! V01.0 James A. Gray, 27 August 1982 ! Original. ! !-- %SBTTL 'Declarations' !+ ! SWITCHES: !- SWITCHES ADDRESSING_MODE (EXTERNAL = GENERAL, NONEXTERNAL = WORD_RELATIVE); !+ ! LINKAGE/GLOBAL REGISTERS: !- ! None. !+ ! LINKAGES: !- LINKAGE ss_devint_linkage = INTERRUPT : NOPRESERVE (0, 1, 2, 3, 4, 5) NOTUSED (6, 7, 8, 9, 10, 11), ss_create_fork_linkage = JSB (REGISTER = 4, REGISTER = 5) : NOPRESERVE (0, 1, 2, 3, 4, 5) NOTUSED (6, 7, 8, 9, 10, 11), ss_error_interrupt_linkage = JSB (REGISTER = 4, REGISTER = 5) : PRESERVE (0, 1) NOTUSED (6, 7, 8, 9, 10, 11); !+ ! TABLE OF CONTENTS: !- FORWARD ROUTINE ss_create_fork : ! ss_create_fork_linkage, ss_devint : ! ss_devint_linkage NOVALUE; !+ ! INCLUDE FILES: !- LIBRARY 'SYS$LIBRARY:LIB'; ! System symbol definitions LIBRARY 'DIR_UTILITY:LIBEXT'; !+ ! MACROS: !- ! None !+ ! FIELDS: !- ! None !+ ! STRUCTURES: !- ! None !+ ! PSECTS: !- PSECT PLIT = $$$115_driver (NOPIC, READ, WRITE, LOCAL, NOSHARE, EXECUTE, CONCATENATE, ALIGN (2)), CODE = $$$115_driver (NOPIC, READ, WRITE, LOCAL, NOSHARE, EXECUTE, CONCATENATE, ALIGN (2)), OWN = $$$115_driver (NOPIC, READ, WRITE, LOCAL, NOSHARE, EXECUTE, CONCATENATE, ALIGN (2)), GLOBAL = $$$115_driver (NOPIC, READ, WRITE, LOCAL, NOSHARE, EXECUTE, CONCATENATE, ALIGN (2)); !+ ! EQUATED SYMBOLS: !- ! None !+ ! OWN (R/O) STORAGE: !- ! None. !+ ! OWN (R/W) STORAGE: !- ! None. !+ ! BUILTIN DECLARATIONS: !- BUILTIN TESTBITSC; !+ ! EXTERNAL ROUTINES: !- EXTERNAL ROUTINE ss_error_interrupt : ss_error_interrupt_linkage; !+ ! EXTERNAL REFERENCES: !- ! None. %SBTTL 'SS_CREATE_FORK - ' ROUTINE ss_create_fork ( ! w_csr : REF VECTOR [, WORD]VOLATILE, ! r_ucb : REF BLOCK [, BYTE] ! ) : ss_create_fork_linkage = !++ ! ! FUNCTIONAL DESCRIPTION: ! ! text ! ! CALLING SEQUENCE: ! ! ret_status.wlc.v = user_routine (parameter.rl.r) ! ! FORMAL PARAMETERS: ! ! parameter Longword input parameter ! ! IMPLICIT INPUTS: ! ! None ! ! IMPLICIT OUTPUTS: ! ! None ! ! COMPLETION STATUS: ! ! SS$_NORMAL Normal successful completion ! ! SIDE EFFECTS: ! ! None ! !-- BEGIN _fork (fbk = r_ucb [0, 0, 0, 0], fr4 = w_csr [0]); ss_error_interrupt (w_csr [0], r_ucb [0, 0, 0, 0]) END; ! End of routine SS_CREATE_FORK %SBTTL 'SS_DEVINT - ' GLOBAL ROUTINE ss_devint ( ! r_idb : REF BLOCK [, BYTE], ! l_saved_r0, ! l_saved_r1, ! l_saved_r2, ! l_saved_r3, ! l_saved_r4, ! l_saved_r5, ! l_saved_pc, ! l_saved_psl ! ) : ss_devint_linkage NOVALUE = !++ ! ! FUNCTIONAL DESCRIPTION: ! ! text ! ! CALLING SEQUENCE: ! ! ret_status.wlc.v = user_routine (parameter.rl.r) ! ! FORMAL PARAMETERS: ! ! parameter Longword input parameter ! ! IMPLICIT INPUTS: ! ! None ! ! IMPLICIT OUTPUTS: ! ! None ! ! COMPLETION STATUS: ! ! SS$_NORMAL Normal successful completion ! ! SIDE EFFECTS: ! ! None ! !-- BEGIN BIND w_csr = ! .r_idb [idb$l_csr] : REF VECTOR [, WORD] VOLATILE, r_ucb = ! .r_idb [idb$l_owner] : REF BLOCK [, BYTE]; GLOBAL REGISTER R0 = 0, R1 = 1, R2 = 2, R3 = 3, R4 = 4, R5 = 5; IF TESTBITSC (r_ucb [ucb$v_int]) THEN ss_create_fork (w_csr [0], r_ucb [0, 0, 0, 0]); !+ ! Restore the local registers before returning from this interrupt. !- R0 = .l_saved_r0; R1 = .l_saved_r1; R2 = .l_saved_r2; R3 = .l_saved_r3; R4 = .l_saved_r4; R5 = .l_saved_r5; END; ! End of routine SS_DEVINT END ! End of module SS_INTER ELUDOM