From 906b07eaea12dc25f79fc1f1601dd938425593f2 Mon Sep 17 00:00:00 2001 From: Gunwoo Kim Date: Fri, 7 Apr 2023 20:32:58 -0700 Subject: [PATCH 1/4] implemented some of the minecraft subroutines. --- src/DataPack/mc-asm/data/minecraft/tags/functions/load.json | 5 +++++ src/DataPack/mc-asm/data/minecraft/tags/functions/tick.json | 5 +++++ src/DataPack/mc-asm/pack.mcmeta | 6 ++++++ 3 files changed, 16 insertions(+) create mode 100644 src/DataPack/mc-asm/data/minecraft/tags/functions/load.json create mode 100644 src/DataPack/mc-asm/data/minecraft/tags/functions/tick.json create mode 100644 src/DataPack/mc-asm/pack.mcmeta diff --git a/src/DataPack/mc-asm/data/minecraft/tags/functions/load.json b/src/DataPack/mc-asm/data/minecraft/tags/functions/load.json new file mode 100644 index 0000000..ba1fa53 --- /dev/null +++ b/src/DataPack/mc-asm/data/minecraft/tags/functions/load.json @@ -0,0 +1,5 @@ +{ + "values": [ + "mcasm:load" + ] +} \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/minecraft/tags/functions/tick.json b/src/DataPack/mc-asm/data/minecraft/tags/functions/tick.json new file mode 100644 index 0000000..404c50d --- /dev/null +++ b/src/DataPack/mc-asm/data/minecraft/tags/functions/tick.json @@ -0,0 +1,5 @@ +{ + "values": [ + "mcasm:tick" + ] +} \ No newline at end of file diff --git a/src/DataPack/mc-asm/pack.mcmeta b/src/DataPack/mc-asm/pack.mcmeta new file mode 100644 index 0000000..e886707 --- /dev/null +++ b/src/DataPack/mc-asm/pack.mcmeta @@ -0,0 +1,6 @@ +{ + "pack": { + "pack_format": 8, + "description": "MC-ASM Subroutines, by Gunwoo Kim, Charles Hong" + } +} \ No newline at end of file From 2956351ba22f5c9564f7d94b5d45c2bcb20d8af8 Mon Sep 17 00:00:00 2001 From: Gunwoo Kim Date: Fri, 7 Apr 2023 20:37:21 -0700 Subject: [PATCH 2/4] fixed git ignore --- src/.gitignore | 1 - .../data/mcasm/functions/add.mcfunction | 6 +++ .../data/mcasm/functions/ass.mcfunction | 6 +++ .../data/mcasm/functions/div.mcfunction | 6 +++ .../mc-asm/data/mcasm/functions/eq.mcfunction | 6 +++ .../mc-asm/data/mcasm/functions/ge.mcfunction | 6 +++ .../mc-asm/data/mcasm/functions/gt.mcfunction | 6 +++ .../mc-asm/data/mcasm/functions/le.mcfunction | 6 +++ .../data/mcasm/functions/load.mcfunction | 15 +++++++ .../mc-asm/data/mcasm/functions/lt.mcfunction | 6 +++ .../data/mcasm/functions/mod.mcfunction | 6 +++ .../data/mcasm/functions/mul.mcfunction | 6 +++ .../mc-asm/data/mcasm/functions/ne.mcfunction | 6 +++ .../data/mcasm/functions/sub.mcfunction | 6 +++ .../testing/print_internals.mcfunction | 1 + .../functions/testing/test_cases.mcfunction | 43 +++++++++++++++++++ .../testing/test_function.mcfunction | 4 ++ .../data/mcasm/functions/tick.mcfunction | 0 18 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/add.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/ass.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/div.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/eq.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/ge.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/gt.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/le.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/load.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/lt.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/mod.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/mul.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/ne.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/sub.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/testing/print_internals.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/testing/test_cases.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/testing/test_function.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/tick.mcfunction diff --git a/src/.gitignore b/src/.gitignore index 23854d3..ee7d724 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1,3 +1,2 @@ a.out a.mcfunction -mcasm diff --git a/src/DataPack/mc-asm/data/mcasm/functions/add.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/add.mcfunction new file mode 100644 index 0000000..419555f --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/add.mcfunction @@ -0,0 +1,6 @@ +# add.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A + B +scoreboard players operation __ret Internal = __arg1 Internal +scoreboard players operation __ret Internal += __arg2 Internal \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/mcasm/functions/ass.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/ass.mcfunction new file mode 100644 index 0000000..0a19486 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/ass.mcfunction @@ -0,0 +1,6 @@ +# ass.mcfunction +# __arg1 integer A +# returns A +# +# this function exists for generalization in the complier. +scoreboard players operation __ret Internal = __arg1 Internal \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/mcasm/functions/div.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/div.mcfunction new file mode 100644 index 0000000..aa268b3 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/div.mcfunction @@ -0,0 +1,6 @@ +# div.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A / B +scoreboard players operation __ret Internal = __arg1 Internal +scoreboard players operation __ret Internal /= __arg2 Internal \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/mcasm/functions/eq.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/eq.mcfunction new file mode 100644 index 0000000..05dfe4f --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/eq.mcfunction @@ -0,0 +1,6 @@ +# eq.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A == B +scoreboard players set __ret Internal 0 +execute if score __arg1 Internal = __arg2 Internal run scoreboard players set __ret Internal 1 diff --git a/src/DataPack/mc-asm/data/mcasm/functions/ge.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/ge.mcfunction new file mode 100644 index 0000000..92751ff --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/ge.mcfunction @@ -0,0 +1,6 @@ +# ge.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A >= B +scoreboard players set __ret Internal 0 +execute if score __arg1 Internal >= __arg2 Internal run scoreboard players set __ret Internal 1 diff --git a/src/DataPack/mc-asm/data/mcasm/functions/gt.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/gt.mcfunction new file mode 100644 index 0000000..7f3f190 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/gt.mcfunction @@ -0,0 +1,6 @@ +# gt.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A > B +scoreboard players set __ret Internal 0 +execute if score __arg1 Internal > __arg2 Internal run scoreboard players set __ret Internal 1 diff --git a/src/DataPack/mc-asm/data/mcasm/functions/le.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/le.mcfunction new file mode 100644 index 0000000..56cdd01 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/le.mcfunction @@ -0,0 +1,6 @@ +# le.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A <= B +scoreboard players set __ret Internal 0 +execute if score __arg1 Internal <= __arg2 Internal run scoreboard players set __ret Internal 1 diff --git a/src/DataPack/mc-asm/data/mcasm/functions/load.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/load.mcfunction new file mode 100644 index 0000000..298cd87 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/load.mcfunction @@ -0,0 +1,15 @@ +tellraw @a {"text": "MC-ASM Loaded!", "color": "blue"} + +scoreboard objectives add Internal dummy +scoreboard objectives add Variables dummy + +scoreboard players reset * Internal +scoreboard players reset * Variables + +scoreboard objectives setdisplay sidebar Internal + +scoreboard players add __arg1 Internal 0 +scoreboard players add __arg2 Internal 0 +scoreboard players add __arg3 Internal 0 +scoreboard players add __ret Internal 0 +scoreboard players add __pc Internal 0 diff --git a/src/DataPack/mc-asm/data/mcasm/functions/lt.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/lt.mcfunction new file mode 100644 index 0000000..6ff6a88 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/lt.mcfunction @@ -0,0 +1,6 @@ +# lt.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A < B +scoreboard players set __ret Internal 0 +execute if score __arg1 Internal < __arg2 Internal run scoreboard players set __ret Internal 1 diff --git a/src/DataPack/mc-asm/data/mcasm/functions/mod.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/mod.mcfunction new file mode 100644 index 0000000..45bdadf --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/mod.mcfunction @@ -0,0 +1,6 @@ +# mod.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A % B +scoreboard players operation __ret Internal = __arg1 Internal +scoreboard players operation __ret Internal %= __arg2 Internal \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/mcasm/functions/mul.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/mul.mcfunction new file mode 100644 index 0000000..3260835 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/mul.mcfunction @@ -0,0 +1,6 @@ +# mul.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A * B +scoreboard players operation __ret Internal = __arg1 Internal +scoreboard players operation __ret Internal *= __arg2 Internal \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/mcasm/functions/ne.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/ne.mcfunction new file mode 100644 index 0000000..e530117 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/ne.mcfunction @@ -0,0 +1,6 @@ +# ne.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A != B +scoreboard players set __ret Internal 1 +execute if score __arg1 Internal = __arg2 Internal run scoreboard players set __ret Internal 0 diff --git a/src/DataPack/mc-asm/data/mcasm/functions/sub.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/sub.mcfunction new file mode 100644 index 0000000..e38e70f --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/sub.mcfunction @@ -0,0 +1,6 @@ +# sub.mcfunction +# __arg1 integer A +# __arg2 integer B +# returns A - B +scoreboard players operation __ret Internal = __arg1 Internal +scoreboard players operation __ret Internal -= __arg2 Internal \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/mcasm/functions/testing/print_internals.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/testing/print_internals.mcfunction new file mode 100644 index 0000000..e072c0e --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/testing/print_internals.mcfunction @@ -0,0 +1 @@ +tellraw @a ["",{"text":"*********************\n__arg1 = "},{"score":{"name":"__arg1","objective":"Internal"}},{"text":"\n__arg2 = "},{"score":{"name":"__arg2","objective":"Internal"}},{"text":"\n__ret \u0020= "},{"score":{"name":"__ret","objective":"Internal"}}] \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/mcasm/functions/testing/test_cases.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/testing/test_cases.mcfunction new file mode 100644 index 0000000..7f53de0 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/testing/test_cases.mcfunction @@ -0,0 +1,43 @@ +# test_cases.mcfunction +# testing/test_function.mcfunction will be ran with the following arguments. +# this is meant to be only used while testing. + +scoreboard players set __arg1 Internal 0 +scoreboard players set __arg2 Internal 0 +function mcasm:testing/test_function +function mcasm:testing/print_internals + +scoreboard players set __arg1 Internal 10 +scoreboard players set __arg2 Internal 0 +function mcasm:testing/test_function +function mcasm:testing/print_internals + +scoreboard players set __arg1 Internal 0 +scoreboard players set __arg2 Internal 10 +function mcasm:testing/test_function +function mcasm:testing/print_internals + +scoreboard players set __arg1 Internal 10 +scoreboard players set __arg2 Internal 20 +function mcasm:testing/test_function +function mcasm:testing/print_internals + +scoreboard players set __arg1 Internal 10 +scoreboard players set __arg2 Internal -20 +function mcasm:testing/test_function +function mcasm:testing/print_internals + +scoreboard players set __arg1 Internal -100 +scoreboard players set __arg2 Internal -10 +function mcasm:testing/test_function +function mcasm:testing/print_internals + +scoreboard players set __arg1 Internal -10 +scoreboard players set __arg2 Internal -10 +function mcasm:testing/test_function +function mcasm:testing/print_internals + +scoreboard players set __arg1 Internal 30 +scoreboard players set __arg2 Internal 30 +function mcasm:testing/test_function +function mcasm:testing/print_internals \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/mcasm/functions/testing/test_function.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/testing/test_function.mcfunction new file mode 100644 index 0000000..ae9dadc --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/testing/test_function.mcfunction @@ -0,0 +1,4 @@ +# test_function.mcfunction +# the desired function to be tested in testing/test_cases.mcfunction. +# this is meant to be only used while testing. +function mcasm:ass \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/mcasm/functions/tick.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/tick.mcfunction new file mode 100644 index 0000000..e69de29 From b05164f5a01fcf4ceea234836dad8a419df63b4b Mon Sep 17 00:00:00 2001 From: Gunwoo Kim Date: Sun, 16 Apr 2023 22:06:19 -0700 Subject: [PATCH 3/4] __pc is now 1-indexed. --- src/DataPack/mc-asm/data/mcasm/functions/load.mcfunction | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/DataPack/mc-asm/data/mcasm/functions/load.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/load.mcfunction index 298cd87..c165f13 100644 --- a/src/DataPack/mc-asm/data/mcasm/functions/load.mcfunction +++ b/src/DataPack/mc-asm/data/mcasm/functions/load.mcfunction @@ -12,4 +12,4 @@ scoreboard players add __arg1 Internal 0 scoreboard players add __arg2 Internal 0 scoreboard players add __arg3 Internal 0 scoreboard players add __ret Internal 0 -scoreboard players add __pc Internal 0 +scoreboard players add __pc Internal 1 From 0d8305a494e9d316ea122ebe3ed7f1f7ecb56073 Mon Sep 17 00:00:00 2001 From: Gunwoo Kim Date: Sun, 16 Apr 2023 22:57:45 -0700 Subject: [PATCH 4/4] added jmp and jif. --- src/DataPack/mc-asm/data/mcasm/functions/jif.mcfunction | 7 +++++++ src/DataPack/mc-asm/data/mcasm/functions/jmp.mcfunction | 6 ++++++ 2 files changed, 13 insertions(+) create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/jif.mcfunction create mode 100644 src/DataPack/mc-asm/data/mcasm/functions/jmp.mcfunction diff --git a/src/DataPack/mc-asm/data/mcasm/functions/jif.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/jif.mcfunction new file mode 100644 index 0000000..8ce2751 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/jif.mcfunction @@ -0,0 +1,7 @@ +# jif.mcfunction +# __arg1 condition value +# __arg2 __pc value +# returns nothing +# +# change __pc to the given value, if condition is NOT zero. +execute unless score __arg1 Internal matches 0 run scoreboard players operation __pc Internal = __arg2 Internal \ No newline at end of file diff --git a/src/DataPack/mc-asm/data/mcasm/functions/jmp.mcfunction b/src/DataPack/mc-asm/data/mcasm/functions/jmp.mcfunction new file mode 100644 index 0000000..2bf2604 --- /dev/null +++ b/src/DataPack/mc-asm/data/mcasm/functions/jmp.mcfunction @@ -0,0 +1,6 @@ +# jmp.mcfunction +# __arg1 __pc value +# returns nothing +# +# change __pc to the given value +scoreboard players operation __pc Internal = __arg1 Internal \ No newline at end of file