| 1 | * (PL$MV) REV 1.0 INCREMENTAL PLOTTER ROUTINES |
| 2 | * |
| 3 | * |
| 4 | * PROGRAM TITLE: |
| 5 | * PL$MV (PL$MV,PL$RST,PL$LN) |
| 6 | * |
| 7 | * PLOTTER MOVEMENT ROUTINES |
| 8 | * |
| 9 | * |
| 10 | * REVISIONS: |
| 11 | * 1.0 (2007-05-28) |
| 12 | * 1.1 (2007-11-08) - ADDED INTELLIGENT LINE DRAWING ROUTINE |
| 13 | * |
| 14 | * |
| 15 | * |
| 16 | * AUTHOR: |
| 17 | * |
| 18 | * PHILIPP HACHTMANN |
| 19 | * |
| 20 | * |
| 21 | * PURPOSE: |
| 22 | * |
| 23 | * PROVIDE SIMPLE LIBRARY FUNCTIONS FOR INCREMENTAL PLOTTERS |
| 24 | * |
| 25 | * |
| 26 | * STORAGE: |
| 27 | * |
| 28 | * ??? (OCTAL) |
| 29 | * ??? (DECIMAL) |
| 30 | * |
| 31 | * |
| 32 | * USAGE |
| 33 | * |
| 34 | * CALL PL$RST - SET VIRTUAL PLOT POSITION TO ZERO |
| 35 | * |
| 36 | * CALL PL$MV - MOVE TO POINT SPECIFIED |
| 37 | * DAC XN BY XN |
| 38 | * DAC YN AND YN VALUE |
| 39 | * |
| 40 | * CALL PL$LN - DRAW LINE AND LEAVE PEN DOWN |
| 41 | * DAC X1 |
| 42 | * DAC Y1 |
| 43 | * DAC X2 |
| 44 | * DAC Y2 |
| 45 | * DAC 0 |
| 46 | * |
| 47 | * |
| 48 | ******************************************************************************** |
| 49 | * |
| 50 | * |
| 51 | SUBR PL$MV,MOVE |
| 52 | SUBR PL$RST,RST |
| 53 | SUBR PL$LN,LINE |
| 54 | * |
| 55 | * |
| 56 | * |
| 57 | REL THIS IS A RELOCATABLE OBJECT |
| 58 | ORG '0 |
| 59 | * |
| 60 | ******************************************************************************** |
| 61 | * |
| 62 | LINE DAC 0 DRAW A LINE FROM NEAR STARTING POINT |
| 63 | LDA* LINE X1 |
| 64 | STA X1P |
| 65 | IRS LINE |
| 66 | LDA* LINE Y1 |
| 67 | STA Y1P |
| 68 | IRS LINE |
| 69 | LDA* LINE X2 |
| 70 | STA X2P |
| 71 | IRS LINE |
| 72 | LDA* LINE Y2 |
| 73 | STA Y2P |
| 74 | IRS LINE TALLY RETURN ADDRESS |
| 75 | IRS LINE AGAIN FOR FORTRAN IV COMPATIBILITY |
| 76 | * |
| 77 | LDA X |
| 78 | SUB* X1P |
| 79 | SPL SKIP IF SIGN PLUS |
| 80 | TCA TWO'S COMPLEMENT IF NEEDED |
| 81 | STA D1 |
| 82 | LDA Y |
| 83 | SUB* Y1P |
| 84 | SPL |
| 85 | TCA |
| 86 | ADD D1 |
| 87 | STA D1 |
| 88 | * |
| 89 | LDA X |
| 90 | SUB* X2P |
| 91 | SPL SKIP IF SIGN PLUS |
| 92 | TCA TWO'S COMPLEMENT IF NEEDED |
| 93 | STA D2 |
| 94 | LDA Y |
| 95 | SUB* Y2P |
| 96 | SPL |
| 97 | TCA |
| 98 | ADD D2 |
| 99 | CAS D1 |
| 100 | JMP D2BG D2 IS BIGGER! |
| 101 | NOP |
| 102 | * |
| 103 | D1BG LDA* X2P DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2 |
| 104 | STA XA |
| 105 | LDA* Y2P |
| 106 | STA YA |
| 107 | LDA* X1P |
| 108 | STA XB |
| 109 | LDA* Y1P |
| 110 | STA YB |
| 111 | JMP WOKI WORK! |
| 112 | * |
| 113 | D2BG LDA* X1P DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1 |
| 114 | STA XA |
| 115 | LDA* Y1P |
| 116 | STA YA |
| 117 | LDA* X2P |
| 118 | STA XB |
| 119 | LDA* Y2P |
| 120 | STA YB |
| 121 | * |
| 122 | WOKI LDA X TEST IF STARTING POINT IST CURRENT POSITION |
| 123 | CAS XA |
| 124 | JMP MV1 |
| 125 | JMP *+2 |
| 126 | JMP MV1 |
| 127 | LDA Y |
| 128 | CAS YA |
| 129 | JMP MV1 |
| 130 | JMP *+2 |
| 131 | JMP MV1 |
| 132 | JMP NM1 |
| 133 | * |
| 134 | MV1 CALL PL$PU MOVE TO THE STARTING POSITION |
| 135 | CALL PL$MV |
| 136 | DAC XA |
| 137 | DAC YA |
| 138 | DAC 0 |
| 139 | NM1 CALL PL$PD WE ARE AT BEGINNING OF LINE |
| 140 | CALL PL$MV |
| 141 | DAC XB |
| 142 | DAC YB |
| 143 | DAC 0 |
| 144 | JMP* LINE END OF THE LINE :-) |
| 145 | * |
| 146 | * |
| 147 | X1P DAC 0 ARGUMENT POINER TO X1 |
| 148 | Y1P DAC 0 ARGUMENT POINER TO Y1 |
| 149 | X2P DAC 0 ARGUMENT POINER TO X2 |
| 150 | Y2P DAC 0 ARGUMENT POINER TO Y2 |
| 151 | XA DEC 0 REAL FIRST POINT X COORDINATE |
| 152 | YA DEC 0 REAL FIRST POINT Y COORDINATE |
| 153 | XB DEC 0 REAL SECOND POINT X COORDINATE |
| 154 | YB DEC 0 REAL SECOND POINT Y COORDINATE |
| 155 | D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1 |
| 156 | D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2 |
| 157 | * |
| 158 | * |
| 159 | ******************************************************************************** |
| 160 | * |
| 161 | RST DAC ** SET POINT ZERO |
| 162 | STA X |
| 163 | CRA |
| 164 | STA Y |
| 165 | IMA X |
| 166 | JMP* RST |
| 167 | * |
| 168 | * |
| 169 | MOVE DAC ** MOVE YA! |
| 170 | * |
| 171 | LDA* MOVE GET PARAMETERS |
| 172 | STA TMP |
| 173 | LDA* TMP |
| 174 | STA XN |
| 175 | SUB X |
| 176 | STA DX |
| 177 | IRS MOVE |
| 178 | LDA* MOVE |
| 179 | STA TMP |
| 180 | LDA* TMP |
| 181 | STA YN |
| 182 | SUB Y |
| 183 | STA DY |
| 184 | IRS MOVE |
| 185 | IRS MOVE CORRECT RETURN ADDRESS |
| 186 | * |
| 187 | * HLT |
| 188 | * LDA YN |
| 189 | * IAB |
| 190 | * LDA XN |
| 191 | * HLT |
| 192 | * JMP 1 |
| 193 | * |
| 194 | LDA DX |
| 195 | SMI |
| 196 | JMP DXP DX POSITIVE |
| 197 | * DX NEGATIVE |
| 198 | TCA |
| 199 | STA DX NOW, DX IS POSITIVE! |
| 200 | LDA ML |
| 201 | STA STPX |
| 202 | LDA MUL |
| 203 | STA DIYP |
| 204 | LDA MDL |
| 205 | STA DIYN |
| 206 | JMP DXNP |
| 207 | DXP LDA MR |
| 208 | STA STPX |
| 209 | LDA MUR |
| 210 | STA DIYP |
| 211 | LDA MDR |
| 212 | STA DIYN |
| 213 | JMP DXNP |
| 214 | * |
| 215 | DXNP LDA DY |
| 216 | SMI |
| 217 | JMP DYP DY POSITIVE |
| 218 | * DY NEGATIVE |
| 219 | TCA |
| 220 | STA DY NOW, DY IS POSITIVE! |
| 221 | LDA MD |
| 222 | STA STPY |
| 223 | LDA DIYN |
| 224 | STA STPD |
| 225 | JMP DYNP |
| 226 | DYP LDA MU |
| 227 | STA STPY |
| 228 | LDA DIYP |
| 229 | STA STPD |
| 230 | * |
| 231 | DYNP LDA DX |
| 232 | CAS DY |
| 233 | JMP XGTY DX GREATER DY |
| 234 | YGTX NOP DY GREATER OR EQUAL DX |
| 235 | LDA STPY |
| 236 | STA STPL |
| 237 | LDA STPX |
| 238 | STA STPS |
| 239 | LDA DX |
| 240 | STA DS |
| 241 | LDA DY |
| 242 | STA DL |
| 243 | JMP GTE |
| 244 | * |
| 245 | XGTY LDA STPY |
| 246 | STA STPS |
| 247 | LDA STPX |
| 248 | STA STPL |
| 249 | LDA DX |
| 250 | STA DL |
| 251 | LDA DY |
| 252 | STA DS |
| 253 | * |
| 254 | GTE LDA DL LONG DISTANCE |
| 255 | LGR 1 DIVIDE BY TWO |
| 256 | STA ERR INITIALIZE ERROR COUNTER |
| 257 | * |
| 258 | * |
| 259 | * |
| 260 | LOOP LDA DL |
| 261 | SNZ |
| 262 | JMP FNSH END OF WORK - HOPE SO.... |
| 263 | SUB =1 DECREMENT DL |
| 264 | STA DL |
| 265 | LDA ERR |
| 266 | SUB DS |
| 267 | STA ERR |
| 268 | SMI SKIP IF NOT OVERFLOWN (MINUS) |
| 269 | JMP NDIA NO DIAG STEP |
| 270 | ADD DL RELOAD |
| 271 | STA ERR |
| 272 | LDA DS |
| 273 | SUB =1 |
| 274 | STA DS |
| 275 | JST* STPD |
| 276 | JMP STEN END OF STEP |
| 277 | NDIA JST* STPL LONG DIR STEP ONLY |
| 278 | STEN JMP LOOP RELOOP |
| 279 | * |
| 280 | FNSH LDA XN |
| 281 | STA X |
| 282 | LDA YN |
| 283 | STA Y |
| 284 | JMP* MOVE END OF THE ROUTINE |
| 285 | ********************** |
| 286 | * |
| 287 | * VARIABLES |
| 288 | * |
| 289 | X DEC 0 PEN POSITION, X VALUE |
| 290 | Y DEC 0 PEN POSITION, Y VALUE |
| 291 | XN DEC 0 NEW PEN POSITION, X VALUE |
| 292 | YN DEC 0 NEW PEN POSITION, Y VALUE |
| 293 | DX DEC 0 X DIFFERENCE TO GO |
| 294 | DY DEC 0 Y DIFFERENCE TO GO |
| 295 | * |
| 296 | DL DEC 0 LONG DISTANCE NEGATIVE |
| 297 | DS DEC 0 SHORT DISTANCE NEGATIVE |
| 298 | STPL DAC ** ROUTINE TO LONG DISTANCE STEP |
| 299 | STPS DAC ** ROUTINE TO SHORT DISTANCE STEP |
| 300 | STPD DAC ** ROUTINE TO DIAGONAL STEP |
| 301 | ERR DEC 0 ERROR COUNTER |
| 302 | * |
| 303 | STPX DAC ** X STEP ROUTINE |
| 304 | STPY DAC ** Y STEP ROUTINE |
| 305 | DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE |
| 306 | DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE |
| 307 | TMP DAC ** UNIVERSAL POINTER |
| 308 | * |
| 309 | * GLUE IN THE MOVEMENT |
| 310 | MU XAC PL$U |
| 311 | MD XAC PL$D |
| 312 | ML XAC PL$L |
| 313 | MR XAC PL$R |
| 314 | MUL XAC PL$UL |
| 315 | MUR XAC PL$UR |
| 316 | MDL XAC PL$DL |
| 317 | MDR XAC PL$DR |
| 318 | * |
| 319 | * |
| 320 | END |