diff options
Diffstat (limited to '')
-rw-r--r-- | sw/z80/drivers/ctc.c (renamed from sw/z80/kernel/drivers/ctc.c) | 2 | ||||
-rw-r--r-- | sw/z80/drivers/include/ctc.h (renamed from sw/z80/kernel/include/drivers/ctc.h) | 0 | ||||
-rw-r--r-- | sw/z80/drivers/include/pio.h (renamed from sw/z80/kernel/include/drivers/pio.h) | 7 | ||||
-rw-r--r-- | sw/z80/drivers/include/usart.h (renamed from sw/z80/kernel/include/drivers/usart.h) | 9 | ||||
-rw-r--r-- | sw/z80/drivers/pio.c (renamed from sw/z80/kernel/drivers/pio.c) | 14 | ||||
-rw-r--r-- | sw/z80/drivers/usart.c (renamed from sw/z80/kernel/drivers/usart.c) | 2 | ||||
-rw-r--r-- | sw/z80/kernel/crt0.s (renamed from sw/z80/crt0.s) | 0 | ||||
-rw-r--r-- | sw/z80/kernel/makefile (renamed from sw/z80/makefile) | 18 |
8 files changed, 32 insertions, 20 deletions
diff --git a/sw/z80/kernel/drivers/ctc.c b/sw/z80/drivers/ctc.c index 841202a..5ac4254 100644 --- a/sw/z80/kernel/drivers/ctc.c +++ b/sw/z80/drivers/ctc.c @@ -1,4 +1,4 @@ -#include "drivers/ctc.h" +#include "ctc.h" void ctc_control() { diff --git a/sw/z80/kernel/include/drivers/ctc.h b/sw/z80/drivers/include/ctc.h index 80e8b4b..80e8b4b 100644 --- a/sw/z80/kernel/include/drivers/ctc.h +++ b/sw/z80/drivers/include/ctc.h diff --git a/sw/z80/kernel/include/drivers/pio.h b/sw/z80/drivers/include/pio.h index 0df2ed0..e91029c 100644 --- a/sw/z80/kernel/include/drivers/pio.h +++ b/sw/z80/drivers/include/pio.h @@ -1,8 +1,8 @@ #ifndef __PIO_H__ #define __PIO_H__ -#include "devices.h" -#include "types.h" +#include "addresses.h" +#include <stdint.h> #define PIO_A 0 #define PIO_B 1 @@ -20,6 +20,7 @@ inline void _pio_data(int port, uint8_t data); inline void _pio_control(int port, uint8_t cmd); +/* the last argument is needed only for IO mode */ void pio_set_mode(int port, int mode, uint8_t io); void pio_set_interrupts(int port, int control); @@ -34,4 +35,4 @@ inline void pio_write_pin(int port, uint8_t pin); // TODO: implement mode (in/out/both) and interrupt vector -#endif // __PIO_H__ +#endif /* __PIO_H__ */ diff --git a/sw/z80/kernel/include/drivers/usart.h b/sw/z80/drivers/include/usart.h index b85ee3e..bb06aab 100644 --- a/sw/z80/kernel/include/drivers/usart.h +++ b/sw/z80/drivers/include/usart.h @@ -1,10 +1,10 @@ #ifndef __USART_H__ #define __USART_H__ -#include "types.h" -#include "devices.h" +#include "addresses.h" -#include "string.h" +#include <stdint.h> +#include <string.h> // baudrate clock divisors // values from TL16C550C datasheet (table 9 for 1.8432 MHz crystal) @@ -48,6 +48,9 @@ #define USART_AUTOFLOW_CTS 2 #define USART_AUTOFLOW_OFF 0 +typedef unsigned int uint; +typedef uint8_t register_t; + /* stuctures for usart registers */ struct IER { diff --git a/sw/z80/kernel/drivers/pio.c b/sw/z80/drivers/pio.c index 4321fb8..bdbe1c3 100644 --- a/sw/z80/kernel/drivers/pio.c +++ b/sw/z80/drivers/pio.c @@ -1,4 +1,4 @@ -#include "drivers/pio.h" +#include "pio.h" static uint8_t *pio_port = (uint8_t *) ADDR_DEV_PIO; static uint8_t *pio_ctrl = (uint8_t *) (ADDR_DEV_PIO + 2); @@ -34,7 +34,17 @@ void pio_set_interrupts(int port, int control) void pio_set_interrupts_mask(int port, int control, uint8_t mask) { // 0x17 is a control sequence to set interrupts - // and to interpret the next byte as a mask + // AND interpret the next byte as a bitmask _pio_control(port, (control | 0x17)); _pio_control(port, mask); } + +uint8_t pio_read(int port) +{ + return *(pio_port + port); +} + +void pio_write(int port, uint8_t data) +{ + _pio_data(port, data); +} diff --git a/sw/z80/kernel/drivers/usart.c b/sw/z80/drivers/usart.c index c54fe37..9ec6dbd 100644 --- a/sw/z80/kernel/drivers/usart.c +++ b/sw/z80/drivers/usart.c @@ -1,4 +1,4 @@ -#include "drivers/usart.h" +#include "usart.h" static struct _usart_device *_usart = (struct _usart_device *) ADDR_DEV_USART; diff --git a/sw/z80/crt0.s b/sw/z80/kernel/crt0.s index 00c7da1..00c7da1 100644 --- a/sw/z80/crt0.s +++ b/sw/z80/kernel/crt0.s diff --git a/sw/z80/makefile b/sw/z80/kernel/makefile index 5ab7e93..be8eed4 100644 --- a/sw/z80/makefile +++ b/sw/z80/kernel/makefile @@ -3,9 +3,8 @@ # OSNAME := helvetiOS -CSOURCES := $(wildcard kernel/*.c) \ - $(wildcard kernel/drivers/*.c) \ - $(wildcard libc/*.c) +CSOURCES := $(wildcard *.c) \ + $(wildcard drivers/*.c) OBJECTS := $(patsubst %.c,build/%.rel,$(CSOURCES)) HEXFILE := build/$(OSNAME).hex @@ -17,13 +16,13 @@ BINARY := build/$(OSNAME).bin CC := sdcc CFLAGS := -mz80 \ - -I kernel/include \ - -I kernel/include/drivers \ + -I include \ + -I include/drivers \ -I libc/include \ --opt-code-size \ -DDEBUG -LDFLAGS := -mz80 --no-std-crt0 crt0.rel \ +LDFLAGS := -mz80 --no-std-crt0 build/crt0.rel \ --std-c89 -pedantic \ --code-loc 0x0800 --data-loc 0x8000 @@ -33,21 +32,20 @@ all: $(BINARY) # build binary $(BINARY): $(OBJECTS) dirs $(CC) $(LDFLAGS) $(OBJECTS) -o $(HEXFILE) - @# xxd -r -p $(HEXFILE) $(BINARY) makebin -s 16384 $(HEXFILE) $(BINARY) -$(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs crt0.rel +$(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs build/crt0.rel @printf "\n" $(CC) $(CFLAGS) -c $< -o $@ -crt0.rel: crt0.s +build/crt0.rel: crt0.s sdasz80 -o $< + @mv crt0.rel build dirs: mkdir -p build build/kernel build/libc build/kernel/drivers dis: $(BINARY) - @# z80dasm -a -l -g 0h $< -o build/$(OSNAME).s dz80 -b -n $< clean: |