-
Notifications
You must be signed in to change notification settings - Fork 0
/
MULS_AND.X68
252 lines (170 loc) · 4.45 KB
/
MULS_AND.X68
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
*------------------------------------------------------------------------------
* Title : MULS_AND
* Description: Handles parsing of AND and redirects MULS as an invalid op.
*------------------------------------------------------------------------------
ORG $3900
IF_MULS_AND
MOVE.W A4,D3
;Get the register
AND.W #$0FFF,D3
ASL.W #3,D3
MOVE.W D3,D4
AND.L #$0000F000,D4
ROL.W #4,D4
MOVE.L D4,A4 ;register
;Get the opmode
AND.W #$0FFF,D3
ASL.W #3,D3
MOVE.W D3,D4
AND.L #$0000F000,D4
ROL.W #4,D4
MOVE.L D4,A5 ;opmode
;Get the effective mode
AND.W #$0FFF,D3
ASL.W #3,D3
MOVE.W D3,D4
AND.L #$0000F000,D4
ROL.W #4,D4
MOVE.L D4,A6 ;effective mode
;Get the effective register
AND.W #$0FFF,D3
ASL.W #3,D3
MOVE.W D3,D4
AND.L #$0000F000,D4
ROL.W #4,D4 ;effective register
MOVE.B #16,D2
MOVE.B #15,D0
BRA DETERMINE_MULS_AND
DETERMINE_MULS_AND
CMP.W #%111,A5
BEQ DISPLAY_MULS
BRA DISPLAY_AND
;AND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY_AND
LEA AND_OUTPUT,A1
MOVE.B #14,D0
TRAP #15
CMP.W #%000,A5
BEQ DISPLAY_BYTE_SRC_AND
CMP.W #%001,A5
BEQ DISPLAY_WORD_SRC_AND
CMP.W #%010,A5
BEQ DISPLAY_LONG_SRC_AND
CMP.W #%100,A5
BEQ DISPLAY_BYTE_DEST_AND
CMP.W #%101,A5
BEQ DISPLAY_WORD_DEST_AND
CMP.W #%110,A5
BEQ DISPLAY_LONG_DEST_AND
BRA IF_INVALID_SIZE
DISPLAY_BYTE_SRC_AND
LEA B_OUTPUT,A1
MOVE.B #14,D0
TRAP #15
BSR GET_EFFECTIVE_ADDRESS_AND_SRC
MOVE.B #COMMA,D1
MOVE.B #6,D0
TRAP #15
BSR DISPLAY_Dn_ADD
BRA ITERATE
DISPLAY_WORD_SRC_AND
LEA W_OUTPUT,A1
MOVE.B #14,D0
TRAP #15
BSR GET_EFFECTIVE_ADDRESS_AND_SRC
MOVE.B #COMMA,D1
MOVE.B #6,D0
TRAP #15
BSR DISPLAY_Dn_ADD
BRA ITERATE
DISPLAY_LONG_SRC_AND
LEA L_OUTPUT,A1
MOVE.B #14,D0
TRAP #15
BSR GET_EFFECTIVE_ADDRESS_AND_SRC
MOVE.B #COMMA,D1
MOVE.B #6,D0
TRAP #15
BSR DISPLAY_Dn_ADD
BRA ITERATE
DISPLAY_BYTE_DEST_AND
LEA B_OUTPUT,A1
MOVE.B #14,D0
TRAP #15
BSR DISPLAY_Dn_ADD
MOVE.B #COMMA,D1
MOVE.B #6,D0
TRAP #15
BSR GET_EFFECTIVE_ADDRESS_ea_DEST
BRA ITERATE
DISPLAY_WORD_DEST_AND
LEA W_OUTPUT,A1
MOVE.B #14,D0
TRAP #15
BSR DISPLAY_Dn_ADD
MOVE.B #COMMA,D1
MOVE.B #6,D0
TRAP #15
BSR GET_EFFECTIVE_ADDRESS_ea_DEST
BRA ITERATE
DISPLAY_LONG_DEST_AND
LEA L_OUTPUT,A1
MOVE.B #14,D0
TRAP #15
BSR DISPLAY_Dn_ADD
MOVE.B #COMMA,D1
MOVE.B #6,D0
TRAP #15
BSR GET_EFFECTIVE_ADDRESS_ea_DEST
BRA ITERATE
GET_EFFECTIVE_ADDRESS_AND_SRC
CMP.W #%000,A6
BEQ DISPLAY_Dn_ea
CMP.W #%010,A6
BEQ DISPLAY_An_ADDRESS_ea
CMP.W #%011,A6
BEQ DISPLAY_An_ADDRESS_INCREMENT_ea
CMP.W #%100,A6
BEQ DISPLAY_An_ADDRESS_DECREMENT_ea
CMP.W #%111,A6
BEQ DISPLAY_ADDRESS_OR_DATA_AND_SRC
BRA IF_INVALID_OP_EA
DISPLAY_ADDRESS_OR_DATA_AND_SRC
CMP.W #%000,D4
BEQ DISPLAY_ADDRESS_WORD_ea
CMP.W #%001,D4
BEQ DISPLAY_ADDRESS_LONG_ea
CMP.W #%100,D4
BEQ DISPLAY_DATA_ea_AND_SRC
BRA IF_INVALID_OP_EA
DISPLAY_DATA_ea_AND_SRC
CMP.W #%000,A5
BEQ DISPLAY_DATA_BYTE_ea
CMP.W #%001,A5
BEQ DISPLAY_DATA_WORD_ea
CMP.W #%010,A5
BEQ DISPLAY_DATA_LONG_ea
BRA IF_INVALID_OP_EA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;MULS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY_MULS
BRA IF_INVALID_OP
;[OPCODE NO LONGER SUPPORTED]
LEA MULS_OUTPUT,A1
MOVE.B #14,D0
TRAP #15
BRA IF_INVALID_OP
LEA W_OUTPUT,A1
MOVE.B #14,D0
TRAP #15
BRA IF_INVALID_OP
BSR GET_EFFECTIVE_ADDRESS_AND_SRC
MOVE.B #COMMA,D1
MOVE.B #6,D0
TRAP #15
BSR DISPLAY_Dn_ADD
BRA ITERATE
*~Font name~Courier New~
*~Font size~10~
*~Tab type~1~
*~Tab size~4~