b202b72e82f57c6342faa05e88b966f26d57ae10
[h316.git] / lib / iolib / src / pl$mv.asm
1 * (PL$MV) REV 1.0 INCREMENTAL PLOTTER ROUTINES
2 *
3 *
4 * PROGRAM TITLE:
5 * PL$MV (PL$MV,PL$RST)
6 *
7 * PLOTTER MOVEMENT ROUTINES
8 *
9 *
10 * REVISIONS:
11 * 1.0 (2007-05-28)
12 *
13 * AUTHOR:
14 *
15 * PHILIPP HACHTMANN
16 *
17 *
18 * PURPOSE:
19 *
20 * PROVIDE SIMPLE LIBRARY FUNCTIONS FOR INCREMENTAL PLOTTERS
21 *
22 *
23 * STORAGE:
24 *
25 * ??? (OCTAL)
26 * ??? (DECIMAL)
27 *
28 *
29 * USAGE
30 *
31 * CALL PL$RST - SET VIRTUAL PLOT POSITION TO ZERO
32 *
33 * CALL PL$MV - MOVE TO POINT SPECIFIED
34 * DAC XN BY XN
35 * DAC YN AND YN VALUE
36 *
37 *
38 *
39 ********************************************************************************
40 *
41 *
42 SUBR PL$MV,MOVE
43 SUBR PL$RST,RST
44 *
45 *
46 REL THIS IS A RELOCATABLE OBJECT
47 ORG '0
48 *
49 *
50 RST DAC ** SET POINT ZERO
51 STA X
52 CRA
53 STA Y
54 IMA X
55 JMP* RST
56 *
57 *
58 MOVE DAC ** MOVE YA!
59 *
60 LDA* MOVE GET PARAMETERS
61 STA TMP
62 LDA* TMP
63 STA XN
64 SUB X
65 STA DX
66 IRS MOVE
67 LDA* MOVE
68 STA TMP
69 LDA* TMP
70 STA YN
71 SUB Y
72 STA DY
73 IRS MOVE
74 IRS MOVE CORRECT RETURN ADDRESS
75 *
76 * HLT
77 * LDA YN
78 * IAB
79 * LDA XN
80 * HLT
81 * JMP 1
82 *
83 LDA DX
84 SMI
85 JMP DXP DX POSITIVE
86 * DX NEGATIVE
87 TCA
88 STA DX NOW, DX IS POSITIVE!
89 LDA ML
90 STA STPX
91 LDA MUL
92 STA DIYP
93 LDA MDL
94 STA DIYN
95 JMP DXNP
96 DXP LDA MR
97 STA STPX
98 LDA MUR
99 STA DIYP
100 LDA MDR
101 STA DIYN
102 JMP DXNP
103 *
104 DXNP LDA DY
105 SMI
106 JMP DYP DY POSITIVE
107 * DY NEGATIVE
108 TCA
109 STA DY NOW, DY IS POSITIVE!
110 LDA MD
111 STA STPY
112 LDA DIYN
113 STA STPD
114 JMP DYNP
115 DYP LDA MU
116 STA STPY
117 LDA DIYP
118 STA STPD
119 *
120 DYNP LDA DX
121 CAS DY
122 JMP XGTY DX GREATER DY
123 YGTX NOP DY GREATER OR EQUAL DX
124 LDA STPY
125 STA STPL
126 LDA STPX
127 STA STPS
128 LDA DX
129 STA DS
130 LDA DY
131 STA DL
132 JMP GTE
133 *
134 XGTY LDA STPY
135 STA STPS
136 LDA STPX
137 STA STPL
138 LDA DX
139 STA DL
140 LDA DY
141 STA DS
142 *
143 GTE LDA DL LONG DISTANCE
144 LGR 1 DIVIDE BY TWO
145 STA ERR INITIALIZE ERROR COUNTER
146 *
147 *
148 *
149 LOOP LDA DL
150 SNZ
151 JMP FNSH END OF WORK - HOPE SO....
152 SUB =1 DECREMENT DL
153 STA DL
154 LDA ERR
155 SUB DS
156 STA ERR
157 SMI SKIP IF NOT OVERFLOWN (MINUS)
158 JMP NDIA NO DIAG STEP
159 ADD DL RELOAD
160 STA ERR
161 LDA DS
162 SUB =1
163 STA DS
164 JST* STPD
165 JMP STEN END OF STEP
166 NDIA JST* STPL LONG DIR STEP ONLY
167 STEN JMP LOOP RELOOP
168 *
169 FNSH LDA XN
170 STA X
171 LDA YN
172 STA Y
173 JMP* MOVE END OF THE ROUTINE
174 **********************
175 *
176 * VARIABLES
177 *
178 X DEC 0 PEN POSITION, X VALUE
179 Y DEC 0 PEN POSITION, Y VALUE
180 XN DEC 0 NEW PEN POSITION, X VALUE
181 YN DEC 0 NEW PEN POSITION, Y VALUE
182 DX DEC 0 X DIFFERENCE TO GO
183 DY DEC 0 Y DIFFERENCE TO GO
184 *
185 DL DEC 0 LONG DISTANCE NEGATIVE
186 DS DEC 0 SHORT DISTANCE NEGATIVE
187 STPL DAC ** ROUTINE TO LONG DISTANCE STEP
188 STPS DAC ** ROUTINE TO SHORT DISTANCE STEP
189 STPD DAC ** ROUTINE TO DIAGONAL STEP
190 ERR DEC 0 ERROR COUNTER
191 *
192 STPX DAC ** X STEP ROUTINE
193 STPY DAC ** Y STEP ROUTINE
194 DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE
195 DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE
196 TMP DAC ** UNIVERSAL POINTER
197 *
198 * GLUE IN THE MOVEMENT
199 MU XAC PL$U
200 MD XAC PL$D
201 ML XAC PL$L
202 MR XAC PL$R
203 MUL XAC PL$UL
204 MUR XAC PL$UR
205 MDL XAC PL$DL
206 MDR XAC PL$DR
207 *
208 *
209 END