From: Sebastian Date: Fri, 8 Nov 2013 21:10:03 +0000 (+0100) Subject: z80: uart echo test program (SDCC) X-Git-Url: http://sraa.de/git/?p=z80.git;a=commitdiff_plain;h=f7ac2e0ac702f8b0922cdb2d4f9aae16695ae699 z80: uart echo test program (SDCC) --- f7ac2e0ac702f8b0922cdb2d4f9aae16695ae699 diff --git a/z80/uart/Makefile b/z80/uart/Makefile new file mode 100644 index 0000000..bdfe168 --- /dev/null +++ b/z80/uart/Makefile @@ -0,0 +1,27 @@ +# makefile + +OBJS = crt0.rel main.rel + +CC = sdcc -mz80 +AS = sdasz80 +CFLAGS = --all-callee-saves --no-std-crt0 + +all: main.hex + +main.hex: $(OBJS) + @echo -e "\tLD\t$@" + @$(CC) $(CFLAGS) -o $@ $(OBJS) + +%.rel: %.c + @echo -e "\tCC\t$@" + @$(CC) $(CFLAGS) -c -o $@ $^ + +%.rel: %.s + @echo -e "\tAS\t$@" + @$(AS) -o $@ $^ + +clean: + @echo -e "\tCLEAN" + rm -f *.asm *.hex *.lk *.lst *.map *.noi *.rel *.sym + +.PHONY: clean diff --git a/z80/uart/crt0.s b/z80/uart/crt0.s new file mode 100644 index 0000000..59ea466 --- /dev/null +++ b/z80/uart/crt0.s @@ -0,0 +1,91 @@ +;-------------------------------------------------------------------------- +; 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.1, 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: + ;; Stack at the top of memory. + ld sp,#0x7fff + + ;; 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 _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:: + + .area _GSFINAL + ret diff --git a/z80/uart/main.c b/z80/uart/main.c new file mode 100644 index 0000000..be3a524 --- /dev/null +++ b/z80/uart/main.c @@ -0,0 +1,27 @@ + +#include + +__sfr __at 0x10 uart_data; +__sfr __at 0x11 uart_rxfill; + +void putchar(char c) { + uart_data = c; +} + +void main(void) +{ + char rx; + + char hello[] = "Hallo, Welt!\n"; + + printf("%s", hello); + + while(1) { + if(uart_rxfill) { + rx = uart_data; + printf("%c", rx); + } + } + + while(1); +}