diff options
Diffstat (limited to 'sw/z80')
52 files changed, 0 insertions, 2643 deletions
diff --git a/sw/z80/TODO.txt b/sw/z80/TODO.txt deleted file mode 100644 index 67be671..0000000 --- a/sw/z80/TODO.txt +++ /dev/null @@ -1 +0,0 @@ -- fix kernel makefile (currently broken) diff --git a/sw/z80/arch/include/addresses.h b/sw/z80/arch/include/addresses.h deleted file mode 100644 index 32f1997..0000000 --- a/sw/z80/arch/include/addresses.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __ADDRESSES_H__ -#define __ADDRESSES_H__ - -#define ADDR_DEV_ROM_L 0x0000 -#define ADDR_DEV_ROM_H 0x2000 - -#define ADDR_DEV_PIO 0x0010 -#define ADDR_DEV_CTC 0x0020 -#define ADDR_DEV_USART 0x0030 - -#define ADDR_DEV_MMU - -#define ADDR_DEV_RAM 0x8000 - -#endif diff --git a/sw/z80/arch/include/sleep.h b/sw/z80/arch/include/sleep.h deleted file mode 100644 index bd4214b..0000000 --- a/sw/z80/arch/include/sleep.h +++ /dev/null @@ -1,14 +0,0 @@ -#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 deleted file mode 100644 index 2763c10..0000000 --- a/sw/z80/arch/makefile +++ /dev/null @@ -1,27 +0,0 @@ -# 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 deleted file mode 100644 index 154e7ec..0000000 --- a/sw/z80/arch/sleep.c +++ /dev/null @@ -1,16 +0,0 @@ -#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 diff --git a/sw/z80/drivers/ctc.c b/sw/z80/drivers/ctc.c deleted file mode 100644 index 5ac4254..0000000 --- a/sw/z80/drivers/ctc.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "ctc.h" - -void ctc_control() -{ - -} diff --git a/sw/z80/drivers/include/ctc.h b/sw/z80/drivers/include/ctc.h deleted file mode 100644 index 80e8b4b..0000000 --- a/sw/z80/drivers/include/ctc.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __CTC_H__ -#define __CTC_H__ - -void ctc_control(); - -#endif /* __CTC_H__ */ diff --git a/sw/z80/drivers/include/pio.h b/sw/z80/drivers/include/pio.h deleted file mode 100644 index ee968d7..0000000 --- a/sw/z80/drivers/include/pio.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef __PIO_H__ -#define __PIO_H__ - -#include "addresses.h" -#include <stdint.h> - -// DEBUG -#define PIO_ASM_INTERFACE - -// ports -#define PIO_A 0 -#define PIO_B 1 - -// registers -#define PIO_REG_DATA 0 -#define PIO_REG_CTRL 2 - -#define PIO_REG_DATA_A 0 // (PIO_A | PIO_REG_PORT) -#define PIO_REG_DATA_B 1 // (PIO_B | PIO_REG_PORT) -#define PIO_REG_CTRL_A 2 // (PIO_A | PIO_REG_CTRL) -#define PIO_REG_CTRL_B 3 // (PIO_B | PIO_REG_CTRL) - -#define PIO_MODE_BYTE_OUT 0 // mode 0 -#define PIO_MODE_BYTE_IN 1 // mode 1 -#define PIO_MODE_BYTE_BI 2 // mode 2 -#define PIO_MODE_BIT_IO 3 // mode 3 - -#define PIO_INT_DISABLE 0 -#define PIO_INT_ACTIVE_HIGH 2 -#define PIO_INT_AND_MODE 4 -#define PIO_INT_ENABLE 8 - -/* functions used internally to interface with the device */ -inline void _pio_write(uint8_t reg, uint8_t data); -inline uint8_t _pio_read(uint8_t reg); - -/* 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); -void pio_set_interrupts_mask(int port, int control, uint8_t mask); - -// uint8_t pio_read_data(int port); -uint8_t pio_read(int port); -void pio_write(int port, uint8_t data); - -inline int pio_read_pin(int port, uint8_t pin); -inline void pio_write_pin(int port, uint8_t pin); - -// TODO: implement mode (in/out/both) and interrupt vector - -#endif /* __PIO_H__ */ diff --git a/sw/z80/drivers/include/usart.h b/sw/z80/drivers/include/usart.h deleted file mode 100644 index 05aeb4a..0000000 --- a/sw/z80/drivers/include/usart.h +++ /dev/null @@ -1,158 +0,0 @@ -#ifndef __USART_H__ -#define __USART_H__ - -#include "addresses.h" - -#include <stdint.h> -#include <string.h> - -// baudrate clock divisors -// values from TL16C550C datasheet (table 9 for 1.8432 MHz crystal) -#define USART_BAUDRATE_50 2304 -#define USART_BAUDRATE_75 1536 -#define USART_BAUDRATE_110 1047 -#define USART_BAUDRATE_134_5 857 -#define USART_BAUDRATE_150 768 -#define USART_BAUDRATE_300 384 -#define USART_BAUDRATE_600 192 -#define USART_BAUDRATE_1200 96 -#define USART_BAUDRATE_1800 64 -#define USART_BAUDRATE_2000 58 -#define USART_BAUDRATE_2400 48 -#define USART_BAUDRATE_3600 32 -#define USART_BAUDRATE_4800 24 -#define USART_BAUDRATE_7200 16 -#define USART_BAUDRATE_9600 12 -#define USART_BAUDRATE_19200 6 -#define USART_BAUDRATE_38400 3 -#define USART_BAUDRATE_56000 3 - -// parity -#define USART_PARITY_NONE 0 -#define USART_PARITY_EVEN 1 -#define USART_PARITY_ODD 2 - -// stop bits -#define USART_STOP_BITS_1 10 -#define USART_STOP_BITS_15 15 -#define USART_STOP_BITS_2 20 - -// word lenght -#define USART_WORD_LENGTH_5 0 -#define USART_WORD_LENGTH_6 1 -#define USART_WORD_LENGTH_7 2 -#define USART_WORD_LENGTH_8 3 - -// autoflow -#define USART_AUTOFLOW_ALL 3 -#define USART_AUTOFLOW_CTS 2 -#define USART_AUTOFLOW_OFF 0 - -typedef unsigned int uint; -typedef volatile uint8_t register_t; - -/* stuctures for usart registers */ -struct IER -{ - volatile uint received_data_interrupt :1; - volatile uint transmitter_empty_interrupt :1; - volatile uint receiver_line_status_interrupt :1; - volatile uint modem_status_interrupt :1; - volatile uint reserved :4; -}; - -struct IIR -{ - volatile uint interrupt_pending :1; - volatile uint interrupt_id :3; - volatile uint reserved :2; - volatile uint fifos :2; -}; - -struct FCR -{ - volatile uint fifo_enable :1; - volatile uint receiver_fifo_rst :1; - volatile uint trasmitter_fifo_rst :1; - volatile uint dma_mode_select :1; - volatile uint reserved :1; - volatile uint receiver_trigger :2; -}; - -struct LCR -{ - volatile uint word_length :2; - volatile uint stop_bits :1; - volatile uint parity :1; - volatile uint even_parity :1; - volatile uint stick_parity :1; - volatile uint break_control :1; - volatile uint divisor_latch_access :1; -}; - -struct MCR -{ - volatile uint data_terminal_ready :1; - volatile uint request_to_send :1; - volatile uint out1; - volatile uint out2; - volatile uint loop; - volatile uint autoflow :1; - volatile uint reserved :2; -}; - -struct LSR -{ - volatile uint data_ready :1; - volatile uint overrun_error :1; - volatile uint parity_error :1; - volatile uint framing_error :1; - volatile uint break_interrupt :1; - volatile uint transmitter_holder_empty :1; - volatile uint transmitter_empty :1; - volatile uint fifo_recv_error :1; -}; - -struct MSR -{ - volatile uint delta_cts :1; - volatile uint delta_data_set_ready :1; - volatile uint trailing_edge_ring_indicator :1; - volatile uint delta_data_carrier_detect :1; - volatile uint clear_to_send :1; - volatile uint data_set_ready :1; - volatile uint ring_indicator :1; - volatile uint data_carrier_detect :1; -}; - -/* this structure is only for internal use */ -struct _usart_device -{ - register_t buffer; // also used as LSB for divisor latch - struct IER IER; - struct IIR IIR; - struct FCR FCR; - struct LCR LCR; - struct MCR MCR; - struct LSR LSR; - struct MSR MSR; - register_t scratch; -}; - - -// setup functions (wrappers) -void usart_set_baudrate(uint16_t baudrate); -void usart_set_parity(int mode); -void usart_set_stop_bits(int count); -void usart_set_word_length(int length); -void usart_set_autoflow(int mode); - -inline void usart_init(uint16_t baudrate, int parity, int stop_bits); - -void usart_transmit(uint8_t data); -uint8_t usart_receive(); - -int usart_write(uint8_t *data, size_t size); -int usart_read(uint8_t *buffer, size_t count); - -#endif // __USART__H__ diff --git a/sw/z80/drivers/makefile b/sw/z80/drivers/makefile deleted file mode 100644 index 65ded58..0000000 --- a/sw/z80/drivers/makefile +++ /dev/null @@ -1,24 +0,0 @@ -# Drivers library - -LIB := build/drivers.a -SOURCES := $(wildcard *.c) -OBJECTS := $(patsubst %.c,build/%.rel,$(SOURCES)) - -CC := sdcc -AR := sdar -CFLAGS := -mz80 -Iinclude -I../arch/include -DDEBUG - -.PHONY: dirs rebuild clean -$(LIB): $(OBJECTS) - $(AR) vrcs $@ $(OBJECTS) - -$(OBJECTS): build/%.rel: %.c $(SOURCES) dirs - $(CC) $(CFLAGS) -c $< -o $@ - -rebuild: clean $(LIB) - -dirs: - mkdir -p build - -clean: - - rm -rd build diff --git a/sw/z80/drivers/pio.c b/sw/z80/drivers/pio.c deleted file mode 100644 index f396e43..0000000 --- a/sw/z80/drivers/pio.c +++ /dev/null @@ -1,84 +0,0 @@ -#include "pio.h" - -#ifdef PIO_ASM_INTERFACE -// TODO: set inline -void _pio_write(uint8_t reg, uint8_t data) -{ - __asm - ;; pop function arguments data in h, reg in a (l) - pop hl - ld a, l - ;; add ADDR_DEV_PIO to get the device address - add a, #ADDR_DEV_PIO - ld c, a - ;; load data - out (c), h - __endasm; -} - -inline uint8_t _pio_read(uint8_t reg) -{ - // TODO: check "dec sp" - __asm - ;; pop function argument - dec sp - pop hl - ld a, l - ;; add ADDR_DEV_PIO to get the device address - add a, #ADDR_DEV_PIO - ld c, a - ;; read data - in l, (c) - ret - __endasm; -} - -#else - -inline void _pio_write(uint8_t reg, uint8_t data) -{ - *((uint8_t *) (ADDR_DEV_PIO + reg)) = data; -} - -inline uint8_t _pio_read(uint8_t reg) -{ - return *((uint8_t *) (ADDR_DEV_PIO + reg)); -} - -#endif - -void pio_set_mode(int port, int mode, uint8_t io) -{ - // 0x0F is a control sequence to set mode - _pio_write((PIO_REG_CTRL + port), ((mode << 6) | 0x0F)); - - // this mode requires an additional argument that sets - // a mode for each pin - if (mode == PIO_MODE_BIT_IO) { - _pio_write((PIO_REG_CTRL + port), io); - } -} - -void pio_set_interrupts(int port, int control) -{ - // 0x07 is a control sequence to set interrupts - _pio_write((PIO_REG_CTRL + port), (control<<4 | 0x07)); -} - -void pio_set_interrupts_mask(int port, int control, uint8_t mask) -{ - // 0x17 is a control sequence to set interrupts - // AND interpret the next byte as a bitmask - _pio_write((PIO_REG_CTRL + port),(control | 0x97)); - _pio_write((PIO_REG_CTRL + port), mask); -} - -uint8_t pio_read(int port) -{ - return _pio_read((PIO_REG_DATA + port)); -} - -void pio_write(int port, uint8_t data) -{ - _pio_write((PIO_REG_DATA + port), data); -} diff --git a/sw/z80/drivers/usart.c b/sw/z80/drivers/usart.c deleted file mode 100644 index 9a5ee38..0000000 --- a/sw/z80/drivers/usart.c +++ /dev/null @@ -1,91 +0,0 @@ -#include "usart.h" - -static volatile struct _usart_device *_usart = ((struct _usart_device *) ADDR_DEV_USART); - -void usart_set_baudrate(uint16_t baudrate) -{ - // enable latch access - _usart->LCR.divisor_latch_access = 1; - _usart->buffer = 0x00FF & baudrate; // LSBs - memcpy(&_usart->IER, &(baudrate >>8), 1); - // _usart->IER = 0x00FF & (baudrate >> 8); // MSBs - _usart->LCR.divisor_latch_access = 0; -} - -void usart_set_parity(int mode) -{ - if (mode == USART_PARITY_EVEN) { - _usart->LCR.even_parity = 1; - } - else if (mode == USART_PARITY_ODD) { - _usart->LCR.even_parity = 0; - } - - _usart->LCR.parity = (mode == USART_PARITY_NONE) ? 0 : 1; -} - -void usart_set_stop_bits(int count) -{ - _usart->LCR.stop_bits = (count == USART_STOP_BITS_1) ? 0 : 1; -} - -void usart_word_length(int length) -{ - _usart->LCR.word_length = length; -} - -void usart_set_autoflow(int mode) -{ - _usart->MCR.autoflow = (mode == USART_AUTOFLOW_OFF) ? 0 : 1; - _usart->MCR.data_terminal_ready = (mode == USART_AUTOFLOW_ALL); -} - -inline void usart_init(uint16_t baudrate, int parity, int stop_bits) -{ - usart_set_baudrate(baudrate); - usart_set_parity(parity); - usart_set_stop_bits(stop_bits); - usart_set_autoflow(USART_AUTOFLOW_OFF); -} - -void usart_transmit(uint8_t data) -{ - _usart->buffer = data; - while (_usart->LSR.transmitter_holder_empty == 0); // wait -} - -uint8_t usart_receive() -{ - return _usart->buffer; -} - -int usart_write(uint8_t *data, size_t size) -{ - uint8_t *dp = data; - - while (size--) { - _usart->buffer = *(dp++); - while (_usart->LSR.transmitter_empty); - } - - // TODO: do something that actually counts for sent bytes - return size; -} - -int usart_read(uint8_t *buffer, size_t count) -{ - uint8_t *bp = buffer; - size_t read_count = 0; - - while (count--) { - *(bp++) = _usart->buffer; - // check for errors - if (_usart->LSR.framing_error || _usart->LSR.parity_error) { - bp--; // delete last byte (?) - } else { - read_count++; - } - } - - return read_count; -} diff --git a/sw/z80/kernel/crt0.s b/sw/z80/kernel/crt0.s deleted file mode 100644 index 00c7da1..0000000 --- a/sw/z80/kernel/crt0.s +++ /dev/null @@ -1,103 +0,0 @@ -;-------------------------------------------------------------------------- -; 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 _kmain - - .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 _kmain - 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/kernel/fs/fd.c b/sw/z80/kernel/fs/fd.c deleted file mode 100644 index 96603ad..0000000 --- a/sw/z80/kernel/fs/fd.c +++ /dev/null @@ -1,255 +0,0 @@ -#include "fs/fd.h" -#include "fs/fdop.h" -#include "fs/fs.h" - -/* from fd.h */ -struct file_desc fd_table[FD_TABLE_SIZE]; -struct uint8_t fd_bmap[FD_TABLE_SIZE / 8]; - -/* File descriptors implementation */ - -int8_t open(const char *path, uint8_t flags) -{ - // TODO - return 0; -} - -size_t ls(int8_t fd, struct dirent *buf, uint8_t all) -{ - // TODO - return 0; -} - -size_t find(int8_t fd, struct dirent *buf, const char *name) -{ - // TODO - return 0; -} - -int8_t mkdir(int8_t fd, const char *name) -{ - // TODO - return 0; -} - -int8_t touch(int8_t fd, const char *name) -{ - // TODO - return 0; -} - -int8_t ln(int8_t fd, const char *name) -{ - // TODO - return 0; -} - -int8_t seek(int8_t fd, fsize_t pos) -{ - // TODO - return 0; -} - -size_t readline(int8_t fd, char *buf, char term) -{ - // TODO - return 0; -} - -int8_t print(int8_t fd, const char *str) -{ - // TODO - return 0; -} - -size_t read(int8_t fd, void *buf, size_t n) -{ - // TODO - return 0; -} - -int8_t write(int8_t fd, const void *buf, size_t n) -{ - // TODO - return 0; -} - -void close(int8_t fd) -{ - // TODO - return 0; -} - -/* Set of file descriptors operations */ -/* Determines if to use the serial interface or the address space */ - -/* Address space section */ - -/* File functions */ - -size_t as_readline(inode_t inode, fsize_t seek, char *buf, char term) -{ - // TODO - return 0; -} - -size_t as_print(inode_t inode, fsize_t seek, const char *str) -{ - // TODO - return 0; -} - -size_t as_append(inode_t inode, fsize_t *seek_ptr, const char *str) -{ - // TODO - return 0; -} - -size_t as_read(inode_t inode, fsize_t seek, void *buf, size_t n) -{ - // TODO - return 0; -} - -size_t as_write(inode_t inode, fsize_t seek, const void *buf, size_t n) -{ - // TODO - return 0; -} - -size_t as_bin_append(inode_t inode, fsize_t *seek_ptr, const void *buf, size_t -n) -{ - // TODO - return 0; -} - -/* Directory functions */ - -size_t as_ls(inode_t inode, struct dirent *buf, uint8_t all) -{ - // TODO - return 0; -} - -size_t as_find(inode_t inode, struct dirent *buf, const char *name) -{ - // TODO - return 0; -} - -int8_t as_mkdir(inode_t inode, const char *name) -{ - // TODO - return 0; -} - -int8_t as_rmdir(inode_t inode, const char *name) -{ - // TODO - return 0; -} - -int8_t as_touch(inode_t inode, const char *name) -{ - // TODO - return 0; -} - -int8_t as_rm(inode_t inode, const char *name) -{ - // TODO - return 0; -} - -int8_t as_ln(inode_t inode, const char *path, const char *name) -{ - // TODO - return 0; -} - -/* Serial Space section */ -/* Warning, it doesn't switch to the right driver */ - -/* File functions */ - -size_t ss_readline(inode_t inode, fsize_t seek, char *buf, char term) -{ - // TODO - return 0; -} - -size_t ss_print(inode_t inode, fsize_t seek, const char *str) -{ - // TODO - return 0; -} - -size_t ss_append(inode_t inode, fsize_t *seek_ptr, const char *str) -{ - // TODO - return 0; -} - -size_t ss_read(inode_t inode, fsize_t seek, void *buf, size_t n) -{ - // TODO - return 0; -} - -size_t ss_write(inode_t inode, fsize_t seek, const void *buf, size_t n) -{ - // TODO - return 0; -} - -size_t ss_bin_append(inode_t inode, fsize_t *seek_ptr, const void *buf, size_t -n) -{ - // TODO - return 0; -} - -/* Directory functions */ - -size_t ss_ls(inode_t inode, struct dirent *buf, uint8_t all) -{ - // TODO - return 0; -} - -size_t ss_find(inode_t inode, struct dirent *buf, const char *name) -{ - // TODO - return 0; -} - -int8_t ss_mkdir(inode_t inode, const char *name) -{ - // TODO - return 0; -} - -int8_t ss_rmdir(inode_t inode, const char *name) -{ - // TODO - return 0; -} - -int8_t ss_touch(inode_t inode, const char *name) -{ - // TODO - return 0; -} - -int8_t ss_rm(inode_t inode, const char *name) -{ - // TODO - return 0; -} - -int8_t ss_ln(inode_t, const char *path, const char *name) -{ - // TODO - return 0; -} diff --git a/sw/z80/kernel/fs/fs.c b/sw/z80/kernel/fs/fs.c deleted file mode 100644 index 584f934..0000000 --- a/sw/z80/kernel/fs/fs.c +++ /dev/null @@ -1,236 +0,0 @@ -#include "fs/fs.h" -#include "fs/users.h" -#include "fs/dev.h" - -/* from users.h */ -struct fs_user c_user; - -/* from inode.h */ -inode_t c_inode; - -struct fs_dev devices[FS_MOUNT_LIMIT]; - -/* filesystem basic implementation */ - -devsize_t fs_block(blk_t block) -{ - // TODO - return 0; -} - -devsize_t fs_inode(struct fs_inode *buf) -{ - struct fs_superblock * sb; - devsize_t seek; - - if (FS_USE_ROM(c_inode)) - { - seek = FS_ROM_SPACE; - sb = (struct fs_superblock*) seek; - - } else { - - seek = 0; - - if (c_inode.dev > 0x7) - panic("Invalid device"); // TODO, still to implement - - sb = &devices[c_inode.dev].superblock; - } - - if (c_inode.inode >= sb->imap_size) - { - // TODO, set errno - return 0; // inode doesn't exist - } - - seek += sizeof(struct fs_superblock) + - sizeof(struct fs_inode) * c_inode.inode; - - if (FS_USE_ROM(c_inode)) - *buf = *(struct fs_inode*)seek; - else - { - /* set sio port */ - sio_port = devices[c_inode.dev].port_no; - sio_seek = seek; - - if (sio_read((void *)buf, INODE_META_SIZE) < INODE_META_SIZE) - { - // TODO, set errno - return 0; // cannot read to device - } - } - - return seek + INODE_META_SIZE; -} - -/* from fd.h */ -int8_t __fd_new() -{ - int8_t fd; - for (int8_t = 0; i < FD_TABLE_SIZE / 8; i++) - { - for (uint8_t bit = 0x80, j = 0; bit > 0; bit >>= 1, j++) - { - if (!(bit & fd_bmap[i])) - return i * 8 + j; - } - } - - return -1; -} - -/* from fd.h */ -int8_t __open_c_inode(uint8_t flags) -{ - /* read meta data */ - struct fs_inode inode; - - /* init file_desc buffer */ - struct file_desc desc = {c_inode, 0}; - - desc.begin = fs_inode(&inode); - - /* bind operations */ - - if (flags & OPEN_DIR) - { - /* dir handler */ - - if (inode.type == INODE_TYPE_DIR) - { - /* bind dir functions */ - if (FS_USE_ROM(c_inode)) - /* bind address space functions */ - FD_BIND_AS_DIR(desc.opers) - else - /* bind serial space functions */ - FD_BIND_SS_DIR(desc.opers) - - } else { - - // TODO, set errno - return -1; // not a directory - } - - } else if (flags & OPEN_LINK) { - - /* link handler */ - - if (inode.type == INODE_TYPE_LINK) - { - if (FS_USE_ROM(c_inode)) - FD_BIND_AS_FILE(desc.opers, flags) - else - FD_BIND_SS_FILE(desc.opers, flags) - - if (flags & OPEN_ERASE) - /* empty file content */ - __inode_empty(desc.begin); - - } else { - - // TODO, set errno - return -1; // not a link - } - - } else { - - /* file */ - - if (inode.type == INODE_TYPE_FILE) - ; // do nothing - else if (inode.type == INODE_TYPE_SPECIAL) { - - // TODO, bind special callbacks - - } else { - - // TODO, set errno - return -1; - } - - /* bind operations */ - - if (FS_USE_ROM(c_inode)) - { - if (flags & OPEN_BIN) - FD_BIND_AS_BINFILE(desc.opers, flags) - else - FD_BIND_AS_FILE(desc.opers, flags) - - } else { - - if (flags & OPEN_BIN) - FD_BIND_SS_BINFILE(desc.opers, flags) - else - FD_BIND_SS_FILE(desc.opers, flags) - } - } - - /* find a free fd space */ - - int8_t fd = __fd_new(); - - if (fd < 0) - { - // TODO, set errno, fd not available - - } else - fd_table[fd] = desc; // copy buffer into the table - - return fd; -} - -inode_t fs_rec_path(const char *path); - -inode_t fs_parse_path(const char *path) -{ - inode_t ino, cwd = c_inode; - - switch (path[0]) - { - case '0': - FS_INODE_NULL(ino) - return ino; - - case '/': - FS_INODE_ROOT(ino) - c_inode = ino; // set cwd to root - path++; - break; - - case '~': - - if (path[1] = '/') - { - c_inode.dev = FS_DEV_ROM; - c_inode.inode = c_user.home; // set cwd to home - path += 2; - } - - break; - } - - ino = fs_rec_path(path); - c_inode = cwd; - return ino; -} - -inode_t fs_rec_path(const char *path) -{ - devsize_t inode = fs_inode(c_inode.inode); - inode_t rel; - - if (!inode) // if not exists - { - FS_INODE_NULL(rel) - return rel; - } - - // TODO, check if dir or file - // TODO, if dir, find name - // TODO, set fs_cwd to new inode - // TODO, recall fs_rec_path -} diff --git a/sw/z80/kernel/include/devices.h b/sw/z80/kernel/include/devices.h deleted file mode 100644 index a846f9b..0000000 --- a/sw/z80/kernel/include/devices.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef __DEVICES_H__ -#define __DEVICES_H__ - -#define ADDR_DEV_ROM_L 0x0000 -#define ADDR_DEV_ROM_H 0x2000 - -#define ADDR_DEV_USART 0x4000 -#define ADDR_DEV_CTC 0x4100 -#define ADDR_DEV_PIO 0x4200 - -#define ADDR_DEV_MMU - -#define ADDR_DEV_RAM 0x8000 - -#endif diff --git a/sw/z80/kernel/include/errno.h b/sw/z80/kernel/include/errno.h deleted file mode 100644 index 7632269..0000000 --- a/sw/z80/kernel/include/errno.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef ERRNO_H -#define ERRNO_H - -extern int errno; - -#define EPERM 1 /* Operation not permitted */ -#define ENOENT 2 /* No such file or directory */ -#define ESRCH 3 /* No such process */ -#define EINTR 4 /* Interrupted system call */ -#define EIO 5 /* Input/output error */ -#define ENXIO 6 /* Device not configured */ -#define E2BIG 7 /* Argument list too long */ -#define ENOEXEC 8 /* Exec format error */ -#define EBADF 9 /* Bad file descriptor */ -#define ECHILD 10 /* No child processes */ -#define EDEADLK 11 /* Resource deadlock avoided */ - -#define ENOMEM 12 /* Cannot allocate memory */ -#define EACCES 13 /* Permission denied */ -#define EFAULT 14 /* Bad address */ - -#define ENOTBLK 15 /* Block device required */ -#define EBUSY 16 /* Device busy */ -#define EEXIST 17 /* File exists */ - -#define EXDEV 18 /* Cross-device link */ -#define ENODEV 19 /* Operation not supported by device */ -#define ENOTDIR 20 /* Not a directory */ -#define EISDIR 21 /* Is a directory */ -#define EINVAL 22 /* Invalid argument */ -#define ENFILE 23 /* Too many open files in system */ -#define EMFILE 24 /* Too many open files */ -#define ENOTTY 25 /* Inappropriate ioctl for device */ - -#endif diff --git a/sw/z80/kernel/include/fs/dev.h b/sw/z80/kernel/include/fs/dev.h deleted file mode 100644 index 8e550f3..0000000 --- a/sw/z80/kernel/include/fs/dev.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef DEV_H -#define DEV_H - -#include "types.h" - -#define FS_MOUNT_LIMIT 16 - -struct fs_superblock -{ - uint8_t magic; // identifier - - size_t blk_size; // size of a single block - size_t imap_size; // quantity of inodes - size_t dmap_size; // quantity of blocks -}; - -struct fs_dev -{ - uint enabled :1; // in use - uint port_no :3; // serial port number - uint :4; - inode_t inode; // dir mounted - struct fs_superblock superblock; // block informations -}; - -/* list of devices */ -extern struct fs_dev devices[FS_MOUNT_LIMIT]; - -#endif diff --git a/sw/z80/kernel/include/fs/dirent.h b/sw/z80/kernel/include/fs/dirent.h deleted file mode 100644 index 2fd224a..0000000 --- a/sw/z80/kernel/include/fs/dirent.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef __DIRENT_H__ -#define __DIRENT_H__ - -#include "types.h" - -struct dirent -{ - ino_t inode; // inode referred - uint8_t name_size; // size of the name - char name[]; // name of the referred inode -}; - -/* if inode is FS_INO_NULL, then the dirent is a memory leak */ -/* Warning: dirent leaks are generated by rm or rmdir operations */ -/* Filesystem must be periodically checked and cleaned */ - -#endif // __DIRENT_H__ diff --git a/sw/z80/kernel/include/fs/fd.h b/sw/z80/kernel/include/fs/fd.h deleted file mode 100644 index d2fea2a..0000000 --- a/sw/z80/kernel/include/fs/fd.h +++ /dev/null @@ -1,102 +0,0 @@ -#ifndef __FD_H__ -#define __FD_H__ - -#include "types.h" - -#define FD_MAX 32 - -#define OPEN_READ 0x1 -#define OPEN_WRITE 0x2 -#define OPEN_BIN 0x4 -#define OPEN_APPEND 0x8 -#define OPEN_ERASE 0x10 -#define OPEN_DIR 0x20 -#define OPEN_LINK 0x40 - -#define LS_ALL 0x1 - -/* declare dirent, not include */ -#ifndef __DIRENT_H__ -struct dirent; -#endif - -/* set of operations callback for fd */ -struct fd_operations -{ - size_t (*readline)(inode_t, fsize_t, char *, char term); - size_t (*print)(inode_t, fsize_t, const char *); - size_t (*append)(inode_t, fsize_t*, const char *); - - size_t (*read)(inode_t, fsize_t, void *, size_t); - size_t (*write)(inode_t, fsize_t, const void *, size_t); - size_t (*bin_append)(inode_t, fsize_t*, const void *, size_t); - - size_t (*ls)(inode_t, struct dirent *, uint8_t); - size_t (*find)(inode_t, struct dirent *, const char *); - int8_t (*mkdir)(inode_t, const char *); - int8_t (*rmdir)(inode_t, const char *); - int8_t (*touch)(inode_t, const char *); - int8_t (*rm)(inode_t, const char *); - int8_t (*ln)(inode_t, const char *, const char *); - - int8_t (*special)(inode_t, void *, size_t); -}; - -/* file descriptor */ -struct file_desc -{ - inode_t inode; // inode pointed - fsize_t seek; // virtual seek - devsize_t begin; // beginning of blocks - struct fd_operations opers; // bound operations -}; - -/* bitmap of used file descriptors */ -extern struct uint8_t fd_bmap[FD_TABLE_SIZE / 8]; - -/* table of file descriptors */ -extern struct file_desc fd_table[FD_TABLE_SIZE]; - -/* returns a free file descriptor */ -int8_t __fd_new(); - -/* opens a file streaming of the cwd */ -int8_t __open_c_inode(uint8_t flags); - -/* opens a file streaming by a path */ -int8_t open(const char *path, uint8_t flags); - -/* list content of directory */ -size_t ls(int8_t fd, struct dirent *buf, uint8_t all); - -/* find name through the directory entries */ -size_t find(int8_t fd, struct dirent *buf, const char *name); - -/* creates a new directory inside fd with the specified name */ -int8_t mkdir(int8_t fd, const char *name); - -/* creates a new file inside fd with the specified name */ -int8_t touch(int8_t fd, const char *name); - -/* creates a new symlink inside fd with the specified name */ -int8_t ln(int8_t fd, const char *name); - -/* change virtual seek position of the fd */ -int8_t seek(int8_t fd, fsize_t pos); - -/* reads a string from the fd until the terminator is reached */ -size_t readline(int8_t fd, char *buf, char term); - -/* writes a string into the fd */ -int8_t print(int8_t fd, const char *str); - -/* reads n bytes from the fd */ -size_t read(int8_t fd, void *buf, size_t n); - -/* writes n bytes into the fd */ -int8_t write(int8_t fd, const void *buf, size_t n); - -/* frees fd space */ -void close(int8_t fd); - -#endif // __FD_H__ diff --git a/sw/z80/kernel/include/fs/fdop.h b/sw/z80/kernel/include/fs/fdop.h deleted file mode 100644 index d4b1b77..0000000 --- a/sw/z80/kernel/include/fs/fdop.h +++ /dev/null @@ -1,140 +0,0 @@ -#ifndef __FDOP_H__ -#define __FDOP_H__ - -#include "types.h" - -#ifndef __DIRENT_H__ -struct dirent; -#endif - -/* macro for direct binding */ - -#define FD_BIND_AS_DIR(oper) { \ - oper.ls = &as_ls; \ - oper.find = &as_find; \ - oper.mkdir = &as_mkdir; \ - oper.rmdir = &as_rmdir; \ - oper.touch = &as_touch; \ - oper.rm = &as_rm; \ - oper.ln = &as_ln; \ - } - -#define FD_BIND_SS_DIR(oper) { \ - oper.ls = &ss_ls; \ - oper.find = &ss_find; \ - oper.mkdir = &ss_mkdir; \ - oper.rmdir = &ss_rmdir; \ - oper.touch = &ss_touch; \ - oper.rm = &ss_rm; \ - oper.ln = &ss_ln; \ - } - -#define FD_BIND_AS_FILE(opers, flags) { \ - if (flags & OPEN_READ) \ - opers.readline = as_readline; \ - if (flags & OPEN_APPEND) \ - opers.append = as_append; \ - else if (flags & OPEN_WRITE) \ - opers.print = as_print; \ - } - -#define FD_BIND_SS_FILE(opers, flags) { \ - if (flags & OPEN_READ) \ - opers.readline = ss_readline; \ - if (flags & OPEN_APPEND) \ - opers.append = ss_append; \ - else if (flags & OPEN_WRITE) \ - opers.print = ss_print; \ - } - -#define FD_BIND_AS_BINFILE(opers, flags) { \ - if (flags & OPEN_READ) \ - opers.read = as_read; \ - if (flags & OPEN_APPEND) \ - opers.bin_append = as_bin_append; \ - else if (flags & OPEN_WRITE) \ - opers.write = as_write; \ - } - -#define FD_BIND_SS_BINFILE(opers, flags) { \ - if (flags & OPEN_READ) \ - opers.read = ss_read; \ - if (flags & OPEN_APPEND) \ - opers.bin_append = ss_bin_append; \ - else if (flags & OPEN_WRITE) \ - opers.write = ss_write; \ - } - -/* Set of file descriptors operations */ -/* Determines if to use the serial interface or the address space */ - -/* Address space section */ - -/* File functions */ - -size_t as_readline(inode_t inode, fsize_t seek, char *buf, char term); - -size_t as_print(inode_t inode, fsize_t seek, const char *str); - -size_t as_append(inode_t inode, fsize_t *seek_ptr, const char *str); - - -size_t as_read(inode_t inode, fsize_t seek, void *buf, size_t n); - -size_t as_write(inode_t inode, fsize_t seek, const void *buf, size_t n); - -size_t as_bin_append(inode_t inode, fsize_t *seek_ptr, const void *buf, size_t -n); - -/* Directory functions */ - -size_t as_ls(inode_t inode, struct dirent *buf, uint8_t all); - -size_t as_find(inode_t inode, struct dirent *buf, const char *name); - -int8_t as_mkdir(inode_t inode, const char *name); - -int8_t as_rmdir(inode_t inode, const char *name); - -int8_t as_touch(inode_t inode, const char *name); - -int8_t as_rm(inode_t inode, const char *name); - -int8_t as_ln(inode_t inode, const char *path, const char *name); - -/* Serial Space section */ -/* Warning, it doesn't switch to the right driver */ - -/* File functions */ - -size_t ss_readline(inode_t inode, fsize_t seek, char *buf, char term); - -size_t ss_print(inode_t inode, fsize_t seek, const char *str); - -size_t ss_append(inode_t inode, fsize_t *seek_ptr, const char *str); - - -size_t ss_read(inode_t inode, fsize_t seek, void *buf, size_t n); - -size_t ss_write(inode_t inode, fsize_t seek, const void *buf, size_t n); - -size_t ss_bin_append(inode_t inode, fsize_t *seek_ptr, const void *buf, size_t -n); - -/* Directory functions */ - -size_t ss_ls(inode_t inode, struct dirent *buf, uint8_t all); - -size_t ss_find(inode_t inode, struct dirent *buf, const char *name); - -int8_t ss_mkdir(inode_t inode, const char *name); - -int8_t ss_rmdir(inode_t inode, const char *name); - -int8_t ss_touch(inode_t inode, const char *name); - -int8_t ss_rm(inode_t inode, const char *name); - -int8_t ss_ln(inode_t, const char *path, const char *name); - -#endif // __FDOP_H__ diff --git a/sw/z80/kernel/include/fs/fs.h b/sw/z80/kernel/include/fs/fs.h deleted file mode 100644 index ad20adb..0000000 --- a/sw/z80/kernel/include/fs/fs.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef __FS_H__ -#define __FS_H__ - -#include "types.h" - -#define FS_OFFSET 0x1000 - -#define FS_BLOCKS_SIZE 512 -#define FS_BLOCKS_N 8 -#define FS_BLOCKS_IND 6 - -#define INODE_TYPE_FILE 0x0 -#define INODE_TYPE_DIR 0x1 -#define INODE_TYPE_SLINK 0x2 -#define INODE_TYPE_SPECIAL 0x3 - -#define INODE_META_SIZE 8 - -/* inode basic structure */ -struct fs_inode -{ - /* inode meta data */ - - uint mode :3; // chmod - uint uid :3; // chown - uint type :2; // file, dir, sym-link, special - - time_t ctime; // creation time - - uint24_t size; // inode size - - /* data storage informations */ - /* it doesn't allocate memory, virtual size FS_BLOCKS_N */ - blk_t blocks[]; -}; - -#define FS_DEV_ROM 0x7f /* 01111111 */ -#define FS_DEV_NULL 0x80 /* 10000000 */ - -#define FS_ROM_SPACE 0x2000 // second rom - -#define FS_INO_ROOT 0x0 // first inode - -#define FS_INODE_ROOT(inode) {inode.dev = 0xff; inode.inode = 0x0} -#define FS_INODE_NULL(inode) {inode.dev = 0x80; inode.inode = 0x0} - -#define FS_USE_ROM(inode) {inode.dev == 0x7f} - -/* get block seek in current device */ -devsize_t fs_block(blk_t block); - -/* get common inode seek in current device */ -/* c_inode must be set first */ -/* returns seek at the beginning of blocks field */ -devsize_t fs_inode(struct fs_inode *buf); - -/* common inode for syscalls */ -extern inode_t c_inode; - -/* parse a path, absolute or relative to c_inode */ -inode_t fs_parse_path(const char *path); - -#endif // __FS_H__ diff --git a/sw/z80/kernel/include/fs/iter.h b/sw/z80/kernel/include/fs/iter.h deleted file mode 100644 index 41f011d..0000000 --- a/sw/z80/kernel/include/fs/iter.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef __ITER_H__ -#define __ITER_H__ - -struct inode_iter -{ - devsize_t dev_seek; /* seek position in the volume */ - devsize_t blk_end; /* end of the block */ - - int16_t blk_index; /* index of the block */ - - int8_t blk_level; /* recursion level, indirect blocks */ - - fsize_t fseek; /* virtual seek in the file */ - fsize_t size; /* file size */ -}; - -#endif // __ITER_H__ diff --git a/sw/z80/kernel/include/fs/users.h b/sw/z80/kernel/include/fs/users.h deleted file mode 100644 index 83980e5..0000000 --- a/sw/z80/kernel/include/fs/users.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef USERS_H -#define USERS_H - -#include "types.h" - -#define USERS_MAX 8 -#define USER_ROOT 0 - -/* current user in use */ -extern struct fs_user c_user; - -struct fs_user -{ - char name[32]; - ino_t home; - uint8_t perm; // TODO, permissions -}; - -/* all users are in rom device */ - -#endif diff --git a/sw/z80/kernel/include/memory.h b/sw/z80/kernel/include/memory.h deleted file mode 100644 index 67c4b88..0000000 --- a/sw/z80/kernel/include/memory.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef __MEMORY_H__ -#define __MEMORY_H__ - -#include "types.h" -#include "devices.h" - -/* maximum number of pages on the system */ -#define PAGES_MAX_COUNT 32 -#define PAGE_SIZE 1000 - -/* in our system there are only 16 pages since only 64KB can be addressed - * to optimize the memory management in ROM and RAM only pages from this set - * shall be used - */ -// ROM -#define ADDR_PAGE_0 0x0000 -#define ADDR_PAGE_1 0x1000 -#define ADDR_PAGE_2 0x2000 -#define ADDR_PAGE_3 0x3000 -// IOSPACE -#define ADDR_PAGE_4 0x4000 -#define ADDR_PAGE_5 0x5000 -#define ADDR_PAGE_6 0x6000 -#define ADDR_PAGE_7 0x7000 -// RAM -#define ADDR_PAGE_8 0x8000 -#define ADDR_PAGE_9 0x9000 -#define ADDR_PAGE_10 0xA000 -#define ADDR_PAGE_11 0xB000 -#define ADDR_PAGE_12 0xC000 -#define ADDR_PAGE_13 0xD000 -#define ADDR_PAGE_14 0xE000 -#define ADDR_PAGE_15 0xF000 - -#define ADDR_PAGE_FIRST ADDR_PAGE_8 -#define ADDR_PAGE_LAST ADDR_PAGE_15 - -struct page -{ - pid_t pid; // process owner of the page (0 if free) - uint16_t addr; // physical address -}; - -int mmu_write_table(void); - -int page_new(void); -int page_map(int page, int pid, uint16_t addr); -int page_unmap(int page); - -#endif // __MEMORY_H__ diff --git a/sw/z80/kernel/include/process.h b/sw/z80/kernel/include/process.h deleted file mode 100644 index 3b0c843..0000000 --- a/sw/z80/kernel/include/process.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef __PROCESS_H__ -#define __PROCESS_H__ - -#include "types.h" -#include "memory.h" - - /* maximum number of processes (i.e. pages in ram) - * since each program can use only one page in ram - */ -#define PROC_COUNT 2 - -/* the pid is defined with a single byte (pid_t is uint8_t), because of that - * there cannot be more than 255 processes open at the same time. this is a - * limitation but for our purposes is more than enough - */ -#define PID_COUNT_MAX 255 - -struct executable -{ - void *text; - size_t text_size; - void *bss; - size_t bss_size; -}; - -struct process -{ - uint blocked :1; // process is waiting for hardware or locked - uint running :1; // pid is used - uint pages; // number of pages used by the process - struct page page[4]; // pages used by the process -}; - -pid_t newpid(void); - -int fork(void); -int exec(char *path, char *args); -int spawn(char *path, char *args); - -pid_t getpid(void); -int kill(pid_t pid); - -#endif // __PROCESS_H__ diff --git a/sw/z80/kernel/include/sio.h b/sw/z80/kernel/include/sio.h deleted file mode 100644 index 276b99c..0000000 --- a/sw/z80/kernel/include/sio.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef __SIO_H__ -#define __SIO_H__ - -#include "types.h" - -#define SIO_PORT_0 0x0 -#define SIO_PORT_1 0x1 -#define SIO_PORT_2 0x2 -#define SIO_PORT_3 0x3 -#define SIO_PORT_4 0x4 -#define SIO_PORT_5 0x5 -#define SIO_PORT_6 0x6 -#define SIO_PORT_7 0x7 - -/* current port in use */ -extern uint8_t sio_port; - -/* current seek in the device */ -extern devsize_t sio_seek; - -struct dev_buffer -{ - // TODO, bytes needed to the device buffer interface -}; - -/* points to the buffers mapped in the I/O space */ -/* to be defined precisely in assembly */ -extern volatile struct dev_buffer sio_buffers[8]; - -/* initialize serial interface */ -void sio_init(); - -/* syscall: read one byte from the current device */ -uint8_t sio_recv(); -/* syscall: write one byte into the current device */ -void sio_send(uint8_t value); - -/* read n bytes from the current port */ -size_t sio_read(void *buffer, size_t n); -/* write n bytes into the current port */ -int8_t sio_write(const void *buffer, size_t n); - -#endif // __SIO_H__ diff --git a/sw/z80/kernel/include/stat.h b/sw/z80/kernel/include/stat.h deleted file mode 100644 index 44c0f63..0000000 --- a/sw/z80/kernel/include/stat.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __STAT_H__ -#define __STAT_H__ - -#include "types.h" - -struct stat -{ - inode_t inode; /* inode reference */ - - uint mode :3; /* mode */ - uint uid :3; /* owner id */ - uint type :2; /* file, dir or link */ - - devsize_t size; /* file size */ - - size_t blk_size; /* single block size */ - size_t blk_used; /* blocks used by the file */ - - time_t ctime; /* creation time */ -} - -struct stat * stat(const char *path, struct stat *buffer); - -#endif // __STAT_H__ diff --git a/sw/z80/kernel/include/types.h b/sw/z80/kernel/include/types.h deleted file mode 100644 index c6e620b..0000000 --- a/sw/z80/kernel/include/types.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef __TYPES_H__ -#define __TYPES_H__ - -/* only types from primitive types are defined in this file */ - -typedef volatile unsigned char register_t; - -typedef unsigned int uint; - -typedef char int8_t; -typedef unsigned char uint8_t; -typedef int int16_t; -typedef unsigned int uint16_t; -typedef long int int32_t; -typedef unsigned long int uint32_t; - -typedef uint16_t size_t; -typedef int16_t ssize_t; - -typedef uint8_t pid_t; -typedef uint16_t ino_t; - -typedef uint8_t dev_t; -typedef uint32_t devsize_t; -typedef uint8_t fd_t; -typedef uint16_t blk_t; -typedef uint8_t user_t; - -typedef struct { - uint8_t member[3]; - -} uint24_t; - -typedef uint32_t fsize_t; - -typedef struct -{ - dev_t dev; // device id, global in the fs - ino_t inode; // inode id relative to the volume - -} inode_t; - -typedef struct time_s -{ - struct - { - uint minutes :6; - uint hour :5; - - } time; - - struct - { - uint day :5; - uint month :4; - uint year :12; - - } date; - -} time_t; - -#endif diff --git a/sw/z80/kernel/kernel.c b/sw/z80/kernel/kernel.c deleted file mode 100644 index 3d5aeb6..0000000 --- a/sw/z80/kernel/kernel.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "types.h" -#include "usart.h" - -void kmain(void) -{ - usart_init(USART_BAUDRATE_9600, USART_PARITY_EVEN, USART_STOP_BITS_1); -} diff --git a/sw/z80/kernel/makefile b/sw/z80/kernel/makefile deleted file mode 100644 index be8eed4..0000000 --- a/sw/z80/kernel/makefile +++ /dev/null @@ -1,53 +0,0 @@ -#### -# source code settings -# -OSNAME := helvetiOS - -CSOURCES := $(wildcard *.c) \ - $(wildcard drivers/*.c) - -OBJECTS := $(patsubst %.c,build/%.rel,$(CSOURCES)) -HEXFILE := build/$(OSNAME).hex -BINARY := build/$(OSNAME).bin - -### -# compiler settings - -CC := sdcc - -CFLAGS := -mz80 \ - -I include \ - -I include/drivers \ - -I libc/include \ - --opt-code-size \ - -DDEBUG - -LDFLAGS := -mz80 --no-std-crt0 build/crt0.rel \ - --std-c89 -pedantic \ - --code-loc 0x0800 --data-loc 0x8000 - -.PHONY: dirs dis clean -all: $(BINARY) - -# build binary -$(BINARY): $(OBJECTS) dirs - $(CC) $(LDFLAGS) $(OBJECTS) -o $(HEXFILE) - makebin -s 16384 $(HEXFILE) $(BINARY) - -$(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs build/crt0.rel - @printf "\n" - $(CC) $(CFLAGS) -c $< -o $@ - -build/crt0.rel: crt0.s - sdasz80 -o $< - @mv crt0.rel build - -dirs: - mkdir -p build build/kernel build/libc build/kernel/drivers - -dis: $(BINARY) - dz80 -b -n $< - -clean: - - rm -rd build/* - - rm crt0.rel diff --git a/sw/z80/kernel/memory.c b/sw/z80/kernel/memory.c deleted file mode 100644 index 1b2cc76..0000000 --- a/sw/z80/kernel/memory.c +++ /dev/null @@ -1,94 +0,0 @@ -#include "memory.h" - -static struct page pages_table[PAGES_MAX_COUNT]; - -int mmu_write_table(void) -{ - int i; - - for (i = 0; i < PAGES_MAX_COUNT; i++) { - if (pages_table[i].pid != 0) { - // write to mmu table - } - } - - return 0; -} - -int page_new(void) -{ - int i, used; - uint16_t addr; - - for (addr = ADDR_PAGE_FIRST; addr < ADDR_PAGE_LAST; addr += PAGE_SIZE) { - used = 0; - - for (i = 0; i < PAGES_MAX_COUNT; i++) { - if (pages_table[i].addr == addr) { - used = 1; - break; - } - } - - if (!used) - return i; - } - - return -1; -} - -int page_map(int page, int pid, uint16_t addr) -{ - if (page >= PAGES_MAX_COUNT) - return -1; - - if (pages_table[page].pid != 0) - return -2; - - pages_table[page].addr = addr; - pages_table[page].pid = pid; - - return 0; -} - -int page_unmap(int page) -{ - if (page >= PAGES_MAX_COUNT) - return -1; - - if (pages_table[page].pid == 0) - return -2; - - pages_table[page].pid = 0; - pages_table[page].addr = 0; - return 0; -} - -/* k_malloc manager */ -/* -struct k_buf_entry k_buf_table[K_BUF_MAX_COUNT]; - -struct k_buf k_buffers[K_BUF_MAX_COUNT]; - -void * k_malloc() -{ - for (uint8_t i = 0; i < K_BUF_TABLE_COUNT; i++) - { - for (uint8_t bit = 0x80, j = 0; j < 8; bit >>= 1, j++) - { - if (bit & k_buf_table[i]) - { - k_buf_table[i] |= bit; - return &k_buffers[8 * i + j]; - } - } - } -} - -void k_free(void * ptr) -{ - uint8_t index = (ptr - &k_buffers[0]) / K_BUF_SIZE; - - if (index < K_BUF_MAX_COUNT) - k_buf_table[index / 8] ^= 0x80 >> index % 8; -}*/ diff --git a/sw/z80/kernel/process.c b/sw/z80/kernel/process.c deleted file mode 100644 index 7d8db89..0000000 --- a/sw/z80/kernel/process.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "process.h" - -static struct process proc_table[PID_COUNT_MAX]; -static struct process *current_proc; - -pid_t newpid(void) -{ - int i; - static pid_t last_pid = 0; - - for (i = 0; i < PID_COUNT_MAX; i++, last_pid++) { - if (last_pid == PID_COUNT_MAX) { - last_pid = 0; - continue; - } - - if (!proc_table[last_pid].running) - break; - } - - if (i >= PID_COUNT_MAX) - return 0; - - return last_pid; -} - -int fork(void) -{ - int i, p; - pid_t child_pid = newpid(); - - if (child_pid == 0) - return -1; - - - for (i = 0; i < current_proc->pages; i++) { - p = page_new(); - - if (p == -1) { - return -2; - } - - // TODO: use memcpy() - // SDCC does not allow assignemnts of structs - - // proc_table[child_pid].page[i] = p; - } -} - -int exec(char *path, char *args) -{ - -} - -int spawn(char *path, char *args) -{ - -} diff --git a/sw/z80/libc/include/stdint.h b/sw/z80/libc/include/stdint.h deleted file mode 100644 index 5e8caf3..0000000 --- a/sw/z80/libc/include/stdint.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __STDINT_H__ -#define __STDINT_H__ - -typedef unsigned int uint; - -typedef char int8_t; -typedef unsigned char uint8_t; -typedef int int16_t; -typedef unsigned int uint16_t; -typedef long int int32_t; -typedef unsigned long int uint32_t; - -#endif // __STDINT_H__
\ No newline at end of file diff --git a/sw/z80/libc/include/stdio.h b/sw/z80/libc/include/stdio.h deleted file mode 100644 index b31cdfd..0000000 --- a/sw/z80/libc/include/stdio.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __STDIO_H__ -#define __STDIO_H__ - -#include "types.h" - -extern uint8_t *stdout, stderr; - -void putc(char ch, uint8_t *buffer); -int printf(const char *fmt, ...); - -#endif diff --git a/sw/z80/libc/include/stdlib.h b/sw/z80/libc/include/stdlib.h deleted file mode 100644 index c69f573..0000000 --- a/sw/z80/libc/include/stdlib.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __STDLIB_H__ -#define __STDLIB_H__ - -#include "stdint.h" - - -#endif // __STDLIB_H__
\ No newline at end of file diff --git a/sw/z80/libc/include/string.h b/sw/z80/libc/include/string.h deleted file mode 100644 index 9c002e3..0000000 --- a/sw/z80/libc/include/string.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef __STRING_H__ -#define __STRING_H__ - -#include "types.h" - -void * memset(void *dest, const int8_t src, size_t n); - -void *memcpy(void *dest, const void *src, size_t n); - -int8_t memcmp(const void *s1, const void *s2, size_t n); - -#endif diff --git a/sw/z80/libc/include/sysio.h b/sw/z80/libc/include/sysio.h deleted file mode 100644 index 5d1f5ae..0000000 --- a/sw/z80/libc/include/sysio.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef __SYSIO_H__ -#define __SYSIO_H__ - -#include "types.h" - -/* -* Memory management -*/ - -void * malloc(uint16_t size); -uint16_t malloc_size(void * address); -void free(void * address); - -/* -* File management -*/ - -#define F_WRITE "w" -#define F_READ "r" -#define F_BIN_WRITE "wb" -#define F_BIN_READ "rb" - -#define F_READ_CODE 0x0 -#define F_WRITE_CODE 0x1 -#define F_BIN_READ_CODE 0x2 -#define F_BIN_WRITE_CODE 0x3 - -#define F_PERM_READ 0x0 -#define F_PERM_WRITE 0x1 -#define F_PERM_RW 0x2 - -struct file { - - const char * path; - unsigned int mode:4; - unsigned int permission:4; -}; - -#define FILE struct file - -FILE * fopen(const char * path, const char * mode); -uint8_t fclose(FILE * file); - -// TODO: other functions - -/* -* Processes management -*/ - -#define PID uint16_t - -void exit(); // exit this program -void interrupt(PID) - -#endif
\ No newline at end of file diff --git a/sw/z80/libc/include/types.h b/sw/z80/libc/include/types.h deleted file mode 100644 index a083bfe..0000000 --- a/sw/z80/libc/include/types.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef __TYPES_H__ -#define __TYPES_H__ - -/* only types from primitive types are defined in this file */ - -typedef volatile unsigned char register_t; - -typedef unsigned int uint; - -typedef char int8_t; -typedef unsigned char uint8_t; -typedef int int16_t; -typedef unsigned int uint16_t; -typedef long int int32_t; -typedef unsigned long int uint32_t; - -typedef uint16_t size_t; -typedef int16_t ssize_t; - -typedef uint8_t pid_t; -typedef uint16_t ino_t; - -typedef uint8_t dev_t; -typedef uint32_t devsize_t; -typedef uint8_t fd_t; -typedef uint16_t blk_t; -typedef uint8_t user_t; -typedef struct { - uint8_t member[3]; -} uint24_t; - -typedef uint32_t fsize_t; - -typedef struct -{ - dev_t dev; // device id, global in the fs - ino_t inode; // inode id relative to the volume - -} inode_t; - -typedef struct time_s -{ - struct - { - uint minutes :6; - uint hour :5; - - } time; - - struct - { - uint day :5; - uint month :4; - uint year :12; - - } date; - -} time_t; - -#endif diff --git a/sw/z80/libc/stdio.c b/sw/z80/libc/stdio.c deleted file mode 100644 index c2548d6..0000000 --- a/sw/z80/libc/stdio.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "stdio.h" - -void putc(char ch, uint8_t *buffer) -{ - *buffer = ch; - *(++buffer) = '\0'; -} - - -int printf(const char *fmt, ...) -{ -} diff --git a/sw/z80/libc/string.c b/sw/z80/libc/string.c deleted file mode 100644 index 57b3a7f..0000000 --- a/sw/z80/libc/string.c +++ /dev/null @@ -1,37 +0,0 @@ -#include "string.h" - -void *memset(void *dest, const int8_t src, size_t n) { - - char *dp = (char *) dest; - - while (n--) - *(dp++) = src; - - return dest; -} - -void *memcpy(void *dest, void *src, size_t n) -{ - char *dp = dest; - char *sp = src; - - while (n--) { - *dp++ = *sp++; - } - - return dest; -} - -int8_t memcmp(void *s1, void *s2, size_t n) -{ - char *u1 = (char *) s1; - char *u2 = (char *) s2; - - for ( ; n--; u1++, u2++) { - - if (*u1 != *u2) - return u1 - u2; - } - - return 0; -}
\ No newline at end of file diff --git a/sw/z80/tests/asm/main.s b/sw/z80/tests/asm/main.s deleted file mode 100644 index 8cf4df0..0000000 --- a/sw/z80/tests/asm/main.s +++ /dev/null @@ -1,40 +0,0 @@ - .module crt0 - .area _HEADER (ABS) - -;; Reset vectors - .org 0 - jp init - - .org 0x38 ; the instruction 0xff (not written) resets to this location - jp init - -;; main code - .org 0x100 - .globl _main - -init: - ;; Set stack pointer directly above top of memory. - ld sp,#0xffff - - ;; Start of the program - call _main - jp _exit - -_exit: - halt - ; jp _exit - -;; Ordering of segments for the linker. - .area _HOME - .area _CODE -_main: - ret - .area _INITIALIZER - .area _GSINIT - .area _GSFINAL - - .area _DATA - .area _INITIALIZED - .area _BSEG - .area _BSS - .area _HEAP diff --git a/sw/z80/tests/asm/makefile b/sw/z80/tests/asm/makefile deleted file mode 100644 index 413b0fe..0000000 --- a/sw/z80/tests/asm/makefile +++ /dev/null @@ -1,47 +0,0 @@ -#### -# source code settings -# -OSNAME := ram_test - -CSOURCES := $(wildcard *.s) - -OBJECTS := $(patsubst %.s,build/%.rel,$(SOURCES)) -HEXFILE := build/$(OSNAME).hex -BINARY := build/$(OSNAME).bin - -### -# compiler settings -# -ASM := sdasz80 -LD := sdldz80 - -FLAGS := -LDFLAGS := - -.PHONY: flash dirs dis clean -all: $(BINARY) - -flash: $(BINARY) - minipro -p M28C64 -w $< - -# build binary -$(BINARY): $(OBJECTS) dirs - $(LD) $(LDFLAGS) $(OBJECTS) -o $(HEXFILE) - makebin -s 8192 -yo 1 $(HEXFILE) $(BINARY) - -$(OBJECTS): build/%.rel : %.s $(SOURCES) dirs - @printf "\n" - $(ASM) $(FLAGS) $< -o - -build/crt0.rel: crt0.s - sdasz80 -o $< - @mv crt0.rel build/ - -dirs: - mkdir -p build - -dis: $(BINARY) - r2 -a z80 $< -c 'pd 0x10; s 0x100; pd 10; s 0x200; pd 10' - -clean: - - rm -rd build diff --git a/sw/z80/tests/pio/crt0.s b/sw/z80/tests/pio/crt0.s deleted file mode 100644 index c900065..0000000 --- a/sw/z80/tests/pio/crt0.s +++ /dev/null @@ -1,38 +0,0 @@ - .module crt0 - .area _HEADER (ABS) - -;; Reset vectors - .org 0 - jp init - - .org 0x38 ; the instruction 0xff (not written) resets to this location - jp init - -;; main code - .org 0x100 - .globl _main - -init: - ;; Set stack pointer directly above top of memory. - ld sp,#0xffff - - ;; Start of the program - call _main - jp _exit - -_exit: - halt - ; 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 diff --git a/sw/z80/tests/pio/main.c b/sw/z80/tests/pio/main.c deleted file mode 100644 index 7ac64bc..0000000 --- a/sw/z80/tests/pio/main.c +++ /dev/null @@ -1,50 +0,0 @@ -// #include "pio.h" - -#include <stdint.h> - -#define PIO_A_DATA 0x10 -#define PIO_B_DATA 0x11 -#define PIO_A_CMD 0x12 -#define PIO_B_CMD 0x13 - -void main(void) -{ - __asm - ;; output variable - ld h, #0x00 - - ;; set bit mode - ld c, #PIO_B_CMD - - ld a, #0xCF - out (c), a - - ;; set all pins to output - ld a, #0x00 - out (c), a - - ;; disable interrupts - ld a, #0x0C - out (c), a - - ;; load data addr - ld c, #PIO_B_DATA -loop: - out (c), h - ld a, h - - cpl - ld h, a - jr loop - __endasm; - - // uint8_t i = 0; - - // pio_set_mode(PIO_A, PIO_MODE_BIT_IO, 0x00); - // pio_set_interrupts(PIO_A, PIO_INT_DISABLE); - - // while (1) { - // pio_write(PIO_A, i); - // i = ~i; - // } -}
\ No newline at end of file diff --git a/sw/z80/tests/pio/makefile b/sw/z80/tests/pio/makefile deleted file mode 100644 index 1213902..0000000 --- a/sw/z80/tests/pio/makefile +++ /dev/null @@ -1,72 +0,0 @@ -#### -# source code settings -# -OSNAME := pio_test - -CSOURCES := $(wildcard *.c) -LIBS := ../../arch/build/arch.a \ - ../../drivers/build/drivers.a - -OBJECTS := $(patsubst %.c,build/%.rel,$(CSOURCES)) -HEXFILE := build/$(OSNAME).hex -BINARY := build/$(OSNAME).bin - -### -# compiler settings -# -CC := sdcc - -CFLAGS := -mz80 \ - --no-std-crt0 build/crt0.rel \ - --allow-unsafe-read \ - -I . \ - -I ../../arch/include \ - -I ../../drivers/include \ - -DDEBUG - -LDFLAGS := -mz80 \ - --no-std-crt0 build/crt0.rel \ - -L ../../drivers/build \ - -l drivers.a \ - -pedantic \ - --code-loc 0x0200 - # --data-loc 0x2000 - -.PHONY: flash dirs dis clean -all: $(BINARY) - -flash: $(BINARY) - minipro -p M28C64 -w $< - -# build binary -$(BINARY): $(OBJECTS) dirs - $(CC) $(LDFLAGS) $(OBJECTS) -o $(HEXFILE) - makebin -s 8192 -yo 1 $(HEXFILE) $(BINARY) - -$(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs build/crt0.rel $(LIBS) - @printf "\n" - $(CC) $(CFLAGS) -c $< -o $@ - -$(LIBS): %.a: - @printf "\n" - make -C $(shell printf $@ | sed 's:build.*.::') - -build/crt0.rel: crt0.s - sdasz80 -o $< - @mv crt0.rel build/ - -dirs: - mkdir -p build - -dis: $(BINARY) - dz80 -b -n -t $(BINARY) - r2 -a z80 $< \ - -c 'afn main 0x200; \ - pd 0x10; \ - s 0x100; \ - pd 10; \ - s 0x200; \ - pd 0x95' | tee build/dis.txt - -clean: - - rm -rd build diff --git a/sw/z80/tests/ram/crt0.s b/sw/z80/tests/ram/crt0.s deleted file mode 100644 index b0caa8c..0000000 --- a/sw/z80/tests/ram/crt0.s +++ /dev/null @@ -1,40 +0,0 @@ - .module crt0 - .area _HEADER (ABS) - -;; Reset vectors - .org 0 - jp init - - .org 0x38 ; the instruction 0xff (not written) resets to this location - jp init - -;; main code - .org 0x100 - .globl _main - -init: - ;; Set stack pointer directly above top of memory. - ld sp,#0xffff - - ;; Start of the program - call _main - jp _exit - -_exit: - halt - 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
\ No newline at end of file diff --git a/sw/z80/tests/ram/main.c b/sw/z80/tests/ram/main.c deleted file mode 100644 index 581072b..0000000 --- a/sw/z80/tests/ram/main.c +++ /dev/null @@ -1,13 +0,0 @@ - -void main(void) -{ - unsigned char j; - unsigned char *mem; - - j = 0; - mem = (unsigned char *) 0x8200; // somwhere in ram - - while (1) { - *mem = j++; - } -} diff --git a/sw/z80/tests/ram/makefile b/sw/z80/tests/ram/makefile deleted file mode 100644 index f8eb9fc..0000000 --- a/sw/z80/tests/ram/makefile +++ /dev/null @@ -1,54 +0,0 @@ -#### -# source code settings -# -OSNAME := ram_test - -CSOURCES := $(wildcard *.c) - -OBJECTS := $(patsubst %.c,build/%.rel,$(CSOURCES)) -HEXFILE := build/$(OSNAME).hex -BINARY := build/$(OSNAME).bin - -### -# compiler settings -# -CC := sdcc - -CFLAGS := -mz80 \ - -I . \ - -DDEBUG - -LDFLAGS := -mz80 \ - --no-std-crt0 build/crt0.rel \ - -pedantic - - # --code-loc 0x0120 \ - # --data-loc 0x2000 - -.PHONY: flash dirs dis clean -all: $(BINARY) - -flash: $(BINARY) - minipro -p M28C64 -w $< - -# build binary -$(BINARY): $(OBJECTS) dirs - $(CC) $(LDFLAGS) $(OBJECTS) -o $(HEXFILE) - makebin -s 8192 -yo 1 $(HEXFILE) $(BINARY) - -$(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs build/crt0.rel - @printf "\n" - $(CC) $(CFLAGS) -c $< -o $@ - -build/crt0.rel: crt0.s - sdasz80 -o $< - @mv crt0.rel build/ - -dirs: - mkdir -p build - -dis: $(BINARY) - r2 -a z80 $< -c 'pd 0x10; s 0x100; pd 10; s 0x200; pd 10' - -clean: - - rm -rd build diff --git a/sw/z80/tests/usart/crt0.s b/sw/z80/tests/usart/crt0.s deleted file mode 100644 index c900065..0000000 --- a/sw/z80/tests/usart/crt0.s +++ /dev/null @@ -1,38 +0,0 @@ - .module crt0 - .area _HEADER (ABS) - -;; Reset vectors - .org 0 - jp init - - .org 0x38 ; the instruction 0xff (not written) resets to this location - jp init - -;; main code - .org 0x100 - .globl _main - -init: - ;; Set stack pointer directly above top of memory. - ld sp,#0xffff - - ;; Start of the program - call _main - jp _exit - -_exit: - halt - ; 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 diff --git a/sw/z80/tests/usart/main.c b/sw/z80/tests/usart/main.c deleted file mode 100644 index a905df2..0000000 --- a/sw/z80/tests/usart/main.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "usart.h" -#include <stdint.h> - -void main(void) -{ - usart_init(USART_BAUDRATE_1200, USART_PARITY_NONE, USART_STOP_BITS_1); - - while (1) { - usart_write("Hello World!\n", 13); - } -} diff --git a/sw/z80/tests/usart/makefile b/sw/z80/tests/usart/makefile deleted file mode 100644 index 8aaf6b1..0000000 --- a/sw/z80/tests/usart/makefile +++ /dev/null @@ -1,72 +0,0 @@ -#### -# source code settings -# -OSNAME := usart_test - -CSOURCES := $(wildcard *.c) -LIBS := ../../arch/build/arch.a \ - ../../drivers/build/drivers.a - -OBJECTS := $(patsubst %.c,build/%.rel,$(CSOURCES)) -HEXFILE := build/$(OSNAME).hex -BINARY := build/$(OSNAME).bin - -### -# compiler settings -# -CC := sdcc - -CFLAGS := -mz80 \ - --no-std-crt0 build/crt0.rel \ - --allow-unsafe-read \ - -I . \ - -I ../../arch/include \ - -I ../../drivers/include \ - -DDEBUG - -LDFLAGS := -mz80 \ - --no-std-crt0 build/crt0.rel \ - -L ../../drivers/build \ - -l drivers.a \ - -pedantic \ - --code-loc 0x0200 - # --data-loc 0x2000 - -.PHONY: flash dirs dis clean -all: $(BINARY) - -flash: $(BINARY) - minipro -p M28C64 -w $< - -# build binary -$(BINARY): $(OBJECTS) dirs - $(CC) $(LDFLAGS) $(OBJECTS) -o $(HEXFILE) - makebin -s 8192 -yo 1 $(HEXFILE) $(BINARY) - -$(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs build/crt0.rel $(LIBS) - @printf "\n" - $(CC) $(CFLAGS) -c $< -o $@ - -$(LIBS): %.a: - @printf "\n" - make -C $(shell printf $@ | sed 's:build.*.::') - -build/crt0.rel: crt0.s - sdasz80 -o $< - @mv crt0.rel build/ - -dirs: - mkdir -p build - -dis: $(BINARY) - dz80 -b -n -t $(BINARY) - r2 -a z80 $< \ - -c 'afn main 0x200; \ - pd 0x10; \ - s 0x100; \ - pd 10; \ - s 0x200; \ - pd 0x95' - -clean: - - rm -rd build |