]> git.sur5r.net Git - cc65/blob - libsrc/geos-common/geosmac.inc
Only for jumps, the lib uses named asm labels in branches
[cc65] / libsrc / geos-common / geosmac.inc
1 ;
2 ;GEOS macros
3 ;reassembled for 6502TASM/MMS by Maciej 'YTM/Elysium' Witkowiak
4 ;4-2-99
5
6 ;28-6-99 - ca65 port
7 ;macro 'sub' renamed to 'ssub' due to 65816 mnemonics
8
9 ;-------------------------------------------------------------------------
10
11 .macro  LoadB dest, value
12         lda #value
13         sta dest
14 .endmacro
15
16 ;-------------------------------------------------------------------------
17
18 .macro  LoadW dest, value
19         LoadB dest+1, >(value)
20         LoadB dest+0, <(value)
21 .endmacro
22
23 ;-------------------------------------------------------------------------
24
25 .macro  MoveB source, dest
26         lda source
27         sta dest
28 .endmacro
29
30 ;-------------------------------------------------------------------------
31
32 .macro  MoveW source, dest
33         MoveB source+1, dest+1
34         MoveB source+0, dest+0
35 .endmacro
36
37 ;-------------------------------------------------------------------------
38
39 .macro  add source
40         clc
41         adc source
42 .endmacro
43
44 ;-------------------------------------------------------------------------
45
46 .macro  AddB source, dest
47         lda source
48         add dest
49         sta dest
50 .endmacro
51
52 ;-------------------------------------------------------------------------
53
54 .macro  AddW source, dest
55         AddB source+0, dest+0
56         lda source+1
57         adc dest+1
58         sta dest+1
59 .endmacro
60
61 ;-------------------------------------------------------------------------
62
63 .macro  AddVB value, dest
64         lda dest
65         clc
66         adc #(value)
67         sta dest
68         .endmacro
69
70 ;-------------------------------------------------------------------------
71
72 .macro  AddVW value, dest
73 .local Skip
74         AddVB <(value), dest+0
75         .if (>(value))=0
76             bcc Skip
77             inc dest+1
78         .else
79             lda #>(value)
80             adc dest+1
81             sta dest+1
82         .endif
83 Skip:
84 .endmacro
85
86 ;-------------------------------------------------------------------------
87
88 .macro  ssub source
89         sec
90         sbc source
91 .endmacro
92
93 ;-------------------------------------------------------------------------
94
95 .macro  SubB source, dest
96         lda dest
97         ssub source
98         sta dest
99 .endmacro
100
101 ;-------------------------------------------------------------------------
102
103 .macro  SubW source, dest
104         SubB source+0, dest+0
105         lda dest+1
106         sbc source+1
107         sta dest+1
108 .endmacro
109
110 ;-------------------------------------------------------------------------
111
112 .macro  SubVW value, dest
113         sec
114         lda dest+0
115         sbc #<(value)
116         sta dest+0
117         lda dest+1
118         sbc #>(value)
119         sta dest+1
120 .endmacro
121
122 ;-------------------------------------------------------------------------
123
124 .macro  CmpB source, dest
125         lda source
126         cmp dest
127 .endmacro
128
129 ;-------------------------------------------------------------------------
130
131 .macro  CmpBI source, immed
132         lda source
133         cmp #(immed)
134 .endmacro
135
136 ;-------------------------------------------------------------------------
137
138 .macro  CmpW source, dest
139 .local Skip     
140         CmpB source+1, dest+1
141         bne Skip
142         CmpB source+0, dest+0
143 Skip:
144 .endmacro
145
146 ;-------------------------------------------------------------------------
147
148 .macro  CmpWI source, immed
149 .local Skip
150         CmpBI source+1, >(immed)
151         bne Skip
152         CmpBI source+0, <(immed)
153 Skip:
154 .endmacro
155
156 ;-------------------------------------------------------------------------
157
158 .macro  PushB source
159         lda source
160         pha
161 .endmacro
162
163 ;-------------------------------------------------------------------------
164
165 .macro  PushW source
166         PushB source+1
167         PushB source+0
168 .endmacro
169
170 ;-------------------------------------------------------------------------
171
172 .macro  PopB dest
173         pla
174         sta dest
175 .endmacro
176
177 ;-------------------------------------------------------------------------
178
179 .macro  PopW dest
180         PopB dest+0
181         PopB dest+1
182 .endmacro
183
184 ;-------------------------------------------------------------------------
185
186 .macro  smb bitNumber, dest
187         pha
188         lda #(1 << bitNumber)
189         ora dest
190         sta dest
191         pla
192 .endmacro
193
194 ;-------------------------------------------------------------------------
195
196 .macro  smbf bitNumber, dest
197         lda #(1 << bitNumber)
198         ora dest
199         sta dest
200 .endmacro
201
202 ;-------------------------------------------------------------------------
203
204 .macro  rmb bitNumber, dest
205         pha
206         lda #(1 << bitNumber) ^ $ff 
207         and dest
208         sta dest
209         pla
210 .endmacro
211
212 ;-------------------------------------------------------------------------
213
214 .macro  rmbf bitNumber, dest
215         lda #(1 << bitNumber) ^ $ff
216         and dest
217         sta dest
218 .endmacro
219
220 ;-------------------------------------------------------------------------
221
222 .macro  bbs bitNumber, source, addr
223 .local Skip
224         php
225         pha
226         lda source
227         and #(1 << bitNumber)
228         beq Skip
229         pla
230         plp
231         bra addr
232 Skip:   pla
233         plp
234 .endmacro
235
236 ;-------------------------------------------------------------------------
237
238 .macro  bbsf bitNumber, source, addr
239         .if     bitNumber=7
240                 bit source
241                 bmi addr
242         .else
243                 .if bitNumber=6
244                     bit source
245                     bvs addr
246                 .else
247                     lda source
248                     and #(1 << bitNumber)
249                     bne addr
250                 .endif
251         .endif
252 .endmacro
253
254 ;-------------------------------------------------------------------------
255
256 .macro  bbr bitNumber, source, addr
257 .local Skip
258         php
259         pha
260         lda source
261         and #(1 << bitNumber)
262         bne Skip
263         pla
264         plp
265         bra addr
266 Skip:   pla
267         plp
268 .endmacro
269
270 ;-------------------------------------------------------------------------
271
272 .macro  bbrf bitNumber, source, addr
273         .if bitNumber=7
274             bit source
275             bpl addr
276         .else
277                 .if bitNumber=6
278                     bit source
279                     bvc addr
280                 .else
281                     lda source
282                     and #(1 << bitNumber)
283                     beq addr
284                 .endif
285         .endif
286 .endmacro
287
288 ;-------------------------------------------------------------------------
289
290 ;03.03.99 by Maciej Witkowiak
291
292 ;-------------------------------------------------------------------------
293
294 .macro  addv value
295         clc
296         adc #(value)
297 .endmacro
298
299 ;-------------------------------------------------------------------------
300
301 .macro  subv value
302         sec
303         sbc #(value)
304 .endmacro
305
306 ;-------------------------------------------------------------------------
307
308 .macro  bnex addr
309         txa
310         bne addr
311 .endmacro
312
313 ;-------------------------------------------------------------------------
314
315 .macro  beqx addr
316         txa
317         beq addr
318 .endmacro
319
320 ;-------------------------------------------------------------------------