Merge pull request #2496 from xexyl/buzzard1-92

This commit is contained in:
Landon Curt Noll authored and GitHub committed 2024-06-23 16:23:00 -07:00
commit 368df0d9c8
2 files changed
+110 -34

No files matched your search

+55 -17
View File
@@ -33,7 +33,7 @@ Notice how many statements it takes to do anything useful?
## Author's remarks: ## Author's remarks:
What you shouldn't think about `buzzard.1`: ### What you shouldn't think about `buzzard.1`:
`buzzard.1` doesn't just do a mass of `#define`s as its obfuscation. `buzzard.1` doesn't just do a mass of `#define`s as its obfuscation.
@@ -43,7 +43,7 @@ What you shouldn't think about `buzzard.1`:
I didn't just submit the post-C-preprocessed output as an entry. I didn't just submit the post-C-preprocessed output as an entry.
#### Cute trick warning ### Cute trick warning
`buzzard.1` contains only a numeric `printf(3)`, yet sometimes it prints out `buzzard.1` contains only a numeric `printf(3)`, yet sometimes it prints out
short strings. short strings.
@@ -128,34 +128,72 @@ place to site some references on the AE, but I don't have any.
``` ```
MACRO FUNCTION MNEMONIC MACRO FUNCTION MNEMONIC
V begin variable declarations Variable V begin variable
declarations Variable
C begin program Code C begin program Code
Q(b,a) let b = a eQuals Q(b,a) let b = a eQuals
A(c,a,b) let c = a + b Add A(c,a,b) let c = a + b Add
S(c,a,b) let c = a - b Subtract S(c,a,b) let c = a - b Subtract
D(c,a,b) let c = a / b, where b is a *constant* Divide
U(c,a,b) let c = a / b, where b is anything Unknown D(c,a,b) let c = a / b,
where b is a Divide
constant
U(c,a,b) let c = a / b,
where b is Unknown
anything
M(c,a,b) let c = a * b Multiply M(c,a,b) let c = a * b Multiply
O(c,a,b) let c = a boolean-or b (a,b are 0 or 1) Or O(c,a,b) let c = a Or
B(b, a) let b = boolean value of a Boolean boolean-or
P(b, a) let b = 1 if a>0, else 0. Positive b (a,b are
0 or 1)
B(b, a) let Boolean
b = boolean
value of a
P(b, a) let b = 1 if
a>0, else 0. Positive
l emit next
sequential Label
label
l emit next sequential label Label
J(x) goto label #x Jump J(x) goto label #x Jump
Z(a,d) if a is 0 goto d (a is 0 or 1) Zero Z(a,d) if a is 0
E(a,d) if a is 1 goto d (a is 0 or 1) Else goto d (a is Zero
0 or 1)
H halt Haly E(a,d) if a is 1
goto d Else
(a is 0 or 1)
K(x) let x = number of cmd line arguments Kount H halt Halt
G(x,y) let x = the value if the yth argument Get argument
T end of code; begin output section Terminate K(x) let x = number
X(y) print out hexadecimal value of y heXadecimal of cmdline Kount
T end of output section and program Terminate arguments
G(x,y) let x = the
value
of the yth Get arg
argument
T end of code;
begin output Terminate
section
X(y) print hex
value of y heX
T end of output Terminate
section
and program
``` ```
You can figure out the other macros yourself. In the sample program, I've You can figure out the other macros yourself. In the sample program, I've
+55 -17
View File
@@ -413,11 +413,11 @@ Location: <a href="../../location.html#US">US</a> - <em>United States of America
cat babble.cppcb</code></pre> cat babble.cppcb</code></pre>
<p>Notice how many statements it takes to do anything useful?</p> <p>Notice how many statements it takes to do anything useful?</p>
<h2 id="authors-remarks">Author’s remarks:</h2> <h2 id="authors-remarks">Author’s remarks:</h2>
<p>What you shouldn’t think about <code>buzzard.1</code>:</p> <h3 id="what-you-shouldnt-think-about-buzzard.1">What you shouldn’t think about <code>buzzard.1</code>:</h3>
<p><code>buzzard.1</code> doesn’t just do a mass of <code>#define</code>s as its obfuscation.</p> <p><code>buzzard.1</code> doesn’t just do a mass of <code>#define</code>s as its obfuscation.</p>
<h3 id="what-you-should-be-glad-about">What you should be glad about:</h3> <h3 id="what-you-should-be-glad-about">What you should be glad about:</h3>
<p>I didn’t just submit the post-C-preprocessed output as an entry.</p> <p>I didn’t just submit the post-C-preprocessed output as an entry.</p>
<h4 id="cute-trick-warning">Cute trick warning</h4> <h3 id="cute-trick-warning">Cute trick warning</h3>
<p><code>buzzard.1</code> contains only a numeric <code>printf(3)</code>, yet sometimes it prints out <p><code>buzzard.1</code> contains only a numeric <code>printf(3)</code>, yet sometimes it prints out
short strings.</p> short strings.</p>
<h3 id="what-it-does">What it does</h3> <h3 id="what-it-does">What it does</h3>
@@ -468,34 +468,72 @@ place to site some references on the AE, but I don’t have any.</p>
<p>[Don’t read this unless you’re stumped!]</p> <p>[Don’t read this unless you’re stumped!]</p>
<pre><code> MACRO FUNCTION MNEMONIC <pre><code> MACRO FUNCTION MNEMONIC
V begin variable declarations Variable V begin variable
declarations Variable
C begin program Code C begin program Code
Q(b,a) let b = a eQuals Q(b,a) let b = a eQuals
A(c,a,b) let c = a + b Add A(c,a,b) let c = a + b Add
S(c,a,b) let c = a - b Subtract S(c,a,b) let c = a - b Subtract
D(c,a,b) let c = a / b, where b is a *constant* Divide
U(c,a,b) let c = a / b, where b is anything Unknown D(c,a,b) let c = a / b,
where b is a Divide
constant
U(c,a,b) let c = a / b,
where b is Unknown
anything
M(c,a,b) let c = a * b Multiply M(c,a,b) let c = a * b Multiply
O(c,a,b) let c = a boolean-or b (a,b are 0 or 1) Or O(c,a,b) let c = a Or
B(b, a) let b = boolean value of a Boolean boolean-or
P(b, a) let b = 1 if a&gt;0, else 0. Positive b (a,b are
0 or 1)
B(b, a) let Boolean
b = boolean
value of a
P(b, a) let b = 1 if
a&gt;0, else 0. Positive
l emit next
sequential Label
label
l emit next sequential label Label
J(x) goto label #x Jump J(x) goto label #x Jump
Z(a,d) if a is 0 goto d (a is 0 or 1) Zero Z(a,d) if a is 0
E(a,d) if a is 1 goto d (a is 0 or 1) Else goto d (a is Zero
0 or 1)
H halt Haly E(a,d) if a is 1
goto d Else
(a is 0 or 1)
K(x) let x = number of cmd line arguments Kount H halt Halt
G(x,y) let x = the value if the yth argument Get argument
T end of code; begin output section Terminate K(x) let x = number
X(y) print out hexadecimal value of y heXadecimal of cmdline Kount
T end of output section and program Terminate</code></pre> arguments
G(x,y) let x = the
value
of the yth Get arg
argument
T end of code;
begin output Terminate
section
X(y) print hex
value of y heX
T end of output Terminate
section
and program</code></pre>
<p>You can figure out the other macros yourself. In the sample program, I’ve <p>You can figure out the other macros yourself. In the sample program, I’ve
actually implemented subroutines by saving a return address in a variable and actually implemented subroutines by saving a return address in a variable and
then jumping to a routine– specifically, a routine that converts a number into then jumping to a routine– specifically, a routine that converts a number into