Skip to content

Commit

Permalink
samples: add c-print-fibonacci
Browse files Browse the repository at this point in the history
Signed-off-by: Filip Kokosiński <filip.kokosinski@gmail.com>
  • Loading branch information
fkokosinski committed Jun 21, 2024
1 parent 6bcae7e commit 2a53104
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 0 deletions.
1 change: 1 addition & 0 deletions c-print-fibonacci/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
include ../common/common.mk
47 changes: 47 additions & 0 deletions c-print-fibonacci/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
static void putc(int);
static void puti(int);
static int fib(int);

void _start(void)
{
asm ("law 04000");
asm ("dac 209");
asm ("law 03000");
asm ("dac 208");

int n;

for (int i = 0; i < 20; i++) {
puti(fib(i));
putc(033);
}

asm ("hlt");
__builtin_unreachable();
}

static void putc(int c)
{
asm ("lio %0" : : "r"(c));
asm ("tyo");
}

/* TODO: this is printing out digits in reverse order; fix it */
static void puti(int i)
{
int mod;

do {
mod = i % 10;
putc((mod == 0) ? 020 : mod);
i /= 10;
} while (i != 0);
}

static int fib(int n)
{
if (n <= 1)
return n;
else
return fib(n - 1) + fib(n - 2);
}
1 change: 1 addition & 0 deletions tests/test.exp
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,4 @@ run_test "c-print-for-loop" "xxxxyxxx"
run_test "c-test-comparison" "aceg"
run_test "c-test-arith" "xx"
run_test "c-test-recursion" "xxxxxxxxxxxxxxxxxxxx"
run_test "c-print-fibonacci" "0,1,1,2,3,5,8,31,12,43,55,98,441,332,773,016,789,7951,4852,1814,"

0 comments on commit 2a53104

Please sign in to comment.