ucisc 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f63e8cf951294db28c6e565163cb22d3a43d00c86c7da842cf6b7ad6665325ab
4
- data.tar.gz: 4326c9281cf4d201390153bc6d78df799464b56e11aa4a6206354a9794f18be8
3
+ metadata.gz: a3e72e998af8419f04b938e16106485af9a6d9eecd4eca52c4c9ed47ac6a0df4
4
+ data.tar.gz: 4201a507834a84d5fc67b2f53a04d404b017ecf6a24f9459bf47ba75d6f85eeb
5
5
  SHA512:
6
- metadata.gz: 703fff374be93b129a19a3ae17e036995474efcb2d91ca9728aadd047c510d5e072159da9da87b7bdc49675fee540f4854613e4ef8eb3615a3fa21c7f4d13b2e
7
- data.tar.gz: 1a9b7700263479fb8b9c944890a8ae28fcec8e05bc973d8dff2def71d8f1e1bc5273926d079c15449c6c15e75cc2e0bbe8ba480334cefeed3dc61c8e57b66164
6
+ metadata.gz: eaab2729f733ffa9256500fc358bef442a4c21124774ad39f74d5b88272721f27db95daceb72465244b71a336e3869f96d3e064fc3b23e102fd184231eaaa80c
7
+ data.tar.gz: 0b527c73e2f4ceaecf5614d07cc49e47daa269340703cda088cc2e62b2b4846cdac8daa3b269a68379851cf437a06bf01084b1f95fc166ab4ae25c9b5955a46c
@@ -1,8 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ucisc (0.1.3)
4
+ ucisc (0.1.4)
5
+ bundler
5
6
  byebug
7
+ chunky_png
6
8
  gtk2
7
9
  tty-screen
8
10
 
@@ -18,6 +20,7 @@ GEM
18
20
  cairo-gobject (3.4.3)
19
21
  cairo (>= 1.16.2)
20
22
  glib2 (= 3.4.3)
23
+ chunky_png (1.3.11)
21
24
  gdk_pixbuf2 (3.4.3)
22
25
  gio2 (= 3.4.3)
23
26
  gio2 (3.4.3)
@@ -0,0 +1,101 @@
1
+ ##########################
2
+ # Standard uCISC Library #
3
+ ##########################
4
+ # Contains the following functions:
5
+ #
6
+ # * $&device_control <= init_device($device_index)
7
+ # * mem_copy(&source, &target, $len)
8
+ #
9
+
10
+ ################
11
+ # Syntax Setup #
12
+ ################
13
+ &stack as 1.reg
14
+ &pc as 0.reg
15
+ &banking as 4.reg
16
+
17
+ # Conditionals
18
+ $zero? as 0.eff
19
+ $not_zero? as 1.eff
20
+ $negative? as 2.eff
21
+
22
+ # Compute Ops
23
+ $invert as 0x0.op
24
+ $and as 0x1.op
25
+ $or as 0x2.op
26
+ $xor as 0x3.op
27
+ $increment as 0x4.op
28
+ $shift_left as 0x5.op
29
+ $shift_right as 0x6.op
30
+ $swap_bytes as 0x7.op
31
+ $high_byte as 0x8.op # zero least significant byte
32
+ $low_byte as 0x9.op # zero most significant byte
33
+ $add as 0xA.op
34
+ $subtract as 0xB.op
35
+ $multiply as 0xC.op
36
+ $divide as 0xD.op
37
+ $add_overflow as 0xE.op
38
+ $mask_to_overflow as 0xF.op
39
+
40
+ ################
41
+ # Main Section #
42
+ ################
43
+ &stack as copy 0.imm 1.reg
44
+
45
+ $stack <= Entry()
46
+
47
+ Entry:
48
+ copy &pc &pc
49
+
50
+ # $stack[$&device_control] <= init_device($device_index)
51
+ #
52
+ # Takes a device index and caclulates the control word for that device. It
53
+ # sets the init_device of the targeted device to the current processor, giving
54
+ # subsequent code the ability to interact with the banked memory and controls.
55
+ init_device: # $&device_control <= ($device_index)
56
+ $device_index, $&return, $&device_control = $stack
57
+
58
+ &shift_amount as copy 4.imm 2.reg
59
+ $&control = compute $shift_left &shift_amount $device_index
60
+ copy $&control $&device_control
61
+
62
+ &device_control = copy $&control 2.reg
63
+ $device_control.init as $device_control 2.imm
64
+ &self = copy 2.imm 3.reg
65
+
66
+ copy 1.imm &banking
67
+ copy $self $device_control.init
68
+ copy 0.imm &banking
69
+
70
+ copy &&return &stack
71
+ copy $&return &pc pop
72
+
73
+ # $stack <= mem_copy(&source, &target, $len)
74
+ #
75
+ # Copies $len words from $source to $target. Note, no changes to banking are
76
+ # made, so it will respect any banking setup prior to calling the function.
77
+ mem_copy:
78
+ $len, $&target, $&source, $&return = $stack
79
+
80
+ &source as copy $&source 2.reg
81
+ &target as copy $&target 3.reg
82
+
83
+ compute $add 0.imm $len # sets the flags
84
+ # Loop over string, copy to $term
85
+ {
86
+ copy &pc break.disp &pc $zero?
87
+
88
+ {
89
+ copy $source $target
90
+ compute $add 1.imm &source
91
+ compute $add 1.imm &target
92
+
93
+ compute 0xB.op/subtract/ 1.imm $len
94
+
95
+ copy &pc loop.disp &pc $not_zero?
96
+ }
97
+ }
98
+
99
+ copy &&return &stack
100
+ copy $&return &pc pop
101
+
@@ -0,0 +1,195 @@
1
+ # 64x48 pixel image
2
+ image.data:
3
+
4
+ % 0024 0024 0024 0024 0024 0024 0024 0024 0024 0024 0024 0024 0024 0024 0024 0024
5
+ % 0025 0025 0024 0024 0024 0024 0024 0024 0025 0025 0025 0025 0025 0025 0025 0025
6
+ % 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
7
+ % 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
8
+ % 0024 0024 0024 0024 0024 0024 0024 0025 0025 0025 0025 0025 0025 0025 0025 0025
9
+ % 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
10
+ % 0025 0025 0025 0025 0025 0026 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
11
+ % 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
12
+ % 0024 0024 0024 0024 0024 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
13
+ % 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0026 0026
14
+ % 0026 0026 0026 0026 0026 0026 0026 0026 0026 0026 0026 0026 0026 0025 0025 0025
15
+ % 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
16
+ % 0024 0024 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
17
+ % 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0026 0026 0026 0026
18
+ % 0026 0026 0036 0036 0036 0036 0036 0026 0026 0026 0026 0026 0026 0026 0026 0026
19
+ % 0026 0026 0026 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
20
+ % 0024 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
21
+ % 0025 0025 0025 0025 0025 0025 0025 0025 0025 0026 0026 0036 0036 0036 0036 0036
22
+ % 0036 0036 0036 0036 0036 0036 0036 0036 0036 0036 0036 0036 0036 0036 0036 0036
23
+ % 0036 0036 0026 0026 0026 0026 0036 0036 0026 0025 0025 0025 0025 0025 0025 0025
24
+ % 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025 0025
25
+ % 0025 0025 0025 0025 0135 0035 0135 0136 0136 0136 0136 0136 0136 0136 0136 0136
26
+ % 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136
27
+ % 0036 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0036 0035 0035 0025 0025
28
+ % 0125 0125 0125 0125 0125 0125 0125 0125 0135 0135 0135 0135 0135 0135 0135 0135
29
+ % 0135 0135 0135 0135 0135 0135 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136
30
+ % 0136 0137 0137 0136 0137 0137 0137 0136 0136 0136 0136 0136 0136 0136 0136 0136
31
+ % 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0135 0136 0135 0135
32
+ % 0135 0125 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135
33
+ % 0135 0135 0135 0135 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136
34
+ % 0137 0137 0137 0137 0137 0137 0137 0137 0137 0137 0137 0136 0136 0136 0136 0136
35
+ % 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136
36
+ % 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135
37
+ % 0135 0135 0135 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0147 0147 0147
38
+ % 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0136
39
+ % 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136
40
+ % 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135
41
+ % 0135 0136 0136 0136 0136 0136 0136 0146 0146 0146 0146 0147 0147 0147 0147 0147
42
+ % 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147
43
+ % 0146 0146 0146 0146 0146 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136 0136
44
+ % 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0136 0136
45
+ % 0136 0136 0146 0146 0146 0146 0146 0146 0146 0146 0146 0147 0147 0147 0147 0147
46
+ % 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147 0147
47
+ % 0147 0146 0146 0146 0146 0146 0146 0146 0146 0136 0136 0136 0136 0136 0136 0135
48
+ % 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0245 0245 0245 0245 0245 0145
49
+ % 0245 0245 0246 0246 0246 0246 0246 0246 0246 0246 0246 0246 0247 0247 0247 0247
50
+ % 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247
51
+ % 0247 0247 0246 0246 0246 0246 0246 0246 0246 0246 0146 0146 0135 0135 0135 0135
52
+ % 0235 0235 0235 0235 0235 0245 0245 0245 0345 0245 0245 0245 0245 0245 0245 0245
53
+ % 0245 0245 0245 0245 0246 0246 0246 0246 0246 0246 0246 0246 0357 0357 0247 0247
54
+ % 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0246
55
+ % 0246 0246 0246 0246 0246 0246 0246 0246 0246 0246 0246 0246 0245 0235 0235 0135
56
+ % 0235 0235 0235 0235 0235 0235 0345 0345 0345 0345 0345 0245 0245 0345 0345 0345
57
+ % 0245 0245 0245 0245 0245 0245 0245 0245 0246 0246 0245 0124 0566 0BBB 0789 0457
58
+ % 0357 0247 0247 0247 0247 0247 0247 0247 0247 0247 0247 0246 0246 0246 0246 0246
59
+ % 0246 0346 0246 0246 0246 0246 0246 0246 0246 0245 0235 0235 0235 0235 0235 0235
60
+ % 0134 0134 0234 0234 0234 0234 0234 0234 0234 0235 0235 0235 0235 0235 0235 0235
61
+ % 0235 0235 0235 0235 0235 0235 0235 0235 0235 0134 0113 0012 0556 0AA9 0AAA 0899
62
+ % 0677 0678 0357 0246 0246 0246 0246 0246 0246 0246 0246 0246 0246 0246 0246 0246
63
+ % 0246 0246 0246 0246 0246 0246 0235 0235 0235 0235 0235 0235 0235 0235 0235 0134
64
+ % 0134 0134 0134 0134 0134 0134 0134 0134 0134 0134 0134 0134 0135 0135 0135 0135
65
+ % 0135 0135 0135 0135 0135 0135 0135 0135 0124 0012 0012 0113 0123 0666 0777 0344
66
+ % 0123 0445 0AAA 0678 0247 0146 0146 0146 0246 0146 0146 0146 0136 0136 0136 0136
67
+ % 0136 0136 0136 0236 0136 0136 0235 0135 0135 0135 0135 0135 0135 0135 0134 0134
68
+ % 0124 0124 0124 0124 0124 0124 0124 0124 0124 0124 0124 0134 0134 0134 0134 0135
69
+ % 0135 0135 0135 0135 0135 0135 0135 0123 0012 0334 0445 0123 0123 0556 0777 0334
70
+ % 0012 0012 0455 0888 0999 0779 0247 0146 0136 0136 0136 0136 0136 0136 0135 0135
71
+ % 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0135 0124 0124 0124 0124
72
+ % 0124 0124 0124 0124 0124 0124 0124 0124 0134 0123 0123 0123 0123 0123 0234 0234
73
+ % 0235 0235 0134 0124 0235 0234 0123 0113 0112 0555 0777 0123 0223 0334 0445 0123
74
+ % 0113 0012 0123 0334 0888 0CCB 0AAA 0789 0457 0246 0136 0136 0136 0135 0135 0135
75
+ % 0135 0135 0135 0246 0135 0135 0135 0135 0135 0235 0135 0124 0124 0124 0124 0124
76
+ % 0124 0124 0124 0124 0124 0124 0124 0123 0112 0112 0112 0012 0012 0112 0223 0112
77
+ % 0666 0666 0233 0112 0223 0455 0233 0445 0233 0344 0666 0123 0112 0334 0223 0344
78
+ % 0556 0123 0012 0012 0556 0CCB 0DCB 0BBB 0999 0778 0667 0889 0667 0457 0356 0246
79
+ % 0456 0346 0556 0AA9 0778 0456 0346 0456 0245 0455 0234 0235 0235 0124 0124 0124
80
+ % 0554 0234 0223 0223 0123 0123 0123 0012 0112 0112 0123 0012 0012 0223 0112 0012
81
+ % 0666 0998 0666 0223 0223 0223 0234 0666 0455 0666 0777 0666 0223 0344 0223 0344
82
+ % 0777 0556 0123 0012 0666 0CBB 0DCB 0BBA 0A99 0988 0888 0BAA 0BBA 0999 0777 0456
83
+ % 0345 0234 0888 0CBA 0CBA 0BBA 0777 0666 0556 0556 0556 0555 0566 0234 0234 0134
84
+ % 0544 0444 0554 0444 0333 0334 0112 0011 0012 0112 0113 0012 0334 0223 0012 0112
85
+ % 0887 0DCA 0BB9 0776 0334 0112 0123 0334 0445 0334 0777 0888 0455 0334 0445 0566
86
+ % 0566 0334 0113 0123 0455 0AA9 0DCB 0CCB 0A99 0999 0999 0999 0AA9 0778 0345 0445
87
+ % 0234 0345 0BBA 0CBB 0A99 0BAA 0AA9 0777 0556 0666 0666 0777 0776 0555 0445 0344
88
+ % 0444 0223 0333 0444 0233 0122 0012 0011 0012 0112 0123 0223 0666 0233 0012 0113
89
+ % 0555 0BA9 0DCA 0BA9 0777 0334 0334 0344 0556 0445 0445 0777 0455 0345 0556 0556
90
+ % 0556 0224 0124 0556 0234 0455 0BAA 0DCB 0BAA 0999 0BAA 0AA9 0888 0667 0456 0345
91
+ % 0235 0777 0CCB 0DCB 0AA9 0988 0AA9 0CBA 0777 0556 0555 0445 0555 0666 0555 0444
92
+ % 0775 0444 0444 0555 0122 0012 0012 0012 0012 0012 0334 0344 0666 0233 0123 0555
93
+ % 0233 0777 0BA9 0BA9 0998 0777 0666 0556 0666 0887 0445 0666 0555 0455 0666 0556
94
+ % 0234 0123 0556 0877 0556 0334 0677 0BBA 0CBA 0A99 0AA9 0888 0556 0345 0556 0556
95
+ % 0345 0BBA 0DCB 0CCB 0AA9 0A99 0888 0AA9 0BA9 0777 0445 0344 0344 0666 0776 0776
96
+ % 0654 0333 0223 0334 0012 0011 0012 0012 0123 0334 0444 0123 0344 0123 0223 0666
97
+ % 0334 0445 0988 0998 0987 0887 0988 0566 0556 0998 0666 0666 0345 0234 0556 0234
98
+ % 0123 0345 0888 0888 0777 0455 0556 0AA9 0BAA 0988 0999 0334 0112 0113 0223 0788
99
+ % 0778 0A99 0CBA 0CBA 0AA9 0A99 0877 0877 0BB9 0A98 0887 0455 0234 0344 0555 0887
100
+ % 0554 0333 0222 0122 0012 0012 0012 0112 0444 0555 0444 0223 0223 0112 0123 0334
101
+ % 0123 0234 0776 0777 0987 0776 0877 0666 0345 0877 0666 0555 0234 0234 0234 0013
102
+ % 0234 0556 0999 0888 0888 0777 0566 0777 0AA9 0888 099A 0667 0556 0445 0345 0667
103
+ % 0AAA 0999 0998 0A99 0BBA 0888 0766 0556 0877 0987 0877 0777 0556 0555 0445 0666
104
+ % 0654 0433 0112 0112 0112 0112 0112 0333 0334 0444 0344 0233 0334 0223 0223 0123
105
+ % 0012 0234 0666 0666 0766 0666 0655 0766 0555 0776 0777 0666 0666 0666 0334 0234
106
+ % 0123 0555 0AA9 0888 0998 0887 0776 0334 0334 0334 0CCC 0DDD 0DCD 0DDD 0A9A 0999
107
+ % 0989 0888 0667 0778 0AA9 0A99 0877 0455 0445 0665 0445 0999 0BBB 0999 0998 0888
108
+ % 0333 0333 0444 0655 0666 0544 0223 0333 0544 0555 0444 0334 0344 0555 0444 0555
109
+ % 0334 0555 0555 0334 0555 0555 0766 0877 0555 0444 0665 0777 0666 0666 0888 0445
110
+ % 0123 0777 0BAA 0888 0BAA 0A99 0988 0444 0012 0334 0DCC 0EEE 0EED 0DDD 0CBB 0BBB
111
+ % 0A9A 0999 0888 0777 0888 0877 0888 0666 0555 0555 0444 0BBA 0CCB 0BAA 0AA9 0998
112
+ % 0333 0444 0665 0666 0666 0666 0555 0344 0555 0655 0665 0555 0555 0665 0655 0555
113
+ % 0655 0444 0333 0333 0665 0444 0776 0766 0334 0223 0444 0444 0223 0223 0877 0334
114
+ % 0223 0776 0888 0988 0887 0A98 0655 0112 0012 0223 0999 0EDD 0EDD 0DCC 0CCC 0CCC
115
+ % 0BBB 0AAA 0999 0666 0888 0666 0444 0444 0334 0223 0334 0BAA 0CCB 0BBA 0BBA 0AA9
116
+ % 0554 0333 0333 0333 0222 0223 0333 0444 0665 0655 0655 0334 0334 0333 0444 0554
117
+ % 0344 0222 0223 0222 0444 0333 0223 0222 0333 0555 0766 0555 0334 0334 0665 0233
118
+ % 0222 0344 0566 0987 0444 0334 0112 0012 0112 0112 0566 0CCB 0DDC 0CBB 0BBA 0CBB
119
+ % 0BBB 0BBB 0BAA 0666 0877 0877 0554 0112 0112 0233 0223 0555 0AA9 0BBA 0BAA 0A99
120
+ % 0987 0877 0444 0222 0222 0222 0222 0334 0444 0333 0334 0444 0222 0112 0333 0333
121
+ % 0112 0112 0222 0112 0222 0112 0112 0333 0333 0444 0554 0555 0444 0554 0555 0223
122
+ % 0222 0333 0233 0444 0223 0012 0011 0012 0223 0112 0667 0888 0998 0BAA 0AAA 0999
123
+ % 0AAA 0AAA 0BAA 0666 0766 0AA9 0555 0112 0112 0444 0333 0112 0444 0988 0BA9 0AA9
124
+ % 0987 0987 0876 0444 0333 0222 0444 0554 0655 0444 0333 0333 0112 0112 0444 0333
125
+ % 0112 0111 0111 0111 0112 0111 0111 0222 0122 0112 0222 0222 0222 0222 0112 0111
126
+ % 0111 0112 0112 0011 0011 0011 0011 0011 0112 0011 0445 0988 0777 0777 0988 0877
127
+ % 0777 0AA9 0A99 0777 0444 0988 0666 0122 0122 0444 0223 0111 0112 0444 0666 0988
128
+ % 0766 0876 0765 0544 0222 0222 0444 0222 0222 0212 0111 0111 0111 0222 0222 0222
129
+ % 0111 0111 0111 0111 0111 0111 0111 0111 0112 0222 0222 0222 0111 0111 0223 0222
130
+ % 0011 0011 0011 0011 0001 0011 0011 0011 0011 0112 0334 0A99 0999 0888 0777 0777
131
+ % 0555 0666 0776 0766 0444 0444 0444 0112 0122 0112 0112 0112 0112 0333 0333 0665
132
+ % 0665 0554 0655 0665 0443 0111 0222 0111 0111 0111 0011 0011 0011 0111 0111 0111
133
+ % 0111 0111 0111 0111 0222 0222 0222 0222 0111 0111 0111 0111 0111 0222 0666 0223
134
+ % 0001 0011 0001 0001 0111 0112 0223 0223 0223 0444 0777 0BAA 0AA9 0888 0777 0877
135
+ % 0877 0666 0444 0444 0444 0333 0222 0112 0111 0011 0111 0111 0112 0444 0333 0222
136
+ % 0443 0443 0443 0654 0444 0333 0111 0111 0111 0011 0111 0111 0111 0111 0111 0011
137
+ % 0111 0011 0111 0111 0222 0222 0111 0111 0001 0111 0111 0111 0111 0122 0222 0222
138
+ % 0001 0111 0222 0333 0444 0665 0555 0445 0223 0554 0655 0766 0776 0666 0655 0444
139
+ % 0655 0666 0776 0776 0544 0333 0222 0112 0111 0111 0111 0111 0222 0655 0665 0222
140
+ % 0111 0221 0222 0554 0765 0776 0544 0111 0111 0001 0111 0111 0111 0111 0111 0111
141
+ % 0111 0111 0111 0111 0111 0111 0011 0111 0111 0011 0001 0111 0111 0111 0111 0222
142
+ % 0112 0433 0544 0665 0555 0877 0877 0766 0333 0334 0333 0333 0444 0444 0555 0544
143
+ % 0233 0334 0433 0443 0665 0554 0233 0111 0011 0111 0222 0112 0333 0554 0877 0555
144
+ % 0222 0000 0111 0333 0544 0765 0654 0111 0011 0000 0001 0011 0111 0111 0001 0111
145
+ % 0111 0111 0111 0111 0111 0111 0111 0111 0001 0000 0000 0001 0111 0111 0111 0111
146
+ % 0122 0322 0333 0444 0333 0444 0555 0555 0444 0444 0333 0222 0222 0222 0222 0333
147
+ % 0333 0444 0333 0112 0554 0987 0776 0111 0000 0111 0222 0222 0332 0554 0665 0876
148
+ % 0654 0111 0011 0122 0222 0222 0211 0111 0111 0111 0011 0001 0001 0001 0001 0111
149
+ % 0111 0111 0111 0111 0111 0111 0111 0010 0000 0000 0000 0000 0111 0222 0544 0333
150
+ % 0111 0111 0111 0111 0222 0222 0222 0444 0555 0333 0222 0112 0222 0222 0111 0111
151
+ % 0222 0333 0122 0444 0555 0766 0877 0333 0001 0222 0443 0433 0221 0333 0443 0554
152
+ % 0332 0111 0011 0222 0222 0222 0111 0111 0111 0112 0112 0111 0111 0011 0001 0000
153
+ % 0000 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0111 0122 0222 0666
154
+ % 0433 0444 0444 0333 0222 0111 0332 0877 0A98 0776 0544 0222 0111 0111 0001 0111
155
+ % 0233 0333 0222 0544 0766 0554 0655 0555 0122 0333 0554 0554 0433 0222 0332 0332
156
+ % 0111 0011 0000 0111 0112 0122 0111 0111 0111 0112 0222 0111 0011 0001 0000 0000
157
+ % 0000 0000 0000 0000 0000 0000 0000 0011 0111 0111 0111 0111 0222 0333 0222 0333
158
+ % 0444 0555 0666 0444 0444 0554 0776 0887 0887 0776 0665 0333 0011 0111 0011 0111
159
+ % 0333 0444 0222 0222 0666 0665 0655 0445 0444 0334 0443 0433 0433 0222 0222 0111
160
+ % 0333 0333 0222 0111 0111 0111 0111 0111 0112 0222 0222 0111 0000 0000 0000 0000
161
+ % 0000 0000 0000 0000 0000 0000 0000 0111 0222 0222 0112 0122 0233 0333 0333 0333
162
+ % 0444 0555 0555 0222 0333 0776 0887 0877 0555 0344 0345 0344 0333 0233 0234 0222
163
+ % 0222 0333 0333 0111 0334 0555 0656 0555 0555 0555 0333 0333 0555 0555 0444 0222
164
+ % 0233 0444 0343 0222 0222 0122 0111 0011 0011 0111 0111 0111 0000 0000 0000 0000
165
+ % 0000 0000 0000 0000 0000 0000 0000 0011 0111 0111 0111 0111 0111 0333 0443 0222
166
+ % 0222 0222 0111 0111 0111 0332 0554 0655 0334 0334 0666 0667 0667 0556 0445 0334
167
+ % 0333 0222 0111 0122 0344 0445 0445 0555 0444 0233 0223 0233 0444 0666 0766 0444
168
+ % 0333 0555 0555 0555 0444 0444 0444 0222 0111 0011 0000 0000 0000 0000 0000 0000
169
+ % 0000 0000 0000 0000 0000 0011 0111 0111 0011 0000 0000 0000 0010 0111 0111 0111
170
+ % 0001 0111 0000 0000 0000 0010 0111 0222 0223 0445 0667 0778 0778 0777 0556 0444
171
+ % 0344 0333 0122 0122 0223 0334 0444 0656 0555 0444 0223 0222 0333 0544 0555 0444
172
+ % 0444 0555 0665 0777 0666 0555 0554 0344 0333 0233 0111 0000 0000 0000 0000 0000
173
+ % 0000 0000 0000 0000 0000 0000 0000 0011 0000 0000 0000 0000 0000 0000 0000 0011
174
+ % 0111 0011 0000 0000 0000 0000 0111 0123 0344 0556 0667 0777 0667 0666 0555 0444
175
+ % 0344 0334 0333 0223 0122 0222 0333 0545 0555 0554 0333 0222 0223 0333 0333 0333
176
+ % 0554 0554 0666 0777 0776 0665 0555 0554 0444 0444 0222 0111 0000 0000 0011 0011
177
+ % 0011 0011 0011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
178
+ % 0000 0000 0000 0000 0000 0011 0112 0234 0556 0778 0888 0778 0666 0555 0344 0334
179
+ % 0334 0344 0344 0333 0222 0112 0222 0333 0444 0433 0223 0222 0222 0222 0222 0111
180
+ % 0443 0444 0554 0555 0555 0554 0444 0444 0443 0343 0222 0112 0011 0011 0111 0011
181
+ % 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
182
+ % 0000 0000 0000 0000 0112 0234 0234 0334 0556 0667 0778 0778 0667 0666 0445 0444
183
+ % 0445 0334 0233 0223 0222 0112 0112 0222 0222 0322 0222 0111 0211 0111 0111 0000
184
+ % 0232 0332 0333 0333 0333 0333 0333 0333 0232 0222 0111 0111 0000 0000 0000 0000
185
+ % 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
186
+ % 0111 0111 0122 0223 0334 0455 0566 0666 0666 0556 0556 0566 0556 0455 0444 0344
187
+ % 0334 0333 0222 0122 0112 0111 0111 0111 0222 0222 0111 0111 0111 0222 0111 0111
188
+ % 0121 0222 0222 0332 0333 0332 0333 0443 0554 0443 0222 0010 0000 0000 0000 0000
189
+ % 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0011 0112
190
+ % 0334 0344 0455 0455 0455 0666 0666 0666 0666 0556 0445 0444 0344 0333 0333 0333
191
+ % 0223 0122 0111 0111 0111 0011 0000 0000 0111 0111 0222 0111 0111 0111 0111 0111
192
+ % 0221 0222 0222 0332 0333 0332 0443 0554 0654 0554 0332 0111 0000 0000 0000 0000
193
+ % 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 0000 0000 0111 0122 0223
194
+ % 0233 0444 0455 0455 0455 0556 0556 0555 0445 0444 0344 0333 0223 0222 0223 0233
195
+ % 0112 0111 0000 0000 0000 0000 0000 0000 0000 0111 0111 0111 0111 0001 0000 0000
@@ -2,57 +2,59 @@
2
2
  # Inspired by the SubX example near the bottom of this post:
3
3
  # http://akkartik.name/post/mu-2019-1
4
4
  #
5
- # The goal is to compare the implementation of the uCISC ISA to x86
6
- # as well as roughly see how things line up with SubX and look for
7
- # the coming MuCISC goals
8
- #
9
5
  # To run:
10
6
  # $ exe/ucisc examples/factorial.ucisc
11
7
  #
12
- # Type 'break' when you hit the breakpoint, then `load(register(1))`
13
- # to view the result on the stack
14
- #
15
- # More instructions on the compiler and debugger are in the README.md
16
- # Or use GitHub https://github.com/grokthis/ucisc-ruby#usage
8
+ # Stack result should be:
9
+ # INFO: Stack: FFFF => 0x0018
17
10
 
18
- # Setup some simple syntax sugar for easy reference to stack and pc
11
+ ################
12
+ # Syntax Setup #
13
+ ################
19
14
  $stack as 1.mem
20
15
  &pc as 0.reg
21
16
 
17
+ # ALU op codes
18
+ $subtract as 0xB.op
19
+ $multiply as 0xC.op
20
+
22
21
  # Simple conditional syntax sugar
23
22
  $zero? as 0.eff
24
23
 
25
- # Init stack pointer
24
+ ################
25
+ # Code Entry #
26
+ ################
26
27
  copy 0.imm &stack
27
28
 
28
- # Call factorial
29
- # Calling convention is to push args to stack, in order then push return address
30
- # On return, args and return address are removed, result is in it's place
31
29
  $stack[1] <= factorial(4.imm)
32
30
 
33
31
  # halt
34
32
  copy &pc &pc
35
33
 
34
+ ################
35
+ # Main Section #
36
+ ################
36
37
  factorial: # (n)
38
+ $n, $return, $result = $stack
37
39
  # calculate n - 1, push to stack
38
- compute 0xB.op/subtract/ 1.imm $stack push
40
+ $n_1 = compute $subtract 1.imm $n push
39
41
  {
40
42
  # factorial(1) = 1, copy 1 to result
41
- copy $stack 1.imm $stack 3.imm $zero?
43
+ copy $n $result $zero?
42
44
  copy &pc break.disp &pc $zero?
43
45
 
44
46
  # compute factorial(n-1)
45
- $stack <= factorial($stack)
47
+ $stack <= factorial($n_1)
46
48
 
47
49
  # multiply n * factorial(n-1)
48
- compute 0xC.op $stack 1.imm $stack
50
+ compute $multiply $n $n_1
49
51
  # Copy answer to result
50
- copy $stack $stack 3.imm
52
+ copy $n_1 $result
51
53
  }
52
54
 
53
- # pop n-1 off stack
54
- copy &stack 2.imm &stack
55
+ # pop to return address
56
+ copy &return &stack
55
57
 
56
58
  # jump return, pop return address off stack
57
- copy $stack &pc pop
59
+ copy $return &pc pop
58
60
 
@@ -1,74 +1,79 @@
1
1
  # Compute Fibonacci numbers
2
2
  #
3
- # By default, computes fib(8) == 21. Change the imm on line 24
4
- # to compute other numbers. fib(0x18) is the maximum value that
5
- # will compute correctly. fib(0x19) and up will overflow 16-bits
6
- # when adding the final result, but will execute an equivalent
7
- # number of instructions.
3
+ # By default, computes fib(8) == 21. Change the immediate value in the fib
4
+ # function call to compute other numbers. fib(24.imm) is the maximum value that
5
+ # will compute correctly. fib(25.imm) and up will overflow 16-bits when adding
6
+ # the final result, but will still terminate.
8
7
  #
9
8
  # To run:
10
9
  # $ exe/ucisc examples/fib.ucisc
11
10
  #
12
- # Type 'break' when you hit the breakpoint, then `load(register(1))`
13
- # to view the result on the stack
14
- #
15
- # More instructions on the compiler and debugger are in the README.md
16
- # Or use GitHub https://github.com/grokthis/ucisc-ruby#usage
11
+ # Stack result should be:
12
+ # INFO: Stack: FFFF => 0x0015
17
13
 
18
- # Setup some simple syntax sugar for easy reference to stack and pc
14
+ ################
15
+ # Syntax Setup #
16
+ ################
19
17
  $stack as 1.mem
20
18
  &pc as 0.reg
21
19
 
20
+ # ALU op codes
21
+ $add as 0xA.op
22
+ $subtract as 0xB.op
23
+
22
24
  # Simple conditional syntax sugar
23
25
  $zero? as 0.eff
24
26
  $not_zero? as 1.eff
25
27
  $negative? as 2.eff
26
28
 
27
- Entry:
28
- # Init stack pointer
29
- copy 0.imm &stack
29
+ ################
30
+ # Code Entry #
31
+ ################
32
+ copy 0.imm &stack
30
33
 
31
- # Functions calls reserve space on the stack (the stack size number in brackets)
32
- # Then they push the return address, followed by the args. The called function
33
- # is expected to remove the return address and args from the stack before returning
34
- $stack[1] <= fib(6.imm)
34
+ $stack[1] <= fib(8.imm)
35
35
 
36
- # halt
37
- copy &pc &pc
36
+ # halt
37
+ copy &pc &pc
38
38
 
39
+ ################
40
+ # Main Section #
41
+ ################
39
42
  fib:
43
+ $n, $return, $result = $stack
40
44
  # push n - 1
41
- compute 0xB.op 1.imm $stack push
45
+ $n_1 = compute $subtract 1.imm $n push
42
46
  {
43
47
  # if negative, n == 0
44
48
  copy &pc break.disp &pc $negative?
45
49
  # if zero, n == 1
46
50
  copy &pc break.disp &pc $zero?
47
51
 
48
- # n > 1, n - 1 is on the stack
49
- # push n - 2
50
- compute 0xB.op 1.imm $stack push
52
+ $n_2 = compute $subtract 1.imm $n_1 push
51
53
 
52
54
  # Recurse for fib(n-1) and fib(n-2)
53
- $stack[1] <= fib($stack 1.imm)
54
- $stack[1] <= fib($stack 1.imm)
55
+ $stack[1] <= fib($n_1)
56
+ $stack[1] <= fib($n_2)
57
+ $fib_n_2, $fib_n_1 = $stack
55
58
 
56
- compute 0xA.op $stack 1.imm $stack
59
+ $fib_n = compute $add $fib_n_1 $fib_n_2
57
60
 
58
- #copy to return
59
- copy $stack $stack 6.imm
61
+ #copy fib(n) to result
62
+ copy $fib_n $result
60
63
 
61
- # cleanup stack
62
- copy &stack 5.imm &stack
64
+ # Pop stack to return
65
+ copy &return &stack
63
66
 
64
67
  # Jump return and pop address
65
- copy $stack &pc pop
68
+ copy $return &pc pop
66
69
  }
70
+ # Need reset vars, after block messes with stack
71
+ $n_1, $n, $return, $result = $stack
67
72
 
68
73
  # n == 1 or n == 0, return n
69
74
  # Save result to return
70
- copy $stack 1.imm $stack 3.imm
71
- copy &stack 2.imm &stack
75
+ copy $n $result
76
+ copy &return &stack
72
77
 
73
78
  # Jump return and pop address
74
- copy $stack &pc pop
79
+ copy $return &pc pop