From 5ab9865fa6ed343ae0cffefb81b20af2e533e36f Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Sat, 8 Apr 2023 17:20:32 +0300 Subject: Move from logisim to digital --- high-level-lang-idea.perl | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 high-level-lang-idea.perl (limited to 'high-level-lang-idea.perl') diff --git a/high-level-lang-idea.perl b/high-level-lang-idea.perl new file mode 100644 index 0000000..426cae8 --- /dev/null +++ b/high-level-lang-idea.perl @@ -0,0 +1,36 @@ +# Builtin types: +# u8, u16, i8, i16, block[T], void + +# allocate 16 words, returning block +# a block is similar to a C pointer but contains the allocated size as well +decl v :: block[u16] = alloc-words 16 + +# define a fn that zeroes a block of memory +decl zero-block :: block[u16] -> void +func zero-block block + # for each address in block + for-addr addr block + # store the value 0 in memory at address addr + store addr 0 + +# call fn zero-block in inlined mode +zero-block% v + +# compute first 16 fibonacci numbers +decl a :: u16 = 0 +decl b :: u16 = 1 +for-index idx block + # declarations in loop constructs are hoisted + decl addr :: u16 = addr-at idx block + decl v :: u16 + + if idx == 0 + v = a + else if idx == 1 + v = b + else + v = a + b + + store addr v + a = b + b = v -- cgit v1.3