From 06351f7f7fcbd33cbd8f644578d8fc6e58deb373 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Tue, 25 Dec 2018 21:27:48 +0100 Subject: [PATCH] IPLJOB - plot display lists. --- build/misc.tcl | 4 + doc/_info_/ipl.info | 160 +++++ doc/programs.md | 1 + src/sysen2/ipljob.47 | 1447 ++++++++++++++++++++++++++++++++++++++++++ src/syseng/axplot.48 | 1092 +++++++++++++++++++++++++++++++ 5 files changed, 2704 insertions(+) create mode 100644 doc/_info_/ipl.info create mode 100755 src/sysen2/ipljob.47 create mode 100755 src/syseng/axplot.48 diff --git a/build/misc.tcl b/build/misc.tcl index 0284b04b..a6f6de44 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -825,6 +825,10 @@ respond "*" ":midas sysbin;ttylin bin_bawden; u\r" expect ":KILL" respond "*" ":link device; chaos ttylin, sysbin; ttylin bin\r" +# IPLJOB +respond "*" ":midas sys;atsign ipl_sysen2; ipljob\r" +expect ":KILL" + # RIPDEV respond "*" ":midas device;atsign r.i.p._sysen2;ripdev\r" expect ":KILL" diff --git a/doc/_info_/ipl.info b/doc/_info_/ipl.info new file mode 100644 index 00000000..5f88a0c4 --- /dev/null +++ b/doc/_info_/ipl.info @@ -0,0 +1,160 @@ +;SKIP 1 +;KSET FONTS;20FG,,,, + IPL COMMAND STRUCTURE. + +1.1 0 ==> PACKED ASCII +1.1 1 ==> + 1.2 0 ==> XYFORMAT: + 3.2-3.1 0 ==> SET X,Y + 1 ==> GO TO (X,Y) + 2 ==> PLOT VECTOR (X,Y) + 3 ==> PLOT VECTOR (SC*X,SC*Y) + 4.9-3.3 X + 2.9-1.3 Y + 1.2 1 ==> + 1.3 0 ==> DEFINE CHARACTER / CHARACTER SET + 2.1-1.4 CHARACTER TO BE DEFINED (0==>CHARACTER SET) + 2.3-2.2 CHARACTER SET IN WHICH TO DEFINE CHARACTER(S) + 2.5-2.4 0 ==> 4-BIT INCREMENTS (0=END, 1=PLOT DOT,2=PEN UP, 4=PEN DOWN, + 10=RT, 11=UP, 12=LT, 13=DN, 14=UR, 15=UL, 16=DL, 17=DR) + 1 ==> 14-BIT VECTORS (1-BIT DOUBLE, 5-BIT X, 5-BIT Y, 1-BIT INTENSIFY; X=Y=0 ==> END) + 2 ==> 6-BIT COMMANDS + 3 ==> =CHARACTER IN LEFT HALF (INCLUDING CHARACTER SET) + 4.9-3.1 ADDRESS FOR BYTE POINTER + 1.3 1 ==> + 1.4 0 ==> SCOPE PLOT + 2.7-2.1 CHARACTER FROM CURRENT CHARACTER SET, 0==> DOT + 1.9 0==> CURRENT SCALE + 1==> SCALE 2 + 1.8 0==> CURRENT DIRECTION + 1==> DIRECTION 0 + 1.7 0==> CONTINUE + 1==> CONO DIS,100 + 1.6-1.5 0==> DATAOI + 1==> DATAOI & GO INTO DATAO MODE + 2==> .DSTART (Pntr in left half) + 3==> .DSTRTL (Pntr in left half) + 1.4 1 ==> + 1.5 0 ==> AXIS-PLOT AND RELATED STUFF + 1.6 0 ==> PLOT COORDINATE SYSTEM + 2.3-1.7 CODE + 2.9-2.4 SYSTEM CODE: + 0 ==> X - Y + 1 ==> X - LOG Y + 2 ==> LOG X - Y + 3 ==> LOG X - LOG Y + 4 ==> R - THETA + 5 ==> LOG R - THETA + 4.9-3.1 POINTER TO AXES DEFINING BLOCK OR 0 FOR IMMEDIATE: + PLOTTER X COORDINATE OF ORIGIN IN INCHES + PLOTTER Y COORDINATE OF ORIGIN IN INCHES + U COORDINATE OF ORIGIN + V COORDINATE OF ORIGIN + BLOCK FOR U AXIS + BLOCK FOR V AXIS + AXIS BLOCK: + WORD 1: 1.6-1.1 SCALE FOR HASH MARKS AND LABELS + 1.7 1 ==> HASH MARKS ON BOTH SIDES OF AXIS + 1.9-1.8 1 ==> LABELS AND/OR HASH MARKS CLOCKWISE + (AS FOR X AXIS) + 3 ==> LABELS AND/OR HASH MARKS COUNTERCLOCKWISE + (AS FOR Y AXIS) + 2.1 1 ==> LABEL + 2.2 1 ==> HASH MARKS OPPOSITE LABELS + 2.3 1 ==> EXPONENT FORMAT FOR LABELS + 2.7-2.4 NUMBER OF DECIMAL PLACES IN LABELS + OTHER WORDS IN BLOCK: + FOR X, Y, LOG X, LOG Y AXES: + MIN VALUE OF COORDINATE + MAX VALUE OF COORDINATE + DELTA COORDINATE VALUE BETWEEN LABELS (OR BIGGEST HASH MARKS) + LENGTH IN INCHES BETWEEN LABELS + FOR R, LOG R AXES: + SAME AS FOR X AXIS PLUS + THETA VALUE OF R AXIS + FOR THETA AXIS: + MIN + MAX + RADIUS OF THETA AXIS + 1.6 1 ==> + 1.9-1.7 CODE: + 0 ==> PLOT SINGLE AXIS USING PLOTTER COORDINATE SYSTEM + 1 ==> PLOT SINGLE AXIS USING CURRENT COORDINATE SYSTEM + 2 ==> PLOT A GRAPH IMMEDIATE [4.9-3.1 #PTS, FOLLOWED BY X,Y + PAIRS IN SUCCEEDING WORDS] + 2.7-2.1 PLOTTING CHARACTER + 2.8 1 ==> PLOT LINE BETWEEN POINTS + 2.9 1 ==> LEAVE PEN IN POSITION TO CONTINUE + 3 ==> PLOT A GRAPH 4.9-3.1 ADDRESS OF 3 WORD BLOCK GIVING #PTS, + DX,,X , DY,,Y [ADDRESSES OF X AND Y ARRAYS] + OR 0 ==> USE NEXT 3 WORDS + 4 ==> PRINT FLOATING POINT NUMBER + + 1.5 1 ==> + 1.6 0 ==> 2.9-1.7 + 0 SET SCALE + 1 SET HORIZONTAL TAB + 2 SET LINE FEED + 3 SET VERTICAL TAB + 4 SET X + 5 SET Y + 6 GO TO X + 7 GO TO Y + 10 PLOT VECTOR (X,0) + 11 PLOT VECTOR (0,Y) + 12 PLOT VECTOR (SC*X,0) + 13 PLOT VECTOR (0,SC*Y) + 1.6 1 ==> PACKED SIX-BIT COMMANDS + SIX-BIT COMMANDS: + +0 NULL +1 PEN DOWN +2 SUBSCRIPT +3 PEN UP +4 SUPERSCRIPT +5 ENTER NO PEN MODE +6 LEAVE NO PEN MODE +7 SET SCALE TO ZERO +10-17 ADD 2^N TO SCALE +20-27 SUBTRACT 2^N FROM SCALE +30 DIRECT ALONG REAL X-AXIS +31 ROTATE APPARENT AXES 90 DEGREES +32 ROTATE APPARENT AXES 180 DEGREES +33 ROTATE APPARENT AXES 270 DEGREES +34 REFLECT APPARENT AXES ABOUT APPARENT Y-AXIS +35 34+31 +36 34+32 +37 34+33 +40 PUSH (X,Y) +41 PUSH DIRECTION +42 PUSH SCALE +43 PUSH CHARACTER SET (INCLUDING HORIZONTAL TAB, VERTICAL TAB, AND LINE FEED) +44 POP (X,Y) +45 POP DIRECTION +46 POP SCALE +47 POP CHARACTER SET +50 MULTIPLY SCALE BY 2 +51 MULTIPLY SCALE BY 3 +52 MULTIPLY SCALE BY 5 +53 MULTIPLY SCALE BY 7 +54 DIVIDE SCALE BY 2 +55 DIVIDE SCALE BY 3 +56 DIVIDE SCALE BY 5 +57 DIVIDE SCALE BY 7 +60 RIGHT ONE RELATIVE UNIT +61 UP ONE RELATIVE UNIT +62 LEFT ONE RELATIVE UNIT +63 DOWN ONE RELATIVE UNIT +64 UR +65 UL +66 DL +67 DR +70 PLOT DOT +71 USE OLD ASCII CHARACTER SET +72 USE NEW ASCII CHARACTER SET +73 USE USER-DEFINED CHARACTER SET 0 +74 USE USER-DEFINED CHARACTER SET 1 +75 USE USER-DEFINED CHARACTER SET 2 +76 USE USER-DEFINED CHARACTER SET 3 +77 INITIALIZE (SCALE=1, (X,Y)=(0,0), DIRECT ALONG X-AXIS, RESET PDL'S) +  \ No newline at end of file diff --git a/doc/programs.md b/doc/programs.md index d73487b1..a414e403 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -138,6 +138,7 @@ - INQUIR, user account database. - INQUPD, processes INQUIR change requests. - INSTAL, install executables on other ITS machines. +- IPLJOB, plot display lists. - ITSDEV, ITS device server. - ITSTER, Donald Fisk's block-stacking puzzle game. - JEDGAR, counter spying tool. diff --git a/src/sysen2/ipljob.47 b/src/sysen2/ipljob.47 new file mode 100755 index 00000000..64a1aad1 --- /dev/null +++ b/src/sysen2/ipljob.47 @@ -0,0 +1,1447 @@ +TITLE IPL JOB + +WTTIME==30. ;MAXIMUM WAITING TIME IN SECONDS FOR CLI INTERRUPT +PLTC==1 ;PLT CHANNEL +USRC==2 ;USR CHANNEL +LPDL==40 ;PDL LENGTH +LXYPDL==40 ;X,Y PDL LENGTH +LSPDL==10 ;SCALE PDL LENGTH +LCPDL==40 ;CHARACTER SET PDL LENGTH +LDPDL==10 ;DIRECTION PDL LENGTH +LPLTB==100 ;MINIMUM PLT BUFFER LENGTH + +.PU==20 ;PLOTTER PEN UP +.PD==40 ;PLOTTER PEN DOWN +.RT==1 +.UP==10 +.LT==2 +.DN==4 +.UR==.UP\.RT +.UL==.UP\.LT +.DL==.DN\.LT +.DR==.DN\.RT +PWIDTH==4000 + +Z=0 +X=1 +Y=2 +SC=3 +T=SC+1 +A=5 +B=A+1 +C=B+1 +D=C+1 +E=D+1 +F=E+1 +P=17 +XYP=P-1 +SP=P-2 +CP=P-3 +DP=P-4 + + ;FLAGS IN LEFT HALF OF Z +PENP==400000 ;1==>PEN DOWN, 0==>PEN UP +NOPENF==200000 ;1==>NO PEN MODE +AXCF==20000 ;1==>PLOTTING COORDINATE SYSTEM +AXEF==10000 ;1==>EXPONENT FORMAT (SCIENTIFIC NOTATION) FOR AXIS LABELING +AXSYME==4000 ;1==>AXIS HASH MARKS EXTENDED ON BOTH SIDES OF AXIS, EVEN IF AXSYMF IS 0 +AXSYMF==2000 ;1==>AXIS HASH MARKS EXTENDED ON BOTH SIDES OF AXIS +AXPLTF==1000 ;1==>AXIS PLOTTING +LNGF==400 ;1==>ONLY WANT LENGTH, DON'T DO ANY PLOTTING +SVSF==200 ;1==> X .GE. Y IN MAGNITUDE FOR VECTOR (SEE SVST1) +SCPSTF==100 ;1==>PROCESSING PSTART OR PSTARTL +SCPLF==40 ;1==>PSTRTL +SCCASF==20 ;1==>SCOPE LOWER CASE +SCDIRF==10 ;1==>SCOPE VERTICAL MODE +SNXTMF==4 ;1==>NEXT SCOPE MODE A LOSER +SCXF==2 ;1==>NEW SCOPE X POSITION KNOWN AND NOT PLOTTED +SCYF==1 ;1==>NEW SCOPE Y POSITION KNOWN AND NOT PLOTTED + +START: .OPEN PLTC,PLTO + .LOGOUT ;LOGOUT IF CAN'T GET PLOTTER + .SUSET [.SMASK,,[400000]] ;ENABLE CLI INTERRUPT + MOVEI 17,30.*WTTIME + .SLEEP 17, ;WAIT FOR CLI INTERRUPT +LOGOUT: .LOGOUT ;LOGOUT IF NO CLI INTERRUPT OCCURS WITHIN MAXIMUM WAITING TIME + +PLTO: 3,,(SIXBIT /PLT/) ;BLOCK ASCII MODE OUTPUT + SIXBIT /IPLJOB/ + SIXBIT /OUTPUT/ + +CLAO: 6,,(SIXBIT /CLA/) ;BLOCK IMAGE MODE INPUT + SIXBIT /IPLJOB/ + SIXBIT /INPUT/ + +PDL: BLOCK LPDL +XYPDL: BLOCK LXYPDL ;X,Y PDL +SPDL: BLOCK LSPDL ;SCALE PDL +CPDL: BLOCK LCPDL ;CHARACTER SET PDL +DPDL: BLOCK LDPDL ;DIRECTION PDL + +ZZ==. +LOC 41 + JSR UUOH + JSR INT +LOC ZZ + +USRO: (SIXBIT /USR/) ;WORD AT A TIME MODE, SET TO BLOCK MODE IF DEFINING CHARACTER SET +UNAME: 0 ;UNAME OF IPL USER +JNAME: 0 ;JNAME OF IPL USER + +UUOH: 0 + MOVEM A,UUOA + LDB A,[331100,,40] + CAIL A,UUOMIN + CAIL A,NUUO + JRST ILUUO + JRST @UUOTAB-UUOMIN(A) + +;UUOTAB: REPEAT NUUO-UUOMIN,CONC UUO,\UUOMIN+.RPCNT, + +UUORET: MOVE A,UUOA + JRST 2,@UUOH + +UUOA: 0 + +DEFINE CONC A,B +A!B!TERMIN + +UUOMIN==1 +NUUO==UUOMIN + +DEFINE UUOGEN U + .!U=NUUO_33 + IF2,CONC UUO,\NUUO,==A!U + NUUO==NUUO+1 +TERMIN + +INT: 0 + 0 + EXCH T,INT + TRNE T,400000 + JRST CLI ;CLI INTERRUPT + TRNE T,20000 + JRST MPV ;MEMORY PROTECTION VIOLATION + TRNE T,200000 + JRST PDLOV ;PDL OVERFLOW + TRNN T,1000 + .LOGOUT ;LOGOUT IF STRANGE INTERRUPT +USRMPV: TLNE Z,SCPSTF ;MEMORY PROTECTION VIOLATION ON USR DEVICE + .DISMISS [PSCPDC] ;HAPPENED WHILE PROCESSING PSTART OR PSTARTL + TLNE Z,AXPLTF + .DISMISS [AXDONE] ;HAPPENED WHILE READING CRUFT FOR AXIS PLOTTING + MOVE T,@INT+1 ;HAPPENED WHILE DEFINING CHARACTER OR CHARACTER SET + EXCH T,INT + SETZM @INT + JRST AOSDIS + +ILUUO: SKIPA C,[ASCII \ILUUO\] ;WRITE OUT "ILUUO" ON PLOTTER +PDLOV: MOVE C,[ASCII \PDLOV\] ;WRITE OUT "PDLOV" ON PLOTTER +LUZ: MOVEI SC,3 + MOVEI Z,0 + MOVEI A,NASC + HRRM A,CPLOT + MOVE A,LOGOUT ;THEN LOGOUT + MOVEM A,RDWD1 + JRST RDCH + +MPV: SOS T,INT+1 + MOVE T,(T) + TLZ T,777 + CAME T,[IDPB PLTBP] + JRST MPV1 +MPVC: MOVSI T,-PLTL ;OTHERWISE, PLOT OUT WHOLE BUFFER + PUSHJ P,PLT3 ;RESET PLTBP + MOVE T,INT ;AND RETURN TO THE IDPB + .DISMISS INT+1 + +MPV1: CAME T,[IDPB CHDBYT] + .LOGOUT + PUSHJ P,COREXP + MOVE T,INT + DPB T,CHDBYT +AOSDIS: AOS INT+1 + .DISMISS INT+1 + +CLI: .OPEN CLAO + .LOGOUT ;LOGOUT IF CLA OPEN FAILS + MOVE A,[-2,,UNAME] + .IOT A ;GET UNAME,JNAME OF IPL USER + MOVE P,[-LPDL,,PDL-1] + MOVEI SC,2 + MOVEI Z,1 + PUSHJ P,INIT1 + MOVEI Y,4000 + .SUSET [.SMASK,,[221440]] ;ENABLE INTERRUPTS, INCLUDING ALL REASONABLE ONES OF CLASS 2 + .DISMISS [RDWD] + +RDWD: PUSHJ P,PLTOUT ;OUTPUT PLT BUFFER BEFORE GETTING NEXT COMMAND +RDWD1: HRROI A,C + .IOT A + JUMPL A,LOGOUT ;LOGOUT IF END OF FILE REACHED + TRZE C,1 + JRST PSPEC +RDCH: JUMPE C,RDWD + MOVEI B,0 +RDCH1: LSHC B,7 + JUMPE B,RDCH1 + PUSH P,[RDCH] + +CPLOT: MOVE D,NASC(B) ;PLOT CHARACTER IN B, DON'T USE C +CPLOTA: TLNE D,40 + JRST @D + TLNE D,7300 ;SEE IF CHARACTER VECTOR-DEFINED OR SIX-BIT-DEFINED + JRST CPLOT1 ;YES +NEXTI: ILDB A,D + JUMPE A,CPOPJ + PUSH P,[NEXTI] + TRNN A,10 + JRST PEN +GODIRS: MOVE B,SC ;DIRECTION IN A, SC FOR NUMBER OF STEPS +GODIRA: XCT XTAB-10(A) + XCT YTAB-10(A) +GODIR: TLNE Z,LNGF ;DIRECTION IN A, NUMBER OF STEPS IN B + POPJ P, + MOVE A,CVRTAB-10(A) +CVRROT: ROT A,0 + ANDI A,17 + IDPB A,PLTBP + SOJG B,.-1 + POPJ P, + +PEN: TLNE Z,LNGF ;EXECUTE PEN COMMAND + POPJ P, + CAIN A,DD + JRST DOT + CAIN A,PD + JRST PENDN + CAIN A,PU + JRST PENUP + +ADOT: TLNE Z,LNGF ;COMMAND 70 + POPJ P, +DOT: PUSHJ P,PENDN ;PLOT A DOT + MOVE A,[DT] +DOT1: ILDB B,A + JUMPE B,PENUP + MOVE B,CVRTAB-10(B) + IDPB B,PLTBP + JRST DOT1 + +PSPEC: PUSH P,[RDWD] +SPEC: TRZN C,2 ;PLOT COMMAND IN C + JRST XYFORM + TRZN C,4 + JRST DEFCH + TRZN C,10 + JRST PSCOPE + TRZN C,20 + JRST AXPLOT + TRZN C,40 + JRST SET +SPCHAR: MOVEI B,0 ;PLOT SPECIAL CHARACTERS IN C + JUMPE C,CPOPJ + LSHC B,6 + JUMPE B,.-1 + PUSH P,[SPCHAR] +SPLOT: MOVE A,B ;PLOT SPECIAL CHARACTER IN B, DON'T USE C + ANDI A,7 + LSH B,-3 + JRST .+1(B) + JRST SZERO + JRST ADSC + JRST SUBSC + JRST DIR + JRST PORP + JRST MDSC + JRST GO +SSEVEN: JRST .+1(A) ;COMMANDS 70-77 + JRST ADOT + JRST OLDASC + JRST NEWASC + JRST CHI + JRST CHI + JRST CHI + JRST CHI +INIT: MOVEI SC,1 ;COMMAND 77: INITIALIZE (X=Y=0, SC=1, DIRECTION=0, SCOPE TO PARAMETER MODE, RESET PDL'S) + AND Z,[LNGF,,] +INIT1: SETZB X,Y + MOVEI T,SPARAM + HRRM T,NXTMOD + MOVE XYP,[-LXYPDL,,XYPDL-1] + MOVE SP,[-LSPDL,,SPDL-1] + MOVE CP,[-LCPDL,,CPDL-1] + MOVE DP,[-LDPDL,,DPDL-1] + DPB Z,[20300,,CVRROT] + JRST PENUP1 + +SZERO: XCT SZEROT-1(A) ;COMMANDS 1-7 + POPJ P, +SZEROT: JRST PENDN + JRST SUBSCR + JRST PENUP + JRST SUPSCR +ENOPEN: TLO Z,NOPENF ;COMMAND 5: ENTER MODE IN WHICH NO PEN COMMANDS ARE EXECUTED +LNOPEN: TLZ Z,NOPENF ;COMMAND 6: LEAVE THIS MODE +ZEROSC: MOVEI SC,0 ;COMMAND 7: ZERO SCALE + +PENDN: TLNN Z,NOPENF+LNGF ;PEN DOWN (COMMAND 1) + TLOE Z,PENP + POPJ P, + MOVEI B,.PD + IDPB B,PLTBP + POPJ P, + +NPENUP: TLOA Z,NOPENF +PENUP: TLNN Z,NOPENF+LNGF ;PEN UP (COMMAND 3) + TLZN Z,PENP + POPJ P, +PENUP1: MOVEI B,.PU + IDPB B,PLTBP + POPJ P, + +SUBSCR: MOVNI B,3 ;SUBSCRIPT (COMMAND 2) + JRST VSCY + +SUPSCR: MOVEI B,3 ;SUPERSCRIPT (COMMAND 4) + JRST VSCY + +ADSC: MOVEI B,1 ;COMMANDS 10-17: ADD TO SCALE + LSH B,(A) + ADD SC,B + POPJ P, + +SUBSC: MOVEI B,1 ;COMMANDS 20-27: SUBTRACT FROM SCALE + LSH B,(A) + SUB SC,B + POPJ P, + +DIR0: MOVEI A,0 +DIR: MOVEI T,PWIDTH ;COMMANDS 30-37: CHANGE DIRECTION + JUMPN A,DIRA + TRZE Z,4 + SUBM T,X + MOVN A,Z + ANDI A,3 +DIRA: HRRZ B,A + ANDI A,3 + TRNN Z,4 + XCT DIRC1(A) + XCT DIRC2(A) + TRNE Z,4 + XCT DIRC1(A) + TRNE B,4 + SUBM T,X + ADD A,Z + ANDI A,3 + XOR Z,B + TRZ Z,777773 + ADD Z,A + DPB Z,[20300,,CVRROT] + POPJ P, + +DIRC1: JFCL + EXCH X,Y + SUBM T,X + EXCH X,Y + +DIRC2: JFCL + SUBM T,Y + SUBM T,Y + SUBM T,X + +PORP: XCT PORPT(A) ;COMMANDS 40-47 + POPJ P, +PORPT: JRST PUSHXY +PUSHD: PUSH DP,Z ;COMMAND 41: PUSH DIRECTION +PUSHS: PUSH SP,SC ;COMMAND 42: PUSH SCALE + JRST PUSHC + JRST POPXY + JRST POPD +POPS: POP SP,SC ;COMMAND 46: POP SCALE + JRST POPC + +PUSHXY: PUSH XYP,X ;COMMAND 40: PUSH COORDINATES + PUSH XYP,Y + POPJ P, + +POPXY: PUSH P,C ;COMMAND 44: POP COORDINATES + POP XYP,D + POP XYP,C + PUSHJ P,GOXY +POPCJ: POP P,C + POPJ P, + +POPD: PUSHJ P,DIR0 ;COMMAND 45: POP DIRECTION + POP DP,A + JRST DIR + +PUSHC: PUSH CP,CPLOT ;COMMAND 43: PUSH CHARACTER SET + PUSH CP,HTAB + PUSH CP,LF + PUSH CP,VTAB1 + POPJ P, + +POPC: POP CP,VTAB1 ;COMMAND 47: POP CHARACTER SET + POP CP,LF + POP CP,HTAB + POP CP,CPLOT + POPJ P, + +MDSC: XCT MDSC1(A) ;COMMANDS 50-57 + POPJ P, +MDSC1: ASH SC,1 ;COMMAND 50: MULTIPLY SCALE BY 2 + IMULI SC,3 ; 51: 3 + IMULI SC,5 ; 52: 5 + IMULI SC,7 ; 53: 7 + ASH SC,-1 ;COMMAND 54: DIVIDE SCALE BY 2 + IDIVI SC,3 ; 55: 3 + IDIVI SC,5 ; 56: 5 + IDIVI SC,7 ; 57: 7 + +GO: TRO A,10 ;COMMANDS 60-67: GO ONE SCALED UNIT IN SPECIFIED DIRECTION + JRST GODIRS + +OLDASC: MOVEI A,OASC ;COMMAND 71: USE OLD ASCII CHARACTER SET + HRRM A,CPLOT + MOVEI A,9 + HRRM A,LF + MOVEI A,40 + HRRM A,HTAB + HRRM A,VTAB1 + POPJ P, + +NEWASC: MOVEI A,NASC ;COMMAND 72: USE NEW ASCII CHARACTER SET +CHCAR0: HRRM A,CPLOT + MOVEI A,6*10 + HRRM A,HTAB + MOVEI A,10. + HRRM A,LF + MOVEI A,10.*10 + HRRM A,VTAB1 + POPJ P, + +CHI: ASH A,7 ;COMMANDS 73-76: USE USER DEFINED CHARACTER SET I + ADDI A,CH0-3*200 + HRRM A,CPLOT + POPJ P, + +DEFCH: ;DEFINE CHARACTER / CHARACTER SET + LDB A,[31100,,C] ;GET CHARACTER TO BE DEFINED + ADDI A,CH0 + TRNN C,1770 + JRST DEFCHS + LDB T,[140200,,C] ;GET CODE + MOVE T,DCHT(T) + JUMPE T,DEFEQ + .OPEN USRC,USRO + POPJ P, + TRZ C,37777 + CAIE T,6 + JRST DCH1 + LDB D,[160400,,C] ;GET TOP 4 BITS OF BYTE POINTER + IDIVI D,3 + SKIPE E + TRO C,20000 +DCH1: MOVE D,T + MOVSS C + DPB D,[300600,,C] + PUSHJ P,DCH2 +DRELOC: HRRZ A,CHDBYT + HRRM A,CPLTBP + HRRM A,PLT2A + AOS A + HRRM A,PLT3 +DREL1: SUBI A,PLTE + HRRM A,MPVC + ADDI A,LPLTB + JUMPLE A,CPOPJ + PUSHJ P,COREXP + MOVE A,MPVC + SUBI A,2000 + HRRM A,MPVC +DRELE: .CLOSE USRC, + POPJ P, + +COREXP: AOS .+1 + .CORE PLTE_-12 + JRST .-1 + MOVEI T,2000 + ADDM T,DREL1 + POPJ P, + +DCHT: 4 + 14 + 6 + 0 + +DEFC: MOVEI C,0 + EXCH C,(A) + TLZ C,77 ;IGNORE INDIRECT AND INDEX BITS + LDB D,[300600,,C] ;GET BYTE LENGTH + JUMPE D,DEFEQ1 + CAIE D,4 + CAIN D,14 + JRST DCH2 + CAIN D,6 + POPJ P, +DCH2: DPB D,[300600,,CHDBYT] + MOVE T,CHDBYT + MOVEM T,(A) + IBP C + .ACCESS USRC,C + MOVEI E,0 + JRST DCH2B +DCH2A: IBP C + CAIE E,-B(C) +DCH2B: .IOT USRC,B + HRRI C,B + LDB T,C + IDPB T,CHDBYT + CAIN D,14 + ANDI T,7776 + JUMPN T,DCH2A + POPJ P, + +DEFEQ1: TLZA C,-1 +DEFEQ: HLRES C + ADDI C,CH0 + CAIL C,OASC + CAIL C,CH0+4*200 + POPJ P, ;CHARACTER NOT IN RANGE + POP C,(A) + POPJ P, + +DEFCHS: MOVSI T,2 ;BLOCK MODE BIT + XORM T,USRO + .OPEN USRC,USRO + POPJ P, + XORM T,USRO + HLRZM C,T + .ACCESS USRC,T + HRLI A,-200 + MOVE T,A + .IOT USRC,T + JUMPE T,DRELE + .OPEN USRC,USRO + POPJ P, + PUSHJ P,DEFC + AOBJN A,.-1 + JRST DRELOC + +CHDBYT: LASTBY + +SET: HLRE B,C ;HALF-WORD FORMAT + LSH C,-6 + ANDI C,7777 + CAIG C,MXSET + XCT SETTBL(C) + POPJ P, +SETTBL: HRRZM B,SC ;0: SET SCALE + HRRM B,HTAB ;1: SET HORIZONTAL TAB + HRRM B,LF ;2: SET LINE FEED + HRRM B,VTAB1 ;3: SET VERTICAL TAB + MOVEM B,X ;4: SET X + MOVEM B,Y ;5: SET Y + JRST GOX ;6: GO TO X=B + JRST GOY ;7: GO TO Y=B + JRST VECTX ;10: PLOT VECTOR (B,0) + JRST VECTY ;11: PLOT VECTOR (0,B) + JRST VSCX ;12: PLOT VECTOR (B*SC,0) + JRST VSCY ;13: PLOT VECTOR (0,B*SC) +MXSET==.-SETTBL + ;SIMULATE 340 +PSCOPE: PUSH SP,SC + PUSH DP,Z + PUSHJ P,PUSHC + LDB B,[110700,,C] + SKIPN B + SKIPA D,[40,,SCDOT] + XCT CPLOT + MOVEM D,PTCHAR + PUSH P,X + PUSH P,Y + TLO Z,LNGF + SETZB X,Y + MOVEI SC,1 + PUSHJ P,CPLOTA + MOVE SC,(SP) + MOVE A,X + MOVE B,Y + POP P,Y + POP P,X + TLZ Z,LNGF + JUMPE A,PSCP1 ;IF WIDTH 0, NOT A REAL CHARACTER + JUMPN B,PSCP1 ;IF HEIGHT NOT 0, NOT A REAL CHARACTER + SUBI A,2 ;CORRECT FOR 2-UNIT SPACE BETWEEN CHARACTERS + MOVEI B,6 ;SET UP REAL HEIGHT +PSCP1: MOVEM A,PTCHX + MOVEM B,PTCHY + MOVEI A,SCOPEC ;SET UP SCOPE CHARACTER SET + PUSHJ P,CHCAR0 + TRNE C,400 + MOVEI SC,2 + MOVEM SC,SCSC + MOVE A,SC + IMULI A,1777 + MOVEM A,SCEDGE + TRNE C,200 + PUSHJ P,DIR0 + TRNE C,100 + PUSHJ P,SCINIT +PSC1: TLNE Z,SNXTMF + JRST PSCPD ;RETURN IF NEXT MODE A LOSER + TRNE C,40 + JRST PSTART + MOVE F,C + PUSHJ P,NXTMOD + JRST PSCPD + TRNN C,20 + JRST PSCPD +SCRDWD: PUSHJ P,PLTOUT ;OUTPUT PLT BUFFER BEFORE GETTING NEXT SCOPE WORD + HRROI A,F + .IOT A + JUMPL A,LOGOUT + PUSHJ P,NXTMOD + JRST PSCPD + MOVSS F + PUSHJ P,NXTMOD + JRST PSCPD + JRST SCRDWD + +PSTART: .OPEN USRC,USRO ;SIMULATE .DSTART OR .DSTRTL + JRST PSCPD + TLO Z,SCPSTF + TRNE C,20 + TLOA Z,SCPLF + TLZ Z,SCPLF + HLRZM C,T + .ACCESS USRC,T + .IOT USRC,A + JUMPL A,SCNLNK ;NO LINK +PST0: HRRZM A,PSTLNK + HLRZS A + JUMPE A,PSTLK + .ACCESS USRC,A + .IOT USRC,A + TLNN Z,SCPLF + JRST PST0A + SOS A + .ACCESS USRC,A + .IOT USRC,A +PST0A: JUMPE A,PSTLK +PST1: HLROM A,PSTCNT + TLNN Z,SCPLF + AOS A + .ACCESS USRC,A +PST2: .IOT USRC,F + PUSHJ P,NXTMOD + JRST PSTLK1 + MOVSS F + PUSHJ P,NXTMOD + JRST PSTLK1 + PUSHJ P,PLTOUT + AOSE PSTCNT + JRST PST2 +PSTLK: SKIPN A,PSTLNK + JRST PSCPDC + .ACCESS USRC,A + .IOT USRC,A + JRST PST0 + +PSTLK1: PUSHJ P,SCINIT + JRST PSTLK + +SCNLNK: SETZM PSTLNK + JRST PST1 + +PSCPDC: .CLOSE USRC, + TLZ Z,SCPSTF +PSCPD: POP SP,SC + PUSHJ P,POPC + JRST POPD + +SCINIT: MOVEI T,SPARAM ;SIMULATE CONO DIS,100 + HRRM T,NXTMOD + TLZ Z,SNXTMF+SCCASF+SCDIRF + POPJ P, + +PTCHAR: 0 ;CHARACTER TO BE USED FOR POINT PLOTTING +PTCHX: 0 ;LENGTH OF PT CHARACTER +PTCHY: 0 ;HEIGHT OF PT CHARACTER + +SCSC: 0 ;SCOPE SCALE 0 +SCX: 0 ;X COORDINATE OF SCOPE POSITION +SCY: 0 ;Y COORDINATE OF SCOPE POSITION +SCEDGE: 0 ;COORDINATE OF EDGE OF SCOPE (1777*SCSC) + +PSTLNK: 0 ;NEXT LINK IN PSTART OR PSTRTL +PSTCNT: 0 ;BLKO COUNT FOR PSTART OR PSTRTL + +NXTMOD: JRST SPARAM + ;SCOPE PARAMETER MODE +SPARAM: TLNN F,100 + JRST SNOSC + LDB T,[260200,,F] + MOVE SC,SCSC + ASH SC,(T) ;SET SCALE +SNOSC: TLNN F,10 + JRST SNOINT + TLNE F,7 + TLZA Z,NOPENF ;IF NON-ZERO INTENSITY, LEAVE NO PEN MODE + PUSHJ P,NPENUP ;IF ZERO INTENSITY, PUT PEN UP AND ENTER NO PEN MODE +SNOINT: TLNE F,2000 + JRST SCDUN ;IF STOP FLAG, RETURN +NEWMOD: LDB T,[370300,,F] + MOVE T,SCMODT(T) + JUMPL T,SCDUN ;IF ILLEGAL MODE, RETURN +SNXMOD: HRRM T,NXTMOD +POPJ1: AOS (P) + POPJ P, + +SCDUN: TLZ Z,NOPENF ;LEAVE NO PEN MODE + TLO Z,SNXTMF ;SET NEXT MODE LOSES FLAG + JRST PENUP ;RETURN WITH PEN UP, DON'T SKIP + +SCMODT: SPARAM ;PARAMETER MODE + SPOINT ;POINT MODE + -1 + SCHAR ;CHARACTER MODE + SVECT ;VECTOR MODE + SVECTC ;VECTOR CONTINUE MODE + SINC ;INCREMENT MODE + -1 + ;SCOPE POINT MODE +SPOINT: MOVS T,F + ANDI T,1777 + IMUL T,SCSC + TLNE F,200000 + JRST SPTY +SPTX: MOVEM T,SCX + TLO Z,SCXF + JRST SPT1 +SPTY: MOVEM T,SCY + TLO Z,SCYF +SPT1: TLNN F,2000 ;INTENSIFY? + JRST NEWMOD ;NO, GET NEXT MODE +SPTINT: PUSHJ P,GETSXY ;YES + PUSH P,[NEWMOD] ;SET UP FOR RETURN TO GET NEXT MODE + TLNE F,100000 ;CHECK IF NEXT MODE VECTOR, VECTOR CONTINUE, OR INCREMENT + JRST SPT2 + MOVE A,PTCHX + IMUL A,SC + MOVE B,PTCHY + IMUL B,SC + ASH A,-1 + ASH B,-1 + SUB C,A + SUB D,B + PUSHJ P,USGOXY + MOVE D,PTCHAR + JRST CPLOTA ;PLOT POINT CHARACTER, RETURN TO GET NEXT MODE + +SPT2: PUSHJ P,USGOXY ;GO TO NEW COORDINATES +SCDOT: PUSHJ P,PENDN ;PLOT DOT, LEAVING PEN DOWN + EXCH SC,ONE + MOVE D,[DT] + PUSHJ P,NEXTI + EXCH SC,ONE + POPJ P, + +ONE: 1 ;SAVE SCALE HERE + +GETSXY: MOVE C,X ;GET SCOPE COORDINATES + MOVE D,Y + TLNE Z,SCXF + MOVE C,SCX + TLNE Z,SCYF + MOVE D,SCY + POPJ P, + ;SCOPE CHARACTER MODE +SCHAR: PUSHJ P,GETSXY + PUSHJ P,USGOXY + TLNE Z,SCDIRF + PUSHJ P,SCVT1 + HLLO C,F +SCH1: MOVEI B,0 + LSHC B,6 + TLNE Z,SCCASF + TRO B,100 + PUSHJ P,CPLOT + TRNE C,-1 + JRST SCH1 +SCHARE: AOS (P) + TLNN Z,SCDIRF + POPJ P, + JRST SCHZ1 + ;SCOPE VECTOR MODE +SVECT: TLNN F,77577 + JRST SVECTE ;IF (0,0), EXIT + PUSHJ P,GETSXY + MOVEM C,SCX + MOVEM D,SCY + LDB A,[220700,,F] + LDB B,[320700,,F] + IMUL A,SC + IMUL B,SC + TLNE F,200 ;SIGN-MAGNITUDE LOSSAGE + MOVNS A + TLNE F,100000 + MOVNS B + TLNN F,200000 ;INTENSIFY? + JRST SVECTN ;NO, GET NEW COORDINATES, EXIT + TLNE Z,SCXF+SCYF ;YES + JRST SVST ;MUST GO TO NEW COORDINATES + ADD C,A ;ALREADY THERE + ADD D,B +SVECT1: PUSHJ P,PENDN + PUSHJ P,GOXY +SVECTE: TLNN F,400000 + JRST POPJ1 +SGPAR: MOVEI T,SPARAM ;ESCAPE TO PARAMETER MODE + JRST SNXMOD + +SVECTN: ADDM A,SCX + ADDM B,SCY +SVINC: TLO Z,SCXF+SCYF + JRST SVECTE + +SVST: ADDM A,SCX + ADDM B,SCY + PUSHJ P,SVST1 + JRST SVECT1 + +SVCST: EXCH C,SCX + EXCH D,SCY +SVST1: LDB T,[220700,,F] ;VECTORS DON'T DISPLAY CURRENT POINT + LDB A,[320700,,F] + CAML T,A + TLOA Z,SVSF + EXCH T,A + MOVE B,T + ASHC A,-1 + DIV A,T + LSH A,1 + MUL A,SC ;DON'T CHANGE TO MULM--USES SETZ HACK + MOVE B,SC + TLZE Z,SVSF + EXCH A,B + TLNE F,200 + MOVNS A + TLNE F,100000 + MOVNS B + ADD C,A + ADD D,B + PUSHJ P,USGOXY + MOVE C,SCX + MOVE D,SCY + POPJ P, + ;SCOPE VECTOR CONTINUE MODE +SVECTC: TLNN F,77577 + JRST SGPAR ;IF (0,0), EXIT + PUSHJ P,GETSXY + MOVEM C,SCX + MOVEM D,SCY + LDB A,[220700,,F] + LDB B,[320700,,F] + MOVE E,SCEDGE + TLNN F,200 + SUBM E,C + HRLZS C + SKIPN A + TLOA A,377777 + IDIVM C,A + TLNN F,100000 + SUBM E,D + HRLZS D + SKIPN B + TLOA B,377777 + IDIVM D,B + CAMLE A,B + MOVE A,B + AOS E,A + LDB C,[220700,,F] + LDB D,[320700,,F] + IMUL C,E + IMUL D,E + HLRZS C + HLRZS D + TLNE F,200 + MOVNS C + TLNE F,100000 + MOVNS D + ADD C,SCX + ADD D,SCY + TLNN F,200000 ;INTENSIFY? + JRST SVCTCN ;NO + TLNE Z,SCXF+SCYF ;YES + PUSHJ P,SVCST ;MUST GO TO NEW COORDINATES +SVCTC1: PUSHJ P,PENDN ;ALREADY THERE + PUSHJ P,GOXY + MOVE C,X + MOVE D,Y +SVCTCN: CAIE C,0 + CAMN C,SCEDGE + TDC C,SCEDGE + MOVEM C,SCX + CAIE D,0 + CAMN D,SCEDGE + TDC D,SCEDGE + MOVEM D,SCY + TLO Z,SCXF+SCYF + JRST SGPAR + ;SCOPE INCREMENT MODE +SINC: PUSHJ P,GETSXY + TLNN F,200000 ;INTENSIFY? + JRST SINCNI ;NO + TLNE Z,SCXF+SCYF ;YES + PUSHJ P,USGOXY + MOVE T,[420400,,F] + MOVEI E,4 +SINCI: ILDB A,T + SKIPN A,INCTAB(A) + JRST SINCI1 + PUSHJ P,GODIRS + PUSHJ P,PENDN +SINCI1: SOJG E,SINCI + JRST SVECTE + +SINCNI: MOVE T,[420400,,F] + MOVEI E,4 + MOVEM X,SCX + MOVEM Y,SCY + MOVE X,C + MOVE Y,D + MOVE B,SC +SINCN1: ILDB A,T + SKIPN A,INCTAB(A) + JRST SINCN2 + XCT XTAB-10(A) + XCT YTAB-10(A) +SINCN2: SOJG E,SINCN1 + EXCH X,SCX + EXCH Y,SCY + JRST SVINC + +INCTAB: 0 + 0 + UP + DN + 0 + 0 + UP + DN + RT + RT + UR + DR + LT + LT + UL + DL + .INSRT SYSENG;AXPLOT > + +XYFORM: MOVS D,C ;X,Y FORMAT COMMANDS + MOVE B,D + ANDI B,3 + ASH C,-24 + ASH D,-24 + JRST .+1(B) + JRST SETXY + JRST GOXY + JRST VECTXY +VSCXY: IMUL C,SC ;PLOT VECTOR (C*SC,D*SC) + IMUL D,SC + JRST VECTXY + +SETXY: MOVEM C,X ;SET (X,Y) TO (C,D) + MOVEM D,Y +CPOPJ: POPJ P, + +USGOXY: PUSHJ P,PENUP +SGOXY: TLZ Z,SCXF+SCYF ;GO TO (C,D) +GOXY: SUB C,X + SUB D,Y +VECTXY: ADD X,C ;PLOT VECTOR (C,D) + ADD Y,D + TLNE Z,LNGF + POPJ P, + SKIPGE C + SKIPA A,CVRTAB+LT-10 + MOVE A,CVRTAB+RT-10 + ROT A,@CVRROT + ANDI A,17 + MOVMS C + SKIPGE D + SKIPA B,CVRTAB+DN-10 + MOVE B,CVRTAB+UP-10 + ROT B,@CVRROT + ANDI B,17 + MOVMS D + CAMLE C,D + JRST VECT1 + JUMPE D,CPOPJ + EXCH C,D + EXCH A,B +VECT1: MOVE E,C + ASHC D,-1 + DIV D,C + MOVSI E,100000 +VECT2: ADD E,D + MOVE T,A + TLZE E,200000 + TDO T,B + IDPB T,PLTBP + SOJG C,VECT2 + POPJ P, + +VSCX: IMUL B,SC ;PLOT VECTOR (B*SCALE,0) + JRST VECTX +GOX: SUB B,X ;GO TO (B,Y) +VECTX: JUMPE B,CPOPJ ;PLOT VECTOR (B,0) + ADD X,B + MOVEI A,RT + JUMPGE B,GODIR + MOVNS B + MOVEI A,LT + JRST GODIR + +VSCY: IMUL B,SC ;PLOT VECTOR (0,B*SC) + JRST VECTY +GOY: SUB B,Y ;GO TO (X,B) +VECTY: JUMPE B,CPOPJ ;PLOT VECTOR (0,B) + ADD Y,B + MOVEI A,UP + JUMPGE B,GODIR + MOVNS B + MOVEI A,DN + JRST GODIR + +CPLOT1: PUSH P,C + MOVEM D,TEMPBP' + TLNN D,1000 ;SEE IF CHARACTER SIX-BIT-DEFINED + JRST CSPLOT ;YES +CVPLOT: ILDB T,TEMPBP ;ROUTINE FOR INTERPRETING VECTOR-DEFINED CHARACTERS + TRNE T,1 + PUSHJ P,PENDN + TRZN T,1 + PUSHJ P,PENUP + JUMPE T,POPCJ + LDB C,[60500,,T] + LDB D,[10500,,T] + TRNE C,20 + ORCMI C,17 + TRNE D,20 + ORCMI D,17 + IMUL C,SC + IMUL D,SC + TRNE T,4000 + JRST CVPL1 + SKIPL C + AOS C + SKIPL D + AOS D + ASH C,-1 + ASH D,-1 +CVPL1: PUSHJ P,VECTXY + JRST CVPLOT + +CSPLOT: ILDB B,TEMPBP ;ROUTINE FOR INTERPRETING SIX-BIT-DEFINED CHARACTERS + JUMPE B,POPCJ + PUSHJ P,SPLOT + JRST CSPLOT + +CNTRL: MOVE D,[CTL] ;CONTROL CHARACTER + PUSH P,B + PUSHJ P,NEXTI + POP P,B + TRO B,100 + JRST CPLOT + +BACKSP: JUMPLE X,CPOPJ ;BACKSPACE + MOVNI B,6 + IMUL B,SC + JRST VECTX + +HTAB: MOVEI B,6*10 ;HORIZONTAL TAB + IMUL B,SC + MOVE A,B + IDIVM X,B + AOS B + IMUL B,A + JRST GOX + +LF: MOVNI B,10. ;LINE FEED + IMUL B,SC + JRST VECTY + +VTAB: JUMPLE Y,CPOPJ ;VERTICAL TAB +VTAB1: MOVEI B,10.*10 + IMUL B,SC + MOVE A,B + SOS B + IDIVM Y,B + IMUL B,A + JRST GOY + +FF: ANDI Y,3777 ;FORM FEED + ADDI Y,4400 + MOVEI B,4000 + JRST GOY + +CR0: MOVEI B,0 ;CARRIAGE RETURN + JRST GOX + +SCSHFO: TLOA Z,SCCASF ;SCOPE SHIFT OUT +SCSHFI: TLZ Z,SCCASF ;SCOPE SHIFT IN + POPJ P, + +SCESC: MOVEI T,SCHARE-1 ;SCOPE ESCAPE CHARACTER + MOVEM T,(P) ;SGPAR SKIPS + JRST SGPAR + +SCHORZ: TLZN Z,SCDIRF ;SCOPE HORIZONTAL + POPJ P, +SCHZ1: MOVEI A,3 + JRST DIR + +SCVERT: TLOE Z,SCDIRF ;SCOPE VERTICAL + POPJ P, +SCVT1: MOVEI A,1 + JRST DIR + DEFINE CVTBG D,A + W==0 + IRP B,,[A] + W==W_4+B + TERMIN + CVTB!D=.OP W,8 + CVTB!D +TERMIN + +CVRTAB: CVTBG RT,[.RT,.UP,.LT,.DN,.LT,.DN,.RT,.UP] + CVTBG UP,[.UP,.LT,.DN,.RT,.UP,.LT,.DN,.RT] + CVTBG LT,[.LT,.DN,.RT,.UP,.RT,.UP,.LT,.DN] + CVTBG DN,[.DN,.RT,.UP,.LT,.DN,.RT,.UP,.LT] + CVTBRT\CVTBUP + CVTBUP\CVTBLT + CVTBLT\CVTBDN + CVTBDN\CVTBRT + +XTAB: ADD X,B + JFCL + SUB X,B + JFCL + ADD X,B + SUB X,B + SUB X,B + ADD X,B + +YTAB: JFCL + ADD Y,B + JFCL + SUB Y,B + ADD Y,B + ADD Y,B + SUB Y,B + SUB Y,B + LENGTH: TLO Z,LNGF ;GET NET LENGTH AND HEIGHT OF CHARACTER IN B + PUSH P,X + PUSH P,Y + PUSHJ P,CPLOT + MOVE A,X + MOVE B,Y + POP P,X + POP P,Y + TLZ Z,LNGF + SUB A,X + SUB B,Y + POPJ P, ;AND RETURN RESULTS IN A AND B RESPECTIVELY + +PLTOUT: MOVE T,PLTBP ;OUTPUT CURRENT BUFFER OF PLOTTER COMMANDS TO PLT DEVICE IN BLOCK MODE + MOVEI A,0 ;LAST WORD MUST BE FILLED OUT WITH 0'S +PLT1: TLNN T,760000 + JRST PLT2 + IDPB A,T + JRST PLT1 +PLT2: MOVNS T +PLT2A: MOVSI T,PLTBUF-1(T) + JUMPE T,CPOPJ +PLT3: HRRI T,PLTBUF + .IOT PLTC,T + MOVE T,CPLTBP + MOVEM T,PLTBP + POPJ P, + +UUOTAB: REPEAT NUUO-UUOMIN,CONC UUO,\UUOMIN+.RPCNT, +VARIABLES +CONSTANTS + +CPLTBP: 700,,PLTBUF-1 +PLTBP: IPLTBP ;BUFFER BYTE POINTER + +DEFINE TBGN A3,A4 + A3!A4 + IF1,A3!A4==0 +TERMIN + +OASC: REPEAT 200,TBGN OC,\.RPCNT + REPEAT 200,TBGN OCL,\.RPCNT + +NASC: REPEAT 140,TBGN NC,\.RPCNT + REPEAT 40,TBGN NCL,\.RPCNT+100 + +CH0: BLOCK 1000 + +SCOPEC: REPEAT 100,TBGN SC,\.RPCNT + REPEAT 100,TBGN SCL,\.RPCNT + +AXC: REPEAT 100,TBGN AX,\.RPCNT + +DEFINE I A1,A5,A2 + A1!A5=. + IRP A,,[A2] + A + TERMIN + 0 +TERMIN + +DEFINE J A1,A5,A2 + A1!A5=<.&770000777777>\1400000000 + IRP A,,[A2] + A + TERMIN + 0 + 0 + 0 + 0 +TERMIN + +DEFINE TBGN2 A + NC!A=40,,CNTRL +TERMIN + +DEFINE AEQB A1,A2,B1,B2 + A1!A2=B1!B2 +TERMIN + +DD==1 +PU==2 +PD==4 +RT==10 +UP==11 +LT==12 +DN==13 +UR==14 +UL==15 +DL==16 +DR==17 + .BYTE 4 + +DT: IRP A,,[UP,DR,LT,LT,UR,DN,DN,UL,RT,RT,DL,UP,0] + \A + TERMIN + +CTL: IRP A,,[DL,PD,UP,UP,UP,UP,UP,UP,UP,UP,RT,RT,RT,RT,RT,PU,DL,DL,DL,DL,DN,DN,DN,0] + \A + TERMIN + +; I NC,\"A,[PD,UP,UP,UP,UP,UR,UR,DR,DR,DN,DN,LT,LT,LT,LT,RT,RT,RT,RT,DN,DN,PU,RT,RT] + I NC,\"B,[UP,UP,UP,PD,RT,RT,RT,UR,UP,UL,LT,LT,LT,DN,DN,DN,DN,DN,DN,RT,RT,RT,UR,UP,UL,PU,DR,DR,DR] + I NC,\"C,[UR,UR,UR,UR,UP,PD,UL,LT,LT,DL,DN,DN,DN,DN,DR,RT,RT,UR,PU,DR,RT] + I NC,\"D,[PD,UP,UP,UP,UP,UP,UP,RT,RT,RT,DR,DN,DN,DN,DN,DL,LT,LT,LT,PU,RT,RT,RT,RT,RT,RT] + I NC,\"E,[UR,UR,UR,UR,UP,UP,PD,LT,LT,LT,LT,DN,DN,DN,RT,RT,RT,LT,LT,LT,DN,DN,DN,RT,RT,RT,RT,PU,RT,RT] + I NC,\"F,[PD,UP,UP,UP,RT,RT,RT,LT,LT,LT,UP,UP,UP,RT,RT,RT,RT,PU,DR,DR,DN,DN,DN,DN] + I NC,\"G,[UR,UR,UR,UR,UP,PD,UL,LT,LT,DL,DN,DN,DN,DN,DR,RT,RT,UR,DN,UP,UP,UP,LT,LT,PU,DR,DR,DR,RT] + I NC,\"H,[PD,UP,UP,UP,UP,UP,UP,DN,DN,DN,RT,RT,RT,RT,UP,UP,UP,DN,DN,DN,DN,DN,DN,PU,RT,RT] + I NC,\"I,[RT,PD,RT,RT,LT,UP,UP,UP,UP,UP,UP,LT,RT,RT,PU,DR,DR,DR,DN,DN,DN] + I NC,\"J,[UP,UP,PD,DN,DR,RT,RT,UR,UP,UP,UP,UP,UP,PU,DR,DR,DN,DN,DN,DN] + I NC,\"K,[PD,UP,UP,UP,UP,UP,UP,DN,DN,DN,DN,UR,,UR,UR,UR,DL,DL,DL,DR,DR,DR,PU,RT,RT] + I NC,\"L,[UP,UP,UP,UP,UP,UP,PD,DN,DN,DN,DN,DN,DN,RT,RT,RT,RT,PU,RT,RT] +; I NC,\"M,[PD,UP,UP,UP,UP,UP,UP,DR,DR,UR,UR,DN,DN,DN,DN,DN,DN,PU,RT,RT] +; I NC,\"N,[PD,UP,UP,UP,UP,UP,UP,DR,DR,DR,DR,UP,UP,UP,UP,DN,DN,DN,DN,DN,DN,PU,RT,RT] + I NC,\"O,[RT,PD,UL,UP,UP,UP,UP,UR,RT,RT,DR,DN,DN,DN,DN,DL,LT,LT,PU,RT,RT,RT,RT,RT] + I NC,\"P,[PD,UP,UP,UP,UP,UP,UP,RT,RT,RT,DR,DN,DL,LT,LT,LT,PU,DR,DR,DR,RT,RT,RT] + I NC,\"Q,[RT,PD,UL,UP,UP,UP,UP,UR,RT,RT,DR,DN,DN,DN,DN,DL,LT,LT,PU,UR,RT,PD,DR,PU,RT,RT] +; I NC,\"R,[PD,UP,UP,UP,UP,UP,UP,RT,RT,RT,DR,DN,DL,LT,LT,LT,RT,DR,DR,DR,PU,RT,RT] + I NC,\"S,[UP,PD,DR,RT,RT,UR,UP,UL,LT,LT,UL,UP,UR,RT,RT,DR,PU,DR,DR,DN,DN,DN] + I NC,\"T,[RT,RT,PD,UP,UP,UP,UP,UP,UP,LT,LT,RT,RT,RT,RT,PU,DR,DR,DN,DN,DN,DN] + I NC,\"U,[UP,UP,UP,UP,UP,UP,PD,DN,DN,DN,DN,DN,DR,RT,RT,UR,UP,UP,UP,UP,UP,PU,DR,DR,DN,DN,DN,DN] +; I NC,\"V,[UP,UP,UP,UP,UP,UP,PD,DN,DN,DN,DN,DR,DR,UR,UR,UP,UP,UP,UP,PU,DR,DR,DN,DN,DN,DN] +; I NC,\"W,[UP,UP,UP,UP,UP,UP,PD,DN,DN,DN,DN,DN,DN,UR,UR,DR,DR,UP,UP,UP,UP,UP,UP,PU,DR,DR,DN,DN,DN,DN] +; I NC,\"X,[PD,UP,UR,UR,UR,UR,UP,DN,DL,DL,UL,UL,UP,DN,DR,DR,DR,DR,DN,PU,RT,RT] +; I NC,\"Y,[UP,UP,UP,UP,UP,UP,PD,DN,DN,DR,DR,DN,DN,UP,UP,UR,UR,UP,UP,PU,DR,DR,DN,DN,DN,DN] +; I NC,\"Z,[UP,UP,UP,UP,UP,UP,PD,RT,RT,RT,RT,DN,DL,DL,DL,DL,DN,RT,RT,RT,RT,PU,RT,RT] + I NCL,\"A,[UP,UP,UP,PD,UR,RT,RT,DR,DN,DN,DL,LT,LT,UL,UR,RT,RT,RT,DN,DN,PU,RT,RT] + I NCL,\"B,[PD,UP,UP,UP,UP,UP,UP,DN,DN,DN,UR,RT,RT,DR,DN,DN,DL,LT,LT,UL,PU,DR,RT,RT,RT,RT,RT] + I NCL,\"C,[UR,UR,UR,RT,PD,UL,LT,LT,DL,DN,DN,DR,RT,RT,UR,PU,DR,RT] + I NCL,\"D,[RT,RT,RT,RT,PD,UP,UP,UP,UP,UP,UP,DN,DN,DN,UL,LT,LT,DL,DN,DN,DR,RT,RT,UR,PU,DR,RT] + I NCL,\"E,[UP,UP,PD,RT,RT,RT,RT,UP,UL,LT,LT,DL,DN,DN,DR,RT,RT,UR,PU,DR,RT] + I NCL,\"F,[RT,PD,UP,UP,UP,LT,RT,RT,RT,LT,LT,UP,UP,UR,RT,DR,PU,DR,DR,DN,DN,DN] + I NCL,\"G,[DN,PD,DR,RT,RT,UR,UP,UP,UP,UP,UL,LT,LT,DL,DN,DN,DR,RT,RT,UR,PU,DR,RT] + I NCL,\"H,[PD,UP,UP,UP,UP,UP,UP,DN,DN,DN,UR,RT,RT,DR,DN,DN,DN,PU,RT,RT] + I NCL,\"I,[RT,PD,RT,RT,LT,UP,UP,UP,UP,LT,PU,UR,DD,DR,DR,DR,DR,DN] + I NCL,\"J,[DN,PD,DR,RT,UR,UP,UP,UP,UP,UP,PU,UP,DD,DR,DR,DR,DN,DN] + I NCL,\"K,[RT,PD,UP,UP,UP,UP,UP,UP,DN,DN,DN,DN,DN,UR,,UR,UR,DL,DL,DR,DR,PU,RT,RT] + I NCL,\"L,[RT,PD,RT,RT,LT,UP,UP,UP,UP,UP,UP,LT,PU,DR,DR,DR,DR,DR,DN] + I NCL,\"M,[PD,UP,UP,UP,UP,DN,UR,DR,DN,DN,DN,UP,UP,UP,UR,DR,DN,DN,DN,PU,RT,RT] + I NCL,\"N,[PD,UP,UP,UP,UP,DN,UR,RT,RT,DR,DN,DN,DN,PU,RT,RT] + I NCL,\"O,[RT,PD,UL,UP,UP,UR,RT,RT,DR,DN,DN,DL,LT,LT,PU,RT,RT,RT,RT,RT] + I NCL,\"P,[UP,PD,DR,RT,RT,UR,UP,UP,UL,LT,LT,DL,UP,DN,DN,DN,DN,DN,DN,PU,UR,UR,RT,RT,RT,RT] + I NCL,\"Q,[UR,RT,RT,RT,PD,DL,LT,LT,UL,UP,UP,UR,RT,RT,DR,UP,DN,DN,DN,DN,DN,DN,PU,UR,UR] + I NCL,\"R,[RT,PD,UP,UP,UP,UP,DN,UR,RT,DR,PU,DR,DR,DN] + I NCL,\"S,[UP,PD,DR,RT,RT,UR,UL,LT,LT,UL,UR,RT,RT,DR,PU,DR,DR,DN] + I NCL,\"T,[UR,UR,UR,UP,PD,LT,LT,LT,RT,UP,DN,DN,DN,DN,DR,RT,UR,PU,DR,RT] + I NCL,\"U,[UP,UP,UP,UP,PD,DN,DN,DN,DR,RT,RT,UR,DN,UP,UP,UP,UP,PU,DR,DR,DN,DN] +; I NCL,\"V,[UP,UP,UP,UP,PD,DN,DN,DR,DR,UR,UR,UP,UP,PU,DR,DR,DN,DN] +; I NCL,\"W,[UP,UP,UP,UP,PD,DN,DN,DN,DN,UR,UR,DR,DR,UP,UP,UP,UP,PU,DR,DR,DN,DN] + I NCL,\"X,[PD,UR,UR,UR,UR,DL,DL,UL,UL,DR,DR,DR,DR,PU,RT,RT] +; I NCL,\"Y,[UP,UP,UP,UP,PD,DN,DN,DR,DR,DL,DL,UR,UR,UR,UR,UP,UP,PU,DR,DR,DN,DN] + I NCL,\"Z,[UP,UP,UP,UP,PD,RT,RT,RT,RT,DL,DL,DL,DL,RT,RT,RT,RT,PU,RT,RT] + I NC,\"@,[UR,UR,UR,PD,DL,LT,UP,UR,RT,DN,DN,UR,UP,UL,LT,LT,DL,DN,DN,DR,RT,RT,UR,PU,DR,DR] + I NC,\"0,[UP,PD,UR,UR,UR,UR,UL,LT,LT,DL,DN,DN,DN,DN,DR,RT,RT,UR,UP,UP,UP,UP,PU,DR,DR,DN,DN,DN] + I NC,\"1,[RT,PD,RT,RT,LT,UP,UP,UP,UP,UP,UP,DL,PU,DR,DR,DR,DR,DR] +; I NC,\"2,[UP,UP,UP,UP,UP,PD,UR,RT,RT,DR,DN,DL,DL,DL,DL,RT,RT,RT,RT,PU,RT,RT] + I NC,\"3,[UP,PD,DR,RT,RT,UR,UP,UL,LT,LT,RT,RT,UR,UP,UL,LT,LT,DL,PU,DR,DR,DR,DR,DR,RT] +; I NC,\"4,[RT,RT,RT,RT,PD,UP,UP,UP,UP,UP,UP,DL,DL,DL,DL,RT,RT,RT,RT,PU,DR,DR] + I NC,\"5,[UP,PD,DR,RT,RT,UR,UP,UP,UL,LT,LT,DL,UP,UP,UP,RT,RT,RT,RT,PU,DR,DR,DN,DN,DN,DN] +; I NC,\"6,[UP,UP,UP,PD,RT,RT,RT,DR,DN,DL,LT,LT,UL,UP,UP,UP,UP,UR,RT,RT,DR,PU,DR,DR,DN,DN,DN] +; I NC,\"7,[RT,PD,UP,UP,UR,UR,UR,UP,LT,LT,LT,LT,PU,DR,DR,DR,DR,DR,DR] + I NC,\"8,[UR,UP,UP,PD,RT,RT,UR,UP,UL,LT,LT,DL,DN,DR,DL,DN,DR,RT,RT,UR,UP,UL,PU,DR,DR,DR] +; I NC,\"9,[UP,PD,DR,RT,RT,UR,UP,UP,UP,UP,UL,LT,LT,DL,DN,DR,RT,RT,RT,PU,DR,DR,DN] + I NC,\" ,[RT,RT,RT,RT,RT,RT] + I NC,\"!,[RT,DD,UP,PD,UP,UP,UP,UP,UP,PU,DR,DR,DR,DR,DR,DN] + I NC,\"",[UR,UP,UP,UP,PD,UP,UP,PU,RT,RT,PD,DN,DN,PU,DR,DR,DR,DN] + I NC,\"#,[UR,PD,UP,UP,UP,UP,DN,LT,RT,RT,RT,RT,LT,UP,DN,DN,DN,DN,UP,RT,LT,LT,LT,LT,PU,DR,DR,RT,RT,RT,RT] + I NC,\"$,[UP,UP,PD,DR,RT,RT,UR,UL,LT,LT,UL,UR,RT,RT,DR,UL,LT,UP,DN,DN,DN,DN,DN,DN,PU,RT,RT,RT,RT] + I NC,\"%,[UP,PD,UR,UR,UR,UR,PU,LT,LT,PD,UL,DL,DR,UR,PU,DR,DN,DN,PD,DL,DR,UR,UL,PU,DR,DR,RT] + I NC,\"&,[UR,UR,RT,RT,PD,DL,DL,LT,UL,UP,UR,RT,UR,UP,UL,DL,DN,DN,DR,DR,DR,PU,RT,RT] + I NC,\"',[UR,UP,UP,UP,UP,PD,UR,UR,PU,DR,DR,DR,DN,DN,DN,DN] +; I NC,\"(,[RT,RT,RT,PD,UL,UP,UP,UP,UP,UR,PU,DR,DR,DR,DN,DN,DN] +; I NC,\"),[RT,PD,UR,UP,UP,UP,UP,UL,PU,DR,DR,DR,DR,DR,DN] +; I NC,\"*,[UP,PD,UR,UR,UR,UR,DL,DL,UP,UP,DN,DN,DN,DN,UP,UP,RT,RT,LT,LT,LT,LT,RT,RT,UL,UL,DR,DR,DR,DR,PU,DR,RT] + I NC,\"+,[UR,RT,PD,UP,UP,UP,UP,DN,DN,LT,LT,RT,RT,RT,RT,PU,DR,DR,DN] + I NC,\",,[DR,PD,UR,UP,LT,DN,RT,PU,RT,RT,,RT,RT] + I NC,\"-,[UP,UP,UP,PD,RT,RT,RT,RT,PU,DR,DR,DN] + I NC,\".,[RT,PD,UP,RT,DN,LT,PU,RT,RT,RT,RT,RT] +; I NC,\"/,[UP,PD,UR,UR,UR,UR,PU,DR,DR,DN,DN,DN] + I NC,\":,[UR,PD,RT,DN,LT,UP,PU,UR,UP,PD,UP,LT,DN,RT,PU,DR,DR,DR,RT] + I NC,\";,[DR,PD,UR,UP,LT,DN,RT,PU,UP,UP,UP,PD,UP,LT,DN,RT,PU,DR,DR,DR,RT] +; I NC,\"<,[UR,RT,RT,PD,UL,UL,UR,UR,PU,DR,DR,DR,DN,DN] + I NC,\"=,[UR,UR,UR,UR,PD,LT,LT,LT,LT,PU,DN,DN,PD,RT,RT,RT,RT,PU,DR,DR] +; I NC,\">,[UR,PD,UR,UR,UL,UL,PU,DR,DR,DR,DR,DR] + I NC,\"?,[RT,RT,DD,UP,PD,UP,UR,UR,UP,UL,LT,LT,DL,PU,DR,DR,DR,DR,DR,RT] + I NC,133,[RT,RT,RT,PD,LT,UP,UP,UP,UP,UP,UP,RT,PU,DR,DR,DR,DN,DN,DN] +; I NC,\"\,[UP,UP,UP,UP,UP,PD,DR,DR,DR,DR,PU,DR,RT] + I NC,135,[RT,PD,RT,UP,UP,UP,UP,UP,UP,LT,PU,DR,DR,DR,DR,DR,DN] + I NC,\"^,[UP,UP,UP,UP,UP,PD,UR,UR,DR,DR,PU,DR,DR,DN,DN,DN] + I NC,\"_,[DL,PD,RT,RT,RT,RT,RT,RT,PU,UR] + I NCL,\"@,[UR,UP,UP,UP,UP,UP,UP,PD,DR,DR,PU,DR,DR,DR,DN,DN] + I NCL,133,[RT,RT,RT,PD,UL,UP,UL,UR,UP,UR,PU,DR,DR,DR,DN,DN,DN] + I NCL,\"\,[RT,RT,PD,UP,UP,UP,UP,UP,UP,PU,DR,DR,DR,DR,DN,DN] + I NCL,135,[RT,PD,UR,UP,UR,UL,UP,UL,PU,DR,DR,DR,DR,DR,DN] + I NCL,\"^,[UP,UP,UP,UP,UP,UP,PD,UR,DR,DR,UR,PU,DR,DR,DN,DN,DN,DN] + I NCL,137,[UP,PD,UP,UP,UP,UP,RT,RT,RT,RT,DN,DN,DN,DN,LT,LT,LT,LT,PU,DR,RT,RT,RT,RT,RT] + REPEAT 40,TBGN2 \.RPCNT + I NC,7,[UR,RT,PD,UP,LT,LT,UP,UR,UP,RT,UP,DN,RT,DN,DR,DN,LT,LT,PU,DR,DR,RT,RT] + I NC,33,[RT,RT,PD,UP,UL,DR,UR,UL,DN,DN,UR,UL,UL,UR,DN,DN,UL,UR,DR,UL,UP,RT,DR,DN,DN,DN,DN,DL,LT,LT,UL,UP,UP,UP,UP,UR,RT,PU,DR,DR,DR,DR,DN,DN] + I SC,\"',[UR,UR,UP,UP,PD,UP,UP,PU,DR,DR,DR,DR,DN,DN] + I SCL,41,[UP,UP,PD,UR,UR,DR,DR,PU,DR,DR] + I SCL,42,[UP,UP,UP,UP,PD,DR,DR,UR,UR,PU,DR,DR,DN,DN] + I SCL,43,[UP,UP,UP,PD,UR,DR,DR,UR,PU,DR,DR,DN] + I SCL,44,[UP,PD,RT,RT,RT,UR,UP,UP,UL,LT,LT,LT,PU,DR,DR,DR,DR,DR,RT] + I SCL,45,[UR,UR,UR,UR,UP,PD,LT,LT,LT,DL,DN,DN,DR,RT,RT,RT,PU,DR,RT] + I SCL,46,[UR,RT,PD,UP,UP,UP,UP,DL,UR,DR,PU,DR,DR,DR,DN] + I SCL,47,[UP,UP,UP,PD,RT,RT,RT,RT,UL,DR,DL,PU,DR,DR,RT] + I SCL,50,[UR,UR,UP,UP,UP,PD,DN,DN,DN,DN,UL,DR,UR,PU,DR,DR,RT] + I SCL,51,[UR,UP,PD,UL,UR,DL,RT,RT,RT,RT,PU,DR,DR,DN] + I SCL,57,[UR,UR,UR,PD,UP,LT,DN,RT,PU,DR,DR,DR,RT] + I SCL,60,[DN,PD,RT,RT,RT,RT,PU,UR,RT] + I SCL,61,[UP,UP,UP,UP,UP,UP,UP,PD,RT,RT,RT,RT,PU,DR,DR,DN,DN,DN,DN,DN] + I SCL,64,[UL,UL,UL,UL,UL,UP,DD,RT,RT,DD,DR,DR,DR,DN,DN,DN] + I SCL,65,[UL,UL,UL,UL,UL,UP,PD,UR,UR,PU,DR,DR,DR,DN,DN,DN,DN,DN] + I SCL,66,[UL,UL,UL,UL,UL,UP,UP,UP,PD,DR,DR,PU,DR,DR,DR,DN,DN,DN] + I SCL,67,[UL,UL,UL,UL,UL,UL,PD,UR,UR,DR,DR,PU,DR,DR,DN,DN,DN,DN] + I SCL,70,[PD,RT,RT,RT,RT,RT,RT,PU,RT] + I SCL,71,[PD,UP,UP,UP,UP,UP,UP,UP,UP,UP,UP,PU,UP] + I SCL,75,[DL,DL,DL,DL,DL,DL,DN,DN,DN,DN,DN] + I AX,\"*,[UR,UP,PD,UR,UR,PU,LT,LT,PD,DR,DR,PU,DR,DR,RT] + I AX,\".,[DD,RT,RT] +.BYTE +.BYTE 1,5,5,1 + J NC,\"A,[1,2,6,1,1,2,-6,1,1,-3,2,0,1,2,0,1,1,3,-2,0] + J NC,\"M,[1,0,6,1,1,2,-4,1,1,2,4,1,1,0,-6,1,1,2,0,0] + J NC,\"N,[1,0,6,1,1,4,-6,1,1,0,6,1,1,2,-6,0] + J NC,\"R,[1,0,6,1,1,3,0,1,1,1,-1,1,1,0,-1,1,1,-1,-1,1,1,-3,0,1,1,2,0,1,1,2,-3,1,1,2,0,0] + J NC,\"V,[1,0,6,0,1,2,-6,1,1,2,6,1,1,2,-6,0] + J NC,\"W,[1,0,6,0,1,1,-6,1,1,1,4,1,1,1,-4,1,1,1,6,1,1,2,-6,0] + J NC,\"X,[1,4,6,1,1,-4,0,0,1,4,-6,1,1,2,0,0] + J NC,\"Y,[1,2,0,0,1,0,3,1,1,-2,3,1,1,4,0,0,1,-2,-3,1,1,4,-3,0] + J NC,\"Z,[1,0,6,0,1,4,0,1,1,-4,-6,1,1,4,0,1,1,2,0,0] + J NCL,\"V,[1,0,4,0,1,2,-4,1,1,2,4,1,1,2,-4,0] + J NCL,\"W,[1,0,4,0,1,1,-4,1,1,1,3,1,1,1,-3,1,1,1,4,1,1,2,-4,0] + J NCL,\"Y,[1,0,-2,0,1,1,0,1,1,3,6,1,1,-4,0,0,1,2,-4,1,1,4,0,0] + J NC,\"2,[1,0,5,0,1,1,1,1,1,2,0,1,1,1,-1,1,1,0,-1,1,1,-1,-1,1,1,-2,-1,1,1,-1,-1,1,1,0,-1,1,1,4,0,1,1,2,0,0] + J NC,\"4,[1,3,0,0,1,0,6,1,1,-3,-4,1,1,4,0,1,1,2,-2,0] + J NC,\"6,[1,0,2,0,1,1,1,1,1,2,0,1,1,1,-1,1,1,0,-1,1,1,-1,-1,1,1,-2,0,1,1,-1,1,1,1,0,2,1,1,1,2,1,1,2,1,1,1,3,-6,0] + J NC,\"7,[1,1,0,0,1,3,6,1,1,-4,0,1,1,6,-6,0] + J NC,\"9,[1,1,0,0,1,2,1,1,1,1,2,1,1,0,2,1,1,-1,1,1,1,-2,0,1,1,-1,-1,1,1,0,-1,1,1,1,-1,1,1,2,0,1,1,1,1,1,1,2,-4,0] + J NC,\"(,[1,3,0,0,1,-1,2,1,1,0,2,1,1,1,2,1,1,3,-6,0] + J NC,\"),[1,1,0,0,1,1,2,1,1,0,2,1,1,-1,2,1,1,5,-6,0] + J NC,\"*,[1,2,1,0,1,0,4,1,1,2,-1,0,1,-4,-2,1,1,0,2,0,1,4,-2,1,1,2,-2,0] + J NC,\"/,[1,4,6,1,1,2,-6,0] + J NC,\"<,[1,4,5,0,1,-4,-2,1,1,4,-2,1,1,2,-1,0] + J NC,\">,[1,0,1,0,1,4,2,1,1,-4,2,1,1,6,-5,0] + J NC,\"\,[1,0,6,0,1,4,-6,1,1,2,0,0] +REPEAT 33,AEQB OC,\.RPCNT+100,NC,\.RPCNT+100 +REPEAT 33,AEQB SC,\.RPCNT,NC,\.RPCNT+100 +REPEAT 7,AEQB SC,\.RPCNT+40,NC,\.RPCNT+40 +REPEAT 30,AEQB SC,\.RPCNT+50,NC,\.RPCNT+50 +REPEAT 32,AEQB SCL,\.RPCNT+1,NCL,\.RPCNT+101 +REPEAT 12,AEQB AX,\.RPCNT+60,NC,\.RPCNT+60 + AEQB AX,\"+,NC,\"+ + AEQB AX,\"-,NC,\"- + NC10=(40)BACKSP + NC11=(40)HTAB + NC12=(40)LF + NC13=(40)VTAB + NC14=(40)FF + NC15=(40)CR0 + SC33=NC12 + SC34=NC15 + SC35=(40)SCSHFI + SC36=(40)SCSHFO + SC37=(40)SCESC + SCL33=SC33 + SCL34=SC34 + SCL35=SC35 + SCL36=SC36 + SCL37=SC37 + SCL40=SC40 + SCL52=NC134 + SCL53=NC133 + SCL54=NC135 + SCL55=NCL133 + SCL56=NCL135 + SCL62=NCL134 + SCL63=NC7 + SCL72=NC10 + SCL73=(40)SUBSCR + SCL74=(40)SCHORZ + SCL76=(40)SCVERT + SCL77=(40)SUPSCR + AX2=(40)AXUSUP + AX4=(40)AXSUP +LASTBY=. +.BYTE + PLTBUF: .BYTE 7 ;BUFFER FOR BLOCK ASCII MODE OUTPUT TO PLT DEVICE + .PD + .PU + REPEAT 2222.,.DN + REPEAT 80.,.UP + .BYTE +IPLTBP=700,,.-1 +PLTE=<<.+1777>_<-12>>_12 +PLTL==PLTE-PLTBUF + +END START + \ No newline at end of file diff --git a/src/syseng/axplot.48 b/src/syseng/axplot.48 new file mode 100755 index 00000000..0b96e62f --- /dev/null +++ b/src/syseng/axplot.48 @@ -0,0 +1,1092 @@ +U=F+1 +AX=U+1 +AY=AX+1 +AZ=AY+1 ;UNUSED + + UUOGEN PIT + +APIT: SKIPN AXPLIF + JRST AIN + MOVE A,UUOA + .IOT USRC,@40 + JRST 2,@UUOH + + UUOGEN IN + +AIN: MOVE A,UUOA + HRROS 40 + .IOT 40 + SKIPL 40 + JRST 2,@UUOH +UEOF: MOVE C,[ASCII \EOF?\] ;END OF FILE? + JRST LUZ + +AXUSRO: HLRZ T,C + MOVEM T,AXPLIF' + JUMPE T,POPJ1 + .OPEN USRC,USRO + POPJ P, + TLO Z,AXPLTF + .ACCESS USRC,T + AOS (P) + POPJ P, + +AXPLOT: MOVEM XYP,XYPM + PUSH SP,SC + MOVEM SP,SPM + PUSHJ P,PUSHC + MOVEM CP,CPM + MOVEM DP,DPM +AXPL1: TRNE C,40 + JRST AXPLT1 ;PLOT A SINGLE AXIS, ETC. + PUSHJ P,AXUSRO ;PLOT COORDINATE SYSTEM + JRST AXDONE + LDB F,[140300,,C] + MOVE F,AXPLTC(F) + HRRM F,XYCORD + MOVEM F,AXF' + .PIT A + FMPRI A,(200.0) + MOVEM A,ORGX + .PIT A + FMPRI A,(200.0) + MOVEM A,ORGY + .PIT ORGU + .PIT ORGV + TLO Z,AXCF + LDB F,[250300,,F] + PUSHJ P,AXINIT + PUSHJ P,APL + LDB F,[220300,,AXF] + PUSHJ P,AXINIT + PUSHJ P,APL + JRST AXDONE + +AXPLT1: LDB F,[60300,,C] + JRST @AXPLT(F) + +AXPLTA: TLZ Z,AXCF + SETZM ORGX + SETZM ORGY +AXPLTB: PUSHJ P,AXUSRO + JRST AXDONE + LDB F,[170300,,C] ;AXIS CODE + PUSHJ P,AXINIT + PUSHJ P,APL +AXDONE: MOVE DP,DPM + MOVE CP,CPM + MOVE SP,SPM + MOVE XYP,XYPM + .CLOSE USRC, + TLZ Z,AXPLTF + POP SP,SC + JRST POPC + +XYPM: 0 +SPM: 0 +CPM: 0 +DPM: 0 + +AXPLT: AXPLTA ;TABLE OF COMMANDS + AXPLTB + COPLTI + COPLOT + PLTFPT + AXDONE + AXDONE + AXDONE + +AXINIT: .PIT A + TRNE A,77 + LDB SC,[600,,A] + TRNN A,100 + TLZA Z,AXSYMF + TLO Z,AXSYMF + SETZM HCLOCK + TRNE A,200 + AOS HCLOCK + TRNE A,400 + MOVNS HCLOCK + SETZM LABEL + TRNN A,1000 + JRST @AXINT(F) + AOS LABEL + TRNE A,2000 + MOVNS B,LABEL + IMULM B,HCLOCK + TRNN A,4000 + TLZA Z,AXEF + TLO Z,AXEF + LDB B,[140400,,A] + HRRM B,NDECPL + JRST @AXINT(F) + +AXPLTC: 02,,XYC + 03,,XLYC + 12,,LXYC + 13,,LXLYC + 46,,RTHC + 56,,LRTHC + 77,,CPOPJ + 77,,CPOPJ + +AXINT: AXINX + AXINLX + AXINY + AXINLY + AXINR + AXINLR + AXINTH + POPJ1 + +AXIN: .PIT A + MOVEM A,UMIN + .PIT B + MOVEM B,UMAX + .PIT C ;DU + .PIT D ;LENGTH (IN INCHES) / DU + FMPRI D,(200.0) + POPJ P, + +AXINXY: PUSHJ P,AXIN + FDVR D,C + FDVRI C,(10.0) + MOVEM C,DU + MOVE E,[DDVTBL,,DIVTBL] + BLT E,DIVTBL+3 + JRST APLD + +AXINL: PUSHJ P,AXIN + MOVEM C,LDU + MOVSI E,-9 +AXINLL: MOVE U,LOGF2(E) + FMPR U,D + SETZM LAXIT(E) + CAML U,[80.0] + AOSA LAXIT(E) + CAML U,[40.0] + AOSA LAXIT(E) + CAML U,[20.0] + AOSA LAXIT(E) + CAML U,[8.0] + AOS LAXIT(E) + AOBJN E,AXINLL + PUSHJ P,LOG10 + MULI A,400 + TSC A,A + ASH B,-21-200(A) + AOS B ;ROUND + HLLZ U,B + FSC U,211 ;CHARACTERISTIC + HRRZ A,B + FSC A,211 ;MANTISSA + PUSHJ P,TENEXP + MULI A,400 + ASH B,-243(A) ;1 THRU 9 + MOVE C,LAXIT-1(B) + MOVE F,LAXIT + MOVEI E,1 + MOVEM E,DIVTBL + MOVE E,@ILDVTP(F) + MOVE F,ILDVTE(F) + BLT E,DIVTBL(F) + SETOM DIVTBL+1(F) + MOVE E,[DIVTBL,,DVTBL] + BLT E,DVTBL+1(F) + MOVEM B,LGINT + CAIE B,1 + SKIPN LDU + AOS F + MOVE A,U + PUSHJ P,TENEXP + MOVEM A,LGPTEN + FSC B,233 + FMPR B,A + MOVEM B,UMIN + FADR B,A + FDVR A,IDUT(C) + MOVEM A,DU + FSC A,-1 + FSBR B,A + MOVEM B,UMAX2 + MOVE A,UMIN + POPJ P, + +IFN 0,[ +LOGF1: 0.0 + 0.3010299957 + 0.4771212547 + 0.6020599913 + 0.6989700043 + 0.7781512504 + 0.8450980400 + 0.9030899870 + 0.9542425094 +LOGF10: 1.0000000000 +] +LOGF2: 0.3010299957 + 0.1760912591 + 0.1249387366 + 0.0969100130 + 0.0791812460 + 0.0669467896 + 0.0579919470 + 0.0511525224 + 0.0457574906 + +LAXIT: BLOCK 9 + +IDUT: 1.0 ;INVERSE DU TABLE + 2.0 + 5.0 + 10.0 + 20.0 + +LDVT00:LDVT10:LDVT42: 1 +LDVT22:LDVT32: 5 +LDVT43: 1 +LDVT33: 5 +LDVT11: 2 +LDVT20:LDVT30:LDVT40: 1 +LDVT41: 1 +LDVT21:LDVT31: 1 +LDVT44: 2 + 5 + 2 + +ILDVTE: 0 + 1 + 2 + 2 + 3 + +ILDVTP: ILDVT0(C) + ILDVT1(C) + ILDVT2(C) + ILDVT3(C) + ILDVT4(C) + +ILDVT0: LDVT00,,DIVTBL+1 +ILDVT1: LDVT10,,DIVTBL+1 + LDVT11,,DIVTBL+1 +ILDVT2: LDVT20,,DIVTBL+1 + LDVT21,,DIVTBL+1 + LDVT22,,DIVTBL+1 +ILDVT3: LDVT30,,DIVTBL+1 + LDVT31,,DIVTBL+1 + LDVT32,,DIVTBL+1 + LDVT33,,DIVTBL+1 +ILDVT4: LDVT40,,DIVTBL+1 + LDVT41,,DIVTBL+1 + LDVT42,,DIVTBL+1 + LDVT43,,DIVTBL+1 + LDVT44,,DIVTBL+1 + +AXINX: PUSHJ P,AXINXY + TLNN Z,AXCF + JRST AXINX1 + MOVN A,ORGX + FDVR A,D + FADR A,ORGU +AXINX1: MOVEM A,X0 + MOVEM D,XUNITL + MOVEI E,XAXCU + HRRM E,UCORD + POPJ P, + +AXINY: PUSHJ P,AXINXY + TLNN Z,AXCF + JRST AXINY1 + MOVN A,ORGY + FDVR A,D + FADR A,ORGV +AXINY1: MOVEM A,Y0 + MOVEM D,YUNITL + MOVEI E,YAXCU + HRRM E,UCORD + POPJ P, + +AXINLX: PUSHJ P,AXINL + TLNN Z,AXCF + JRST AXILX1 + MOVE A,ORGU + PUSHJ P,LOG10 + MOVE E,ORGX + FDVR E,D + FSBR A,E +AXILX1: MOVEM A,X0 + MOVEM D,XUNITL + MOVEI E,XLGCU + HRRM E,UCORD + POPJ P, + +AXINLY: PUSHJ P,AXINL + TLNN Z,AXCF + JRST AXILY1 + MOVE A,ORGV + PUSHJ P,LOG10 + MOVE E,ORGY + FDVR E,D + FSBR A,E +AXILY1: MOVEM A,Y0 + MOVEM D,YUNITL + MOVEI E,YLGCU + HRRM E,UCORD + POPJ P, + +AXINR: PUSHJ P,AXINXY + TLNE Z,AXCF + MOVE A,ORGU +AXINR1: MOVEM A,R0 + MOVEI E,RAXCU +AXINR2: HRRM E,UCORD + MOVEM D,RUNITL + .PIT A + MOVE C,A + PUSHJ P,COS + FMPR A,D + MOVEM A,RUNITX + MOVE A,C + PUSHJ P,SIN + FMPR A,D + MOVEM A,RUNITY + POPJ P, + +AXINLR: PUSHJ P,AXINL + MOVE E,A + TLNN Z,AXCF + JRST AXILR1 + MOVE A,ORGU + PUSHJ P,LOG10 + FSBR E,A + FMPR E,D + FADR E,ORGX +AXILR1: MOVEM E,X0 + MOVEI E,RLGCU + JRST AXINR2 + +AXINTH: .PIT UMIN + .PIT UMAX + .PIT A + TLNN Z,AXCF + JRST AXINT1 + HRRZ B,XYCORD + CAIN B,LRTHC + PUSHJ P,LOG10 + FSBR A,R0 + FMPR A,RUNITL + TRNA +AXINT1: FMPRI A,(200.0) + MOVEM A,RAD + TLZ A,600777 + MULI A,120 + JUMPE A,POPJ1 + MOVN B,A + HRLI B,THDVTBL+3(B) + HRRI B,DIVTBL+1 + BLT B,DIVTBL+2(A) + MOVEI B,1 + MOVEM B,DIVTBL + MOVE C,DTH-1(A) + MOVEM C,DU + MOVEI E,THCORD + HRRM E,UCORD + JRST APLD + +COPLLF==AXSYME ;1==>PLOT A LINE ALSO WHEN PLOTTING CHARACTERS +COPLPF==AXSYMF ;1==>LEAVE PEN IN A POSITION TO CONTINUE + +PLTFPT: PUSHJ P,AXUSRO ;PRINT A FLOATING POINT NUMBER + JRST AXDONE + LDB A,[140400,,C] + HRRM A,NDECPL + TRNN C,200000 + TLZA Z,AXEF + TLO Z,AXEF + .PIT U + MOVE F,[700,,UCHARS-1] + PUSHJ P,UCVT + MOVE F,[700,,UCHARS-1] + PUSHJ P,STPLOT + JRST AXDONE + +PLTCH: 0 ;PLOTTING CHARACTER +PLTCHX: 0 +PLTCHY: 0 + +COPLOT: PUSHJ P,AXUSRO ;PLOT LOTS OF POINTS + JRST AXDONE + PUSHJ P,COPLI + .PIT NPTS' + .PIT A + HLRZM A,DXPTS' + HRRZM A,XPTS' + .PIT A + HLRZM A,DYPTS' + HRRZM A,YPTS' + SKIPLE NPTS + .OPEN USRC,USRO + JRST AXDONE + TLO Z,AXPLTF +COPLT1: .ACCESS USRC,XPTS + .IOT USRC,AX + .ACCESS USRC,YPTS + .IOT USRC,AY + PUSHJ P,COPLT + MOVE A,DXPTS + ADDM A,XPTS + MOVE A,DYPTS + ADDM A,YPTS + SOSE NPTS + JRST COPLT1 + TLNN Z,COPLPF + PUSHJ P,PENUP + JRST AXDONE + +COPLTI: HLRZM C,NPTS + PUSHJ P,COPLI +COPLII: MOVE A,[-2,,AX] + .IOT A + JUMPL A,UEOF + PUSHJ P,COPLT + SOSLE NPTS + JRST COPLII + PUSHJ P,PENUP + JRST AXDONE + +COPLT: PUSHJ P,XYCORD + PUSHJ P,XYFIX + SKIPE PLTCH + JRST PPLTCH + PUSHJ P,GOXY + JRST PENDN + +COPLI: TRNN C,200000 ;INITIALIZE FOR PLOTTING POINTS + TLZA Z,COPLLF + TLO Z,COPLLF + TRNN C,400000 + TLZA Z,COPLPF + TLO Z,COPLPF + LDB B,[110700,,C] + MOVEM B,PLTCH + JUMPE B,CPOPJ + PUSH P,X + PUSH P,Y + TLO Z,LNGF + SETZB X,Y + PUSHJ P,CPLOT + TLZ Z,LNGF + JUMPE X,COPLI1 + JUMPN Y,COPLI1 + SUB X,SC + SUB X,SC + MOVE Y,SC + IMULI Y,6 +COPLI1: ASH X,-1 + MOVEM X,PLTCHX + ASH Y,-1 + MOVEM Y,PLTCHY + POP P,Y + POP P,X + POPJ P, + +PPLTCH: TLNN Z,COPLLF ;PLOT PLOTTING CHARACTER + JRST PPLCH1 + PUSHJ P,GOXY + PUSHJ P,PENUP + MOVE XYP,XYPM + PUSHJ P,PUSHXY + MOVN C,PLTCHX + MOVN D,PLTCHY + PUSHJ P,VECTXY + SKIPE B,PLTCH + PUSHJ P,CPLOT + PUSHJ P,POPXY + JRST PENDN + +PPLCH1: PUSHJ P,PENUP ;NO LINE + SUB C,PLTCHX + SUB D,PLTCHY + PUSHJ P,GOXY + MOVE B,PLTCH + JRST CPLOT + APLD: MOVEI F,0 ;SET UP DIVISION TABLE FOR HASH MARKS +APLD1: MOVE A,DIVTBL(F) + MOVEM A,DVTBL(F) + JUMPL A,CPOPJ + AOJA F,APLD1 + +APL: MOVE A,SC + FSC A,233 + MOVEM A,SCALE +APLA: PUSHJ P,PENUP + MOVE U,UMIN + FSB U,DU + PUSHJ P,UCORD + MOVEM AX,XM' + MOVEM AY,YM' + MOVE U,UMIN + PUSHJ P,UCORD ;GET X(U),Y(U) + PUSHJ P,VPLOT ;GO THERE + PUSHJ P,PENDN +APL0: PUSH P,AX + PUSH P,AY + MOVEM U,UM' + FAD U,DU + PUSHJ P,UCORD + JUMPE F,GTINC ;F=O => NO HASH MARKS NOW + PUSH P,AX ;CALCULATE DERIVATIVES (SLOPE, CURVATURE) FOR HASH MARKS + PUSH P,AY + FSBR AX,XM + FSBR AY,YM + SKIPLE HCLOCK + MOVNS AX + SKIPGE HCLOCK + MOVNS AY + PUSH P,AX + PUSH P,AY + SKIPE HCLOCK + JRST GSQ + MOVN AX,-5(P) + FADRM AX,XM + FADR AX,-3(P) + MOVN AY,-4(P) + FADRM AY,YM + FADR AY,-2(P) + FMPR AX,YM + FMPR AY,XM + CAML AX,AY + MOVNS -1(P) + CAMGE AX,AY + MOVNS (P) + CAMN AX,AY + TLOA Z,AXSYME + TLZ Z,AXSYME + MOVE AX,-1(P) + MOVE AY,(P) +GSQ: FMPR AX,AX + FMPR AY,AY + FADRB AX,AY +SQ1: MOVE A,AY + FDVRM AX,AY + FADR AY,A + FSC AY,-1 + CAME AY,A + JRST SQ1 + POP P,AX + POP P,AY + SKIPGE DVTBL(F) + SETOM LBLFLG' + FSC F,235 + FDVR F,A + FMPR F,SCALE + FMPR AX,F + FMPR AY,F + PUSHJ P,VIPLT2 + TLNE Z,AXSYME+AXSYMF + PUSHJ P,VIPLT2 + POP P,AY + POP P,AX +GTINC: POP P,YM + POP P,XM + CAMLE U,UMAX + JRST PENUP ;DONE + PUSHJ P,VPLOT + MOVEI F,0 +APL1: SOSE DVTBL(F) ;CHECK HASH MARKING + JRST APL0 + MOVE A,DIVTBL(F) + MOVEM A,DVTBL(F) + AOJA F,APL1 + +VPLOT: PUSHJ P,XYFIX + JRST GOXY + +VIPLT2: PUSHJ P,VIPLOT + SKIPLE LABEL + PUSHJ P,LBL + MOVNS AX + MOVNS AY + PUSHJ P,VIPLOT + SKIPGE LABEL + JRST LBL + POPJ P, + +VIPLOT: PUSHJ P,XYFIX + JRST VECTXY + +XYFIX: MOVE B,AX + MOVE C,AY + FAD B,[0.5] + FAD C,[0.5] + MULI C,400 + TSC C,C + ASH D,-243(C) + MULI B,400 + TSC B,B + ASH C,-243(B) + POPJ P, + +LBL: AOSE LBLFLG + POPJ P, + PUSHJ P,PENUP + MOVE F,[700,,UCHARS-1] + PUSHJ P,UCVT + MOVEI B,0 + IDPB B,F + PUSH P,AX + PUSH P,AY + PUSH P,U + MOVE SP,SPM + PUSHJ P,STRLNG + MOVEM A,LNGTH' + MOVE C,-2(P) + MOVE D,-1(P) + MOVEI A,0 + CAMGE C,D + ADDI A,RL + MOVNS D + CAMGE C,D + ADDI A,2*RL + MOVE F,[700,,UCHARS-1] + PUSHJ P,L0(A) + POP P,U + POP P,AY + POP P,AX + POPJ P, + +STRLNG: PUSH P,X + PUSH P,Y + TLO Z,LNGF + MOVE F,[700,,UCHARS-1] + PUSHJ P,STPLOT + MOVE A,X + MOVE B,Y + POP P,Y + POP P,X + TLZ Z,LNGF + SUB A,X + SUB B,Y + POPJ P, + +STP1: PUSHJ P,CPLOT +STPLOT: ILDB B,F + JUMPN B,STP1 + POPJ P, + +AXUSUP: POP SP,SC ;UNSUPERSCRIPT + JRST SUBSCR + +AXSUP: PUSHJ P,SUPSCR ;SUPERSCRIPT + PUSH SP,SC + ASH SC,1 + ADDI SC,1 + IDIVI SC,3 + POPJ P, + RL==13 + +L0: MOVEI C,2 + MOVNI D,3 + PUSHJ P,VSCXY + PUSHJ P,STPLOT + MOVN C,SC + IMULI C,2 + SUB C,LNGTH + MOVE D,SC + IMULI D,3 + PUSHJ P,VECTXY + JRST PENDN +LOC L0+RL + +L1: PUSHJ P,L12 + MOVE D,SC + IMULI D,2 + PUSHJ P,L21 + MOVN D,SC + IMULI D,2 + PUSHJ P,VECTXY + JRST PENDN +DTH: 0.261799388 ;DO NOT MOVE + 0.0872664626 ;THIS + 0.0174532925 ;CODE +LOC L1+RL + +L2: PUSHJ P,L12 + MOVN D,SC + IMULI D,10 + PUSHJ P,L21 + MOVE D,SC + IMULI D,10 + PUSHJ P,VECTXY + JRST PENDN +LOC L2+RL + +L3: MOVN C,LNGTH + MOVN D,SC + IMULI D,3 + PUSHJ P,VECTXY + PUSHJ P,STPLOT + MOVEI C,0 + MOVEI D,3 + PUSHJ P,VSCXY + JRST PENDN + +L12: MOVE C,LNGTH + ASH C,-1 ;1/2+-1 + SUBM SC,C + POPJ P, + +L21: PUSHJ P,VECTXY + PUSHJ P,STPLOT + MOVN C,LNGTH + ASH C,-1 ;1/2-+1 + SUB C,SC + POPJ P, + +UCVT: MOVEI A,AXC + HRRM A,CPLOT + MOVE C,UM + JUMPG C,FP1 + JUMPE C,FP1A + MOVNS C + MOVEI B,"- + IDPB B,F + +FP1: MOVEI B,3 ;NULL CHARACTER + IDPB B,F + TLNE Z,AXEF + JRST FP4 +FP1A: MOVEI E,0 +FP3: MULI C,400 + ASHC D,-243(C) + MOVE C,D + PUSHJ P,FP7 +NDECPL: MOVNI C,. ;(RH)=# DECIMAL PLACES + JUMPE C,FP3B + MOVEI B,". + IDPB B,F +FP3A: MOVE D,E + MULI D,10. + PUSHJ P,FP7B + AOJL C,FP3A +FP3B: TLNN E,200000 + POPJ P, + +FROUND: MOVE A,F +FRND1: LDB B,F + CAIN B,". + JRST FRND2 + CAIN B,3 ;NULL CHARACTER + MOVEI B,"0 + CAIE B,"9 + AOJA B,FRNDED + MOVEI B,"0 + DPB B,F +FRND2: IBP F + IBP F + IBP F + IBP F + SOJA F,FRND1 + +FRNDED: DPB B,F + MOVE F,A + POPJ P, + +FP4: MOVEM F,UCVTD + CAMGE C,FT + TDZA D,D + MOVEI D,1 + MOVNI A,6 + MOVEI E,0 +FP4A: ADDI E,1(E) + XCT FCP(D) + SOSA E + FDVR C,@FCP(D) +FP4B: AOJN A,FP4A + JUMPN D,FP4B1 + MOVNS E + FMPRI C,(10.0) + CAMGE C,FT1 + SOJA E,FP4B1 + FDVRI C,(10.0) +FP4B1: PUSH P,E + PUSHJ P,FP3 + POP P,C + LDB B,UCVTD + CAIE B,3 + AOJA C,FP4D +FP4C: MOVEI B,"* + IDPB B,F + MOVEI B,"1 + IDPB B,F + MOVEI B,"0 + IDPB B,F + MOVEI B,4 ;SUPERSCRIPT + IDPB B,F + PUSHJ P,FP7S + MOVEI D,2 ;UNSUPERSCRIPT + JRST FP7C + +FP4D: MOVEI B,". ;ROUNDED UP TO EXTRA DIGIT IN E MODE + IDPB B,UCVTD + MOVEI B,"0 + IDPB B,UCVTD + IBP F + IBP F + IBP F + IBP F + SOJA F,FP4C + +FP7S: JUMPGE C,FP7 + MOVNS C + MOVEI D,"- + IDPB D,F +FP7: IDIVI C,10. + HRLM D,(P) + JUMPE C,FP7A + PUSHJ P,FP7 +FP7A: HLRZ D,(P) +FP7B: TRO D,"0 +FP7C: IDPB D,F + POPJ P, + + 1.0^40 + 1.0^20 + 1.0^10 + 1.0^4 + 1.0^2 +FT1: 1.0^1 +FT: 1.0^0 + 1.0^-40 + 1.0^-20 + 1.0^-10 + 1.0^-4 + 1.0^-2 + 1.0^-1 +FT0: +FCP: CAMLE C,FT0(A) + CAMGE C,FT(A) + +UCVTD: 0 ;SAVED BYTE POINTER POINTING TO NULL CHARACTER (3) + +SCALE: 1.0 + +HCLOCK: 0 ;1==>HASH MARKS CLOCKWISE, -1==>HASH MARKS COUNTERCLOCKWISE + +LABEL: 0 ;-1 OR 1=>LABELED AXES, - FOR OPPOSITE HASH MARKS + +DDVTBL: 1 + 5 + 2 + -1 + +THDVTB: 5 + 3 + 3 + 2 + -1 + +DIVTBL: BLOCK 10 +DVTBL: BLOCK 10 + +UCHARS: BLOCK 5 + +ORGX: 0 ;PLOTTER X COORDINATE OF ORIGIN +ORGY: 0 ;PLOTTER Y COORDINATE OF ORIGIN + +ORGU: 0 ;U COORDINATE OF ORIGIN +ORGV: 0 ;V COORDINATE OF ORIGIN + +UMIN: 0 ;INITIAL U +UMAX: 0 ;FINAL U +DU: 0 ;DELTA U + +XYCORD: JRST CPOPJ + +UCORD: JRST CPOPJ + +XYC: FSBR AX,X0 + FSBR AY,Y0 + FMPR AX,XUNITL + FMPR AY,YUNITL + POPJ P, + +LXYC: MOVE A,AX + PUSHJ P,LOG10 + MOVE AX,A + JRST XYC + +XLYC: MOVE A,AY + PUSHJ P,LOG10 + MOVE AY,A + JRST XYC + +LXLYC: MOVE A,AY + PUSHJ P,LOG10 + MOVE AY,A + JRST LXYC + +LRTHC: MOVE A,AX + PUSHJ P,LOG10 + MOVE AX,A + JRST RTHC + +RTHC: FSBR AX,R0 + FMPR AX,RUNITL +RTHC1: MOVE A,AY + PUSHJ P,SIN + FMPR A,AX + EXCH A,AY + PUSHJ P,COS + FMPR AX,A + FADR AX,ORGX + FADR AY,ORGY + POPJ P, + +XLGCU: PUSHJ P,LGCU + SKIPA AX,A +XAXCU: MOVE AX,U +XAXCU1: FSBR AX,X0 + FMPR AX,XUNITL + MOVE AY,ORGY + POPJ P, + +X0: 0 ;X COORDINATE AT PLOTTER X=0 +XUNITL: 0 ;PLOTTER LENGTH (IN STEPS) OF ONE X UNIT + +YLGCU: PUSHJ P,LGCU + SKIPA AY,A +YAXCU: MOVE AY,U +YAXCU1: FSBR AY,Y0 + FMPR AY,YUNITL + MOVE AX,ORGX + POPJ P, + +Y0: 0 +YUNITL: 0 + +RLGCU: MOVE A,U + PUSHJ P,LOG10 + SKIPA AX,A +RAXCU: MOVE AX,U + FSBR AX,R0 + MOVE AY,AX + FMPR AX,RUNITX + FMPR AY,RUNITY + FADR AX,ORGX + FADR AY,ORGY + POPJ P, + +R0: 0 +RUNITL: 0 +RUNITX: 0 +RUNITY: 0 + +THCORD: MOVE AX,RAD + MOVE AY,U + JRST RTHC1 + +RAD: 0 ;RADIUS OF THETA AXIS + +LGCU: MOVE A,U + CAMGE U,UMAX2 + JRST LOG10 + AOS B,LGINT + CAIG B,9 + JRST LGCU1 + MOVEI B,1 + MOVEM B,LGINT + MOVSI T,(10.0) + FMPRM T,LGPTEN +LGCU1: MOVE C,LAXIT-1(B) + MOVE D,LAXIT + MOVEI E,1 + MOVEM E,DIVTBL + MOVE E,@ILDVTP(D) + MOVE D,ILDVTE(D) + BLT E,DIVTBL(D) + SETOM DIVTBL+1(D) + MOVE E,[DVTBL,,DVTBL+1] + BLT E,DVTBL+1(D) + AOS DVTBL+1(D) + CAIE B,1 + SKIPN LDU + SETOM DVTBL+1(D) + MOVE T,LGPTEN + FSC B,233 + FMPR B,T + FADR B,T + FDVR T,IDUT(C) + MOVEM T,DU + FSC T,-1 + FSBR B,T + MOVEM B,UMAX2 + JRST LOG10 + +UMAX2: 0 ;NEXT PLACE TO SWITCH DIVTBL +LDU: 0 ;DU FROM USER. 0==> LABEL EVERY INTEGER +LGINT: 0 ;CURRENT INTEGER +LGPTEN: 0 ;CURRENT POWER OF TEN + +LOG: JUMPE A,LOGOF0 ;LOG BASE 2 + MOVEM B,LOGT1' + ASHC A,-33 + FSC A,233 + FSBRI A,(128.5) + MOVEM A,LOGT2' + ASH B,-10 + TLC B,200000 + MOVE A,B + FADR A,[0.707106781187] ;SQRT 2 + FSBR B,[0.707106781187] + FDVR B,A + MOVEM B,LOGT3' + FMPR B,B + MOVE A,[0.5989786496] + FMPR A,B + FADR A,[0.9614706323] + FMPR A,B + FADR A,[2.8853912903] + FMPR A,LOGT3 + FADR A,LOGT2 + SKIPA B,LOGT1 +LOGOF0: MOVSI A,400000 + POPJ P, + +LOG10: PUSHJ P,LOG + FMPR A,[0.3010299957] ;LOG10 2 + POPJ P, + +LN: PUSHJ P,LOG + FMPR A,[0.69314718056] ;LN 2 + POPJ P, + +TENEXP: FMPR A,[2.302585093] +EXP: PUSHJ P,EXPM1 + FADRI A,(1.0) + POPJ P, + +EXPM1: MOVM T,A + CAMG T,[154400,,] + POPJ P, + FSC A,-1 + PUSHJ P,EXPM1 + MOVE T,A + FADRI T,(2.0) + FMPR A,T + POPJ P, + +COS: FADR A,[1.57079632679] ;PI/2 +SIN: MOVM T,A ;ARG IN A + CAMG T,[.00017] + POPJ P, ;SIN X = X, WITHIN 27 BITS + FDVRI A,(-3.0) + PUSHJ P,SIN ;SIN -X/3 + FMPR T,T + FSC T,2 + FADRI T,(-3.0) + FMPRB A,T ;SIN X = 4(SIN -X/3)^3-3(SIN -X/3) + POPJ P, ;SIN IN A, SIN OR ABS(SIN) IN T + + +  \ No newline at end of file