aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-08-28 15:41:44 +0200
committerBad Diode <bd@badd10de.dev>2023-08-28 15:41:44 +0200
commit36f915209713b8d7b79ac607f22f32c389ae2d67 (patch)
treead65ed529d1bfd402541b0eae23de7f9b41409e2
parenta8b0b69c14f2eef465fdb99ea099bbeeb6d3e2f8 (diff)
downloaduxngba-36f915209713b8d7b79ac607f22f32c389ae2d67.tar.gz
uxngba-36f915209713b8d7b79ac607f22f32c389ae2d67.zip
Added logic operations and, or, eor
-rw-r--r--src/main.c12
-rw-r--r--src/uxn-core.s545
2 files changed, 295 insertions, 262 deletions
diff --git a/src/main.c b/src/main.c
index 31d97b3..538604b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -104,10 +104,18 @@ init_uxn() {
104 // 0xa0, 0x34, 0x12, 0x0b, // -> ( 00 ) 104 // 0xa0, 0x34, 0x12, 0x0b, // -> ( 00 )
105 // 0xa0, 0x12, 0x34, 0xa0, 0x34, 0x56, 0x2b, // -> ( 01 ) 105 // 0xa0, 0x12, 0x34, 0xa0, 0x34, 0x56, 0x2b, // -> ( 01 )
106 // 0xa0, 0x34, 0x56, 0xa0, 0x12, 0x34, 0x2b, // -> ( 00 ) 106 // 0xa0, 0x34, 0x56, 0xa0, 0x12, 0x34, 0x2b, // -> ( 00 )
107 // AND. 107 // // AND.
108 // 0xa0, 0x0f, 0x88, 0x1c, // -> ( 08 ) 108 // 0xa0, 0x0f, 0x88, 0x1c, // -> ( 08 )
109 // 0xa0, 0xf0, 0x88, 0x1c, // -> ( 80 ) 109 // 0xa0, 0xf0, 0x88, 0x1c, // -> ( 80 )
110 // 0xa0, 0x0f, 0x88, 0x3c, // -> ( 01 ) 110 // 0xa0, 0x00, 0x0f, 0xa0, 0x99, 0x88, 0x3c, // -> ( 00 08 )
111 // // ORA.
112 // 0xa0, 0x0f, 0x88, 0x1d, // -> ( 8f )
113 // 0xa0, 0xf0, 0x08, 0x1d, // -> ( f8 )
114 // 0xa0, 0xf0, 0x0f, 0xa0, 0xaa, 0xaa, 0x3d, // -> ( fa af )
115 // EOR.
116 0xa0, 0x0f, 0x88, 0x1e, // -> ( 87 )
117 0xa0, 0xf0, 0x08, 0x1e, // -> ( f8 )
118 0xa0, 0xf0, 0x0f, 0xa0, 0xaa, 0xaa, 0x3e, // -> ( 5a a5 )
111 119
112 }; 120 };
113 memcpy(uxn_ram + PAGE_PROGRAM, uxn_rom, sizeof(uxn_rom)); 121 memcpy(uxn_ram + PAGE_PROGRAM, uxn_rom, sizeof(uxn_rom));
diff --git a/src/uxn-core.s b/src/uxn-core.s
index 732b6c2..e6e58c3 100644
--- a/src/uxn-core.s
+++ b/src/uxn-core.s
@@ -78,6 +78,267 @@ uxn_ret:
78 ldrb \a, [r1, \b] 78 ldrb \a, [r1, \b]
79.endm 79.endm
80 80
81@ OP table
82op_table:
83 .word brk @ 0x00
84 .word inc @ 0x01
85 .word pop @ 0x02
86 .word nip @ 0x03
87 .word swp @ 0x04
88 .word rot @ 0x05
89 .word dup @ 0x06
90 .word ovr @ 0x07
91 .word equ @ 0x08
92 .word neq @ 0x09
93 .word gth @ 0x0a
94 .word lth @ 0x0b
95 .word jmp @ 0x0c
96 .word jcn @ 0x0d
97 .word jsr @ 0x0e
98 .word sth @ 0x0f
99 .word ldz @ 0x00
100 .word stz @ 0x11
101 .word ldr @ 0x12
102 .word str @ 0x13
103 .word lda @ 0x14
104 .word sta @ 0x15
105 .word dei @ 0x16
106 .word deo @ 0x17
107 .word add @ 0x18
108 .word sub @ 0x19
109 .word mul @ 0x1a
110 .word div @ 0x1b
111 .word and @ 0x1c
112 .word ora @ 0x1d
113 .word eor @ 0x1e
114 .word sft @ 0x1f
115 .word brk @ 0x20
116 .word inc2 @ 0x21
117 .word pop2 @ 0x22
118 .word nip2 @ 0x23
119 .word swp2 @ 0x24
120 .word rot2 @ 0x25
121 .word dup2 @ 0x26
122 .word ovr2 @ 0x27
123 .word equ2 @ 0x28
124 .word neq2 @ 0x29
125 .word gth2 @ 0x2a
126 .word lth2 @ 0x2b
127 .word jmp2 @ 0x2c
128 .word jcn2 @ 0x2d
129 .word jsr2 @ 0x2e
130 .word sth2 @ 0x2f
131 .word ldz2 @ 0x30
132 .word stz2 @ 0x31
133 .word ldr2 @ 0x32
134 .word str2 @ 0x33
135 .word lda2 @ 0x34
136 .word sta2 @ 0x35
137 .word dei2 @ 0x36
138 .word deo2 @ 0x37
139 .word add2 @ 0x38
140 .word sub2 @ 0x39
141 .word mul2 @ 0x3a
142 .word div2 @ 0x3b
143 .word and2 @ 0x3c
144 .word ora2 @ 0x3d
145 .word eor2 @ 0x3e
146 .word sft2 @ 0x3f
147@ TODO: Can we mask this instead of having empty space?
148 .word brk @ 0x40
149 .word brk @ 0x41
150 .word brk @ 0x42
151 .word brk @ 0x43
152 .word brk @ 0x44
153 .word brk @ 0x45
154 .word brk @ 0x46
155 .word brk @ 0x47
156 .word brk @ 0x48
157 .word brk @ 0x49
158 .word brk @ 0x4a
159 .word brk @ 0x4b
160 .word brk @ 0x4c
161 .word brk @ 0x4d
162 .word brk @ 0x4e
163 .word brk @ 0x4f
164 .word brk @ 0x50
165 .word brk @ 0x51
166 .word brk @ 0x52
167 .word brk @ 0x53
168 .word brk @ 0x54
169 .word brk @ 0x55
170 .word brk @ 0x56
171 .word brk @ 0x57
172 .word brk @ 0x58
173 .word brk @ 0x59
174 .word brk @ 0x5a
175 .word brk @ 0x5b
176 .word brk @ 0x5c
177 .word brk @ 0x5d
178 .word brk @ 0x5e
179 .word brk @ 0x5f
180 .word brk @ 0x60
181 .word brk @ 0x61
182 .word brk @ 0x62
183 .word brk @ 0x63
184 .word brk @ 0x64
185 .word brk @ 0x65
186 .word brk @ 0x66
187 .word brk @ 0x67
188 .word brk @ 0x68
189 .word brk @ 0x69
190 .word brk @ 0x6a
191 .word brk @ 0x6b
192 .word brk @ 0x6c
193 .word brk @ 0x6d
194 .word brk @ 0x6e
195 .word brk @ 0x6f
196 .word brk @ 0x70
197 .word brk @ 0x71
198 .word brk @ 0x72
199 .word brk @ 0x73
200 .word brk @ 0x74
201 .word brk @ 0x75
202 .word brk @ 0x76
203 .word brk @ 0x77
204 .word brk @ 0x78
205 .word brk @ 0x79
206 .word brk @ 0x7a
207 .word brk @ 0x7b
208 .word brk @ 0x7c
209 .word brk @ 0x7d
210 .word brk @ 0x7e
211 .word brk @ 0x7f
212 .word litr @ 0x80
213 .word brk @ 0x81
214 .word brk @ 0x82
215 .word brk @ 0x83
216 .word brk @ 0x84
217 .word brk @ 0x85
218 .word brk @ 0x86
219 .word brk @ 0x87
220 .word brk @ 0x88
221 .word brk @ 0x89
222 .word brk @ 0x8a
223 .word brk @ 0x8b
224 .word brk @ 0x8c
225 .word brk @ 0x8d
226 .word brk @ 0x8e
227 .word brk @ 0x8f
228 .word brk @ 0x90
229 .word brk @ 0x91
230 .word brk @ 0x92
231 .word brk @ 0x93
232 .word brk @ 0x94
233 .word brk @ 0x95
234 .word brk @ 0x96
235 .word brk @ 0x97
236 .word brk @ 0x98
237 .word brk @ 0x99
238 .word brk @ 0x9a
239 .word brk @ 0x9b
240 .word brk @ 0x9c
241 .word brk @ 0x9d
242 .word brk @ 0x9e
243 .word brk @ 0x9f
244 .word lit2r @ 0xa0
245 .word brk @ 0xa1
246 .word brk @ 0xa2
247 .word brk @ 0xa3
248 .word brk @ 0xa4
249 .word brk @ 0xa5
250 .word brk @ 0xa6
251 .word brk @ 0xa7
252 .word brk @ 0xa8
253 .word brk @ 0xa9
254 .word brk @ 0xaa
255 .word brk @ 0xab
256 .word brk @ 0xac
257 .word brk @ 0xad
258 .word brk @ 0xae
259 .word brk @ 0xaf
260 .word brk @ 0xb0
261 .word brk @ 0xb1
262 .word brk @ 0xb2
263 .word brk @ 0xb3
264 .word brk @ 0xb4
265 .word brk @ 0xb5
266 .word brk @ 0xb6
267 .word brk @ 0xb7
268 .word brk @ 0xb8
269 .word brk @ 0xb9
270 .word brk @ 0xba
271 .word brk @ 0xbb
272 .word brk @ 0xbc
273 .word brk @ 0xbd
274 .word brk @ 0xbe
275 .word brk @ 0xbf
276 .word brk @ 0xc0
277 .word brk @ 0xc1
278 .word brk @ 0xc2
279 .word brk @ 0xc3
280 .word brk @ 0xc4
281 .word brk @ 0xc5
282 .word brk @ 0xc6
283 .word brk @ 0xc7
284 .word brk @ 0xc8
285 .word brk @ 0xc9
286 .word brk @ 0xca
287 .word brk @ 0xcb
288 .word brk @ 0xcc
289 .word brk @ 0xcd
290 .word brk @ 0xce
291 .word brk @ 0xcf
292 .word brk @ 0xd0
293 .word brk @ 0xd1
294 .word brk @ 0xd2
295 .word brk @ 0xd3
296 .word brk @ 0xd4
297 .word brk @ 0xd5
298 .word brk @ 0xd6
299 .word brk @ 0xd7
300 .word brk @ 0xd8
301 .word brk @ 0xd9
302 .word brk @ 0xda
303 .word brk @ 0xdb
304 .word brk @ 0xdc
305 .word brk @ 0xdd
306 .word brk @ 0xde
307 .word brk @ 0xdf
308 .word brk @ 0xe0
309 .word brk @ 0xe1
310 .word brk @ 0xe2
311 .word brk @ 0xe3
312 .word brk @ 0xe4
313 .word brk @ 0xe5
314 .word brk @ 0xe6
315 .word brk @ 0xe7
316 .word brk @ 0xe8
317 .word brk @ 0xe9
318 .word brk @ 0xea
319 .word brk @ 0xeb
320 .word brk @ 0xec
321 .word brk @ 0xed
322 .word brk @ 0xee
323 .word brk @ 0xef
324 .word brk @ 0xf0
325 .word brk @ 0xf1
326 .word brk @ 0xf2
327 .word brk @ 0xf3
328 .word brk @ 0xf4
329 .word brk @ 0xf5
330 .word brk @ 0xf6
331 .word brk @ 0xf7
332 .word brk @ 0xf8
333@ TODO: Can we mask this instead of having empty space?
334 .word lit2r @ 0xf9
335 .word litr @ 0xfa
336 .word lit2r @ 0xfb
337 .word litr @ 0xfc
338 .word jsi @ 0xfd
339 .word jmi @ 0xfe
340 .word jci @ 0xff
341
81@ 342@
82@ OP implementations. 343@ OP implementations.
83@ 344@
@@ -387,21 +648,45 @@ div2:
387 b uxn_decode 648 b uxn_decode
388 649
389and: 650and:
651 wpop8 r3
652 wpop8 r4
653 and r3, r3, r4
654 wpush8 r3
390 b uxn_decode 655 b uxn_decode
391 656
392and2: 657and2:
658 wpop16 r3, r5
659 wpop16 r4, r5
660 and r3, r3, r4
661 wpush16 r3
393 b uxn_decode 662 b uxn_decode
394 663
395ora: 664ora:
665 wpop8 r3
666 wpop8 r4
667 orr r3, r3, r4
668 wpush8 r3
396 b uxn_decode 669 b uxn_decode
397 670
398ora2: 671ora2:
672 wpop16 r3, r5
673 wpop16 r4, r5
674 orr r3, r3, r4
675 wpush16 r3
399 b uxn_decode 676 b uxn_decode
400 677
401eor: 678eor:
679 wpop8 r3
680 wpop8 r4
681 eor r3, r3, r4
682 wpush8 r3
402 b uxn_decode 683 b uxn_decode
403 684
404eor2: 685eor2:
686 wpop16 r3, r5
687 wpop16 r4, r5
688 eor r3, r3, r4
689 wpush16 r3
405 b uxn_decode 690 b uxn_decode
406 691
407sft: 692sft:
@@ -410,263 +695,3 @@ sft:
410sft2: 695sft2:
411 b uxn_decode 696 b uxn_decode
412 697
413@ OP table
414op_table:
415 .word brk @ 0x00
416 .word inc @ 0x01
417 .word pop @ 0x02
418 .word nip @ 0x03
419 .word swp @ 0x04
420 .word rot @ 0x05
421 .word dup @ 0x06
422 .word ovr @ 0x07
423 .word equ @ 0x08
424 .word neq @ 0x09
425 .word gth @ 0x0a
426 .word lth @ 0x0b
427 .word jmp @ 0x0c
428 .word jcn @ 0x0d
429 .word jsr @ 0x0e
430 .word sth @ 0x0f
431 .word ldz @ 0x00
432 .word stz @ 0x11
433 .word ldr @ 0x12
434 .word str @ 0x13
435 .word lda @ 0x14
436 .word sta @ 0x15
437 .word dei @ 0x16
438 .word deo @ 0x17
439 .word add @ 0x18
440 .word sub @ 0x19
441 .word mul @ 0x1a
442 .word div @ 0x1b
443 .word and @ 0x1c
444 .word ora @ 0x1d
445 .word eor @ 0x1e
446 .word sft @ 0x1f
447 .word brk @ 0x20
448 .word inc2 @ 0x21
449 .word pop2 @ 0x22
450 .word nip2 @ 0x23
451 .word swp2 @ 0x24
452 .word rot2 @ 0x25
453 .word dup2 @ 0x26
454 .word ovr2 @ 0x27
455 .word equ2 @ 0x28
456 .word neq2 @ 0x29
457 .word gth2 @ 0x2a
458 .word lth2 @ 0x2b
459 .word jmp2 @ 0x2c
460 .word jcn2 @ 0x2d
461 .word jsr2 @ 0x2e
462 .word sth2 @ 0x2f
463 .word ldz2 @ 0x30
464 .word stz2 @ 0x31
465 .word ldr2 @ 0x32
466 .word str2 @ 0x33
467 .word lda2 @ 0x34
468 .word sta2 @ 0x35
469 .word dei2 @ 0x36
470 .word deo2 @ 0x37
471 .word add2 @ 0x38
472 .word sub2 @ 0x39
473 .word mul2 @ 0x3a
474 .word div2 @ 0x3b
475 .word and2 @ 0x3c
476 .word ora2 @ 0x3d
477 .word eor2 @ 0x3e
478 .word sft2 @ 0x3f
479@ TODO: Can we mask this instead of having empty space?
480 .word brk @ 0x40
481 .word brk @ 0x41
482 .word brk @ 0x42
483 .word brk @ 0x43
484 .word brk @ 0x44
485 .word brk @ 0x45
486 .word brk @ 0x46
487 .word brk @ 0x47
488 .word brk @ 0x48
489 .word brk @ 0x49
490 .word brk @ 0x4a
491 .word brk @ 0x4b
492 .word brk @ 0x4c
493 .word brk @ 0x4d
494 .word brk @ 0x4e
495 .word brk @ 0x4f
496 .word brk @ 0x50
497 .word brk @ 0x51
498 .word brk @ 0x52
499 .word brk @ 0x53
500 .word brk @ 0x54
501 .word brk @ 0x55
502 .word brk @ 0x56
503 .word brk @ 0x57
504 .word brk @ 0x58
505 .word brk @ 0x59
506 .word brk @ 0x5a
507 .word brk @ 0x5b
508 .word brk @ 0x5c
509 .word brk @ 0x5d
510 .word brk @ 0x5e
511 .word brk @ 0x5f
512 .word brk @ 0x60
513 .word brk @ 0x61
514 .word brk @ 0x62
515 .word brk @ 0x63
516 .word brk @ 0x64
517 .word brk @ 0x65
518 .word brk @ 0x66
519 .word brk @ 0x67
520 .word brk @ 0x68
521 .word brk @ 0x69
522 .word brk @ 0x6a
523 .word brk @ 0x6b
524 .word brk @ 0x6c
525 .word brk @ 0x6d
526 .word brk @ 0x6e
527 .word brk @ 0x6f
528 .word brk @ 0x70
529 .word brk @ 0x71
530 .word brk @ 0x72
531 .word brk @ 0x73
532 .word brk @ 0x74
533 .word brk @ 0x75
534 .word brk @ 0x76
535 .word brk @ 0x77
536 .word brk @ 0x78
537 .word brk @ 0x79
538 .word brk @ 0x7a
539 .word brk @ 0x7b
540 .word brk @ 0x7c
541 .word brk @ 0x7d
542 .word brk @ 0x7e
543 .word brk @ 0x7f
544 .word litr @ 0x80
545 .word brk @ 0x81
546 .word brk @ 0x82
547 .word brk @ 0x83
548 .word brk @ 0x84
549 .word brk @ 0x85
550 .word brk @ 0x86
551 .word brk @ 0x87
552 .word brk @ 0x88
553 .word brk @ 0x89
554 .word brk @ 0x8a
555 .word brk @ 0x8b
556 .word brk @ 0x8c
557 .word brk @ 0x8d
558 .word brk @ 0x8e
559 .word brk @ 0x8f
560 .word brk @ 0x90
561 .word brk @ 0x91
562 .word brk @ 0x92
563 .word brk @ 0x93
564 .word brk @ 0x94
565 .word brk @ 0x95
566 .word brk @ 0x96
567 .word brk @ 0x97
568 .word brk @ 0x98
569 .word brk @ 0x99
570 .word brk @ 0x9a
571 .word brk @ 0x9b
572 .word brk @ 0x9c
573 .word brk @ 0x9d
574 .word brk @ 0x9e
575 .word brk @ 0x9f
576 .word lit2r @ 0xa0
577 .word brk @ 0xa1
578 .word brk @ 0xa2
579 .word brk @ 0xa3
580 .word brk @ 0xa4
581 .word brk @ 0xa5
582 .word brk @ 0xa6
583 .word brk @ 0xa7
584 .word brk @ 0xa8
585 .word brk @ 0xa9
586 .word brk @ 0xaa
587 .word brk @ 0xab
588 .word brk @ 0xac
589 .word brk @ 0xad
590 .word brk @ 0xae
591 .word brk @ 0xaf
592 .word brk @ 0xb0
593 .word brk @ 0xb1
594 .word brk @ 0xb2
595 .word brk @ 0xb3
596 .word brk @ 0xb4
597 .word brk @ 0xb5
598 .word brk @ 0xb6
599 .word brk @ 0xb7
600 .word brk @ 0xb8
601 .word brk @ 0xb9
602 .word brk @ 0xba
603 .word brk @ 0xbb
604 .word brk @ 0xbc
605 .word brk @ 0xbd
606 .word brk @ 0xbe
607 .word brk @ 0xbf
608 .word brk @ 0xc0
609 .word brk @ 0xc1
610 .word brk @ 0xc2
611 .word brk @ 0xc3
612 .word brk @ 0xc4
613 .word brk @ 0xc5
614 .word brk @ 0xc6
615 .word brk @ 0xc7
616 .word brk @ 0xc8
617 .word brk @ 0xc9
618 .word brk @ 0xca
619 .word brk @ 0xcb
620 .word brk @ 0xcc
621 .word brk @ 0xcd
622 .word brk @ 0xce
623 .word brk @ 0xcf
624 .word brk @ 0xd0
625 .word brk @ 0xd1
626 .word brk @ 0xd2
627 .word brk @ 0xd3
628 .word brk @ 0xd4
629 .word brk @ 0xd5
630 .word brk @ 0xd6
631 .word brk @ 0xd7
632 .word brk @ 0xd8
633 .word brk @ 0xd9
634 .word brk @ 0xda
635 .word brk @ 0xdb
636 .word brk @ 0xdc
637 .word brk @ 0xdd
638 .word brk @ 0xde
639 .word brk @ 0xdf
640 .word brk @ 0xe0
641 .word brk @ 0xe1
642 .word brk @ 0xe2
643 .word brk @ 0xe3
644 .word brk @ 0xe4
645 .word brk @ 0xe5
646 .word brk @ 0xe6
647 .word brk @ 0xe7
648 .word brk @ 0xe8
649 .word brk @ 0xe9
650 .word brk @ 0xea
651 .word brk @ 0xeb
652 .word brk @ 0xec
653 .word brk @ 0xed
654 .word brk @ 0xee
655 .word brk @ 0xef
656 .word brk @ 0xf0
657 .word brk @ 0xf1
658 .word brk @ 0xf2
659 .word brk @ 0xf3
660 .word brk @ 0xf4
661 .word brk @ 0xf5
662 .word brk @ 0xf6
663 .word brk @ 0xf7
664 .word brk @ 0xf8
665@ TODO: Can we mask this instead of having empty space?
666 .word lit2r @ 0xf9
667 .word litr @ 0xfa
668 .word lit2r @ 0xfb
669 .word litr @ 0xfc
670 .word jsi @ 0xfd
671 .word jmi @ 0xfe
672 .word jci @ 0xff