Add 0815 to yacc shaving and first meme description. - brcon2024-hackathons - B… | |
git clone git://bitreich.org/brcon2024-hackathons git://enlrupgkhuxnvlhsf6lc3fz… | |
Log | |
Files | |
Refs | |
Tags | |
--- | |
commit 99a24579afb492d678361f389b7d4ed42afa3c47 | |
parent fe1953cc524f2263d68e4bd294c5c97364270469 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Sat, 15 Jun 2024 13:31:25 +0200 | |
Add 0815 to yacc shaving and first meme description. | |
Diffstat: | |
A meme/description.md | 6 ++++++ | |
A yacc-shaving/0815/0815.txt | 167 +++++++++++++++++++++++++++++… | |
2 files changed, 173 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/meme/description.md b/meme/description.md | |
@@ -0,0 +1,6 @@ | |
+# Meme Hackathon | |
+ | |
+## txt memes to image | |
+* Make it possible to for example loop txt images. | |
+ * Somehow transform txt to image and then reuse that. | |
+ | |
diff --git a/yacc-shaving/0815/0815.txt b/yacc-shaving/0815/0815.txt | |
@@ -0,0 +1,167 @@ | |
+¤0815 | |
+ | |
+0815 - Language details | |
+ | |
+0815 is based around a queue and 3 registers. It understands | |
+hexadecimals only, so every numeric input and output are in | |
+hexadecimals. It also ignores everything that is not one of its | |
+instructions, for that matter: everything that is not an instruction | |
+is a comment. | |
+ | |
+Registers | |
+ | |
+0815 has 3 signed integers 64 bit wide registers: X, Y, and Z. All | |
+three are initialized with 0. X is a write only register and Z is a | |
+read only register. Y is a helper register and cannot be accessed by | |
+the programmer. | |
+ | |
+Parameters | |
+ | |
+Some of 0815 instructions need parameters. All parameters must be | |
+surrounded by colons, e.g.:3c: | |
+Labels are also considered parameters; therefore they also need the | |
+surrounding colons. | |
+If a parameter is needed but any is found the instruction will simply | |
+be ignored, no error message will be displayed. | |
+ | |
+Jumps | |
+ | |
+In 0815 you find 2 kinds of jumps: if Zero( #) or if not Zero( ^). | |
+Jumps' labels can contain any character, except the language reserved | |
+symbols, e.g.:_loop: or:34: | |
+If the label that the jump is pointed to is not found, the program | |
+terminates. | |
+ | |
+New lines | |
+ | |
+Either ASCII 10 or 13 will be interpreted as a new line. | |
+ | |
+Instructions | |
+ | |
++-----------+---------+-------------------------------------------------------… | |
+| | |<:2: will move'2' to register X | | |
+| move | < |(parameter is mandatory) | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| | |swaps register X and Y | | |
+| swap | x | | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| | |}:_loop: this creates a label called'_loop' | | |
+| label |} |(parameter is mandatory) | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| input | |inputs a signed 64 bit integer and stores it into X | | |
+| number | | |(hexadecimal base) | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| input | |inputs an ASCII char and stores it into X | | |
+| ASCII |! | | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| print | |prints a signed 64 bit integer stored in Z | | |
+| number | % |(hexadecimal base) | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| print | |prints an ASCII char stored in Z | | |
+| ASCII | $ | | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| roll | |rolls all registers to the left: X <- Y <- Z | | |
+| registers | ~ |after roll: X = Y, Y = Z and Z = X | | |
+| left | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| roll | |rolls all registers to the right: X -> Y -> Z | | |
+| registers | = |after roll: X = Z, Y = X and Z = Y | | |
+| right | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| jump | |^:_loop: jumps to label _loop if Z is not 0 | | |
+| if not | ^ |(parameter is mandatory) | | |
+| zero | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| jump | |#:_loop: jumps to label _loop if Z is 0 | | |
+| if | # |(parameter is mandatory) | | |
+| zero | | | | |
++-----------+---------+-------------------------------------------------------… | |
+ | |
+Queue instructions | |
+ | |
++-----------+---------+-------------------------------------------------------… | |
+| | |clears the queue | | |
+| clear |? | | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| | |enqueue the number stored in Z | | |
+| enqueue |> | | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| | |dequeue a number and stores it into X | | |
+| dequeue | { | | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| roll | |rolls the queue to the left: the first value becomes the | |
+last, the second | | |
+| queue | @ |will be first and so on. If no parameter is found, it | |
+will roll the queue | | |
+| left | |once, otherwise rolls it parameter times. e.g. @:a: rolls | |
+the queue ten | | |
+| | |times to the left. | | |
++-----------+---------+-------------------------------------------------------… | |
+| roll | |the same as'@' just that the roll will go to the right: | | |
+| queue | & |the last will be the first, the first will be the second | |
+and so on. | | |
+| right | | | | |
++-----------+---------+-------------------------------------------------------… | |
+ | |
+Arithmetic instructions | |
+ | |
++-----------+---------+-------------------------------------------------------… | |
+| | |Z = X + Y | | |
+| add | + | | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| | |Z = X - Y | | |
+| sub | - | | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| | |Z = X * Y | | |
+| multipl. | * | | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+| | |Z = X / Y | | |
+| division | / |Y = rest | | |
+| | | | | |
++-----------+---------+-------------------------------------------------------… | |
+ | |
+Interpreter | |
+ | |
+I re-wrote my Brainfuck interpreter to run 0815 programs. This version | |
+just runs (interprets) 0815 programs. | |
+Probably, I'll write another version that can interpret both | |
+languages, but for now, this will do. | |
+There is another issue that I should mention: In this version, the | |
+Queue will only show its first 2070 items. | |
+0815 Interpreter | |
+ | |
+0815 Programming examples | |
+ | |
+• Hello World! | |
+• Cat | |
+• Odd or Even | |
+• Binary representation of an integer | |
+• Factorial sequence (0 - 14h) | |
+• Arithmetic mean(averages) | |
+• Fibonacci sequence (0 - a94fad42221f2702h) | |
+• 99 bottles of beer (63h bottles of beer) | |
+• Prime numbers | |
+• Hailstone sequence | |
+• Simple randomizer | |
+• Sum of squares | |
+• Truth machine - numeric | |
+• Truth machine - ASCII | |
+ | |
+Home | Esolang | |
+ | |
+Last updated: Wednesday, 24 August 2016 - 01:00:00 | |
+©2004 - 2024 Paulo Jorente | |
+Impressum | xhtml | css | cc |