diff options
Diffstat (limited to 'sw/z80')
-rw-r--r-- | sw/z80/crt0.s | 103 | ||||
-rw-r--r-- | sw/z80/crt0.s.old | 43 | ||||
-rw-r--r-- | sw/z80/kernel.c | 7 | ||||
-rw-r--r-- | sw/z80/kernel/include/types.h (renamed from sw/z80/types.h) | 2 | ||||
-rw-r--r-- | sw/z80/kernel/kernel.c | 10 | ||||
-rw-r--r-- | sw/z80/libc/mem.c | 7 | ||||
-rw-r--r-- | sw/z80/loader.asm | 18 | ||||
-rw-r--r-- | sw/z80/makefile | 42 | ||||
-rw-r--r-- | sw/z80/serial.h | 15 | ||||
-rw-r--r-- | sw/z80/zcc_opt.def | 6 |
10 files changed, 152 insertions, 101 deletions
diff --git a/sw/z80/crt0.s b/sw/z80/crt0.s new file mode 100644 index 0000000..7701ca6 --- /dev/null +++ b/sw/z80/crt0.s @@ -0,0 +1,103 @@ +;-------------------------------------------------------------------------- +; 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 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: + + .area _GSFINAL + ret + 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/types.h b/sw/z80/kernel/include/types.h index adde214..c24b311 100644 --- a/sw/z80/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/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/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/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..3d682ca 100644 --- a/sw/z80/makefile +++ b/sw/z80/makefile @@ -2,26 +2,44 @@ # source code settings # OSNAME := helvetiOS - -CSOURCES := $(wildcard *.c) -BINARY := $(OSNAME).bin + +CSOURCES := $(wildcard kernel/*.c) $(wildcard libc/*.c) +OBJECTS := $(patsubst %.c,build/%.rel,$(CSOURCES)) +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 \ + -I kernel/include -I libc/include -DDEBUG + +LDFLAGS := -mz80 --no-std-crt0 crt0.rel \ + --code-loc 0x0800 --data-loc 0x8000 + +.PHONY: dirs dis clean all: $(BINARY) # build binary -$(BINARY): $(CSOURCES) - cp loader.asm loader.opt - $(CC) $(CARGS) $(CSOURCES) -o $@ +$(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 $< + z80dasm -a -g 0h $< -o $(OSNAME).s clean: - - rm $(BINARY) - - rm loader.opt + - rm -rd 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/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 - |