Changeset 996a9cb4 in rtems


Ignore:
Timestamp:
May 1, 1996, 3:25:33 PM (26 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
bf6661e
Parents:
dce1c1a1
Message:

Updates from Eric Norum.

Location:
c/src/lib/libbsp/m68k/gen68360
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/m68k/gen68360/README

    rdce1c1a1 r996a9cb4  
    55#
    66# This package requires a version of GCC that has been modified
    7 # to support the `-m68360' argument.  I have submitted the required changes
    8 # to the GCC maintainers.  Should they choose to use a different argument
    9 # (-mcpu32 perhaps) this board support package will have to be changed.
     7# to support the `-mcpu32' argument.  I have submitted the required
     8# changes to the GCC maintainers.
    109#
    1110
  • c/src/lib/libbsp/m68k/gen68360/include/bsp.h

    rdce1c1a1 r996a9cb4  
    119119void bsp_cleanup( void );
    120120
     121void M360ExecuteRISC( rtems_unsigned16 command );
     122
    121123m68k_isr_entry set_vector(
    122124  rtems_isr_entry     handler,
  • c/src/lib/libbsp/m68k/gen68360/start/start360.s

    rdce1c1a1 r996a9cb4  
    299299
    300300/*
    301  * Place the low-order 3 octets of the board's
    302  * ethernet address at a `well-known' location.
     301 * Place the low-order 3 octets of the board's ethernet address at
     302 * a `well-known' fixed location relative to the beginning of ROM.
    303303 */
    304304        .align 2
    305 |       .long   ETHERNET_ADDRESS        | 08: Low-order 3 octets
     305        .long   ETHERNET_ADDRESS        | Low-order 3 octets of ethernet address
    306306
    307307/*
     
    348348        jmp     SYM(_Init68360)         | Start C code (which never returns)
    349349
    350 
    351350/*
    352  * Clear BSS, set up real stack, initialize heap, start C program
    353  * Assume that BSS size is a multiple of 4.
    354  * FIXME: The zero-loop should be changed to put the CPU into loop-mode.
    355  * FIXME: PROM-based systems will have to copy data segment to RAM here
     351 * Copy DATA segment, clear BSS segment, set up real stack,
     352 * initialize heap, start C program.
     353 * Assume that DATA and BSS sizes are multiples of 4.
    356354 */
    357         PUBLIC (_ClearBSSAndStart)
    358 SYM(_ClearBSSAndStart):
    359         movel   #clear_start,a0
    360         movel   #clear_end,a1
    361         clrl    d0
    362         bras ZEROLOOPTEST
     355        PUBLIC (_CopyDataClearBSSAndStart)
     356SYM(_CopyDataClearBSSAndStart):
     357        lea     copy_start,a0           | Get start of DATA in RAM
     358        lea     SYM(etext),a2           | Get start of DATA in ROM
     359        cmpl    a0,a2                   | Are they the same?
     360        beq.s   NOCOPY                  | Yes, no copy necessary
     361        lea     copy_end,a1             | Get end of DATA in RAM
     362        bra.s   COPYLOOPTEST            | Branch into copy loop
     363COPYLOOP:
     364        movel   a2@+,a0@+               | Copy word from ROM to RAM
     365COPYLOOPTEST:
     366        cmpl    a1,a0                   | Done?
     367        bcs.s   COPYLOOP                | No, skip
     368NOCOPY:
     369
     370        lea     clear_start,a0          | Get start of BSS
     371        lea     clear_end,a1            | Get end of BSS
     372        clrl    d0                      | Value to set
     373        bra.s   ZEROLOOPTEST            | Branch into clear loop
    363374ZEROLOOP:
    364         movel   d0,a0@+
     375        movel   d0,a0@+                 | Clear a word
    365376ZEROLOOPTEST:
    366         cmpl    a1,a0
    367         bcs     ZEROLOOP
     377        cmpl    a1,a0                   | Done?
     378        bcs.s   ZEROLOOP                | No, skip
     379
    368380        movel   #stack_init,a7          | set master stack pointer
    369381        movel   d0,a7@-                 | environp
  • c/src/lib/libbsp/m68k/gen68360/start360/start360.s

    rdce1c1a1 r996a9cb4  
    299299
    300300/*
    301  * Place the low-order 3 octets of the board's
    302  * ethernet address at a `well-known' location.
     301 * Place the low-order 3 octets of the board's ethernet address at
     302 * a `well-known' fixed location relative to the beginning of ROM.
    303303 */
    304304        .align 2
    305 |       .long   ETHERNET_ADDRESS        | 08: Low-order 3 octets
     305        .long   ETHERNET_ADDRESS        | Low-order 3 octets of ethernet address
    306306
    307307/*
     
    348348        jmp     SYM(_Init68360)         | Start C code (which never returns)
    349349
    350 
    351350/*
    352  * Clear BSS, set up real stack, initialize heap, start C program
    353  * Assume that BSS size is a multiple of 4.
    354  * FIXME: The zero-loop should be changed to put the CPU into loop-mode.
    355  * FIXME: PROM-based systems will have to copy data segment to RAM here
     351 * Copy DATA segment, clear BSS segment, set up real stack,
     352 * initialize heap, start C program.
     353 * Assume that DATA and BSS sizes are multiples of 4.
    356354 */
    357         PUBLIC (_ClearBSSAndStart)
    358 SYM(_ClearBSSAndStart):
    359         movel   #clear_start,a0
    360         movel   #clear_end,a1
    361         clrl    d0
    362         bras ZEROLOOPTEST
     355        PUBLIC (_CopyDataClearBSSAndStart)
     356SYM(_CopyDataClearBSSAndStart):
     357        lea     copy_start,a0           | Get start of DATA in RAM
     358        lea     SYM(etext),a2           | Get start of DATA in ROM
     359        cmpl    a0,a2                   | Are they the same?
     360        beq.s   NOCOPY                  | Yes, no copy necessary
     361        lea     copy_end,a1             | Get end of DATA in RAM
     362        bra.s   COPYLOOPTEST            | Branch into copy loop
     363COPYLOOP:
     364        movel   a2@+,a0@+               | Copy word from ROM to RAM
     365COPYLOOPTEST:
     366        cmpl    a1,a0                   | Done?
     367        bcs.s   COPYLOOP                | No, skip
     368NOCOPY:
     369
     370        lea     clear_start,a0          | Get start of BSS
     371        lea     clear_end,a1            | Get end of BSS
     372        clrl    d0                      | Value to set
     373        bra.s   ZEROLOOPTEST            | Branch into clear loop
    363374ZEROLOOP:
    364         movel   d0,a0@+
     375        movel   d0,a0@+                 | Clear a word
    365376ZEROLOOPTEST:
    366         cmpl    a1,a0
    367         bcs     ZEROLOOP
     377        cmpl    a1,a0                   | Done?
     378        bcs.s   ZEROLOOP                | No, skip
     379
    368380        movel   #stack_init,a7          | set master stack pointer
    369381        movel   d0,a7@-                 | environp
  • c/src/lib/libbsp/m68k/gen68360/startup/init68360.c

    rdce1c1a1 r996a9cb4  
    11/*
    2  * Initialize 68360 hardware
     2 * MC68360 support routines
    33 *
    44 * W. Eric Norum
     
    1313#include <rtems.h>
    1414#include <bsp.h>
    15 #include "m68360.h"
     15#include <m68360.h>
    1616
    17 void
    18 _Init68360 (void)
     17/*
     18 * Send a command to the CPM RISC processer
     19 */
     20
     21void M360ExecuteRISC(rtems_unsigned16 command)
     22{
     23        rtems_unsigned16 sr;
     24
     25        m68k_disable_interrupts (sr);
     26        while (m360.cr & M360_CR_FLG)
     27                continue;
     28        m360.cr = command | M360_CR_FLG;
     29        m68k_enable_interrupts (sr);
     30}
     31
     32/*
     33 * Initialize MC68360
     34 */
     35
     36void _Init68360 (void)
    1937{
    2038        int i;
    2139        extern void *_RomBase, *_RamBase;
    2240        m68k_isr_entry *vbr;
    23         extern void _ClearBSSAndStart (void);
     41        extern void _CopyDataClearBSSAndStart (void);
    2442
    2543        /*
     
    6583                *((long *)((char *)&m360 + 0xF00 + i)) = 0;
    6684        }
    67         m360.cr = M360_CR_RST | M360_CR_FLG;
     85        M360ExecuteRISC (M360_CR_RST);
    6886
    6987        /*
     
    130148         * Step 13: Copy  the exception vector table to system RAM
    131149         */
    132  
    133   m68k_get_vbr( vbr );
     150        m68k_get_vbr (vbr);
    134151        for (i = 0; i < 256; ++i)
    135152                M68Kvec[i] = vbr[i];
    136   m68k_set_vbr( M68Kvec );
     153        m68k_set_vbr (M68Kvec);
    137154       
    138155        /*
     
    168185
    169186        /*
    170          * Clear BSS, switch stacks and call main()
     187         * Copy data, clear BSS, switch stacks and call main()
    171188         */
    172         _ClearBSSAndStart ();
     189        _CopyDataClearBSSAndStart ();
    173190}
  • c/src/lib/libbsp/m68k/gen68360/startup/linkcmds

    rdce1c1a1 r996a9cb4  
    1414 */
    1515MEMORY {
    16           ram : ORIGIN = 0x00000000, LENGTH = 4M
    17           rom : ORIGIN = 0xFF000000, LENGTH = 1M
    18         dpram : ORIGIN = 0xFE000000, LENGTH = 8k
     16          ram : ORIGIN = 0x00000000, LENGTH = 4M
     17          rom : ORIGIN = 0xFF000000, LENGTH = 1M
     18        dpram : ORIGIN = 0xFE000000, LENGTH = 8k
    1919}
    2020
    2121/*
    2222 * Declare some sizes
     23 * XXX: The assignment of ". += XyzSize;" fails in older gld's if the
     24 *      number used there is not constant.  If this happens to you, edit
     25 *      the lines marked below to use a constant value.
    2326 */
     27HeapSize = DEFINED(HeapSize) ? HeapSize : 0x10000;
     28StackSize = DEFINED(StackSize) ? StackSize : 0x1000;
    2429
    2530/*
    26  *  XXX: The assignment of ". += XyzSize;" fails in older gld's if the
    27  *       number used there is not constant so the calculated sizes are
    28  *       ignored below and the default number is used instead.
     31 * Declare low-order three octets of Ethernet address
    2932 */
    30 
    31 HeapSize = DEFINED(HeapSize) ? HeapSize : 0x10000;
    32 StackSize = DEFINED(StackSize) ? StackSize : 0x1000;
     33ETHERNET_ADDRESS = DEFINED(ETHERNET_ADDRESS) ? ETHERNET_ADDRESS : 0xDEAD12;
    3334
    3435/*
     
    3637 */
    3738SECTIONS {
     39        /*
     40         * Boot PROM
     41         */
     42        rom : {
     43                _RomBase = .;
     44                __RomBase = .;
     45        } >rom
     46
     47        /*
     48         * Dynamic RAM
     49         */
     50        ram : {
     51                _RamBase = .;
     52                __RamBase = .;
     53        } >ram
     54
     55        /*
     56         * Text, data and bss segments
     57         */
    3858        .text : {
    39                 _RamBase = .;
    40                 __RamBase = .;
    41                 CREATE_OBJECT_SYMBOLS
    42                 *(.text)
    43                 . = ALIGN (16);
    44                 _etext = .;
     59                CREATE_OBJECT_SYMBOLS
     60                *(.text)
     61                . = ALIGN (16);
     62                etext = .;
     63                _etext = .;
    4564        } >ram
    4665        .data : {
    47                 *(.data)
    48                 . = ALIGN (16);
    49                 _edata = .;
     66                copy_start = .;
     67                *(.data)
     68                . = ALIGN (16);
     69                _edata = .;
     70                copy_end = .;
    5071        } >ram
    5172        .bss : {
    52                 M68Kvec = .;
    53                 _M68Kvec = .;
    54                 . += (256 * 4);
    55                 clear_start = .;
    56                 *(.bss)
    57                 *(COMMON)
    58                 . = ALIGN (16);
    59                 _end = .;
     73                M68Kvec = .;
     74                _M68Kvec = .;
     75                . += (256 * 4);
     76                clear_start = .;
     77                *(.bss)
     78                *(COMMON)
     79                . = ALIGN (16);
     80                _end = .;
    6081
    61                 _HeapStart = .;
    62                 __HeapStart = .;
    63                 /* XXX:  Temporary to get around a gld bug
    64                  *
    65                  *  . += HeapSize;
    66                  *  . += StackSize;
    67                  */
    68                 . += 0x10000;   /* XXX */
    69                 . += 0x1000;   /* XXX */
     82                _HeapStart = .;
     83                __HeapStart = .;
     84                /* . += HeapSize;  */ /* XXX -- Old gld can't handle this */
     85                /* . += StackSize; */ /* XXX -- Old gld can't handle this */
     86                . += 0x10000; /* HeapSize for old gld */
     87                . += 0x1000;  /* StackSize for old gld */
     88                . = ALIGN (16);
     89                stack_init = .;
     90                clear_end = .;
    7091
    71                 . = ALIGN (16);
    72                 stack_init = .;
    73                 clear_end = .;
     92                _WorkspaceBase = .;
     93                __WorkspaceBase = .;
     94        } >ram
    7495
    75                 _WorkspaceBase = .;
    76                 __WorkspaceBase = .;
    77         } >ram
     96        /*
     97         * On-chip memory/peripherals
     98         */
     99        dpram : {
     100                m360 = .;
     101                _m360 = .;
     102                . += (8 * 1024);
    78103
    79         /*
    80          * On-chip memory/peripherals
    81          */
    82         dpram : {
    83                 m360 = .;
    84                 _m360 = .;
    85                 . += (8 * 1024);
    86 
    87         } >dpram
    88 
    89         /*
    90          * Boot PROM
    91          */
    92         rom : {
    93                 _RomBase = .;
    94                 __RomBase = .;
    95         } >rom
     104        } >dpram
    96105}
Note: See TracChangeset for help on using the changeset viewer.