A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rka / paroff / plot1.ra
1 /THIS IS A SET OF PLOTTING ROUTINES THAT ARE VERY SIMILAR TO THE CALCOMP
2 /SET OF PLOTTING ROUTINES, BUT ARE WRITTEN FOR A PDP8E WITH AN EAE.
3 /
4 //WRITTEN BY JONATHAN R. GROSS
5 /SOCIAL SCIENCES RESEARCH FACILITIES CENTER
6 /25 BLEGEN HALL
7 /UNIVERSITY OF MINNESOTA, WEST BANK
8 /MINNEAPOLIS, MINNESOTA 55455
9 /
10 / NOVEMBER 1973
11 /
12 / PAGE0 FIELD 1 LAYOUT
13 /
14 /LOCATIONS 160-176 ON PAGE ZERO FIELD ONE ARE USED BECAUSE THE IS NO
15 /OTHER WAY I COULD THINK OF TO GENERATE A 12BIT ADDRESS FOR THE MODE B
16 /INSTRUCTIONS OF THE EAE. (TAKE NOTE DEC!)
17 /
18 COMMZ #PAGE0 /SAME AS SYSTEM
19 /
20 ORG 160 /START OF SECOND USER AREA
21 #DX, 0;0 /DP DX
22 DX=160
23 #DY, 0;0 /DP DY
24 DY=162
25 /
26 / THE REST ARE VALUES FOR LINE GENERATION
27 /
28 NT=164
29 NC=166
30 NR=170
31 NA=172
32 DAC=174
33 /
34 ORG 176
35 BZFLG, 0 /PLOTTING IN PROGRESS
36 /
37 /
38 /
39 / THIS IS THE PDP LINE GENERATION ROUTINE
40 /
41 /EDUCATE RALF
42 SWAB=7431
43 SWBA=7447
44 SHL=7413
45 DAD=7443
46 DST=7445
47 DLD=7663
48 DPIC=7573
49 DCM=7575
50 DPSZ=7451
51 CAM=7621
52 MQA=7501
53 MQL=7421
54 SWP=7521
55 /
56 FIELD1 #GENL
57 #DELTA, 0
58 CLL CLA CMA RAR /3777 /FOR SIGN TEST
59 SWAB /GO TO CORRECT MODE
60 TADZ DX /HIGH ORGER X
61 MQA /OR PRODUCES 7777 ON NEG. DX
62 DCA XSGN
63 TADZ DY
64 MQA
65 DCA YSGN
66 DLD; DX
67 SWP /ORDER OF EAE REVERSED FROM FPP
68 SPA /GET ABS(DX)
69 DCM
70 DST; DX
71 DLD; DY
72 SWP
73 SMA /GET -(ABS(DY))
74 DCM
75 DST; DY
76 DAD; DX /COMPARE DX AND DY
77 SMA CLA /EXCHANGE IF DY IS GREATER
78 JMP OK /NO EXCHANGE
79 DLD; DY
80 DCM /DY WAS STORED AS NEG
81 DST; DAC /TEMP
82 DLD; DX
83 DCM
84 DST; DY
85 DLD; DAC
86 DST; DX
87 CLL CLA CMA /-1 FOR FLAG
88 OK, DCA ESWCH /EXCHANGE SWITCH
89 /
90 / THIS TESTS THE VALUE OF IPEN
91 /
92 /A VALUE OF 2 MEANS THE LINE IS DRAWN WITH THE PEN DOWN
93 / A VALUE OF THREE MEANS THAT THE MOVE IS MADE WITH THE PEN UP
94 /ANYTHING ELSE PRODUCES NO CHANGE IN THE PEN STATUS
95 CLA CLL IAC RAL /2
96 AND IPEN /XR0
97 SNA CLA /COULD IT BE A 2 OR 3 ?
98 JMP NOPEN /NO
99 CLL CLA IAC /1
100 AND IPEN /TEST FOR 3
101 SZA CLA /SKIP ON 2
102 CLA CLL CMA RAL /-2 WILL PRODUCE A PEN UP COMMAND
103 TAD PENCO
104 NOPEN, DCA IPEN /SAVE IT
105 /
106 /THE NEXT CODE IS ONCE ONLY
107 /
108 PINIT, JMS% ONQI2+1 /ADDD IOT TO SKIP CHAIN
109 6501 /INSTRUCTION FOR SKIP
110 ADDR EXEC /SERVICE ROUTINE ADDRESS
111 TAD JMPIN /GET INSTRUCTION TO JUMP AROUND INIT
112 DCA PINIT
113 6507 /ENABLE INTERUPTS
114 JMPIN, JMP .+1
115 JMS% WAITR+1 /WAIT FOR LAST LINE TO FINISH
116 DLD; DY /PROCEDE
117 SHL; 1 /TIMES 2
118 DST; NR /NR=2*(DY) WHERE (DY)=-DY
119 DLD; DX
120 DST; NA
121 DCM
122 DST; NC /COUNT IS NEG.
123 DCM /RESTORE
124 SHL; 1
125 DST; NT /NT=2*DX
126 CAM
127 TAD MY /MINUS Y MOVE
128 ISZ YSGN /SKIP ON
129 RAR /MAKE INTO POSATIVE Y
130 MQL /SAVE
131 CLL CLA IAC RTL /0004 IS THE MINUS X BIT
132 ISZ XSGN /MAKE +X ?
133 RAL /YES
134 ISZ ESWCH /WERE THEY EXCHANGED
135 SWP /NO, SO PUT MINOR MOVE INTO AC
136 MQA /MAKE A COMBINED MOVE
137 DCA COMB
138 SWP /MAJOR MOVE
139 DCA MAJ
140 ISZZ BZFLG /SET GOING
141 TAD IPEN /GET PEN MOVE
142 SNA /ZERO MEANS NO CHANGE
143 JMP NULL
144 CIA /SEE IF IT IS ALREADY CORRECT
145 TAD PENL /COMPARE WITH LAST MOVE
146 SZA CLA /SKIP IF SAME
147 JMP .+3 /DIFFERENT
148 NULL, 6506 /MOVE NOWHERE, BUT GENERATE A FAST INTERUPT
149 JMP .+4
150 TAD IPEN /MOVE PEN UP OR DOWN
151 DCA .+1
152 PENL, HLT
153 CIF CDF 0 /INTERUPTS WILL TAKE IT FROM HERE
154 JMP% #DELTA
155 PENCO, 6505
156 MY, 40 /MINUS Y MOVE
157 IPEN, 0 /PEN CODE AND XR0
158 XSGN, 0 /SIGN OF X AND XR1
159 YSGN, 0
160 ESWCH, 0
161 MAJ, /MAJOR PLOTTER MOVE
162 WAITR, ADDR #WAIT
163 EXTERN ONQI /SYSTEM ROUTINE TO ENTER SKIP CHAIN
164 COMB, /COMBINED PLOTTER MOVE
165 ONQI2, ADDR ONQI /SYSTEM ROUTINE
166 /
167 /
168 / THIS IS THE FORTRAN INTERFACE TO THE PLOTTER
169 /
170 /THE CALL IS:
171 /
172 / CALL DELTAP(DX,DY,IABS(IPEN))
173 /
174 / WHERE DX IS THE DIFFERENCE BETWEEN THE CURRENT PEN POSITION AND THE
175 /END POINT OF THE DESIRED LINE MEASURED ALLONG THE X AXIS,
176 / DY IS THE DIFFERENCE MEASURED ALLONG THE Y AXIS,
177 /AND IPEN IS THE PEN CONTROL VALUE
178 /
179 ENTRY DELTAP
180 BDELTA, F 0.0 /BASE PAGE
181 XPOINT, F 0.0 /POINTERS TO ARGS
182 YPOINT, F 0.0 /POINTERS TO ARGS
183 PPOINT, F 0.0 /POINTERS TO ARGS
184 DELTAP, BASE 0 /SO FLDA 30 AND 0 INSTRUCTIONS ASSEMBLE RIGHT
185 STARTD /2WORD MODE FOR ADDRESS PICKUP
186 FLDA 30 /GET RETURN ADDRESS
187 FSTA GOBAC /SAVE IT FOR RETURN
188 FLDA 0 /ARG LIST-1
189 SETB BDELTA /NEW BASE PAGE
190 BASE BDELTA /MAYBE THE ASSEMBLER CAN SAVE US SPACE
191 FSTA BDELTA /POINTER TO ARG LIST
192 SETX IPEN /SET INDEXES
193 LDX 0,1 /FOR ARG PICKUP
194 FLDA% BDELTA,1+ /GET ADDRESS OF FIRST ARG
195 FSTA XPOINT
196 FLDA% BDELTA,1+ /NOW DY
197 FSTA YPOINT
198 FLDA% BDELTA,1+ /PEN UP-DOWN
199 FSTA PPOINT
200 STARTF /BE COMPATABLE WITH FORTRAN
201 FLDA% XPOINT /GET DX VALUE
202 ALN 0 /FIX IT
203 STARTD /WEE ONLY NEED THE MANTISSA
204 FSTA #DX
205 STARTF /FORTRAN COMPATABLE
206 FLDA% YPOINT
207 ALN 0 /FIX IT
208 STARTD /WEE ONLY NEED THE MANTISSA
209 FSTA #DY
210 STARTF /FORTRAN COMPATABLE
211 FLDA% PPOINT
212 ATX 0 /GIVE IPEN TO PDP
213 TRAP4 #DELTA2 /CALL PDP
214 GOBAC, 0;0 /RETURN
215 /
216 /
217 /
218 / PLOTTER INTERUPT SERVICE
219 /
220 EXEC, 0 /PLOTTER SERVICE
221 TAD MOV /ARE WE READY AND WAITING ?
222 SNA
223 JMP NOTRED /NO, CHECK FOR TERMINATION
224 6506 /YES, DOIT AND USE TIME TILL NEXT INTERUPT
225 CLL CLA
226 TADZ NC+1 /ARE WE DONE ?
227 SNA CLA /WE NEED CHECK ONLY THE HIGH ORDER BITS
228 JMP .+3 /YES
229 JMS GEN /GENERATE NEXTVE
230 JMP% EXEC /RETURN
231 DCA MOV /CLEAR FLAG
232 JMP% EXEC
233 \f/
234 /THE PDP COMES HERE TWICE IN THE LIFE OF A LINE,
235 /ONCE TO START IT, AND ONCE TO FINISH IT
236 /
237 NOTRED, TADZ NC+1
238 SNA CLA /LAST INCREMENT FOR THIS LINE, OR FIRST
239 JMP DONE /LAST
240 JMS GEN /GET FIRST MOVE
241 JMP EXEC+1 /DO IT
242 DONE, 6502 /CLEAR PLOTTER FLAG
243 DCAZ BZFLG /SAY WE ARE DONE
244 CDF CIF 0
245 JMP% HNGLOC+1 /RESTORE OR RETURN
246 /
247 /
248 GEN, 0 /BEST LINE GENERATION
249 SWP /SAVE THE MQ
250 DCA MQSAVE
251 DPSZ /CHECK MODE
252 CMA /MODE A
253 DCA EAEM
254 SWAB /EAE DP