/F/B/( 9 AM OCT 31 69 /1 / /DISK TRANSFER VECTOR: /WHICH IS THE SAME FOR EVERY LEVEL OF DISK ACCESS /PLACE POINTER TO FLAGN IN APROPRIATE PRIORITY LEVEL /PRI1,PRI2, OR PRI3 / /FLAGN, 0 /7777 IF REQUEST UN SERVICED / /4000 IF WAITING FOR COMPLETION / 1 WHEN COMPLETE / 3 IF COMPLETE AND ERROR / 0 IF INACTIVE / WORDCOUNT / CURRENT ADDRESS / EXTENDED BITS FOR DISK / FUNCTION (DMAR OR DMAW) / DISK MEMORY ADDRESS / /FLAGN MUST BE TESTED FOR COMPLETION WITH INTERRUPTS ENABLED / /FOREGROUND DISC SERVICE SHOULD BE THROUGH A PROGRAM /SIMILAR TO XTEST2. THERE IS NO NEED TO AIT2 OR /WAIT3, SINCE FOREGROULD PROGRAM HAS PRIORITY ON THE /DISK CHANNEL, AND WILL BUMP OTHER ACCESSES /IN PROGRESS, BUT RESTORE THEM WHEN FOREGROUND /REQUEST IS COMPLETED. /FOREGROUND SHOULD USE "PRI1" AS ITS POINTER /TO THE DISK TRANSFER VECTOR / /FOREGROUND PROGRAM SHOULD OPERATE WITH INTERRUPTS ENABLED / /INTERRUPT SERVICE FOR FOREGROUND IS VIA JMS I FOREINT /AND FOREGROUND PROGRAM SHOULD RETURN VIA JMP I ENTRY /FOR CONTINING INTERRUPT SERVICE FOR BACKGROUND ROUTINE / /CONVENTIONS: ALL SUBROUTINES ENTERED AND EXITED WITH ACC /CLEAR,UNLESS OTHERWISE SPECIFIED. /2 FIELD 0 /DEFINITIONS DCMA=6601 DMAR=6603 DMAW=6605 DFSC=6622 DFSE=6621 USERIF=CDF CIF 10 USERDF=CDF 10 GETAC=TAD TEMP+1 LOADAC=DCA TEMP+1 SKIP=ISZ TEMP+2 SETTRAP=6274 CLRTRAP=6204 DETRAP=6264 SKPTRAP=6254 DOTEA=1010 /2ND SURFACE,FIELD 1 (DISK MONITOR HEAD) DOTDMA=0 /1ST BLOCK OF DISK NEXT=DISKTEST USERCORE=710 /END OF FIRST SURFACE,FIELD 1 /3 *0 HLT JMP I INTP *16 0 /USED BY XSORTJ 0 /USED BY DTEST & RETURN K7750, 7750 K7751, 7751 SAVEL, 0 SAVEAC, 0 PRILST, PRI1, ZERO PRI2, ZERO PRI3, DFLAG3 ZERO, 0 FOREFLAG,0 /INHIBIT BACKGROUND EXECUTION WHEN SET START, 7600 /OR OTHER USER FIELD ADDRESS FLAGS, 0 /USER INTERRUPT FLAGS /BIT NUMBER 7 8 9 10 11 / DISK HSP HSR TTO TTI ULNK, TEMP, 0 /LINK AT TRAP TIME UACC, 0 /ACCUMULATOR AT TRAP TIME UPC, 0 /LOCATION OF TRAP UMB, 0 /INSTRUCTION CAUSING TRAP UIO, 0 /INTERRUPT STATUS FOR BACKGROUND UKBD, 0 /KEYBOARD BUFFER UHSR, 0 /HSR BUFFER DFLAG3, 0 /FLAG 0 /WC 0 /CA 0 /EA 0 /FUNCTION 0 /DMA /4 /PSEUDO-INSTRUCTIONS / USERDISK, 1010 /2ND SURFACE,FIELD 1 K4, 4 K10, 10 K20, 20 K100, 100 FOREINT, DEFAULT INTEXIT=JMP I . XINTEXIT INTP, INTSERV IOEXIT=JMP I . XIOEXIT EXIT=JMP I . XEXIT EXEC=JMS I . TRAPGO REENTER=JMP I . XREENTER DTEST=JMS I . XDTEST /5 *200 /LIST OF LEGAL TRAP INSTRUCTIONS / ITRAPS, RSF;I6011 PSF;I6021 KSF;I6031 TSF;I6041 DFSC;I6622 RRB RFC;I6016 RRB;I6012 RFC;I6014 PLS;I6026 PCF;I6022 PPC;I6024 KRB;I6036 KCC;I6032 KRS;I6034 TLS;I6046 TCF;I6042 TPC;I6044 DFSE;I6621 DEAL;I6615 DEAC;I6616 DCMA;I6601 DMAR;I6603 DMAW;I6605 ION;I6001 IOF;I6002 OSR;I7404 LAS;I7604 HLT;DOTIN 0 /TERMINATOR /6 /TRAP SERVICE FOR HSP / I6024, STL I6026, GETAC PPC SNL CLA I6022, TAD K10 IOEXIT /HSR TRAP SERVICE/7 / I6016, RFC I6012, TAD TEMP+6 LOADAC TAD K4 IOEXIT I6014, RFC EXIT / /8 /FAST READER SERVICE ROUTINE / RTEST, RSF JMP PTEST RRB DCA TEMP+6 TAD K4 JMP I .+6 / /FAST PUNCH INTERRUPT SERVICE / PTEST, PSF INTEXIT /NO RECOGNIZABLE INTERRUPTS **BKPT FOR DEBUGGING** PCF TAD K10 JMP I .+1 USERINT /9 /KEYBOARD,PRINTER, AND SWITCHES TRAP SERVICE / I6021, TAD K10 SKP I6031, IAC CLA CLL SKP I6041, STL RTL SKP I6011, TAD K4 SKP I6622, TAD K20 AND FLAGS SZA CLA SKIP EXIT I6036, TAD TEMP+5 I6032, LOADAC IAC IOEXIT I6034, TAD TEMP+5 JMP I7604+1 I6044, STL I6046, GETAC TPC SNL CLA /SKIP IF 6044 I6042, STL RTL CLA /2 IOEXIT /10 /SWITCH REGISTER EMULATION / I7404, GETAC I7604, OSR LOADAC EXIT / /11 /USER ION INSTRUCTION / I6001, TAD TEMP+2 DCA TEMP+4 EXIT / I6621, STA CLL RTL /-3 TAD I PRI3 JMP I6622+2 INTSERV, DCA SAVEAC RAL DCA SAVEL JMS I FOREINT PAGE /ARGUMENT VECTOR FOR USER DISK HANDLING / /DISK TRANSFER VECTOR FOR MONITOR HEAD / HEAD, 0 -200 7577 1010 DMAR 1 / /12 /ITRAP SERVICE ROUTINE / UTMP, TRAPGO, 0 /ENTER WITH IOF! STA TAD 0 DCA TEMP+2 TAD SAVEAC DCA TEMP+1 TAD SAVEL DCA TEMP USERDF TAD I TEMP+2 CDF CIF DCA TEMP+3 CLRTRAP DETRAP JMP I TRAPGO /13 WAIT2=JMS . XWAIT2, 0 TAD I PRI2 SPA CLA JMP .-2 JMP I XWAIT2 / WAIT3=JMS . XWAIT3, 0 /THIS MUST PRESERVE LINK! TAD I PRI3 SPA CLA JMP .-2 JMP I XWAIT3 / /14 / / JMS XTEST2 /EXECUTIVE LEVEL DISK TEST AND SETUP / ADDRESS OF ARGUMENTS LIST / PNTR, XTEST2, 0 TAD I XTEST2 /PICKUP ADDRESS OF DTV DCA PRI2 ISZ XTEST2 TL1, STA DCA I PRI2 /SET REQUEST IOF DTEST ION WAIT2 /UNTIL COMPLETION STA CLL RTL /-3 TAD I PRI2 SZA CLA /SKIP IF DISK ERRED JMP I XTEST2 JMP TL1 /TRY AGAIN / /15 /SERVICE A TRAP / DEFAULT,0 CLL CLA SKPTRAP JMP I KTESTP EXEC TRAPSERV, RIB SNA CLA /EXIT IF BACKGROUND LOCKED-OUT INTEXIT ION XSORTJ, TAD KTRAP DCA 16 SORTLO, ISZ 16 TAD I 16 SNA EXIT CIA TAD TEMP+3 SZA CLA JMP SORTLOOP TAD I 16 DCA PNTR CLA CLL JMP I PNTR KTESTP, KTEST KTRAP, ITRAPS-2 /16 /LOAD THE MONITOR HEAD INTO USER FIELD AND START /EXECUTION OF IT / DOTIN, TAD FOREFLAG RAL CLL DCA FOREFLAG SZL INTEXIT ION WAIT3 TAD K1010 DCA USERDISK JMS XTEST2 HEAD ENTER, IOF KCC /START MONITOR HEAD TLS DCA FOREFLAG /ENABLE BACKGROULD PROGRAM DCA FLAGS /CLEAR USER'S FLAGS DCA TEMP+4 /AND HIS INTERRUPT TAD START DCA TEMP+2 REENTER K1010, 1010 /DISK 1, FIELD 1 /17 /SERVICE DISK TRAPS / I6615, GETAC AND K3700 TAD USERDISK DCA DFLAG3+3 GETAC DCA DEALT EXIT DEALT, 0 /CONTENTS OF DEAL K3700, 3700 /DISK TRACK EXTENSION MASK I6616, JMS XWAIT3 TAD DFLAG3+1 /GET WORDCOUNT CIA CLL /AND ADD IT TAD DFLAG3+5 /TO DMA SZL CLA /SKIP IF NO DMA OVERFLOW TAD K100 TAD DEALT LOADAC EXIT /18 /RETURN FROM AN INTERRUPT / XINTEX, CLA CLL TAD SAVEL RAR CLL TAD SAVEAC RMF ION JMP I 0 /19 / /HONOR A BACKGROUND "INTERRUPT" / TAD K20 USERINT, DCA TRAPGO TAD FLAGS CMA AND TRAPGO TAD FLAGS DCA FLAGS RIB TAD TEMP+4 SNA CLA INTEXIT EXEC EXIT / /20 KDMAR, DMAR I6605, STL I6603, JMS I PWAIT3 CLA RTL TAD KDMAR DCA DFLAG3+4 GETAC DCA DFLAG3+5 USERDF TAD I K7750 DCA DFLAG3+1 TAD I K7751 DCA DFLAG3+2 LOADAC / CDF STA I6601, DCA DFLAG3 IOF DTEST TAD K20 / /21 /REENTER USER PROGRAM AFTER TRAP SERVICE / XIOEXIT, IOF CMA CLL AND FLAGS DCA FLAGS / /22 /IF "IOF" OR NO FLAGS, RETURN TO USER'S PROGRAM /IF "ION" AND FLAGS, TEST INSTRUCTION+1, AND IF IT /IS "JMP I 0" (RETURNING FROM AN INTERRUPT SERVICE) THEN /DO NOT CHANGE RETURN ADDRESS IN 10000, AND RE-ENTER /USER'S INTERRUPT SERVICE ROUTINE AT 10001. / XEXIT, CLA CLL IOF TAD TEMP+4 /FETCH INTERRUPT STATUS SNA CLA /SKP IF ION JMP RET TAD FLAGS SNA CLA /SKIP IF ANY FLAGS SET JMP RET ISZ TEMP+2 L2, USERDF TAD I TEMP+2 /FETCH FOLLOWING INSTRUCTION TAD M5400 SNA CLA /SKIP IF NOT JMP I 0 JMP .+3 TAD TEMP+2 /SETUP FOR USER INTERRUPT SERVICE DCA I ZERO CDF DCA TEMP+2 I6002, DCA TEMP+4 /IOF RET, ISZ TEMP+2 TAD TEMP RAR CLL TAD TEMP+1 XREENT, SETTRAP USERIF ION JMP I TEMP+2 M5400, -5400 /23 / /BEGIN INTERRUPT SERVICE ROUTINES / DTMP, 0 KTEST, KSF JMP TTEST KRB TAD M202 SNA /SKIP IF NOT CTRL/B JMP I KDOTIN TAD K202 DCA TEMP+5 /DEPOSIT IN INPUT BUFFER STL RAL JMP USERINT TTEST, TSF JMP DISKTEST TCF STL RTL JMP USERINT M202, -202 K202, 202 KDOTIN, DOTIN /24 / /DISK INTERRUPT SERVICE ROUTINE / DISKTEST, DFSC /SKIP IF DISK COMPLETE JMP RTEST DFSE /SKIP IF NO ERROR IAC STL RAL DCA I DTMP1 DCMA /CLEAR THE DISK CONTROLLER TAD DTMP1 TAD KDFLAG3 SNA CLA /SKIP IF NOT FLAG3 JMP I L10 DTEST INTEXIT L10, USERINT-1 XDTEST, 0 /SEE COMMENTS ON DISK TRANSFER VECTOR (DTV) A DCMA /CLEAR THE DISK CONTROLLER TAD KPRILST /SET POINTER TO TOP-OF-PRIORITY DCA DTMP DL1, ISZ DTMP TAD I DTMP /DTMP POINTS TO PRIORITY LIST ENTRY SNA /SKIP IF NOT END-OF-LIST JMP I XDTEST DCA DTMP1 /DTMP1 POINTS TO FLAGWORD OF DTV TAD I DTMP1 /PICKUP FLAGWORD SMA CLA /SKIP IF REQUESTING OR WAITING JMP DL1 JMP DSTART /SETUP A TRANSFER KDFLAG3, -DFLAG3 KPRILST, PRILST-1 DTMP1, 0 PWAIT3, XWAIT3 / /SACRED LOCATIONS *.&7600+150 / 0 /DWC 0 /DCA 0 /MTWC 0 /MTCA 0 /DTWC 0 /DTCA / /25 DSTART, STL CLA RAR /4000 DCA I DTMP1 /SET FLAG TO AITING STATE TAD DTMP1 DCA 17 TAD I 17 DCA I K7750 TAD I 17 DCA I K7751 TAD I 17 DEAL CLA CLL TAD I 17 DCA .+2 TAD I 17 0 /THIS INSTRUCTION MUST CLEAR ACC! JMP I XDTEST $