.TITLE VW / / / FIRST PRINTING, FEBRUARY 1974 / / THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO / CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED / AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPON- / SIBILITY FOR ANY ERRORS THAT MAY APPEAR IN THIS / DOCUMENT. / / THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FUR- / NISHED TO THE PURCHASER UNDER A LICENSE FOR USE ON / A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH / INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR / USE IN SUCH SYSTEM, EXCEPT AS MAY OTHERWISE BE PRO- / VIDED IN WRITING BY DIGITAL. / / DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY / FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIP- / MENT THAT IS NOT SUPPLIED BY DIGITAL. / / COPYRIGHT (C) 1974, BY DIGITAL EQUIPMENT CORPORATION / / .EJECT / / EDIT #04 7/16/73 S. ROOT / UPDATE COPYRIGHT / / PROGRAM CODE UNKNOWN / / COPYRIGHT 1972, DIGITAL EQUIPMENT CORP., MAYNARD, MASS., 01754 / / WRITING TABLET HANDLER UNDER RSX-PLUS / / WILL HANDLE A MAXIMUM OF FOUR TABLETS / .DBREL / RSX EQUALITIES / R1=101 R2=102 R3=103 R4=104 POOL=240 PDVL=252 NADD=107 ALAD=325 DLAD=332 DQRQ=337 /GET REQUEST NODE UNLESS DEVICE ATTACH'ED / /TO A DIFFERENT USER IOCD=345 VJAX=342 PICK=120 /GET REQUEST NODE IRREGARDLESS DMTQ=361 .INH=705522 .ENB=705521 VWINFO=23 /CODE FOR DEVICE. NO INPUT,OUTPUT,DIRECT. / / EQUATES TO USE INITIALIZATION CODE FOR TABLES / ST0=VWA ST1=ST0+1 ST2=ST0+2 ST3=ST0+3 RQ0=VWA+4 RQ1=RQ0+1 RQ2=RQ0+2 RQ3=RQ0+3 POST0=VWA+10 POST1=POST0+1 POST2=POST0+2 POST3=POST0+3 X0=VWA+14 X1=X0+1 X2=X0+2 X3=X0+3 Y0=VWA+20 Y1=Y0+1 Y2=Y0+2 Y3=Y0+3 RWNOD=VWA+24 /OUTSTANDING REQUEST NODE ADDR / /FOR EACH OF FOUR UNITS. ZEROED WHEN REQ. / /COMPLETED, SO IT IS ALSO A SWITCH. RTRN0=VWA+30 /BUFFER INTO WHICH DATA TO BE RETURNED / /IDENTIFIES PARTITION ISSUING LAST GET TO / /UNIT. ALSO A FLAG, BEING ON (NON0) ONLY / /WHEN MOD FOR SAME UNIT NON0. MOD0=VWA+34 /MODE OF OPERATION FOR THIS TABLET / /CONT. DATA 100010, PEN DATA 100, / /NOT BEING USED 0. MOD1=MOD0+1 /CONT. DATA 100004, PEN 100, NONE 0 MOD2=MOD0+2 /CONT. 100002, PEN 100, NONE 0 MOD3=MOD0+3 /CONT. 100001, PEN 100, NONE 0 IOCDW=VWA+40 /POINTER TO I/O COUNTDOWN WD IN PARTITION / /BLOCK.WE KICK XTRA TIME (IF NOT EXEC MODE) / /TO INSURE WE GET CONTROL AT ABORT TIME / /TO TURN OFF THE SILLY SPARKS IF NECESSARY. ZOT=VWA+44 /FOUR TEMPORARIES ZOT1=ZOT+1 ZOT2=ZOT+2 ZOT3=ZOT+3 IOCADD=VWA+50 /HOLD PARTITION ADDR HERE. / / / INITIALIZATION CODE / VWA LAC IVW /ADDRESS OF EVENT VARIABLE TO FIND PAGE AND I70000 /ONLY THESE BITS CAN BE PAGE BITS CMA!IAC DAC NEGPAG /SAVE NEGATIVE OF PRESENT PAGE LOC. LAC* IPDVL /GET FIRST NODE ADDR VWL PAL /SAVE UNCORRECTED NODE ADDR TAD NEGPAG /CORRECT PAGE SO CAN INDEX PAX /FOR 2,X TYPE ADDRESSING LAC 2,X /GET DEVICE NAME SAD VWSXBT /IS IT A VW@@@@? JMP VWFND /GOT ONE! NOPE LAC 0,X /GET POINTER TO NEXT NODE SAD IPDVL /IF FIRST ONE, WE'RE DONE JMP SCNFIN /YES, SCAN FOR DEVICES FINISHED JMP VWL /STILL MORE NODES, BACK TO LOOP / I70000 70000 /LITERAL FOR INIT. CODE ONLY IPDVL PDVL /LIKEWISE IVW VWEV /ADDR OF OUR EVENT VARIABLE VWSXBT .SIXBT "VW@" /VW IN SIXBIT FOR UNIT FIND LOOP / / SAVE VW NODES IN TABLE ORDERED BY UNIT # / VWFND LAC 5,X /GET UNIT NUMBER TAD (VWTAB /TABLEADDRESS DAC UNITXR /A TEMPORARY PLA /BRING BACK CORRECT NODE ADDR. DAC* UNITXR /AND PLACE REAL ADDR IN TABLE LAC IVW /ADDR OF HANDLER EV. (USED FOR BOTH / /USER LEVEL TO OUR LEVEL, / /AND INTERRUPT LEVEL BACK TO OUR LEVEL. DAC 10,X /PUT INTO PHYSICAL TABLE, SO WE / /CAN BE CALLED WHEN A REQUEST HAPPENS JMP NOPE /REJOIN SCAN FOR NODES LOOP / / SCAN FOR PHYSICAL DEVICES DONE / SCNFIN LAC UNITXR /DID WE FIND ANY SNA /SKIP IF YES CAL (10 /EXIT IF WE DIDNT CAL VWCON /GOT SOME, CONNECT TO API LAC VWEV /DID IT HAPPENALL RIGHT? SPA!CLA /SKIP IF YES. CAL (10 /NO, JUST EXIT CLX /SET UP LOOP TO CLEAR INIT. CODE AAC WAIT-VWA-4 /FOR USE IN TABLES PAL DZM VWA,X /DZM LAST LOC NOT CLEARED AXS 1 /LOOP DONE JMP .-2 /NOPE JMS HOW /CLEAR TABLETS (MOD0-MOD3 ALL 0) / / WAIT HERE FOR ANY ACTION FROM USER OR INTERRUPT / WAIT CAL VWAIT /WAIT ON VWEV .INH /THIS MAY BE HISTORICAL ARTIFACT (DP....) LAC VWEV /MUST CHECK IF ABORT REQUEST AND (100000 /LEAVE ONLY I/O RUNDOWN BIT SZA /SKIP ON REGULAR REQUEST JMP ABORT /GO CLEAN UP AFTER USER .ENB /ALLOW INTERRUPTS AGAIN WAITR DZM VWEV /CLEAR EVENT VARIABLE DZM UNITXR /SCAN TABLE BY UNIT # FOR ACTION SKP /MISS ISZ AT LOOP TOP VWNXT ISZ UNITXR /MOVE TO NEXT UNIT NUMBER LAC UNITXR /TO PLACE IN INDEX REG TO ACCESS TABLES PAX /IN PLACE LAC VWTAB,X /GET NODE ADDR FOR THIS UNIT NUMBER SPA /SKIP ON REAL OR EMPTY NODE JMP LEAVE /MINUS END OF TABLE STOPPER / /CHECK ASSIGN INHIBIT FLAGS.... SNA /SKIP ON REAL NODE JMP VWNXT /ZERO SHOWS NO DEVICE, KEEP SCANNING DAC* (R1 /REAL NODE ADDR IN SYS REG. IN CASE WE / /HAVE TO DEQUE THE REQUEST NODE LAC POST0,X /ARE WE WAITING FOR INTERRUPT FOR THIS UNIT SZA /SKIP IF WE ARE NOT JMP BAKDWN /WE ARE, GO DO FURTHER CHECKING JMS* (DQRQ /DEQUE REQUEST NODE FOR A USER REQUEST / /SINCE THIS UNIT IS NOT PRESENTLY BUSY. JMP VWNXT /WASN'T ONE,!?!?!?, GO ON FOR NEXT NODE DAC ZOT /SAVE NODE ADDR, WHILE WE RELOAD UNITXR LAC UNITXR /SINCE DQRQ ZAPPED XR PAX LAC ZOT /AND HERE IS THE NODE ADDR FOR REQ. DAC RWNOD,X /INTO REQUEST TABLE BY UNIT # AAC 4 /USE AUTO-INCR TO GET NODE+5,NODE+7 DAC* (10 /10 ARBITRRY AAC -1 /MOVE POINTER BACK TO NODE+3 DAC ZOT3 /SUPER TEMPORARY FOR ADDRESSING LAC* ZOT3 /PARTITION BLCOK ADDR IF USER MODE (0 EXEC MODE) SZA /SKIP ON EXEC MODE AAC 7 /ADDR OF I/O COUNTDOWN WD. IN PARTITION BLK. DAC IOCADD /USE THIS LOC. TO HOLD IT FOR LATER LAC* 10 /GET CAL CODE FROM NODE+5 AND (777 /STRIP UNUSEFUL HIGH BITS SAD (24 /ATTACH CODE JMP ATTACH /YES SAD (25 /DETACH? JMP ATTACH /COMMON CODE WITH ATTACH SAD (36 /HINF JMP HINF SAD (777 /DISCONNECT AND EXIT REQUEST JMP ELEX /ALTERNATE PATH FROM CHECK OF / /REASSIGN INHIBIT FLAG SAD (30 /IS IT A GET JMP GET /YES SAD (34 /IS IT A CLOSE JMP CLOSE /YUP VWUNIM LAW -6 /ALL OTHERS ARE ILLEGAL JMP ERRREQ /ERROR, CODE IN AC TO CALLER FINREQ CLA!IAC /OK, GIVE BACK A 1 TO EVENT VARIABLE ERRREQ DAC GIVEEV /PLACE CODE IN ARG. FOR / /ROUTINE GIVE LAC UNITXR /GET BACK UNIT # TO XR PAX LAC RWNOD,X /REQUEST NODE FOR THIS UNIT DZM RWNOD,X /SHOW WE ARE DONE WITH NODE. JMS GIVE /ROUTINE TO DO IOCD, DECLARE EVENT / /AND RETURN THE NODE TO THE POOL JMP VWNXT /GO LOOK FOR MORE WORK / / BAKDWN SAD RQ0,X /IF SAME, NO INTERRUPT YET JMP VWNXT /SO PRESENT REQ.MUST WAIT FOR PREVIOUS / /TO FINISH. DZM POST0,X /IF DIFFERENT, THIS IS INTERRUPT LEVEL / /COMING BACK TO US TO FINISH REQ. LAC RTRN0,X /GET POINTER (-1) TO USER BUFFER DAC* (10 /USE AUTONCREMENT REG. LAC ST0,X /GET STATUS CLL!RAR /MUST GIVE BACK TO USER 0 IF PEN DATA / /+ IF CONT. DATA , - IF CONT DATA MULTIPLEX RTR /PUT MULTIPLEX BIT INTO LINK AND (20040 /MASK FOR PEN DATA, SINGLE POINT. AC NON0 FOR PEN SNA!CLA /SKIP PEN DATA, SETTING AC=0 FOR PEN DATA SZL!CLA!IAC /SET UP 1 FOR SKIP OF NON-MULTIPLEXED CMA!IAC /MAKE 0 0;MAKE +1 -1 FOR MULTIPLEX DATA DAC* 10 /TO USER LAC X0,X /GET X FOR USER. HARDWARE WORRYS ABOUT DAC* 10 /RIGHT-LEFT ALIGNMENT. LAC Y0,X /AND THE Y CO-ORDINATE. DAC* 10 JMP FINREQ /COMMON CODE TO FINISH REQ / / HANDLER INFORMATION FUNCTION / HINF PXA /UNIT NUMBER FROM XR ALSS 6 /PLACE IN FIELD IN AC. AC0=0, / /SO 0'S MOVE IN AT BOTTOM OF AC AAC VWINFO /ADD IN DEVICE INFO. JMP ERRREQ /USE MECHANISM OF ERROR EXIT / /TO RETURN AC CONTENTS TO CALLER / / ATTACH AND DETACH CODE / ATTACH PAL /AC IS 24 FOR ATTACH, 25 FOR DETACH LAC VWTAB,X /PDVL NODE ADDRESS FROM OUR TABLE DAC* (R1 /TO SYSTEM REGISTER LAC RWNOD,X /AND REQUEST NODE ADDRESS DAC* (R2 /TO ANOTHER SYSTEM REG. PLX /PUT 24 OR 25 TO XR FOR FANCINESS. XCT ATDT-24,X /MAKE CALL TO ATTACH OR DETACH JMP ERRREQ /IT DIDN'T WORK, PASS ON ERROR CODE JMP FINREQ /OK, SEND +1 TO USER ATDT JMS* (ALAD /SYSTEM ATTACH ROUTINE JMS* (DLAD /SYSTEM DETACH ROUTINE / / CLOSE MERELY TURNS OFF DEVICE (GET LEAVES IT ON.) / CLOSE DZM MOD0,X /CLEAR USAGE BITS DZM RTRN0,X /CLEAR PARTITION POINTER JMS VWIOCD /COUNT DOWN XTRA IOCOUNTDOWN JMS HOW /READJUST DEVICE IOT'S JMP FINREQ /THAT'S ALL / / THE GET ROUTINE / GET LAC* 10 /MOVE OVER NODE+6 LAC* 10 /GET NODE+7, CONTROL TABLE ADDR JMS REAL /CONVERT TO ABS. ADDR FROM RELOC.'ED / /RETAIN XR, CHECK IF ADDR OK. AAC -1 /SO WE CAN USE AUTO-INCR AGAIN DAC* (10 /TO GET CONTROL TABLE CONTENTS LAC IOCDW,X /FIND OUT IF SAME PARTITION AS BEFORE SAD IOCADD /IOCADD PART. OF THIS CAL. IOCDW,X OF LAST JMP GETA /SAME, DON'T DO ANYTHING JMS VWIOCD /COUNT DOWN PREVIOUS ONE LAC IOCADD /GET THIS ONE DAC IOCDW,X /SAVE FOR NEXT TIME AROUND SMA!SZA /DON'T COUNT UP UNLESS REAL ADDR. ISZ* IOCADD /BUMP I/O COUNTDOWN WORD IN PARTITION BLOCK GETA LAC* 10 /TYPE OF GET, 0 OR NON0 SNA!CLL /SET UP LINK, 0 FOR NON0 GET CML /AND 1 FOR ZERO TYPE GET LAC PB,X /20004 (UNIT 0) SZL!CLL!IAC /MAKE IT 4, OR 10002, DEPENDING SKP!RAR /MAKE IT 10002, RE-ESTABLISH 1 LINK AND (776 /MAKE IT 4. LINK REMAINS ZERO DAC POST0,X /SAY WE WANT AN INTERRUPT LAC MB,X /NOW CHECK MODE OF THIS DEVICE SNL!CLL /ZERO LINK(CONT. DATA) MUST BE SWAPPED SWHA!SKP /SWAP CONT. DATA, SKIP OVER OTHER OPERATION AND (776 /PEN DATA IS MASKED TO KEEP 100 SAD MOD0,X /HAS MODE CHANGED FOR THIS UNIT?? JMP GETC /NO! DON'T ISSUE ANY IOT'S DAC MOD0,X /YES, PLACE NEW MODE JMS HOW /GO ISSUE IOT'S TO REFLECT NEW / /DEMANDS ON THE DEVICE GETC LAC* 10 /GET BACK USER ADDR OF RETURN BUFFER JMS REAL /MAKE ABSOLUTE, CHECK VALIDITY AAC -1 /SO RETURN FROM INTERRUPT CAN USE AUTO. DAC RTRN0,X /PLACE FOR RETURN CODE. ALSO UNDONE / /OPERATION FLAG LAC POST0,X /FINALLY, TELL INTERRRUPT CODE DAC RQ0,X /IT CAN ACT ON INTERRUPTS SPECIFIED BY / /THE BITS OF THIS MASK JMP VWNXT /GO LOOK FOR MODE WORK TO DO / / THE 'REAL' ROUTINE CONVERTS RELOCATED ADDR.'S TO / ABSOLUTE ONES. THE XR IS RESTORED FROM UNITXR / ON EXIT. IF THE ADDR. IS INVALID FOR THE CALLER'S / PARTITION A -30 ERROR EXIT IS GIVEN. REAL 0 DAC* (R3 /ADDR IN AC AT CALL TIME TO SYS. REG. LAC RWNOD,X /GET ADDR OF REQUEST NODE DAC* (R2 /TO ANOTHER SYSTEM REG. LAC (2 /ASSUME 2 AS MAX. TABLE SIZE DAC* (R4 /ANOTHER SYSTEM REGISTER JMS* (VJAX /ROUTINE PUTS REAL ADDR IN R3 JMP REALRR /ERROR EXIT, CODE IN AC LAC UNITXR /UNIT # TO XR PAX LAC* (R3 /REAL ADDR JMP* REAL /OUT REALRR LAW -30 /ERROR CODE JMP ERRREQ /YELL LOUDLY AT CALLER / / VWIOCD DECREMENTS WORD POINTED TO BY IOCDW,X / BUT ONLY IF IOCDW,X IS >0. 0 WOULD BE UNUSED, OR EXEC MODE. / VWIOCD 0 LAC IOCDW,X /GET THE WORD DZM IOCDW,X /ZERO IT SINCE WE NO LONGER NEED IT DAC ZOT3 /INTO SUPER TEMPORARY FOR INDIRECTION SPA!SNA!CLA!CMA /SKIP IF REAL ADDR, SET UP -1 JMP* VWIOCD /BAD ADDR (USUALLY 0) JUST EXIT .INH /THINK WE NEED TO HOLD OUT INTERRUPTS TAD* ZOT3 /ADD -1 TO COUNT SMA /CAN'T COUNT BELOW 0 DAC* ZOT3 /REPLACE COUNT IF APPLICABLE .ENB /LET THE WORLD IN AGAIN JMP* VWIOCD /GET OUT / / THE GIVE ROUTINE DOES CLEANUP FOR THE NODE WHOSE / ADDRESS IS PROVIDED IN THE AC. THE QUANTITY IN GIVEEV / IS PLACED IN THE USER EV (IF ONE) AND AN EVENT / DECLARED (IF EV). THE SYSTEM I/O COUNTDOWN IS DONE FOR THE / NODE, AND THE NODE IS RETURNED TO THE SYSTEM POOL. / THIS ROUTINE CLOBBERS THE AC. / GIVEEV 0 /ARGUMENTS PLACED BY CALLER GIVE 0 DAC* (R2 /NODE ADDR IN AC TO SYS. REG. TAD NEGPAG /FOR N,X TYPE ADDRESSING PAX LAC 6,X /ADDR OF EV. IF ONE SNA /SKIP IF THERE REALLY IS ONE JMP GIVE1 /NOPE TAD NEGPAG /AGAIN PAGE CORRECTION FOR ADDRESSING PAX LAC GIVEEV /CONTENTS FOR EVENT VARIABLE DAC 0,X /THERE THEY GO. MUST USE INDEX OR AUTO. / /AS CALLER MAY BE BEYOND 32K!!!! LAC (401000 /DECLARE SIGNIFICANT EVENT ISA GIVE1 LAC (POOL /SAY PLACE NODE INTO POOL DAC* (R1 /IN SYSTEM REGISTER JMS* (IOCD /COUNT DOWN THIS REQUEST JMS* (NADD /AND GIVE BACK THIS NODE JMP* GIVE /GET OUT OF HERE / / / THE HOW ROUTINE ISSUES IOT'S TO REFLECT NEEDS OF TABLET / USERS. THERE ARE TWO IOT'S WHICH REQUIRE BITS IN THE AC. THERE / ARE FIVE DISTINCT USAGE CASES. / / CONT. PEN IOT#1 IOT#2 / USERS USERS 703264 703224 / / 0 0 0 240 CASE 1 / 0 >0 0 621 CASE 2 / 1 0 UNIT 1131 CASE 3 (UNIT BIT 10 FOR UNIT0) / 1 >0 10 1125 CASE 4 (UNIT BIT 4 FOR UNIT 1) / >1 ANY 10 1125 CASE 5 (UNIT BIT 2 FOR UNIT#2 / / THE PEN, DATA, OR NONE USAGE OF FOUR UNITS IS SHOWN BY / THE FOUR WORDS MOD0-MOD3. / / THE ROUTINE RESTORES XR ON EXIT. CLOBBERS AC AND LIMIT REG. / HOW 0 PXL /SAVE THE INDEX REG. CLX /THIS AND NEXT SET UP DEFAULT CODE AXR 240 /OF 240 IN XR FOR IOT#2 703224 LAC MOD0 /ADD UP FOUR STATUS WORDS TAD MOD1 TAD MOD2 TAD MOD3 /LOW 4 BITS OF AC CASE 3 FOR IOT#1 SZA!CLL /SKIP ON NO UNITS (CASE 1) AXR 361 /MAKES CODE OF 621 IN CASE WE ARE CASE 2 TAD (710300 /LINK ON IF ANY DATA. 400 BIT ON IF ANY PEN. / /THE 10 IN LEFT HALF CASE 4-5 IOT#1 SNL!SWHA!CML /SKIP ON CASE 345.BRING 400 BIT TO AC0 / /MAKE CASE 1&2 NOW HAVE LINK ON SKP!CLA /CASE 1,2 CLEAR AC SO NEXT STUFF IS A NO-OP AXR 304 /MAKE XR 1125 FOR CASES 4&5 AAC 300 /400 BIT(ALIAS AC0) 1 IF >1 DATA SMA!SNL!SWHA /CASE 1,2,4 SKIPS, BRING BACK ORIGINAL AC0 BIT SPA /CASE 3 SKIPS, KEEPING ORIGINAL LOW FOUR BITS SKP!SWHA /1,2,4,5 GET IOT#1 BITS FROM LEFT OF AC AXR 4 /CASE 3 ADJUST IOT#2 CODE TO 1131 AND (17 /LOW FOUR BITS OF AC TO IOT#1 703264 PXA /CODE FROM XR FOR IOT#2 703224 PLX /RESTORE INDEX REGISTER JMP* HOW /YECH! / / / IT IS POSSIBLE THAT THERE HAS BEEN A DISCONNECT / AND EXIT REQUEST THAT WE HAVE MISSED. WE MUST CHECK / THE ASSIGN INHIBIT FLAG OF THE LOWEST NUMBERED VW / IN THE SYSTEM. / LEAVE LAC (VWTAB-1 /SCAN TABLE FOR PDVL NODE DAC UNITXR /USE THIS AS POINTER LLL ISZ UNITXR /MOVE TO NEXT TABLE ENTRY LAC* UNITXR /GET NODE ADDR, IF ONE THERE SNA /SKIP IF REAL ONE JMP LLL /NOPE, GET NEXT ONE TAD NEGPAG /NEGATIVE OF HANDLER PAGE BITS PAX /FOR N,X TYPE ADDRESSING LAC 11,X /ASSIGN INHIBIT FLAG SMA /SKIP IF HAS BEEN SET JMP WAIT /HAS NOT BEEN SET, GO WIAT ELEX LAC (400004 /RAISE OURSELVES TO LEVEL 5 / /SO THE CLEAN UP JOB IS NOT / /DISTURBED ISA DZM RQ0 /REFUSE TO SERVICE INTERRUPTS DZM RQ1 DZM RQ2 DZM RQ3 LAC (242 /TURN OFF TABLET, SINCE WE ARE LEAVING 703224 LAW -24 /CODE TO SAY HANDLER ASSIGNED AAWAY / /IF WE HAVE NODES OUTSTANDING DAC GIVEEV /ARGUMENT FOR NODE GIVER-BACKER DZM UNITXR /KEEP XR FOR UNIT # IN HERE FOR CLEAN UP LOOP SKP /MISS ISZ AT LOOP TOP ELL ISZ UNITXR /MOVE ON TO NEXT UNIT LAC UNITXR /XR MAY HAVE BEEN WIPEN OUT, RESTORE IT PAX LAC VWTAB,X /GET AN ENTRY FROM UNIT TABLE SPA /SKIP IF REAL OR EMPTY JMP EXIT /MINUS, FINISHED TABLE, EXIT SNA /SKIP IF REAL ONE JMP ELL /EMPTY UNIT, GO BACK TO TOP AAC 6 /NODE+6 IS QUEUE TOP FOR REQ.'S DAC ZOT /HOLD THIS FOR LATER LOOP IAC /NODE+7 TO . . DAC* (10 /AUTO INCR. DZM* 10 /TO CLEAR TRIGGER AT NODE+10 DZM* 10 /AND ASSIGN INHIBIT AT NODE+11 JMS VWIOCD /COUNT DOWN XTRA I/OCOUNTDOWN FOR THIS PARTITION LAC RWNOD,X /SEE IF OUTSTANDING OPERATION SZA /SKIP IF NOT JMS GIVE /YES, GO CLEAN IT UP / /WE DQUEUE'D IT BUT OPERATION NEVEN COMPLETED EEL LAC ZOT /TOP OF LIST ADDR DAC* (R1 /DEQUEUE A NODE FROM THIS LIST JMS* (PICK /DIMILAR TO DQRQ JMP ELL /NO MORE IN THIS LIST, GO CHECK / /NEXT PHYSICAL DEVICE JMS GIVE /GIVE . HELLO, I/O COUNTDOWN ON THIS NODE??? JMP EEL /GO GT NEXT NODE FROM LIST / EXIT DBK /KICK BACK TO LEVEL 7 DISC ISZ VWCON /MAKE CONNECT CODE DISCONNECT CODE CAL VWCON /AND DISCONNECT API SLOT CAL (10 /GO BACK TO THE SYSTEM / / / ABORT CODE / / THIS CODE IS TO ABORT A SPECIFIC TASK IN A SPECIFIC / PARTITION, BUT LEAVE THE HANDLER OPERATING. / ABORT XOR VWEV /CLEAR OUT THE ABORT BIT DAC VWEV /REPLACEING EVENT VARIABLE .ENB /ENABLE INTERRRUPTS, WERE DISABLED BEFORE. CLX /SET UP TO LOOK FOR FIRST DEVICE. ALL AXR 1 /INTO WHOSE QUEUE THE ABORT REQ. WAS PLACED LAC VWTAB-1,X /IRREGARDLESS OF WHICH UNIT IT WAS / /REALLY FOR SNA /SKIP IF THE REAL NODE JMP ALL /GO CHECK NEXT (IF VW1 BUT NOT VW0) I GUESS / /THAT'S POSSIBLE. DAC* (R1 /SET UP TO DEQUEUE ABORT NODE JMS* (DQRQ /MONITOR DEQUEUEING ROUTINE JMP WAITR /DIDN'T FIND IT, BAD! CHECK OTHER UNITS DAC ZOT /SAVE ABORT NODE ADDR TAD NEGPAG /ADDRESSING, CHECK IF PAX /REALLY ABORT NODE LAC 5,X /BY ITS REQUEST TYPE SAD (17 /ABORT CODE 17 ON LUN 0! SKP /IT CHECKS OUT OK JMP VWUNIM /TREAT AS UNIMPLEMENTED CODE ERROR LAC 3,X /THESE ADDRESSIN GAMES TO TELL WHETHER TAD NEGPAG /EXITTING PARTITION HAS ONE OR MORE PAX /REQUESTS OUTSTANDING WITH US LAC 4,X /PARTITION BASE ADDR. WE KEEP RTRN0 CMA!IAC /AS A WHO HAS A REQUEST OUTSTANDING DAC ZOT1 /FLAG. -BASE TO ZOT1 FOR EASY TESTING LAC 5,X /AND NOW THE PARITITION SIZE CMA!IAC DAC ZOT2 /IT TOO MINUS FOR EASY TESTING LAW -4 /LOOP CONTROL WITH UNITXR DAC UNITXR ALL1 LAC UNITXR /PLACE XR=0 WHEN UNITXR=-4 AAC 4 /THIS STRANGE LOOP CONTROL SINCE GIVE PAX /WILL RUIN THE XR LAC RTRN0,X /DOES PRESENT PARTITION AGREE WITH THIS TAD ZOT1 /LOWER LIMIT CHECK SPA /SKIP IF STILL COULD BE JMP ALL2 /ADDRESS TOO SMALL, GO TO LOOP CONTROL TAD ZOT2 /UPPER LIMIT CHECK SMA /SKIP IF GOT ONE JMP ALL2 /ADDRESS TOO BIG DZM RQ0,X /REFUSE TO SERVICE HIS INTERRUPT DZM POST0,X /ZERO THIS SO ANOTHER USER CAN GET IN JMS VWIOCD /DO XTRA COUNTDOWN WE PLACED IN SO WE / /WOULD GET CALLED AT ABORT TIME DZM RTRN0,X /JUST IN CASE ANOTHER ABORT SOON LAC RWNOD,X /GET BACK REQUEST NODE STILL HANGING DZM RWNOD,X /NECESSARY DZM MOD0,X /THIS UNIT NO LONGER IN USE! SZA /SKIP IF NO NODE OUTSTANDING JMS GIVE /RETURN NODE, DO COUNTDWN. EV TO ABORT'D / /TASK IS ESSENTIALLY A NO-OP ALL2 ISZ UNITXR /FUNNY LOOP CONTROL SINCE XR GOT ZAPPED JMP ALL1 /NOT DONE YET JMS HOW /READJUST IOT'S FOR NEW CONDITION. LAC (VWTAB-1 /SCAN THRU PHYSICAL DEVICES TO RELEASE DAC UNITXR /THEIR NODES FROM THIS PARTITION DQLP ISZ UNITXR /THESE NODES ARE THOSE THAT DIDN'T GET TO LAC* UNITXR /US YET. GET DEVICE SPA /SKIP IF REAL ONE OR EMPTY SLOT JMP DQABO /THRU WITH TABLE, GO GIVE BACK ABT NODE SNA /SKIP IF REAL ONE JMP DQLP /EMPTY SLOT, KEEP TRYING DAC* (R1 /PDVL NODE ADDRESS LAC ZOT /THE ABORT NODE ADDRESS DAC* (R2 /ANOTHER SYSTEM REGISTER JMS* (DMTQ /THE ROUTINE TO EMPTY ALL REQUESTS / /CORRESPONDING TO THE PARTITION OF THE / /ABT. NODE FROM THIS QUEUE. JMP DQLP /GO TO NEXT PHYSICAL DEVICE DQABO CLA!IAC /+1 TO EVENT VARIABLE OF ABORTER DAC GIVEEV /ARGUMENT OF GIVE ROUTINE LAC ZOT /GIVE WANTS NODE ADDR IN AC JMS GIVE /GIVE BACK ABT NODE, EV, DECLARE EVENT. JMP WAITR /RESTART AT LOOP TOP. NECESSARY???? / / INTERRUPT LEVEL CODE / VWINT 0 /API ENTRY DBA /ENTER INDEX ADDRESSING MODE DAC SAVAC /SAVE INTERRUPTED AC 703272 /GET STATUS FROM WRITING TABLETS DAC STATS /AND SAVE THAT ALSO (TIME CHEAPER THA / /REISSUING IOT EACH TIME NEED IT. SMA!CLL!RAL /SKIP IF DATA READY. CLEAR LINK IN CASE. MOVE / /PEN DATA BIT TO AC0 FOR CHECKING SMA!CLA!CLL /DATA NOT READY!?!WE REALLY SHOULDN'T GET / /HERE. CLEAR ALL SO EXIT THRU VWBAD. IN MEAN / /TIME, CLEAR PEN DATA IF NECESSARY SPA!RTL /SKIP OVER CLEAR PEN DATA IF FLOP NOT SET. / /ALSO MOVE TABLET0 BIT TO LINK FOR TEST. 703221 /CLEAR PEN DATA FLAG SZL!RAL /SKIP IF NOT TABLET ZERO, MOVE NEXT BIT IN. JMP TAB0 /IT'S TABLET ZERO. GO DO IT SZL!RAL /SKIP IF NOT TABLET 1; MOVE IN NEXT BIT JMP TAB1 /GOT TABLET 1 SZL!RAL /SKIP IF NOT TABLET 2 JMP TAB2 /GOT TABLET 2 SNL!RAL /SKIP IF TABLET 3 VWBAD JMP VWOUT /ERROR. EITHER DATA READY NOT SET (SEE ABOVE) / /OR NONE OF TABLET FLAGS SET. TAB3 AND RQ3 /WHICH INTERRUPTS ARE WANTED? RQ3 CAN BE 0, / /100020, OR 40. 0 SAYS NONE WANTED. 40 / /SAYS ANY WANTED (DATA READY NOW IN THIS POSITION / /100020 SAYS ONLY PEN DATA. TO BE ACTIVATED / /PEN PEN DATA FLAG OR SINGLE POINT FLAG. SNA!CLA!IAC /SKIP IF WE GOT RIGHT ONE JMP VWOUT /WE DIDN'T, CLEAR DATA READY AND EXIT DZM RQ3 /HONOR NO MORE INTERRUPTS! DAC VWEV /SET ONE INTO EVENT VARIABLE 703232 /READ X POSITION DAC X3 /AGAIN HOLD THE X POSITION 703252 /GET THE Y POSITION DAC Y3 LAC STATS /HOLD STATUS BY UNIT # FOR CAL LEVEL DAC ST3 /LEAVE STATUS IN AC FOR VWCM JMP VWCM /JOIN REST FOR COMMON CLEAN UP TAB2 AND RQ2 /WHICH ONES ARE WANTED BY TABLET 2. / /BIT POSITIONS: 0,40010,20. SNA!CLA!IAC /GOT ONE? SET UP 1 FOR VWEV JMP VWOUT /NOPE, JUST LEAVE DZM RQ2 /HONOR NO MORE REQUESTS DAC VWEV /SET EVENT VARIABLE 703232 /X DAC X2 703252 /Y DAC Y2 LAC STATS DAC ST2 JMP VWCM TAB1 AND RQ1 /BITS: 0,20004,10. SNA!CLA!IAC JMP VWOUT DZM RQ1 DAC VWEV 703232 DAC X1 703252 DAC Y1 LAC STATS DAC ST1 JMP VWCM TAB0 AND RQ0 /BITS: 0,10002,4. SNA!CLA!IAC JMP VWOUT DZM RQ0 DAC VWEV 703232 DAC X0 703252 DAC Y0 LAC STATS DAC ST0 VWCM SWHA /SINGLE POINT MODE BIT FROM 400 TO AC0 SPA!CLA /IF SINGLE POINT, DON'T SKIP SO WE CAN 703264 /CLEAR ALL TABLETS LAC (401000 /DECLARE SIGNIFICANT EVENT ISA /TO WAKE HANDLER AT CAL LEVEL VWOUT 703241 /CLEAR DATA READY FLAG LAC SAVAC /BRING BACK INTERRUPTED AC DBR /DEBREAK AND RESTORE JMP* VWINT /OUT!! / / / INTERRUPT LEVEL TEMPORARY LOCATIONS / SAVAC 0 /HOLD INTRRUPTED AC STATS 0 /HOLD TABLET STATUS WHILE / /PLAYING WITH BITS IN AC / / / CORE LOCATIONS ETC. / NEGPAG 0 /NEGATIVE PAGE BITS FOR HANDLER LOCATION VWEV 0 /EVENT VARIABLE FOR HANDLER UNITXR 0 /POINTER USUALLY FOR SCAN THRU VWTAB VWTAB 0 /FOUR UNIT TABLE FOR PDVL'S FOR FOUR 0 /UNITS ORDERED BY UNIT # 0 0 -1 /END OF TABLE STOPPER MB 10100 /DATA MODE SETTING FOR MOD0, SWAPPED 4100 /DATA MODE SETTING FOR MOD1, SWAPPED 2100 /DATA MODE SETTING FOR MOD2,SWAPPED 1100 /DATA MODE SETTING FOR MOD2, SWAPPED PB 20004 /BITS FOR MAKING POST, RQ WORDS FOR UNIT0 40010 /AND FOR UNIT 1 100020 /UNIT 2 200040 /UNIT 3 / / CAL'S FOR VARIOUS THINGS VWAIT 20 /WAIT FOR HANDLER EVENT VARIABLE. VWEV / VWCON 11 /CONNECT VW TO API VWEV /EVENT VARIABLE 33 /API LINE -40 VWINT /INTERRUPT ROUTINE ADDR .END VWA /ZXCV