Add ez8 start-up logic

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@677 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo 2008-02-13 16:42:28 +00:00
parent 5a6f038b8c
commit dfa1e816c1
3 changed files with 256 additions and 4 deletions

View File

@ -40,7 +40,7 @@ WARCHSRCDIR = ${shell cygpath -w $(ARCHSRCDIR)}
USRINCLUDES = -usrinc:'.;$(WTOPDIR)\sched;$(WARCHSRCDIR);$(WARCHSRCDIR)\common'
INCLUDES = $(ARCHSTDINCLUDES) $(USRINCLUDES)
CFLAGS = $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(INCLUDES) $(ARCHDEFINES)
CPPFLAGS += -I$(ARCHSRCDIR)
CPPFLAGS += -I$(ARCHSRCDIR) -I$(ZDSSTDINCDIR) -I$(ZDSZILOGINCDIR)
LDFLAGS = @"${shell cygpath -w $(ARCHSRCDIR)/nuttx.linkcmd}"
############################################################################

View File

@ -33,9 +33,9 @@
#
############################################################################
HEAD_ASRC = #z8_head.asm
HEAD_SSRC = z8_head.S
CMN_ASRCS =
CMN_SSRCS =
CMN_CSRCS = up_initialize.c up_allocateheap.c up_createstack.c \
up_releasestack.c up_interruptcontext.c up_blocktask.c \
up_unblocktask.c up_exit.c up_releasepending.c \
@ -44,6 +44,6 @@ CMN_CSRCS = up_initialize.c up_allocateheap.c up_createstack.c \
up_schedulesigaction.c up_sigdeliver.c \
up_registerdump.c up_usestack.c
CHIP_ASRCS = #z8_saveusercontext.asm z8_restoreusercontext.asm
CHIP_SSRCS = #z8_saveusercontext.S z8_restoreusercontext.S
CHIP_CSRCS = #z8_initialstate.c z8_irq.c

252
arch/z80/src/z8/z8_head.S Executable file
View File

@ -0,0 +1,252 @@
/**************************************************************************
* arch/z80/src/z8/z8_head.S
* ez8 Reset Entry Point
*
* Copyright (C) 2008 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS or IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER or CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, or CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS or SERVICES; LOSS
* OF USE, DATA, or PROFITS; or BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, or TORT (INCLUDING NEGLIGENCE or OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
**************************************************************************/
/**************************************************************************
* Included Files
**************************************************************************/
#include <nuttx/config.h>
#include <ez8.inc>
#include <configl.inc>
/**************************************************************************
* Definitions
**************************************************************************/
/* Assuem the large model */
#if !defined(CONFIG_Z8_MODEL_LARGE) && !defined(CONFIG_Z8_MODEL_SMALL)
# define CONFIG_Z8_MODEL_LARGE 1
# undef CONFIG_Z8_MODEL_SMALL
#endif
#ifdef __Z8F1680
# define CONFIG_Z8_COPYPRAM
#else
# undef CONFIG_Z8_COPYPRAM
#endif
/**************************************************************************
* External References / External Definitions
**************************************************************************/
xref _z16f_clkinit:ROM
xref _z16f_lowinit:ROM
#ifdef CONFIG_ARCH_LEDS
xref _up_ledinit:ROM
#endif
#if defined(CONFIG_USE_LOWUARTINIT)
xref _z16f_lowuartinit:ROM
#elif defined(CONFIG_USE_EARLYSERIALINIT)
xref _up_earlyserialinit:ROM
#endif
xref _os_start:ROM
xref _up_doirq:ROM
xref _low_nearbss
xref _len_nearbss
xref _low_farbss
xref _len_farbss
xref _low_neardata
xref _len_neardata
xref _low_near_romdata
xref _low_fardata
xref _len_fardata
xref _low_far_romdata
#ifdef CONFIG_Z8_COPYPRAM
xref _low_pramseg
xref _len_pramseg
xref _low_pram_romdata
#endif
xref _far_stack
xref _near_stack
xdef _z8_reset
xdef __intrp
/**************************************************************************
* Code
**************************************************************************/
/* Vector table space allocation */
include "vect.inc"
/* Reset vector */
vector reset=_z8_reset
/**************************************************************************
* Name: _z16f_reset
*
* Description:
* Reset entry point
*
**************************************************************************/
define startup, space=rom
segment startup
_z8_reset:
/* Set the register pointer for working registers e0-ef */
srp #%e0
/* Initialize the stack pointer */
ldx spl, #low(_far_stack+1)
ldx sph, #high(_far_stack+1)
/* Clear internal register ram area (c_nearbss) */
ld r0, #_low_nearbss
ld r2, #_len_nearbss
cp r2, #0
jr z, _z8_reset2
_z8_reset1:
clr @r0
inc r0
djnz r2, _z8_reset1
/* Clear extended ram area (c_farbss) */
_z8_reset2:
ld r2, #high(_low_farbss)
ld r3, #low(_low_farbss)
ld r0, #high(_len_farbss)
ld r1, #low(_len_farbss)
ld r4, r0
or r4, r1
jr z, _z8_reset4
clr r4
_z8_reset3:
ldx @rr2,r4
incw rr2
decw rr0
jr nz, _z8_reset3
/* Copy ROM data into internal RAM */
_z8_reset4:
ld r0, #high(_low_near_romdata)
ld r1, #low(_low_near_romdata)
ld r3, #_len_neardata
ld r4, #_low_neardata
or r3, r3
_z8_reset5:
ldci @r4, @rr0
djnz r3, _z8_reset5
/* Copy ROM data into extended RAM */
ld r0, #high(_low_fardata)
ld r1, #low(_low_fardata)
ld r2, #high(_low_far_romdata)
ld r3, #low(_low_far_romdata)
ld r4, #high(_len_fardata)
ld r5, #low(_len_fardata)
ld r6, r4
or r6, r5
jr z, _z8_reset7
_z8_reset6:
ldc r6, @rr2
ldx @rr0, r6
incw rr0
incw rr2
decw rr4
jr nz, _z8_reset6
/* Copy ROM copy of code into Program RAM */
_z8_reset7:
#ifdef CONFIG_Z8_COPYPRAM
ld r0, #high(_low_pramseg)
ld r1, #low(_low_pramseg)
ld r2, #high(_low_pram_romdata)
ld r3, #low(_low_pram_romdata)
ld r4, #high(_len_pramseg)
ld r5, #low(_len_pramseg)
ld r6, r4
or r6, r5
jr z, _z8_reset9
_z8_reset8:
ldc r6, @rr2
ldc @rr0, r6
incw rr0
incw rr2
decw rr4
jr nz, _z8_reset8
_z8_reset9:
#endif
/* Start NuttX */
ldx __intrp,#0
xor r15, r15
xor r14, r14
call _os_start
/* We should never get here */
_z8_reset_halt:
jr _z8_reset_halt
/**************************************************************************
* Code
**************************************************************************/
#ifdef CONFIG_Z8_MODEL_LARGE
segment FAR_BSS
__intrp ds 1
#else
segment NEAR_BSS
__intrp ds 1
#endif
/* Set aside area for working registers */
define workingreg, space=rdata, org=%E0
segment workingreg
ds %10
end _z8_reset