[PATCH] This patch contains the changes required to get the mrm332 bsp working again.
Gedare Bloom
gedare at rtems.org
Wed Mar 26 15:35:08 UTC 2014
Thanks James,
I have checked-in with a slightly modified commit message and
regenerated the preinstall.am. (If you did that manually, note that
the correct way is to use bootstrap -p from the rtems.git root
directory).
http://git.rtems.org/rtems/commit/?id=89aa1ec87da68b8a6cff2233552a739173e676a4
It would be good to investigate how to condition optimization flags on
whether or not BSP_SMALL_MEMORY is defined.
-Gedare
On Mon, Mar 24, 2014 at 5:32 AM, James Fitzsimons
<james.fitzsimons at gmail.com> wrote:
> Changed console driver to use interrupts instead of polling.
> Change to avoid overwriting CPU32Bug interrupt vector when setting up the Sci interrupt handler.
> Fixed type for boolean flag in bsp.h.
> Changed mrm332.h to use 25Mhz clock.
> Fixes to mrm332.cfg to use correct mcpu32 value for RTEMS_CPU_MODEL instead of m68332 which is no longer supported.
> Added -mcpu=cpu32 to compiler options.
> Removed broken ROM linker script and replaced broken RAM linker script with working ROM linker script.
> Removed no longer required file except_vect_332_ROM.S.
> Enabled 0xbeefbeef magic string in start.S to allow MRM version of CPU32Bug to auto run RTEMS.
> Removed old code from start.S
> Changed compiler optimization flag to optimize for size.
> ---
> c/src/lib/libbsp/m68k/mrm332/Makefile.am | 5 +-
> c/src/lib/libbsp/m68k/mrm332/console/console.c | 2 +-
> c/src/lib/libbsp/m68k/mrm332/console/sci.c | 19 +-
> c/src/lib/libbsp/m68k/mrm332/include/bsp.h | 2 +-
> c/src/lib/libbsp/m68k/mrm332/include/mrm332.h | 7 +-
> .../lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg | 34 +--
> c/src/lib/libbsp/m68k/mrm332/preinstall.am | 3 -
> c/src/lib/libbsp/m68k/mrm332/start/start.S | 125 ++-------
> .../m68k/mrm332/startup/except_vect_332_ROM.S | 289 --------------------
> c/src/lib/libbsp/m68k/mrm332/startup/linkcmds | 302 +++++++++++----------
> c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM | 212 ---------------
> c/src/lib/libbsp/m68k/mrm332/startup/start_c.c | 185 ++++++-------
> 12 files changed, 296 insertions(+), 889 deletions(-)
> delete mode 100644 c/src/lib/libbsp/m68k/mrm332/startup/except_vect_332_ROM.S
> delete mode 100644 c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM
>
> diff --git a/c/src/lib/libbsp/m68k/mrm332/Makefile.am b/c/src/lib/libbsp/m68k/mrm332/Makefile.am
> index 29b9b4a..9de7cee 100644
> --- a/c/src/lib/libbsp/m68k/mrm332/Makefile.am
> +++ b/c/src/lib/libbsp/m68k/mrm332/Makefile.am
> @@ -22,7 +22,7 @@ noinst_LIBRARIES = libbspstart.a
> libbspstart_a_SOURCES = start/start.S
> project_lib_DATA = start.$(OBJEXT)
>
> -dist_project_lib_DATA += startup/linkcmds startup/linkcmds_ROM
> +dist_project_lib_DATA += startup/linkcmds
>
> noinst_LIBRARIES += libbsp.a
> libbsp_a_SOURCES =
> @@ -33,8 +33,7 @@ libbsp_a_SOURCES += startup/start_c.c ../../shared/bsplibc.c \
> ../../shared/bootcard.c ../../shared/sbrk.c \
> ../../shared/bspclean.c \
> ../../shared/setvec.c ../../shared/bsppretaskinghook.c \
> - ../../shared/bspgetworkarea.c ../../shared/gnatinstallhandler.c \
> - startup/except_vect_332_ROM.S
> + ../../shared/bspgetworkarea.c ../../shared/gnatinstallhandler.c
> # clock
> libbsp_a_SOURCES += clock/ckinit.c
> # console
> diff --git a/c/src/lib/libbsp/m68k/mrm332/console/console.c b/c/src/lib/libbsp/m68k/mrm332/console/console.c
> index ce1547e..94fb803 100644
> --- a/c/src/lib/libbsp/m68k/mrm332/console/console.c
> +++ b/c/src/lib/libbsp/m68k/mrm332/console/console.c
> @@ -42,7 +42,7 @@ rtems_device_driver console_open(
>
> /* SCI internal uart */
>
> - status = rtems_termios_open( major, minor, arg, SciGetTermiosHandlers( TRUE ) );
> + status = rtems_termios_open( major, minor, arg, SciGetTermiosHandlers( FALSE ) );
>
> return status;
> }
> diff --git a/c/src/lib/libbsp/m68k/mrm332/console/sci.c b/c/src/lib/libbsp/m68k/mrm332/console/sci.c
> index 4b67c33..a671fb0 100644
> --- a/c/src/lib/libbsp/m68k/mrm332/console/sci.c
> +++ b/c/src/lib/libbsp/m68k/mrm332/console/sci.c
> @@ -351,8 +351,8 @@ rtems_isr SciIsr( rtems_vector_number vector )
> if ( (*SCSR) & SCI_ERROR_OVERRUN ) SciErrorsOverrun ++;
>
> /* see if it was a transmit interrupt */
> -
> - if ( (*SCSR) & SCI_XMTR_AVAILABLE ) /* data reg empty, xmt complete */
> + /* data reg empty, xmt complete */
> + if ( ( *SCCR1 & SCI_ENABLE_INT_TX ) && ( (*SCSR) & SCI_XMTR_AVAILABLE ) )
> {
> SciDisableTransmitInterrupts();
>
> @@ -554,12 +554,17 @@ int SciInterruptOpen(
>
> SciSetDataBits(SCI_8_DATA_BITS); /* set data bits to 8 */
>
> - /* Install our interrupt handler into RTEMS, where does 66 come from? */
> + /* Install our interrupt handler into RTEMS. */
> + /* 68 is an unused user-defined vector. Note that the vector must be */
> + /* even - it sets the low bit for SPI interrupts, and clears it for */
> + /* SCI interrupts. Also note that vector 66 is used by CPU32bug on */
> + /* the mrm332. */
>
> - rtems_interrupt_catch( SciIsr, 66, &old_vector );
> + rtems_interrupt_catch( SciIsr, 68, &old_vector );
>
> - *QIVR = 66;
> - *QIVR &= 0xf8;
> + *QSMCR = (*QSMCR & ~IARB) | 1; // Is 1 a good value for qsm iarb?
> + *QIVR = 68;
> + *QILR &= 0xf8;
> *QILR |= 0x06 & 0x07;
>
> SciEnableTransmitter(); /* enable the transmitter */
> @@ -1382,7 +1387,7 @@ void SciWriteCharWait(uint8_t c)
> {
> /* poll the fifo, waiting for room for another character */
>
> - while ( ( *SCSR & SCI_XMTR_AVAILABLE ) == 0 )
> + while ( ( *SCSR & SCI_XMTR_AVAILABLE ) != SCI_XMTR_AVAILABLE )
> {
> /* Either we are writing to the fifo faster than
> * the uart can clock bytes out onto the cable,
> diff --git a/c/src/lib/libbsp/m68k/mrm332/include/bsp.h b/c/src/lib/libbsp/m68k/mrm332/include/bsp.h
> index 456b315..8f2c7cf 100644
> --- a/c/src/lib/libbsp/m68k/mrm332/include/bsp.h
> +++ b/c/src/lib/libbsp/m68k/mrm332/include/bsp.h
> @@ -42,7 +42,7 @@ extern char _copy_start[];
> extern char _edata[];
> extern char _clear_start[];
> extern char end[];
> -extern char _copy_data_from_rom[];
> +extern bool _copy_data_from_rom;
>
> /* constants */
>
> diff --git a/c/src/lib/libbsp/m68k/mrm332/include/mrm332.h b/c/src/lib/libbsp/m68k/mrm332/include/mrm332.h
> index 58e5b20..1b86727 100644
> --- a/c/src/lib/libbsp/m68k/mrm332/include/mrm332.h
> +++ b/c/src/lib/libbsp/m68k/mrm332/include/mrm332.h
> @@ -27,6 +27,8 @@
> /* System Clock definitions */
> #define XTAL 32768.0 /* crystal frequency in Hz */
>
> +/* Specify the CPU frequency. Do not specify a faster clock than your */
> +/* CPU is rated for! */
> #if 0
> /* Default MRM clock rate (8.388688 MHz) set by CPU32: */
> #define MRM_W 0 /* system clock parameters */
> @@ -34,18 +36,19 @@
> #define MRM_Y 0x3f
> #endif
>
> -#if 1
> +#if 0
> /* 16.77722 MHz: */
> #define MRM_W 1 /* system clock parameters */
> #define MRM_X 1
> #define MRM_Y 0x0f
> #endif
>
> -#if 0
> +#if 1
> /* 25.16582 MHz: */
> #define MRM_W 1 /* system clock parameters */
> #define MRM_X 1
> #define MRM_Y 0x17
> +#define SET_EDIV
> #endif
>
> #define SYS_CLOCK (XTAL*4.0*(MRM_Y+1)*(1 << (2*MRM_W+MRM_X)))
> diff --git a/c/src/lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg b/c/src/lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg
> index bf55e4f..de07e73 100644
> --- a/c/src/lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg
> +++ b/c/src/lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg
> @@ -5,41 +5,15 @@
> include $(RTEMS_ROOT)/make/custom/default.cfg
>
> RTEMS_CPU=m68k
> -RTEMS_CPU_MODEL=m68332
> +RTEMS_CPU_MODEL=mcpu32
>
> # This contains the compiler options necessary to select the CPU model
> # and (hopefully) optimize for it.
> CPU_CFLAGS = -mcpu=cpu32
>
> -# optimize flag: typically -O2
> -CFLAGS_OPTIMIZE_V = -O2 -g -fomit-frame-pointer
> +# using optimise for size due to small memory on target board.
> +CFLAGS_OPTIMIZE_V = -Os -g -fomit-frame-pointer
>
> -ifeq ($(MRM_IN_ROM),yes)
> -# Build a rommable image - move the .data section after the .text section
> -# in the image.
> -CPU_CFLAGS += -qnolinkcmds -T $(exec_prefix)/mrm332/lib/linkcmds_ROM
> -endif
> -
> -ifeq ($(MRM_IN_ROM),yes)
> -define bsp-post-link
> - $(OBJCOPY) --adjust-section-vma \
> - .data=`m68k-rtems-objdump --section-headers $(basename $@).pxe | \
> - awk 'function h2d(x) { x=toupper(x); digits=length(x); s=0 ; \
> - for (p=digits; p>0; p--) \
> - s += (16^(p-1)) * ( index("0123456789ABCDEF",\
> - substr(x,1+digits-p,1)) -1 );\
> - return s } ;\
> - /\.text/ { base = $$4 ; size = $$3 };\
> - END { printf("0x%x", h2d(base) + h2d(size)) }'\
> - ` $(basename $@).pxe $(basename $@)$(EXEEXT)
> - $(OBJCOPY) -O srec $(basename $@)$(EXEEXT) $(basename $@).srec
> - sed -e 's/.$$//' -e '/^S0/d' $(basename $@).srec | \
> - $(PACKHEX) > $(basename $@)$(DOWNEXT)
> - $(NM) -g -n $(basename $@).pxe > $(basename $@).pnum
> - rm -f $(basename $@).srec $(basename $@).srec
> - $(default-bsp-post-link)
> -endef
> -else
> define bsp-post-link
> $(OBJCOPY) -O srec $(basename $@)$(EXEEXT) $(basename $@).srec
> sed -e 's/.$$//' -e '/^S0/d' $(basename $@).srec | \
> @@ -47,4 +21,4 @@ define bsp-post-link
> rm -f $(basename $@).srec
> $(default-bsp-post-link)
> endef
> -endif
> +
> diff --git a/c/src/lib/libbsp/m68k/mrm332/preinstall.am b/c/src/lib/libbsp/m68k/mrm332/preinstall.am
> index 4a71e7d..19e184f 100644
> --- a/c/src/lib/libbsp/m68k/mrm332/preinstall.am
> +++ b/c/src/lib/libbsp/m68k/mrm332/preinstall.am
> @@ -69,7 +69,4 @@ $(PROJECT_LIB)/linkcmds: startup/linkcmds $(PROJECT_LIB)/$(dirstamp)
> $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds
> PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds
>
> -$(PROJECT_LIB)/linkcmds_ROM: startup/linkcmds_ROM $(PROJECT_LIB)/$(dirstamp)
> - $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds_ROM
> -PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds_ROM
>
> diff --git a/c/src/lib/libbsp/m68k/mrm332/start/start.S b/c/src/lib/libbsp/m68k/mrm332/start/start.S
> index e8f7514..5e2bbeb 100644
> --- a/c/src/lib/libbsp/m68k/mrm332/start/start.S
> +++ b/c/src/lib/libbsp/m68k/mrm332/start/start.S
> @@ -22,7 +22,7 @@ BEGIN_CODE
>
> /* Put the header necessary for the modified CPU32bug to automatically
> start up rtems: */
> -#if 0
> +#if 1
> .long 0xbeefbeef ;
> #endif
> .long 0 ;
> @@ -31,11 +31,16 @@ BEGIN_CODE
> .global start
> start:
>
> - oriw #0x0700,sr
> - movel #end, d0
> - addl #_StackSize,d0
> + oriw #0x0700,sr /* Mask off interupts */
> +
> + // Set VBR to CPU32Bug vector table address
> + movel #0x0,d0 /* Use the initial vectors until we get going */
> + movecl d0,vbr
> +
> + movel #end, d0 /* Next 3 instructions set stack pointer */
> + addl #_StackSize,d0 /* sp = end + _StackSize from linker script */
> movel d0,sp
> - movel d0,a6
> + movel d0,a6
>
> /* include in ram_init.S */
> /*
> @@ -46,6 +51,13 @@ BEGIN_CODE
>
> /* Module Configuration Register */
> /* see section(s) 3.1.3-3.1.6 of the SIM Reference Manual */
> + /* SIMCR etc and SAM macro all defined in sim.h found at */
> + /* /cpukit/score/cpu/m68k/rtems/m68k/sim.h */
> + /* The code below does the following: */
> + /* - Sets Freeze Software Enable */
> + /* - Turns off Show Cycle Enable */
> + /* - Sets the location of SIM module mapping */
> + /* - Sets the SIM Interrupt Arbitration Field */
> lea SIMCR, a0
> movew #FRZSW,d0
> oriw #SAM(0,8,SHEN),d0
> @@ -57,106 +69,3 @@ BEGIN_CODE
>
> END_CODE
>
> -#if 0
> -
> - /* Synthesizer Control Register */
> - /* see section(s) 4.8 */
> - /* end include in ram_init.S */
> - *SYNCR = (unsigned short int)
> - ( SAM(MRM_W,15,VCO) | SAM(0x0,14,PRESCALE) | SAM(MRM_Y,8,COUNTER) );
> - while (! (*SYNCR & SLOCK)); /* protect from clock overshoot */
> - /* include in ram_init.S */
> - *SYNCR = (unsigned short int)
> - ( SAM(MRM_W,15,VCO) | SAM(MRM_X,14,PRESCALE) | SAM(MRM_Y,8,COUNTER) );
> -
> - /* System Protection Control Register */
> - /* !!! can only write to once after reset !!! */
> - /* see section 3.8.4 of the SIM Reference Manual */
> - *SYPCR = (unsigned char)( HME | BME );
> -
> - /* Periodic Interrupr Control Register */
> - /* see section 3.8.2 of the SIM Reference Manual */
> - *PICR = (unsigned short int)
> - ( SAM(0,8,PIRQL) | SAM(MRM_PIV,0,PIV) );
> - /* ^^^ zero disables interrupt, don't enable here or ram_init will
> - be wrong. It's enabled below. */
> -
> - /* Periodic Interrupt Timer Register */
> - /* see section 3.8.3 of the SIM Reference Manual */
> - *PITR = (unsigned short int)( SAM(0x09,0,PITM) );
> - /* 1.098mS interrupt, assuming 32.768 KHz input clock */
> -
> - /* Port C Data */
> - /* load values before enabled */
> - *PORTC = (unsigned char) 0x0;
> -
> - /* Port E and F Data Register */
> - /* see section 9 of the SIM Reference Manual */
> - *PORTE0 = (unsigned char) 0;
> - *PORTF0 = (unsigned char) 0;
> -
> - /* Port E and F Data Direction Register */
> - /* see section 9 of the SIM Reference Manual */
> - *DDRE = (unsigned char) 0xff;
> - *DDRF = (unsigned char) 0xfd;
> -
> - /* Port E and F Pin Assignment Register */
> - /* see section 9 of the SIM Reference Manual */
> - *PEPAR = (unsigned char) 0;
> - *PFPAR = (unsigned char) 0;
> -
> - /* end of SIM initalization code */
> - /* end include in ram_init.S */
> -
> - /*
> - * Initialize RAM by copying the .data section out of ROM (if
> - * needed) and "zero-ing" the .bss section.
> - */
> - {
> - register char *src = _etext;
> - register char *dst = _copy_start;
> -
> - if (_copy_data_from_rom)
> - /* ROM has data at end of text; copy it. */
> - while (dst < _edata)
> - *dst++ = *src++;
> -
> - /* Zero bss */
> - for (dst = _clear_start; dst< end; dst++)
> - {
> - *dst = 0;
> - }
> - }
> -
> - /*
> - * Initialize vector table.
> - */
> - {
> - rtems_isr_entry *monitors_vector_table;
> -
> - m68k_get_vbr(monitors_vector_table);
> -
> - M68Kvec[ 4 ] = monitors_vector_table[ 4 ]; /* breakpoints vector */
> - M68Kvec[ 9 ] = monitors_vector_table[ 9 ]; /* trace vector */
> - M68Kvec[ 31 ] = monitors_vector_table[ 31 ]; /* level 7 interrupt */
> - M68Kvec[ 47 ] = monitors_vector_table[ 47 ]; /* system call vector */
> - M68Kvec[ 66 ] = monitors_vector_table[ 66 ]; /* user defined */
> -
> - m68k_set_vbr(&M68Kvec);
> - }
> -
> - /*
> - * Initalize the board.
> - */
> - Spurious_Initialize();
> - console_init();
> -
> - /*
> - * Execute main with arguments argc and agrv.
> - */
> - boot_card((void*)0);
> - reboot();
> -
> -}
> -
> -#endif
> diff --git a/c/src/lib/libbsp/m68k/mrm332/startup/except_vect_332_ROM.S b/c/src/lib/libbsp/m68k/mrm332/startup/except_vect_332_ROM.S
> deleted file mode 100644
> index 6a2e679..0000000
> --- a/c/src/lib/libbsp/m68k/mrm332/startup/except_vect_332_ROM.S
> +++ /dev/null
> @@ -1,289 +0,0 @@
> -/* Exception Vector definitions follow */
> -
> - /* !!! Warning !!! This table is not tested, and
> - the user must make sure it is complete. */
> -
> - /* If we use TRAP #15 for reboot, note that group 0 and 1 exceptions
> - will have priority. */
> -
> - /* This is the "magic word" that CPU32bug uses to indicate that
> - there is a bootable image here. */
> - .long 0xBEEFBEEF
> -
> - /* Vector 0: RESET: Initial SSP */
> - .long _RamEnd
> - /* Vector 1: RESET: Initial PC */
> - .long start
> -
> - /* default action for undefined vectors is to re-boot */
> -
> - /* Note group 0 and 1 exception (like trace) have priority
> - over other exceptions (like trap #15) that may call this. */
> -
> - /* Vectors 2-255 */
> - .long reboot /* exception vector: 2 */
> - .long reboot /* exception vector: 3 */
> - .long reboot /* exception vector: 4 */
> - .long reboot /* exception vector: 5 */
> - .long reboot /* exception vector: 6 */
> - .long reboot /* exception vector: 7 */
> - .long reboot /* exception vector: 8 */
> - .long reboot /* exception vector: 9 */
> - .long reboot /* exception vector: 10 */
> - .long reboot /* exception vector: 11 */
> - .long reboot /* exception vector: 12 */
> - .long reboot /* exception vector: 13 */
> - .long reboot /* exception vector: 14 */
> - .long reboot /* exception vector: 15 */
> - .long reboot /* exception vector: 16 */
> - .long reboot /* exception vector: 17 */
> - .long reboot /* exception vector: 18 */
> - .long reboot /* exception vector: 19 */
> - .long reboot /* exception vector: 20 */
> - .long reboot /* exception vector: 21 */
> - .long reboot /* exception vector: 22 */
> - .long reboot /* exception vector: 23 */
> - .long reboot /* exception vector: 24 */
> - .long reboot /* exception vector: 25 */
> - .long reboot /* exception vector: 26 */
> - .long reboot /* exception vector: 27 */
> - .long reboot /* exception vector: 28 */
> - .long reboot /* exception vector: 29 */
> - .long reboot /* exception vector: 30 */
> - .long reboot /* exception vector: 31 */
> - .long reboot /* exception vector: 32 */
> - .long reboot /* exception vector: 33 */
> - .long reboot /* exception vector: 34 */
> - .long reboot /* exception vector: 35 */
> - .long reboot /* exception vector: 36 */
> - .long reboot /* exception vector: 37 */
> - .long reboot /* exception vector: 38 */
> - .long reboot /* exception vector: 39 */
> - .long reboot /* exception vector: 40 */
> - .long reboot /* exception vector: 41 */
> - .long reboot /* exception vector: 42 */
> - .long reboot /* exception vector: 43 */
> - .long reboot /* exception vector: 44 */
> - .long reboot /* exception vector: 45 */
> - .long reboot /* exception vector: 46 */
> - .long _reboot /* the reboot trap: 47 */
> - .long reboot /* exception vector: 48 */
> - .long reboot /* exception vector: 49 */
> - .long reboot /* exception vector: 50 */
> - .long reboot /* exception vector: 51 */
> - .long reboot /* exception vector: 52 */
> - .long reboot /* exception vector: 53 */
> - .long reboot /* exception vector: 54 */
> - .long reboot /* exception vector: 55 */
> - .long reboot /* exception vector: 56 */
> - .long reboot /* exception vector: 57 */
> - .long reboot /* exception vector: 58 */
> - .long reboot /* exception vector: 59 */
> - .long reboot /* exception vector: 60 */
> - .long reboot /* exception vector: 61 */
> - .long reboot /* exception vector: 62 */
> - .long reboot /* exception vector: 63 */
> - .long reboot /* exception vector: 64 */
> - .long reboot /* exception vector: 65 */
> - .long reboot /* exception vector: 66 */
> - .long reboot /* exception vector: 67 */
> - .long reboot /* exception vector: 68 */
> - .long reboot /* exception vector: 69 */
> - .long reboot /* exception vector: 70 */
> - .long reboot /* exception vector: 71 */
> - .long reboot /* exception vector: 72 */
> - .long reboot /* exception vector: 73 */
> - .long reboot /* exception vector: 74 */
> - .long reboot /* exception vector: 75 */
> - .long reboot /* exception vector: 76 */
> - .long reboot /* exception vector: 77 */
> - .long reboot /* exception vector: 78 */
> - .long reboot /* exception vector: 79 */
> - .long reboot /* exception vector: 80 */
> - .long reboot /* exception vector: 81 */
> - .long reboot /* exception vector: 82 */
> - .long reboot /* exception vector: 83 */
> - .long reboot /* exception vector: 84 */
> - .long reboot /* exception vector: 85 */
> - .long reboot /* exception vector: 86 */
> - .long reboot /* exception vector: 87 */
> - .long reboot /* exception vector: 88 */
> - .long reboot /* exception vector: 89 */
> - .long reboot /* exception vector: 90 */
> - .long reboot /* exception vector: 91 */
> - .long reboot /* exception vector: 92 */
> - .long reboot /* exception vector: 93 */
> - .long reboot /* exception vector: 94 */
> - .long reboot /* exception vector: 95 */
> - .long reboot /* exception vector: 96 */
> - .long reboot /* exception vector: 97 */
> - .long reboot /* exception vector: 98 */
> - .long reboot /* exception vector: 99 */
> - .long reboot /* exception vector: 100 */
> - .long reboot /* exception vector: 101 */
> - .long reboot /* exception vector: 102 */
> - .long reboot /* exception vector: 103 */
> - .long reboot /* exception vector: 104 */
> - .long reboot /* exception vector: 105 */
> - .long reboot /* exception vector: 106 */
> - .long reboot /* exception vector: 107 */
> - .long reboot /* exception vector: 108 */
> - .long reboot /* exception vector: 109 */
> - .long reboot /* exception vector: 110 */
> - .long reboot /* exception vector: 111 */
> - .long reboot /* exception vector: 112 */
> - .long reboot /* exception vector: 113 */
> - .long reboot /* exception vector: 114 */
> - .long reboot /* exception vector: 115 */
> - .long reboot /* exception vector: 116 */
> - .long reboot /* exception vector: 117 */
> - .long reboot /* exception vector: 118 */
> - .long reboot /* exception vector: 119 */
> - .long reboot /* exception vector: 120 */
> - .long reboot /* exception vector: 121 */
> - .long reboot /* exception vector: 122 */
> - .long reboot /* exception vector: 123 */
> - .long reboot /* exception vector: 124 */
> - .long reboot /* exception vector: 125 */
> - .long reboot /* exception vector: 126 */
> - .long reboot /* exception vector: 127 */
> - .long reboot /* exception vector: 128 */
> - .long reboot /* exception vector: 129 */
> - .long reboot /* exception vector: 130 */
> - .long reboot /* exception vector: 131 */
> - .long reboot /* exception vector: 132 */
> - .long reboot /* exception vector: 133 */
> - .long reboot /* exception vector: 134 */
> - .long reboot /* exception vector: 135 */
> - .long reboot /* exception vector: 136 */
> - .long reboot /* exception vector: 137 */
> - .long reboot /* exception vector: 138 */
> - .long reboot /* exception vector: 139 */
> - .long reboot /* exception vector: 140 */
> - .long reboot /* exception vector: 141 */
> - .long reboot /* exception vector: 142 */
> - .long reboot /* exception vector: 143 */
> - .long reboot /* exception vector: 144 */
> - .long reboot /* exception vector: 145 */
> - .long reboot /* exception vector: 146 */
> - .long reboot /* exception vector: 147 */
> - .long reboot /* exception vector: 148 */
> - .long reboot /* exception vector: 149 */
> - .long reboot /* exception vector: 150 */
> - .long reboot /* exception vector: 151 */
> - .long reboot /* exception vector: 152 */
> - .long reboot /* exception vector: 153 */
> - .long reboot /* exception vector: 154 */
> - .long reboot /* exception vector: 155 */
> - .long reboot /* exception vector: 156 */
> - .long reboot /* exception vector: 157 */
> - .long reboot /* exception vector: 158 */
> - .long reboot /* exception vector: 159 */
> - .long reboot /* exception vector: 160 */
> - .long reboot /* exception vector: 161 */
> - .long reboot /* exception vector: 162 */
> - .long reboot /* exception vector: 163 */
> - .long reboot /* exception vector: 164 */
> - .long reboot /* exception vector: 165 */
> - .long reboot /* exception vector: 166 */
> - .long reboot /* exception vector: 167 */
> - .long reboot /* exception vector: 168 */
> - .long reboot /* exception vector: 169 */
> - .long reboot /* exception vector: 170 */
> - .long reboot /* exception vector: 171 */
> - .long reboot /* exception vector: 172 */
> - .long reboot /* exception vector: 173 */
> - .long reboot /* exception vector: 174 */
> - .long reboot /* exception vector: 175 */
> - .long reboot /* exception vector: 176 */
> - .long reboot /* exception vector: 177 */
> - .long reboot /* exception vector: 178 */
> - .long reboot /* exception vector: 179 */
> - .long reboot /* exception vector: 180 */
> - .long reboot /* exception vector: 181 */
> - .long reboot /* exception vector: 182 */
> - .long reboot /* exception vector: 183 */
> - .long reboot /* exception vector: 184 */
> - .long reboot /* exception vector: 185 */
> - .long reboot /* exception vector: 186 */
> - .long reboot /* exception vector: 187 */
> - .long reboot /* exception vector: 188 */
> - .long reboot /* exception vector: 189 */
> - .long reboot /* exception vector: 190 */
> - .long reboot /* exception vector: 191 */
> - .long reboot /* exception vector: 192 */
> - .long reboot /* exception vector: 193 */
> - .long reboot /* exception vector: 194 */
> - .long reboot /* exception vector: 195 */
> - .long reboot /* exception vector: 196 */
> - .long reboot /* exception vector: 197 */
> - .long reboot /* exception vector: 198 */
> - .long reboot /* exception vector: 199 */
> - .long reboot /* exception vector: 200 */
> - .long reboot /* exception vector: 201 */
> - .long reboot /* exception vector: 202 */
> - .long reboot /* exception vector: 203 */
> - .long reboot /* exception vector: 204 */
> - .long reboot /* exception vector: 205 */
> - .long reboot /* exception vector: 206 */
> - .long reboot /* exception vector: 207 */
> - .long reboot /* exception vector: 208 */
> - .long reboot /* exception vector: 209 */
> - .long reboot /* exception vector: 210 */
> - .long reboot /* exception vector: 211 */
> - .long reboot /* exception vector: 212 */
> - .long reboot /* exception vector: 213 */
> - .long reboot /* exception vector: 214 */
> - .long reboot /* exception vector: 215 */
> - .long reboot /* exception vector: 216 */
> - .long reboot /* exception vector: 217 */
> - .long reboot /* exception vector: 218 */
> - .long reboot /* exception vector: 219 */
> - .long reboot /* exception vector: 220 */
> - .long reboot /* exception vector: 221 */
> - .long reboot /* exception vector: 222 */
> - .long reboot /* exception vector: 223 */
> - .long reboot /* exception vector: 224 */
> - .long reboot /* exception vector: 225 */
> - .long reboot /* exception vector: 226 */
> - .long reboot /* exception vector: 227 */
> - .long reboot /* exception vector: 228 */
> - .long reboot /* exception vector: 229 */
> - .long reboot /* exception vector: 230 */
> - .long reboot /* exception vector: 231 */
> - .long reboot /* exception vector: 232 */
> - .long reboot /* exception vector: 233 */
> - .long reboot /* exception vector: 234 */
> - .long reboot /* exception vector: 235 */
> - .long reboot /* exception vector: 236 */
> - .long reboot /* exception vector: 237 */
> - .long reboot /* exception vector: 238 */
> - .long reboot /* exception vector: 239 */
> - .long reboot /* exception vector: 240 */
> - .long reboot /* exception vector: 241 */
> - .long reboot /* exception vector: 242 */
> - .long reboot /* exception vector: 243 */
> - .long reboot /* exception vector: 244 */
> - .long reboot /* exception vector: 245 */
> - .long reboot /* exception vector: 246 */
> - .long reboot /* exception vector: 247 */
> - .long reboot /* exception vector: 248 */
> - .long reboot /* exception vector: 249 */
> - .long reboot /* exception vector: 250 */
> - .long reboot /* exception vector: 251 */
> - .long reboot /* exception vector: 252 */
> - .long reboot /* exception vector: 253 */
> - .long reboot /* exception vector: 254 */
> - .long reboot /* exception vector: 255 */
> -
> -_reboot:
> - move #0x2700,%sr /* mask interrupts */
> - movea.l (0x0).w,%a7 /* load stack */
> - movea.l (0x4).w,%a0 /* jmp to location of reset vector */
> - jmp (%a0)
> -
> -reboot:
> - trap #15 /* use trap exception to enter supervisor
> - state. Trace mode ( and other group 0
> - and 1 exceptions) *could* screw this up if
> - not vectored to reboot or did not return. */
> diff --git a/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds b/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds
> index 651fc9f..378559c 100644
> --- a/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds
> +++ b/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds
> @@ -5,20 +5,26 @@ OUTPUT_ARCH(m68k)
> __DYNAMIC = 0;
>
> /*
> - * The memory map looks like this:
> + * ROM:
> * +--------------------+ <- low memory
> * | .text |
> * | etext |
> * | ctor list | the ctor and dtor lists are for
> * | dtor list | C++ support
> * | _endtext |
> - * +--------------------+
> + * | temporary .data | .data is moved to RAM by crt0
> + * | |
> + * +--------------------+ <- high memory
> + *
> + *
> + * RAM:
> + * +--------------------+ <- low memory
> * | .data | initialized data goes here
> * | _sdata |
> * | _edata |
> * +--------------------+
> * | .bss |
> - * | _clear_start| start of bss, cleared by crt0
> + * | __bss_start | start of bss, cleared by crt0
> * | _end | start of heap, used by sbrk()
> * +--------------------+
> * | heap space |
> @@ -31,150 +37,170 @@ __DYNAMIC = 0;
> /*
> * Declare some sizes.
> */
> -RamBase = DEFINED(RamBase) ? RamBase : 0x10000;
> -RamSize = DEFINED(RamSize) ? RamSize : 0x70000;
> +RomBase = DEFINED(RomBase) ? RomBase : 0x90000;
> +RamBase = DEFINED(RamBase) ? RamBase : 0x03000;
> +RamSize = DEFINED(RamSize) ? RamSize : 0x7d000;
> _RamEnd = RamBase + RamSize;
> -HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0;
> -_StackSize = DEFINED(_StackSize) ? _StackSize : 0x2000;
>
> MEMORY
> {
> - ram : ORIGIN = 0x10000, LENGTH = 0x70000
> + rom : ORIGIN = 0x90000, LENGTH = 0x70000
> + ram : ORIGIN = 0x03000, LENGTH = 0x7d000
> }
>
> -_copy_data_from_rom = 0;
> +_copy_data_from_rom = 1;
> +HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0;
> +_StackSize = DEFINED(_StackSize) ? _StackSize : 0x2000;
> +
>
> /*
> - * stick everything in ram (of course)
> + *
> */
> SECTIONS
> {
> - ram : {
> - . = .;
> - } >ram
> -
> - /*
> - * Text, data and bss segments
> - */
> - .text : {
> - *(.text*)
> -
> - /*
> - * C++ constructors/destructors
> - */
> - *(.gnu.linkonce.t.*)
> -
> - /*
> - * Initialization and finalization code.
> - *
> - * Various files can provide initialization and finalization
> - * functions. crtbegin.o and crtend.o are two instances. The
> - * body of these functions are in .init and .fini sections. We
> - * accumulate the bodies here, and prepend function prologues
> - * from crti.o and function epilogues from crtn.o. crti.o must
> - * be linked first; crtn.o must be linked last. Because these
> - * are wildcards, it doesn't matter if the user does not
> - * actually link against crti.o and crtn.o; the linker won't
> - * look for a file to match a wildcard. The wildcard also
> - * means that it doesn't matter which directory crti.o and
> - * crtn.o are in.
> - */
> - PROVIDE (_init = .);
> - *crti.o(.init)
> - *(.init)
> - *crtn.o(.init)
> - PROVIDE (_fini = .);
> - *crti.o(.fini)
> - *(.fini)
> - *crtn.o(.fini)
> -
> - /*
> - * Special FreeBSD sysctl sections.
> - */
> - . = ALIGN (16);
> - __start_set_sysctl_set = .;
> - *(set_sysctl_*);
> - __stop_set_sysctl_set = ABSOLUTE(.);
> - *(set_domain_*);
> - *(set_pseudo_*);
> -
> - /*
> - * C++ constructors/destructors
> - *
> - * gcc uses crtbegin.o to find the start of the constructors
> - * and destructors so we make sure it is first. Because this
> - * is a wildcard, it doesn't matter if the user does not
> - * actually link against crtbegin.o; the linker won't look for
> - * a file to match a wildcard. The wildcard also means that
> - * it doesn't matter which directory crtbegin.o is in. The
> - * constructor and destructor list are terminated in
> - * crtend.o. The same comments apply to it.
> - */
> - . = ALIGN (16);
> - *crtbegin.o(.ctors)
> - *(.ctors)
> - *crtend.o(.ctors)
> - *crtbegin.o(.dtors)
> - *(.dtors)
> - *crtend.o(.dtors)
> -
> - /*
> - * Exception frame info
> - */
> - . = ALIGN (16);
> - *(.eh_frame)
> -
> - /*
> - * Read-only data
> - */
> - . = ALIGN (16);
> - _rodata_start = .;
> - *(.rodata*)
> - *(.gnu.linkonce.r*)
> -
> - . = ALIGN (16);
> - PROVIDE (_etext = .);
> - } >ram
> -
> - .tdata : {
> - _TLS_Data_begin = .;
> - *(.tdata .tdata.* .gnu.linkonce.td.*)
> - _TLS_Data_end = .;
> - } >ram
> -
> - .tbss : {
> - _TLS_BSS_begin = .;
> - *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
> - _TLS_BSS_end = .;
> - } >ram
> -
> - _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin;
> - _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin;
> - _TLS_Size = _TLS_BSS_end - _TLS_Data_begin;
> - _TLS_Alignment = ALIGNOF (.tdata);
> -
> - .data : {
> - PROVIDE (_copy_start = .);
> - *(.data*)
> - *(.gnu.linkonce.d*)
> - *(.gcc_except_table*)
> - *(.jcr)
> - . = ALIGN (16);
> - PROVIDE (_edata = .);
> - PROVIDE (_copy_end = .);
> - } >ram
> - .bss : {
> - _clear_start = .;
> - *(.dynbss)
> - *(.bss* .gnu.linkonce.b.*)
> - *(COMMON)
> - . = ALIGN (16);
> - PROVIDE (end = .);
> - . += _StackSize;
> - . = ALIGN (16);
> - _stack_init = .;
> - _clear_end = .;
> -
> - WorkAreaBase = .;
> - } >ram
> + .text :
> + {
> + . = .;
> + text_start = .;
> + _text_start = .;
> + *(.text*)
> + . = ALIGN (16);
> +
> + /*
> + * C++ constructors/destructors
> + */
> + *(.gnu.linkonce.t.*)
> +
> + /*
> + * Initialization and finalization code.
> + *
> + * Various files can provide initialization and finalization
> + * functions. crtbegin.o and crtend.o are two instances. The
> + * body of these functions are in .init and .fini sections. We
> + * accumulate the bodies here, and prepend function prologues
> + * from crti.o and function epilogues from crtn.o. crti.o must
> + * be linked first; crtn.o must be linked last. Because these
> + * are wildcards, it doesn't matter if the user does not
> + * actually link against crti.o and crtn.o; the linker won't
> + * look for a file to match a wildcard. The wildcard also
> + * means that it doesn't matter which directory crti.o and
> + * crtn.o are in.
> + */
> + PROVIDE (_init = .);
> + *crti.o(.init)
> + *(.init)
> + *crtn.o(.init)
> + PROVIDE (_fini = .);
> + *crti.o(.fini)
> + *(.fini)
> + *crtn.o(.fini)
> +
> + /*
> + * Special FreeBSD sysctl sections.
> + */
> + . = ALIGN (16);
> + __start_set_sysctl_set = .;
> + *(set_sysctl_*);
> + __stop_set_sysctl_set = ABSOLUTE(.);
> + *(set_domain_*);
> + *(set_pseudo_*);
> +
> + /*
> + * C++ constructors/destructors
> + *
> + * gcc uses crtbegin.o to find the start of the constructors
> + * and destructors so we make sure it is first. Because this
> + * is a wildcard, it doesn't matter if the user does not
> + * actually link against crtbegin.o; the linker won't look for
> + * a file to match a wildcard. The wildcard also means that
> + * it doesn't matter which directory crtbegin.o is in. The
> + * constructor and destructor list are terminated in
> + * crtend.o. The same comments apply to it.
> + */
> + . = ALIGN (16);
> + *crtbegin.o(.ctors)
> + *(.ctors)
> + *crtend.o(.ctors)
> + *crtbegin.o(.dtors)
> + *(.dtors)
> + *crtend.o(.dtors)
> +
> + /*
> + * Exception frame info
> + */
> + . = ALIGN (16);
> + *(.eh_frame)
> +
> + /*
> + * Read-only data
> + */
> + . = ALIGN (16);
> + _rodata_start = . ;
> + *(.rodata*)
> + *(.gnu.linkonce.r*)
> +
> + . = ALIGN (16);
> + PROVIDE (_etext = .);
> + _endtext = .;
> + __data_start_rom = .;
> + } > rom
> + .tdata : {
> + _TLS_Data_begin = .;
> + *(.tdata .tdata.* .gnu.linkonce.td.*)
> + _TLS_Data_end = .;
> + } > rom
> + .tbss : {
> + _TLS_BSS_begin = .;
> + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
> + _TLS_BSS_end = .;
> + } > rom
> + _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin;
> + _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin;
> + _TLS_Size = _TLS_BSS_end - _TLS_Data_begin;
> + _TLS_Alignment = ALIGNOF (.tdata);
> + .gcc_exc :
> + AT ( ADDR(.tdata) + SIZEOF( .tdata ) )
> + {
> + *(.gcc_exc)
> + } > ram
> + .data : AT(__data_start_rom)
> + {
> + PROVIDE (_copy_start = .);
> + *(.data*)
> + *(.gnu.linkonce.d*)
> + *(.gcc_except_table*)
> + *(.jcr)
> + . = ALIGN (16);
> + PROVIDE (_edata = .);
> + PROVIDE (_copy_end = .);
> + } > ram
> + .shbss :
> + {
> + *(.shbss)
> + } > ram
> + .bss :
> + {
> + M68Kvec = .;
> + . += (256 * 4);
> + _clear_start = .;
> + *(.dynbss)
> + *(.bss* .gnu.linkonce.b.*)
> + *(COMMON)
> + . = ALIGN (16);
> + PROVIDE (end = .);
> + . += _StackSize;
> + . = ALIGN (16);
> + _stack_init = .;
> + _clear_end = .;
> +
> + WorkAreaBase = .;
> + } > ram
> + .stab . (NOLOAD) :
> + {
> + [ .stab ]
> + }
> + .stabstr . (NOLOAD) :
> + {
> + [ .stabstr ]
> + }
> }
> diff --git a/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM b/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM
> deleted file mode 100644
> index 48b2f3f..0000000
> --- a/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM
> +++ /dev/null
> @@ -1,212 +0,0 @@
> -/* linkcmds
> - */
> -
> -OUTPUT_ARCH(m68k)
> -STARTUP(except_vect_332_ROM.o)
> -__DYNAMIC = 0;
> -
> -/*
> - * ROM:
> - * +--------------------+ <- low memory
> - * | .text |
> - * | etext |
> - * | ctor list | the ctor and dtor lists are for
> - * | dtor list | C++ support
> - * | _endtext |
> - * | temporary .data | .data is moved to RAM by crt0
> - * | |
> - * +--------------------+ <- high memory
> - *
> - *
> - * RAM:
> - * +--------------------+ <- low memory
> - * | .data | initialized data goes here
> - * | _sdata |
> - * | _edata |
> - * +--------------------+
> - * | .bss |
> - * | __bss_start | start of bss, cleared by crt0
> - * | _end | start of heap, used by sbrk()
> - * +--------------------+
> - * | heap space |
> - * | _ENDHEAP |
> - * | stack space |
> - * | __stack | top of stack
> - * +--------------------+ <- high memory
> - */
> -
> -MEMORY
> -{
> - rom : ORIGIN = 0x90000, LENGTH = 0x70000
> - ram : ORIGIN = 0x03000, LENGTH = 0x7d000
> -}
> -
> -RamBase = DEFINED(RamBase) ? RamBase : 0x003000;
> -RamSize = DEFINED(RamSize) ? RamSize : 0x7d000;
> -_RamEnd = RamBase + RamSize;
> -
> -__end_of_ram = 0x080000;
> -_copy_data_from_rom = 1;
> -HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0;
> -_StackSize = DEFINED(_StackSize) ? _StackSize : 0x2000;
> -
> -/*
> - *
> - */
> -SECTIONS
> -{
> - .text :
> - {
> - . = .;
> - CREATE_OBJECT_SYMBOLS
> - text_start = .;
> - _text_start = .;
> - *(.text*)
> - . = ALIGN (16);
> -
> -
> - /*
> - * Initialization and finalization code.
> - *
> - * Various files can provide initialization and finalization
> - * functions. crtbegin.o and crtend.o are two instances. The
> - * body of these functions are in .init and .fini sections. We
> - * accumulate the bodies here, and prepend function prologues
> - * from crti.o and function epilogues from crtn.o. crti.o must
> - * be linked first; crtn.o must be linked last. Because these
> - * are wildcards, it doesn't matter if the user does not
> - * actually link against crti.o and crtn.o; the linker won't
> - * look for a file to match a wildcard. The wildcard also
> - * means that it doesn't matter which directory crti.o and
> - * crtn.o are in.
> - */
> - PROVIDE (_init = .);
> - *crti.o(.init)
> - *(.init)
> - *crtn.o(.init)
> - PROVIDE (_fini = .);
> - *crti.o(.fini)
> - *(.fini)
> - *crtn.o(.fini)
> -
> - /*
> - * Special FreeBSD sysctl sections.
> - */
> - . = ALIGN (16);
> - __start_set_sysctl_set = .;
> - *(set_sysctl_*);
> - __stop_set_sysctl_set = ABSOLUTE(.);
> - *(set_domain_*);
> - *(set_pseudo_*);
> -
> - /*
> - * C++ constructors/destructors
> - *
> - * gcc uses crtbegin.o to find the start of the constructors
> - * and destructors so we make sure it is first. Because this
> - * is a wildcard, it doesn't matter if the user does not
> - * actually link against crtbegin.o; the linker won't look for
> - * a file to match a wildcard. The wildcard also means that
> - * it doesn't matter which directory crtbegin.o is in. The
> - * constructor and destructor list are terminated in
> - * crtend.o. The same comments apply to it.
> - */
> - . = ALIGN (16);
> - *crtbegin.o(.ctors)
> - *(.ctors)
> - *crtend.o(.ctors)
> - *crtbegin.o(.dtors)
> - *(.dtors)
> - *crtend.o(.dtors)
> -
> - *(.eh_frame)
> - . = ALIGN (16);
> -
> - /*
> - * Read-only data
> - */
> - . = ALIGN (16);
> - _rodata_start = . ;
> - *(.rodata*)
> - *(.gnu.linkonce.r*)
> -
> - etext = ALIGN(0x10);
> - __CTOR_LIST__ = .;
> - LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2)
> - *(.ctors)
> - LONG(0)
> - __CTOR_END__ = .;
> - __DTOR_LIST__ = .;
> - LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2)
> - *(.dtors)
> - LONG(0)
> - __DTOR_END__ = .;
> - *(.lit)
> - *(.shdata)
> - _etext = .;
> - _endtext = .;
> - } > rom
> - .tdata : {
> - _TLS_Data_begin = .;
> - *(.tdata .tdata.* .gnu.linkonce.td.*)
> - _TLS_Data_end = .;
> - } > rom
> - .tbss : {
> - _TLS_BSS_begin = .;
> - *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
> - _TLS_BSS_end = .;
> - } > rom
> - _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin;
> - _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin;
> - _TLS_Size = _TLS_BSS_end - _TLS_Data_begin;
> - _TLS_Alignment = ALIGNOF (.tdata);
> - .gcc_exc :
> - AT ( ADDR(.tdata) + SIZEOF( .tdata ) )
> - {
> - *(.gcc_exc)
> - } > ram
> - .data :
> - {
> - data_start = .;
> - _data_start = .;
> - _copy_start = .;
> - _sdata = . ;
> - *(.data)
> - *(.gnu.linkonce.d*)
> - *(.gcc_except_table*)
> - *(.jcr)
> -
> - CONSTRUCTORS
> - edata = ALIGN(0x10);
> - _edata = .;
> - } > ram
> - .shbss :
> - {
> - *(.shbss)
> - } > ram
> - .bss :
> - {
> - __bss_start = ALIGN(0x8);
> - bss_start = .;
> - _bss_start = .;
> - _clear_start = .;
> - *(.shbss)
> - *(.dynbss)
> - *(.bss* .gnu.linkonce.b.*)
> - *(COMMON)
> - . = ALIGN (16);
> - end = .;
> - _end = ALIGN(0x8);
> - __end = ALIGN(0x8);
> -
> - WorkAreaBase = . + _StackSize;
> - } > ram
> - .stab . (NOLOAD) :
> - {
> - [ .stab ]
> - }
> - .stabstr . (NOLOAD) :
> - {
> - [ .stabstr ]
> - }
> -}
> diff --git a/c/src/lib/libbsp/m68k/mrm332/startup/start_c.c b/c/src/lib/libbsp/m68k/mrm332/startup/start_c.c
> index 5c3c38c..060c96b 100644
> --- a/c/src/lib/libbsp/m68k/mrm332/startup/start_c.c
> +++ b/c/src/lib/libbsp/m68k/mrm332/startup/start_c.c
> @@ -14,14 +14,11 @@
> *
> */
>
> +#include <bsp.h>
> +#include <bsp/bootcard.h>
> #include <mrm332.h>
> #include <rtems/m68k/sim.h>
> #define __START_C__
> -#include "bsp.h"
> -#include <bsp/bootcard.h>
> -
> -rtems_isr_entry M68Kvec[256];
> -rtems_isr_entry vectors[256];
>
> /*
> * This prototype really should have the noreturn attribute but
> @@ -32,99 +29,97 @@ void start_c(void);
>
> void start_c(void) {
>
> - /* Synthesizer Control Register */
> - /* see section(s) 4.8 */
> - /* end include in ram_init.S */
> - *SYNCR = (unsigned short int)
> - ( SAM(MRM_W,15,VCO) | SAM(0x0,14,PRESCALE) | SAM(MRM_Y,8,COUNTER) );
> - while (! (*SYNCR & SLOCK)); /* protect from clock overshoot */
> - /* include in ram_init.S */
> - *SYNCR = (unsigned short int)
> - ( SAM(MRM_W,15,VCO) | SAM(MRM_X,14,PRESCALE) | SAM(MRM_Y,8,COUNTER) );
> -
> - /* System Protection Control Register */
> - /* !!! can only write to once after reset !!! */
> - /* see section 3.8.4 of the SIM Reference Manual */
> - *SYPCR = (unsigned char)( HME | BME );
> -
> - /* Periodic Interrupr Control Register */
> - /* see section 3.8.2 of the SIM Reference Manual */
> - *PICR = (unsigned short int)
> - ( SAM(0,8,PIRQL) | SAM(MRM_PIV,0,PIV) );
> - /* ^^^ zero disables interrupt, don't enable here or ram_init will
> +#ifdef SET_EDIV
> +#define OPTIONAL_EDIV EDIV
> +#else
> +#define OPTIONAL_EDIV 0
> +#endif
> +
> + /* Synthesizer Control Register */
> + /* see section(s) 4.8 */
> + /* end include in ram_init.S */
> + *SYNCR = (unsigned short int) (SAM(MRM_W, 15, VCO) | SAM(0x0, 14, PRESCALE)
> + | SAM(MRM_Y, 8, COUNTER) | OPTIONAL_EDIV);
> + while (!(*SYNCR & SLOCK))
> + ; /* protect from clock overshoot */
> + /* include in ram_init.S */
> + *SYNCR = (unsigned short int) (SAM(MRM_W, 15, VCO) | SAM(MRM_X, 14,
> + PRESCALE) | SAM(MRM_Y, 8, COUNTER) | OPTIONAL_EDIV);
> +
> + /* System Protection Control Register */
> + /* !!! can only write to once after reset !!! */
> + /* see section 3.8.4 of the SIM Reference Manual */
> + *SYPCR = (unsigned char) (HME | BME);
> +
> + /* Periodic Interrupr Control Register */
> + /* see section 3.8.2 of the SIM Reference Manual */
> + *PICR = (unsigned short int) (SAM(0, 8, PIRQL) | SAM(MRM_PIV, 0, PIV));
> + /* ^^^ zero disables interrupt, don't enable here or ram_init will
> be wrong. It's enabled below. */
>
> - /* Periodic Interrupt Timer Register */
> - /* see section 3.8.3 of the SIM Reference Manual */
> - *PITR = (unsigned short int)( SAM(0x09,0,PITM) );
> - /* 1.098mS interrupt, assuming 32.768 KHz input clock */
> -
> - /* Port C Data */
> - /* load values before enabled */
> - *PORTC = (unsigned char) 0x0;
> -
> - /* Port E and F Data Register */
> - /* see section 9 of the SIM Reference Manual */
> - *PORTE0 = (unsigned char) 0;
> - *PORTF0 = (unsigned char) 0;
> -
> - /* Port E and F Data Direction Register */
> - /* see section 9 of the SIM Reference Manual */
> - *DDRE = (unsigned char) 0xff;
> - *DDRF = (unsigned char) 0xfd;
> -
> - /* Port E and F Pin Assignment Register */
> - /* see section 9 of the SIM Reference Manual */
> - *PEPAR = (unsigned char) 0;
> - *PFPAR = (unsigned char) 0;
> -
> - /* end of SIM initalization code */
> - /* end include in ram_init.S */
> -
> - /*
> - * Initialize RAM by copying the .data section out of ROM (if
> - * needed) and "zero-ing" the .bss section.
> - */
> - {
> - register char *src = _etext;
> - register char *dst = _copy_start;
> -
> - if (_copy_data_from_rom)
> - /* ROM has data at end of text; copy it. */
> - while (dst < _edata)
> - *dst++ = *src++;
> -
> - /* Zero bss */
> - for (dst = _clear_start; dst< end; dst++)
> - {
> - *dst = 0;
> - }
> - }
> -
> - /*
> - * Initialize vector table.
> - */
> - {
> - rtems_isr_entry *monitors_vector_table;
> -
> - m68k_get_vbr(monitors_vector_table);
> -
> - M68Kvec[ 4 ] = monitors_vector_table[ 4 ]; /* breakpoints vector */
> - M68Kvec[ 9 ] = monitors_vector_table[ 9 ]; /* trace vector */
> - M68Kvec[ 31 ] = monitors_vector_table[ 31 ]; /* level 7 interrupt */
> - M68Kvec[ 47 ] = monitors_vector_table[ 47 ]; /* system call vector */
> - M68Kvec[ 66 ] = monitors_vector_table[ 66 ]; /* user defined */
> -
> - m68k_set_vbr(&M68Kvec);
> - }
> -
> - /*
> - * Initalize the board.
> - */
> + /* Periodic Interrupt Timer Register */
> + /* see section 3.8.3 of the SIM Reference Manual */
> + *PITR = (unsigned short int) (SAM(0x09, 0, PITM));
> + /* 1.098mS interrupt, assuming 32.768 KHz input clock */
> +
> + /* Port C Data */
> + /* load values before enabled */
> + *PORTC = (unsigned char) 0x0;
> +
> + /* Port E and F Data Register */
> + /* see section 9 of the SIM Reference Manual */
> + *PORTE0 = (unsigned char) 0;
> + *PORTF0 = (unsigned char) 0;
> +
> + /* Port E and F Data Direction Register */
> + /* see section 9 of the SIM Reference Manual */
> + *DDRE = (unsigned char) 0xff;
> + *DDRF = (unsigned char) 0xfd;
> +
> + /* Port E and F Pin Assignment Register. Set up Port E and F as I/O */
> + /* see section 9 of the SIM Reference Manual */
> + *PEPAR = (unsigned char) 0;
> + *PFPAR = (unsigned char) 0;
> +
> + /* end of SIM initalization code */
> + /* end include in ram_init.S */
> +
> + /*
> + * Initialize RAM by copying the .data section out of ROM (if
> + * needed) and "zero-ing" the .bss section.
> + */
> + {
> + register char *src = _etext;
> + register char *dst = _copy_start;
> +
> + if (_copy_data_from_rom) {
> + /* ROM has data at end of text; copy it. */
> + while (dst < _edata)
> + *dst++ = *src++;
> + }
> + /* Zero bss */
> + for (dst = _clear_start; dst < end; dst++) {
> + *dst = 0;
> + }
> + }
> +
> + /*
> + * Initialize vector table.
> + */
> + {
> + rtems_isr_entry *monitors_vector_table;
> +
> + m68k_get_vbr(monitors_vector_table);
> +
> + M68Kvec[4] = monitors_vector_table[4]; /* breakpoints vector */
> + M68Kvec[9] = monitors_vector_table[9]; /* trace vector */
> + M68Kvec[31] = monitors_vector_table[31]; /* level 7 interrupt */
> + M68Kvec[47] = monitors_vector_table[47]; /* system call vector */
> + M68Kvec[66] = monitors_vector_table[66]; /* user defined */
> +
> + m68k_set_vbr(&M68Kvec);
> + }
>
> - /* Spurious should be called in the predriver hook */
> - /* Spurious_Initialize(); */
> - /*console_init(); */
>
> /*
> * Execute main with arguments argc and agrv.
> --
> 1.8.3.2
>
> _______________________________________________
> rtems-devel mailing list
> rtems-devel at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-devel
More information about the devel
mailing list