From fdce798dca64b48481fd002e8f1ac30302f48e0e Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Sat, 25 Mar 2017 10:10:24 +0100 Subject: added missing makefile for z80 and fixed gitignore --- sw/z80/makefile | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 sw/z80/makefile (limited to 'sw/z80') diff --git a/sw/z80/makefile b/sw/z80/makefile new file mode 100644 index 0000000..94646a9 --- /dev/null +++ b/sw/z80/makefile @@ -0,0 +1,27 @@ +#### +# source code settings +# +OSNAME := helvetiOS + +CSOURCES := $(wildcard *.c) +BINARY := $(OSNAME).bin + +### +# compiler settings +# +CC := zcc +CARGS := -Wall -I . -DDEBUG -crt0 loader -asm z80asm -nostdlib + +all: $(BINARY) + +# build binary +$(BINARY): $(CSOURCES) + cp loader.asm loader.opt + $(CC) $(CARGS) $(CSOURCES) -o $@ + +dis: $(BINARY) + z80dasm -a -g 0h $< + +clean: + - rm $(BINARY) + - rm loader.opt -- cgit v1.2.1 From 752e0fd9ec166ea8a513294fd44b7203af03d684 Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Tue, 2 May 2017 00:06:10 +0200 Subject: switch to sdcc - update of the makefile to use sdcc, since it is more popular and it's easier to insall on other computers - fix of crt0.s (old loader.asm) for the new compiler - change of the structure in the source code folder to separate betweeen libc and kernel code --- sw/z80/crt0.s | 30 ++++++++++++++++++++++++++++++ sw/z80/crt0.s.old | 43 ------------------------------------------- sw/z80/kernel.c | 7 ------- sw/z80/kernel/include/types.h | 9 +++++++++ sw/z80/kernel/kernel.c | 10 ++++++++++ sw/z80/loader.asm | 18 ------------------ sw/z80/makefile | 34 ++++++++++++++++++++++------------ sw/z80/serial.h | 15 --------------- sw/z80/types.h | 9 --------- sw/z80/zcc_opt.def | 6 ------ 10 files changed, 71 insertions(+), 110 deletions(-) create mode 100644 sw/z80/crt0.s delete mode 100644 sw/z80/crt0.s.old delete mode 100644 sw/z80/kernel.c create mode 100644 sw/z80/kernel/include/types.h create mode 100644 sw/z80/kernel/kernel.c delete mode 100644 sw/z80/loader.asm delete mode 100644 sw/z80/serial.h delete mode 100644 sw/z80/types.h delete mode 100644 sw/z80/zcc_opt.def (limited to 'sw/z80') diff --git a/sw/z80/crt0.s b/sw/z80/crt0.s new file mode 100644 index 0000000..d0ae3ca --- /dev/null +++ b/sw/z80/crt0.s @@ -0,0 +1,30 @@ + .area _HEADER (ABS) + ;; reset vector + .org 0 + jp init + + .org 0x08 + reti + .org 0x10 + reti + .org 0x18 + reti + .org 0x20 + reti + .org 0x28 + reti + .org 0x30 + reti + .org 0x38 + reti + + .org 0x100 + +init: + ;; set stack + ld sp,#0xFFFF + + ;; call C main function + call _main + +.globl _main diff --git a/sw/z80/crt0.s.old b/sw/z80/crt0.s.old deleted file mode 100644 index f3bf8e8..0000000 --- a/sw/z80/crt0.s.old +++ /dev/null @@ -1,43 +0,0 @@ - .module crt0 - .globl _main - - .area _HEADER (ABS) -;; reset vector - .org 0x0000 - jp init - - .org 0x0100 - -init: -;; Stack at the top of memory. - ld sp,#0xffff - - ;; initialise global variables - call gsinit - call _main - jp _exit - - ;; Ordering of segments for the linker. - .area _HOME - .area _CODE - .area _GSINIT - .area _GSFINAL - - .area _DATA - .area _BSS - .area _HEAP - - .area _CODE -__clock:: - ret - -_exit:: - ret - - .area _GSINIT - -gsinit:: - -.area _GSFINAL - ret - diff --git a/sw/z80/kernel.c b/sw/z80/kernel.c deleted file mode 100644 index 172eee1..0000000 --- a/sw/z80/kernel.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "types.h" - - -void main(void) -{ - -} diff --git a/sw/z80/kernel/include/types.h b/sw/z80/kernel/include/types.h new file mode 100644 index 0000000..adde214 --- /dev/null +++ b/sw/z80/kernel/include/types.h @@ -0,0 +1,9 @@ +#ifndef __TYPES_H__ +#define __TYPES_H__ + +#define int8_t char +#define uint8_t unsigned char +#define int16_t int +#define uint16_t unsigned int + +#endif diff --git a/sw/z80/kernel/kernel.c b/sw/z80/kernel/kernel.c new file mode 100644 index 0000000..fe87c3d --- /dev/null +++ b/sw/z80/kernel/kernel.c @@ -0,0 +1,10 @@ +#include "types.h" + + +void main(void) +{ + int i, j = 20; + for (i = 0; i < 10; i++) { + j--; + } +} diff --git a/sw/z80/loader.asm b/sw/z80/loader.asm deleted file mode 100644 index 85f5abe..0000000 --- a/sw/z80/loader.asm +++ /dev/null @@ -1,18 +0,0 @@ -; C crt0 loader -; - module crt0 - -; general scope declarations - extern _main ; C code - -; startup code - org 0000h ; reset vector - jp _start - -_start: - ld sp, 0xffff - call _main - jp _exit - -_exit: - ret diff --git a/sw/z80/makefile b/sw/z80/makefile index 94646a9..ecdd9a4 100644 --- a/sw/z80/makefile +++ b/sw/z80/makefile @@ -2,26 +2,36 @@ # source code settings # OSNAME := helvetiOS - -CSOURCES := $(wildcard *.c) -BINARY := $(OSNAME).bin + +CSOURCES := $(wildcard kernel/*.c) $(wildcard libc/*.c) +HEXFILE := build/$(OSNAME).hex +BINARY := build/$(OSNAME).bin ### # compiler settings -# -CC := zcc -CARGS := -Wall -I . -DDEBUG -crt0 loader -asm z80asm -nostdlib + +CC := sdcc + +CFLAGS := -mz80 --no-std-crt0 crt0.rel \ + -I kernel/include -I libc/include -DDEBUG + +LDFLAGS := --code-loc 0x0800 --data-loc 0x8000 all: $(BINARY) # build binary -$(BINARY): $(CSOURCES) - cp loader.asm loader.opt - $(CC) $(CARGS) $(CSOURCES) -o $@ +$(BINARY): $(CSOURCES) crt0.rel + mkdir -p build + $(CC) $(CFLAGS) $(LDFLSGS) $(CSOURCES) -o $(HEXFILE) + xxd -r -p $(HEXFILE) $(BINARY) + +crt0.rel: crt0.s + sdasz80 -o $< dis: $(BINARY) - z80dasm -a -g 0h $< + z80dasm -a -g 0h $< -o $(OSNAME).s clean: - - rm $(BINARY) - - rm loader.opt + - rm build/* + - rm $(OSNAME).s + - rm crt0.rel diff --git a/sw/z80/serial.h b/sw/z80/serial.h deleted file mode 100644 index 3dc9b18..0000000 --- a/sw/z80/serial.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __SERIAL_H__ -#define __SERIAL_H__ - -#include "types.h" - -// define all -#define USART_BAUD_9600 -#define USART_BAUD_115200 - -uint8_t usart_registers[8]; -usart_registers = 0x80FF; // TODO: set real address - -void usart_init(int16_t baudprescale); - -#endif diff --git a/sw/z80/types.h b/sw/z80/types.h deleted file mode 100644 index adde214..0000000 --- a/sw/z80/types.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __TYPES_H__ -#define __TYPES_H__ - -#define int8_t char -#define uint8_t unsigned char -#define int16_t int -#define uint16_t unsigned int - -#endif diff --git a/sw/z80/zcc_opt.def b/sw/z80/zcc_opt.def deleted file mode 100644 index de830a9..0000000 --- a/sw/z80/zcc_opt.def +++ /dev/null @@ -1,6 +0,0 @@ - -IF !DEFINED_startup - defc DEFINED_startup = 1 - defc startup = 1 -ENDIF - -- cgit v1.2.1 From 1ec8f14f03322e3fe1f56f4abcbc85f5c2934dfc Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Tue, 2 May 2017 16:14:41 +0200 Subject: fix for sdcc makefile fix for the old makefile, because it could't compile more than one source file. new libc directory with mem.c to start implementing the standard C library (or at least the part we need). --- sw/z80/crt0.s | 125 +++++++++++++++++++++++++++++++++--------- sw/z80/kernel/include/types.h | 2 + sw/z80/libc/mem.c | 7 +++ sw/z80/makefile | 20 +++++-- 4 files changed, 122 insertions(+), 32 deletions(-) create mode 100644 sw/z80/libc/mem.c (limited to 'sw/z80') diff --git a/sw/z80/crt0.s b/sw/z80/crt0.s index d0ae3ca..7701ca6 100644 --- a/sw/z80/crt0.s +++ b/sw/z80/crt0.s @@ -1,30 +1,103 @@ - .area _HEADER (ABS) - ;; reset vector - .org 0 - jp init - - .org 0x08 - reti - .org 0x10 - reti - .org 0x18 - reti - .org 0x20 - reti - .org 0x28 - reti - .org 0x30 - reti - .org 0x38 - reti - - .org 0x100 +;-------------------------------------------------------------------------- +; crt0.s - Generic crt0.s for a Z80 +; +; Copyright (C) 2000, Michael Hope +; +; This library is free software; you can redistribute it and/or modify it +; under the terms of the GNU General Public License as published by the +; Free Software Foundation; either version 2, or (at your option) any +; later version. +; +; This library is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this library; see the file COPYING. If not, write to the +; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, +; MA 02110-1301, USA. +; +; As a special exception, if you link this library with other files, +; some of which are compiled with SDCC, to produce an executable, +; this library does not by itself cause the resulting executable to +; be covered by the GNU General Public License. This exception does +; not however invalidate any other reasons why the executable file +; might be covered by the GNU General Public License. +;-------------------------------------------------------------------------- + .module crt0 + .globl _main + + .area _HEADER (ABS) + ;; Reset vector + .org 0 + jp init + + .org 0x08 + reti + .org 0x10 + reti + .org 0x18 + reti + .org 0x20 + reti + .org 0x28 + reti + .org 0x30 + reti + .org 0x38 + reti + + .org 0x100 init: - ;; set stack - ld sp,#0xFFFF + ;; Set stack pointer directly above top of memory. + ld sp,#0xFFFF + + ;; Initialise global variables + call gsinit + call _main + jp _exit + + ;; Ordering of segments for the linker. + .area _HOME + .area _CODE + .area _INITIALIZER + .area _GSINIT + .area _GSFINAL + + .area _DATA + .area _INITIALIZED + .area _BSEG + .area _BSS + .area _HEAP + + .area _CODE + +__clock:: + ld a,#2 + rst 0x08 + ret + +_exit:: + ;; Exit - special code to the emulator + ld a,#0 + rst 0x08 +1$: + halt + jr 1$ + + .area _GSINIT +gsinit:: + ; ld bc, #l__INITIALIZER + ld a, b + or a, c + jr Z, gsinit_next + ; ld de, #s__INITIALIZED + ; ld hl, #s__INITIALIZER + ldir +gsinit_next: - ;; call C main function - call _main + .area _GSFINAL + ret -.globl _main diff --git a/sw/z80/kernel/include/types.h b/sw/z80/kernel/include/types.h index adde214..c24b311 100644 --- a/sw/z80/kernel/include/types.h +++ b/sw/z80/kernel/include/types.h @@ -6,4 +6,6 @@ #define int16_t int #define uint16_t unsigned int +#define size_t uint16_t + #endif diff --git a/sw/z80/libc/mem.c b/sw/z80/libc/mem.c new file mode 100644 index 0000000..667a752 --- /dev/null +++ b/sw/z80/libc/mem.c @@ -0,0 +1,7 @@ +#include "types.h" +#include "mem.h" + +void *malloc(size_t size) +{ + : +} diff --git a/sw/z80/makefile b/sw/z80/makefile index ecdd9a4..3d682ca 100644 --- a/sw/z80/makefile +++ b/sw/z80/makefile @@ -4,6 +4,7 @@ OSNAME := helvetiOS CSOURCES := $(wildcard kernel/*.c) $(wildcard libc/*.c) +OBJECTS := $(patsubst %.c,build/%.rel,$(CSOURCES)) HEXFILE := build/$(OSNAME).hex BINARY := build/$(OSNAME).bin @@ -12,26 +13,33 @@ BINARY := build/$(OSNAME).bin CC := sdcc -CFLAGS := -mz80 --no-std-crt0 crt0.rel \ +CFLAGS := -mz80 \ -I kernel/include -I libc/include -DDEBUG -LDFLAGS := --code-loc 0x0800 --data-loc 0x8000 +LDFLAGS := -mz80 --no-std-crt0 crt0.rel \ + --code-loc 0x0800 --data-loc 0x8000 +.PHONY: dirs dis clean all: $(BINARY) # build binary -$(BINARY): $(CSOURCES) crt0.rel - mkdir -p build - $(CC) $(CFLAGS) $(LDFLSGS) $(CSOURCES) -o $(HEXFILE) +$(BINARY): $(OBJECTS) dirs + $(CC) $(LDFLAGS) $(OBJECTS) -o $(HEXFILE) xxd -r -p $(HEXFILE) $(BINARY) +$(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs crt0.rel + $(CC) $(CFLAGS) -c $< -o $@ + crt0.rel: crt0.s sdasz80 -o $< +dirs: + mkdir -p build build/kernel build/libc + dis: $(BINARY) z80dasm -a -g 0h $< -o $(OSNAME).s clean: - - rm build/* + - rm -rd build/* - rm $(OSNAME).s - rm crt0.rel -- cgit v1.2.1