diff options
author | Bad Diode <bd@badd10de.dev> | 2023-08-29 17:47:54 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-08-29 17:47:54 +0200 |
commit | 4f0a38e9b1d98d07a36499e3024518b7e78f261c (patch) | |
tree | 0dcc3b4d08c7be151cb033a16c5cc3bb35c17a4a | |
parent | 418aa7666a15ad3348633cc822c56a56eee7c4d9 (diff) | |
download | uxngba-4f0a38e9b1d98d07a36499e3024518b7e78f261c.tar.gz uxngba-4f0a38e9b1d98d07a36499e3024518b7e78f261c.zip |
Add OPkr instructions (untested)
-rw-r--r-- | src/uxn-core.s | 1060 |
1 files changed, 784 insertions, 276 deletions
diff --git a/src/uxn-core.s b/src/uxn-core.s index c1f28d6..1a365ed 100644 --- a/src/uxn-core.s +++ b/src/uxn-core.s | |||
@@ -92,8 +92,8 @@ uxn_ret: | |||
92 | .endm | 92 | .endm |
93 | 93 | ||
94 | .macro wpeek16 a, b | 94 | .macro wpeek16 a, b |
95 | ldrb \a, [r1, #-1] | 95 | ldrb \a, [r1, #-1] |
96 | ldrb \b, [r1, #-2] | 96 | ldrb \b, [r1, #-2] |
97 | orr \a, \a, \b, lsl #8 | 97 | orr \a, \a, \b, lsl #8 |
98 | .endm | 98 | .endm |
99 | 99 | ||
@@ -125,6 +125,16 @@ uxn_ret: | |||
125 | ldrb \a, [r2, \b] | 125 | ldrb \a, [r2, \b] |
126 | .endm | 126 | .endm |
127 | 127 | ||
128 | .macro rpeek8 a | ||
129 | ldrb \a, [r2, #-1] | ||
130 | .endm | ||
131 | |||
132 | .macro rpeek16 a, b | ||
133 | ldrb \a, [r2, #-1] | ||
134 | ldrb \b, [r2, #-2] | ||
135 | orr \a, \a, \b, lsl #8 | ||
136 | .endm | ||
137 | |||
128 | .macro zsave8 a, off | 138 | .macro zsave8 a, off |
129 | strb \a, [r7, \off] | 139 | strb \a, [r7, \off] |
130 | .endm | 140 | .endm |
@@ -175,262 +185,262 @@ uxn_ret: | |||
175 | @ | 185 | @ |
176 | 186 | ||
177 | op_table: | 187 | op_table: |
178 | .word brk @ 0x00 | 188 | .word brk @ 0x00 |
179 | .word inc @ 0x01 | 189 | .word inc @ 0x01 |
180 | .word pop @ 0x02 | 190 | .word pop @ 0x02 |
181 | .word nip @ 0x03 | 191 | .word nip @ 0x03 |
182 | .word swp @ 0x04 | 192 | .word swp @ 0x04 |
183 | .word rot @ 0x05 | 193 | .word rot @ 0x05 |
184 | .word dup @ 0x06 | 194 | .word dup @ 0x06 |
185 | .word ovr @ 0x07 | 195 | .word ovr @ 0x07 |
186 | .word equ @ 0x08 | 196 | .word equ @ 0x08 |
187 | .word neq @ 0x09 | 197 | .word neq @ 0x09 |
188 | .word gth @ 0x0a | 198 | .word gth @ 0x0a |
189 | .word lth @ 0x0b | 199 | .word lth @ 0x0b |
190 | .word jmp @ 0x0c | 200 | .word jmp @ 0x0c |
191 | .word jcn @ 0x0d | 201 | .word jcn @ 0x0d |
192 | .word jsr @ 0x0e | 202 | .word jsr @ 0x0e |
193 | .word sth @ 0x0f | 203 | .word sth @ 0x0f |
194 | .word ldz @ 0x10 | 204 | .word ldz @ 0x10 |
195 | .word stz @ 0x11 | 205 | .word stz @ 0x11 |
196 | .word ldr @ 0x12 | 206 | .word ldr @ 0x12 |
197 | .word str @ 0x13 | 207 | .word str @ 0x13 |
198 | .word lda @ 0x14 | 208 | .word lda @ 0x14 |
199 | .word sta @ 0x15 | 209 | .word sta @ 0x15 |
200 | .word dei @ 0x16 | 210 | .word dei @ 0x16 |
201 | .word deo @ 0x17 | 211 | .word deo @ 0x17 |
202 | .word add @ 0x18 | 212 | .word add @ 0x18 |
203 | .word sub @ 0x19 | 213 | .word sub @ 0x19 |
204 | .word mul @ 0x1a | 214 | .word mul @ 0x1a |
205 | .word div @ 0x1b | 215 | .word div @ 0x1b |
206 | .word and @ 0x1c | 216 | .word and @ 0x1c |
207 | .word ora @ 0x1d | 217 | .word ora @ 0x1d |
208 | .word eor @ 0x1e | 218 | .word eor @ 0x1e |
209 | .word sft @ 0x1f | 219 | .word sft @ 0x1f |
210 | .word jci @ 0x20 | 220 | .word jci @ 0x20 |
211 | .word inc2 @ 0x21 | 221 | .word inc2 @ 0x21 |
212 | .word pop2 @ 0x22 | 222 | .word pop2 @ 0x22 |
213 | .word nip2 @ 0x23 | 223 | .word nip2 @ 0x23 |
214 | .word swp2 @ 0x24 | 224 | .word swp2 @ 0x24 |
215 | .word rot2 @ 0x25 | 225 | .word rot2 @ 0x25 |
216 | .word dup2 @ 0x26 | 226 | .word dup2 @ 0x26 |
217 | .word ovr2 @ 0x27 | 227 | .word ovr2 @ 0x27 |
218 | .word equ2 @ 0x28 | 228 | .word equ2 @ 0x28 |
219 | .word neq2 @ 0x29 | 229 | .word neq2 @ 0x29 |
220 | .word gth2 @ 0x2a | 230 | .word gth2 @ 0x2a |
221 | .word lth2 @ 0x2b | 231 | .word lth2 @ 0x2b |
222 | .word jmp2 @ 0x2c | 232 | .word jmp2 @ 0x2c |
223 | .word jcn2 @ 0x2d | 233 | .word jcn2 @ 0x2d |
224 | .word jsr2 @ 0x2e | 234 | .word jsr2 @ 0x2e |
225 | .word sth2 @ 0x2f | 235 | .word sth2 @ 0x2f |
226 | .word ldz2 @ 0x30 | 236 | .word ldz2 @ 0x30 |
227 | .word stz2 @ 0x31 | 237 | .word stz2 @ 0x31 |
228 | .word ldr2 @ 0x32 | 238 | .word ldr2 @ 0x32 |
229 | .word str2 @ 0x33 | 239 | .word str2 @ 0x33 |
230 | .word lda2 @ 0x34 | 240 | .word lda2 @ 0x34 |
231 | .word sta2 @ 0x35 | 241 | .word sta2 @ 0x35 |
232 | .word dei2 @ 0x36 | 242 | .word dei2 @ 0x36 |
233 | .word deo2 @ 0x37 | 243 | .word deo2 @ 0x37 |
234 | .word add2 @ 0x38 | 244 | .word add2 @ 0x38 |
235 | .word sub2 @ 0x39 | 245 | .word sub2 @ 0x39 |
236 | .word mul2 @ 0x3a | 246 | .word mul2 @ 0x3a |
237 | .word div2 @ 0x3b | 247 | .word div2 @ 0x3b |
238 | .word and2 @ 0x3c | 248 | .word and2 @ 0x3c |
239 | .word ora2 @ 0x3d | 249 | .word ora2 @ 0x3d |
240 | .word eor2 @ 0x3e | 250 | .word eor2 @ 0x3e |
241 | .word sft2 @ 0x3f | 251 | .word sft2 @ 0x3f |
242 | .word jmi @ 0x40 | 252 | .word jmi @ 0x40 |
243 | .word incr @ 0x41 | 253 | .word incr @ 0x41 |
244 | .word popr @ 0x42 | 254 | .word popr @ 0x42 |
245 | .word nipr @ 0x43 | 255 | .word nipr @ 0x43 |
246 | .word swpr @ 0x44 | 256 | .word swpr @ 0x44 |
247 | .word rotr @ 0x45 | 257 | .word rotr @ 0x45 |
248 | .word dupr @ 0x46 | 258 | .word dupr @ 0x46 |
249 | .word ovrr @ 0x47 | 259 | .word ovrr @ 0x47 |
250 | .word equr @ 0x48 | 260 | .word equr @ 0x48 |
251 | .word neqr @ 0x49 | 261 | .word neqr @ 0x49 |
252 | .word gthr @ 0x4a | 262 | .word gthr @ 0x4a |
253 | .word lthr @ 0x4b | 263 | .word lthr @ 0x4b |
254 | .word jmpr @ 0x4c | 264 | .word jmpr @ 0x4c |
255 | .word jcnr @ 0x4d | 265 | .word jcnr @ 0x4d |
256 | .word jsrr @ 0x4e | 266 | .word jsrr @ 0x4e |
257 | .word sthr @ 0x4f | 267 | .word sthr @ 0x4f |
258 | .word ldzr @ 0x50 | 268 | .word ldzr @ 0x50 |
259 | .word stzr @ 0x51 | 269 | .word stzr @ 0x51 |
260 | .word ldrr @ 0x52 | 270 | .word ldrr @ 0x52 |
261 | .word strr @ 0x53 | 271 | .word strr @ 0x53 |
262 | .word ldar @ 0x54 | 272 | .word ldar @ 0x54 |
263 | .word star @ 0x55 | 273 | .word star @ 0x55 |
264 | .word deir @ 0x56 | 274 | .word deir @ 0x56 |
265 | .word deor @ 0x57 | 275 | .word deor @ 0x57 |
266 | .word addr @ 0x58 | 276 | .word addr @ 0x58 |
267 | .word subr @ 0x59 | 277 | .word subr @ 0x59 |
268 | .word mulr @ 0x5a | 278 | .word mulr @ 0x5a |
269 | .word divr @ 0x5b | 279 | .word divr @ 0x5b |
270 | .word andr @ 0x5c | 280 | .word andr @ 0x5c |
271 | .word orar @ 0x5d | 281 | .word orar @ 0x5d |
272 | .word eorr @ 0x5e | 282 | .word eorr @ 0x5e |
273 | .word sftr @ 0x5f | 283 | .word sftr @ 0x5f |
274 | .word jsi @ 0x60 | 284 | .word jsi @ 0x60 |
275 | .word inc2r @ 0x61 | 285 | .word inc2r @ 0x61 |
276 | .word pop2r @ 0x62 | 286 | .word pop2r @ 0x62 |
277 | .word nip2r @ 0x63 | 287 | .word nip2r @ 0x63 |
278 | .word swp2r @ 0x64 | 288 | .word swp2r @ 0x64 |
279 | .word rot2r @ 0x65 | 289 | .word rot2r @ 0x65 |
280 | .word dup2r @ 0x66 | 290 | .word dup2r @ 0x66 |
281 | .word ovr2r @ 0x67 | 291 | .word ovr2r @ 0x67 |
282 | .word equ2r @ 0x68 | 292 | .word equ2r @ 0x68 |
283 | .word neq2r @ 0x69 | 293 | .word neq2r @ 0x69 |
284 | .word gth2r @ 0x6a | 294 | .word gth2r @ 0x6a |
285 | .word lth2r @ 0x6b | 295 | .word lth2r @ 0x6b |
286 | .word jmp2r @ 0x6c | 296 | .word jmp2r @ 0x6c |
287 | .word jcn2r @ 0x6d | 297 | .word jcn2r @ 0x6d |
288 | .word jsr2r @ 0x6e | 298 | .word jsr2r @ 0x6e |
289 | .word sth2r @ 0x6f | 299 | .word sth2r @ 0x6f |
290 | .word ldz2r @ 0x70 | 300 | .word ldz2r @ 0x70 |
291 | .word stz2r @ 0x71 | 301 | .word stz2r @ 0x71 |
292 | .word ldr2r @ 0x72 | 302 | .word ldr2r @ 0x72 |
293 | .word str2r @ 0x73 | 303 | .word str2r @ 0x73 |
294 | .word lda2r @ 0x74 | 304 | .word lda2r @ 0x74 |
295 | .word sta2r @ 0x75 | 305 | .word sta2r @ 0x75 |
296 | .word dei2r @ 0x76 | 306 | .word dei2r @ 0x76 |
297 | .word deo2r @ 0x77 | 307 | .word deo2r @ 0x77 |
298 | .word add2r @ 0x78 | 308 | .word add2r @ 0x78 |
299 | .word sub2r @ 0x79 | 309 | .word sub2r @ 0x79 |
300 | .word mul2r @ 0x7a | 310 | .word mul2r @ 0x7a |
301 | .word div2r @ 0x7b | 311 | .word div2r @ 0x7b |
302 | .word and2r @ 0x7c | 312 | .word and2r @ 0x7c |
303 | .word ora2r @ 0x7d | 313 | .word ora2r @ 0x7d |
304 | .word eor2r @ 0x7e | 314 | .word eor2r @ 0x7e |
305 | .word sft2r @ 0x7f | 315 | .word sft2r @ 0x7f |
306 | .word lit @ 0x80 | 316 | .word lit @ 0x80 |
307 | .word inck @ 0x81 | 317 | .word inck @ 0x81 |
308 | .word popk @ 0x82 | 318 | .word popk @ 0x82 |
309 | .word nipk @ 0x83 | 319 | .word nipk @ 0x83 |
310 | .word swpk @ 0x84 | 320 | .word swpk @ 0x84 |
311 | .word rotk @ 0x85 | 321 | .word rotk @ 0x85 |
312 | .word dupk @ 0x86 | 322 | .word dupk @ 0x86 |
313 | .word ovrk @ 0x87 | 323 | .word ovrk @ 0x87 |
314 | .word equk @ 0x88 | 324 | .word equk @ 0x88 |
315 | .word neqk @ 0x89 | 325 | .word neqk @ 0x89 |
316 | .word gthk @ 0x8a | 326 | .word gthk @ 0x8a |
317 | .word lthk @ 0x8b | 327 | .word lthk @ 0x8b |
318 | .word jmpk @ 0x8c | 328 | .word jmpk @ 0x8c |
319 | .word jcnk @ 0x8d | 329 | .word jcnk @ 0x8d |
320 | .word jsrk @ 0x8e | 330 | .word jsrk @ 0x8e |
321 | .word sthk @ 0x8f | 331 | .word sthk @ 0x8f |
322 | .word ldzk @ 0x90 | 332 | .word ldzk @ 0x90 |
323 | .word stzk @ 0x91 | 333 | .word stzk @ 0x91 |
324 | .word ldrk @ 0x92 | 334 | .word ldrk @ 0x92 |
325 | .word strk @ 0x93 | 335 | .word strk @ 0x93 |
326 | .word ldak @ 0x94 | 336 | .word ldak @ 0x94 |
327 | .word stak @ 0x95 | 337 | .word stak @ 0x95 |
328 | .word deik @ 0x96 | 338 | .word deik @ 0x96 |
329 | .word deok @ 0x97 | 339 | .word deok @ 0x97 |
330 | .word addk @ 0x98 | 340 | .word addk @ 0x98 |
331 | .word subk @ 0x99 | 341 | .word subk @ 0x99 |
332 | .word mulk @ 0x9a | 342 | .word mulk @ 0x9a |
333 | .word divk @ 0x9b | 343 | .word divk @ 0x9b |
334 | .word andk @ 0x9c | 344 | .word andk @ 0x9c |
335 | .word orak @ 0x9d | 345 | .word orak @ 0x9d |
336 | .word eork @ 0x9e | 346 | .word eork @ 0x9e |
337 | .word sftk @ 0x9f | 347 | .word sftk @ 0x9f |
338 | .word lit2 @ 0xa0 | 348 | .word lit2 @ 0xa0 |
339 | .word inc2k @ 0xa1 | 349 | .word inc2k @ 0xa1 |
340 | .word pop2k @ 0xa2 | 350 | .word pop2k @ 0xa2 |
341 | .word nip2k @ 0xa3 | 351 | .word nip2k @ 0xa3 |
342 | .word swp2k @ 0xa4 | 352 | .word swp2k @ 0xa4 |
343 | .word rot2k @ 0xa5 | 353 | .word rot2k @ 0xa5 |
344 | .word dup2k @ 0xa6 | 354 | .word dup2k @ 0xa6 |
345 | .word ovr2k @ 0xa7 | 355 | .word ovr2k @ 0xa7 |
346 | .word equ2k @ 0xa8 | 356 | .word equ2k @ 0xa8 |
347 | .word neq2k @ 0xa9 | 357 | .word neq2k @ 0xa9 |
348 | .word gth2k @ 0xaa | 358 | .word gth2k @ 0xaa |
349 | .word lth2k @ 0xab | 359 | .word lth2k @ 0xab |
350 | .word jmp2k @ 0xac | 360 | .word jmp2k @ 0xac |
351 | .word jcn2k @ 0xad | 361 | .word jcn2k @ 0xad |
352 | .word jsr2k @ 0xae | 362 | .word jsr2k @ 0xae |
353 | .word sth2k @ 0xaf | 363 | .word sth2k @ 0xaf |
354 | .word ldz2k @ 0xb0 | 364 | .word ldz2k @ 0xb0 |
355 | .word stz2k @ 0xb1 | 365 | .word stz2k @ 0xb1 |
356 | .word ldr2k @ 0xb2 | 366 | .word ldr2k @ 0xb2 |
357 | .word str2k @ 0xb3 | 367 | .word str2k @ 0xb3 |
358 | .word lda2k @ 0xb4 | 368 | .word lda2k @ 0xb4 |
359 | .word sta2k @ 0xb5 | 369 | .word sta2k @ 0xb5 |
360 | .word dei2k @ 0xb6 | 370 | .word dei2k @ 0xb6 |
361 | .word deo2k @ 0xb7 | 371 | .word deo2k @ 0xb7 |
362 | .word add2k @ 0xb8 | 372 | .word add2k @ 0xb8 |
363 | .word sub2k @ 0xb9 | 373 | .word sub2k @ 0xb9 |
364 | .word mul2k @ 0xba | 374 | .word mul2k @ 0xba |
365 | .word div2k @ 0xbb | 375 | .word div2k @ 0xbb |
366 | .word and2k @ 0xbc | 376 | .word and2k @ 0xbc |
367 | .word ora2k @ 0xbd | 377 | .word ora2k @ 0xbd |
368 | .word eor2k @ 0xbe | 378 | .word eor2k @ 0xbe |
369 | .word sft2k @ 0xbf | 379 | .word sft2k @ 0xbf |
370 | .word litr @ 0xc0 | 380 | .word litr @ 0xc0 |
371 | .word brk @ 0xc1 | 381 | .word inckr @ 0xc1 |
372 | .word brk @ 0xc2 | 382 | .word popkr @ 0xc2 |
373 | .word brk @ 0xc3 | 383 | .word nipkr @ 0xc3 |
374 | .word brk @ 0xc4 | 384 | .word swpkr @ 0xc4 |
375 | .word brk @ 0xc5 | 385 | .word rotkr @ 0xc5 |
376 | .word brk @ 0xc6 | 386 | .word dupkr @ 0xc6 |
377 | .word brk @ 0xc7 | 387 | .word ovrkr @ 0xc7 |
378 | .word brk @ 0xc8 | 388 | .word equkr @ 0xc8 |
379 | .word brk @ 0xc9 | 389 | .word neqkr @ 0xc9 |
380 | .word brk @ 0xca | 390 | .word gthkr @ 0xca |
381 | .word brk @ 0xcb | 391 | .word lthkr @ 0xcb |
382 | .word brk @ 0xcc | 392 | .word jmpkr @ 0xcc |
383 | .word brk @ 0xcd | 393 | .word jcnkr @ 0xcd |
384 | .word brk @ 0xce | 394 | .word jsrkr @ 0xce |
385 | .word brk @ 0xcf | 395 | .word sthkr @ 0xcf |
386 | .word brk @ 0xd0 | 396 | .word ldzkr @ 0xd0 |
387 | .word brk @ 0xd1 | 397 | .word stzkr @ 0xd1 |
388 | .word brk @ 0xd2 | 398 | .word ldrkr @ 0xd2 |
389 | .word brk @ 0xd3 | 399 | .word strkr @ 0xd3 |
390 | .word brk @ 0xd4 | 400 | .word ldakr @ 0xd4 |
391 | .word brk @ 0xd5 | 401 | .word stakr @ 0xd5 |
392 | .word brk @ 0xd6 | 402 | .word deikr @ 0xd6 |
393 | .word brk @ 0xd7 | 403 | .word deokr @ 0xd7 |
394 | .word brk @ 0xd8 | 404 | .word addkr @ 0xd8 |
395 | .word brk @ 0xd9 | 405 | .word subkr @ 0xd9 |
396 | .word brk @ 0xda | 406 | .word mulkr @ 0xda |
397 | .word brk @ 0xdb | 407 | .word divkr @ 0xdb |
398 | .word brk @ 0xdc | 408 | .word andkr @ 0xdc |
399 | .word brk @ 0xdd | 409 | .word orakr @ 0xdd |
400 | .word brk @ 0xde | 410 | .word eorkr @ 0xde |
401 | .word brk @ 0xdf | 411 | .word sftkr @ 0xdf |
402 | .word lit2r @ 0xe0 | 412 | .word lit2r @ 0xe0 |
403 | .word brk @ 0xe1 | 413 | .word inc2kr @ 0xe1 |
404 | .word brk @ 0xe2 | 414 | .word pop2kr @ 0xe2 |
405 | .word brk @ 0xe3 | 415 | .word nip2kr @ 0xe3 |
406 | .word brk @ 0xe4 | 416 | .word swp2kr @ 0xe4 |
407 | .word brk @ 0xe5 | 417 | .word rot2kr @ 0xe5 |
408 | .word brk @ 0xe6 | 418 | .word dup2kr @ 0xe6 |
409 | .word brk @ 0xe7 | 419 | .word ovr2kr @ 0xe7 |
410 | .word brk @ 0xe8 | 420 | .word equ2kr @ 0xe8 |
411 | .word brk @ 0xe9 | 421 | .word neq2kr @ 0xe9 |
412 | .word brk @ 0xea | 422 | .word gth2kr @ 0xea |
413 | .word brk @ 0xeb | 423 | .word lth2kr @ 0xeb |
414 | .word brk @ 0xec | 424 | .word jmp2kr @ 0xec |
415 | .word brk @ 0xed | 425 | .word jcn2kr @ 0xed |
416 | .word brk @ 0xee | 426 | .word jsr2kr @ 0xee |
417 | .word brk @ 0xef | 427 | .word sth2kr @ 0xef |
418 | .word brk @ 0xf0 | 428 | .word ldz2kr @ 0xf0 |
419 | .word brk @ 0xf1 | 429 | .word stz2kr @ 0xf1 |
420 | .word brk @ 0xf2 | 430 | .word ldr2kr @ 0xf2 |
421 | .word brk @ 0xf3 | 431 | .word str2kr @ 0xf3 |
422 | .word brk @ 0xf4 | 432 | .word lda2kr @ 0xf4 |
423 | .word brk @ 0xf5 | 433 | .word sta2kr @ 0xf5 |
424 | .word brk @ 0xf6 | 434 | .word dei2kr @ 0xf6 |
425 | .word brk @ 0xf7 | 435 | .word deo2kr @ 0xf7 |
426 | .word brk @ 0xf8 | 436 | .word add2kr @ 0xf8 |
427 | .word lit2 @ 0xf9 | 437 | .word sub2kr @ 0xf9 |
428 | .word lit @ 0xfa | 438 | .word mul2kr @ 0xfa |
429 | .word lit2 @ 0xfb | 439 | .word div2kr @ 0xfb |
430 | .word lit @ 0xfc | 440 | .word and2kr @ 0xfc |
431 | .word jsi @ 0xfd | 441 | .word ora2kr @ 0xfd |
432 | .word jmi @ 0xfe | 442 | .word eor2kr @ 0xfe |
433 | .word jci @ 0xff | 443 | .word sft2kr @ 0xff |
434 | 444 | ||
435 | @ | 445 | @ |
436 | @ OP implementations. | 446 | @ OP implementations. |
@@ -443,7 +453,7 @@ dei: | |||
443 | ldr r6, =dei_map | 453 | ldr r6, =dei_map |
444 | ldr r6, [r6, r4, lsl #2] | 454 | ldr r6, [r6, r4, lsl #2] |
445 | stmfd sp!, {r0, r7, lr} | 455 | stmfd sp!, {r0, r7, lr} |
446 | adr r0, device_data | 456 | ldr r0, =device_data |
447 | lsl r4, #4 | 457 | lsl r4, #4 |
448 | add r0, r4 | 458 | add r0, r4 |
449 | mov r1, r3 | 459 | mov r1, r3 |
@@ -462,7 +472,7 @@ dei2: | |||
462 | ldr r6, =dei_map | 472 | ldr r6, =dei_map |
463 | ldr r6, [r6, r4, lsl #2] | 473 | ldr r6, [r6, r4, lsl #2] |
464 | stmfd sp!, {r0, r7, lr} | 474 | stmfd sp!, {r0, r7, lr} |
465 | adr r0, device_data | 475 | ldr r0, =device_data |
466 | lsl r4, #4 | 476 | lsl r4, #4 |
467 | add r0, r4 | 477 | add r0, r4 |
468 | mov r1, r3 | 478 | mov r1, r3 |
@@ -482,7 +492,7 @@ deo: | |||
482 | ldr r6, =deo_map | 492 | ldr r6, =deo_map |
483 | ldr r6, [r6, r4, lsl #2] | 493 | ldr r6, [r6, r4, lsl #2] |
484 | stmfd sp!, {r0, r7, lr} | 494 | stmfd sp!, {r0, r7, lr} |
485 | adr r0, device_data | 495 | ldr r0, =device_data |
486 | lsl r4, #4 | 496 | lsl r4, #4 |
487 | add r0, r4 | 497 | add r0, r4 |
488 | strb r5, [r0, r3] | 498 | strb r5, [r0, r3] |
@@ -502,7 +512,7 @@ deo2: | |||
502 | ldr r6, =deo_map | 512 | ldr r6, =deo_map |
503 | ldr r6, [r6, r4, lsl #2] | 513 | ldr r6, [r6, r4, lsl #2] |
504 | stmfd sp!, {r0, r7, lr} | 514 | stmfd sp!, {r0, r7, lr} |
505 | adr r0, device_data | 515 | ldr r0, =device_data |
506 | lsl r4, #4 | 516 | lsl r4, #4 |
507 | add r0, r4 | 517 | add r0, r4 |
508 | strh r5, [r0, r3] | 518 | strh r5, [r0, r3] |
@@ -521,7 +531,7 @@ deir: | |||
521 | ldr r6, =dei_map | 531 | ldr r6, =dei_map |
522 | ldr r6, [r6, r4, lsl #2] | 532 | ldr r6, [r6, r4, lsl #2] |
523 | stmfd sp!, {r0, r7, lr} | 533 | stmfd sp!, {r0, r7, lr} |
524 | adr r0, device_data | 534 | ldr r0, =device_data |
525 | lsl r4, #4 | 535 | lsl r4, #4 |
526 | add r0, r4 | 536 | add r0, r4 |
527 | mov r1, r3 | 537 | mov r1, r3 |
@@ -540,7 +550,7 @@ dei2r: | |||
540 | ldr r6, =dei_map | 550 | ldr r6, =dei_map |
541 | ldr r6, [r6, r4, lsl #2] | 551 | ldr r6, [r6, r4, lsl #2] |
542 | stmfd sp!, {r0, r7, lr} | 552 | stmfd sp!, {r0, r7, lr} |
543 | adr r0, device_data | 553 | ldr r0, =device_data |
544 | lsl r4, #4 | 554 | lsl r4, #4 |
545 | add r0, r4 | 555 | add r0, r4 |
546 | mov r1, r3 | 556 | mov r1, r3 |
@@ -560,7 +570,7 @@ deor: | |||
560 | ldr r6, =deo_map | 570 | ldr r6, =deo_map |
561 | ldr r6, [r6, r4, lsl #2] | 571 | ldr r6, [r6, r4, lsl #2] |
562 | stmfd sp!, {r0, r7, lr} | 572 | stmfd sp!, {r0, r7, lr} |
563 | adr r0, device_data | 573 | ldr r0, =device_data |
564 | lsl r4, #4 | 574 | lsl r4, #4 |
565 | add r0, r4 | 575 | add r0, r4 |
566 | strb r5, [r0, r3] | 576 | strb r5, [r0, r3] |
@@ -580,7 +590,7 @@ deo2r: | |||
580 | ldr r6, =deo_map | 590 | ldr r6, =deo_map |
581 | ldr r6, [r6, r4, lsl #2] | 591 | ldr r6, [r6, r4, lsl #2] |
582 | stmfd sp!, {r0, r7, lr} | 592 | stmfd sp!, {r0, r7, lr} |
583 | adr r0, device_data | 593 | ldr r0, =device_data |
584 | lsl r4, #4 | 594 | lsl r4, #4 |
585 | add r0, r4 | 595 | add r0, r4 |
586 | strh r5, [r0, r3] | 596 | strh r5, [r0, r3] |
@@ -593,13 +603,13 @@ deo2r: | |||
593 | b uxn_decode | 603 | b uxn_decode |
594 | 604 | ||
595 | deik: | 605 | deik: |
596 | wpop8 r3 | 606 | wpeek8 r3 |
597 | mov r4, r3, lsr #4 @ idx | 607 | mov r4, r3, lsr #4 @ idx |
598 | and r3, #0x0f @ port | 608 | and r3, #0x0f @ port |
599 | ldr r6, =dei_map | 609 | ldr r6, =dei_map |
600 | ldr r6, [r6, r4, lsl #2] | 610 | ldr r6, [r6, r4, lsl #2] |
601 | stmfd sp!, {r0, r7, lr} | 611 | stmfd sp!, {r0, r7, lr} |
602 | adr r0, device_data | 612 | ldr r0, =device_data |
603 | lsl r4, #4 | 613 | lsl r4, #4 |
604 | add r0, r4 | 614 | add r0, r4 |
605 | mov r1, r3 | 615 | mov r1, r3 |
@@ -612,13 +622,13 @@ deik: | |||
612 | b uxn_decode | 622 | b uxn_decode |
613 | 623 | ||
614 | dei2k: | 624 | dei2k: |
615 | wpop8 r3 | 625 | wpeek8 r3 |
616 | mov r4, r3, lsr #4 @ idx | 626 | mov r4, r3, lsr #4 @ idx |
617 | and r3, #0x0f @ port | 627 | and r3, #0x0f @ port |
618 | ldr r6, =dei_map | 628 | ldr r6, =dei_map |
619 | ldr r6, [r6, r4, lsl #2] | 629 | ldr r6, [r6, r4, lsl #2] |
620 | stmfd sp!, {r0, r7, lr} | 630 | stmfd sp!, {r0, r7, lr} |
621 | adr r0, device_data | 631 | ldr r0, =device_data |
622 | lsl r4, #4 | 632 | lsl r4, #4 |
623 | add r0, r4 | 633 | add r0, r4 |
624 | mov r1, r3 | 634 | mov r1, r3 |
@@ -631,14 +641,14 @@ dei2k: | |||
631 | b uxn_decode | 641 | b uxn_decode |
632 | 642 | ||
633 | deok: | 643 | deok: |
634 | wpop8 r3 | 644 | wpeek8 r3 |
635 | mov r4, r3, lsr #4 @ idx | 645 | mov r4, r3, lsr #4 @ idx |
636 | and r3, #0x0f @ port | 646 | and r3, #0x0f @ port |
637 | wpop8 r5 @ value | 647 | wpeek8 r5 @ value |
638 | ldr r6, =deo_map | 648 | ldr r6, =deo_map |
639 | ldr r6, [r6, r4, lsl #2] | 649 | ldr r6, [r6, r4, lsl #2] |
640 | stmfd sp!, {r0, r7, lr} | 650 | stmfd sp!, {r0, r7, lr} |
641 | adr r0, device_data | 651 | ldr r0, =device_data |
642 | lsl r4, #4 | 652 | lsl r4, #4 |
643 | add r0, r4 | 653 | add r0, r4 |
644 | strb r5, [r0, r3] | 654 | strb r5, [r0, r3] |
@@ -651,14 +661,92 @@ deok: | |||
651 | b uxn_decode | 661 | b uxn_decode |
652 | 662 | ||
653 | deo2k: | 663 | deo2k: |
654 | wpop8 r3 | 664 | wpeek8 r3 |
655 | mov r4, r3, lsr #4 @ idx | 665 | mov r4, r3, lsr #4 @ idx |
656 | and r3, #0x0f @ port | 666 | and r3, #0x0f @ port |
657 | wpop16 r5, r6 @ value | 667 | wpeek16 r5, r6 @ value |
668 | ldr r6, =deo_map | ||
669 | ldr r6, [r6, r4, lsl #2] | ||
670 | stmfd sp!, {r0, r7, lr} | ||
671 | ldr r0, =device_data | ||
672 | lsl r4, #4 | ||
673 | add r0, r4 | ||
674 | strh r5, [r0, r3] | ||
675 | mov r1, r3 | ||
676 | mov lr, pc | ||
677 | bx r6 | ||
678 | ldmfd sp!, {r0, r7, lr} | ||
679 | ldr r1, wst_ptr | ||
680 | ldr r2, rst_ptr | ||
681 | b uxn_decode | ||
682 | |||
683 | deikr: | ||
684 | rpeek8 r3 | ||
685 | mov r4, r3, lsr #4 @ idx | ||
686 | and r3, #0x0f @ port | ||
687 | ldr r6, =dei_map | ||
688 | ldr r6, [r6, r4, lsl #2] | ||
689 | stmfd sp!, {r0, r7, lr} | ||
690 | ldr r0, =device_data | ||
691 | lsl r4, #4 | ||
692 | add r0, r4 | ||
693 | mov r1, r3 | ||
694 | mov lr, pc | ||
695 | bx r6 | ||
696 | ldr r1, wst_ptr | ||
697 | ldr r2, rst_ptr | ||
698 | rpush8 r0 | ||
699 | ldmfd sp!, {r0, r7, lr} | ||
700 | b uxn_decode | ||
701 | |||
702 | dei2kr: | ||
703 | rpeek8 r3 | ||
704 | mov r4, r3, lsr #4 @ idx | ||
705 | and r3, #0x0f @ port | ||
706 | ldr r6, =dei_map | ||
707 | ldr r6, [r6, r4, lsl #2] | ||
708 | stmfd sp!, {r0, r7, lr} | ||
709 | ldr r0, =device_data | ||
710 | lsl r4, #4 | ||
711 | add r0, r4 | ||
712 | mov r1, r3 | ||
713 | mov lr, pc | ||
714 | bx r6 | ||
715 | ldr r1, wst_ptr | ||
716 | ldr r2, rst_ptr | ||
717 | rpush16 r0 | ||
718 | ldmfd sp!, {r0, r7, lr} | ||
719 | b uxn_decode | ||
720 | |||
721 | deokr: | ||
722 | rpeek8 r3 | ||
723 | mov r4, r3, lsr #4 @ idx | ||
724 | and r3, #0x0f @ port | ||
725 | rpeek8 r5 @ value | ||
658 | ldr r6, =deo_map | 726 | ldr r6, =deo_map |
659 | ldr r6, [r6, r4, lsl #2] | 727 | ldr r6, [r6, r4, lsl #2] |
660 | stmfd sp!, {r0, r7, lr} | 728 | stmfd sp!, {r0, r7, lr} |
661 | adr r0, device_data | 729 | ldr r0, =device_data |
730 | lsl r4, #4 | ||
731 | add r0, r4 | ||
732 | strb r5, [r0, r3] | ||
733 | mov r1, r3 | ||
734 | mov lr, pc | ||
735 | bx r6 | ||
736 | ldmfd sp!, {r0, r7, lr} | ||
737 | ldr r1, wst_ptr | ||
738 | ldr r2, rst_ptr | ||
739 | b uxn_decode | ||
740 | |||
741 | deo2kr: | ||
742 | rpeek8 r3 | ||
743 | mov r4, r3, lsr #4 @ idx | ||
744 | and r3, #0x0f @ port | ||
745 | rpeek16 r5, r6 @ value | ||
746 | ldr r6, =deo_map | ||
747 | ldr r6, [r6, r4, lsl #2] | ||
748 | stmfd sp!, {r0, r7, lr} | ||
749 | ldr r0, =device_data | ||
662 | lsl r4, #4 | 750 | lsl r4, #4 |
663 | add r0, r4 | 751 | add r0, r4 |
664 | strh r5, [r0, r3] | 752 | strh r5, [r0, r3] |
@@ -2070,3 +2158,423 @@ sft2k: | |||
2070 | 2158 | ||
2071 | .ltorg | 2159 | .ltorg |
2072 | .align 2 | 2160 | .align 2 |
2161 | |||
2162 | inckr: | ||
2163 | rpeek8 r3 | ||
2164 | add r3, #1 | ||
2165 | rpush8 r3 | ||
2166 | b uxn_decode | ||
2167 | |||
2168 | inc2kr: | ||
2169 | rpeek16 r3, r5 | ||
2170 | add r3, r3, #1 | ||
2171 | rpush16 r3 | ||
2172 | b uxn_decode | ||
2173 | |||
2174 | popkr: | ||
2175 | sub r1, #1 | ||
2176 | b uxn_decode | ||
2177 | |||
2178 | pop2kr: | ||
2179 | sub r1, #2 | ||
2180 | b uxn_decode | ||
2181 | |||
2182 | nipkr: | ||
2183 | rpeek8 r3 | ||
2184 | strb r3, [r1, #-1] | ||
2185 | b uxn_decode | ||
2186 | |||
2187 | nip2kr: | ||
2188 | rpeek16 r3, r5 | ||
2189 | strb r3, [r1, #-1] | ||
2190 | lsr r3, #8 | ||
2191 | strb r3, [r1, #-2] | ||
2192 | b uxn_decode | ||
2193 | |||
2194 | swpkr: | ||
2195 | rpeek8 r3 | ||
2196 | rpeek8 r4 | ||
2197 | rpush8 r3 | ||
2198 | rpush8 r4 | ||
2199 | b uxn_decode | ||
2200 | |||
2201 | swp2kr: | ||
2202 | rpeek16 r3, r5 | ||
2203 | rpeek16 r4, r5 | ||
2204 | rpush16 r3 | ||
2205 | rpush16 r4 | ||
2206 | b uxn_decode | ||
2207 | |||
2208 | rotkr: | ||
2209 | rpeek8 r5 | ||
2210 | rpeek8 r4 | ||
2211 | rpeek8 r3 | ||
2212 | rpush8 r4 | ||
2213 | rpush8 r5 | ||
2214 | rpush8 r3 | ||
2215 | b uxn_decode | ||
2216 | |||
2217 | rot2kr: | ||
2218 | rpeek16 r5, r6 | ||
2219 | rpeek16 r4, r6 | ||
2220 | rpeek16 r3, r6 | ||
2221 | rpush16 r4 | ||
2222 | rpush16 r5 | ||
2223 | rpush16 r3 | ||
2224 | b uxn_decode | ||
2225 | |||
2226 | dupkr: | ||
2227 | rpeek r3, #-1 | ||
2228 | rpush8 r3 | ||
2229 | b uxn_decode | ||
2230 | |||
2231 | dup2kr: | ||
2232 | rpeek r3, #-2 | ||
2233 | rpeek r4, #-1 | ||
2234 | rpush8 r3 | ||
2235 | rpush8 r4 | ||
2236 | b uxn_decode | ||
2237 | |||
2238 | ovrkr: | ||
2239 | rpeek r3, #-2 | ||
2240 | rpush8 r3 | ||
2241 | b uxn_decode | ||
2242 | |||
2243 | ovr2kr: | ||
2244 | rpeek r3, #-4 | ||
2245 | rpeek r4, #-3 | ||
2246 | rpush8 r3 | ||
2247 | rpush8 r4 | ||
2248 | b uxn_decode | ||
2249 | |||
2250 | equkr: | ||
2251 | rpeek8 r3 | ||
2252 | rpeek8 r4 | ||
2253 | sub r3, r4, r3 | ||
2254 | rsbs r4, r3, #0 | ||
2255 | adc r4, r4, r3 | ||
2256 | rpush8 r4 | ||
2257 | b uxn_decode | ||
2258 | |||
2259 | equ2kr: | ||
2260 | rpeek16 r3, r5 | ||
2261 | rpeek16 r4, r5 | ||
2262 | sub r3, r4, r3 | ||
2263 | rsbs r4, r3, #0 | ||
2264 | adc r4, r4, r3 | ||
2265 | rpush8 r4 | ||
2266 | b uxn_decode | ||
2267 | |||
2268 | neqkr: | ||
2269 | rpeek8 r3 | ||
2270 | rpeek8 r4 | ||
2271 | subs r3, r4, r3 | ||
2272 | movne r3, #1 | ||
2273 | rpush8 r3 | ||
2274 | b uxn_decode | ||
2275 | |||
2276 | neq2kr: | ||
2277 | rpeek16 r3, r5 | ||
2278 | rpeek16 r4, r5 | ||
2279 | subs r3, r4, r3 | ||
2280 | movne r3, #1 | ||
2281 | rpush8 r3 | ||
2282 | b uxn_decode | ||
2283 | |||
2284 | gthkr: | ||
2285 | rpeek8 r3 | ||
2286 | rpeek8 r4 | ||
2287 | cmp r4, r3 | ||
2288 | movls r3, #0 | ||
2289 | movhi r3, #1 | ||
2290 | rpush8 r3 | ||
2291 | b uxn_decode | ||
2292 | |||
2293 | gth2kr: | ||
2294 | rpeek16 r3, r5 | ||
2295 | rpeek16 r4, r5 | ||
2296 | cmp r4, r3 | ||
2297 | movls r3, #0 | ||
2298 | movhi r3, #1 | ||
2299 | rpush8 r3 | ||
2300 | b uxn_decode | ||
2301 | |||
2302 | lthkr: | ||
2303 | rpeek8 r3 | ||
2304 | rpeek8 r4 | ||
2305 | cmp r4, r3 | ||
2306 | movcs r3, #0 | ||
2307 | movcc r3, #1 | ||
2308 | rpush8 r3 | ||
2309 | b uxn_decode | ||
2310 | |||
2311 | lth2kr: | ||
2312 | rpeek16 r3, r5 | ||
2313 | rpeek16 r4, r5 | ||
2314 | cmp r4, r3 | ||
2315 | movcs r3, #0 | ||
2316 | movcc r3, #1 | ||
2317 | rpush8 r3 | ||
2318 | b uxn_decode | ||
2319 | |||
2320 | jmpkr: | ||
2321 | rpop8s r3 | ||
2322 | add r0, r3 | ||
2323 | b uxn_decode | ||
2324 | |||
2325 | jmp2kr: | ||
2326 | rpeek16 r3, r5 | ||
2327 | mov r0, r7 | ||
2328 | add r0, r0, r3 | ||
2329 | b uxn_decode | ||
2330 | |||
2331 | jcnkr: | ||
2332 | rpop8s r3 | ||
2333 | rpeek8 r4 | ||
2334 | cmp r4, #0 | ||
2335 | addne r0, r3 | ||
2336 | b uxn_decode | ||
2337 | |||
2338 | jcn2kr: | ||
2339 | rpeek16 r3, r5 | ||
2340 | rpeek8 r4 | ||
2341 | cmp r4, #0 | ||
2342 | movne r0, r7 | ||
2343 | cmp r4, #0 | ||
2344 | addne r0, r0, r3 | ||
2345 | b uxn_decode | ||
2346 | |||
2347 | jsrkr: | ||
2348 | mov r3, r0 | ||
2349 | sub r3, r3, r7 | ||
2350 | rpush16 r3 | ||
2351 | rpop8s r3 | ||
2352 | add r0, r3 | ||
2353 | b uxn_decode | ||
2354 | |||
2355 | jsr2kr: | ||
2356 | mov r3, r0 | ||
2357 | sub r3, r3, r7 | ||
2358 | rpeek16 r3, r5 | ||
2359 | mov r0, r7 | ||
2360 | add r0, r0, r3 | ||
2361 | b uxn_decode | ||
2362 | |||
2363 | sthkr: | ||
2364 | rpeek8 r3 | ||
2365 | rpush8 r3 | ||
2366 | b uxn_decode | ||
2367 | |||
2368 | sth2kr: | ||
2369 | rpeek16 r3, r5 | ||
2370 | rpush16 r3 | ||
2371 | b uxn_decode | ||
2372 | |||
2373 | ldzkr: | ||
2374 | rpeek8 r3 | ||
2375 | zload8 r4, r3 | ||
2376 | rpush8 r4 | ||
2377 | b uxn_decode | ||
2378 | |||
2379 | ldz2kr: | ||
2380 | rpeek8 r3 | ||
2381 | zload8 r4, r3 | ||
2382 | rpush8 r4 | ||
2383 | add r3, #1 | ||
2384 | zload8 r4, r3 | ||
2385 | rpush8 r4 | ||
2386 | b uxn_decode | ||
2387 | |||
2388 | stzkr: | ||
2389 | rpeek8 r3 | ||
2390 | rpeek8 r4 | ||
2391 | zsave8 r4, r3 | ||
2392 | b uxn_decode | ||
2393 | |||
2394 | stz2kr: | ||
2395 | rpeek8 r3 | ||
2396 | rpeek16 r4, r5 | ||
2397 | zsave16 r4, r3 | ||
2398 | b uxn_decode | ||
2399 | |||
2400 | ldrkr: | ||
2401 | rpop8s r4 | ||
2402 | rload8 r3, r4 | ||
2403 | rpush8 r3 | ||
2404 | b uxn_decode | ||
2405 | |||
2406 | ldr2kr: | ||
2407 | rpop8s r4 | ||
2408 | rload8 r3, r4 | ||
2409 | rpush8 r3 | ||
2410 | add r4, #1 | ||
2411 | rload8 r3, r4 | ||
2412 | rpush8 r3 | ||
2413 | b uxn_decode | ||
2414 | |||
2415 | strkr: | ||
2416 | rpop8s r4 | ||
2417 | rpeek8 r3 | ||
2418 | rsave8 r3, r4 | ||
2419 | b uxn_decode | ||
2420 | |||
2421 | str2kr: | ||
2422 | rpop8s r4 | ||
2423 | rpeek16 r3, r5 | ||
2424 | rsave16 r3, r4 | ||
2425 | b uxn_decode | ||
2426 | |||
2427 | ldakr: | ||
2428 | rpeek16 r4, r5 | ||
2429 | aload8 r3, r4 | ||
2430 | rpush8 r3 | ||
2431 | b uxn_decode | ||
2432 | |||
2433 | lda2kr: | ||
2434 | rpeek16 r4, r5 | ||
2435 | aload8 r3, r4 | ||
2436 | rpush8 r3 | ||
2437 | add r4, #1 | ||
2438 | aload8 r3, r4 | ||
2439 | rpush8 r3 | ||
2440 | b uxn_decode | ||
2441 | |||
2442 | stakr: | ||
2443 | rpeek16 r4, r5 | ||
2444 | rpeek8 r3 | ||
2445 | asave8 r3, r4 | ||
2446 | b uxn_decode | ||
2447 | |||
2448 | sta2kr: | ||
2449 | rpeek16 r4, r5 | ||
2450 | rpeek16 r3, r5 | ||
2451 | asave16 r3, r4 | ||
2452 | b uxn_decode | ||
2453 | |||
2454 | addkr: | ||
2455 | rpeek8 r3 | ||
2456 | rpeek8 r4 | ||
2457 | add r3, r3, r4 | ||
2458 | rpush8 r3 | ||
2459 | b uxn_decode | ||
2460 | |||
2461 | add2kr: | ||
2462 | rpeek16 r3, r5 | ||
2463 | rpeek16 r4, r5 | ||
2464 | add r3, r3, r4 | ||
2465 | rpush16 r3 | ||
2466 | b uxn_decode | ||
2467 | |||
2468 | subkr: | ||
2469 | rpeek8 r3 | ||
2470 | rpeek8 r4 | ||
2471 | sub r4, r4, r3 | ||
2472 | rpush8 r4 | ||
2473 | b uxn_decode | ||
2474 | |||
2475 | sub2kr: | ||
2476 | rpeek16 r3, r5 | ||
2477 | rpeek16 r4, r5 | ||
2478 | sub r3, r4, r3 | ||
2479 | rpush16 r3 | ||
2480 | b uxn_decode | ||
2481 | |||
2482 | mulkr: | ||
2483 | rpeek8 r3 | ||
2484 | rpeek8 r4 | ||
2485 | mul r4, r3, r4 | ||
2486 | rpush8 r4 | ||
2487 | b uxn_decode | ||
2488 | |||
2489 | mul2kr: | ||
2490 | rpeek16 r3, r5 | ||
2491 | rpeek16 r4, r5 | ||
2492 | mul r3, r4, r3 | ||
2493 | rpush16 r3 | ||
2494 | b uxn_decode | ||
2495 | |||
2496 | divkr: | ||
2497 | rpeek8 r3 | ||
2498 | rpeek8 r4 | ||
2499 | push {r0, r1, r2, r7, lr} | ||
2500 | mov r1, r3 | ||
2501 | mov r0, r4 | ||
2502 | bl __aeabi_uidiv | ||
2503 | mov r3, r0 | ||
2504 | pop {r0, r1, r2, r7, lr} | ||
2505 | rpush8 r3 | ||
2506 | b uxn_decode | ||
2507 | |||
2508 | div2kr: | ||
2509 | rpeek16 r3, r5 | ||
2510 | rpeek16 r4, r5 | ||
2511 | push {r0, r1, r2, r7, lr} | ||
2512 | mov r1, r3 | ||
2513 | mov r0, r4 | ||
2514 | bl __aeabi_uidiv | ||
2515 | mov r3, r0 | ||
2516 | pop {r0, r1, r2, r7, lr} | ||
2517 | rpush16 r3 | ||
2518 | b uxn_decode | ||
2519 | |||
2520 | andkr: | ||
2521 | rpeek8 r3 | ||
2522 | rpeek8 r4 | ||
2523 | and r3, r3, r4 | ||
2524 | rpush8 r3 | ||
2525 | b uxn_decode | ||
2526 | |||
2527 | and2kr: | ||
2528 | rpeek16 r3, r5 | ||
2529 | rpeek16 r4, r5 | ||
2530 | and r3, r3, r4 | ||
2531 | rpush16 r3 | ||
2532 | b uxn_decode | ||
2533 | |||
2534 | orakr: | ||
2535 | rpeek8 r3 | ||
2536 | rpeek8 r4 | ||
2537 | orr r3, r3, r4 | ||
2538 | rpush8 r3 | ||
2539 | b uxn_decode | ||
2540 | |||
2541 | ora2kr: | ||
2542 | rpeek16 r3, r5 | ||
2543 | rpeek16 r4, r5 | ||
2544 | orr r3, r3, r4 | ||
2545 | rpush16 r3 | ||
2546 | b uxn_decode | ||
2547 | |||
2548 | eorkr: | ||
2549 | rpeek8 r3 | ||
2550 | rpeek8 r4 | ||
2551 | eor r3, r3, r4 | ||
2552 | rpush8 r3 | ||
2553 | b uxn_decode | ||
2554 | |||
2555 | eor2kr: | ||
2556 | rpeek16 r3, r5 | ||
2557 | rpeek16 r4, r5 | ||
2558 | eor r3, r3, r4 | ||
2559 | rpush16 r3 | ||
2560 | b uxn_decode | ||
2561 | |||
2562 | sftkr: | ||
2563 | rpeek8 r4 | ||
2564 | rpeek8 r3 | ||
2565 | lsr r5, r4, #4 | ||
2566 | and r4, #0x0f | ||
2567 | lsr r3, r3, r4 | ||
2568 | lsl r3, r3, r5 | ||
2569 | rpush8 r3 | ||
2570 | b uxn_decode | ||
2571 | |||
2572 | sft2kr: | ||
2573 | rpeek8 r4 | ||
2574 | rpeek16 r3, r5 | ||
2575 | lsr r5, r4, #4 | ||
2576 | and r4, #0x0f | ||
2577 | lsr r3, r3, r4 | ||
2578 | lsl r3, r3, r5 | ||
2579 | rpush16 r3 | ||
2580 | b uxn_decode | ||