mirror of
https://github.com/oliverschmidt/contiki.git
synced 2024-12-22 10:30:13 +00:00
The pc-6001 platform was the last z80 platform in the tree, so we'll remove the cpu/z80 directory too
This commit is contained in:
parent
52a0b4594f
commit
27433244a9
@ -1,83 +0,0 @@
|
|||||||
#
|
|
||||||
# Makefile for z80/SDCC
|
|
||||||
# @author Takahide Matsutsuka <markn@markn.org>
|
|
||||||
#
|
|
||||||
# $Id: Makefile.z80,v 1.15 2009/12/16 06:47:17 matsutsuka Exp $
|
|
||||||
#
|
|
||||||
|
|
||||||
### Compiler definitions
|
|
||||||
CC = sdcc
|
|
||||||
LD = link-z80
|
|
||||||
AS = as-z80
|
|
||||||
AR = sdcclib
|
|
||||||
OBJCOPY = objcopy
|
|
||||||
STRIP = strip
|
|
||||||
|
|
||||||
### Custom rules
|
|
||||||
CUSTOM_RULE_C_TO_OBJECTDIR_O=1
|
|
||||||
CUSTOM_RULE_ALLOBJS_TO_TARGETLIB=1
|
|
||||||
CUSTOM_RULE_LINK=1
|
|
||||||
|
|
||||||
### Default flags
|
|
||||||
CFLAGS += --std-c99 -mz80 --opt-code-size
|
|
||||||
CFLAGS += --peep-file $(CONTIKI_CPU)/z80peephole.def --fverbose-asm
|
|
||||||
ASFLAGS +=
|
|
||||||
LDFLAGS += -mz80 --out-fmt-ihx --no-std-crt0
|
|
||||||
AROPTS = -a
|
|
||||||
|
|
||||||
ifdef CONTIKI_PROJECT
|
|
||||||
CFLAGS += -DAUTOSTART_ENABLE=1
|
|
||||||
CONTIKI_SOURCEFILES += $(CONTIKI_PROJECT).c
|
|
||||||
endif
|
|
||||||
|
|
||||||
### CPU-dependent cleanup files
|
|
||||||
CLEAN += *.ihx *.lnk *.sym contiki-$(TARGET).lib *.$(TARGET)
|
|
||||||
|
|
||||||
### CPU-dependent directories
|
|
||||||
CONTIKI_CPU_DIRS = . dev lib loader
|
|
||||||
|
|
||||||
### CPU-dependent source files
|
|
||||||
CONTIKI_SOURCEFILES += strcasecmp.c mtarch.c uip_arch.c \
|
|
||||||
libconio_z80.c log-conio.c rs232.c
|
|
||||||
|
|
||||||
CONTIKI_ASMFILES += uip_arch-asm.S crt0.S
|
|
||||||
|
|
||||||
CONTIKI_ASMOBJECTFILES = ${addprefix $(OBJECTDIR)/,$(CONTIKI_ASMFILES:.S=.o)}
|
|
||||||
|
|
||||||
CONTIKI_CASMOBJECTFILES = ${addprefix $(OBJECTDIR)/,$(CONTIKI_CASMFILES:.cS=.o)}
|
|
||||||
|
|
||||||
CONTIKI_PLATFORM_DIRS = $(PLATFORM_APPDIRS) \
|
|
||||||
${addprefix $(CONTIKI)/platform/$(TARGET)/, $(CONTIKI_TARGET_DIRS)}
|
|
||||||
|
|
||||||
#".cS" suffix means assembler file with #include directive
|
|
||||||
#so that a developer can use definitions of C-style include file
|
|
||||||
#in assembler file. Make sure the header file contains only compiler
|
|
||||||
#directives. (i.e. #define, etc.)
|
|
||||||
vpath %.cS $(CONTIKI_PLATFORM_DIRS)
|
|
||||||
|
|
||||||
#option -MMD doesn't work well on SDCC as of 2.9.0
|
|
||||||
$(OBJECTDIR)/%.o: %.c | $(OBJECTDIR)
|
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
ifndef CUSTOM_RULE_CS_TO_OBJECTDIR_O
|
|
||||||
$(OBJECTDIR)/%.o: %.cS | $(OBJECTDIR)
|
|
||||||
cp $< $(OBJECTDIR)/$*.c
|
|
||||||
$(CC) $(CFLAGS) -E $(OBJECTDIR)/$*.c > $(OBJECTDIR)/tmp
|
|
||||||
perl -pe "s/^#(.*)/;$$1/" $(OBJECTDIR)/tmp > $(OBJECTDIR)/$*.S
|
|
||||||
$(AS) $(ASFLAGS) -o $@ $(OBJECTDIR)/$*.S
|
|
||||||
rm -f $(OBJECTDIR)/tmp
|
|
||||||
endif
|
|
||||||
|
|
||||||
#CUSTOM_RULE_ALLOBJS_TO_TARGETLIB
|
|
||||||
contiki-$(TARGET).lib: $(CONTIKI_OBJECTFILES) $(PROJECT_OBJECTFILES) $(CONTIKI_ASMOBJECTFILES) $(CONTIKI_CASMOBJECTFILES)
|
|
||||||
rm -f $@
|
|
||||||
for target in $^; do echo $$target >> $@; done
|
|
||||||
|
|
||||||
#CUSTOM_RULE_LINK (workaround for compiling examples)
|
|
||||||
$(CONTIKI_PROJECT): $(CONTIKI_PROJECT).ihx
|
|
||||||
mv $(CONTIKI_PROJECT).ihx $(CONTIKI_PROJECT).$(TARGET)
|
|
||||||
|
|
||||||
#CUSTOM_RULE_LINK
|
|
||||||
%.ihx: contiki-$(TARGET).lib
|
|
||||||
$(CC) $(LDFLAGS) -o $@ $(OBJECTDIR)/crt0.o -lcontiki-$(TARGET).lib
|
|
||||||
$(LD) -nf $*
|
|
@ -1,55 +0,0 @@
|
|||||||
;;;
|
|
||||||
;;;
|
|
||||||
;;; ctt0.S
|
|
||||||
;;;
|
|
||||||
;;; \file
|
|
||||||
;;; C runtime startup routine
|
|
||||||
;;;
|
|
||||||
;;; \author
|
|
||||||
;;; Takahide Matsutsuka <markn@markn.org>
|
|
||||||
;;;
|
|
||||||
;;; $Id: crt0.S,v 1.3 2008/07/02 07:13:22 matsutsuka Exp $
|
|
||||||
;;;
|
|
||||||
.module crt0
|
|
||||||
.globl _main
|
|
||||||
|
|
||||||
;; Ordering of segments for the linker.
|
|
||||||
.area _HOME
|
|
||||||
.area _CODE
|
|
||||||
.area _GSINIT
|
|
||||||
.area _GSFINAL
|
|
||||||
.area _DATA
|
|
||||||
.area _DATAFINAL
|
|
||||||
.area _BSS
|
|
||||||
.area _HEAP
|
|
||||||
|
|
||||||
.area _CODE
|
|
||||||
init::
|
|
||||||
;; Clear global variables
|
|
||||||
ld hl, #_datastart
|
|
||||||
ld bc, #_dataend
|
|
||||||
_clear_loop:
|
|
||||||
ld a, h
|
|
||||||
sub b
|
|
||||||
jr nz, _clear_next
|
|
||||||
ld a, l
|
|
||||||
sub c
|
|
||||||
jr z, _clear_exit
|
|
||||||
_clear_next:
|
|
||||||
ld (hl), #0
|
|
||||||
inc hl
|
|
||||||
jr _clear_loop
|
|
||||||
_clear_exit:
|
|
||||||
;; Initialize global variables
|
|
||||||
call gsinit
|
|
||||||
jp _main
|
|
||||||
|
|
||||||
.area _GSINIT
|
|
||||||
gsinit::
|
|
||||||
|
|
||||||
.area _GSFINAL
|
|
||||||
ret
|
|
||||||
.area _DATA
|
|
||||||
_datastart::
|
|
||||||
.area _DATAFINAL
|
|
||||||
_dataend::
|
|
@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* This is RS-232C process based on polling.
|
|
||||||
* Note that rs232.c and rs232-slip.c cannot be used at the same time.
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "contiki.h"
|
|
||||||
#include "dev/slip.h"
|
|
||||||
#include "dev/serial-line.h"
|
|
||||||
#include "dev/rs232.h"
|
|
||||||
|
|
||||||
PROCESS(rs232_process, "RS-232C polling process");
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
PROCESS_THREAD(rs232_process, ev, data)
|
|
||||||
{
|
|
||||||
static struct etimer timer;
|
|
||||||
char ch;
|
|
||||||
unsigned char i, stat;
|
|
||||||
PROCESS_BEGIN();
|
|
||||||
|
|
||||||
rs232_arch_init(RS232_BAUD_RATE);
|
|
||||||
etimer_set(&timer, CLOCK_SECOND / 16);
|
|
||||||
|
|
||||||
while(1) {
|
|
||||||
PROCESS_WAIT_EVENT();
|
|
||||||
|
|
||||||
if (etimer_expired(&timer)) {
|
|
||||||
for (i = 0; i < RS232_BUFSIZE; i++) {
|
|
||||||
ch = rs232_arch_poll(&stat);
|
|
||||||
if (stat == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* We have an input data */
|
|
||||||
RS232_CALLBACK(ch);
|
|
||||||
}
|
|
||||||
etimer_reset(&timer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PROCESS_END();
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
@ -1,87 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* This is RS-232C process based on polling.
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __RS232_H__
|
|
||||||
#define __RS232_H__
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Implement the following methods for each platform.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* An architecture-depend implementation of RS-232C initialization.
|
|
||||||
*/
|
|
||||||
void rs232_arch_init(unsigned long ubr);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* An architecture-depend implementation of RS-232C polling.
|
|
||||||
* @return character, stat == zero if no input.
|
|
||||||
*/
|
|
||||||
unsigned char rs232_arch_poll(unsigned char* stat);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* An architecture-depend implementation of RS-232C writing a byte.
|
|
||||||
*/
|
|
||||||
void rs232_arch_writeb(unsigned char ch);
|
|
||||||
|
|
||||||
PROCESS_NAME(rs232_process);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* if you want to use simple serial communication,
|
|
||||||
* define RS232_CONF_CALLBACK as serial_input_byte.
|
|
||||||
* The default is SLIP.
|
|
||||||
*/
|
|
||||||
#ifdef RS232_CONF_CALLBACK
|
|
||||||
#define RS232_CALLBACK RS232_CONF_CALLBACK
|
|
||||||
#else /* RS232_CONF_CALLBACK */
|
|
||||||
#define RS232_CALLBACK slip_input_byte
|
|
||||||
#endif /* RS232_CONF_CALLBACK */
|
|
||||||
|
|
||||||
#ifdef RS232_CONF_BUFISZE
|
|
||||||
#define RS232_BUFSIZE RS232_CONF_BUFISZE
|
|
||||||
#else /* RS232_CONF_BUFISZE */
|
|
||||||
#define RS232_BUFSIZE 64
|
|
||||||
#endif /* RS232_CONF_BUFISZE */
|
|
||||||
|
|
||||||
#ifdef RS232_CONF_BAUD_RATE
|
|
||||||
#define RS232_BAUD_RATE RS232_CONF_BAUD_RATE
|
|
||||||
#else /* RS232_CONF_BAUD_RATE */
|
|
||||||
#define RS232_BAUD_RATE 9600
|
|
||||||
#endif /* RS232_CONF_BAUD_RATE */
|
|
||||||
|
|
||||||
#endif /* __RS232_H__ */
|
|
@ -1,101 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* Arcitecture-depend libconio module, which supposes
|
|
||||||
* the machine has character VRAM and optional attribute VRAM
|
|
||||||
* on the main memory.
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "contiki.h"
|
|
||||||
#include "sys/log.h"
|
|
||||||
#include "libconio.h"
|
|
||||||
#include "libconio_z80.h"
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
static void scroll() {
|
|
||||||
unsigned char y;
|
|
||||||
uint16_t src, dst;
|
|
||||||
for (y = 0; y < LIBCONIO_CONF_SCREEN_HEIGHT - 1; y++) {
|
|
||||||
dst = LIBCONIO_VRAM_OFFSET(0, y);
|
|
||||||
src = LIBCONIO_VRAM_OFFSET(0, y + 1);
|
|
||||||
memcpy(LIBCONIO_VRAM_CHAR + dst,
|
|
||||||
LIBCONIO_VRAM_CHAR + src,
|
|
||||||
LIBCONIO_CONF_SCREEN_WIDTH);
|
|
||||||
#ifdef LIBCONIO_CONF_ATTRIBUTES_ENABLED
|
|
||||||
memcpy(LIBCONIO_VRAM_ATTR + dst,
|
|
||||||
LIBCONIO_VRAM_ATTR + src,
|
|
||||||
LIBCONIO_CONF_SCREEN_WIDTH);
|
|
||||||
#endif /* LIBCONIO_CONF_ATTRIBUTES_ENABLED */
|
|
||||||
}
|
|
||||||
dst = LIBCONIO_VRAM_OFFSET(0, LIBCONIO_CONF_SCREEN_HEIGHT - 1);
|
|
||||||
memset(LIBCONIO_VRAM_CHAR + dst, ' ',
|
|
||||||
LIBCONIO_CONF_SCREEN_WIDTH);
|
|
||||||
#ifdef LIBCONIO_CONF_ATTRIBUTES_ENABLED
|
|
||||||
memset(LIBCONIO_VRAM_ATTR + dst, LIBCONIO_COLOR_NORMAL,
|
|
||||||
LIBCONIO_CONF_SCREEN_WIDTH);
|
|
||||||
#endif /* LIBCONIO_CONF_ATTRIBUTES_ENABLED */
|
|
||||||
|
|
||||||
gotoxy(0, LIBCONIO_CONF_SCREEN_HEIGHT - 1);
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
/* make sure that the position is inside screen */
|
|
||||||
static void adjust(unsigned char *x, unsigned char *y) {
|
|
||||||
if (*x > LIBCONIO_CONF_SCREEN_WIDTH) {
|
|
||||||
*y += *x / LIBCONIO_CONF_SCREEN_WIDTH;
|
|
||||||
*x = *x % LIBCONIO_CONF_SCREEN_WIDTH;
|
|
||||||
gotoxy(*x, *y);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
||||||
void ctk_arch_draw_char(char c,
|
|
||||||
unsigned char xpos,
|
|
||||||
unsigned char ypos,
|
|
||||||
unsigned char reversed,
|
|
||||||
unsigned char color) {
|
|
||||||
uint16_t off;
|
|
||||||
adjust(&xpos, &ypos);
|
|
||||||
|
|
||||||
off = LIBCONIO_VRAM_OFFSET(xpos, ypos);
|
|
||||||
if (off >= LIBCONIO_VRAM_OFFSET_MAX) {
|
|
||||||
scroll();
|
|
||||||
off = LIBCONIO_VRAM_OFFSET(0, LIBCONIO_CONF_SCREEN_HEIGHT - 1);
|
|
||||||
}
|
|
||||||
*(char *)(LIBCONIO_VRAM_CHAR + off) = c;
|
|
||||||
#ifdef LIBCONIO_CONF_ATTRIBUTES_ENABLED
|
|
||||||
*(char *)(LIBCONIO_VRAM_ATTR + off) = reversed ?
|
|
||||||
LIBCONIO_COLOR_REVERSED : LIBCONIO_COLOR_NORMAL;
|
|
||||||
#endif /* LIBCONIO_CONF_ATTRIBUTES_ENABLED */
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/
|
|
@ -1,87 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* Arcitecture-depend libconio module, which supposes
|
|
||||||
* the machine has character VRAM and optional attribute VRAM
|
|
||||||
* on the main memory.
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __LIBCONIO_ARCH_H__
|
|
||||||
#define __LIBCONIO_ARCH_H__
|
|
||||||
|
|
||||||
#ifndef LIBCONIO_VRAM_CHAR
|
|
||||||
#error "must specify vram address for characters!"
|
|
||||||
#endif /* LIBCONIO_VRAM_CHAR */
|
|
||||||
|
|
||||||
#ifdef LIBCONIO_CONF_ATTRIBUTES_ENABLED
|
|
||||||
#ifndef LIBCONIO_VRAM_ATTR
|
|
||||||
#error "must specify vram address for attributes!"
|
|
||||||
#endif /* LIBCONIO_VRAM_ATTR */
|
|
||||||
#endif /* LIBCONIO_CONF_ATTRIBUTES_ENABLED */
|
|
||||||
|
|
||||||
#ifndef LIBCONIO_CONF_SCREEN_WIDTH
|
|
||||||
#define LIBCONIO_CONF_SCREEN_WIDTH 32
|
|
||||||
#endif /* LIBCONIO_CONF_SCREEN_WIDTH */
|
|
||||||
|
|
||||||
#ifndef LIBCONIO_CONF_SCREEN_HEIGHT
|
|
||||||
#define LIBCONIO_CONF_SCREEN_HEIGHT 16
|
|
||||||
#endif /* LIBCONIO_CONF_SCREEN_HEIGHT */
|
|
||||||
|
|
||||||
#ifndef LIBCONIO_COLOR_REVERSED
|
|
||||||
#define LIBCONIO_COLOR_REVERSED 0x21
|
|
||||||
#endif /* LIBCONIO_COLOR_REVERSED */
|
|
||||||
|
|
||||||
#ifndef LIBCONIO_COLOR_NORMAL
|
|
||||||
#define LIBCONIO_COLOR_NORMAL 0x20
|
|
||||||
#endif /* LIBCONIO_COLOR_NORMAL */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* An offset caluclation logic.
|
|
||||||
* The default supposes the VRAM is sequential
|
|
||||||
*/
|
|
||||||
#ifndef LIBCONIO_VRAM_OFFSET
|
|
||||||
#define LIBCONIO_VRAM_OFFSET(x, y) (y) * LIBCONIO_CONF_SCREEN_WIDTH + (x)
|
|
||||||
#endif /* VRAM_OFFSET */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A maximum offset + 1.
|
|
||||||
* If offset is equal or more than this maximum, the screen will scroll.
|
|
||||||
*/
|
|
||||||
#ifndef LIBCONIO_VRAM_OFFSET_MAX
|
|
||||||
#define LIBCONIO_VRAM_OFFSET_MAX \
|
|
||||||
(LIBCONIO_CONF_SCREEN_HEIGHT * LIBCONIO_CONF_SCREEN_WIDTH)
|
|
||||||
#endif /* VRAM_MAX */
|
|
||||||
|
|
||||||
#endif /* __LIBCONIO_ARCH_H__ */
|
|
@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* A default implmentation of logging for conio
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "contiki.h"
|
|
||||||
#include "libconio.h"
|
|
||||||
#include "log.h"
|
|
||||||
|
|
||||||
#if LOG_CONF_ENABLED
|
|
||||||
void
|
|
||||||
log_message(const char *part1, const char *part2)
|
|
||||||
{
|
|
||||||
cputs(part1);
|
|
||||||
/* line feed */
|
|
||||||
gotoxy(0, wherey() + 1);
|
|
||||||
}
|
|
||||||
#endif /* LOG_CONF_ENABLED */
|
|
@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* This complements standard C library of sdcc.
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <ctype.h>
|
|
||||||
#include "strcasecmp.h"
|
|
||||||
|
|
||||||
int strcasecmp(const char *str1, const char *str2)
|
|
||||||
{
|
|
||||||
while (*str1 != '\0' && tolower(*str1) == tolower(*str2)) {
|
|
||||||
str1++;
|
|
||||||
str2++;
|
|
||||||
}
|
|
||||||
return tolower(*(unsigned char *)str1) - tolower(*(unsigned char *)str2);
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* This complements standard C library of sdcc.
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __STRCASECMP_H__
|
|
||||||
#define __STRCASECMP_H__
|
|
||||||
|
|
||||||
int strcasecmp(const char *str1, const char *str2);
|
|
||||||
|
|
||||||
#endif /*__STRCASECMP_H__*/
|
|
@ -1,106 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* mef.c
|
|
||||||
* The Micro Executable Format
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef WITH_LOADER_ARCH
|
|
||||||
#include "contiki.h"
|
|
||||||
#include "loader/mef.h"
|
|
||||||
|
|
||||||
struct Area areas[MEF_AREA_MAX];
|
|
||||||
|
|
||||||
void
|
|
||||||
mef_load(unsigned char* offset)
|
|
||||||
{
|
|
||||||
unsigned char* start = offset;
|
|
||||||
unsigned char areasize = load_byte();
|
|
||||||
uint16_t relocsize;
|
|
||||||
unsigned int i, j;
|
|
||||||
uint16_t checksum = 0;
|
|
||||||
unsigned char* buf;
|
|
||||||
struct Relocation reloc;
|
|
||||||
|
|
||||||
for (i = 0; i < areasize; i++) {
|
|
||||||
buf = (unsigned char *) &areas[i];
|
|
||||||
for (j = 0; j < sizeof(struct Area); j++) {
|
|
||||||
*buf++ = load_byte();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < areasize; i++) {
|
|
||||||
for (j = 0; j < areas[i].size; j++) {
|
|
||||||
*offset = load_byte();
|
|
||||||
checksum += *offset;
|
|
||||||
offset++;
|
|
||||||
}
|
|
||||||
if (areas[i].checksum != checksum) {
|
|
||||||
// Checksum error!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// relocation information
|
|
||||||
relocsize = load_byte();
|
|
||||||
relocsize = (load_byte() << 8) + relocsize;
|
|
||||||
for (i = 0; i < relocsize; i++) {
|
|
||||||
buf = (unsigned char *) &reloc;
|
|
||||||
for (j = 0; j < sizeof(struct Relocation); j++) {
|
|
||||||
*buf++ = load_byte();
|
|
||||||
}
|
|
||||||
mef_reloc(start, &reloc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
mef_reloc(unsigned char* offset, struct Relocation *reloc)
|
|
||||||
{
|
|
||||||
if (reloc->mode & MEF_RELOC_ABSOLUTE) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
offset += reloc->address;
|
|
||||||
if (reloc->mode & MEF_RELOC_MSB_BYTE) {
|
|
||||||
*offset = (unsigned char) ((reloc->data + (uint16_t) offset) >> 8);
|
|
||||||
} else if (reloc->mode & MEF_RELOC_LSB_BYTE) {
|
|
||||||
*offset = (unsigned char) ((reloc->data + (uint16_t) offset) & 0xff);
|
|
||||||
} else { /* word */
|
|
||||||
*offset++ = (unsigned char) ((reloc->data + (uint16_t) offset) & 0xff);
|
|
||||||
*offset = (unsigned char) ((reloc->data + (uint16_t) offset) >> 8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* WITH_LOADER_ARCH */
|
|
@ -1,94 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* mef.h
|
|
||||||
* The Micro Executable Format
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* MEF file format:
|
|
||||||
* [AreaDecls]
|
|
||||||
* BYTE nAreas (0-15)
|
|
||||||
* struct AreaSize[nAreas]
|
|
||||||
* [Data]
|
|
||||||
* binary*
|
|
||||||
* [Relocation]
|
|
||||||
* WORD nRelocs
|
|
||||||
* struct Relocation[nRelocs]
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __MEF_H__
|
|
||||||
#define __MEF_H__
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* mode
|
|
||||||
* bit 7: read/write (1) / read only (0)
|
|
||||||
* bit 3-0: Area index
|
|
||||||
* checksum
|
|
||||||
* just a sum of all data of the area
|
|
||||||
*/
|
|
||||||
#define MEF_AREA_RW 0x80
|
|
||||||
#define MEF_AREA_MAX 0x10
|
|
||||||
|
|
||||||
struct Area {
|
|
||||||
unsigned char mode;
|
|
||||||
uint16_t size;
|
|
||||||
uint16_t checksum;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* mode
|
|
||||||
* bit 7: Absolute (1) / Relative (0)
|
|
||||||
* bit 6: MSB (1) / LSB (0) (in byte mode)
|
|
||||||
* bit 5: Byte mode (1) / Word mode (0)
|
|
||||||
*/
|
|
||||||
#define MEF_RELOC_ABSOLUTE 0x80
|
|
||||||
#define MEF_RELOC_MSB_BYTE 0x60
|
|
||||||
#define MEF_RELOC_LSB_BYTE 0x20
|
|
||||||
|
|
||||||
struct Relocation {
|
|
||||||
unsigned char mode;
|
|
||||||
uint16_t address;
|
|
||||||
uint16_t data;
|
|
||||||
};
|
|
||||||
|
|
||||||
unsigned char load_byte();
|
|
||||||
|
|
||||||
void mef_load(unsigned char* offset);
|
|
||||||
unsigned char load_byte();
|
|
||||||
void mef_reloc(unsigned char* offset, struct Relocation* reloc);
|
|
||||||
|
|
||||||
#endif /* __MEF_H__ */
|
|
192
cpu/z80/mtarch.c
192
cpu/z80/mtarch.c
@ -1,192 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* Z80 machine-specific implementation for supporting multithread.
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
#include "sys/mt.h"
|
|
||||||
#include "mtarch.h"
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_init(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_start(struct mtarch_thread *t,
|
|
||||||
void (*function)(void *), void *data)
|
|
||||||
{
|
|
||||||
uint16_t i;
|
|
||||||
|
|
||||||
for(i = 0; i < MTARCH_STACKSIZE; i++) {
|
|
||||||
t->stack[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
t->sp = &t->stack[MTARCH_STACKSIZE - 1];
|
|
||||||
|
|
||||||
|
|
||||||
/* A parameter for method for thread function. */
|
|
||||||
*t->sp = (uint16_t)data;
|
|
||||||
--t->sp;
|
|
||||||
|
|
||||||
/* This will be a return address of thread function. */
|
|
||||||
*t->sp = (uint16_t)mt_exit;
|
|
||||||
--t->sp;
|
|
||||||
|
|
||||||
/* The thread function, is used as a return address of mtarch_switch. */
|
|
||||||
*t->sp = (uint16_t)function;
|
|
||||||
--t->sp;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Space for registers.
|
|
||||||
* af, bc, de, hl, ix, iy, af', bc', de', hl'
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Z80 stack basis:
|
|
||||||
* push stores the data AFTER decrementing sp.
|
|
||||||
* pop reads the data BEFORE incrementing sp.
|
|
||||||
*/
|
|
||||||
|
|
||||||
t->sp = t->sp - 9;
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
static struct mtarch_thread *running_thread;
|
|
||||||
static uint16_t *sptmp;
|
|
||||||
static void
|
|
||||||
mtarch_switch()
|
|
||||||
{
|
|
||||||
__asm
|
|
||||||
di ; disable interrupt
|
|
||||||
; normal registers
|
|
||||||
push af
|
|
||||||
push bc
|
|
||||||
push de
|
|
||||||
push hl
|
|
||||||
push ix
|
|
||||||
push iy
|
|
||||||
|
|
||||||
; back registers
|
|
||||||
ex af,af'
|
|
||||||
push af
|
|
||||||
exx
|
|
||||||
push bc
|
|
||||||
push de
|
|
||||||
push hl
|
|
||||||
|
|
||||||
; swap between running_thread->sp and SP reg
|
|
||||||
; _running_thread in asembler below points running_thread->sp
|
|
||||||
; sptmp = sp;
|
|
||||||
ld (_sptmp),sp
|
|
||||||
|
|
||||||
; sp = *(running_thread->sp);
|
|
||||||
ld ix,(_running_thread)
|
|
||||||
ld l,0(ix)
|
|
||||||
ld h,1(ix)
|
|
||||||
ld sp,hl
|
|
||||||
|
|
||||||
; running_thread->sp = sptmp;
|
|
||||||
ld hl,(_sptmp)
|
|
||||||
ld 0(ix),l
|
|
||||||
ld 1(ix),h
|
|
||||||
|
|
||||||
; back registers
|
|
||||||
pop hl
|
|
||||||
pop de
|
|
||||||
pop bc
|
|
||||||
exx
|
|
||||||
pop af
|
|
||||||
ex af,af'
|
|
||||||
|
|
||||||
; normal registers
|
|
||||||
pop iy
|
|
||||||
pop ix
|
|
||||||
pop hl
|
|
||||||
pop de
|
|
||||||
pop bc
|
|
||||||
pop af
|
|
||||||
ei ; enable interrupt
|
|
||||||
__endasm;
|
|
||||||
// here sp indicates the address that point the function
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_exec(struct mtarch_thread *t)
|
|
||||||
{
|
|
||||||
running_thread = t;
|
|
||||||
mtarch_switch();
|
|
||||||
running_thread = NULL;
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_remove()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_yield()
|
|
||||||
{
|
|
||||||
if (running_thread == NULL) {
|
|
||||||
/* ERROR! we have no runnning thread. */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
mtarch_switch();
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void mtarch_stop(struct mtarch_thread *thread)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_pstop()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
void
|
|
||||||
mtarch_pstart()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
int
|
|
||||||
mtarch_stack_usage(struct mtarch_thread *t)
|
|
||||||
{
|
|
||||||
uint16_t i;
|
|
||||||
for (i = 0; i < MTARCH_STACKSIZE; i++) {
|
|
||||||
if (t->stack[i] != i) {
|
|
||||||
return MTARCH_STACKSIZE - i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
@ -1,65 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* Z80 machine-specific difinitions for supporting multithread.
|
|
||||||
*
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
#ifndef __MTARCH_H__
|
|
||||||
#define __MTARCH_H__
|
|
||||||
|
|
||||||
/* Unit of the stack is 2byte wide. */
|
|
||||||
#ifndef MTARCH_STACKSIZE
|
|
||||||
#define MTARCH_STACKSIZE 128
|
|
||||||
#endif /* MTARCH_STACKSIZE */
|
|
||||||
|
|
||||||
struct mtarch_thread {
|
|
||||||
/*
|
|
||||||
* On top of the mtarch_thread must be the address for the stack pointer.
|
|
||||||
* See details at mtarch_switch in mtarch.c
|
|
||||||
*/
|
|
||||||
uint16_t *sp;
|
|
||||||
/*
|
|
||||||
* Stack is 2-byte wide, so please note that you need 2 * MTARCH_STACKSIZE
|
|
||||||
* bytes for the stack area for each thread.
|
|
||||||
*/
|
|
||||||
uint16_t stack[MTARCH_STACKSIZE];
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A function for debugging purpose, placed here by following other implementations.
|
|
||||||
*/
|
|
||||||
int mtarch_stack_usage(struct mtarch_thread *t);
|
|
||||||
|
|
||||||
#endif /* __MTARCH_H__ */
|
|
||||||
|
|
@ -1,221 +0,0 @@
|
|||||||
;;;
|
|
||||||
;;;
|
|
||||||
;;; uip_arch-asm.S
|
|
||||||
;;;
|
|
||||||
;;; \file
|
|
||||||
;;; Z80 architecture-depend uip module
|
|
||||||
;;; for calculating checksums
|
|
||||||
;;;
|
|
||||||
;;; \author
|
|
||||||
;;; Takahide Matsutsuka <markn@markn.org>
|
|
||||||
;;;
|
|
||||||
.module uip_arch-asm
|
|
||||||
|
|
||||||
;; export symbols
|
|
||||||
.globl _uip_add32
|
|
||||||
.globl _uip_arch_chksum
|
|
||||||
.globl _uip_chksum
|
|
||||||
|
|
||||||
;; import symbols
|
|
||||||
.globl _uip_acc32
|
|
||||||
.globl _uip_buf
|
|
||||||
|
|
||||||
.area _DATA
|
|
||||||
|
|
||||||
.area _GSINIT
|
|
||||||
|
|
||||||
.area _CODE
|
|
||||||
|
|
||||||
;; ---------------------------------
|
|
||||||
;; void uip_add32(uint8_t *op32, uint16_t op16);
|
|
||||||
;; Stack; retl reth op32l op32h op16l op16h
|
|
||||||
;; ABCDEHL____
|
|
||||||
;; return void
|
|
||||||
;; _uip_acc32 = op32 + op16
|
|
||||||
;; ---------------------------------
|
|
||||||
_uip_add32_start::
|
|
||||||
_uip_add32:
|
|
||||||
;; HL = #_op32l
|
|
||||||
ld hl, #2
|
|
||||||
add hl, sp
|
|
||||||
|
|
||||||
;; DE = #(_op32)
|
|
||||||
ld e, (hl)
|
|
||||||
inc hl
|
|
||||||
ld d, (hl)
|
|
||||||
inc hl
|
|
||||||
|
|
||||||
;; BC = op16
|
|
||||||
ld c, (hl)
|
|
||||||
inc hl
|
|
||||||
ld b, (hl)
|
|
||||||
|
|
||||||
;; HL = #(_op32) + 3
|
|
||||||
ld hl, #3
|
|
||||||
add hl, de
|
|
||||||
|
|
||||||
;; DE = #_uip_acc32 + 3
|
|
||||||
ld de, #_uip_acc32 + 3
|
|
||||||
|
|
||||||
;; uip_acc32[3] = op32[3] + op16l;
|
|
||||||
ld a, (hl)
|
|
||||||
add a, c
|
|
||||||
ld (de), a
|
|
||||||
|
|
||||||
;; uip_acc32[2] = op32[2] + op16h + carry;
|
|
||||||
dec hl
|
|
||||||
dec de
|
|
||||||
ld a, (hl)
|
|
||||||
adc a, b
|
|
||||||
ld (de), a
|
|
||||||
jr nc, _uip_add32_nocarry1
|
|
||||||
|
|
||||||
;; uip_acc32[1]
|
|
||||||
dec hl
|
|
||||||
dec de
|
|
||||||
ld a, (hl)
|
|
||||||
inc a
|
|
||||||
ld (de), a
|
|
||||||
jr nz, _uip_add32_nocarry0
|
|
||||||
|
|
||||||
;; uip_acc32[0]
|
|
||||||
dec hl
|
|
||||||
dec de
|
|
||||||
ld a, (hl)
|
|
||||||
inc a
|
|
||||||
ld (de), a
|
|
||||||
ret
|
|
||||||
_uip_add32_nocarry1:
|
|
||||||
;; uip_acc32[1]
|
|
||||||
dec hl
|
|
||||||
dec de
|
|
||||||
ld a, (hl)
|
|
||||||
ld (de), a
|
|
||||||
|
|
||||||
_uip_add32_nocarry0:
|
|
||||||
;; uip_acc32[0]
|
|
||||||
dec hl
|
|
||||||
dec de
|
|
||||||
ld a, (hl)
|
|
||||||
ld (de), a
|
|
||||||
ret
|
|
||||||
_uip_add32_end::
|
|
||||||
|
|
||||||
;; ---------------------------------
|
|
||||||
;; static uint16_t chksum(uint16_t sum, const uint8_t *data, uint16_t len)
|
|
||||||
;; Stack; retl reth suml sumh datal datah lenl lenh
|
|
||||||
;; ABCDEHL____
|
|
||||||
;; return HL
|
|
||||||
;; ---------------------------------
|
|
||||||
_uip_arch_chksum_start::
|
|
||||||
_uip_arch_chksum:
|
|
||||||
push ix
|
|
||||||
;; IX = #_suml
|
|
||||||
ld ix, #4
|
|
||||||
add ix, sp
|
|
||||||
;; BC = sum
|
|
||||||
ld c, 0(ix)
|
|
||||||
ld b, 1(ix)
|
|
||||||
;; DE = #data
|
|
||||||
ld e, 2(ix)
|
|
||||||
ld d, 3(ix)
|
|
||||||
|
|
||||||
;; (lenl, lenh) <- dataptr + len - 1 (last address)
|
|
||||||
;; (len) + DE - 1 -> (len)
|
|
||||||
ld l, 4(ix)
|
|
||||||
ld h, 5(ix)
|
|
||||||
add hl, de
|
|
||||||
dec hl
|
|
||||||
ld 4(ix), l
|
|
||||||
ld 5(ix), h
|
|
||||||
|
|
||||||
_uip_arch_chksum_loop:
|
|
||||||
;; compare HL(last address) and DE(dataptr)
|
|
||||||
;; HL - DE
|
|
||||||
;; if (HL < DE) C,NZ else if (HL = DE) NC,Z=1 otherwise NC,NZ
|
|
||||||
;; HL = last address, DE = current pointer
|
|
||||||
ld l, 4(ix)
|
|
||||||
ld h, 5(ix)
|
|
||||||
|
|
||||||
ld a, h
|
|
||||||
sub d
|
|
||||||
jr nz, _uip_arch_chksum_compared
|
|
||||||
ld a, l
|
|
||||||
sub e
|
|
||||||
;; if (last address == dataptr) _uip_arch_chksum_loop_exit_add_trailing
|
|
||||||
jr z, _uip_arch_chksum_loop_exit_add_trailing
|
|
||||||
_uip_arch_chksum_compared:
|
|
||||||
;; if (last address > dataptr) _uip_arch_chksum_loop_exit
|
|
||||||
jr c, _uip_arch_chksum_loop_exit
|
|
||||||
;; bc = dataptr[0],dataptr[1] + bc
|
|
||||||
ld a, (de)
|
|
||||||
ld h, a
|
|
||||||
inc de
|
|
||||||
ld a, (de)
|
|
||||||
ld l, a
|
|
||||||
push hl
|
|
||||||
add hl, bc
|
|
||||||
inc de
|
|
||||||
ld b, h
|
|
||||||
ld c, l
|
|
||||||
;; HL = t
|
|
||||||
pop hl
|
|
||||||
;; BC - HL
|
|
||||||
;; if (sumBC < tHL) sum++
|
|
||||||
ld a, b
|
|
||||||
sub h
|
|
||||||
jr nz, _uip_arch_chksum_compared_t
|
|
||||||
ld a, c
|
|
||||||
sub l
|
|
||||||
_uip_arch_chksum_compared_t:
|
|
||||||
jr nc, _uip_arch_chksum_nocarry_t
|
|
||||||
inc bc
|
|
||||||
_uip_arch_chksum_nocarry_t:
|
|
||||||
jr _uip_arch_chksum_loop
|
|
||||||
_uip_arch_chksum_loop_exit_add_trailing:
|
|
||||||
;; HL = last address
|
|
||||||
;; bc = bc + (last address)<<8
|
|
||||||
ld a, b
|
|
||||||
add a, (hl)
|
|
||||||
ld b, a
|
|
||||||
jr nc, _uip_arch_chksum_loop_exit
|
|
||||||
inc bc
|
|
||||||
_uip_arch_chksum_loop_exit:
|
|
||||||
ld l, c
|
|
||||||
ld h, b
|
|
||||||
pop ix
|
|
||||||
ret
|
|
||||||
_uip_arch_chksum_end::
|
|
||||||
|
|
||||||
;; ---------------------------------
|
|
||||||
;; uint16_t uip_chksum(void);
|
|
||||||
;; Stack; retl reth datal datah lenl lenh
|
|
||||||
;; ABCDEHL____
|
|
||||||
;; return HL
|
|
||||||
;; return htons(chksum(0, (uint8_t *)data, len));
|
|
||||||
;; ---------------------------------
|
|
||||||
_uip_chksum_start::
|
|
||||||
_uip_chksum:
|
|
||||||
ld hl, #5
|
|
||||||
add hl, sp
|
|
||||||
;; HL indicates #_lenh
|
|
||||||
ld b, #2
|
|
||||||
_uip_chksum_loop:
|
|
||||||
ld d, (hl)
|
|
||||||
dec hl
|
|
||||||
ld e, (hl)
|
|
||||||
dec hl
|
|
||||||
push de
|
|
||||||
djnz _uip_chksum_loop
|
|
||||||
ld bc, #0
|
|
||||||
push bc
|
|
||||||
call _uip_arch_chksum
|
|
||||||
pop af
|
|
||||||
pop af
|
|
||||||
pop af
|
|
||||||
;; convert to BIG ENDIAN (htons)
|
|
||||||
ld a, l
|
|
||||||
ld l, h
|
|
||||||
ld h, a
|
|
||||||
ret
|
|
||||||
_uip_chksum_end::
|
|
@ -1,215 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* Z80 architecture-depend uip module
|
|
||||||
* for calculating checksums
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include "uip_arch.h"
|
|
||||||
|
|
||||||
static const uint16_t sizeof_uip_ipaddr_t = sizeof(uip_ipaddr_t);
|
|
||||||
static const uint16_t offset_tcpip_hdr_len = offsetof(struct uip_tcpip_hdr, len);
|
|
||||||
static const uint16_t offset_tcpip_hdr_srcipaddr = offsetof(struct uip_tcpip_hdr, srcipaddr);
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
static void upper_layer_chksum() {
|
|
||||||
__asm
|
|
||||||
;; ---------------------------------
|
|
||||||
;; static uint16_t upper_layer_chksum(uint8_t proto);
|
|
||||||
;; Stack; retl reth
|
|
||||||
;; @param C proto
|
|
||||||
;; ABCDEHL____
|
|
||||||
;; ---------------------------------
|
|
||||||
;; HL = BUF = &uip_buf[UIP_LLH_LEN]
|
|
||||||
ld hl, #_uip_buf
|
|
||||||
ld de, #UIP_LLH_LEN
|
|
||||||
add hl, de
|
|
||||||
push hl
|
|
||||||
|
|
||||||
;; HL = BUF->len[0]
|
|
||||||
push ix
|
|
||||||
ld ix, #_offset_tcpip_hdr_len
|
|
||||||
ld e, 0(ix)
|
|
||||||
ld d, 1(ix)
|
|
||||||
add hl, de
|
|
||||||
pop ix
|
|
||||||
|
|
||||||
;; DE = upper layer length
|
|
||||||
ld d, (hl)
|
|
||||||
inc hl
|
|
||||||
ld e, (hl)
|
|
||||||
#if UIP_CONF_IPV6
|
|
||||||
#else
|
|
||||||
ld a, e
|
|
||||||
sub a, #UIP_IPH_LEN
|
|
||||||
ld e, a
|
|
||||||
jr nc, _upper_layer_chksum_setlen2
|
|
||||||
dec d
|
|
||||||
_upper_layer_chksum_setlen2:
|
|
||||||
#endif
|
|
||||||
;; bc = upper_leyer_len + proto
|
|
||||||
ld b, d
|
|
||||||
ld a, e
|
|
||||||
add a, c
|
|
||||||
ld c, a
|
|
||||||
jr nc, _upper_layer_chksum_setlen3
|
|
||||||
inc b
|
|
||||||
_upper_layer_chksum_setlen3:
|
|
||||||
pop hl ; BUF
|
|
||||||
push de
|
|
||||||
push ix
|
|
||||||
ld ix, #_offset_tcpip_hdr_srcipaddr
|
|
||||||
ld e, 0(ix)
|
|
||||||
ld d, 1(ix)
|
|
||||||
add hl, de
|
|
||||||
ld e, l
|
|
||||||
ld d, h
|
|
||||||
ld ix, #_sizeof_uip_ipaddr_t
|
|
||||||
ld l, 0(ix)
|
|
||||||
ld h, 1(ix)
|
|
||||||
pop ix
|
|
||||||
sla l
|
|
||||||
rl h
|
|
||||||
push hl
|
|
||||||
push de
|
|
||||||
push bc
|
|
||||||
call _uip_arch_chksum ; hl = sum
|
|
||||||
pop af
|
|
||||||
pop af
|
|
||||||
pop af
|
|
||||||
;; de is still stacked
|
|
||||||
|
|
||||||
ld b, h
|
|
||||||
ld c, l
|
|
||||||
ld hl, #_uip_buf
|
|
||||||
ld de, #UIP_IPH_LEN
|
|
||||||
add hl, de
|
|
||||||
_upper_layer_chksum_call:
|
|
||||||
ld de, #UIP_LLH_LEN
|
|
||||||
add hl, de
|
|
||||||
push hl
|
|
||||||
push bc
|
|
||||||
call _uip_arch_chksum
|
|
||||||
pop af
|
|
||||||
pop af
|
|
||||||
pop af
|
|
||||||
|
|
||||||
ld a, h
|
|
||||||
or a, l
|
|
||||||
jr nz, _upper_layer_uip_htons
|
|
||||||
ld hl, #0xffff
|
|
||||||
jr _upper_layer_ret
|
|
||||||
_upper_layer_uip_htons:
|
|
||||||
ld a, l
|
|
||||||
ld l, h
|
|
||||||
ld h, a
|
|
||||||
_upper_layer_ret:
|
|
||||||
__endasm;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
uint16_t
|
|
||||||
uip_ipchksum(void)
|
|
||||||
{
|
|
||||||
__asm
|
|
||||||
;; ---------------------------------
|
|
||||||
;; uint16_t uip_ipchksum(void);
|
|
||||||
;; Stack; retl reth
|
|
||||||
;; ABCDEHL____
|
|
||||||
;; return HL
|
|
||||||
;; ---------------------------------
|
|
||||||
ld hl, #UIP_IPH_LEN
|
|
||||||
push hl
|
|
||||||
;; HL = BUF = &uip_buf[UIP_LLH_LEN]
|
|
||||||
ld hl, #_uip_buf
|
|
||||||
;; BC = sum = 0
|
|
||||||
ld bc, #0
|
|
||||||
jp _upper_layer_chksum_call
|
|
||||||
__endasm;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
#if UIP_CONF_IPV6
|
|
||||||
uint16_t
|
|
||||||
uip_icmp6chksum(void)
|
|
||||||
{
|
|
||||||
__asm
|
|
||||||
;; ---------------------------------
|
|
||||||
;; uint16_t uip_icmp6chksum(void);
|
|
||||||
;; Stack; retl reth
|
|
||||||
;; ABCDEHL____
|
|
||||||
;; return HL
|
|
||||||
;; ---------------------------------
|
|
||||||
ld c, #UIP_PROTO_ICMP6
|
|
||||||
jp _upper_layer_chksum
|
|
||||||
__endasm;
|
|
||||||
}
|
|
||||||
#endif /* UIP_CONF_IPV6 */
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
uint16_t
|
|
||||||
uip_tcpchksum(void)
|
|
||||||
{
|
|
||||||
__asm
|
|
||||||
;; ---------------------------------
|
|
||||||
;; uint16_t uip_tcpchksum(void);
|
|
||||||
;; Stack; retl reth
|
|
||||||
;; ABCDEHL____
|
|
||||||
;; return HL
|
|
||||||
;; ---------------------------------
|
|
||||||
ld c, #UIP_PROTO_TCP
|
|
||||||
jp _upper_layer_chksum
|
|
||||||
__endasm;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
||||||
#if UIP_UDP_CHKSUMS
|
|
||||||
uint16_t
|
|
||||||
uip_udpchksum(void)
|
|
||||||
{
|
|
||||||
__asm
|
|
||||||
;; ---------------------------------
|
|
||||||
;; uint16_t uip_udpchksum(void);
|
|
||||||
;; Stack; retl reth
|
|
||||||
;; ABCDEHL____
|
|
||||||
;; return HL
|
|
||||||
;; ---------------------------------
|
|
||||||
ld c, #UIP_PROTO_UDP
|
|
||||||
jp _upper_layer_chksum
|
|
||||||
__endasm;
|
|
||||||
}
|
|
||||||
#endif /* UIP_UDP_CHKSUMS */
|
|
||||||
/*--------------------------------------------------------------------------*/
|
|
@ -1,91 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2007, Takahide Matsutsuka.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above
|
|
||||||
* copyright notice, this list of conditions and the following
|
|
||||||
* disclaimer in the documentation and/or other materials provided
|
|
||||||
* with the distribution.
|
|
||||||
* 3. The name of the author may not be used to endorse or promote
|
|
||||||
* products derived from this software without specific prior
|
|
||||||
* written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
||||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
|
||||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
||||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* \file
|
|
||||||
* This file contains a set of configuration for using SDCC as a compiler.
|
|
||||||
*
|
|
||||||
* \author
|
|
||||||
* Takahide Matsutsuka <markn@markn.org>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __Z80_DEF_H__
|
|
||||||
#define __Z80_DEF_H__
|
|
||||||
|
|
||||||
#define CC_CONF_FUNCTION_POINTER_ARGS 1
|
|
||||||
#define CC_CONF_FASTCALL
|
|
||||||
#define CC_CONF_VA_ARGS 0
|
|
||||||
#define CC_CONF_UNSIGNED_CHAR_BUGS 0
|
|
||||||
#define CC_CONF_REGISTER_ARGS 0
|
|
||||||
|
|
||||||
|
|
||||||
/* Generic types. */
|
|
||||||
typedef signed char int8_t;
|
|
||||||
typedef unsigned char uint8_t;
|
|
||||||
typedef signed short int16_t;
|
|
||||||
typedef unsigned short uint16_t;
|
|
||||||
typedef unsigned long uint32_t;
|
|
||||||
typedef unsigned char u8_t; /* 8 bit type */
|
|
||||||
typedef unsigned short u16_t; /* 16 bit type */
|
|
||||||
typedef unsigned long u32_t; /* 32 bit type */
|
|
||||||
typedef signed long s32_t; /* 32 bit type */
|
|
||||||
typedef unsigned short uip_stats_t;
|
|
||||||
typedef signed long int32_t; /* 32 bit type */
|
|
||||||
#ifndef _SIZE_T_DEFINED
|
|
||||||
#define _SIZE_T_DEFINED
|
|
||||||
typedef unsigned int size_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Compiler configurations */
|
|
||||||
#define CCIF
|
|
||||||
#define CLIF
|
|
||||||
#define CC_CONF_CONST_FUNCTION_BUG
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Enable architecture-depend checksum calculation
|
|
||||||
* for uIP configuration.
|
|
||||||
* @see uip_arch.h
|
|
||||||
* @see uip_arch-asm.S
|
|
||||||
*/
|
|
||||||
#define UIP_ARCH_ADD32 1
|
|
||||||
#define UIP_ARCH_CHKSUM 1
|
|
||||||
#define UIP_ARCH_IPCHKSUM
|
|
||||||
|
|
||||||
#define CC_CONF_ASSIGN_AGGREGATE(dest, src) \
|
|
||||||
memcpy(dest, src, sizeof(*dest))
|
|
||||||
|
|
||||||
#define uip_ipaddr_copy(dest, src) \
|
|
||||||
memcpy(dest, src, sizeof(*dest))
|
|
||||||
|
|
||||||
#define snprintf(a...)
|
|
||||||
|
|
||||||
#endif /* __Z80_DEF_H__ */
|
|
@ -1,183 +0,0 @@
|
|||||||
#
|
|
||||||
# Customized peep-hole optimizer for z80/SDCC
|
|
||||||
# @author Takahide Matsutsuka <markn@markn.org>
|
|
||||||
#
|
|
||||||
# $Id: z80peephole.def,v 1.1 2009/12/11 14:59:32 matsutsuka Exp $
|
|
||||||
#
|
|
||||||
|
|
||||||
replace {
|
|
||||||
ld hl, %1
|
|
||||||
ld (hl), #0x%2
|
|
||||||
inc hl
|
|
||||||
ld (hl), #0x%3
|
|
||||||
} by {
|
|
||||||
;; (peep) 1 short store
|
|
||||||
ld hl, #0x%3%2
|
|
||||||
ld (%1), hl
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
ld hl, %1 + 0
|
|
||||||
ld (hl), %2
|
|
||||||
ld hl, %1 + 1
|
|
||||||
ld (hl), %3
|
|
||||||
} by {
|
|
||||||
;; (peep) 2 short store
|
|
||||||
ld hl, %1
|
|
||||||
ld (hl), %2
|
|
||||||
inc hl
|
|
||||||
ld (hl), %3
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
sub a, #0x01
|
|
||||||
jr Z, %1
|
|
||||||
} by {
|
|
||||||
;; (peep) 3 decrement optimization
|
|
||||||
dec a
|
|
||||||
jr z, %1
|
|
||||||
}
|
|
||||||
replace {
|
|
||||||
sub a, #0x01
|
|
||||||
jr NZ, %1
|
|
||||||
} by {
|
|
||||||
;; (peep) 4 decrement optimization
|
|
||||||
dec a
|
|
||||||
jr nz, %1
|
|
||||||
}
|
|
||||||
replace {
|
|
||||||
sub a, #0x01
|
|
||||||
jp Z, %1
|
|
||||||
} by {
|
|
||||||
;; (peep) 5 decrement optimization
|
|
||||||
dec a
|
|
||||||
jp z, %1
|
|
||||||
}
|
|
||||||
replace {
|
|
||||||
sub a, #0x01
|
|
||||||
jp NZ, %1
|
|
||||||
} by {
|
|
||||||
;; (peep) 6 decrement optimization
|
|
||||||
dec a
|
|
||||||
jp nz, %1
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
push %1
|
|
||||||
pop iy
|
|
||||||
ld a, (iy)
|
|
||||||
or a, a
|
|
||||||
} by {
|
|
||||||
;; (peep) 7 or optimization
|
|
||||||
ld a, (%1)
|
|
||||||
or a, a
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
ld iy, %1
|
|
||||||
ld a, 0 (iy)
|
|
||||||
} by {
|
|
||||||
;; (peep) 8 iy optimization
|
|
||||||
ld a, (%1)
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
ld iy, %1
|
|
||||||
ld 0 (iy), a
|
|
||||||
} by {
|
|
||||||
;; (peep) 9 iy optimization
|
|
||||||
ld (%1), a
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
push %1
|
|
||||||
pop iy
|
|
||||||
ld (iy), %2
|
|
||||||
} by {
|
|
||||||
;; (peep) 10 iy optimization
|
|
||||||
ld a, %2
|
|
||||||
ld (%1), a
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
ld iy, %1
|
|
||||||
ld %2,0 (iy)
|
|
||||||
ld iy, %1
|
|
||||||
ld %3,1 (iy)
|
|
||||||
ld iy, %1
|
|
||||||
ld %4,2 (iy)
|
|
||||||
ld iy, %1
|
|
||||||
ld %5,3 (iy)
|
|
||||||
} by {
|
|
||||||
;; (peep) 11 iy optimization
|
|
||||||
ld iy, %1
|
|
||||||
ld %2,0 (iy)
|
|
||||||
ld %3,1 (iy)
|
|
||||||
ld %4,2 (iy)
|
|
||||||
ld %5,3 (iy)
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
ld iy, %1
|
|
||||||
ld %2,0 (iy)
|
|
||||||
ld iy, %1
|
|
||||||
ld %3,1 (iy)
|
|
||||||
} by {
|
|
||||||
;; (peep) 12 iy optimization
|
|
||||||
ld iy, %1
|
|
||||||
ld %2,0 (iy)
|
|
||||||
ld %3,1 (iy)
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
ld iy, %1
|
|
||||||
ld 0 (iy), %2
|
|
||||||
ld iy, %1
|
|
||||||
ld 1 (iy), %3
|
|
||||||
ld iy, %1
|
|
||||||
ld 2 (iy), %4
|
|
||||||
ld iy, %1
|
|
||||||
ld 3 (iy), %5
|
|
||||||
} by {
|
|
||||||
;; (peep) 13 iy optimization
|
|
||||||
ld iy, %1
|
|
||||||
ld 0 (iy), %2
|
|
||||||
ld 1 (iy), %3
|
|
||||||
ld 2 (iy), %4
|
|
||||||
ld 3 (iy), %5
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
ld iy, %1
|
|
||||||
ld 0 (iy), %2
|
|
||||||
ld iy, %1
|
|
||||||
ld 1 (iy), %3
|
|
||||||
} by {
|
|
||||||
;; (peep) 14 iy optimization
|
|
||||||
ld iy, %1
|
|
||||||
ld 0 (iy), %2
|
|
||||||
ld 1 (iy), %3
|
|
||||||
}
|
|
||||||
|
|
||||||
replace {
|
|
||||||
jp %1
|
|
||||||
%2:
|
|
||||||
} by {
|
|
||||||
;; (peep) 15 short jump optimization
|
|
||||||
jr %1
|
|
||||||
%2:
|
|
||||||
} if labelInRange
|
|
||||||
|
|
||||||
replace {
|
|
||||||
ld c,%3 (ix)
|
|
||||||
ld b,%4 (ix)
|
|
||||||
push bc
|
|
||||||
pop iy
|
|
||||||
ld 0 (iy), #0x%6
|
|
||||||
ld 1 (iy), #0x%5
|
|
||||||
} by {
|
|
||||||
;; (peep) 16 store value
|
|
||||||
ld l, %3 (ix)
|
|
||||||
ld h, %4 (ix)
|
|
||||||
ld (hl), #0x%5%6
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user