File CLOCK.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/ CLOCK HANDLER FOR RTS/8 (V2B-B)		8/1/77
	XLIST	1	/COPYRIGHT ALSO IS IN PARAM.PA
/
/
/
/
/
/
/
/
/	COPYRIGHT  (C)  1974,1975,1976 BY
/
/	DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/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 RESPONSIBILITY FOR ANY
/ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED 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 PROVIDED IN  WRITING
/BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR THE USE OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT
/THAT IS NOT SUPPLIED BY DIGITAL.
/
/
/
/
/
/
/
/
/
/
	XLIST	0	/LIST TASK CODE

	VERS=	1


/THE RTS-8 CLOCK HANDLER ACCEPTS MESSAGES FROM THE USER AND
/INSERTS ENTRIES INTO A CLOCK QUEUE.  AS ENTRIES IN THE
/CLOCK QUEUE BECOME DUE, THEY ARE REMOVED FROM THE QUEUE
/AND THE REQUEST IS DECODED AND EXECUTED.
/
/THE CLOCK HANDLER MUST RUN IN FIELD 0 AS IT IS TREATED
/SPECIALLY BY THE INTERRUPT CODE IN RTS-8


/
/EDIT HISTORY:
/
/01-AUG-77: (LHN)
/	1)  80 COLUMN LPT: CREF LISTING.
/	2)  CHANGED PROGRAM ORIGIN CALCULATIONS TO USE
/	    SYMBOLIC DEFINITIONS IN THE PARAMETER FILE.




	TASK=	CLOCK
	CUR=	0		/MUST BE IN FIELD 0
	INIWT=	0

/ / / / THE FORMAT OF CLOCK MESSAGES ARE: / / /WORD 1 USED AS EVENT FLAG FOR MESSAGE /WORDS 2-3 USED BY RTS-8 FOR QUEUE THREADS /WORD 4 COMMAND WORD - BITS ARE: / BITS 0-2 FUNCTION: / 0 - SET EVENT FLAG AFTER TIMED INTERVAL / 1 - RUN SPECIFIED TASK AFTER INTERVAL / 2 - DERAIL SPECIFIED TASK AFTER INTERVAL / 3 - RUN SPECIFIED TASK PERIODICALLY / AFTER INTERVAL / 5,6, OR 7 - CANCEL ALL TIMED REQUESTS FOR / SPECIFIED TASK / / BITS 5-11 SPECIFY TASK - 0 MEANS TASK IS SENDING TASK / /WORD 5 HIGH ORDER OF TIME (IN TICKS) /WORD 6 LOW ORDER OF TIME /WORDS 7-8(OPT) DERAIL ADDRESS OR RESCHEDULE PERIOD / / / FORMAT OF CLOCK QUEUE ENTRY: / /WORD 1 POINTER TO NEXT ENTRY (0 IF LAST) /WORD 2 AND 3 NUMBER OF TICKS FROM PREVIOUS ENTRY UNTIL / THIS ONE - NUMBER IS NEGATIVE, LOW ORDER IN / WORD 2 /WORD 4 COMMAND WORD (FROM MESSAGE) /WORD 5 AND 6 WORDS 7 AND 8 OF MESSAGE (ADDRESS OF MESSAGE / IF FUNCTION = 0) / / / /THIS CLOCK HANDLER WILL RUN ON MANY HARDWARE CONFIGURATIONS /THE PARAMETER "CLKTYP" CONTROLS THE CONFIGURATION /LEGAL VALUES OF CLKTYP ARE: / 0 DK8EA LINE CLOCK, DK8EC CRYSTAL CLOCK / 1 KW12A PROGRAMMABLE CLOCK / 2 PDP 8/A CLOCK (INCLUDED ON OPTION BOARD 1 / OF PDP8A) / 3 DK8EP PROGRAMMABLE CLOCK / 4,6,10,ETC USER-DEFINED CLOCK TYPES
/ /VARIOUS CLOCK IOT DEFINITIONS: IFZERO CLKTYP < CLSK= 6133 CLEI= 6131 CLDI= 6132 > IFNZRO CLKTYP&1 < /KW12 AND DK8EP IOT'S CLZE= 6130 /DK8EP ONLY! CLSK= 6131 CLLR= 6132 /CALLED CLDE ON DK8EP CLAB= 6133 CLEN= 6134 CLSA= 6135 > IFZERO CLKTYP-2 < CLEN= 6135 /PDP 8/A CLOCK INTERRUPT ENABLE CLCL= 6136 /PDP 8/A CLOCK FLAG CLEAR CLSK= 6137 /PDP 8/A CLOCK SKIP > IFNZRO CLKTYP&1 <HERTZ= 1750> /FORCE DK8EP, KW12 /TO 1 KHZ TICKS= HERTZ%SHERTZ IFNZRO TICKS^SHERTZ-HERTZ <RATERR,_ERROR_> /HERTZ MUST BE A MULTIPLE OF SHERTZ IFZERO SHERTZ-300&4000 <TODERR,_ERROR_> /SHERTZ TOO LARGE - /SHERTZ MUST BE LESS THAN 192(10) FIELD 0 *10 /AUTO XR - NO-ONE ELSE SHOULD USE! CLKXR, 0 /MARK XR USED ON BITMAP
/THIS IS THE CLOCK QUEUE CREATOR - IT IS INVOKED WHEN THE /CODE AT "CLKLP" NOTICES THAT THE INPUT MESSAGE QUEUE IS /NON-EMPTY. IFNDEF SWAPPER < /ORIGIN JUST ABOVE ENDEXC= NTASKS+1^7+MSGTBL+2 /SWAPPER, IF ANY. > IFDEF SWAPPER < /ELSE JUST ABOVE ENDEXC= PARTNS^4+PARTBL+577&7600 /EXEC TABLES > *ENDEXC /START LOADING IN THE FIRST PAGE PAGE /AFTER TABLES OR SWAPPER. GETMSG, CAL RECEIV /GET MESSAGE ADDRESS MADDR, 0 DCA MSGCDF /CDF IS IN AC ON RETURN XTRA1, /INITIALIZED IN CASE FUNCT IS / "SET E.F." MSGCDF, HLT /SET TO DF OF MESSAGE AC7775 /SAVE ADDRESS OF MESSAGE EVENT FLAG TAD MADDR /IN XTRA2. XTRA1&2 ARE NOW SET UP IN DCA XTRA2 /CASE COMMAND WAS "SET EVENT FLAG" TAD I MADDR /GET COMMAND AND (177 SNA CLA /CHECK FOR EXPLICIT TASK ARGUMENT TAD I XTRA2 /NONE - USE SENDING TASK AND (177 /(MESSAGE E.F. MAY HAVE 4000 BIT ON) TAD I MADDR DCA CLKCMD /SAVE CLOCK COMMAND TAD MSGCDF DCA CT /SET UP CDF OF EVENT FLAG IN "POST" / CALL TAD MADDR DCA CLKXR /SET UP AUTO-XR FOR FETCHING ARGS TAD I CLKXR /GET HIGH ORDER INTERVAL DCA TH /SAVE IT TAD I CLKXR /GET LOW ORDER INTERVAL, IF ZERO, SNA /MAKE IT 1 - THIS INTRODUCES A SMALL IAC /(LT .025%) ERROR IN SOME INTERVALS, DCA TL /BUT ELIMINATES THE KILLER 0 / INTERVAL TAD CLKCMD /GET COMMAND RTL SNL SMA CLA /CHECK FOR "SET EVENT FLAG" COMMAND JMP NOIMEF /YES - SO DON'T SET EVENT FLAG NOW TAD I CLKXR /GET TWO MORE ARGUMENTS EVEN THOUGH DCA XTRA1 /WE ONLY NEED THEM FOR COMMANDS 2 TAD I CLKXR /AND 3. DCA XTRA2 AC7775 /WE MUST FIGURE OUT WHERE THE TAD MADDR /MESSAGE STARTED SINCE WE DESTROYED CAL /XTRA2. POST CT, 0
/ NOIMEF, JMS CLQINS /NOW INSERT THE MESSAGE INTO THE / CLOCK QUEUE JMP I (CLKLP /SEARCH THE CLOCK QUEUE TO FIND WHERE TO PUT THIS REQUEST /THE REQUEST TO BE QUEUED SHOULD BE IN THE WORDS: /CLKCMD, TH, TL, XTRA1, XTRA2 CLQINS, 0 CDF CUR TAD (CLQ QSRCLP, DCA CQ TAD I CQ /GET NEXT QUEUE ENTRY DCA CT TAD CT DCA CLKXR /ACCESS BODY OF QUEUE ENTRY WITH / AUTO INDEX REGISTER. TAD I CT CLL /INHIBIT INTERRUPTS WHILE LOOKING AT IOF /Q ENTRY TO KEEP IT FROM CHANGING / ON US. SNA CLA /IS IT THE TERMINAL ONE? JMP INHERE /YES - INSERT HERE TAD I CLKXR TAD TL DCA TTL /SUBTRACT INTERVAL TO THIS QUEUED / EVENT TAD CLKCMD /IF COMMAND IS NEGATIVE, THIS IS NOT SPA CLA /A REGULAR COMMAND BUT A CANCEL - JMP KILLQE /CHECK WHETHER WE SHOULD CANCEL THIS TAD I CLKXR /Q ENTRY FROM INTERVAL TO THE / CURRENT REQUEST SNA /WATCH FOR 0 INTERVAL-SCREWS UP LINK JMP NULADD /NULL INTERVALS DON'T AFFECT SEARCH SZL CLL IAC /ADD IN CARRY AFTER ZERO TEST! TAD TH SNL /IF THE REQUEST OCCURS BEFORE THE JMP INHERE /CURRENT QUEUE ENTRY, BREAK THE / QUEUE HERE DCA TH TAD TTL /SINCE QUEUED INTERVALS ARE DCA TL /CUMULATIVE, USE THE UPDATED / INTERVAL FROM NOW ON NULADD, ION /ALLOW INTERRUPTS BETWEEN ENTRIES TAD CT JMP QSRCLP /GO TO NEXT QUEUE ENTRY
/ KILLQE, AC0002 TAD CLKXR DCA MADDR /POINT AT COMMAND WORD OF QUEUE / REQUEST TAD I MADDR CIA /COMPARE TASK NUMBER IN QUEUE ENTRY TAD CLKCMD /COMMAND TO SPECIFIED TASK AND (177 /(ONLY 7 BITS TO COMPARE SNA CLA /WELL? DCA I MADDR /MATCH - ZERO COMMAND WD (0 COMMAND / IS NOP) JMP NULADD /FOUND WHERE IT GOES - NOW PUT IT THERE INHERE, DCA MADDR /SAVE HIGH ORDER OF DIFFERENCE TAD CLKCMD SPA CLA /IF THIS WAS A CANCEL COMMAND, JMP I (CLKLP /WE ARE DONE - DON'T INSERT ANYTHING TAD CLF DCA I CQ /LINK THE FIRST ENTRY ON THE FREE STA /LIST INTO THE QUEUE AT THIS POINT TAD CLF /USE XR TO SET UP NEW ENTRY DCA CLKXR TAD I CLF /REMOVE FREE LIST ENTRY DCA CLF /FROM FREE LIST TAD CT /COMPLETE THE INSERTION BY SETTING DCA I CLKXR /UP THE POINTER TO THE NEXT QUEUE / ENTRY TAD TL /PUT THE NEGATIVE OF THE INTERVAL CIA CLL /UNTIL THIS ENTRY IS EXECUTABLE INTO DCA I CLKXR /THE NEW QUEUE ENTRY, LOW ORDER CML RAL /WORD FIRST (FOR EASY INCREMENTING) ION /FINISHED DOUBLE-PRECESION / ARITHMETIC - ALLOW INTERRUPTS TAD TH CIA DCA I CLKXR TAD CLKCMD DCA I CLKXR /PUT COMMAND WORD IN QUEUE ENTRY TAD XTRA1 DCA I CLKXR /AND EXTRA WORDS FOR COMMAND TAD XTRA2 DCA I CLKXR ISZ CT /NOW UPDATE THE FOLLOWING ENTRY TAD TTL /TO REFLECT THE REDUCED NUMBER DCA I CT /OF TICKS BETWEEN ENTRIES ISZ CT TAD MADDR /** WE MAY BE "UPDATING" ZROENT ** DCA I CT /** WE NEED TWO SCRATCH LOCS AFTER / ZROENT ** JMP I CLQINS /RETURN
/ ZROENT, 0 /PERMANENT FINAL ENTRY IN CLOCK / QUEUE TH, 0 /TH AND TL ALSO SERVE AS THE FIRST TL, 0 /TWO WORDS OF "ZROENT" CQ, 0 XTRA2, 0 CLKCMD, 0 CLF, BEGFRE /INITIALIZED TO BEGINNING OF FREE / LIST TTL, 0 PAGE
/MAIN CLOCK HANDLER LOOP - SEE IF ANYTHING TO DO CLKEF, 4000+TASK /SIGNIFICANT TICK EVENT FLAG CLKWT, WAITM /SPECIAL MONITOR ENTRY TO WAIT EORMWT /FOR EVENT FLAG OR MESSAGE. CLKLP, IOF /INTERRUPTS OFF FOR DELICATE CODE! TAD CLKEF SNA CLA /SIGNIFICANT TICK? JMP GETICK /YES - PROCESS IT TAD I (CLF SZA CLA /ANY ROOM IN CLOCK QUEUE? TAD I (TASK^2+MSGTBL /YES - CONSIDER MESSAGES SNA CLA /CAN WE TAKE A MESSAGE? JMP CLKWT /NO - GO INTO EORMWT ION /YES - RESTORE INTERRUPTS JMP I (GETMSG /AND GO RECEIVE MESSAGE GETICK, TAD (4000+TASK /RESET EVENT FLAG DCA CLKEF /TO "WAITING" STATE ION /TURN INTERRUPTS BACK ON TAD CLIPTR /** GET POINTER FROM INTERRUPT / ROUTINE ** DCA CLKXR /USE AUTO-XR TO ACCESS HIGH-ORDER / WORD DCA I CLIPTR /**FIXES QUEUE CREATOR BUG** ISZ I CLKXR /OK, WE GOT A NIBBLE - / BUMP HIGH-ORDER WORD JMP CLKLP /FALSE ALARM (SIGH) / IF WE NEED ROOM, CAN CHANGE ABOVE 5 LOCATIONS TO: / / JMP FIXQ / / IF INTERRUPT CHANGES ARE ALSO MADE, SEE 'CLKQT'.
/ BBBB OOO N N GGGGG / B B O O NN N G / BBBB O O N N N G GG - THE CLOCK HAS STRUCK! / B B O O N NN G G / BBBB OOO N N GGGGG CLKOV, TAD I CLQ /REMOVE THE FIRST ENTRY FROM THE DCA CLKTMP /CLOCK QUEUE AND PLACE IT ON THE / FREE LIST. TAD I (CLF /THIS ALLOWS US TO PLAY WITH IT TO DCA I CLQ /OUR HEARTS CONTENT WITHOUT MISSING / ANY TICKS TAD CLQ DCA I (CLF TAD CLKTMP DCA CLQ TAD I CLKXR SNA /CHECK FOR CANCELLED REQUEST JMP FIXQ /YES - JUST DELETE FROM QUEUE DCA I (CLKCMD TAD I (CLKCMD RTL /SET UP TO TEST BITS 1 AND 2 OF / COMMAND WORD. SMA CLA /CHECK FOR COMMAND 1 OR 3 JMP NOTRUN /NO - 0 OR 2. SNL /WHICH ONE? JMP NORSCD /1 - STRAIGHT RUN COMMAND TAD I CLKXR DCA I (TH /GET RESCHEDULE INTERVAL TAD I CLKXR DCA I (TL TAD I (TH DCA I (XTRA1 /USE RESCHEDULED INTERVAL AS NEW TAD I (TL /SCHEDULE AND RESCHEDULE INTERVAL DCA I (XTRA2 JMS I (CLQINS /INSERT THE NEW REQUEST IN THE CLOCK / QUEUE NORSCD, TAD I (CLKCMD /GET TASK NUMBER AND (177 /OUT OF COMMAND WORD CAL RUN /AND RUN THE JOB NOW. JMP FIXQ /CLEAN UP THE QUEUE ENTRY
/TEST FOR DERAIL REQUEST NOTRUN, TAD I CLKXR /LOAD ARGUMENT INTO AC SNL /DERAIL OR EVENT-FLAG REQUEST? JMP SETEF /EVENT FLAG DCA DRLADR /SAVE DERAIL SUBROUTINE ADDRESS TAD I (CLKCMD AND (177 /GET TASK NUMBER FROM COMMAND WORD CAL DERAIL /DERAIL THE TASK CLKTMP, DRLADR, 0 JMP FIXQ SETEF, DCA EFCDF /SAVE DATA FIELD OF EVENT FLAG TAD I CLKXR /GET ADDRESS OF EVENT FLAG CAL POST /POST THE EVENT FLAG ASSOCIATED EFCDF, 0 /WITH THIS TIMER REQUEST FIXQ, CLA IAC TAD CLQ DCA CLKXR /IT IS POSSIBLE FOR THE INTERVAL TAD I CLKXR /BETWEEN EVENTS ON THE QUEUE TO BE 0 SNA CLA /THIS MEANS THE EVENTS COME UP / SIMULTANEOUSLY. TAD I CLQ /WE MUST CHECK FOR SIMULTANEITY HERE SNA CLA /(WATCHING OUT FOR THE END OF THE / QUEUE!) JMP CLKLP /IF NONE, GO WAIT FOR THE NEXT TICK JMP CLKOV /SIMULTANEOUS REQUEST - / GO PROCESS IT
/CLOCK INTERRUPT ROUTINE /INSERT CONDITIONALIZED FLAG CLEARS FOR USER-DEFINED /CLOCK HERE. CLKINT, IFNZRO CLKTYP&1 <CLSA> /CLEAR KW12 AND /DK8EP FLAG IFZERO CLKTYP&1 < IFZERO CLKTYP-2 < CLCL /CLEAR PDP 8/A CLOCK FLAG CLA /JUST IN CASE?? > IFNZRO TICKS-1 < ISZ CLKCNT /COUNT CLOCK TICKS PER SOFTWARE TICK POSTDS /UNLESS COUNT=1 - THEN WHY BOTHER? TAD (-TICKS /RESTORE FULL COUNT DCA CLKCNT > > CLA IAC /** AC MAY NOT BE 0 HERE IF KW12 OR / DK8EP ** TAD CLQ /SAVE POINTER TO LOW-ORDER TICK DCA CLIPTR /COUNT OF FIRST QUEUE ENTRY ISZ TODL JMP CLKQT /BUMP TIME-OF-DAY ISZ TODH JMP CLKQT TAD MIDNTH /T.O.D. CLOCK OVERFLOWS AT MIDNIGHT, DCA TODH /WE MUST RESET TO A SPECIAL FUDGE TO TAD MIDNTL /ASSURE THAT IT WILL HAPPEN AGAIN DCA TODL /NEXT MIDNIGHT. TAD DATE TAD (10 DCA DATE /BUMP DATE 1 DAY, THE CRUDE WAY CLKQT, TAD I CLQ SZA CLA /IF QUEUE IS NOT EMPTY, ISZ I CLIPTR /BUMP LOW-ORDER COUNT POSTDS /NOTHING DOING STA /**FIXES QUEUE CREATOR BUG** DCA I CLIPTR /PUT -1 BACK...END OF FIX / IF NEED ROOM, CAN REPLACE PREVIOUS 2 LOCATIONS WITH / / ISZ CLIPTR / ISZ I CLIPTR / SKP / / BUT ALSO SEE END OF 'GETICK' TAD (CLKEF /SET EVENT FLAG TO START DEQUEUER POSTDS /RUNNING AS WE MAY HAVE REACHED A / SIGNIFICANT TIME
/ CLIPTR, 0 /INTERRUPT-LEVEL POINTER CLQ, ZROENT /QUEUE INITIALLY EMPTY IFNZRO TICKS-1 < CLKCNT, -TICKS > DAYL= 600^SHERTZ /THESE STATEMENTS COMPUTE THE NUMBER DAYH= 6^SHERTZ%100 /OF TICKS IN A DAY AS A DOUBLE WORD DAYH= 25^SHERTZ+DAYH /QUANTITY = 250600*SHERTZ IFNZRO DAYL <DAYH=DAYH+1> /JUST FOR BORROW / ON NEGATE MIDNTH, -DAYH MIDNTL, -DAYL PAGE
/CLOCK QUEUE FREE LIST - ALSO INITIALIZATION CODE EXROOM= ENDEXC+177&7600-ENDEXC /CALCULATE ROOM IN PAGE WITH / EXEC TABLES IFNZRO CLKQLN^6-EXROOM&4000 < /IF QUEUE WILL FIT IFNZRO 100-EXROOM&4000 < /THERE AS WELL AS *ENDEXC /INITIALIZATION, /THEN SAVE SOME /SPACE > > BEGFRE, START, IOF /IOF WHEN MESSING WITH SKIP CHAIN!! ISZ DATE /DATE CONTAINS POINTER TO CLOCK / SKIP LOCATION-1 TAD (CLSK DCA I DATE TAD DATE TAD (4 DCA DATE TAD (CLKINT DCA I DATE CDF 10 TAD I (7666 /GET OS/8 DATE WORD DCA DATE /SET RTS DATE FROM IT CDF CUR TAD I (MIDNTH DCA TODH /SET TIME TO MIDNIGHT (AS GOOD AS / ANY TIME) TAD I (MIDNTL DCA TODL
/INSERT CONDITIONALIZED INITIALIZATION CODE FOR USER-DEFINED /CLOCK HERE - MUST ENABLE INTERRUPTS AND SET RATE. IFZERO CLKTYP < CLEI /ENABLE CLOCK INTERRUPTS FOR / DK8EA,C > IFZERO CLKTYP-3 < /SPECIFIC DK8EP INIT CODE STA CLZE /ZERO COMMAND REGISTER ON / DK8EP TAD (5311-4100 /5310 = ENABLE INTS, 1 KHZ, / MODE 1 > IFNZRO CLKTYP&1 < /COMMON DK8EP,KW12 INIT CODE TAD (4100 /4100 = 1 KHZ, MODE 1 CLLR /LOAD COMMAND REGISTER CLA /CLLR DOESN'T CLEAR AC TAD (-TICKS CLAB /SCALE DOWN CLOCK TO / SOFTWARE RATE CLA /DOES NOT CLEAR AC > IFZERO CLKTYP-1 < /SPECIFIC KW12 INIT CODE TAD (300 /FORCE CLOCK BUFFER INTO CLEN /COUNTER AND ENABLE KW12 / INTERRUPTS CLA /THIS DOESN'T CLEAR AC / EITHER > IFZERO CLKTYP-2 < /PDP8/A CLOCK INIT CODE CLA IAC CLEN /ENABLE CLOCK INTERRUPTS CLA /(JUST IN CASE) > JMP FREELP
/CLOCK QUEUE INITIALIZATION - /THIS CODE IS WRITTEN TO SKIP EVERY SIXTH WORD SINCE IT IS /SETTING THESE WORDS TO QUEUE POINTERS. /** NO LITERALS IN THIS CODE! ** ZBLOCK .-BEGFRE%6^6+BEGFRE+7-. /MOVE US TO THE 2ND / WORD OF A 6 WORD / BLOCK FREELP, TAD FREPTR TAD F6 DCA I FREPTR /CHAIN EACH QUEUE ENTRY TO THE TAD FREPTR /NEXT ONE. SKP 0 /THIS LOC GETS DESTROYED BY OUR / LOOP! TAD FRELIM SMA CLA JMP INIXIT /DONE - END INITIALIZATION CODE TAD I FREPTR /GET NEW QUEUE ENTRY ADDRESS SKP 0 DCA FREPTR JMP FREELP INIXIT, DCA I FREPTR /ZERO LAST POINTER ION JMP I PCLKLP /START WAITING FOR CLOCK TICKS 0 FREPTR, BEGFRE F6, 6 FRELIM, 13-ENDFRE /SO WE NEVER GO PAST "ENDFRE" PCLKLP, CLKLP PAGE IFZERO CLKQLN^6+BEGFRE-.&4000 < ZBLOCK CLKQLN^6+BEGFRE-.+5 /+5 FOR SAFETY > /MAKE SPACE FOR ENTRIES IF MORE THAN 21 / DESIRED ENDFRE= . $=$=LHN=$=$



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search