-
Notifications
You must be signed in to change notification settings - Fork 0
/
macros.asm
160 lines (131 loc) · 2.01 KB
/
macros.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
;; Macros ###########################################################
.macro push_axy
pha ; push accumulator to stack
txa ; x -> a
pha ; push x to stack
tya ; y -> a
pha ; push y to stack
.endmacro
.macro pull_axy
pla ; pull y from stack
tay ; a -> y
pla ; pull x from stack
tax ; a -> x
pla ; pull a from stack
.endmacro
.macro push_ax
pha
txa
pha
.endmacro
.macro pull_ax
pla
tax
pla
.endmacro
.macro push_ay
pha
tya
pha
.endmacro
.macro pull_ay
pla
tay
pla
.endmacro
.macro push_vregs
lda VREG1
pha
lda VREG2
pha
.endmacro
.macro pull_vregs
pla
sta VREG2
pla
sta VREG1
.endmacro
.macro put_address ADDR, L1, L2
lda #<ADDR
sta L1
lda #>ADDR
.ifnblank L2
sta L2
.else
sta L1+1
.endif
.endmacro
.macro mov SRC1, DEST1, SRC2, DEST2, SRC3, DEST3, SRC4, DEST4
lda SRC1
sta DEST1
.ifnblank SRC2
.ifnblank DEST2
lda SRC2
sta DEST2
.endif
.endif
.ifnblank SRC3
.ifnblank DEST3
lda SRC3
sta DEST3
.endif
.endif
.ifnblank SRC4
.ifnblank DEST4
lda SRC4
sta DEST4
.endif
.endif
.endmacro
.macro mov16 SRC, DEST
lda SRC
sta DEST
lda SRC+1
sta DEST+1
.endmacro
.macro mov32 SRC, DEST
lda SRC
sta DEST
lda SRC+1
sta DEST+1
lda SRC+2
sta DEST+2
lda SRC+3
sta DEST+3
.endmacro
.macro mov32_immptrs SRC, DEST
jsr util_mov32_immptrs
.byte <SRC, >SRC, <DEST, >DEST
.endmacro
.macro prepare_rts ADDR
lda #>(ADDR - 1)
pha
lda #<(ADDR - 1)
pha
.endmacro
;; ######## math macros ################
.macro add32 SRC1, SRC2, DEST
put_address SRC1, MPTR1
put_address SRC2, MPTR2
put_address DEST, MPTR3
jsr math_add32
.endmacro
.macro div32 SRC1, SRC2, DEST1, DEST2
put_address SRC1, MPTR1
put_address SRC2, MPTR2
put_address DEST1, MPTR3
put_address DEST2, MPTR4
jsr math_div32
.endmacro
.macro mul32 SRC1, SRC2, DEST
put_address SRC1, MPTR1
put_address SRC2, MPTR2
put_address DEST, MPTR3
jsr math_mul32
.endmacro
.macro sub32 SRC1, SRC2, DEST
put_address SRC1, MPTR1
put_address SRC2, MPTR2
put_address DEST, MPTR3
jsr math_sub32
.endmacro