]> rtime.felk.cvut.cz Git - sysless.git/commitdiff
Major uLan embedded sources tree restructuring.
authorppisa <ppisa>
Mon, 3 Oct 2005 12:43:22 +0000 (12:43 +0000)
committerppisa <ppisa>
Mon, 3 Oct 2005 12:43:22 +0000 (12:43 +0000)
88 files changed:
arch/Makefile [new file with mode: 0644]
arch/Makefile.omk [new file with mode: 0644]
arch/generic/Makefile [new file with mode: 0644]
arch/generic/Makefile.omk [new file with mode: 0644]
arch/generic/defines/Makefile [new file with mode: 0644]
arch/generic/defines/Makefile.omk [new file with mode: 0644]
arch/generic/defines/byteswap.h [new file with mode: 0644]
arch/generic/defines/endian.h [new file with mode: 0644]
arch/mcs51/Makefile [new file with mode: 0644]
arch/mcs51/Makefile.omk [new file with mode: 0644]
arch/mcs51/generic/Makefile [new file with mode: 0644]
arch/mcs51/generic/Makefile.omk [new file with mode: 0644]
arch/mcs51/generic/defines/Makefile [new file with mode: 0644]
arch/mcs51/generic/defines/Makefile.omk [new file with mode: 0644]
arch/mcs51/generic/defines/cpu_def.h [new file with mode: 0644]
arch/mcs51/generic/defines/types.h [new file with mode: 0644]
arch/mcs51/generic/libs/Makefile [new file with mode: 0644]
arch/mcs51/generic/libs/Makefile.omk [new file with mode: 0644]
arch/mcs51/generic/libs/misc/Makefile [new file with mode: 0644]
arch/mcs51/generic/libs/misc/Makefile.omk [new file with mode: 0644]
arch/mcs51/generic/libs/misc/config-vect-msc-app.inc [new file with mode: 0644]
arch/mcs51/generic/libs/misc/config-vect-msc-boot.inc [new file with mode: 0644]
arch/mcs51/generic/libs/misc/vect.h [new file with mode: 0644]
arch/mcs51/generic/libs/misc/vect_a2c.c [new file with mode: 0644]
arch/mcs51/generic/libs/misc/vect_fnc.asm [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/Makefile [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/Makefile.omk [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/config-generic-hisc.inc [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/config-generic-ulad21.inc [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/config-mscboot-hisc.inc [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/config-mscboot-ulad21.inc [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/config-u2u-ps1.inc [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/config-u2u-ulad21.inc [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/reg1210.inc [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/ul_drv_fnc.c [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/ul_drv_fnc.h [new file with mode: 0644]
arch/mcs51/generic/libs/ulan/ul_idstr.c [new file with mode: 0644]
arch/mcs51/mach-at89c51ed2/Makefile [new file with mode: 0644]
arch/mcs51/mach-at89c51ed2/Makefile.omk [new file with mode: 0644]
arch/mcs51/mach-at89c51ed2/defines/Makefile [new file with mode: 0644]
arch/mcs51/mach-at89c51ed2/defines/Makefile.omk [new file with mode: 0644]
arch/mcs51/mach-at89c51ed2/defines/mcu_regs.h [new file with mode: 0644]
arch/mcs51/mach-msc1210/Makefile [new file with mode: 0644]
arch/mcs51/mach-msc1210/Makefile.omk [new file with mode: 0644]
arch/mcs51/mach-msc1210/defines/Makefile [new file with mode: 0644]
arch/mcs51/mach-msc1210/defines/Makefile.omk [new file with mode: 0644]
arch/mcs51/mach-msc1210/defines/mcu_regs.h [new file with mode: 0644]
arch/mcs51/mach-msc1210/defines/reg1210.hke [new file with mode: 0644]
arch/mcs51/mach-msc1210/defines/reg1210.hsd [new file with mode: 0644]
arch/mcs51/mach-msc1210/libs/Makefile [new file with mode: 0644]
arch/mcs51/mach-msc1210/libs/Makefile.omk [new file with mode: 0644]
arch/mcs51/mach-msc1210/libs/flash/Makefile [new file with mode: 0644]
arch/mcs51/mach-msc1210/libs/flash/Makefile.omk [new file with mode: 0644]
arch/mcs51/mach-msc1210/libs/flash/mscflash.asm [new file with mode: 0644]
arch/mcs51/mach-msc1210/libs/flash/mscflash.h [new file with mode: 0644]
arch/mcs51/mach-msc1210/libs/flash/mscflash_a2c.c [new file with mode: 0644]
arch/mcs51/mach-msc1210/libs/msc_loader.c [new file with mode: 0644]
board/Makefile [new file with mode: 0644]
board/Makefile.omk [new file with mode: 0644]
board/mcs51/Makefile [new file with mode: 0644]
board/mcs51/Makefile.omk [new file with mode: 0644]
board/mcs51/hisc/Makefile [new file with mode: 0644]
board/mcs51/hisc/Makefile.omk [new file with mode: 0644]
board/mcs51/hisc/config/config.blinder [new file with mode: 0644]
board/mcs51/hisc/config/config.heating-kswtimer [new file with mode: 0644]
board/mcs51/hisc/config/config.mscboot [new file with mode: 0644]
board/mcs51/hisc/system_def.h [new file with mode: 0644]
board/mcs51/ps1/Makefile [new file with mode: 0644]
board/mcs51/ps1/Makefile.omk [new file with mode: 0644]
board/mcs51/ps1/config/config.u2u [new file with mode: 0644]
board/mcs51/ps1/i2c.c [new file with mode: 0644]
board/mcs51/ps1/periph/i2c.h [new file with mode: 0644]
board/mcs51/ps1/system_def.h [new file with mode: 0644]
board/mcs51/ulad21/Makefile [new file with mode: 0644]
board/mcs51/ulad21/Makefile.omk [new file with mode: 0644]
board/mcs51/ulad21/config/config.mscboot [new file with mode: 0644]
board/mcs51/ulad21/config/config.thermometer [new file with mode: 0644]
board/mcs51/ulad21/config/config.u2u [new file with mode: 0644]
board/mcs51/ulad21/i2c.c [new file with mode: 0644]
board/mcs51/ulad21/periph/i2c.h [new file with mode: 0644]
board/mcs51/ulad21/system_def.h [new file with mode: 0644]
board/mcs51/ulad21/system_def_msc51_uc1.h [new file with mode: 0644]
libs4c/keyval/Makefile.omk
libs4c/keyval/keyvalpb.h
libs4c/usb/Makefile.omk
libs4c/usb/base/Makefile.omk
libs4c/usb/more/Makefile.omk
libs4c/usb/pdiusb/Makefile.omk

diff --git a/arch/Makefile b/arch/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/Makefile.omk b/arch/Makefile.omk
new file mode 100644 (file)
index 0000000..974732f
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+SUBDIRS = generic $(ARCH)
diff --git a/arch/generic/Makefile b/arch/generic/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/generic/Makefile.omk b/arch/generic/Makefile.omk
new file mode 100644 (file)
index 0000000..4291134
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+SUBDIRS = defines
\ No newline at end of file
diff --git a/arch/generic/defines/Makefile b/arch/generic/defines/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/generic/defines/Makefile.omk b/arch/generic/defines/Makefile.omk
new file mode 100644 (file)
index 0000000..85e6bad
--- /dev/null
@@ -0,0 +1,4 @@
+# -*- makefile -*-
+
+include_HEADERS +=  byteswap.h endian.h 
+#include_HEADERS = $(notdir $(wildcard $(SOURCES_DIR)/*.h)) 
diff --git a/arch/generic/defines/byteswap.h b/arch/generic/defines/byteswap.h
new file mode 100644 (file)
index 0000000..2324696
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _BYTESWAP_H
+#define _BYTESWAP_H    1
+
+#if defined(__KEIL__)
+#define __bswap_16(x) ( (((x) << 8) & 0xFF00) | (((x) >> 8) & 0x00FF) )
+#else
+#define __bswap_16(x) ({unsigned short __x=(x); \
+                       (((__x>>8)&0xff)|((__x&0xff)<<8)); })
+#endif
+
+#if defined(__KEIL__)
+    //todo
+#else
+#define __bswap_32(x) ({unsigned long __y=(x); \
+                       (__bswap_16(__y>>16)|__bswap_16(__y)<<16); })
+#endif
+
+#define bswap_16(x) __bswap_16 (x)
+
+#define bswap_32(x) __bswap_32 (x)
+
+#endif /* byteswap.h */
diff --git a/arch/generic/defines/endian.h b/arch/generic/defines/endian.h
new file mode 100644 (file)
index 0000000..13d6d51
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef        _ENDIAN_H
+#define        _ENDIAN_H       1
+
+#define        __LITTLE_ENDIAN 1234
+#define        __BIG_ENDIAN    4321
+#define        __PDP_ENDIAN    3412
+
+#if defined(__i386__) || defined(SDCC) || defined (__ARMEL__)
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#endif
+
+#if defined(__H8300__) || defined(__H8500__) || defined (__H8300H__) ||  defined(__W65__) || defined (__H8300S__) || defined (__m68k__) || defined (__ARMEB__) || defined(__KEIL__)
+#define __BYTE_ORDER __BIG_ENDIAN
+#endif
+
+#endif /* endian.h */
diff --git a/arch/mcs51/Makefile b/arch/mcs51/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/Makefile.omk b/arch/mcs51/Makefile.omk
new file mode 100644 (file)
index 0000000..4e726a8
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+SUBDIRS = generic mach-$(MACH)
diff --git a/arch/mcs51/generic/Makefile b/arch/mcs51/generic/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/generic/Makefile.omk b/arch/mcs51/generic/Makefile.omk
new file mode 100644 (file)
index 0000000..dba8475
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+SUBDIRS = defines libs
diff --git a/arch/mcs51/generic/defines/Makefile b/arch/mcs51/generic/defines/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/generic/defines/Makefile.omk b/arch/mcs51/generic/defines/Makefile.omk
new file mode 100644 (file)
index 0000000..690f1ce
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+include_HEADERS =  cpu_def.h types.h
\ No newline at end of file
diff --git a/arch/mcs51/generic/defines/cpu_def.h b/arch/mcs51/generic/defines/cpu_def.h
new file mode 100644 (file)
index 0000000..d13ce7c
--- /dev/null
@@ -0,0 +1,20 @@
+
+#if defined(SDCC) // sdcc
+  #ifndef NULL
+    #define NULL 0x0000
+  #endif /*NULL*/ 
+#endif // keil, gcc ???
+
+#ifndef CODE
+  #define CODE code
+#endif
+
+#ifndef XDATA
+  #define XDATA xdata
+#endif
+
+#ifndef DATA
+  #define DATA data
+#endif
+
+#define inline
diff --git a/arch/mcs51/generic/defines/types.h b/arch/mcs51/generic/defines/types.h
new file mode 100644 (file)
index 0000000..615e0f1
--- /dev/null
@@ -0,0 +1,72 @@
+#ifndef _MSC1210_TYPES_H
+#define _MSC1210_TYPES_H
+
+
+typedef unsigned short umode_t;
+
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+#define __signed__ signed
+
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+#if defined (__KEIL__) || (SDCC) || __INT_MAX__ == 32767
+typedef __signed__ long __s32;
+typedef unsigned long __u32;
+#else
+typedef int __s32;
+typedef unsigned int __u32;
+#endif
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+typedef __signed__ long long __s64;
+typedef unsigned long long __u64;
+#endif
+
+#ifndef __BIT_TYPES_DEFINED__
+#define __BIT_TYPES_DEFINED__
+
+typedef __u8  uint8_t;
+typedef __s8  int8_t;
+typedef __u16 uint16_t;
+typedef __s16 int16_t;
+typedef __u32 uint32_t;
+typedef __s32 int32_t;
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+typedef __s64 int64_t;
+typedef __u64 uint64_t;
+#endif
+
+#endif /* !(__BIT_TYPES_DEFINED__) */
+
+
+/*
+ * These aren't exported outside the kernel to avoid name space clashes
+ */
+#ifdef __KERNEL__
+
+typedef __s8 s8;
+typedef __u8 u8;
+
+typedef __s16 s16;
+typedef __u16 u16;
+
+typedef __s32 s32;
+typedef __u32 u32;
+
+typedef __s64 s64;
+typedef __s64 u64;
+
+#define BITS_PER_LONG 32
+
+#endif /* __KERNEL__ */
+
+#endif /* _MSC1210_TYPES_H */
diff --git a/arch/mcs51/generic/libs/Makefile b/arch/mcs51/generic/libs/Makefile
new file mode 100644 (file)
index 0000000..bdb6d45
--- /dev/null
@@ -0,0 +1,15 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
+# DO NOT DELETE
diff --git a/arch/mcs51/generic/libs/Makefile.omk b/arch/mcs51/generic/libs/Makefile.omk
new file mode 100644 (file)
index 0000000..f56d88f
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+SUBDIRS = ulan misc 
diff --git a/arch/mcs51/generic/libs/misc/Makefile b/arch/mcs51/generic/libs/misc/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/generic/libs/misc/Makefile.omk b/arch/mcs51/generic/libs/misc/Makefile.omk
new file mode 100644 (file)
index 0000000..90a06c9
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- makefile -*-
+
+default_CONFIG += CONFIG_MISC_VECT_MSC_BOOT=n
+default_CONFIG += CONFIG_MISC_VECT_MSC_APP=n
+
+ifeq ($(CONFIG_MISC_VECT_MSC_BOOT),y)
+asm_build_HEADERS += \
+config-vect-msc-boot.inc->cf_vect.inc
+lib_LIBRARIES = misc
+include_HEADERS += vect.h
+misc_SOURCES += vect_a2c.c vect_fnc.asm
+endif #CONFIG_MISC_VECT_BOOT
+
+ifeq ($(CONFIG_MISC_VECT_MSC_APP),y)
+asm_build_HEADERS += \
+config-vect-msc-app.inc->cf_vect.inc
+lib_LIBRARIES = misc
+include_HEADERS += vect.h
+misc_SOURCES += vect_a2c.c vect_fnc.asm
+endif #CONFIG_MISC_VECT_APP
diff --git a/arch/mcs51/generic/libs/misc/config-vect-msc-app.inc b/arch/mcs51/generic/libs/misc/config-vect-msc-app.inc
new file mode 100644 (file)
index 0000000..63b3323
--- /dev/null
@@ -0,0 +1,7 @@
+%DEFINE (FOR_SDCC)              (1)     ; The SDCC ASX8051 is used
+%DEFINE (FOR_BOOTLOADER)        (0)  
+%DEFINE (TGT_MSC1210)           (1)     ; Kod pro MSC1210 
+
+VEC_ARR XDATA 8400H
+VEC_CAR CODE 8400H
+\r
diff --git a/arch/mcs51/generic/libs/misc/config-vect-msc-boot.inc b/arch/mcs51/generic/libs/misc/config-vect-msc-boot.inc
new file mode 100644 (file)
index 0000000..83d1154
--- /dev/null
@@ -0,0 +1,11 @@
+%DEFINE (FOR_SDCC)              (1)     ; The SDCC ASX8051 is used
+%DEFINE (FOR_BOOTLOADER)        (1)
+%DEFINE (TGT_MSC1210)           (1)     ; Kod pro MSC1210 
+
+VEC_ARR XDATA 8400H
+VEC_CAR CODE 8400H
+
+VEC_STA CODE 2000H
+
+
+\r
diff --git a/arch/mcs51/generic/libs/misc/vect.h b/arch/mcs51/generic/libs/misc/vect.h
new file mode 100644 (file)
index 0000000..7494349
--- /dev/null
@@ -0,0 +1,57 @@
+#ifndef _VECT_H
+#define _VECT_H
+
+#ifdef __cplusplus
+/*extern "C" {*/
+#endif
+
+#if !defined(SDCC_MODEL_LARGE) || !defined(SDCC)
+  #define VECT_FNC_REENTRANT
+#else
+  #define VECT_FNC_REENTRANT reentrant
+#endif
+
+typedef code void (*prot_int)(void) interrupt;
+
+void code *vec_set(prot_int fnc,unsigned char vec) VECT_FNC_REENTRANT;
+void vec_jmp(unsigned char vec); 
+
+#define        IADDR_EXTI0     0x03
+#define        IADDR_SYSFNC    0x06
+#define        IADDR_TIMER0    0x0B
+//#define      VADDR_?         0x0E
+#define        IADDR_EXTI1     0x13
+//#define      VADDR_?         0x16
+#define        IADDR_TIMER1    0x1B
+#define        IADDR_V_uL_ADD  0x1E
+#define        IADDR_SINT      0x23
+#define        IADDR_SINT      0x23
+#define        IADDR_V_uL_FNC  0x26
+#define        IADDR_SIIC      0x2B
+#define        IADDR_TIMER2    0x2B
+//#define      VADDR_?         0x2E
+#define        IADDR_T2CAP0    0x33
+//#define      VADDR_?         0x36
+#define        IADDR_T2CAP1    0x3B
+//#define      VADDR_?         0x3E
+#define        IADDR_T2CAP2    0x43
+//#define      VADDR_?         0x46
+#define        IADDR_T2CAP3    0x4B
+//#define      VADDR_?         0x4E
+#define        IADDR_ADCINT    0x53
+//#define      VADDR_?         0x56
+#define        IADDR_T2CMP0    0x5B
+//#define      VADDR_?         0x5E
+#define        IADDR_T2CMP1    0x63
+//#define      VADDR_?         0x66
+#define        IADDR_T2CMP2    0x6B
+//#define      VADDR_?         0x6E
+//#define      IADDR_TIMER2    0x73
+#define        IADDR_ASTARTUP    0x7B  
+
+#ifdef __cplusplus
+/*}*/ /* extern "C"*/
+#endif
+
+#endif /* _VECT_H */
+
diff --git a/arch/mcs51/generic/libs/misc/vect_a2c.c b/arch/mcs51/generic/libs/misc/vect_a2c.c
new file mode 100644 (file)
index 0000000..e61fa6e
--- /dev/null
@@ -0,0 +1,72 @@
+#include "vect.h"
+
+#ifdef SDCC
+#ifndef SDCC_MODEL_LARGE
+data unsigned char vec_param1;
+#endif /* SDCC_MODEL_LARGE */
+#endif /* SDCC */
+
+#ifdef SDCC
+#ifndef SDCC_MODEL_LARGE
+void code *vec_set(prot_int fnc,unsigned char vec)
+{
+  vec_param1=vec;
+  _asm
+       .globl vec_set
+       mov  r4,_vec_param1
+       lcall vec_set
+       mov  dpl,r4
+       mov  dph,r5
+  _endasm;
+}
+#else
+/* For large model
+ * vec   Allocated to stack - offset -3  (the push _bp taken into account)
+ * fnc Allocated to registers 
+ */
+void code *vec_set(prot_int fnc,unsigned char vec) reentrant
+{
+  _asm
+       .globl vec_set
+       mov  a,sp
+       add  a,#-3
+       mov  r0,a
+       mov  a,@r0
+       mov  r4,a
+       lcall vec_set
+       mov  dpl,r4
+       mov  dph,r5
+  _endasm;
+}
+#endif /* SDCC_MODEL_LARGE */
+#else
+void code *vec_set(void code *fnc,unsigned char vec)
+{
+#pragma asm
+       extrn code(VEC_SET)
+       mov  dpl,r7     ; fnc address into DPTR
+       mov  dph,r6
+        mov  a,r5       ; vec into r4
+        mov  r4,a
+       lcall VEC_SET   ; 
+       mov  a,r4
+       mov  r7,a
+       mov  a,r5       ; return previous vector setting
+       mov  r6,a
+#pragma endasm
+}
+#endif /* SDCC */
+
+#ifdef SDCC
+void vec_jmp(unsigned char vec) 
+{
+  _asm
+       .globl vec_get
+       mov   dph,#0
+       clr  a
+       jmp  @a+dptr
+  _endasm;
+}
+#else /*SDCC*/
+#error "todo!"
+#endif
diff --git a/arch/mcs51/generic/libs/misc/vect_fnc.asm b/arch/mcs51/generic/libs/misc/vect_fnc.asm
new file mode 100644 (file)
index 0000000..88c45a9
--- /dev/null
@@ -0,0 +1,140 @@
+$INCLUDE(cf_vect.inc)\r
+
+%IF(%TGT_MSC1210)THEN(
+EICON   DATA  0D8H
+AIE     DATA  0A6H
+EIE     DATA  0E8H
+PDCON   DATA  0F1H
+EWU     DATA  0C6H
+)FI
+
+PUBLIC VEC_SET,VEC_USR,VEC_GET
+
+%IF(%FOR_SDCC)THEN(
+PUBLIC __SDCC_EXTERNAL_STARTUP
+)ELSE(
+EXTRN CODE(?C_START)
+PUBLIC ?C_STARTUP
+?STACK__I SEGMENT IDATA
+       RSEG    ?STACK__I
+        DS      1
+)FI
+
+C51START__C SEGMENT CODE
+
+       RSEG    C51START__C
+
+%IF(%FOR_BOOTLOADER)THEN(
+CSEG AT 0000H
+       JMP   080H        ;  BOOTLOADER STARTUP CODE
+       JMP   VEC_CAR+03H ;  EXTI0
+       JMP   VEC_CAR+06H ;  SYS_FNC
+       DS    2
+       JMP   VEC_CAR+0BH ;  TIMER0
+       JMP   VEC_CAR+0EH ;
+       DS    2
+       JMP   VEC_CAR+13H ;  EXTI1
+       JMP   VEC_CAR+16H ;
+       DS    2
+       JMP   VEC_CAR+1BH ;  TIMER1
+       JMP   VEC_CAR+1EH ;  V_uL_ADD
+       DS    2
+       JMP   VEC_CAR+23H ;  SINT
+       JMP   VEC_CAR+26H ;  V_uL_FNC
+       DS    2
+       JMP   VEC_CAR+2BH ;  SIIC
+       JMP   VEC_CAR+2EH ;
+       DS    2
+       JMP   VEC_CAR+33H ;  T2CAP0
+       JMP   VEC_CAR+36H ;
+       DS    2
+       JMP   VEC_CAR+3BH ;  T2CAP1
+       JMP   VEC_CAR+3EH ;
+       DS    2
+       JMP   VEC_CAR+43H ;  T2CAP2
+       JMP   VEC_CAR+46H ;
+       DS    2
+       JMP   VEC_CAR+4BH ;  T2CAP3
+       JMP   VEC_CAR+4EH ;
+       DS    2
+       JMP   VEC_CAR+53H ;  ADCINT
+       JMP   VEC_CAR+56H ;
+       DS    2
+       JMP   VEC_CAR+5BH ;  T2CMP0
+       JMP   VEC_CAR+5EH ;
+       DS    2
+       JMP   VEC_CAR+63H ;  T2CMP1
+       JMP   VEC_CAR+66H ;
+       DS    2
+       JMP   VEC_CAR+6BH ;  T2CMP2
+       JMP   VEC_CAR+6EH ;
+       DS    2
+       JMP   VEC_CAR+73H ;  TIMER2
+       JMP   VEC_CAR+76H ;
+       DS    2
+;      JMP   VEC_CAR+7BH ;
+       JMP   VEC_STA      ;  ASTARTUP
+
+CSEG AT VEC_STA
+VEC_STL:JMP   VEC_STL
+)FI
+
+
+VECT__C SEGMENT CODE
+
+RSEG   VECT__C
+
+VEC_SET:MOV   A,R4
+        MOV   R4,DPL
+        MOV   R5,DPH
+    %IF(0)THEN(
+        MOV   DPTR,#VEC_ARR
+        CALL  ADDATDP
+    )ELSE(
+       ADD   A,#LOW VEC_ARR
+       MOV   DPL,A
+       CLR   A
+       ADDC  A,#HIGH VEC_ARR
+       MOV   DPH,A
+    )FI
+VEC_USR:MOV   A,#2
+        MOV   C,EA
+        CLR   EA
+        MOVX  @DPTR,A
+        INC   DPTR
+        MOVX  A,@DPTR
+        XCH   A,R5
+        MOVX  @DPTR,A
+        INC   DPTR
+        MOVX  A,@DPTR
+        XCH   A,R4
+        MOVX  @DPTR,A
+        MOV   EA,C
+        RET
+
+VEC_GET:MOV   DPL,R4
+        MOV   DPH,#HIGH VEC_ARR
+        INC   DPTR
+        MOVX  A,@DPTR
+        MOV   R5,A
+        INC   DPTR
+        MOVX  A,@DPTR
+        MOV   R4,A
+        RET
+
+__SDCC_EXTERNAL_STARTUP:
+        MOV     IE,#0
+%IF(%TGT_MSC1210)THEN(
+        MOV     EICON,#040h
+        MOV     AIE,#0
+        MOV     EWU,#0
+)FI
+        CALL    SRETI
+        CALL    SRETI
+        CALL    SRETI
+        CALL    SRETI
+       MOV     DPL,#0
+       RET
+SRETI:  RETI
+
+        END
\ No newline at end of file
diff --git a/arch/mcs51/generic/libs/ulan/Makefile b/arch/mcs51/generic/libs/ulan/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/generic/libs/ulan/Makefile.omk b/arch/mcs51/generic/libs/ulan/Makefile.omk
new file mode 100644 (file)
index 0000000..376e5f4
--- /dev/null
@@ -0,0 +1,26 @@
+# -*- makefile -*-
+
+default_CONFIG = CONFIG_ULAN=n
+
+ifeq ($(CONFIG_ULAN),y)
+
+lib_LIBRARIES = ulan
+
+include_HEADERS  = ulan.h 
+
+asm_build_HEADERS = \
+reg1210.inc->reg1210.inc
+
+asm_build_HEADERS += \
+config-$(ULAN_CFG).inc->cf_ulan.inc
+
+CFLAGS += -DMACH=$(MACH) -DAPPID=$(APPID)
+
+ulan_SOURCES = ul_l_c2a.c ulan.asm ul_idstr.c
+
+ifeq ($(CONFIG_ULAN_DY),y)
+include_HEADERS  += ul_drv_fnc.h
+ulan_SOURCES += ul_drv_fnc.c
+endif #CONFIG_ULAN_DY
+
+endif #CONFIG_ULAN
diff --git a/arch/mcs51/generic/libs/ulan/config-generic-hisc.inc b/arch/mcs51/generic/libs/ulan/config-generic-hisc.inc
new file mode 100644 (file)
index 0000000..4ccd014
--- /dev/null
@@ -0,0 +1,25 @@
+
+%DEFINE (FOR_SDCC)       (1)     ; The SDCC ASX8051 is used
+%DEFINE (VECTOR_FL)      (1)     ; Vyuzivaji se vektory preruseni v RAM
+%DEFINE (NEG_DR_EO)      (0)     ; Negovana hodnota DR_EO
+%DEFINE (WITH_TAILS)     (0)     ; Povolit podporu tailovanych zprav
+%DEFINE (CX_MERGED_FL)   (0)     ; CODE a XDATA zcela sloucena
+%DEFINE (TGT_T89C51RD2)  (0)     ; Kod pro T89C51RD2
+%DEFINE (TGT_MSC1210)    (1)     ; Kod pro MSC1210
+%DEFINE (DY_ADDR)        (1)     ; Dynamicka adresace bez vektoru
+
+%DEFINE        (SPN)            (1)     ; Cislo serioveho portu
+
+SER_STACK_EXT  EQU   0                  ; Pridavna hodnota pro stack
+
+END_RAM XDATA 8800H             ; Konec pameti
+LENG_IB EQU   1                 ; Delka vstupniho bufferu v 256 bytu
+LENG_OB EQU   1                 ; Delka vystupniho bufferu
+S_SPEED EQU   3                 ; Bd=OSC/12/16/S_SPEED pro 19200 pri 11.0592 MHz
+S_FRLN  EQU   1024              ; maximalni delka ramce
+
+DR_EO   BIT   P3.5              ; Aktivni v dle NEG_DR_EO
+;DR_EO   BIT   P3.4                     ; Aktivni v dle NEG_DR_EO
+;DR_EI   BIT   P1.6                     ; Aktivni v 0 pro RS-486
+                                ; Aktivni v 1 pro RS-232
+
diff --git a/arch/mcs51/generic/libs/ulan/config-generic-ulad21.inc b/arch/mcs51/generic/libs/ulan/config-generic-ulad21.inc
new file mode 100644 (file)
index 0000000..6796bae
--- /dev/null
@@ -0,0 +1,25 @@
+
+%DEFINE (FOR_SDCC)       (1)     ; The SDCC ASX8051 is used
+%DEFINE (VECTOR_FL)      (1)     ; Vyuzivaji se vektory preruseni v RAM
+%DEFINE (NEG_DR_EO)      (0)     ; Negovana hodnota DR_EO
+%DEFINE (WITH_TAILS)     (1)     ; Povolit podporu tailovanych zprav
+%DEFINE (CX_MERGED_FL)   (0)     ; CODE a XDATA zcela sloucena
+%DEFINE (TGT_T89C51RD2)  (0)     ; Kod pro T89C51RD2
+%DEFINE (TGT_MSC1210)    (1)     ; Kod pro MSC1210
+%DEFINE (DY_ADDR)        (0)     ; Dynamicka adresace bez vektoru
+
+%DEFINE        (SPN)            (1)     ; Cislo serioveho portu
+
+SER_STACK_EXT  EQU   0                  ; Pridavna hodnota pro stack
+
+END_RAM XDATA F0000H                    ; Konec pameti
+LENG_IB EQU   8                 ; Delka vstupniho bufferu v 256 bytu
+LENG_OB EQU   8                 ; Delka vystupniho bufferu
+S_SPEED EQU   3                 ; Bd=OSC/12/16/S_SPEED pro 19200 pri 11.0592 MHz
+S_FRLN  EQU   1024              ; maximalni delka ramce
+
+DR_EO   BIT   P3.5              ; Aktivni v dle NEG_DR_EO
+;DR_EO   BIT   P3.4                     ; Aktivni v dle NEG_DR_EO
+;DR_EI   BIT   P1.6                     ; Aktivni v 0 pro RS-486
+                                ; Aktivni v 1 pro RS-232
+
diff --git a/arch/mcs51/generic/libs/ulan/config-mscboot-hisc.inc b/arch/mcs51/generic/libs/ulan/config-mscboot-hisc.inc
new file mode 100644 (file)
index 0000000..11a80ba
--- /dev/null
@@ -0,0 +1,25 @@
+
+%DEFINE (FOR_SDCC)       (1)     ; The SDCC ASX8051 is used
+%DEFINE (VECTOR_FL)      (1)     ; Vyuzivaji se vektory preruseni v RAM
+%DEFINE (NEG_DR_EO)      (0)     ; Negovana hodnota DR_EO
+%DEFINE (WITH_TAILS)     (0)     ; Povolit podporu tailovanych zprav
+%DEFINE (CX_MERGED_FL)   (0)     ; CODE a XDATA zcela sloucena
+%DEFINE (TGT_T89C51RD2)  (0)     ; Kod pro T89C51RD2
+%DEFINE (TGT_MSC1210)    (1)     ; Kod pro MSC1210
+%DEFINE (DY_ADDR)        (0)     ; Dynamicka adresace bez vektoru
+
+%DEFINE        (SPN)            (1)     ; Cislo serioveho portu
+
+SER_STACK_EXT  EQU   0                  ; Pridavna hodnota pro stack
+
+END_RAM XDATA 8800H             ; Konec pameti
+LENG_IB EQU   1                 ; Delka vstupniho bufferu v 256 bytu
+LENG_OB EQU   1                 ; Delka vystupniho bufferu
+S_SPEED EQU   3                 ; Bd=OSC/12/16/S_SPEED pro 19200 pri 11.0592 MHz
+S_FRLN  EQU   1024              ; maximalni delka ramce
+
+DR_EO   BIT   P3.5              ; Aktivni v dle NEG_DR_EO
+;DR_EO   BIT   P3.4                     ; Aktivni v dle NEG_DR_EO
+;DR_EI   BIT   P1.6                     ; Aktivni v 0 pro RS-486
+                                ; Aktivni v 1 pro RS-232
+
diff --git a/arch/mcs51/generic/libs/ulan/config-mscboot-ulad21.inc b/arch/mcs51/generic/libs/ulan/config-mscboot-ulad21.inc
new file mode 100644 (file)
index 0000000..b1325db
--- /dev/null
@@ -0,0 +1,25 @@
+
+%DEFINE (FOR_SDCC)       (1)     ; The SDCC ASX8051 is used
+%DEFINE (VECTOR_FL)      (1)     ; Vyuzivaji se vektory preruseni v RAM
+%DEFINE (NEG_DR_EO)      (0)     ; Negovana hodnota DR_EO
+%DEFINE (WITH_TAILS)     (0)     ; Povolit podporu tailovanych zprav
+%DEFINE (CX_MERGED_FL)   (0)     ; CODE a XDATA zcela sloucena
+%DEFINE (TGT_T89C51RD2)  (0)     ; Kod pro T89C51RD2
+%DEFINE (TGT_MSC1210)    (1)     ; Kod pro MSC1210
+%DEFINE (DY_ADDR)        (0)     ; Dynamicka adresace bez vektoru
+
+%DEFINE        (SPN)            (1)     ; Cislo serioveho portu
+
+SER_STACK_EXT  EQU   0                  ; Pridavna hodnota pro stack
+
+END_RAM XDATA 08800H                    ; Konec pameti
+LENG_IB EQU   1                 ; Delka vstupniho bufferu v 256 bytu
+LENG_OB EQU   1                 ; Delka vystupniho bufferu
+S_SPEED EQU   3                 ; Bd=OSC/12/16/S_SPEED pro 19200 pri 11.0592 MHz
+S_FRLN  EQU   1024              ; maximalni delka ramce
+
+DR_EO   BIT   P3.5              ; Aktivni v dle NEG_DR_EO
+;DR_EO   BIT   P3.4                     ; Aktivni v dle NEG_DR_EO
+;DR_EI   BIT   P1.6                     ; Aktivni v 0 pro RS-486
+                                ; Aktivni v 1 pro RS-232
+
diff --git a/arch/mcs51/generic/libs/ulan/config-u2u-ps1.inc b/arch/mcs51/generic/libs/ulan/config-u2u-ps1.inc
new file mode 100644 (file)
index 0000000..f8ddb8f
--- /dev/null
@@ -0,0 +1,25 @@
+
+%DEFINE (FOR_SDCC)       (1)     ; The SDCC ASX8051 is used
+%DEFINE (VECTOR_FL)      (0)     ; Vyuzivaji se vektory preruseni v RAM
+%DEFINE (NEG_DR_EO)      (1)     ; Negovana hodnota DR_EO
+%DEFINE (WITH_TAILS)     (1)     ; Povolit podporu tailovanych zprav
+%DEFINE (CX_MERGED_FL)   (0)     ; CODE a XDATA zcela sloucena
+%DEFINE (TGT_T89C51RD2)  (1)     ; Kod pro T89C51RD2
+%DEFINE (TGT_MSC1210)    (0)     ; Kod pro MSC1210
+%DEFINE (DY_ADDR)        (0)     ; Dynamicka adresace bez vektoru
+
+%DEFINE        (SPN)            (0)     ; Cislo serioveho portu
+
+SER_STACK_EXT  EQU   0                  ; Pridavna hodnota pro stack
+
+END_RAM XDATA F0000H                    ; Konec pameti
+LENG_IB EQU   32                ; Delka vstupniho bufferu v 256 bytu
+LENG_OB EQU   8                 ; Delka vystupniho bufferu
+S_SPEED EQU   3                 ; Bd=OSC/12/16/S_SPEED pro 19200 pri 11.0592 MHz
+S_FRLN  EQU   1024              ; maximalni delka ramce
+
+DR_EO   BIT   P3.4              ; Aktivni v dle NEG_DR_EO
+;DR_EO   BIT   P3.4                     ; Aktivni v dle NEG_DR_EO
+;DR_EI   BIT   P1.6                     ; Aktivni v 0 pro RS-486
+                                ; Aktivni v 1 pro RS-232
+
diff --git a/arch/mcs51/generic/libs/ulan/config-u2u-ulad21.inc b/arch/mcs51/generic/libs/ulan/config-u2u-ulad21.inc
new file mode 100644 (file)
index 0000000..07411ca
--- /dev/null
@@ -0,0 +1,25 @@
+
+%DEFINE (FOR_SDCC)       (1)     ; The SDCC ASX8051 is used
+%DEFINE (VECTOR_FL)      (1)     ; Vyuzivaji se vektory preruseni v RAM
+%DEFINE (NEG_DR_EO)      (0)     ; Negovana hodnota DR_EO
+%DEFINE (WITH_TAILS)     (1)     ; Povolit podporu tailovanych zprav
+%DEFINE (CX_MERGED_FL)   (0)     ; CODE a XDATA zcela sloucena
+%DEFINE (TGT_T89C51RD2)  (0)     ; Kod pro T89C51RD2
+%DEFINE (TGT_MSC1210)    (1)     ; Kod pro MSC1210
+%DEFINE (DY_ADDR)        (0)     ; Dynamicka adresace bez vektoru
+
+%DEFINE        (SPN)            (1)     ; Cislo serioveho portu
+
+SER_STACK_EXT  EQU   0                  ; Pridavna hodnota pro stack
+
+END_RAM XDATA F0000H                    ; Konec pameti
+LENG_IB EQU   32                        ; Delka vstupniho bufferu v 256 bytu
+LENG_OB EQU   8                 ; Delka vystupniho bufferu
+S_SPEED EQU   3                 ; Bd=OSC/12/16/S_SPEED pro 19200 pri 11.0592 MHz
+S_FRLN  EQU   1024              ; maximalni delka ramce
+
+DR_EO   BIT   P3.5              ; Aktivni v dle NEG_DR_EO
+;DR_EO   BIT   P3.4                     ; Aktivni v dle NEG_DR_EO
+;DR_EI   BIT   P1.6                     ; Aktivni v 0 pro RS-486
+                                ; Aktivni v 1 pro RS-232
+
diff --git a/arch/mcs51/generic/libs/ulan/reg1210.inc b/arch/mcs51/generic/libs/ulan/reg1210.inc
new file mode 100644 (file)
index 0000000..ca1dbac
--- /dev/null
@@ -0,0 +1,244 @@
+; Texas Instruments
+; Name:        Reg1210.inc
+; Revision:    1.0
+; Description: Include file for TI MSC1210 microcontroller
+;$NOMOD51
+
+;$SAVE
+;$NOLIST
+
+;  BYTE Registers
+P0     DATA    080H    ;STANDARD 8051
+SP     DATA    081H    ;STANDARD 8051
+DPL    DATA    082H    ;STANDARD 8051
+DPH    DATA    083H    ;STANDARD 8051
+DPL1   DATA    084H
+DPH1   DATA    085H
+DPS    DATA    086H
+PCON   DATA    087H    ;STANDARD 8051
+TCON   DATA    088H    ;STANDARD 8051
+TMOD   DATA    089H    ;STANDARD 8051
+TL0    DATA    08AH    ;STANDARD 8051
+TL1    DATA    08BH    ;STANDARD 8051
+TH0    DATA    08CH    ;STANDARD 8051
+TH1    DATA    08DH    ;STANDARD 8051
+CKCON  DATA    08EH
+MWS    DATA    08FH
+P1     DATA    090H    ;STANDARD 8051
+EXIF   DATA    091H
+MPAGE  DATA    092H
+CADDR  DATA    093H
+CDATA  DATA    094H
+MCON   DATA    095H
+SCON   DATA    098H    ;STANDARD 8051
+SBUF   DATA    099H    ;STANDARD 8051
+SPICON DATA    09AH
+SPIDATA        DATA    09BH
+SPIRCON        DATA    09CH
+SPITCON        DATA    09DH
+SPISTRT        DATA    09EH
+SPIEND DATA    09FH
+P2     DATA    0A0H    ;STANDARD 8051
+PWMCON DATA    0A1H
+PWMLOW DATA    0A2H
+PWMHI  DATA    0A3H
+PAI    DATA    0A5H
+AIE    DATA    0A6H
+AISTAT DATA    0A7H
+IE     DATA    0A8H    ;STANDARD 8051
+BPCON  DATA    0A9H
+BPL    DATA    0AAH
+BPH    DATA    0ABH
+P0DDRL DATA    0ACH
+P0DDRH DATA    0ADH
+P1DDRL DATA    0AEH
+P1DDRH DATA    0AFH
+P3     DATA    0B0H    ;STANDARD 8051
+P2DDRL DATA    0B1H
+P2DDRH DATA    0B2H
+P3DDRL DATA    0B3H
+P3DDRH DATA    0B4H
+IP     DATA    0B8H    ;STANDARD 8051
+SCON1   DATA   0C0H
+SBUF1   DATA   0C1H
+EWU    DATA    0C6H
+T2CON   DATA   0C8H    ;8052 REGISTER
+RCAP2L  DATA   0CAH    ;8052 REGISTER
+RCAP2H  DATA   0CBH    ;8052 REGISTER
+TL2    DATA    0CCH    ;8052 REGISTER
+TH2    DATA    0CDH    ;8052 REGISTER
+PSW    DATA    0D0H    ;STANDARD 8051
+OCL    DATA    0D1H
+OCM    DATA    0D2H
+OCH    DATA    0D3H
+GCL    DATA    0D4H
+GCM    DATA    0D5H
+GCH    DATA    0D6H
+ADMUX  DATA    0D7H
+EICON  DATA    0D8H
+ADRESL DATA    0D9H
+ADRESM DATA    0DAH
+ADRESH DATA    0DBH
+ADCON0 DATA    0DCH
+ADCON1 DATA    0DDH
+ADCON2 DATA    0DEH
+ADCON3 DATA    0DFH
+ACC    DATA    0E0H    ;STANDARD 8051
+SSCON  DATA    0E1H
+SUMR0  DATA    0E2H
+SUMR1  DATA    0E3H
+SUMR2  DATA    0E4H
+SUMR3  DATA    0E5H
+ODAC   DATA    0E6H
+LVDCON DATA    0E7H
+EIE    DATA    0E8H
+HWPCO  DATA    0E9H
+HWPC1  DATA    0EAH
+HWID   DATA    0EBH
+;RSRVD DATA    0ECH
+;RSVRD DATA    0EDH
+FMCON  DATA    0EEH
+FTCON  DATA    0EFH
+B      DATA    0F0H    ;STANDARD 8051
+PDCON  DATA    0F1H
+PASEL  DATA    0F2H
+;RSRVD DATA    0F3H
+;RSRVD DATA    0F4H
+ACLK   DATA    0F6H
+SRST   DATA    0F7H
+EIP    DATA    0F8H
+SECINT DATA    0F9H
+MSINT  DATA    0FAH
+USEC   DATA    0FBH
+MSECL  DATA    0FCH
+MSECH  DATA    0FDH
+HMSEC  DATA    0FEH
+WDTCON DATA    0FFH
+
+
+;  BIT Registers
+; *** TCON (088H) ***
+TF1    BIT     08FH
+TR1    BIT     08EH
+TF0    BIT     08DH
+TR0    BIT     08CH
+IE1    BIT     08BH
+IT1    BIT     08AH
+IE0    BIT     089H
+IT0    BIT     088H
+
+; *** P1 (090H) ***
+INT5   BIT     097H
+INT4   BIT     096H
+INT3   BIT     095H
+INT2   BIT     094H
+TXD1   BIT     093H
+RXD1   BIT     092H
+T2EX   BIT     091H
+T2     BIT     090H
+
+; *** SCON (098H) ***
+SM0    BIT     09FH
+SM1    BIT     09EH
+SM2    BIT     09DH
+REN    BIT     09CH
+TB8    BIT     09BH
+RB8    BIT     09AH
+TI     BIT     099H
+RI     BIT     098H
+
+; *** IE (0A8H) ***
+EA     BIT     0AFH
+ES1    BIT     0AEH
+ET2    BIT     0ADH
+ES     BIT     0ACH
+ET1    BIT     0ABH
+EX1    BIT     0AAH
+ET0    BIT     0A9H
+EX0    BIT     0A8H
+
+; *** P3 (0B0H) ***
+RD     BIT     0B7H
+WR     BIT     0B6H
+T1     BIT     0B5H
+T0     BIT     0B4H
+INT1   BIT     0B3H
+INT0   BIT     0B2H
+TXD0   BIT     0B1H
+RXD0   BIT     0B0H
+
+; *** IP (0B8H) ***
+PS1    BIT     0BEH
+PT2    BIT     0BDH
+PS     BIT     0BCH
+PT1    BIT     0BBH
+PX1    BIT     0BAH
+PT0    BIT     0B9H
+PX0    BIT     0B8H
+
+; *** SCON1 (0C0H) ***
+SM01   BIT     0C7H
+SM11   BIT     0C6H
+SM21   BIT     0C5H
+REN1   BIT     0C4H
+TB81   BIT     0C3H
+RB81   BIT     0C2H
+TI1    BIT     0C1H
+RI1    BIT     0C0H
+
+; *** T2CON (0C8H) ***
+TF2    BIT     0CFH
+EXF2   BIT     0CEH
+RCLK   BIT     0CDH
+TCLK   BIT     0CCH
+EXEN2  BIT     0CBH
+TR2    BIT     0CAH
+C_T2   BIT     0C9H
+CP_RL2 BIT     0C8H
+
+; *** PSW (0D0H) ***
+CY     BIT     0D7H
+AC     BIT     0D6H
+F0     BIT     0D5H
+RS1    BIT     0D4H
+RS0    BIT     0D3H
+OV     BIT     0D2H
+F1     BIT     0D1H
+P      BIT     0D0H
+
+; *** EICON (0D8H) ***
+SMOD1  BIT     0DFH
+EAI    BIT     0DDH
+AI     BIT     0DCH
+WDTI   BIT     0DBH
+
+; *** EIE (0E8H) ***
+EWDI   BIT     0ECH
+EX5    BIT     0EBH
+EX4    BIT     0EAH
+EX3    BIT     0E9H
+EX2    BIT     0E8H
+
+; *** EIP (0F8H) ***
+PWDI   BIT     0FCH
+PX5    BIT     0FBH
+PX4    BIT     0FAH
+PX3    BIT     0F9H
+PX2    BIT     0F8H
+
+; *** Reg ***
+Reg0   Data    00H
+Reg1   Data    01H
+Reg2   Data    02H
+Reg3   Data    03H
+Reg4   Data    04H
+Reg5   Data    05H
+Reg6   Data    06H
+Reg7   Data    07H
+RegB   Data    0F0H
+
+; *** interrupts ***
+SINT0  CODE    0023H
+SINT1  CODE    003BH
+
+;$RESTORE
diff --git a/arch/mcs51/generic/libs/ulan/ul_drv_fnc.c b/arch/mcs51/generic/libs/ulan/ul_drv_fnc.c
new file mode 100644 (file)
index 0000000..ef3f18a
--- /dev/null
@@ -0,0 +1,176 @@
+#include <cpu_def.h>
+#include "ul_drv_fnc.h"
+
+#ifdef SDCC
+#ifndef SDCC_MODEL_LARGE
+data uchar ul_dy_len;
+#endif /* SDCC_MODEL_LARGE */
+#endif /* SDCC */
+
+#ifdef SDCC
+unsigned long ul_drv_get_sn() 
+{
+  _asm
+       mov  dptr,#ser_num
+       movx a,@dptr
+       mov  r2,a
+       inc  dptr
+       movx a,@dptr
+       mov  r3,a
+       inc  dptr
+       movx a,@dptr
+       mov  b,a
+       inc  dptr
+       movx a,@dptr
+       mov  dpl,r2
+       mov  dph,r3
+  _endasm;
+}
+#else
+#error "unsuported compiler!"
+#endif
+
+#ifdef SDCC
+void ul_drv_set_sn(unsigned long sn) 
+{
+  _asm
+       mov  r2,a
+       mov  r3,dpl
+       mov  r4,dph
+       mov  dptr,#ser_num
+       mov  a,r3
+       movx @dptr,a
+       inc  dptr
+       mov  a,r4
+       movx @dptr,a
+       inc  dptr
+       mov  a,b
+       movx @dptr,a
+       inc  dptr
+       mov  a,r2
+       movx @dptr,a
+  _endasm;
+}
+#else
+#error "unsuported compiler!"
+#endif
+
+
+#ifdef SDCC
+ul_idstr_t *ul_drv_get_idstr() 
+{
+  _asm
+       mov  dptr,#_ul_idstr
+       mov  b,#0x80
+  _endasm;
+}
+#else
+#error "unsuported compiler!"
+#endif
+
+#ifdef SDCC
+unsigned char ul_drv_get_adr()
+{
+  _asm
+       mov  dptr,#ul_adr
+       movx a,@dptr
+       mov  dpl,a
+  _endasm;
+}
+#else
+#error "unsuported compiler!"
+#endif
+
+#ifdef SDCC
+unsigned char ul_drv_get_dysa()
+{
+  _asm
+       mov  dptr,#ud_dysa
+       movx a,@dptr
+       mov  dpl,a
+  _endasm;
+}
+#else
+#error "unsuported compiler!"
+#endif
+
+#ifdef SDCC
+char ul_drv_rqa() 
+{ 
+  _asm
+       mov  dpl,#0
+       jnb  uld_rqa,UD_RQ01
+       dec  ul_fld
+       mov  dpl,#1
+UD_RQ01:
+  _endasm;
+}
+#else
+#error "unsuported compiler!"
+#endif
+
+#ifdef SDCC
+void ul_drv_clr_rq() 
+{ 
+  _asm
+       mov  a,ul_fld
+       anl  a,#0xF8
+       mov  ul_fld,a
+  _endasm;
+}
+#else
+#error "unsuported compiler!"
+#endif
+
+#ifdef SDCC
+#ifndef SDCC_MODEL_LARGE
+void ul_drv_set_status(uchar UL_ARGPTRTYPE *status,uchar len) 
+{
+  ul_dy_len=len;
+  _asm
+       mov  r2,dpl
+       mov  r3,dph
+       mov  dptr,#ud_stad
+       mov  a,r2
+       movx @dptr,a
+       inc  dptr
+       mov  a,r3
+       movx @dptr,a
+       inc  dptr
+       mov  a,_ul_dy_len
+       movx @dptr,a   
+  _endasm;
+}
+#else
+void ul_drv_set_status(uchar UL_ARGPTRTYPE *status,uchar len) UL_FNC_REENTRANT UL_FNC_NAKED
+{
+  _asm
+       mov  a,sp
+    #ifdef UL_WITH_NAKED
+       add  a,#-3
+    #else /*UL_WITH_NAKED*/
+       add  a,#-4
+    #endif /*UL_WITH_NAKED*/
+       mov  r0,a
+       mov  a,@r0
+       mov  r4,a
+       mov  r2,dpl
+       mov  r3,dph
+       mov  dptr,#ud_stad
+       mov  a,r2
+       movx @dptr,a
+       inc  dptr
+       mov  a,r3
+       movx @dptr,a
+       inc  dptr
+       mov  a,r4
+       movx @dptr,a
+    #ifdef UL_WITH_NAKED
+       ret
+    #endif /*UL_WITH_NAKED*/
+  _endasm;
+}
+#endif /* SDCC_MODEL_LARGE */
+#else
+#error "unsuported compiler!"
+#endif
diff --git a/arch/mcs51/generic/libs/ulan/ul_drv_fnc.h b/arch/mcs51/generic/libs/ulan/ul_drv_fnc.h
new file mode 100644 (file)
index 0000000..6d4fcaa
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef _UL_DRV_FNC_H
+#define _UL_DRV_FNC_H
+
+#include "ulan.h"
+
+#ifdef __cplusplus
+/*extern "C" {*/
+#endif
+
+unsigned long ul_drv_get_sn();
+void ul_drv_set_sn(unsigned long sn);
+ul_idstr_t *ul_drv_get_idstr();
+void ul_drv_set_status(uchar UL_ARGPTRTYPE *status,uchar len) UL_FNC_REENTRANT UL_FNC_NAKED;
+unsigned char ul_drv_get_adr();
+unsigned char ul_drv_get_dysa();
+char ul_drv_rqa();
+void ul_drv_clr_rq();
+
+#ifdef __cplusplus
+/*}*/ /* extern "C"*/
+#endif
+
+#endif /* _UL_DYAC_H */
diff --git a/arch/mcs51/generic/libs/ulan/ul_idstr.c b/arch/mcs51/generic/libs/ulan/ul_idstr.c
new file mode 100644 (file)
index 0000000..7bfde17
--- /dev/null
@@ -0,0 +1,14 @@
+#include <cpu_def.h>
+#include <ulan.h>
+
+#define __STRINGIFY(x)     #x              /* stringify without expanding x */
+#define STRINGIFY(x)    __STRINGIFY(x)        /* expand x, then stringify */
+
+#define NAME ".mt " \
+            STRINGIFY(APPID) \
+            " .uP " \
+            STRINGIFY(MACH) \
+            " .c " \
+              __DATE__ " " __TIME__
+
+ul_idstr_t CODE ul_idstr = {NAME, sizeof(NAME)-1};
diff --git a/arch/mcs51/mach-at89c51ed2/Makefile b/arch/mcs51/mach-at89c51ed2/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/mach-at89c51ed2/Makefile.omk b/arch/mcs51/mach-at89c51ed2/Makefile.omk
new file mode 100644 (file)
index 0000000..e97bb68
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+SUBDIRS = defines 
diff --git a/arch/mcs51/mach-at89c51ed2/defines/Makefile b/arch/mcs51/mach-at89c51ed2/defines/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/mach-at89c51ed2/defines/Makefile.omk b/arch/mcs51/mach-at89c51ed2/defines/Makefile.omk
new file mode 100644 (file)
index 0000000..63c54d1
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+include_HEADERS = mcu_regs.h 
diff --git a/arch/mcs51/mach-at89c51ed2/defines/mcu_regs.h b/arch/mcs51/mach-at89c51ed2/defines/mcu_regs.h
new file mode 100644 (file)
index 0000000..3c622c6
--- /dev/null
@@ -0,0 +1,14 @@
+// Texas Instruments
+// Name:       Reg1210.h
+// Revision:   1.0
+// Description: Header file for TI MSC1210 microcontroller
+
+#ifdef SDCC
+  #include <at89c51ed2.h>
+#else
+  #ifdef __KEIL__
+    #include <atmel/at89c51ed2.h>
+  #else
+    #error Unknown 8051 kompiler
+  #endif
+#endif
diff --git a/arch/mcs51/mach-msc1210/Makefile b/arch/mcs51/mach-msc1210/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/mach-msc1210/Makefile.omk b/arch/mcs51/mach-msc1210/Makefile.omk
new file mode 100644 (file)
index 0000000..dba8475
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+SUBDIRS = defines libs
diff --git a/arch/mcs51/mach-msc1210/defines/Makefile b/arch/mcs51/mach-msc1210/defines/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/mach-msc1210/defines/Makefile.omk b/arch/mcs51/mach-msc1210/defines/Makefile.omk
new file mode 100644 (file)
index 0000000..2d56584
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+include_HEADERS =  mcu_regs.h reg1210.hke reg1210.hsd
diff --git a/arch/mcs51/mach-msc1210/defines/mcu_regs.h b/arch/mcs51/mach-msc1210/defines/mcu_regs.h
new file mode 100644 (file)
index 0000000..33dc023
--- /dev/null
@@ -0,0 +1,14 @@
+// Texas Instruments
+// Name:       Reg1210.h
+// Revision:   1.0
+// Description: Header file for TI MSC1210 microcontroller
+
+#ifdef SDCC
+  #include "reg1210.hsd"
+#else
+  #ifdef __KEIL__
+    #include "reg1210.hke"
+  #else
+    #error Unknown 8051 kompiler
+  #endif
+#endif
diff --git a/arch/mcs51/mach-msc1210/defines/reg1210.hke b/arch/mcs51/mach-msc1210/defines/reg1210.hke
new file mode 100644 (file)
index 0000000..82dd38b
--- /dev/null
@@ -0,0 +1,226 @@
+// Texas Instruments\r
+// Name:       Reg1210.h\r
+// Revision:   1.0\r
+// Description: Header file for TI MSC1210 microcontroller\r
+\r
+#ifndef __REG1210_H__\r
+#define __REG1210_H__\r
+\r
+/*  BYTE Registers  */\r
+sfr P0    = 0x80;\r
+sfr SP    = 0x81;\r
+sfr DPL   = 0x82;\r
+sfr DPH   = 0x83;\r
+sfr DPL0  = 0x82;\r
+sfr DPH0  = 0x83;\r
+sfr DPL1  = 0x84;\r
+sfr DPH1  = 0x85;\r
+sfr DPS   = 0x86;\r
+sfr PCON  = 0x87;\r
+sfr TCON  = 0x88;\r
+  sbit TF1   = TCON^7;\r
+  sbit TR1   = TCON^6;\r
+  sbit TF0   = TCON^5;\r
+  sbit TR0   = TCON^4;\r
+  sbit IE1   = TCON^3;\r
+  sbit IT1   = TCON^2;\r
+  sbit IE0   = TCON^1;\r
+  sbit IT0   = TCON^0;\r
+sfr TMOD  = 0x89;\r
+sfr TL0   = 0x8A;\r
+sfr TL1   = 0x8B;\r
+sfr TH0   = 0x8C;\r
+sfr TH1   = 0x8D;\r
+sfr CKCON = 0x8E;\r
+sfr MWS   = 0x8F;\r
+sfr P1    = 0x90;\r
+  sbit INT5  = P1^7; \r
+  sbit SCK   = P1^7; \r
+  sbit INT4  = P1^6; \r
+  sbit MISO  = P1^6; \r
+  sbit INT3  = P1^5; \r
+  sbit MOSI  = P1^5; \r
+  sbit INT2  = P1^4; \r
+  sbit SS    = P1^4; \r
+  sbit TXD1  = P1^3; \r
+  sbit RXD1  = P1^2; \r
+  sbit T2EX  = P1^1; \r
+  sbit T2    = P1^0;\r
+sfr EXIF  = 0x91;\r
+sfr MPAGE = 0x92;\r
+sfr CADDR = 0x93;\r
+sfr CDATA = 0x94;\r
+sfr MCON  = 0x95;\r
+sfr SCON  = 0x98;\r
+sfr SCON0 = 0x98;\r
+  sbit SM0_0   = SCON0^7;\r
+  sbit SM1_0   = SCON0^6;\r
+  sbit SM2_0   = SCON0^5;\r
+  sbit REN_0   = SCON0^4;\r
+  sbit TB8_0   = SCON0^3;\r
+  sbit RB8_0   = SCON0^2;\r
+  sbit TI_0    = SCON0^1;\r
+  sbit TI      = SCON0^1;\r
+  sbit RI_0    = SCON0^0;\r
+  sbit RI      = SCON0^0;\r
+sfr SBUF     = 0x99;\r
+sfr SBUF0    = 0x99;\r
+sfr SPICON   = 0x9A;\r
+sfr SPIDATA  = 0x9B;\r
+sfr SPIRCON  = 0x9C;\r
+sfr SPITCON  = 0x9D;\r
+sfr SPISTART = 0x9E;\r
+sfr SPIEND   = 0x9F;\r
+sfr P2     = 0xA0;\r
+sfr PWMCON = 0xA1;\r
+sfr PWMLOW = 0xA2;\r
+sfr PWMHI  = 0xA3;\r
+sfr PAI    = 0xA5;\r
+sfr AIE    = 0xA6;\r
+sfr AISTAT = 0xA7;\r
+sfr IE     = 0xA8;\r
+  sbit EA    = IE^7;\r
+  sbit ES1   = IE^6;\r
+  sbit ET2   = IE^5;\r
+  sbit ES    = IE^4;\r
+  sbit ES0   = IE^4;\r
+  sbit ET1   = IE^3;\r
+  sbit EX1   = IE^2;\r
+  sbit ET0   = IE^1;\r
+  sbit EX0   = IE^0;\r
+sfr BPCON  = 0xA9;\r
+sfr BPL    = 0xAA;\r
+sfr BPH    = 0xAB;\r
+sfr P0DDRL = 0xAC;\r
+sfr P0DDRH = 0xAD;\r
+sfr P1DDRL = 0xAE;\r
+sfr P1DDRH = 0xAF;\r
+sfr P3     = 0xB0;\r
+  sbit RD    = P3^7;\r
+  sbit WR    = P3^6;\r
+  sbit T1    = P3^5;\r
+  sbit T0    = P3^4;\r
+  sbit INT1  = P3^3;\r
+  sbit INT0  = P3^2;\r
+  sbit TXD   = P3^1;\r
+  sbit TXD0  = P3^1;\r
+  sbit RXD   = P3^0;\r
+  sbit RXD0  = P3^0;\r
+sfr P2DDRL = 0xB1;\r
+sfr P2DDRH = 0xB2;\r
+sfr P3DDRL = 0xB3;\r
+sfr P3DDRH = 0xB4;\r
+sfr IP     = 0xB8;\r
+  sbit PS1   = IP^6;\r
+  sbit PT2   = IP^5;\r
+  sbit PS    = IP^4;\r
+  sbit PS0   = IP^4;\r
+  sbit PT1   = IP^3;\r
+  sbit PX1   = IP^2;\r
+  sbit PT0   = IP^1;\r
+  sbit PX0   = IP^0;\r
+sfr SCON1  = 0xC0;\r
+  sbit SM0_1   = SCON1^7;\r
+  sbit SM1_1   = SCON1^6;\r
+  sbit SM2_1   = SCON1^5;\r
+  sbit REN_1   = SCON1^4;\r
+  sbit TB8_1   = SCON1^3;\r
+  sbit RB8_1   = SCON1^2;\r
+  sbit TI_1    = SCON1^1;\r
+  sbit RI_1    = SCON1^0;\r
+sfr SBUF1  = 0xC1;\r
+sfr EWU    = 0xC6;\r
+sfr T2CON  = 0xC8;\r
+  sbit TF2    = T2CON^7;\r
+  sbit EXF2   = T2CON^6;\r
+  sbit RCLK   = T2CON^5;\r
+  sbit TCLK   = T2CON^4;\r
+  sbit EXEN2  = T2CON^3;\r
+  sbit TR2    = T2CON^2;\r
+  sbit C_T2   = T2CON^1;\r
+  sbit CP_RL2 = T2CON^0;\r
+sfr RCAP2L = 0xCA;\r
+sfr RCAP2H = 0xCB;\r
+sfr TL2    = 0xCC;\r
+sfr TH2    = 0xCD;\r
+sfr PSW    = 0xD0;\r
+  sbit CY    = PSW^7;\r
+  sbit AC    = PSW^6;\r
+  sbit F0    = PSW^5;\r
+  sbit RS1   = PSW^4;\r
+  sbit RS0   = PSW^3;\r
+  sbit OV    = PSW^2;\r
+  sbit F1    = PSW^1;\r
+  sbit P     = PSW^0;\r
+sfr OCL    = 0xD1;\r
+sfr OCM    = 0xD2;\r
+sfr OCH    = 0xD3;\r
+sfr GCL    = 0xD4;\r
+sfr GCM    = 0xD5;\r
+sfr GCH    = 0xD6;\r
+sfr ADMUX  = 0xD7;\r
+sfr EICON  = 0xD8;\r
+  sbit SMOD1 = EICON^7;\r
+  sbit EAI   = EICON^5;\r
+  sbit AI    = EICON^4;\r
+  sbit WDTI  = EICON^3;\r
+sfr ADRESL = 0xD9;\r
+sfr ADRESM = 0xDA;\r
+sfr ADRESH = 0xDB;\r
+sfr ADCON0 = 0xDC;\r
+sfr ADCON1 = 0xDD;\r
+sfr ADCON2 = 0xDE;\r
+sfr ADCON3 = 0xDF;\r
+sfr ACC    = 0xE0;\r
+sfr SSCON  = 0xE1;\r
+sfr SUMR0  = 0xE2;\r
+sfr SUMR1  = 0xE3;\r
+sfr SUMR2  = 0xE4;\r
+sfr SUMR3  = 0xE5;\r
+sfr ODAC   = 0xE6;\r
+sfr LVDCON = 0xE7;\r
+sfr EIE    = 0xE8;\r
+  sbit EWDI  = EIE^4;\r
+  sbit EX5   = EIE^3;\r
+  sbit EX4   = EIE^2;\r
+  sbit EX3   = EIE^1;\r
+  sbit EX2   = EIE^0;\r
+sfr HWPC0  = 0xE9;\r
+sfr HWPC1  = 0xEA;\r
+sfr HWID   = 0xEB;\r
+sfr FMCON  = 0xEE;\r
+sfr FTCON  = 0xEF;\r
+sfr B      = 0xF0;\r
+sfr PDCON  = 0xF1;\r
+sfr PASEL  = 0xF2;\r
+sfr ACLK   = 0xF6;\r
+sfr SRST   = 0xF7;\r
+sfr EIP    = 0xF8;\r
+  sbit PWDI  = EIP^4;\r
+  sbit PX5   = EIP^3;\r
+  sbit PX4   = EIP^2;\r
+  sbit PX3   = EIP^1;\r
+  sbit PX2   = EIP^0;\r
+sfr SECINT = 0xF9;\r
+sfr MSINT  = 0xFA;\r
+sfr USEC   = 0xFB;\r
+sfr MSECL  = 0xFC;\r
+sfr MSECH  = 0xFD;\r
+sfr HMSEC  = 0xFE;\r
+sfr WDTCON = 0xFF;\r
+\r
+/*-----------------*/\r
+/*  Word Registers  */\r
+/*-----------------*/\r
+sfr16 DECIMATION = 0xde;\r
+sfr16 THL2  = 0xcc;\r
+sfr16 RCAP2 = 0xca;\r
+sfr16 ONEMS = 0xfc;\r
+sfr16 PWM   = 0xa2;\r
+sfr16 P0DDR = 0xac;\r
+sfr16 P1DDR = 0xae;\r
+sfr16 P2DDR = 0xb1;\r
+sfr16 P3DDR = 0xb3;\r
+sfr16 BRKPT = 0xaa;\r
+\r
+#endif /*__REG1210_H__*/\r
diff --git a/arch/mcs51/mach-msc1210/defines/reg1210.hsd b/arch/mcs51/mach-msc1210/defines/reg1210.hsd
new file mode 100644 (file)
index 0000000..bb8eb78
--- /dev/null
@@ -0,0 +1,227 @@
+// Texas Instruments\r
+// Name:       Reg1210.h\r
+// Revision:   1.0\r
+// Description: Header file for TI MSC1210 microcontroller\r
+\r
+#ifndef __REG1210_H__\r
+#define __REG1210_H__\r
+\r
+/*  BYTE Registers  */\r
+sfr at 0x80 P0;\r
+sfr at 0x81 SP;\r
+sfr at 0x82 DPL;\r
+sfr at 0x83 DPH;\r
+sfr at 0x82 DPL0;\r
+sfr at 0x83 DPH0;\r
+sfr at 0x84 DPL1;\r
+sfr at 0x85 DPH1;\r
+sfr at 0x86 DPS;\r
+sfr at 0x87 PCON;\r
+sfr at 0x88 TCON;\r
+  sbit at 0x88+7 TF1;\r
+  sbit at 0x88+6 TR1;\r
+  sbit at 0x88+5 TF0;\r
+  sbit at 0x88+4 TR0;\r
+  sbit at 0x88+3 IE1;\r
+  sbit at 0x88+2 IT1;\r
+  sbit at 0x88+1 IE0;\r
+  sbit at 0x88+0 IT0;\r
+sfr at 0x89 TMOD;\r
+sfr at 0x8A TL0;\r
+sfr at 0x8B TL1;\r
+sfr at 0x8C TH0;\r
+sfr at 0x8D TH1;\r
+sfr at 0x8E CKCON;\r
+sfr at 0x8F MWS;\r
+sfr at 0x90 P1;\r
+  sbit at 0x90+7 INT5; \r
+  sbit at 0x90+7 SCK; \r
+  sbit at 0x90+6 INT4; \r
+  sbit at 0x90+6 MISO; \r
+  sbit at 0x90+5 INT3; \r
+  sbit at 0x90+5 MOSI; \r
+  sbit at 0x90+4 INT2; \r
+  sbit at 0x90+4 SS; \r
+  sbit at 0x90+3 TXD1; \r
+  sbit at 0x90+2 RXD1; \r
+  sbit at 0x90+1 T2EX; \r
+  sbit at 0x90+0 T2;\r
+sfr at 0x91 EXIF;\r
+sfr at 0x92 MPAGE;\r
+sfr at 0x93 CADDR;\r
+sfr at 0x94 CDATA;\r
+sfr at 0x95 MCON;\r
+sfr at 0x98 SCON;\r
+sfr at 0x98 SCON0;\r
+  sbit at 0x98+7 SM0_0;\r
+  sbit at 0x98+6 SM1_0;\r
+  sbit at 0x98+5 SM2_0;\r
+  sbit at 0x98+4 REN_0;\r
+  sbit at 0x98+3 TB8_0;\r
+  sbit at 0x98+2 RB8_0;\r
+  sbit at 0x98+1 TI_0;\r
+  sbit at 0x98+1 TI;\r
+  sbit at 0x98+0 RI_0;\r
+  sbit at 0x98+0 RI;\r
+sfr at 0x99 SBUF;\r
+sfr at 0x99 SBUF0;\r
+sfr at 0x9A SPICON;\r
+sfr at 0x9B SPIDATA;\r
+sfr at 0x9C SPIRCON;\r
+sfr at 0x9D SPITCON;\r
+sfr at 0x9E SPISTART;\r
+sfr at 0x9F SPIEND;\r
+sfr at 0xA0 P2;\r
+sfr at 0xA1 PWMCON;\r
+sfr at 0xA2 PWMLOW;\r
+sfr at 0xA3 PWMHI;\r
+sfr at 0xA5 PAI;\r
+sfr at 0xA6 AIE;\r
+sfr at 0xA7 AISTAT;\r
+sfr at 0xA8 IE;\r
+  sbit at 0xA8+7 EA;\r
+  sbit at 0xA8+6 ES1;\r
+  sbit at 0xA8+5 ET2;\r
+  sbit at 0xA8+4 ES0;\r
+  sbit at 0xA8+3 ET1;\r
+  sbit at 0xA8+2 EX1;\r
+  sbit at 0xA8+1 ET0;\r
+  sbit at 0xA8+0 EX0;\r
+sfr at 0xA9 BPCON;\r
+sfr at 0xAA BPL;\r
+sfr at 0xAB BPH;\r
+sfr at 0xAC P0DDRL;\r
+sfr at 0xAD P0DDRH;\r
+sfr at 0xAE P1DDRL;\r
+sfr at 0xAF P1DDRH;\r
+sfr at 0xB0 P3;\r
+  sbit at 0xB0+7 RD;\r
+  sbit at 0xB0+6 WR;\r
+  sbit at 0xB0+5 T1;\r
+  sbit at 0xB0+4 T0;\r
+  sbit at 0xB0+3 INT1;\r
+  sbit at 0xB0+2 INT0;\r
+  sbit at 0xB0+1 TXD;\r
+  sbit at 0xB0+1 TXD0;\r
+  sbit at 0xB0+0 RXD;\r
+  sbit at 0xB0+0 RXD0;\r
+sfr at 0xB1 P2DDRL;\r
+sfr at 0xB2 P2DDRH;\r
+sfr at 0xB3 P3DDRL;\r
+sfr at 0xB4 P3DDRH;\r
+sfr at 0xB8 IP;\r
+  sbit at 0xB8+6 PS1;\r
+  sbit at 0xB8+5 PT2;\r
+  sbit at 0xB8+4 PS;\r
+  sbit at 0xB8+4 PS0;\r
+  sbit at 0xB8+3 PT1;\r
+  sbit at 0xB8+2 PX1;\r
+  sbit at 0xB8+1 PT0;\r
+  sbit at 0xB8+0 PX0;\r
+sfr at 0xC0 SCON1;\r
+  sbit at 0xc0+7 SM0_1;\r
+  sbit at 0xc0+6 SM1_1;\r
+  sbit at 0xc0+5 SM2_1;\r
+  sbit at 0xc0+4 REN_1;\r
+  sbit at 0xc0+3 TB8_1;\r
+  sbit at 0xc0+2 RB8_1;\r
+  sbit at 0xc0+1 TI_1;\r
+  sbit at 0xc0+0 RI_1;\r
+sfr at 0xC1 SBUF1;\r
+sfr at 0xC6 EWU;\r
+sfr at 0xC8 T2CON;\r
+  sbit at 0xC8+7 TF2;\r
+  sbit at 0xC8+6 EXF2;\r
+  sbit at 0xC8+5 RCLK;\r
+  sbit at 0xC8+4 TCLK;\r
+  sbit at 0xC8+3 EXEN2;\r
+  sbit at 0xC8+2 TR2;\r
+  sbit at 0xC8+1 C_T2;\r
+  sbit at 0xC8+0 CP_RL2;\r
+sfr at 0xCA RCAP2L;\r
+sfr at 0xCB RCAP2H;\r
+sfr at 0xCC TL2;\r
+sfr at 0xCD TH2;\r
+sfr at 0xD0 PSW;\r
+  sbit at 0xD0+7 CY;\r
+  sbit at 0xD0+6 AC;\r
+  sbit at 0xD0+5 F0;\r
+  sbit at 0xD0+4 RS1;\r
+  sbit at 0xD0+3 RS0;\r
+  sbit at 0xD0+2 OV;\r
+  sbit at 0xD0+1 F1;\r
+  sbit at 0xD0+0 P;\r
+sfr at 0xD1 OCL;\r
+sfr at 0xD2 OCM;\r
+sfr at 0xD3 OCH;\r
+sfr at 0xD4 GCL;\r
+sfr at 0xD5 GCM;\r
+sfr at 0xD6 GCH;\r
+sfr at 0xD7 ADMUX;\r
+sfr at 0xD8 EICON;\r
+  sbit at 0xD8+7 SMOD1;\r
+  sbit at 0xD8+5 EAI;\r
+  sbit at 0xD8+4 AI;\r
+  sbit at 0xD8+3 WDTI;\r
+sfr at 0xD9 ADRESL;\r
+sfr at 0xDA ADRESM;\r
+sfr at 0xDB ADRESH;\r
+sfr at 0xDC ADCON0;\r
+sfr at 0xDD ADCON1;\r
+sfr at 0xDE ADCON2;\r
+sfr at 0xDF ADCON3;\r
+sfr at 0xE0 ACC;\r
+sfr at 0xE1 SSCON;\r
+sfr at 0xE2 SUMR0;\r
+sfr at 0xE3 SUMR1;\r
+sfr at 0xE4 SUMR2;\r
+sfr at 0xE5 SUMR3;\r
+sfr at 0xE6 ODAC;\r
+sfr at 0xE7 LVDCON;\r
+sfr at 0xE8 EIE;\r
+  sbit at 0xE8+4 EWDI;\r
+  sbit at 0xE8+3 EX5;\r
+  sbit at 0xE8+2 EX4;\r
+  sbit at 0xE8+1 EX3;\r
+  sbit at 0xE8+0 EX2;\r
+sfr at 0xE9 HWPC0;\r
+sfr at 0xEA HWPC1;\r
+sfr at 0xEB HWID;\r
+sfr at 0xEE FMCON;\r
+sfr at 0xEF FTCON;\r
+sfr at 0xF0 B;\r
+sfr at 0xF1 PDCON;\r
+sfr at 0xF2 PASEL;\r
+sfr at 0xF6 ACLK;\r
+sfr at 0xF7 SRST;\r
+sfr at 0xF8 EIP;\r
+  sbit at 0xF8+4 PWDI;\r
+  sbit at 0xF8+3 PX5;\r
+  sbit at 0xF8+2 PX4;\r
+  sbit at 0xF8+1 PX3;\r
+  sbit at 0xF8+0 PX2;\r
+sfr at 0xF9 SECINT;\r
+sfr at 0xFA MSINT;\r
+sfr at 0xFB USEC;\r
+sfr at 0xFC MSECL;\r
+sfr at 0xFD MSECH;\r
+sfr at 0xFE HMSEC;\r
+sfr at 0xFF WDTCON;\r
+\r
+/*-----------------*/\r
+/*  Word Registers  */\r
+/*-----------------*/\r
+#if 0\r
+sfr16 at 0xde DECIMATION;\r
+sfr16 at 0xcc THL2;\r
+sfr16 at 0xca RCAP2;\r
+sfr16 at 0xfc ONEMS;\r
+sfr16 at 0xa2 PWM;\r
+sfr16 at 0xac P0DDR;\r
+sfr16 at 0xae P1DDR;\r
+sfr16 at 0xb1 P2DDR;\r
+sfr16 at 0xb3 P3DDR;\r
+sfr16 at 0xaa BRKPT;\r
+#endif\r
+\r
+#endif /*__REG1210_H__*/\r
diff --git a/arch/mcs51/mach-msc1210/libs/Makefile b/arch/mcs51/mach-msc1210/libs/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/mach-msc1210/libs/Makefile.omk b/arch/mcs51/mach-msc1210/libs/Makefile.omk
new file mode 100644 (file)
index 0000000..c3d0a7d
--- /dev/null
@@ -0,0 +1,4 @@
+# -*- makefile -*-
+
+SUBDIRS = flash boot
+
diff --git a/arch/mcs51/mach-msc1210/libs/flash/Makefile b/arch/mcs51/mach-msc1210/libs/flash/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/arch/mcs51/mach-msc1210/libs/flash/Makefile.omk b/arch/mcs51/mach-msc1210/libs/flash/Makefile.omk
new file mode 100644 (file)
index 0000000..9b5bd4b
--- /dev/null
@@ -0,0 +1,5 @@
+# -*- makefile -*-
+
+lib_LIBRARIES = mscflash 
+include_HEADERS = mscflash.h
+mscflash_SOURCES = mscflash_a2c.c mscflash.asm
diff --git a/arch/mcs51/mach-msc1210/libs/flash/mscflash.asm b/arch/mcs51/mach-msc1210/libs/flash/mscflash.asm
new file mode 100644 (file)
index 0000000..78b7087
--- /dev/null
@@ -0,0 +1,17 @@
+; Texas Instruments
+; Name:        mscflash.asm
+; Revision: 1.0
+; Description: MSC1210 BootRom APIs 
+
+PUBLIC _page_erase             ; char page_erase (int faddr, char fdata, char fdm)
+PUBLIC _write_flash_chk        ; char write_flash_chk (int faddr, char fdata, char fdm)
+
+
+    CSEG AT 0FFD7H
+_page_erase:                   ; char page_erase (int faddr, char fdata, char fdm)
+
+
+    CSEG AT 0FFDBH
+_write_flash_chk:              ; char write_flash_chk (int faddr, char fdata, char fdm)
+
+    END
\ No newline at end of file
diff --git a/arch/mcs51/mach-msc1210/libs/flash/mscflash.h b/arch/mcs51/mach-msc1210/libs/flash/mscflash.h
new file mode 100644 (file)
index 0000000..cb5fcee
--- /dev/null
@@ -0,0 +1,35 @@
+#ifndef _MSCFLASH_H
+#define _MSCFLASH_H
+
+#ifdef __cplusplus
+/*extern "C" {*/
+#endif
+
+#include <types.h>
+
+#if !defined(SDCC_MODEL_LARGE) || !defined(SDCC)
+  #define MSC_FNC_REENTRANT
+#else
+  #define MSC_FNC_REENTRANT reentrant
+#endif
+
+#define MSC_FDM                1                       // Flash Data Memory
+#define MSC_FPM                0                       // Flash Program Memory
+
+char page_erase (int faddr, char fdata, char fdm);
+char write_flash_chk (int faddr, char fdata, char fdm);
+int flash_erase(void *base,int size);
+int flash_copy(void *des,const void *src,int len);
+
+char __page_erase (int faddr, char fdata, char fdm) MSC_FNC_REENTRANT;
+char __write_flash_chk (int faddr, char fdata, char fdm) MSC_FNC_REENTRANT;
+
+#define page_erase(faddr,fdata,fdm) __page_erase(faddr,fdata,fdm)
+#define write_flash_chk(faddr,fdata,fdm) __write_flash_chk(faddr,fdata,fdm)
+
+#ifdef __cplusplus
+/*}*/ /* extern "C"*/
+#endif
+
+#endif /* _MSCFLASH_H */
+
diff --git a/arch/mcs51/mach-msc1210/libs/flash/mscflash_a2c.c b/arch/mcs51/mach-msc1210/libs/flash/mscflash_a2c.c
new file mode 100644 (file)
index 0000000..8e698d4
--- /dev/null
@@ -0,0 +1,154 @@
+#include "mscflash.h"
+#include "mcu_regs.h"
+
+#ifdef SDCC
+#ifndef SDCC_MODEL_LARGE
+data char mscflash_fdata;
+data char mscflash_fdm;
+#endif /* SDCC_MODEL_LARGE */
+#endif /*SDCC*/
+bit ea,eai;
+
+#ifdef SDCC
+#ifndef SDCC_MODEL_LARGE
+char __page_erase (int faddr, char fdata, char fdm) 
+{
+  mscflash_fdata=fdata;
+  mscflash_fdm=fdm;
+  ea=EA,eai=EAI;
+  EA=0;EAI=0;   // Disable interrupts
+  _asm
+        .globl _page_erase
+       mov  r7,dpl
+       mov  r6,dph
+       mov  a,_mscflash_fdata
+       mov  r5,a
+       mov  a,_mscflash_fdm
+       mov  r3,a
+       lcall _page_erase
+       mov  dpl,r7
+  _endasm;
+  EAI=eai;EA=ea;
+}
+#else
+/* For large model
+ * vec   Allocated to stack - offset -4  (the push _bp taken into account)
+ * fnc Allocated to registers 
+ */
+char __page_erase (int faddr, char fdata, char fdm) reentrant
+{
+  ea=EA,eai=EAI;
+  EA=0;EAI=0;   // Disable interrupts
+  _asm
+       .globl _page_erase
+       mov  r7,dpl
+       mov  r6,dph
+       mov  a,sp
+       add  a,#-4
+       mov  r0,a
+       mov  a,@r0
+       mov  r3,a
+       inc  r0
+       mov  a,@r0
+       mov  r5,a
+       lcall _page_erase
+       mov  dpl,r7
+  _endasm;
+  EAI=eai;EA=ea;
+}
+#endif /* SDCC_MODEL_LARGE */
+#else /* SDCC */
+char __page_erase (int faddr, char fdata, char fdm)
+{
+  ea=EA,eai=EAI;
+  EA=0;EAI=0;   // Disable interrupts
+  #pragma asm
+       extrn code(_page_erase)
+       call _page_erase
+  #pragma endasm
+  EAI=eai;EA=ea;
+}
+#endif /* SDCC */
+
+
+#ifdef SDCC
+#ifndef SDCC_MODEL_LARGE
+char __write_flash_chk (int faddr, char fdata, char fdm) 
+{
+  mscflash_fdata=fdata;
+  mscflash_fdm=fdm;
+  ea=EA,eai=EAI;
+  EA=0;EAI=0;   // Disable interrupts
+  _asm
+       .globl _write_flash_chk
+       mov  r7,dpl
+       mov  r6,dph
+       mov  a,_mscflash_fdata
+       mov  r5,a
+       mov  a,_mscflash_fdm
+       mov  r3,a
+       lcall _write_flash_chk
+       mov  dpl,r7
+  _endasm;
+  EAI=eai;EA=ea;
+}
+#else
+/* For large model
+ * vec   Allocated to stack - offset -4  (the push _bp taken into account)
+ * fnc Allocated to registers 
+ */
+char __write_flash_chk (int faddr, char fdata, char fdm) reentrant
+{
+  ea=EA,eai=EAI;
+  EA=0;EAI=0;   // Disable interrupts
+  _asm
+       .globl _write_flash_chk
+       mov  r7,dpl
+       mov  r6,dph
+       mov  a,sp
+       add  a,#-4
+       mov  r0,a
+       mov  a,@r0
+       mov  r3,a
+       inc  r0
+       mov  a,@r0
+       mov  r5,a
+       lcall _write_flash_chk
+       mov  dpl,r7
+  _endasm;
+  EAI=eai;EA=ea;
+}
+#endif /* SDCC_MODEL_LARGE */
+#else /* SDCC */
+char __write_flash_chk (int faddr, char fdata, char fdm) 
+{
+  ea=EA,eai=EAI;
+  EA=0;EAI=0;   // Disable interrupts
+  #pragma asm
+       extrn code(_write_flash_chk)
+       call _write_flash_chk
+  #pragma endasm
+  EAI=eai;EA=ea;
+}
+#endif /* SDCC */
+
+int flash_erase(void *base,int size) {
+  size=size-((unsigned int)base&0x7f);
+  base=(xdata uint8_t*)((unsigned int)base&0xFF80);
+  while (size) {
+    page_erase ((unsigned int)base, 0xff, MSC_FPM);
+    base=(uint8_t *)base+0x80;
+    size-=0x80;
+  }
+  return 0;
+}
+
+int flash_copy(void *des,const void *src,int len) {
+  while(len) {
+    write_flash_chk ((unsigned int)des, *(uint8_t *)src, MSC_FPM);
+    src=(uint8_t *)src+1;
+    des=(uint8_t *)des+1; 
+    len--;
+  }
+  return len;
+}
diff --git a/arch/mcs51/mach-msc1210/libs/msc_loader.c b/arch/mcs51/mach-msc1210/libs/msc_loader.c
new file mode 100644 (file)
index 0000000..13a17b1
--- /dev/null
@@ -0,0 +1,154 @@
+#include <types.h>
+#include <system_def.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "usb_loader.h"
+
+#ifdef PDI_EP0_PACKET_SIZE
+  #define LOADER_BUFFER_SIZE PDI_EP0_PACKET_SIZE
+#else /*PDI_EP0_PACKET_SIZE*/
+  #define LOADER_BUFFER_SIZE 128
+#endif /*PDI_EP0_PACKET_SIZE*/
+
+unsigned char loader_buffer[LOADER_BUFFER_SIZE];
+
+int msc1210_erase(unsigned addr, unsigned len)
+{
+  unsigned end = addr + len - 1; 
+  if(addr<0x8000) //0x1000)
+    return -1;
+  
+  while(addr < end) {
+    *((xdata unsigned char *)addr) = 0;
+  }
+  return 0;
+}
+
+int msc1210_mass_erase(unsigned mode, unsigned addr)
+{
+  while( addr != 0xffff) {
+    addr++;
+    if ( !(addr & 0x00ff)) printf(" erase segm. 0x%X\n", addr);
+    *((xdata unsigned char *)addr) = 0;
+  }
+  return 0;
+}
+
+
+#ifdef SDCC
+void msc1210_goto( unsigned addr)
+{
+  _asm
+    pop  acc
+    pop  acc
+    mov  a,dpl
+    push acc
+    mov  a,dph
+    push acc
+    ret
+  _endasm;
+}
+#else /*SDCC*/
+#pragma asm
+;void msc1210_goto( unsigned addr)
+;{
+       public _msc1210_goto
+_msc1210_goto:
+       pop  acc
+       pop  acc
+       mov  a,r7
+       push acc
+       mov  a,r6
+       push acc
+       ret
+;  return 0;
+;}
+#pragma endasm
+#endif
+
+
+
+void msc1210_reset_device( void)
+{
+  printf("...reset...\n");
+}
+
+
+int usb_msc1210_loader(usb_device_t *udev)
+{
+  unsigned long addr;
+  unsigned len;
+
+  switch ( udev->request.bRequest & USB_VENDOR_MASK) {
+
+    case USB_VENDOR_GET_CAPABILITIES:
+      printf("GET_CAPABILITIES\n");
+      loader_buffer[0] = 0xAA; // test
+      usb_send_control_data(udev, loader_buffer, 1);
+      return 1;
+
+    case USB_VENDOR_RESET_DEVICE:
+      printf("RESET_DEVICE\n");
+//      InitController();
+//      InitTarget();
+//      if (!GetDevice()) {
+//        return -1;
+//      }
+      usb_ack_setup(&udev->ep0);
+      msc1210_reset_device();
+      return 1;
+
+    case USB_VENDOR_GOTO:
+      //printf( "GOTO 0x%X\n", udev->request.wValue);
+      usb_ack_setup(&udev->ep0);
+      msc1210_goto(udev->request.wValue);
+      return 1;
+
+    case USB_VENDOR_ERASE_MEMORY:
+      printf( "ERASE 0x%X 0x%X\n", udev->request.wValue, udev->request.wIndex);
+      usb_ack_setup(&udev->ep0);
+      msc1210_erase(udev->request.wValue, udev->request.wIndex);
+      return 1;
+
+    case USB_VENDOR_MASS_ERASE:
+      printf( "MASSERASE 0x%X 0x%X\n", udev->request.wIndex, udev->request.wValue);
+      usb_ack_setup(&udev->ep0);
+      msc1210_mass_erase(udev->request.wIndex, udev->request.wValue);
+      return 1;
+      
+    case USB_VENDOR_GET_SET_MEMORY:
+      addr = (udev->request.wValue & 0xffff) | (((unsigned long)udev->request.wIndex&0xffff)<<16);
+      len = udev->request.wLength;
+      //printf("GET_SET_MEMORY, addr=0x%lx, len=%d\n", (long)addr, len);
+      if (( udev->request.bmRequestType & USB_DATA_DIR_MASK) == USB_DATA_DIR_FROM_HOST) {
+        // read from HOST ???
+        switch( udev->request.bRequest & USB_VENDOR_TARGET_MASK) {
+          case USB_VENDOR_TARGET_XDATA:
+            udev->ep0.ptr = (xdata unsigned char *)addr;
+            break;
+          case USB_VENDOR_TARGET_DATA:
+            udev->ep0.ptr = (data unsigned char *)addr;
+            break;
+          default: return -1;
+        }
+        if ( len) usb_set_control_endfnc( udev, usb_ack_setup);
+        else usb_ack_setup(&udev->ep0);
+        return 1;
+      } else {
+        switch( udev->request.bRequest & USB_VENDOR_TARGET_MASK) {
+          case USB_VENDOR_TARGET_XDATA:
+            usb_send_control_data( udev, (xdata unsigned char *)addr, len); //(void*)addr, len);
+            break;
+          case USB_VENDOR_TARGET_DATA:
+            usb_send_control_data( udev, (data unsigned char *)addr, len); //(void*)addr, len);
+            break;
+          default: return -1;
+        }
+        return 1;
+      }
+      break;
+  }
+
+  return 0;
+}
diff --git a/board/Makefile b/board/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/board/Makefile.omk b/board/Makefile.omk
new file mode 100644 (file)
index 0000000..ae8ebdc
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+SUBDIRS = $(ARCH)
diff --git a/board/mcs51/Makefile b/board/mcs51/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/board/mcs51/Makefile.omk b/board/mcs51/Makefile.omk
new file mode 100644 (file)
index 0000000..deeeeb7
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+SUBDIRS = $(BOARD)
diff --git a/board/mcs51/hisc/Makefile b/board/mcs51/hisc/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/board/mcs51/hisc/Makefile.omk b/board/mcs51/hisc/Makefile.omk
new file mode 100644 (file)
index 0000000..3242ab8
--- /dev/null
@@ -0,0 +1,4 @@
+# -*- makefile -*-
+
+include_HEADERS  = system_def.h
+
diff --git a/board/mcs51/hisc/config/config.blinder b/board/mcs51/hisc/config/config.blinder
new file mode 100644 (file)
index 0000000..463c520
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- makefile -*-
+
+ARCH=mcs51
+MACH=msc1210
+BOARD=hisc
+
+APP=blinder
+APPID=$(APP)-$(BOARD)
+ULAN_CFG=generic-$(BOARD)
+
+TARGET_ARCH = -mmcs51 --model-large
+CFLAGS  += $(TARGET_ARCH) 
+LDFLAGS += $(TARGET_ARCH) 
+
+XRAM   = 0x8480
+STACK  = 0xC0
+DATA   = 0x28
+IDATA  = 0x80
+CODE   = 0x2000
+
+PROG_START = 0x2000
+BOOTLOADER_START = 0x0000
+
+LDFLAGS += \
+--xram-loc $(XRAM) \
+--code-loc $(CODE) \
+--data-loc $(DATA) \
+--idata-loc $(IDATA) \
+--stack-loc $(STACK) \
+--no-pack-iram
+
+CONFIG_APP_HISC_BLINDER=y
+CONFIG_ULAN=y
+CONFIG_ULAN_DY=y
+CONFIG_MISC_VECT_MSC_APP=y
+CONFIG_KEYVAL=y
diff --git a/board/mcs51/hisc/config/config.heating-kswtimer b/board/mcs51/hisc/config/config.heating-kswtimer
new file mode 100644 (file)
index 0000000..0fa5014
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- makefile -*-
+
+ARCH=mcs51
+MACH=msc1210
+BOARD=hisc
+
+APP=kswtimer
+APPID=$(APP)-$(BOARD)
+ULAN_CFG=generic-$(BOARD)
+
+TARGET_ARCH = -mmcs51 --model-large
+CFLAGS  += $(TARGET_ARCH) 
+LDFLAGS += $(TARGET_ARCH) 
+
+XRAM   = 0x8480
+STACK  = 0xC0
+DATA   = 0x28
+IDATA  = 0x80
+CODE   = 0x2000
+
+PROG_START = 0x2000
+BOOTLOADER_START = 0x0000
+
+LDFLAGS += \
+--xram-loc $(XRAM) \
+--code-loc $(CODE) \
+--data-loc $(DATA) \
+--idata-loc $(IDATA) \
+--stack-loc $(STACK) \
+--no-pack-iram
+
+CONFIG_APP_HISC_HEATING_KSWTIMER=y
+CONFIG_ULAN=y
+CONFIG_ULAN_DY=y
+CONFIG_MISC_VECT_MSC_APP=y
+CONFIG_KEYVAL=y
diff --git a/board/mcs51/hisc/config/config.mscboot b/board/mcs51/hisc/config/config.mscboot
new file mode 100644 (file)
index 0000000..f708bd7
--- /dev/null
@@ -0,0 +1,35 @@
+# -*- makefile -*-
+
+ARCH=mcs51
+MACH=msc1210
+BOARD=hisc
+
+APP=mscboot
+APPID=$(APP)-$(BOARD)
+ULAN_CFG=$(APPID)
+
+TARGET_ARCH = -mmcs51 --model-small
+CFLAGS  += $(TARGET_ARCH) 
+LDFLAGS += $(TARGET_ARCH) 
+
+XRAM   = 0x8480
+STACK  = 0xC0
+DATA   = 0x28
+IDATA  = 0x80
+CODE   = 0x0080
+
+PROG_START = 0x0000
+BOOTLOADER_START = 0x0000
+
+LDFLAGS += \
+--xram-loc $(XRAM) \
+--code-loc $(CODE) \
+--data-loc $(DATA) \
+--idata-loc $(IDATA) \
+--stack-loc $(STACK) \
+--no-pack-iram
+
+CONFIG_APP_MSCBOOT=y
+CONFIG_ULAN=y
+CONFIG_MISC_VECT_MSC_BOOT=y
+CONFIG_KEYVAL=y
diff --git a/board/mcs51/hisc/system_def.h b/board/mcs51/hisc/system_def.h
new file mode 100644 (file)
index 0000000..1717dd0
--- /dev/null
@@ -0,0 +1,64 @@
+/*******************************************************************
+  Components for embedded applications builded for
+  hisc firmware  
+  system_def_hisc.h - definition of hardware adresses and registers
+  Copyright (C) 2004 by Petr Smolik petr.smolik@wo.cz
+
+ *******************************************************************/
+
+#ifndef _SYSTEM_DEF_HISC_H
+#define _SYSTEM_DEF_HISC_H
+
+#include <mcu_regs.h>
+
+#define CPU_SYS_HZ 11059200l
+
+#define BAUD2BAUDDIV(baud) \
+       ((CPU_SYS_HZ+12*8l*baud)/(12*16l*baud))
+
+#define HZ2TMODE1H(x) \
+        (0x100-((CPU_SYS_HZ/12/x) / 256))
+#define HZ2TMODE1L(x) \
+        (0x100-((CPU_SYS_HZ/12/x) % 256))
+
+#define ES_U ES1
+
+#ifdef SDCC
+ sbit at 0xB2 LED;         // P3.2
+ sbit at 0xB6 CS_WR;       // P3.6
+ sbit at 0xA6 CS_O;        // P2.6
+#else
+ sbit  LED  = P3^2;
+#endif /*SDCC*/
+
+//unsigned char xdata at 0xbfff addr_out;
+//unsigned char xdata at 0x7fff addr_disp;
+
+#define his_putb_outs(x) { \
+    CS_O=1;CS_WR=0; \
+    P0=x;           \
+    CS_O=0;CS_WR=1; \
+    }
+
+/* IRAM 16 kB of on-chip memory */
+/* 0xffb000-0xffcfff .. 8 kB free */
+/* 0xffd000-0xffdfff .. 4 kB for Flash emulation */
+/* 0xffe000-0xffffc0 .. 4 kB - 64 B free*/
+/* 0xffffc0-0xffffff .. 64 B free*/
+
+//#define IRAM_START    (volatile __u8 * const)(0xffb000)
+//#define IRAM_START1   (volatile __u8 * const)(0xffe000)
+//#define FRAM_START    (volatile __u8 * const)(0xffffc0)
+
+//#define FBRAM_START    0x0000   /* FLASH BOOTLOADER ADDRESS */
+//#define FARAM_START    0x1500   /* APPLICATION ADDRESS */
+//#define FDRAM_START    0x0400   /* FLASH DATA ADDRESS */
+
+#define KVPB_MINIMALIZED
+#define KVPB_FRAM_START  0x1e00
+#define KVPB_FRAM_SIZE   0x100
+
+
+#endif /* _SYSTEM_DEF_HISC_H_ */
diff --git a/board/mcs51/ps1/Makefile b/board/mcs51/ps1/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/board/mcs51/ps1/Makefile.omk b/board/mcs51/ps1/Makefile.omk
new file mode 100644 (file)
index 0000000..0d1f820
--- /dev/null
@@ -0,0 +1,10 @@
+# -*- makefile -*-
+
+include_HEADERS  = system_def.h
+
+lib_LIBRARIES = boardsup
+
+boardsup_SOURCES = i2c.c
+
+nobase_include_HEADERS = periph/i2c.h
+
diff --git a/board/mcs51/ps1/config/config.u2u b/board/mcs51/ps1/config/config.u2u
new file mode 100644 (file)
index 0000000..2dce919
--- /dev/null
@@ -0,0 +1,35 @@
+# -*- makefile -*-
+
+ARCH=mcs51
+MACH=at89c51ed2
+BOARD=ps1
+
+APP=u2u
+APPID=$(APP)-$(BOARD)
+ULAN_CFG=$(APPID)
+
+TARGET_ARCH = -mmcs51 --model-large
+CFLAGS  += $(TARGET_ARCH) 
+LDFLAGS += $(TARGET_ARCH) 
+
+XRAM   = 0x8000
+STACK  = 0xC0
+DATA   = 0x28
+IDATA  = 0x80
+CODE   = 0x0000
+
+PROG_START = 0x0000
+BOOTLOADER_START = 0xfc00
+
+LDFLAGS += \
+--xram-loc $(XRAM) \
+--code-loc $(CODE) \
+--data-loc $(DATA) \
+--idata-loc $(IDATA) \
+--stack-loc $(STACK) \
+--no-pack-iram
+
+CONFIG_APP_U2U=y
+CONFIG_ULAN=y
+CONFIG_USB_BASE=y
+CONFIG_USB_PDIUSB=y
diff --git a/board/mcs51/ps1/i2c.c b/board/mcs51/ps1/i2c.c
new file mode 100644 (file)
index 0000000..fe1fa0c
--- /dev/null
@@ -0,0 +1,134 @@
+#include <stdio.h>
+#include <system_def.h>
+#include <periph/i2c.h>
+#ifdef __KEIL__
+#include <intrins.h>
+#endif /*__KEIL__*/
+void i2c_init( void) {
+  SDAO = 1; SDAI = 1; SCL = 1;
+}
+/***************************************************************************/
+
+void i2c_wait(void) {
+ #ifdef __KEIL__
+     _nop_();
+     _nop_();
+     _nop_();
+     _nop_();
+     _nop_();
+ #elif SDCC
+  _asm
+     nop;
+     nop;
+     nop;
+     nop;
+     nop;
+  _endasm;
+ #else
+   #error "unsuported compiler!"
+ #endif
+}
+#define i2c_DELAY i2c_wait()
+
+/***************************************************************************/
+void i2c_start( void) {
+  SDAO = 0;
+  i2c_DELAY;
+  SCL = 0;
+  i2c_DELAY;
+}
+/***************************************************************************/
+char i2c_stop( void) {
+  SDAO = 0;
+  i2c_DELAY;
+  SCL = 1;
+  i2c_DELAY;
+  SDAO = 1;
+  return SDAI;
+}
+/***************************************************************************/
+char i2c_outbyte( unsigned char byte) {
+  unsigned char b=8;
+  bit ack = 1;
+  
+  while(b--) {
+    SDAO = (byte & 0x80) ? 1 : 0;
+    byte<<= 1;
+    i2c_DELAY;
+    SCL = 1;
+    i2c_DELAY;
+    SCL = 0;
+  }
+  i2c_DELAY;
+  SDAO = 1;
+  i2c_DELAY;
+  SCL = 1;
+  i2c_DELAY;
+  ack = SDAI;
+  SCL = 0;
+//  SDAO = 0;
+  return ack; /* if ack == 0 then OK */
+}
+/***************************************************************************/
+char i2c_inbyte( unsigned char *byte, bit last) {
+  unsigned char b = 8;
+  unsigned char out = 0;
+  bit ack = 1;
+  
+  while(b--) {
+    SDAO = 1;
+    i2c_DELAY;
+    SCL = 1;
+    i2c_DELAY;
+    out <<= 1;
+    out |= SDAI ? 1 : 0;
+    SCL = 0;
+  }
+  SDAO = last;
+  i2c_DELAY;
+  SCL = 1;
+  i2c_DELAY;
+  ack = SDAI;
+  SCL = 0;
+//  SDAO = 0;
+  if ( ack == last) *byte = out;
+  return ack;
+}
+/***************************************************************************/
+/***************************************************************************/
+/***************************************************************************/
+char i2c_write( unsigned char adr, unsigned char *bytes, unsigned char cnt) {
+  i2c_start();
+  if ( i2c_outbyte( adr)) {
+    i2c_stop();
+//    printf("iA%02X",adr);
+    return 0;
+  }
+  while(cnt) {
+    if ( i2c_outbyte( *bytes++)) {
+      i2c_stop();
+//      printf("iW%02X(%02X)",adr,*(bytes-1));
+      return 0;
+    }
+    cnt--;
+  }
+  i2c_stop(); /* return bit */
+  return 1;
+}
+/***************************************************************************/
+char i2c_read( unsigned char adr, unsigned char *bytes, unsigned char cnt) {
+  i2c_start();
+  if ( i2c_outbyte( adr)) {
+    i2c_stop();
+//    printf("ia%02X",adr);
+    return 0;
+  }
+  while(cnt) {
+    i2c_inbyte( bytes++, cnt==1); /* check line */
+    cnt--;
+  }
+  i2c_stop(); /* check stop */
+  return 1;
+}
+
diff --git a/board/mcs51/ps1/periph/i2c.h b/board/mcs51/ps1/periph/i2c.h
new file mode 100644 (file)
index 0000000..d0f89c3
--- /dev/null
@@ -0,0 +1,12 @@
+#if !defined(__I2C_H)
+#define __I2C_H
+
+void i2c_init( void);
+char i2c_write( unsigned char adr, unsigned char *bytes, unsigned char cnt);
+char i2c_read( unsigned char adr, unsigned char *bytes, unsigned char cnt);
+
+#define I2C_Write i2c_write
+#define I2C_Read  i2c_read
+
+#endif
+
diff --git a/board/mcs51/ps1/system_def.h b/board/mcs51/ps1/system_def.h
new file mode 100644 (file)
index 0000000..63c035d
--- /dev/null
@@ -0,0 +1,60 @@
+/*******************************************************************
+  Components for embedded applications builded for
+  hisc firmware  
+  system_def_hisc.h - definition of hardware adresses and registers
+  Copyright (C) 2004 by Petr Smolik petr.smolik@wo.cz
+
+ *******************************************************************/
+
+#ifndef _SYSTEM_DEF_HISC_H
+#define _SYSTEM_DEF_HISC_H
+
+#include <mcu_regs.h>
+
+#define CPU_SYS_HZ 11059200l
+
+#define BAUD2BAUDDIV(baud) \
+       ((CPU_SYS_HZ+12*8l*baud)/(12*16l*baud))
+
+#define HZ2TMODE1H(x) \
+        (0x100-((CPU_SYS_HZ/12/x) / 256))
+#define HZ2TMODE1L(x) \
+        (0x100-((CPU_SYS_HZ/12/x) % 256))
+
+#define ES_U ES
+    
+//volatile unsigned long msec_time;
+
+#if 1 /* special for PDIUSBD11 */
+#define PDIUSB_READ_DATA_ADDR   (0x35)
+#define PDIUSB_WRITE_DATA_ADDR  (0x34)
+#define PDIUSB_COMMAND_ADDR     (0x36)
+
+#if defined(SDCC) // sdcc
+ sbit at 0x96 SCL;         // P1.6
+ sbit at 0x97 SDAI;        // P1.7
+ sbit at 0x97 SDAO;        // P1.7
+
+ sbit at 0xB2 IPDI;        // P3.2
+ sbit at 0x94 LEDRX;       // P1.4
+ sbit at 0x95 LEDTX;       // P1.5
+#else
+ sbit  SCL  = P1^6;
+ sbit  SDAI = P1^7;
+ sbit  SDAO = P1^7;
+
+ sbit  IPDI  = P3^2;
+ sbit  LEDRX  = P1^4;
+ sbit  LEDTX  = P1^5; 
+#endif
+
+/* P1.0 .. DACK_N/DMACK0, P7.0 .. DMREQ/DREQ0, P7.2 .. EOT_N/TEND0 */
+//#define ISR_USB_INTV         EXCPTVEC_IRQ6   /* pin IRQ6 on PG.0 */
+#undef  PDIUSB_WITH_ADD_IRQ_HANDLER
+#undef PDIUSB_WITH_EXCPTVECT_SET
+#define PDIUSB_SUPPORT_ENABLED
+#endif 
+
+#endif /* _SYSTEM_DEF_HISC_H_ */
diff --git a/board/mcs51/ulad21/Makefile b/board/mcs51/ulad21/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else   
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/board/mcs51/ulad21/Makefile.omk b/board/mcs51/ulad21/Makefile.omk
new file mode 100644 (file)
index 0000000..948d9c5
--- /dev/null
@@ -0,0 +1,9 @@
+# -*- makefile -*-
+
+include_HEADERS  = system_def.h system_def_msc51_uc1.h
+
+lib_LIBRARIES = boardsup
+
+boardsup_SOURCES = i2c.c
+
+nobase_include_HEADERS = periph/i2c.h
diff --git a/board/mcs51/ulad21/config/config.mscboot b/board/mcs51/ulad21/config/config.mscboot
new file mode 100644 (file)
index 0000000..9ad5088
--- /dev/null
@@ -0,0 +1,35 @@
+# -*- makefile -*-
+
+ARCH=mcs51
+MACH=msc1210
+BOARD=ulad21
+
+APP=mscboot
+APPID=$(APP)-$(BOARD)
+ULAN_CFG=$(APPID)
+
+TARGET_ARCH = -mmcs51 --model-small
+CFLAGS  += $(TARGET_ARCH) 
+LDFLAGS += $(TARGET_ARCH) 
+
+XRAM   = 0x8480
+STACK  = 0xC0
+DATA   = 0x28
+IDATA  = 0x80
+CODE   = 0x0080
+
+PROG_START = 0x0000
+BOOTLOADER_START = 0x0000
+
+LDFLAGS += \
+--xram-loc $(XRAM) \
+--code-loc $(CODE) \
+--data-loc $(DATA) \
+--idata-loc $(IDATA) \
+--stack-loc $(STACK) \
+--no-pack-iram
+
+CONFIG_APP_MSCBOOT=y
+CONFIG_ULAN=y
+CONFIG_MISC_VECT_MSC_BOOT=y
+CONFIG_KEYVAL=y
diff --git a/board/mcs51/ulad21/config/config.thermometer b/board/mcs51/ulad21/config/config.thermometer
new file mode 100644 (file)
index 0000000..3f796c0
--- /dev/null
@@ -0,0 +1,35 @@
+# -*- makefile -*-
+
+ARCH=mcs51
+MACH=msc1210
+BOARD=ulad21
+
+APP=thermometer
+APPID=$(APP)-$(BOARD)
+ULAN_CFG=generic-$(BOARD)
+
+TARGET_ARCH = -mmcs51 --model-large
+CFLAGS  += $(TARGET_ARCH) 
+LDFLAGS += $(TARGET_ARCH) 
+
+XRAM   = 0x8480
+STACK  = 0xC0
+DATA   = 0x28
+IDATA  = 0x80
+CODE   = 0x2000
+
+PROG_START = 0x2000
+BOOTLOADER_START = 0x0000
+
+LDFLAGS += \
+--xram-loc $(XRAM) \
+--code-loc $(CODE) \
+--data-loc $(DATA) \
+--idata-loc $(IDATA) \
+--stack-loc $(STACK) \
+--no-pack-iram
+
+CONFIG_APP_PIKRON_THERMOMETR=y
+CONFIG_ULAN=y
+CONFIG_MISC_VECT_MSC_APP=y
+CONFIG_ULOI_LT=y
diff --git a/board/mcs51/ulad21/config/config.u2u b/board/mcs51/ulad21/config/config.u2u
new file mode 100644 (file)
index 0000000..9579658
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- makefile -*-
+
+ARCH=mcs51
+MACH=msc1210
+BOARD=ulad21
+
+APP=u2u
+APPID=$(APP)-$(BOARD)
+ULAN_CFG=$(APPID)
+
+TARGET_ARCH = -mmcs51 --model-large
+CFLAGS  += $(TARGET_ARCH) 
+LDFLAGS += $(TARGET_ARCH) 
+
+XRAM   = 0x8480
+STACK  = 0xC0
+DATA   = 0x28
+IDATA  = 0x80
+CODE   = 0x2000
+
+PROG_START = 0x2000
+BOOTLOADER_START = 0x0000
+
+LDFLAGS += \
+--xram-loc $(XRAM) \
+--code-loc $(CODE) \
+--data-loc $(DATA) \
+--idata-loc $(IDATA) \
+--stack-loc $(STACK) \
+--no-pack-iram
+
+CONFIG_APP_U2U=y
+CONFIG_ULAN=y
+CONFIG_MISC_VECT_MSC_APP=y
+CONFIG_USB_BASE=y
+CONFIG_USB_PDIUSB=y
diff --git a/board/mcs51/ulad21/i2c.c b/board/mcs51/ulad21/i2c.c
new file mode 100644 (file)
index 0000000..fe1fa0c
--- /dev/null
@@ -0,0 +1,134 @@
+#include <stdio.h>
+#include <system_def.h>
+#include <periph/i2c.h>
+#ifdef __KEIL__
+#include <intrins.h>
+#endif /*__KEIL__*/
+void i2c_init( void) {
+  SDAO = 1; SDAI = 1; SCL = 1;
+}
+/***************************************************************************/
+
+void i2c_wait(void) {
+ #ifdef __KEIL__
+     _nop_();
+     _nop_();
+     _nop_();
+     _nop_();
+     _nop_();
+ #elif SDCC
+  _asm
+     nop;
+     nop;
+     nop;
+     nop;
+     nop;
+  _endasm;
+ #else
+   #error "unsuported compiler!"
+ #endif
+}
+#define i2c_DELAY i2c_wait()
+
+/***************************************************************************/
+void i2c_start( void) {
+  SDAO = 0;
+  i2c_DELAY;
+  SCL = 0;
+  i2c_DELAY;
+}
+/***************************************************************************/
+char i2c_stop( void) {
+  SDAO = 0;
+  i2c_DELAY;
+  SCL = 1;
+  i2c_DELAY;
+  SDAO = 1;
+  return SDAI;
+}
+/***************************************************************************/
+char i2c_outbyte( unsigned char byte) {
+  unsigned char b=8;
+  bit ack = 1;
+  
+  while(b--) {
+    SDAO = (byte & 0x80) ? 1 : 0;
+    byte<<= 1;
+    i2c_DELAY;
+    SCL = 1;
+    i2c_DELAY;
+    SCL = 0;
+  }
+  i2c_DELAY;
+  SDAO = 1;
+  i2c_DELAY;
+  SCL = 1;
+  i2c_DELAY;
+  ack = SDAI;
+  SCL = 0;
+//  SDAO = 0;
+  return ack; /* if ack == 0 then OK */
+}
+/***************************************************************************/
+char i2c_inbyte( unsigned char *byte, bit last) {
+  unsigned char b = 8;
+  unsigned char out = 0;
+  bit ack = 1;
+  
+  while(b--) {
+    SDAO = 1;
+    i2c_DELAY;
+    SCL = 1;
+    i2c_DELAY;
+    out <<= 1;
+    out |= SDAI ? 1 : 0;
+    SCL = 0;
+  }
+  SDAO = last;
+  i2c_DELAY;
+  SCL = 1;
+  i2c_DELAY;
+  ack = SDAI;
+  SCL = 0;
+//  SDAO = 0;
+  if ( ack == last) *byte = out;
+  return ack;
+}
+/***************************************************************************/
+/***************************************************************************/
+/***************************************************************************/
+char i2c_write( unsigned char adr, unsigned char *bytes, unsigned char cnt) {
+  i2c_start();
+  if ( i2c_outbyte( adr)) {
+    i2c_stop();
+//    printf("iA%02X",adr);
+    return 0;
+  }
+  while(cnt) {
+    if ( i2c_outbyte( *bytes++)) {
+      i2c_stop();
+//      printf("iW%02X(%02X)",adr,*(bytes-1));
+      return 0;
+    }
+    cnt--;
+  }
+  i2c_stop(); /* return bit */
+  return 1;
+}
+/***************************************************************************/
+char i2c_read( unsigned char adr, unsigned char *bytes, unsigned char cnt) {
+  i2c_start();
+  if ( i2c_outbyte( adr)) {
+    i2c_stop();
+//    printf("ia%02X",adr);
+    return 0;
+  }
+  while(cnt) {
+    i2c_inbyte( bytes++, cnt==1); /* check line */
+    cnt--;
+  }
+  i2c_stop(); /* check stop */
+  return 1;
+}
+
diff --git a/board/mcs51/ulad21/periph/i2c.h b/board/mcs51/ulad21/periph/i2c.h
new file mode 100644 (file)
index 0000000..d0f89c3
--- /dev/null
@@ -0,0 +1,12 @@
+#if !defined(__I2C_H)
+#define __I2C_H
+
+void i2c_init( void);
+char i2c_write( unsigned char adr, unsigned char *bytes, unsigned char cnt);
+char i2c_read( unsigned char adr, unsigned char *bytes, unsigned char cnt);
+
+#define I2C_Write i2c_write
+#define I2C_Read  i2c_read
+
+#endif
+
diff --git a/board/mcs51/ulad21/system_def.h b/board/mcs51/ulad21/system_def.h
new file mode 100644 (file)
index 0000000..aef9ba6
--- /dev/null
@@ -0,0 +1,46 @@
+/*******************************************************************
+  Components for embedded applications builded for
+  laboratory and medical instruments firmware  
+  system_def.h - common cover for definition of hardware adresses,
+                 registers, timing and other hardware dependant
+                parts of embedded hardware
+  Copyright (C) 2001 by Pavel Pisa pisa@cmp.felk.cvut.cz
+            (C) 2002 by PiKRON Ltd. http://www.pikron.com
+
+ *******************************************************************/
+
+#ifndef _SYSTEM_DEF_H_
+#define _SYSTEM_DEF_H_
+
+#include <types.h>
+
+#define WITH_SFI_SEL
+
+#define VER_CODE(major,minor,patch) (major*0x10000+minor*0x100+patch)
+/* Software version */
+#define SW_VER_ID      "MSC51_UC"
+#define SW_VER_MAJOR   0
+#define SW_VER_MINOR   1
+#define SW_VER_PATCH   0
+#define SW_VER_CODE    VER_CODE(SW_VER_MAJOR,SW_VER_MINOR,SW_VER_PATCH)
+/* Hardware version */
+#define HW_VER_ID      "MSC51_UC"
+#define HW_VER_MAJOR   1
+#define HW_VER_MINOR   0
+#define HW_VER_PATCH   0
+#define HW_VER_CODE    VER_CODE(HW_VER_MAJOR,HW_VER_MINOR,HW_VER_PATCH)
+/* Version of mechanical  */
+#define MECH_VER_ID     "MSC51_UC"
+#define MECH_VER_MAJOR  0
+#define MECH_VER_MINOR  0
+#define MECH_VER_PATCH  0
+#define MECH_VER_CODE  VER_CODE(MECH_VER_MAJOR,MECH_VER_MINOR,MECH_VER_PATCH)
+
+//#include <system_def_jt_usb1.h>
+#include <system_def_msc51_uc1.h>
+//#include <system_def_msc51_u2u_ps1.h>
+//#include <system_def_hisc.h>
+
+#endif /* _SYSTEM_DEF_H_ */
diff --git a/board/mcs51/ulad21/system_def_msc51_uc1.h b/board/mcs51/ulad21/system_def_msc51_uc1.h
new file mode 100644 (file)
index 0000000..cea187b
--- /dev/null
@@ -0,0 +1,80 @@
+/*******************************************************************
+  Components for embedded applications builded for
+  laboratory and medical instruments firmware  
+  system_def_jt_usb1.h - definition of hardware adresses and registers
+                      of the second prototype version of syringe
+                      infussion pump
+  Copyright (C) 2002 by Pavel Pisa pisa@cmp.felk.cvut.cz
+            (C) 2002 by PiKRON Ltd. http://www.pikron.com
+
+ *******************************************************************/
+
+#ifndef _SYSTEM_DEF_HW01_H_
+#define _SYSTEM_DEF_HW01_H_
+
+#include <mcu_regs.h>
+
+#define CPU_SYS_HZ 18432100l
+
+#define BAUD2BAUDDIV(baud) \
+       ((CPU_SYS_HZ+12*8l*baud)/(12*16l*baud))
+
+#define HZ2TMODE1H(x) \
+        (0x100-((CPU_SYS_HZ/12/x) / 256))
+#define HZ2TMODE1L(x) \
+        (0x100-((CPU_SYS_HZ/12/x) % 256))
+
+#define ES_U ES1
+
+//volatile unsigned long msec_time;
+
+#if 1 /* special for PDIUSBD11 */
+#define PDIUSB_READ_DATA_ADDR   (0x35)
+#define PDIUSB_WRITE_DATA_ADDR  (0x34)
+#define PDIUSB_COMMAND_ADDR     (0x36)
+
+#ifdef SDCC
+ sbit at 0xB4 SCL;          // P3.4
+ sbit at 0x90 SDAI;         // P1.0
+ sbit at 0x91 SDAO;         // P1.1
+
+ sbit at 0xB2 IPDI;         // P3.2
+ sbit at 0xB3 LEDTX;        // P3.3
+ sbit at 0xB3 LEDRX;        // P3.3
+ sbit at 0xB3 LED;
+#else
+ sbit  SCL  = P3^4;
+ sbit  SDAI = P1^0;
+ sbit  SDAO = P1^1;
+
+ sbit  IPDI  = P3^2;
+ sbit  LEDRX  = P3^3;
+ sbit  LEDTX  = P3^3; 
+#endif /*SDCC*/
+
+/* P1.0 .. DACK_N/DMACK0, P7.0 .. DMREQ/DREQ0, P7.2 .. EOT_N/TEND0 */
+//#define ISR_USB_INTV         EXCPTVEC_IRQ6   /* pin IRQ6 on PG.0 */
+#undef  PDIUSB_WITH_ADD_IRQ_HANDLER
+#undef PDIUSB_WITH_EXCPTVECT_SET
+#define PDIUSB_SUPPORT_ENABLED
+#endif 
+
+/* IRAM 16 kB of on-chip memory */
+/* 0xffb000-0xffcfff .. 8 kB free */
+/* 0xffd000-0xffdfff .. 4 kB for Flash emulation */
+/* 0xffe000-0xffffc0 .. 4 kB - 64 B free*/
+/* 0xffffc0-0xffffff .. 64 B free*/
+/*
+#define IRAM_START    (volatile __u8 * const)(0xffb000)
+#define IRAM_START1   (volatile __u8 * const)(0xffe000)
+#define FRAM_START    (volatile __u8 * const)(0xffffc0)
+*/
+
+#define KVPB_MINIMALIZED
+#define KVPB_FRAM_START  0x1e00
+#define KVPB_FRAM_SIZE   0x100
+
+#endif /* _SYSTEM_DEF_HW01_H_ */
index a1f997d0298517b45237189d2dc59d9ec05a6d12..36743e7a27a4faa071304096487da7835f8bcec2 100644 (file)
@@ -1,3 +1,5 @@
+# -*- makefile -*-
+
 default_CONFIG = CONFIG_KEYVAL=n
 
 ifeq ($(CONFIG_KEYVAL),y) 
index 9ae9eca218272da168a1a3ddc9ae97f3b67e59d7..8caac73882be2732c7736c37b67d65153b29a556 100644 (file)
@@ -97,8 +97,8 @@ int kvpb_set_key(kvpb_block_t *kvpb_block, kvpb_keyid_t keyid, kvpb_size_t size,
 int kvpb_err_keys(kvpb_block_t *kvpb_block, kvpb_keyid_t keyid);
 int kvpb_check(kvpb_block_t *kvpb_block, uint8_t mode);
 #else
-extern kvpb_block_t kvpb_store;
-#define kvpb_block (&kvpb_store)
+extern kvpb_block_t kvpb_block_global;
+#define kvpb_block (&kvpb_block_global)
 KVPB_DPTRTYPE kvpb_key_t *__kvpb_first(uint8_t mode);
 KVPB_DPTRTYPE kvpb_key_t *__kvpb_find(kvpb_keyid_t keyid, uint8_t mode, KVPB_DPTRTYPE kvpb_key_t *key);
 int __kvpb_get_key(kvpb_keyid_t keyid, kvpb_size_t size, void *buf);
index 5f176982ef05b0683af8b3af282c9a993358b099..1c92d99d1dba02a956372c15e3fe9e14f885fb87 100644 (file)
@@ -1 +1,3 @@
+# -*- makefile -*-
+
 SUBDIRS = base pdiusb more
index d3e62ec01a0ce0f34029dd1bc70680a7918efb39..01d6e0bb4d278c71de49855dce410e795a8cbc62 100644 (file)
@@ -1,3 +1,5 @@
+# -*- makefile -*-
+
 default_CONFIG = CONFIG_USB_BASE=n
 
 ifeq ($(CONFIG_USB_BASE),y) 
index b036b9bd84096cf89150864ec422bc9c6233bde7..c28fbda2690b7f8d7b073eb73d126881ce467d28 100644 (file)
@@ -1,3 +1,5 @@
+# -*- makefile -*-
+
 default_CONFIG = CONFIG_USB_MORE=n
 
 ifeq ($(CONFIG_USB_MORE),y) 
index 49cbb31f5533e8e82154ed62ed7eb9baa0eb4e4d..40b9dfd452b39aaaf711e7979792cb22ac459dc4 100644 (file)
@@ -1,3 +1,5 @@
+# -*- makefile -*-
+
 default_CONFIG = CONFIG_USB_PDIUSB=n
 
 ifeq ($(CONFIG_USB_PDIUSB),y)