commit 2bdc9a55818b4d12c44a7269ea61c4687be64d68 Author: Dreaded_X Date: Thu Jan 9 00:02:12 2020 +0100 Simple program that calculates the first 10 Fibonacci numbers diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..30bcfa4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.build/ diff --git a/.vimlocal b/.vimlocal new file mode 100644 index 0000000..d538dbe --- /dev/null +++ b/.vimlocal @@ -0,0 +1,3 @@ +set makeprg=./tools/build.sh +map :Start ./tools/upload_stm32.sh +map :Start python.exe rootfs$(pwd)/tools/upload_z80.py rootfs$(pwd)/build/fib.z80 diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..b3cc370 --- /dev/null +++ b/build.sh @@ -0,0 +1,2 @@ +#!/bin/bash +mkdir -p .build && zasm -i src/fib.z80 -o .build/fib.bin diff --git a/src/fib.z80 b/src/fib.z80 new file mode 100644 index 0000000..3540d75 --- /dev/null +++ b/src/fib.z80 @@ -0,0 +1,38 @@ +.org $0000 +main: +init: + ld hl, out+7 + + ld a, (amount) + ld d, a + dec d + + ld a, (y) + ld b, a + + ld a, (x) + +loop: + add a, b + + ld (hl), a + inc hl + + ld c, a + ld a, b + ld b, c + + dec d + jp nz, loop + +done: + halt + + +amount: + .db 10 +x: + .db 0 +y: + .db 1 +out: diff --git a/upload.py b/upload.py new file mode 100644 index 0000000..e1aa38c --- /dev/null +++ b/upload.py @@ -0,0 +1,47 @@ +import serial +import os +import sys + +def progressbar(it, prefix="", size=60, file=sys.stdout): + count = len(it) + def show(j): + x = int(size*j/count) + file.write("%s[%s%s] %i/%i\r" % (prefix, "#"*x, "."*(size-x), j, count)) + file.flush() + show(0) + for i, item in enumerate(it): + yield item + show(i+1) + file.write("\n") + file.flush() + +def main(): + if len(sys.argv) == 3: + ser = serial.Serial(sys.argv[1], timeout=1, write_timeout=1) + if ser.is_open: + # Clear out any existing input + ser.write(b'\n') + ser.readline() + + # Send the upload command + ser.write(b'#u\n') + print(ser.readline()) + + path = sys.argv[2] + size = os.path.getsize(path) + ser.write([size]) + i = 0 + with open(path, "rb") as f: + for i in progressbar(range(size), "Upload: ", 40): + ser.write(f.read(1)) + + print(ser.readline()) + ser.close() + + else: + print("Failed to open serial port") + else: + print("Please provide file to upload") + +if "__main__": + main()