aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-08-29 17:47:54 +0200
committerBad Diode <bd@badd10de.dev>2023-08-29 17:47:54 +0200
commit4f0a38e9b1d98d07a36499e3024518b7e78f261c (patch)
tree0dcc3b4d08c7be151cb033a16c5cc3bb35c17a4a
parent418aa7666a15ad3348633cc822c56a56eee7c4d9 (diff)
downloaduxngba-4f0a38e9b1d98d07a36499e3024518b7e78f261c.tar.gz
uxngba-4f0a38e9b1d98d07a36499e3024518b7e78f261c.zip
Add OPkr instructions (untested)
-rw-r--r--src/uxn-core.s1060
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
177op_table: 187op_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
595deik: 605deik:
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
614dei2k: 624dei2k:
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
633deok: 643deok:
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
653deo2k: 663deo2k:
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
683deikr:
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
702dei2kr:
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
721deokr:
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
741deo2kr:
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
2162inckr:
2163 rpeek8 r3
2164 add r3, #1
2165 rpush8 r3
2166 b uxn_decode
2167
2168inc2kr:
2169 rpeek16 r3, r5
2170 add r3, r3, #1
2171 rpush16 r3
2172 b uxn_decode
2173
2174popkr:
2175 sub r1, #1
2176 b uxn_decode
2177
2178pop2kr:
2179 sub r1, #2
2180 b uxn_decode
2181
2182nipkr:
2183 rpeek8 r3
2184 strb r3, [r1, #-1]
2185 b uxn_decode
2186
2187nip2kr:
2188 rpeek16 r3, r5
2189 strb r3, [r1, #-1]
2190 lsr r3, #8
2191 strb r3, [r1, #-2]
2192 b uxn_decode
2193
2194swpkr:
2195 rpeek8 r3
2196 rpeek8 r4
2197 rpush8 r3
2198 rpush8 r4
2199 b uxn_decode
2200
2201swp2kr:
2202 rpeek16 r3, r5
2203 rpeek16 r4, r5
2204 rpush16 r3
2205 rpush16 r4
2206 b uxn_decode
2207
2208rotkr:
2209 rpeek8 r5
2210 rpeek8 r4
2211 rpeek8 r3
2212 rpush8 r4
2213 rpush8 r5
2214 rpush8 r3
2215 b uxn_decode
2216
2217rot2kr:
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
2226dupkr:
2227 rpeek r3, #-1
2228 rpush8 r3
2229 b uxn_decode
2230
2231dup2kr:
2232 rpeek r3, #-2
2233 rpeek r4, #-1
2234 rpush8 r3
2235 rpush8 r4
2236 b uxn_decode
2237
2238ovrkr:
2239 rpeek r3, #-2
2240 rpush8 r3
2241 b uxn_decode
2242
2243ovr2kr:
2244 rpeek r3, #-4
2245 rpeek r4, #-3
2246 rpush8 r3
2247 rpush8 r4
2248 b uxn_decode
2249
2250equkr:
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
2259equ2kr:
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
2268neqkr:
2269 rpeek8 r3
2270 rpeek8 r4
2271 subs r3, r4, r3
2272 movne r3, #1
2273 rpush8 r3
2274 b uxn_decode
2275
2276neq2kr:
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
2284gthkr:
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
2293gth2kr:
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
2302lthkr:
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
2311lth2kr:
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
2320jmpkr:
2321 rpop8s r3
2322 add r0, r3
2323 b uxn_decode
2324
2325jmp2kr:
2326 rpeek16 r3, r5
2327 mov r0, r7
2328 add r0, r0, r3
2329 b uxn_decode
2330
2331jcnkr:
2332 rpop8s r3
2333 rpeek8 r4
2334 cmp r4, #0
2335 addne r0, r3
2336 b uxn_decode
2337
2338jcn2kr:
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
2347jsrkr:
2348 mov r3, r0
2349 sub r3, r3, r7
2350 rpush16 r3
2351 rpop8s r3
2352 add r0, r3
2353 b uxn_decode
2354
2355jsr2kr:
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
2363sthkr:
2364 rpeek8 r3
2365 rpush8 r3
2366 b uxn_decode
2367
2368sth2kr:
2369 rpeek16 r3, r5
2370 rpush16 r3
2371 b uxn_decode
2372
2373ldzkr:
2374 rpeek8 r3
2375 zload8 r4, r3
2376 rpush8 r4
2377 b uxn_decode
2378
2379ldz2kr:
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
2388stzkr:
2389 rpeek8 r3
2390 rpeek8 r4
2391 zsave8 r4, r3
2392 b uxn_decode
2393
2394stz2kr:
2395 rpeek8 r3
2396 rpeek16 r4, r5
2397 zsave16 r4, r3
2398 b uxn_decode
2399
2400ldrkr:
2401 rpop8s r4
2402 rload8 r3, r4
2403 rpush8 r3
2404 b uxn_decode
2405
2406ldr2kr:
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
2415strkr:
2416 rpop8s r4
2417 rpeek8 r3
2418 rsave8 r3, r4
2419 b uxn_decode
2420
2421str2kr:
2422 rpop8s r4
2423 rpeek16 r3, r5
2424 rsave16 r3, r4
2425 b uxn_decode
2426
2427ldakr:
2428 rpeek16 r4, r5
2429 aload8 r3, r4
2430 rpush8 r3
2431 b uxn_decode
2432
2433lda2kr:
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
2442stakr:
2443 rpeek16 r4, r5
2444 rpeek8 r3
2445 asave8 r3, r4
2446 b uxn_decode
2447
2448sta2kr:
2449 rpeek16 r4, r5
2450 rpeek16 r3, r5
2451 asave16 r3, r4
2452 b uxn_decode
2453
2454addkr:
2455 rpeek8 r3
2456 rpeek8 r4
2457 add r3, r3, r4
2458 rpush8 r3
2459 b uxn_decode
2460
2461add2kr:
2462 rpeek16 r3, r5
2463 rpeek16 r4, r5
2464 add r3, r3, r4
2465 rpush16 r3
2466 b uxn_decode
2467
2468subkr:
2469 rpeek8 r3
2470 rpeek8 r4
2471 sub r4, r4, r3
2472 rpush8 r4
2473 b uxn_decode
2474
2475sub2kr:
2476 rpeek16 r3, r5
2477 rpeek16 r4, r5
2478 sub r3, r4, r3
2479 rpush16 r3
2480 b uxn_decode
2481
2482mulkr:
2483 rpeek8 r3
2484 rpeek8 r4
2485 mul r4, r3, r4
2486 rpush8 r4
2487 b uxn_decode
2488
2489mul2kr:
2490 rpeek16 r3, r5
2491 rpeek16 r4, r5
2492 mul r3, r4, r3
2493 rpush16 r3
2494 b uxn_decode
2495
2496divkr:
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
2508div2kr:
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
2520andkr:
2521 rpeek8 r3
2522 rpeek8 r4
2523 and r3, r3, r4
2524 rpush8 r3
2525 b uxn_decode
2526
2527and2kr:
2528 rpeek16 r3, r5
2529 rpeek16 r4, r5
2530 and r3, r3, r4
2531 rpush16 r3
2532 b uxn_decode
2533
2534orakr:
2535 rpeek8 r3
2536 rpeek8 r4
2537 orr r3, r3, r4
2538 rpush8 r3
2539 b uxn_decode
2540
2541ora2kr:
2542 rpeek16 r3, r5
2543 rpeek16 r4, r5
2544 orr r3, r3, r4
2545 rpush16 r3
2546 b uxn_decode
2547
2548eorkr:
2549 rpeek8 r3
2550 rpeek8 r4
2551 eor r3, r3, r4
2552 rpush8 r3
2553 b uxn_decode
2554
2555eor2kr:
2556 rpeek16 r3, r5
2557 rpeek16 r4, r5
2558 eor r3, r3, r4
2559 rpush16 r3
2560 b uxn_decode
2561
2562sftkr:
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
2572sft2kr:
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