X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Frescue%2Flab8e_goettingen%2Fdisk2_11%2Frkb%2Fparoff%2Fp.ra;fp=sw%2Frescue%2Flab8e_goettingen%2Fdisk2_11%2Frkb%2Fparoff%2Fp.ra;h=9166509282075da2ec6acce7cf5c0167d65729b4;hb=81e70d488b71bf995c459ca3a02c025993460ffa;hp=0000000000000000000000000000000000000000;hpb=07ec0278333ed187ac242dedcff13c56cf1b0b91;p=pdp8.git diff --git a/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/p.ra b/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/p.ra new file mode 100644 index 0000000..9166509 --- /dev/null +++ b/sw/rescue/lab8e_goettingen/disk2_11/rkb/paroff/p.ra @@ -0,0 +1,557 @@ +/ PDPPLT.RA +/ +/ PART ONE OF DEC'S XYPLOT DEC-S8-LPLTA-A-LA JULY 1973 M. HURLEY +/ INCLUDED IS THE LATEST UPDATE F4 4.AAAA FROM LIBRARY FORLIB.RL NOV. 77 +/ COPIED: J.J. ANDRES 1.NOV. 1980 +/ +/ PLOTTER ROUTINES FOR OS8 FORTRAN 4 FOR LAB 8/E ONLY! +/ VER 1.0 1. NOV. 1980 H.A. +/ VER 2.0 12. NOV. 1980 H.A. +/ VER 2.1 18. NOV. 1981 H.A. +/ VER 2.2 4. AUG. 1982 H.A. +/ +/ UPDATES: +/ 1. PLEXIT DISABLED THE PLOTTER INTERRUPTS AT ALL AND PLOTS DID +/ NOT SWITCH THEM ON A SECOND TIME. +/ 2. X-Y PLOTTER CANNOT BE DRIVEN TO THE ORIGIN (0,0) BY PLOTS. +/ * #XNTST IS CALLED FROM PLOTS EACH TIME PLOTS ITSELF IS CALLED. +/ * NOW #XNTST TEST AND SETS THE ONCE FLAG. +/ * #XNTST PUSHES THE PLOTTER 4095 TIMES INTO THE LOWER LEFT CORNER. +/ 1-NOV-1980 H.A. +/ 3. #XMSMBP = ADDR SYMBTB +/ #XSMBP = ADDR SYMCNT +/ THESE TWO VALUES ARE NOW INSERTED VIA A CALL TO SYMBOL. +/ SYMBOL CALLS #XMBTB TO SWAP IN THE SYMBOL TABLE OVERLAY. +/ 12-NOV-1980 H.A. +/ 4. THE AMOUNT OF EXTERNAL REF TO XYPLOT IS REDUCED +/ + / +/ THE PDP8 CODE LOCATED IN FIELD 1 +/ +/ +/ INTO THESE WORDS SYMBOL INSERTS THE ADR. OF THE SYMBOL TABLE AND LENGTH +/ THIS MUST BE DONE SINCE THE SYMBOL TABLE #XMBTB MAY BE LOCATED INTO +/ AN OVERLAY AND THEREFORE THE ADDR DIRECTIVE WILL PRODUCE WRONG CODE. +/ THE LOADER INSERTS THE ADR. OF THE OVERLAY LOADER BUT NOT THE DESIRED +/ ONE. +/ + ENTRY #XMCNT + ENTRY #XSMBP +/ +/ EXTERNAL REFERENCED FROM XYPLOT ONLY +/ +/ ENTRIES USED BY XYPLOT: + ENTRY #XETXR + ENTRY #XETUP + ENTRY #XDPXR + ENTRY #XATIO + ENTRY #XNPLT + ENTRY #XCHTP + ENTRY #XCHCK + ENTRY #XNTST + ENTRY #XDNCK + ENTRY #XORGX +/ +/ ENTRIES USED BY SYMBOL +/ + ENTRY #XNDLF + ENTRY #XNDRT + ENTRY #XLEFT + ENTRY #XLTCD + ENTRY #XPSIN + ENTRY #XPSNM + ENTRY #XPNOP + ENTRY #XRGHT + ENTRY #XTXAD +/ +PLCE= 06500 / CLEAR INTERRUPT ENABLE +PLSF= 06501 / SKIP ON PLOTTER FLAG SET +PLCF= 06502 / CLEAR PLOTTER FLAG +PLLR= 06504 / LOAD PLOTTER DIRECTION REGISTER +PLSE= 06507 / SET INTERRUPT ENABLE +/ +/ + FIELD1 PDPPLT +/ ALL THESE ROUTINES USES XRS TO GET ARGS FROM FPP CODE + EXTERN ONQI + EXTERN #DISMS +/ASSUMES USER ADDED 6502(CLEAR FLAG) TO FRTS CLEAR QUEUE +#XNTST, ORG .+1 / INIT PTRS + ADD JOB TO INTERRUPT QUEUE + CLA CMA / SET UP POINTERS + DCA% PBFCNT+1 / COUNTER FOR LOCN OF NEXT CHARACTER TO PLOT + TAD UBUFL / COMPL. LENGTH OF BUFFER --> AC + DCA% PMBFLG+1 / RESET BUFFER POINTERS + TAD PUBFMN+1 + DCA% OCHAR+1 + TAD PUBFMN+1 + DCA% ICHAR+1 + TAD DISMS+1 + DCA% PDISMS+1 / FOR HANG + ISZ ONCE / DO NOT CALL PLOTS MORE THAN 4095 TIMES! + JMP .+5 + JMS% VONQI+1 / ADD PLOTTER INTO THE INTERRUPT QUEUE ONLY ONCE + PLSF / CODE TO DETECT IF PLOTTER INTERRUPTED + ADDR INTPLT / ADR. OF INTERRUPT SERVICE ROUTINE + CLA + DCA PREP / SET UP COUNTER TO RESET PEN TO ORIGIN 0,0 + TAD PENUP / LIFT PEN AND THEN + JMS PLOTIT + CLA + TAD DECRXY / GO 4096 STEPS TO THE LEFT CORNER DOWN + JMS REPIT + PLCF / CLEAR FLAG FROM THE LAST STEP + ION PLSE / ENABLE PLOTTER INTERRUPTS + CIF CDF + JMP% #XNTST +/ +/ THIS ROUTINE RESETS X-Y PLOTTER TO 0,0 +PENUP, 2 +DECRXY, 44 +/ +REPIT, ORG .+1 + JMS PLOTIT + ISZ PREP / REPEAT 4096 TIMES + JMP .-2 + JMP% REPIT +PLOTIT, ORG .+1 + IOF + PLCF PLLR + PLSF + JMP .-1 + ION + JMP% PLOTIT +/ +ONCE, 7777 / TO ADD PLSF INTO INTERRUPT QUEUE ONLY ONCE +PREP, +VONQI, ADDR ONQI +/THIS ROUTINE CALLED ONCE FOR EACH CALL TO XYPLOT +/AND DOES INITAL PEN UP OR DOWN +#XETUP, 0 + TAD #XETXR / GET PEN STATE + AND A3 + CLL RAR / LOOK AT 3 BITS + SZA / SKIP IF 0 + SNL CLA + IAC / 3=UP, 0-2=DOWN + CLL + JMS% QPLDBL+1 + CDF CIF + JMP% #XETUP +QPLDBL, ADDR PLDBL +A3, 3 +#XETXR, +OCHAR, ADDR POCHAR+1 +PBFCNT, ADDR BUFCNT +#XCHCK, +ICHAR, ADDR PICHAR+1 +PMBFLG, ADDR MBUFLG +PUBFMN, ADDR USBFMN +DISMS, ADDR #DISMS +PDISMS, ADDR DISPTR +/ +/ FPP 12 VARIABLES SET BY XYPLOT WICH MAY NOT BE LOADED INTO AN OVERLAY +/ +#XORGX, ORG .+3 / LAST ABSOLUTE ORIGIN LOCATION OF PEN IN MOTOR STEPS +#XORGY, ORG .+3 / LAST ABSOLUTE ORIGIN LOCATION OF PEN IN MOTOR STEPS Y DIRECTION +#XABSX, ORG .+3 / ABSOLUTE LOCATION OF PEN IN MOTOR STEPS X DIRECTION (REAL) +#XABSY, ORG .+3 / ABSOLUTE LOCATION OF PEN IN MOTOR STEPS Y DIRECTION +#XOLDP, ORG .+3 / VALUE OF PEN AT LAST XYPLOT +#XXOLD, ORG .+3 / OLD X PT WITH EFFECT OF FACTOR +#XYOLD, ORG .+3 / OLD Y PT WITH EFFECT OF FACTOR +#XPENC, ORG .+3 / OLD PEN STATUS (SYMBOL & NUMBER) +#XINCX, ORG .+3 / INCREMENT SIZE DEPENDENT OF EACH PLOTTER X DIRECTION +#XINCY, ORG .+3 / INCREMENT SIZE DEPENDENT OF EACH PLOTTER Y DIRECTION +#XFCTX, ORG .+3 / X - FACTOR +#XFCTY, ORG .+3 / Y - FACTOR +BUFFL= 421 +UBUFL, -BUFFL / LENGTH OF BUFFER +USBFMN, ZBLOCK BUFFL / PLOTTING BUFFER +USBFMX, 0 + ORG #XNTST+600 +/ THESE ROUTINES GET THE PLOTTING CODES WITHIN A LETTER +/ PASS THEM AS X,Y PAIRS FOR PLOT ROUTINE +#XLEFT, 0 + JMS GETXYS / GET A #XLEFT HAND X,Y PAIR + RTR + RTR + RTR + JMS PASSXY + CDF CIF + JMP% #XLEFT +P7, 7 +PASSXY, 0 + DCA LETCD2 / SAVE X,Y PAIR + TAD LETCD2 + CLL RTR + RAR / GET IN LO THREE BITS + AND P7 + DCA LETCD1 / PASS X VALUE + TAD LETCD2 / NOW FOR THE Y PART + AND P7 + DCA LETCD2 / PASS THE Y VALUE + JMP% PASSXY +#XRGHT, 0 / GET A #XRGHT HAND X,Y PAIR + JMS GETXYS + JMS PASSXY + CDF CIF + JMP% #XRGHT +#XLTCD, 0 +LETCD1, 0 +LETCD2, 0 + / THIS ROUTINE GETS X,Y PAIRS FROM THE PACKED SEQ FOR EACH LETTER +GETXYS, 0 + TAD #XLTCD + CLL + TAD LOCNPT / START OF LETTER CODE + DCA LETCD2 / UPDATE PTR TO LETTER + RAL / IF LINK SET, CROSSED FIELDS, SO UPDATE FIELD + / POINTER + TAD LOCNFL / FIELD PASSED FROM FINDIT ROUTINE + CLL RTL + RAL + TAD CDFINS + DCA NFLD +NFLD, 0 / GET FIELD + TAD% LETCD2 / GET PLOTTING CODES + CDF 10 + JMP% GETXYS +CDFINS, 6201 +LOCNFL, 0 / FIELD +LOCNPT, 0 + / HERES START OF THE TABLE FOR PDP-8 ES +OCT8BL, 6503 / PEN UP + 6505 / PEN DOWN +/ GEOM. OCTANT 1=CODED OCTANT 8, 2=7, 3=3, 4=4, 5=2, 6=1, 8=6 + 40 / PEN R + 44 + 4 / DRUM UP + 44 + 20 / PEN L + 24 + 4 / DRUM UP + 24 + 40 / PEN R + 50 + 10 / DRUM D + 50 + 20 / PEN L + 30 + 10 / DRUM D + 30 +/ THIS IS THE START OF THE PLOT VECTOR TABLE FOR PDP-12S +OCT12, 6504 / PEN UP + 6524 / DOWN + 6511 / PEN #XRGHT + 6513 + 6522 / DRUM UP + 6513 + 6521 / PEN #XLEFT + 6523 + 6522 / DRUM UP + 6523 + 6511 / PEN #XRGHT + 6515 + 6514 / DRUM DOWN + 6515 + 6521 / PEN #XLEFT + -6514 / 2 WORD IOT + 6514 / DRUM DOWN + -6514 + / FIGURE OUT IF A MAJOR MOVE OR MAJ+MINOR +FIGURE, 0 + CLL + TAD RATIO2 + TAD HOLD2 + DCA HOLD2 / ADD LO WORDS + RAL / CARRY LINK + TAD RATIO1 + TAD HOLD1 / ADD HIGH WORDS + DCA HOLD1 + CLL + TAD HOLD1 + RAL / G.T. 1? + SNL + JMP MAJONL / NO-MAJOR MOVE ONLY + CLL RAR / PUT IT BACK-1 + DCA HOLD1 + IAC + JMP% FIGURE / RETURN WITH AC=1 +MAJONL, CLA + JMP% FIGURE / RETURN WITH ZERO AC +#XATIO, 0 / #XATIO CALCULATED IN REALPT +RATIO1, 0 +RATIO2, 0 +HOLD1, 0 +HOLD2, 0 +/ INITIALIZE HOLD1+2 TO A ROUNDING FUDGE +SPCAS, 0 + DCA HOLD1 + TAD RFUDGE + DCA HOLD2 + JMP% SPCAS +RFUDGE, 1000 / TAKES CARE OF TRUNCATION ERRORS + ORG #XLEFT+200 +NXTLCN, +PLETPS, ADDR LOCNPT / POINTS TO START OF CODE FOR PASSED LETTER +COUNT, / COUNT OF STEPS INTO CHAR PLOTTING CODE TABLE +PLCNM1, ADDR LOCNFL / USED TO PASS FIELD +#XTXAD, 0 + 0 + 0 / ADDRESS OF PACKED 6 BIT LETTERS TO PRINT +LETTER, 0 +#XSMBP, / HERE WE INSERT THE ADR. OF THE SYMBOL TABLE +PSYMB, ORG .+2 +PP7, 7 +/ THESE ROUTINES DETERMINE THE START OF PLOTTING CODES FOR A CHARACTER +/ PASSED AS A HOLERITH (6 BIT) FROM SYMBOL ROUTINE. +/ FIND LOCATION OF START OF PLOT VECTORS +/ FOR THE #XLEFT HALF OF 2 6 BIT CHARACTERS +#XNDLF, 0 + TAD #XTXAD+1 / DO FIELD STUFF + AND PP7 + CLL RTL + RAL + TAD CDF + DCA DOCDF +DOCDF, NOP + TAD% #XTXAD+2 / GET TWO 6 BIT VALUES + CDF 10 + DCA LETTER + CLL + TAD LETTER / MOVE #XLEFT CHARACTER + RTR + RTR + RTR + AND P77 / INTO THE #XRGHTMOST 6 BITS + JMS FINDIT + ISZ #XTXAD+2 / PREPARE FOR NEXT CHARACTER TO #XLEFT + JMP FLDOK / IF SKIPS, THEN AT FIELD BOUNDARY + ISZ #XTXAD+1 / SO UPDATE FIELD ALSO +FLDOK, CDF CIF + JMP% #XNDLF + FINDIT, 0 / GET LOC OF LETTER IN SYMBOL TABLE + SPA SNA / CHECK FOR ZERO + TAD P40 / WHICH DEFAULTS TO SPACE + CIA CLL / MAKE A COUNTER + DCA #XTXAD + DCA COUNT / ZERO TOTAL STEP COUNTER + TAD PTRTBL+1 + DCA NXTLCN / POINTS TO LOCN IN POINTER TABLE + / THIS TABLE HAS STEPS FOR EACH LETTER, SO + / COUNT TOTAL STEPS TO DESIRED LETTER + TAD PTRTBL + CLL RTL + RAL + TAD CDF + DCA SCANTB +SCANTB, NOP + TAD% NXTLCN / GET NEXT STEP COUNT + CDF 10 + TAD COUNT / AND ADD IT TO TOTAL STEP COUNT + DCA COUNT + ISZ NXTLCN / BUMP POINTER + SKP / SKIP IF DIDN'T CROSS BOUNDARIES + TAD P10 / IT DID, UPDATE FIELD WORD + TAD SCANTB + DCA SCANTB + ISZ #XTXAD + JMP SCANTB / NOT THERE YET + CLL + TAD COUNT / ADD COUNT TO + TAD PSYMB+1 / START OF CODE TABLE + DCA% PLETPS+1 / NOW IT'S CORRECT POINTER + RAL / IF LINK SET, WE CROSSED FIELD BOUNDARIES + TAD PSYMB / GET FIELD OF TABLE + DCA% PLCNM1+1 / PASS IT + JMP% FINDIT / GOT THE LETTER +P40, 40 +P77, 77 +#XMCNT, / HERE WE INSERT THE POINTER INTO THE SYMBOL TABLE +PTRTBL, ORG .+2 +CDF, 6201 +P10, 10 + #XNDRT, 0 + TAD LETTER / #XLEFT FROM LAST #XLEFT LETTER + AND P77 + JMS FINDIT + CDF CIF + JMP% #XNDRT +/ ROUTINE TO HANDLE NUMBERS FROM FORTRAN SUBR. NUMBER +/ NOT CALLED BY USER DIRECTLY +#XPSNM, 0 + TAD #XTXAD + IAC + SNA + JMP USZRO / IF EQ -1, USE 0 + TAD T2 + SPA / L.T. -3 BAD + JMP USZRO / SO USE ZERO + TAD M15 + SPA CLA / G.T. 9 BAD TOO + JMP USEIT / IT'S -3,-2,0-9 +USZRO, CLA +INDEX, TAD P60 / INDEX INTO TABLE + JMS FINDIT + CDF CIF + JMP% #XPSNM +USEIT, TAD #XTXAD + JMP INDEX +/ PLOT AN INTEGER EQUIV OR CENTERED (100-117 DEC =144-165 OCT) +#XPSIN, 0 + TAD #XTXAD + SPA SNA / .L.T. ZERO NO GOOD + JMP USSPAC + TAD M166 / G.T. 117 DEC. BAD + SMA + JMP USSPAC + TAD A22 + SMA + JMP OKVAL / ITS A CENTERED 100-121 (0144-0165) + TAD P44 + SMA CLA + JMP USSPAC / 0100-0143 ILLEGAL + TAD #XTXAD +ACHAR, JMS FINDIT + CDF CIF + JMP% #XPSIN +USSPAC, CLA + TAD P40 / DEFAULT TO SPACE + JMP ACHAR +OKVAL, TAD P100 / PASS CENTERED AS 100-121 + JMP ACHAR +P100, 100 +A22, 22 +P44, 44 +M166, -166 +P60, 60 +M15, -15 +T2, 2 + ORG NXTLCN+200 + EXTERN #HANG +#XNPLT, 0 / NON INTERRUPT TIME PLOT ROUTINE + TAD TOTSTP + CMA + DCA TOTSTP + JMS% PSPCAS+1 / PREP FOR OCTANT CHECK +MORE, ISZ TOTSTP + JMP ANOTHR / DO ANOTHER STEP +DONE, CDF CIF / ALL DONE WITH THIS VECTOR + JMP% #XNPLT +ANOTHR, JMS% PFIGUR+1 / TO FIGURE OUT IF MAJ OR DIAG + / RETURNS ZERO IF MAJOR ONLY, 1 IF MAJ + MINOR + TAD #XDPXR / OCTANT + JMS PLDBL + JMP MORE +PLDBL, 0 + TAD POCTBL+1 / START OF VECTOR TABLE + TAD #XCHTP / ADD 22 IF A PDP-12 OR NON 8-E + DCA PLTVCT / SAVE POINTER TO PROPER PLOT VECTOR + CIF 10 + TAD BUFCNT / GET NUM. CHARACTERS IN BUF -1 + TAD MBUFLG / AND MINUS LENGTH + CLL + SPA CLA + JMP ISROOM / STILL ROOM IN BUFFER + IOF / NO ROOM YET, GO TO HANG + CIF 0 + JMS% PHANG+1 +DISPTR, 0 + ION / HANG LEAVES INTERRUPT OFF +ISROOM, TAD% PLTVCT / NOW GET THE VECTOR + DCA% PICHAR+1 / INTO BUFFER + ISZ PICHAR+1 / UPDATE LOCN + TAD PICHAR+1 + CIA + TAD PBMX+1 / ARE WE OVERFLOWING MAX LOCN OF BUFFER + CLL + SMA CLA / PAST END ? + JMP LIMOK / NO + TAD PBMN+1 / YES, RESET TO BOTTOM + DCA PICHAR+1 +LIMOK, ISZ BUFCNT / UPDATE CHAR COUNT + / IF EMPTY WAS -1, SO NOW 0 + JMP% PLDBL / WASNT EMPTY-CANT START TO PLOT + JMP OUTSUB + #XPNOP, 0 + TAD #XDPXR / USE AS INDEX INTO OPCODE TABLE + JMS PLDBL + CDF CIF + JMP% #XPNOP +#XDPXR, 0 +TOTSTP, 0 +PSPCAS, ADDR SPCAS +POCHAR, ADDR USBFMN +INTFLG, / HANG ALWAYS FIELD 0 +PHANG, ADDR #HANG +PICHAR, ADDR USBFMN +BUFCNT, +POCTBL, ADDR OCT8BL +MBUFLG, +PBMN, ADDR USBFMN +#XCHTP, +PFIGUR, ADDR FIGURE +PLTVCT, +PBMX, ADDR USBFMX + OUTSUB, CLA + TAD% POCHAR+1 / GET NEXT LINE TO PLOT + DCA QTEMP5 / SAVE ACTUAL VECTOR FOR A SECOND + ISZ POCHAR+1 + TAD POCHAR+1 + CIA + TAD PBMX+1 / CHECK THAT OUTPUT DOESNT OVERFLOW THE BUFFER + CLL + SMA CLA / WILL IT? + JMP CLRFLG / NO + TAD PBMN+1 / YES + DCA POCHAR+1 / RESET IT +CLRFLG, 6502 + TAD QTEMP5 / GET VARIABLE + AND A7000 / DETERMINE TYPE OF PLOTTER + SZA CLA + JMP PENUD / A PEN OP (PDP-12 OR 8/E) + TAD QTEMP5 / ITS AN 8E + 6506 / SEND A CHARR + CLA + JMP OUTCHK / RETURN +PENUD, TAD QTEMP5 / ITS A 12 OR NON-8/E PEN UP OR DOWN + SMA CLA + JMP TWOWD / IT'S A TWO WORD IOT +QTEMP5, NOP / 1-WORDER SO DO IT NOW +OUTCHK, TAD INTFLG + SNA CLA + JMP% PLDBL / DONE FOR NON-INTERRUPT + DCA INTFLG / INT MODE, CLEAR FLAG + CDF CIF + JMP% XDISMS+1 +XDISMS, ADDR #DISMS +A7000, 7000 +TWOWD, 6514 / DRUM DOWN + 6521 / SECOND PART PEN #XLEFT + JMP OUTCHK + INTPLT, 0 / HERE ONLY IF FLAG SET + CLA CMA + TAD BUFCNT / DECREMENT BUFFER COUNTER + SPA + JMP EMPTY + DCA BUFCNT + ISZ INTFLG / SHOULD NEVER SKIP + NOP + JMP OUTSUB +EMPTY, CLA CMA + DCA BUFCNT / INITIALIZE BUFFER CNT-1 + 6502 / CLEAR + JMP% INTPLT / EXIT IN FIELD 1 +/ BE SHURE BUFFER EMPTY BEFORE EXITING +#XDNCK, 0 + CLA + JMS PLDBL / DO A FINAL PEN UP +WAIT, TAD BUFCNT + SMA CLA + JMP WAIT / STILL MORE TO DO + TAD #XCHTP + SNA CLA + 6500 / CLEAR INTERRUPT ENABLE FOR 8-ES + CIF CDF / ALL EMPTY + JMP% #XDNCK + END +  \ No newline at end of file