]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RL78_E2Studio_GCC/src/reset_program.asm
b0ee436521affedd97e032c8274f99686f3bcc46
[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 - G14                                     */
7 /*      CPU TYPE     :  R5F104PJ                                       */
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 /* call the hardware initialiser */
52         call    !!_HardwareSetup
53         nop
54 \r
55 /* load data section from ROM to RAM */\r
56 ;; block move to initialize .data\r
57 \r
58         ;; we're copying from 00:[_romdatastart] to 0F:[_datastart]\r
59         ;; and our data is not in the mirrored area.\r
60     mov     es, #0\r
61     sel     rb0         /*  ;;bank 0 */\r
62     movw    de, #_mdata /* src ROM address of data section in de */\r
63     movw    hl, #_data  /* dest start RAM address of data section in hl */\r
64 \r
65     sel     rb1              /* bank 1 */\r
66     movw    hl, #_data  /* dest start RAM address of data section in hl */\r
67     movw    ax, #_edata   /*    ;; size of romdata section in ax */\r
68     subw    ax,hl               /* store data size */\r
69     shrw        ax,1\r
70 1:\r
71     cmpw    ax, #0                 /* check if end of data */\r
72     bz      $1f\r
73     decw    ax\r
74     sel     rb0             /* bank 0 */\r
75     movw    ax, es:[de]\r
76     movw    [hl], ax\r
77     incw    de\r
78     incw        de\r
79     incw    hl\r
80         incw    hl\r
81     sel     rb1         /* bank 1  -  compare and decrement*/\r
82     br      $1b\r
83 1:\r
84 \r
85 \r
86 /* bss initialisation : zero out bss */\r
87     sel     rb0         /* bank 0 */\r
88     movw    hl, #_bss   /* store the start address of bss in hl */\r
89     movw    ax, #0              /* load AX reg with zero */\r
90     sel     rb1         /* bank 1 */\r
91     movw    ax, #_ebss  /* store the end address (size of) bss section in ax */\r
92     subw    ax,hl ;; store data size\r
93     shrw    ax,1\r
94 1:\r
95     cmpw    ax, #0\r
96     bz      $1f\r
97     decw    ax\r
98     sel     rb0         /* bank 0 */\r
99     movw    [hl], ax\r
100     incw    hl\r
101     incw        hl\r
102     sel     rb1\r
103     br      $1b\r
104 1:\r
105     sel     rb0             /* bank 0 */\r
106 \r
107 /* start user program */\r
108 \r
109     movw    ax, #0\r
110     push    ax      /* envp */\r
111     push    ax      /* argv */\r
112     push    ax      /* argc */\r
113     call        !!_main\r
114 \r
115 \r
116 /* call to exit*/\r
117 _exit:\r
118      br $_exit\r
119 \r
120         .end\r