\toctexentry {9}{\RTLnumber {}}{Preface}{\RTLnumber {xi}}
\toctexentry {0}{\RTLnumber {1}}{Device Handlers}{\RTLnumber {1\foliodelim 1}}
\toctexentry {1}{\RTLnumber {1.1}}{How to Plan a Device Handler}{\RTLnumber {1\foliodelim 1}}
\toctexentry {2}{\RTLnumber {1.1.1}}{Get to Know Your Device}{\RTLnumber {1\foliodelim 2}}
\toctexentry {2}{\RTLnumber {1.1.2}}{Study the Structure of a Standard Device Handler}{\RTLnumber {1\foliodelim 2}}
\toctexentry {2}{\RTLnumber {1.1.3}}{Study the Skeleton Device Handler}{\RTLnumber {1\foliodelim 2}}
\toctexentry {2}{\RTLnumber {1.1.4}}{Think About Using the Special Features}{\RTLnumber {1\foliodelim 2}}
\toctexentry {2}{\RTLnumber {1.1.5}}{Study the Sample Handlers}{\RTLnumber {1\foliodelim 2}}
\toctexentry {2}{\RTLnumber {1.1.6}}{Prepare a Flowchart of the Device Handler}{\RTLnumber {1\foliodelim 2}}
\toctexentry {2}{\RTLnumber {1.1.7}}{Write the Code}{\RTLnumber {1\foliodelim 3}}
\toctexentry {2}{\RTLnumber {1.1.8}}{Install, Test, and Debug the Handler}{\RTLnumber {1\foliodelim 3}}
\toctexentry {1}{\RTLnumber {1.2}}{Structure of a Device Handler}{\RTLnumber {1\foliodelim 3}}
\toctexentry {2}{\RTLnumber {1.2.1}}{Preamble Section}{\RTLnumber {1\foliodelim 4}}
\toctexentry {3}{\RTLnumber {1.2.1.1}}{.DRDEF Macro}{\RTLnumber {1\foliodelim 5}}
\toctexentry {4}{\RTLnumber {1.2.1.1.1}}{System Conditionals}{\RTLnumber {1\foliodelim 7}}
\toctexentry {4}{\RTLnumber {1.2.1.1.2}}{Queue Element Offsets}{\RTLnumber {1\foliodelim 7}}
\toctexentry {4}{\RTLnumber {1.2.1.1.3}}{Symbol Definitions}{\RTLnumber {1\foliodelim 9}}
\toctexentry {4}{\RTLnumber {1.2.1.1.4}}{Device-Identifier Byte}{\RTLnumber {1\foliodelim 9}}
\toctexentry {4}{\RTLnumber {1.2.1.1.5}}{Device Status Word}{\RTLnumber {1\foliodelim 10}}
\toctexentry {4}{\RTLnumber {1.2.1.1.6}}{Device Size Word}{\RTLnumber {1\foliodelim 11}}
\toctexentry {3}{\RTLnumber {1.2.1.2}}{.DREST Macro}{\RTLnumber {1\foliodelim 11}}
\toctexentry {3}{\RTLnumber {1.2.1.3}}{.DRINS Macro}{\RTLnumber {1\foliodelim 12}}
\toctexentry {3}{\RTLnumber {1.2.1.4}}{.DRPTR Macro}{\RTLnumber {1\foliodelim 13}}
\toctexentry {3}{\RTLnumber {1.2.1.5}}{.DRSPF Macro}{\RTLnumber {1\foliodelim 13}}
\toctexentry {3}{\RTLnumber {1.2.1.6}}{.DRTAB Macro}{\RTLnumber {1\foliodelim 13}}
\toctexentry {3}{\RTLnumber {1.2.1.7}}{.DRUSE Macro}{\RTLnumber {1\foliodelim 14}}
\toctexentry {3}{\RTLnumber {1.2.1.8}}{.DRSET Macro}{\RTLnumber {1\foliodelim 14}}
\toctexentry {3}{\RTLnumber {1.2.1.9}}{Information in File Image Block 0}{\RTLnumber {1\foliodelim 14}}
\toctexentry {2}{\RTLnumber {1.2.2}}{Header Section}{\RTLnumber {1\foliodelim 16}}
\toctexentry {3}{\RTLnumber {1.2.2.1}}{.DRBEG Macro}{\RTLnumber {1\foliodelim 17}}
\toctexentry {3}{\RTLnumber {1.2.2.2}}{Multivector Handlers: .DRVTB Macro}{\RTLnumber {1\foliodelim 17}}
\toctexentry {3}{\RTLnumber {1.2.2.3}}{Information in File Image Block 1}{\RTLnumber {1\foliodelim 19}}
\toctexentry {2}{\RTLnumber {1.2.3}}{I/O Initiation Section}{\RTLnumber {1\foliodelim 19}}
\toctexentry {3}{\RTLnumber {1.2.3.1}}{Guidelines for Starting the Data Transfer}{\RTLnumber {1\foliodelim 20}}
\toctexentry {3}{\RTLnumber {1.2.3.2}}{Transferring the Data}{\RTLnumber {1\foliodelim 21}}
\toctexentry {4}{\RTLnumber {1.2.3.2.1}}{Byte Transfer from the User Buffer to the Device}{\RTLnumber {1\foliodelim 21}}
\toctexentry {4}{\RTLnumber {1.2.3.2.2}}{Byte Transfer from the Device to the User Buffer}{\RTLnumber {1\foliodelim 22}}
\toctexentry {4}{\RTLnumber {1.2.3.2.3}}{Word Transfer from the Device to the User Buffer}{\RTLnumber {1\foliodelim 23}}
\toctexentry {4}{\RTLnumber {1.2.3.2.4}}{Non-DMA Transfers}{\RTLnumber {1\foliodelim 24}}
\toctexentry {4}{\RTLnumber {1.2.3.2.5}}{DMA Transfers}{\RTLnumber {1\foliodelim 24}}
\toctexentry {2}{\RTLnumber {1.2.4}}{Interrupt Service Section}{\RTLnumber {1\foliodelim 24}}
\toctexentry {3}{\RTLnumber {1.2.4.1}}{.DRAST Macro}{\RTLnumber {1\foliodelim 25}}
\toctexentry {3}{\RTLnumber {1.2.4.2}}{Abort Entry Point}{\RTLnumber {1\foliodelim 25}}
\toctexentry {3}{\RTLnumber {1.2.4.3}}{Lowering the Priority to Device Priority}{\RTLnumber {1\foliodelim 26}}
\toctexentry {3}{\RTLnumber {1.2.4.4}}{Guidelines for Coding the Interrupt Service Section}{\RTLnumber {1\foliodelim 26}}
\toctexentry {2}{\RTLnumber {1.2.5}}{I/O Completion Section}{\RTLnumber {1\foliodelim 28}}
\toctexentry {2}{\RTLnumber {1.2.6}}{Handler Termination Section}{\RTLnumber {1\foliodelim 29}}
\toctexentry {3}{\RTLnumber {1.2.6.1}}{.DREND Macro}{\RTLnumber {1\foliodelim 29}}
\toctexentry {2}{\RTLnumber {1.2.7}}{Pseudodevices}{\RTLnumber {1\foliodelim 29}}
\toctexentry {2}{\RTLnumber {1.2.8}}{Handler Data Structures Related to Block 0}{\RTLnumber {1\foliodelim 30}}
\toctexentry {3}{\RTLnumber {1.2.8.1}}{Handler Service Routine Environment}{\RTLnumber {1\foliodelim 30}}
\toctexentry {3}{\RTLnumber {1.2.8.2}}{Special Function Code Support Table (H.SPFx) }{\RTLnumber {1\foliodelim 34}}
\toctexentry {3}{\RTLnumber {1.2.8.3}}{Bad-Block Replacement Geometry Table (H.REPL) }{\RTLnumber {1\foliodelim 35}}
\toctexentry {3}{\RTLnumber {1.2.8.4}}{Bad-Block Replacement Table (HB.BAD)}{\RTLnumber {1\foliodelim 36}}
\toctexentry {3}{\RTLnumber {1.2.8.5}}{Second Handler Status Word (H.STS2)}{\RTLnumber {1\foliodelim 36}}
\toctexentry {3}{\RTLnumber {1.2.8.6}}{Handler SYSGEN Options Byte (H.GEN) }{\RTLnumber {1\foliodelim 37}}
\toctexentry {3}{\RTLnumber {1.2.8.7}}{Handler Internal Data Table and Descriptor Structure (H.TYPE, H.DATA, and H.DLEN) }{\RTLnumber {1\foliodelim 37}}
\toctexentry {3}{\RTLnumber {1.2.8.8}}{UMR Support and Extended Device-Unit Handlers (H.64UM)}{\RTLnumber {1\foliodelim 38}}
\toctexentry {2}{\RTLnumber {1.2.9}}{Handler Data Structures Related to Block 1}{\RTLnumber {1\foliodelim 39}}
\toctexentry {3}{\RTLnumber {1.2.9.1}}{Handler Flag Word (H1.FLG)}{\RTLnumber {1\foliodelim 39}}
\toctexentry {3}{\RTLnumber {1.2.9.2}}{Handler Service Routine Entry Point Word (H1.NOP)}{\RTLnumber {1\foliodelim 39}}
\toctexentry {3}{\RTLnumber {1.2.9.3}}{Second Handler Flag Word (H1.FG2)}{\RTLnumber {1\foliodelim 40}}
\toctexentry {2}{\RTLnumber {1.2.10}}{Skeleton Outline of a Device Handler}{\RTLnumber {1\foliodelim 41}}
\toctexentry {1}{\RTLnumber {1.3}}{Abort Processing}{\RTLnumber {1\foliodelim 43}}
\toctexentry {2}{\RTLnumber {1.3.1}}{Handler Status Word Bits ABTIO\$ and HNDLR\$}{\RTLnumber {1\foliodelim 43}}
\toctexentry {2}{\RTLnumber {1.3.2}}{Types of Aborts and Action Taken by RMON}{\RTLnumber {1\foliodelim 44}}
\toctexentry {1}{\RTLnumber {1.4}}{Handlers That Queue Internally}{\RTLnumber {1\foliodelim 47}}
\toctexentry {2}{\RTLnumber {1.4.1}}{Implementing Internal Queuing}{\RTLnumber {1\foliodelim 47}}
\toctexentry {2}{\RTLnumber {1.4.2}}{Interrupt Service for Handlers That Queue Internally}{\RTLnumber {1\foliodelim 47}}
\toctexentry {2}{\RTLnumber {1.4.3}}{Abort Procedures for Handlers That Queue Internally}{\RTLnumber {1\foliodelim 48}}
\toctexentry {1}{\RTLnumber {1.5}}{Set Options}{\RTLnumber {1\foliodelim 49}}
\toctexentry {2}{\RTLnumber {1.5.1}}{How the SET Command Executes}{\RTLnumber {1\foliodelim 50}}
\toctexentry {2}{\RTLnumber {1.5.2}}{SET Table Format}{\RTLnumber {1\foliodelim 50}}
\toctexentry {2}{\RTLnumber {1.5.3}}{.DRSET Macro}{\RTLnumber {1\foliodelim 51}}
\toctexentry {2}{\RTLnumber {1.5.4}}{Routines to Modify the Handler}{\RTLnumber {1\foliodelim 52}}
\toctexentry {2}{\RTLnumber {1.5.5}}{Examples of SET Options}{\RTLnumber {1\foliodelim 53}}
\toctexentry {1}{\RTLnumber {1.6}}{Device I/O Timeout}{\RTLnumber {1\foliodelim 55}}
\toctexentry {2}{\RTLnumber {1.6.1}}{.TIMIO Macro}{\RTLnumber {1\foliodelim 55}}
\toctexentry {2}{\RTLnumber {1.6.2}}{.CTIMIO Macro}{\RTLnumber {1\foliodelim 57}}
\toctexentry {2}{\RTLnumber {1.6.3}}{Device Timeout Applications}{\RTLnumber {1\foliodelim 58}}
\toctexentry {3}{\RTLnumber {1.6.3.1}}{Multiterminal Service}{\RTLnumber {1\foliodelim 58}}
\toctexentry {3}{\RTLnumber {1.6.3.2}}{Typical Timer Procedure for a Disk Handler}{\RTLnumber {1\foliodelim 59}}
\toctexentry {3}{\RTLnumber {1.6.3.3}}{Printer Handler Example}{\RTLnumber {1\foliodelim 60}}
\toctexentry {1}{\RTLnumber {1.7}}{Error Logging}{\RTLnumber {1\foliodelim 61}}
\toctexentry {2}{\RTLnumber {1.7.1}}{When and How to Call the Error Logger}{\RTLnumber {1\foliodelim 62}}
\toctexentry {3}{\RTLnumber {1.7.1.1}}{To Log a Successful Transfer}{\RTLnumber {1\foliodelim 62}}
\toctexentry {3}{\RTLnumber {1.7.1.2}}{To Log a Hard Error}{\RTLnumber {1\foliodelim 63}}
\toctexentry {3}{\RTLnumber {1.7.1.3}}{To Log a Soft Error}{\RTLnumber {1\foliodelim 63}}
\toctexentry {3}{\RTLnumber {1.7.1.4}}{Differences Between Hard and Soft Errors}{\RTLnumber {1\foliodelim 64}}
\toctexentry {3}{\RTLnumber {1.7.1.5}}{To Call the Error Logger}{\RTLnumber {1\foliodelim 64}}
\toctexentry {2}{\RTLnumber {1.7.2}}{Error Logging Examples}{\RTLnumber {1\foliodelim 64}}
\toctexentry {2}{\RTLnumber {1.7.3}}{How to Add a Device to the Reporting Program}{\RTLnumber {1\foliodelim 64}}
\toctexentry {1}{\RTLnumber {1.8}}{Special Functions}{\RTLnumber {1\foliodelim 65}}
\toctexentry {2}{\RTLnumber {1.8.1}}{.SPFUN Programmed Request}{\RTLnumber {1\foliodelim 66}}
\toctexentry {2}{\RTLnumber {1.8.2}}{How to Support Special Functions in a Device Handler}{\RTLnumber {1\foliodelim 67}}
\toctexentry {2}{\RTLnumber {1.8.3}}{Variable Size Volumes}{\RTLnumber {1\foliodelim 67}}
\toctexentry {2}{\RTLnumber {1.8.4}}{Bad-Block Replacement}{\RTLnumber {1\foliodelim 68}}
\toctexentry {1}{\RTLnumber {1.9}}{Devices with Special Directories}{\RTLnumber {1\foliodelim 68}}
\toctexentry {1}{\RTLnumber {1.10}}{Device Handlers in Mapped Systems}{\RTLnumber {1\foliodelim 69}}
\toctexentry {2}{\RTLnumber {1.10.1}}{Naming Conventions and the System Conditional}{\RTLnumber {1\foliodelim 69}}
\toctexentry {2}{\RTLnumber {1.10.2}}{Mapped Monitor Environment}{\RTLnumber {1\foliodelim 70}}
\toctexentry {2}{\RTLnumber {1.10.3}}{Address Translation}{\RTLnumber {1\foliodelim 71}}
\toctexentry {3}{\RTLnumber {1.10.3.1}}{\$MPMEM Routine}{\RTLnumber {1\foliodelim 71}}
\toctexentry {3}{\RTLnumber {1.10.3.2}}{\$MPPHY Routine}{\RTLnumber {1\foliodelim 71}}
\toctexentry {2}{\RTLnumber {1.10.4}}{Character Devices: \$GETBYT and \$PUTBYT Routines}{\RTLnumber {1\foliodelim 72}}
\toctexentry {3}{\RTLnumber {1.10.4.1}}{\$GETBYT Routine}{\RTLnumber {1\foliodelim 72}}
\toctexentry {3}{\RTLnumber {1.10.4.2}}{\$PUTBYT Routine}{\RTLnumber {1\foliodelim 73}}
\toctexentry {2}{\RTLnumber {1.10.5}}{Any Device: \$PUTWRD Routine}{\RTLnumber {1\foliodelim 74}}
\toctexentry {2}{\RTLnumber {1.10.6}}{Mapping Directly to the User Buffer}{\RTLnumber {1\foliodelim 75}}
\toctexentry {2}{\RTLnumber {1.10.7}}{Extended Memory Subroutines}{\RTLnumber {1\foliodelim 78}}
\toctexentry {3}{\RTLnumber {1.10.7.1}}{Converting a Virtual Address into a Physical Address (\$JBREL)}{\RTLnumber {1\foliodelim 79}}
\toctexentry {3}{\RTLnumber {1.10.7.2}}{Moving Data Within Extended Memory (\$BLKMV)}{\RTLnumber {1\foliodelim 81}}
\toctexentry {3}{\RTLnumber {1.10.7.3}}{Obtaining Free Memory (XALLOC)}{\RTLnumber {1\foliodelim 81}}
\toctexentry {3}{\RTLnumber {1.10.7.4}}{Returning Memory to the Free List (XDEALC)}{\RTLnumber {1\foliodelim 81}}
\toctexentry {3}{\RTLnumber {1.10.7.5}}{Finding a Global Region (FINDGR)}{\RTLnumber {1\foliodelim 82}}
\toctexentry {3}{\RTLnumber {1.10.7.6}}{Converting a Virtual Address into a Physical Address (\$USRPH)}{\RTLnumber {1\foliodelim 82}}
\toctexentry {1}{\RTLnumber {1.11}}{System Device Handlers and Bootstraps}{\RTLnumber {1\foliodelim 83}}
\toctexentry {2}{\RTLnumber {1.11.1}}{Monitor Files}{\RTLnumber {1\foliodelim 83}}
\toctexentry {2}{\RTLnumber {1.11.2}}{Creating a System Device Handler}{\RTLnumber {1\foliodelim 83}}
\toctexentry {3}{\RTLnumber {1.11.2.1}}{.DRBOT Macro}{\RTLnumber {1\foliodelim 83}}
\toctexentry {3}{\RTLnumber {1.11.2.2}}{Primary Driver}{\RTLnumber {1\foliodelim 84}}
\toctexentry {3}{\RTLnumber {1.11.2.3}}{Entry Routine}{\RTLnumber {1\foliodelim 84}}
\toctexentry {3}{\RTLnumber {1.11.2.4}}{Software Bootstrap}{\RTLnumber {1\foliodelim 85}}
\toctexentry {3}{\RTLnumber {1.11.2.5}}{Bootstrap Read Routine}{\RTLnumber {1\foliodelim 85}}
\toctexentry {3}{\RTLnumber {1.11.2.6}}{Bootstrap Error Routine}{\RTLnumber {1\foliodelim 86}}
\toctexentry {2}{\RTLnumber {1.11.3}}{DUP and the Bootstrap Process}{\RTLnumber {1\foliodelim 86}}
\toctexentry {3}{\RTLnumber {1.11.3.1}}{BOOT ddn:filnam}{\RTLnumber {1\foliodelim 86}}
\toctexentry {3}{\RTLnumber {1.11.3.2}}{COPY{\slash }BOOT xxn:filnam ddm:}{\RTLnumber {1\foliodelim 87}}
\toctexentry {3}{\RTLnumber {1.11.3.3}}{BOOT ddn:}{\RTLnumber {1\foliodelim 88}}
\toctexentry {1}{\RTLnumber {1.12}}{Including Support for Multiterminal Handler Hooks}{\RTLnumber {1\foliodelim 89}}
\toctexentry {2}{\RTLnumber {1.12.1}}{Installation Support}{\RTLnumber {1\foliodelim 91}}
\toctexentry {2}{\RTLnumber {1.12.2}}{SET Command Support}{\RTLnumber {1\foliodelim 91}}
\toctexentry {2}{\RTLnumber {1.12.3}}{Establish Hooks Connection with Monitor}{\RTLnumber {1\foliodelim 92}}
\toctexentry {2}{\RTLnumber {1.12.4}}{Handler Hook Interrupt Processing}{\RTLnumber {1\foliodelim 95}}
\toctexentry {2}{\RTLnumber {1.12.5}}{Remove Handler Hooks Connection to Monitor at UNLOAD{\slash }RELEASE}{\RTLnumber {1\foliodelim 96}}
\toctexentry {1}{\RTLnumber {1.13}}{Including Extended Device-Unit Support}{\RTLnumber {1\foliodelim 97}}
\toctexentry {2}{\RTLnumber {1.13.1}}{.DRDEF and .DRBEG Macros}{\RTLnumber {1\foliodelim 97}}
\toctexentry {2}{\RTLnumber {1.13.2}}{LOAD{\slash }FETCH and UNLOAD{\slash }RELEASE Routines}{\RTLnumber {1\foliodelim 98}}
\toctexentry {3}{\RTLnumber {1.13.2.1}}{LOAD{\slash }FETCH Routine}{\RTLnumber {1\foliodelim 98}}
\toctexentry {3}{\RTLnumber {1.13.2.2}}{UNLOAD{\slash }RELEASE Routine}{\RTLnumber {1\foliodelim 98}}
\toctexentry {3}{\RTLnumber {1.13.2.3}}{Example LOAD{\slash }FETCH and UNLOAD{\slash }RELEASE Routines}{\RTLnumber {1\foliodelim 98}}
\toctexentry {2}{\RTLnumber {1.13.3}}{Q.FUNC Definition}{\RTLnumber {1\foliodelim 101}}
\toctexentry {2}{\RTLnumber {1.13.4}}{Programmed Requests of Extended-Unit Handlers}{\RTLnumber {1\foliodelim 102}}
\toctexentry {1}{\RTLnumber {1.14}}{How to Assemble, Link, and Install a Device Handler}{\RTLnumber {1\foliodelim 102}}
\toctexentry {2}{\RTLnumber {1.14.1}}{Assembling a Device Handler}{\RTLnumber {1\foliodelim 102}}
\toctexentry {2}{\RTLnumber {1.14.2}}{Linking a Device Handler}{\RTLnumber {1\foliodelim 103}}
\toctexentry {2}{\RTLnumber {1.14.3}}{Installing a Device Handler}{\RTLnumber {1\foliodelim 103}}
\toctexentry {3}{\RTLnumber {1.14.3.1}}{Using the Bootstrap to Install Handlers Automatically}{\RTLnumber {1\foliodelim 103}}
\toctexentry {3}{\RTLnumber {1.14.3.2}}{Using the INSTALL Command to Install Handlers Manually}{\RTLnumber {1\foliodelim 104}}
\toctexentry {3}{\RTLnumber {1.14.3.3}}{Using the DEV Macro to Aid Automatic Installation}{\RTLnumber {1\foliodelim 106}}
\toctexentry {3}{\RTLnumber {1.14.3.4}}{Installing Devices Whose Hardware Is Present}{\RTLnumber {1\foliodelim 107}}
\toctexentry {3}{\RTLnumber {1.14.3.5}}{Writing an Installation Verification Routine}{\RTLnumber {1\foliodelim 108}}
\toctexentry {3}{\RTLnumber {1.14.3.6}}{Overriding the Hardware Restriction}{\RTLnumber {1\foliodelim 110}}
\toctexentry {1}{\RTLnumber {1.15}}{How to Test and Debug a Device Handler}{\RTLnumber {1\foliodelim 110}}
\toctexentry {2}{\RTLnumber {1.15.1}}{Using DBG--11 to Test a Handler}{\RTLnumber {1\foliodelim 111}}
\toctexentry {2}{\RTLnumber {1.15.2}}{Using ODT to Test a Handler}{\RTLnumber {1\foliodelim 111}}
\toctexentry {2}{\RTLnumber {1.15.3}}{Using ODT in a Mapped Environment}{\RTLnumber {1\foliodelim 112}}
\toctexentry {1}{\RTLnumber {1.16}}{Contents of .SYS Image of a Device Handler}{\RTLnumber {1\foliodelim 113}}
\toctexentry {15}{\RTLnumber {A}}{DX, DL, and XL Device Handlers}{\RTLnumber {A\foliodelim 1}}
