]> begriffs open source - freertos/blob - FreeRTOS/Demo/RL78_E2Studio_GCC/src/reset_program.asm
Add RL78 E2Studio project. Code is building, but has not yet been executed.
[freertos] / FreeRTOS / Demo / RL78_E2Studio_GCC / src / reset_program.asm
1 /***********************************************************************/
2 /*                                                                                                                     */
3 /*      PROJECT NAME :  RTOSDemo                                       */
4 /*      FILE         :  reset_program.asm                              */
5 /*      DESCRIPTION  :  Reset Program                                  */
6 /*      CPU SERIES   :  RL78 - G1C                                     */
7 /*      CPU TYPE     :  R5F10JBC                                       */
8 /*                                                                                                                     */
9 /*      This file is generated by e2studio.                        */
10 /*                                                                                                                     */
11 /***********************************************************************/                                                                       \r
12                                                                                    \r
13 \r
14 \r
15         /*reset_program.asm*/\r
16 \r
17         .list\r
18 \r
19         .global _PowerON_Reset  /*! global Start routine */\r
20         .short _PowerON_Reset\r
21         \r
22 #ifdef CPPAPP   \r
23 ___dso_handle:\r
24         .global ___dso_handle\r
25 #endif  \r
26 \r
27 \r
28         .extern _HardwareSetup /*! external Sub-routine to initialise Hardware*/\r
29         .extern _data\r
30         .extern _mdata\r
31         .extern _ebss\r
32         .extern _bss\r
33         \r
34         .extern _edata\r
35         .extern _main \r
36         .extern _stack\r
37         .extern _exit\r
38 \r
39         /*  ;; HL = start of list\r
40         ;; DE = end of list\r
41         ;; BC = step direction (+2 or -2)\r
42         */\r
43         \r
44         .text\r
45 \r
46 /* call to _PowerON_Reset */\r
47 _PowerON_Reset:\r
48 /* initialise user stack pointer */\r
49         movw sp,#_stack /* Set stack pointer */\r
50 \r
51 \r
52 /* load data section from ROM to RAM */ \r
53 ;; block move to initialize .data\r
54 \r
55         ;; we're copying from 00:[_romdatastart] to 0F:[_datastart]\r
56         ;; and our data is not in the mirrored area.\r
57     mov     es, #0\r
58     sel     rb0         /*  ;;bank 0 */\r
59     movw    de, #_mdata /* src ROM address of data section in de */\r
60     movw    hl, #_data  /* dest start RAM address of data section in hl */\r
61                 \r
62     sel     rb1              /* bank 1 */\r
63     movw    hl, #_data  /* dest start RAM address of data section in hl */\r
64     movw    ax, #_edata   /*    ;; size of romdata section in ax */\r
65     subw    ax,hl               /* store data size */\r
66     shrw        ax,1\r
67 1:\r
68     cmpw    ax, #0                 /* check if end of data */\r
69     bz      $1f\r
70     decw    ax\r
71     sel     rb0             /* bank 0 */\r
72     movw    ax, es:[de]\r
73     movw    [hl], ax\r
74     incw    de\r
75     incw        de\r
76     incw    hl\r
77         incw    hl\r
78     sel     rb1         /* bank 1  -  compare and decrement*/\r
79     br      $1b\r
80 1:\r
81 \r
82         \r
83 /* bss initialisation : zero out bss */\r
84     sel     rb0         /* bank 0 */\r
85     movw    hl, #_bss   /* store the start address of bss in hl */\r
86     movw    ax, #0              /* load AX reg with zero */\r
87     sel     rb1         /* bank 1 */\r
88     movw    ax, #_ebss  /* store the end address (size of) bss section in ax */\r
89     subw    ax,hl ;; store data size\r
90     shrw    ax,1\r
91 1:\r
92     cmpw    ax, #0\r
93     bz      $1f\r
94     decw    ax\r
95     sel     rb0         /* bank 0 */\r
96     movw    [hl], ax\r
97     incw    hl\r
98     incw        hl\r
99     sel     rb1\r
100     br      $1b\r
101 1:\r
102     sel     rb0             /* bank 0 */\r
103 \r
104 /* call the hardware initialiser */\r
105         call    !!_HardwareSetup\r
106         nop\r
107 \r
108 /* start user program */\r
109 \r
110     movw    ax, #0\r
111     push    ax      /* envp */\r
112     push    ax      /* argv */\r
113     push    ax      /* argc */\r
114     call        !!_main\r
115 \r
116 \r
117 /* call to exit*/\r
118 _exit:\r
119      br $_exit\r
120 \r
121         .end             \r