commit 9a59e9d1d9354d6224efc713dd1eef1caaf3d567
parent 19172bf0492fa8c65f9e49b800b2df164deca0f4
Author: neauoire <aliceffekt@gmail.com>
Date: Fri, 25 Mar 2022 10:29:45 -0700
(exercises/) Cleanup
Diffstat:
5 files changed, 73 insertions(+), 84 deletions(-)
diff --git a/projects/examples/exercises/brainfuck.tal b/projects/examples/exercises/brainfuck.tal
@@ -1,33 +1,28 @@
-( brainfuck interpreter )
+( Brainfuck:
+ > Move the pointer to the right
+ < Move the pointer to the left
+ + Increment the memory cell at the pointer
+ - Decrement the memory cell at the pointer
+ . Output the character signified by the cell at the pointer
+ , Input a character and store it in the cell at the pointer
+ [ Jump past the matching ] if the cell at the pointer is 0
+ ] Jump back to the matching [ if the cell at the pointer is nonzero )
-%DEC { #01 SUB }
-%DEC2 { #0001 SUB2 }
-%DECr { LITr 01 SUBr }
-%HALT { #0101 #0e DEO2 }
-%EMIT { #18 DEO }
-
-|0100 ( -> )
+|0100 ( -> ) @reset
;memory
;program
&while
- ( Move the pointer to the right )
LDAk LIT '> NEQ ,&movr JCN [ SWP2 INC2 SWP2 ] &movr
- ( Move the pointer to the left )
- LDAk LIT '< NEQ ,&movl JCN [ SWP2 DEC2 SWP2 ] &movl
- ( Increment the memory cell at the pointer )
+ LDAk LIT '< NEQ ,&movl JCN [ SWP2 #0001 SUB2 SWP2 ] &movl
LDAk LIT '+ NEQ ,&incr JCN [ OVR2 STH2k LDA INC STH2r STA ] &incr
- ( Decrement the memory cell at the pointer )
- LDAk LIT '- NEQ ,&decr JCN [ OVR2 STH2k LDA DEC STH2r STA ] &decr
- ( Output the character signified by the cell at the pointer )
- LDAk LIT '. NEQ ,&emit JCN [ OVR2 LDA EMIT ] &emit
- ( Jump past the matching ] if the cell at the pointer is 0 )
+ LDAk LIT '- NEQ ,&decr JCN [ OVR2 STH2k LDA #01 SUB STH2r STA ] &decr
+ LDAk LIT '. NEQ ,&emit JCN [ OVR2 LDA #18 DEO ] &emit
LDAk LIT '[ NEQ ,&next JCN [ ,goto-next JSR ] &next
- ( Jump back to the matching [ if the cell at the pointer is nonzero )
LDAk LIT '] NEQ ,&prev JCN [ ,goto-back JSR ] &prev
INC2 LDAk ,&while JCN
POP2
- HALT
+ ( halt ) #010f DEO
BRK
@@ -40,7 +35,7 @@ BRK
LDAk LIT '[ NEQ JMP INCr
LDAk LIT '] NEQ ,&no-end JCN
STHkr #00 EQU ,&end JCN
- DECr
+ LITr 01 SUBr
&no-end
INC2 LDAk ,&loop JCN
&end
@@ -52,14 +47,14 @@ JMP2r
OVR2 LDA #00 NEQ JMP JMP2r
( depth ) LITr 00
- DEC2
+ #0001 SUB2
&loop
LDAk LIT '] NEQ JMP INCr
LDAk LIT '[ NEQ ,&no-end JCN
STHkr #00 EQU ,&end JCN
- DECr
+ LITr 01 SUBr
&no-end
- DEC2 LDAk ,&loop JCN
+ #0001 SUB2 LDAk ,&loop JCN
&end
( depth ) POPr
diff --git a/projects/examples/exercises/fib.tal b/projects/examples/exercises/fib.tal
@@ -1,16 +1,15 @@
-( The Fibonacci Sequence
- A series of numbers where the next number is made of the two numbers before it )
+( Fibonacci:
+ A series of numbers where the next number
+ is made of the two numbers before it )
-%HALT { #010f DEO }
-%EMIT { #18 DEO }
-%PRINT { DUP2 ,print JSR #0a EMIT }
+|0100 ( -> ) @reset
-|0100 ( -> )
-
- #0000 INC2k ADD2k
- &loop
- PRINT ADD2k LTH2k ,&loop JCN
- HALT
+ #0000 INC2k ADD2k
+ &loop
+ ( print ) DUP2 ,print JSR
+ ( linebreak ) #0a18 DEO
+ ADD2k LTH2k ,&loop JCN
+ ( halt ) #010f DEO
BRK
@@ -18,6 +17,6 @@ BRK
&short ( short* -- ) SWP ,&byte JSR
&byte ( byte -- ) DUP #04 SFT ,&char JSR
- &char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD EMIT
+ &char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO
JMP2r
diff --git a/projects/examples/exercises/fizzbuzz.tal b/projects/examples/exercises/fizzbuzz.tal
@@ -1,32 +1,27 @@
-( FizzBuzz: a program that prints the integers from 1 to 100.
+( FizzBuzz:
+ A program that prints the integers from 1 to 100.
for multiples of three, print "Fizz"
for multiples of five, print "Buzz"
for multiples of both three and five, print "FizzBuzz" )
-|0100 ( -> ) @program
+|0100 ( -> ) @reset
#6400
&loop
- ( dec )
- DUPk #0a DIV ,print-num JSR
- #0a ,mod JSR ,print-num JSR
- ( space )
- #2018 DEO
- ( text )
+ ( dec ) DUPk ,print-dec JSR
+ ( space ) #2018 DEO
DUP #03 ,mod JSR ,&no3 JCN ;s/fizz ,print-str JSR &no3
DUP #05 ,mod JSR ,&no5 JCN ;s/buzz ,print-str JSR &no5
( linebreak ) #0a18 DEO
INC GTHk ,&loop JCN
POP2
- ( halt )
- #010f DEO
+ ( halt ) #010f DEO
BRK
@mod ( a b -- c ) DIVk MUL SUB JMP2r
+@print-dec ( num -- ) #0a DIV ,print-num JSR #0a ,mod JSR
@print-num ( num -- ) #30 ADD #18 DEO JMP2r
@print-str ( addr* -- ) &loop LDAk #18 DEO INC2 LDAk ,&loop JCN POP2 JMP2r
-@s
- &fizz "Fizz $1
- &buzz "Buzz $1
+@s &fizz "Fizz $1 &buzz "Buzz $1
diff --git a/projects/examples/exercises/primes.tal b/projects/examples/exercises/primes.tal
@@ -1,43 +1,42 @@
-(
- An integer greater than one is called a prime number
+( Primes:
+ An integer greater than one is called a prime number
if its only positive divisors are one and itself. )
-|0100 ( -> ) @main
+|0100 ( -> ) @reset
#0000 #0001
&loop
DUP2 ,is-prime JSR #00 EQU ,&skip JCN
- DUP2 ,print/short JSR
- #20 ( emit ) #18 DEO
+ ( print ) DUP2 ,print/short JSR
+ ( space ) #2018 DEO
&skip
INC2 NEQ2k ,&loop JCN
POP2 POP2
- #0101 #0e DEO2
+ ( halt ) #010f DEO
BRK
@is-prime ( number* -- flag )
- DUP2 #0001 NEQ2 ,¬-one JCN
- POP2 #00 JMP2r
- ¬-one
+ DUP2 #0001 EQU2 ,&fail JCN
STH2k
( range ) #01 SFT2 #0002
&loop
STH2kr OVR2 ( mod2 ) [ DIV2k MUL2 SUB2 ] ORA ,&continue JCN
- POP2 POP2
+ POP2 POP2
POP2r #00 JMP2r
&continue
INC2 GTH2k ,&loop JCN
- POP2 POP2
+ POP2 POP2
POP2r #01
JMP2r
+ &fail POP2 #00 JMP2r
@print ( short* -- )
&short ( short* -- ) SWP ,&byte JSR
&byte ( byte -- ) DUP #04 SFT ,&char JSR
- &char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD ( emit ) #18 DEO
+ &char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO
JMP2r
diff --git a/projects/examples/exercises/subleq.tal b/projects/examples/exercises/subleq.tal
@@ -1,45 +1,46 @@
+( Subleq:
+ The subleq instruction subtracts the contents at address a
+ from the contents at address b, stores the result at address b,
+ and then, if the result is not positive, jumps to address c.
+ If the result is positive, execution proceeds to the next instruction
+ in sequence. )
-( uxnasm subleq.tal subleq.rom && uxncli subleq.rom )
+|0000
-%EMIT { #18 DEO }
-%HALT { #0101 #0e DEO2 }
-%RTN { JMP2r }
-%GET { #10 SFT2 ;program ADD2 LDA2 }
-%SET { #10 SFT2 ;program ADD2 STA2 }
+ @a $2 @b $2 @c $2
-|0000 @a $2 @b $2 @c $2
-|0100
+|0100 ( -> ) @reset
- ( pointer ) #0000
+ #0000
&while
,eval JSR
DUP2 #8000 LTH2 ,&while JCN
POP2
- HALT
+ ( halt ) #010f DEO
BRK
@eval ( ip* -- ip* )
- DUP2 GET .a STZ2
- INC2 DUP2 GET .b STZ2
- INC2 DUP2 GET .c STZ2
+ DUP2 ,&get JSR .a STZ2
+ INC2 DUP2 ,&get JSR .b STZ2
+ INC2 DUP2 ,&get JSR .c STZ2
INC2
( I/O )
- .a LDZ2 #ffff NEQ2 ,&noin JCN
- ( nothing. ) ,&end JMP2 &noin
- .b LDZ2 #ffff NEQ2 ,&noout JCN
- .a LDZ2 GET NIP EMIT ,&end JMP &noout
+ .a LDZ2 #ffff EQU2 ,&input JCN
+ .b LDZ2 #ffff EQU2 ,&output JCN
( SUBLEQ )
- .b LDZ2 GET .a LDZ2 GET SUB2 .b LDZ2 SET
+ .b LDZ2 STH2k ,&get JSR .a LDZ2 ,&get JSR SUB2 STH2r #10 SFT2 ;program ADD2 STA2
( SET )
- .b LDZ2 GET #0001 SUB2 #8000 LTH2 ,&end JCN
- POP2 .c LDZ2 &end
+ .b LDZ2 ,&get JSR #0001 SUB2 #8000 LTH2 ,&end JCN POP2 .c LDZ2 &end
-RTN
+JMP2r
+ &input ( -- ) JMP2r
+ &output ( -- ) .a LDZ2 ,&get JSR NIP #18 DEO JMP2r
+ &get ( a* -- b* ) #10 SFT2 ;program ADD2 LDA2 JMP2r
@program ( hello world )
- 000f 0011 ffff 0011 ffff ffff 0010 0001
- ffff 0010 0003 ffff 000f 000f 0000 0000
- ffff 0048 0065 006c 006c 006f 002c 0020
+ 000f 0011 ffff 0011 ffff ffff 0010 0001
+ ffff 0010 0003 ffff 000f 000f 0000 0000
+ ffff 0048 0065 006c 006c 006f 002c 0020
0077 006f 0072 006c 0064 0021 000a 0000