summaryrefslogtreecommitdiffstats
path: root/sw/z80/arch
diff options
context:
space:
mode:
Diffstat (limited to 'sw/z80/arch')
-rw-r--r--sw/z80/arch/include/addresses.h (renamed from sw/z80/arch/addresses.h)0
-rw-r--r--sw/z80/arch/include/sleep.h14
-rw-r--r--sw/z80/arch/makefile27
-rw-r--r--sw/z80/arch/sleep.c16
4 files changed, 57 insertions, 0 deletions
diff --git a/sw/z80/arch/addresses.h b/sw/z80/arch/include/addresses.h
index 07ab473..07ab473 100644
--- a/sw/z80/arch/addresses.h
+++ b/sw/z80/arch/include/addresses.h
diff --git a/sw/z80/arch/include/sleep.h b/sw/z80/arch/include/sleep.h
new file mode 100644
index 0000000..bd4214b
--- /dev/null
+++ b/sw/z80/arch/include/sleep.h
@@ -0,0 +1,14 @@
+#ifndef __SLEEP_H__
+#define __SLEEP_H__
+
+#ifndef F_CPU
+#error undefined CPU clock speed
+#endif
+
+#define SLEEP_UNIT ((F_CPU/4)/2)
+
+#include <stdint.h>
+
+void usleep(uint16_t microseconds);
+
+#endif // __SLEEP_H__ \ No newline at end of file
diff --git a/sw/z80/arch/makefile b/sw/z80/arch/makefile
new file mode 100644
index 0000000..2763c10
--- /dev/null
+++ b/sw/z80/arch/makefile
@@ -0,0 +1,27 @@
+# Drivers library
+
+LIB := build/arch.a
+SOURCES := $(wildcard *.c)
+OBJECTS := $(patsubst %.c,build/%.rel,$(SOURCES))
+
+F_CPU := 10000
+
+CC := sdcc
+AR := sdar
+CFLAGS := -mz80 \
+ -Iinclude \
+ -DDEBUG \
+ -DF_CPU=$(F_CPU)
+
+.PHONY: dirs clean
+$(LIB): $(OBJECTS)
+ $(AR) rcs $@ $(OBJECTS)
+
+$(OBJECTS): build/%.rel: %.c $(SOURCES) dirs
+ $(CC) $(CFLAGS) -c $< -o $@
+
+dirs:
+ mkdir -p build
+
+clean:
+ - rm -rd build
diff --git a/sw/z80/arch/sleep.c b/sw/z80/arch/sleep.c
new file mode 100644
index 0000000..154e7ec
--- /dev/null
+++ b/sw/z80/arch/sleep.c
@@ -0,0 +1,16 @@
+#include "sleep.h"
+
+void usleep(uint16_t microseconds)
+{
+ __asm
+ pop hl
+loop:
+ ld bc, #SLEEP_UNIT
+unit:
+ nop
+ dec bc
+ jr nz, unit
+ dec hl
+ jr nz,loop
+ __endasm;
+} \ No newline at end of file