| /***********************************************************************/ |
| /* */ |
| /* PROJECT NAME : RTOSDemo */ |
| /* FILE : reset_program.asm */ |
| /* DESCRIPTION : Reset Program */ |
| /* CPU SERIES : RL78 - G14 */ |
| /* CPU TYPE : R5F104PJ */ |
| /* */ |
| /* This file is generated by e2studio. */ |
| /* */ |
| /***********************************************************************/
|
|
|
| /*reset_program.asm*/
|
|
|
| .list
|
|
|
| .global _PowerON_Reset /*! global Start routine */
|
| .short _PowerON_Reset
|
|
|
| #ifdef CPPAPP
|
| ___dso_handle:
|
| .global ___dso_handle
|
| #endif
|
|
|
|
|
| .extern _HardwareSetup /*! external Sub-routine to initialise Hardware*/
|
| .extern _data
|
| .extern _mdata
|
| .extern _ebss
|
| .extern _bss
|
|
|
| .extern _edata
|
| .extern _main
|
| .extern _stack
|
| .extern _exit
|
|
|
| /* ;; HL = start of list
|
| ;; DE = end of list
|
| ;; BC = step direction (+2 or -2)
|
| */
|
|
|
| .text
|
|
|
| /* call to _PowerON_Reset */
|
| _PowerON_Reset:
|
| /* initialise user stack pointer */
|
| movw sp,#_stack /* Set stack pointer */
|
|
|
| /* call the hardware initialiser */ |
| call !!_HardwareSetup |
| nop |
|
|
| /* load data section from ROM to RAM */
|
| ;; block move to initialize .data
|
|
|
| ;; we're copying from 00:[_romdatastart] to 0F:[_datastart]
|
| ;; and our data is not in the mirrored area.
|
| mov es, #0
|
| sel rb0 /* ;;bank 0 */
|
| movw de, #_mdata /* src ROM address of data section in de */
|
| movw hl, #_data /* dest start RAM address of data section in hl */
|
|
|
| sel rb1 /* bank 1 */
|
| movw hl, #_data /* dest start RAM address of data section in hl */
|
| movw ax, #_edata /* ;; size of romdata section in ax */
|
| subw ax,hl /* store data size */
|
| shrw ax,1
|
| 1:
|
| cmpw ax, #0 /* check if end of data */
|
| bz $1f
|
| decw ax
|
| sel rb0 /* bank 0 */
|
| movw ax, es:[de]
|
| movw [hl], ax
|
| incw de
|
| incw de
|
| incw hl
|
| incw hl
|
| sel rb1 /* bank 1 - compare and decrement*/
|
| br $1b
|
| 1:
|
|
|
|
|
| /* bss initialisation : zero out bss */
|
| sel rb0 /* bank 0 */
|
| movw hl, #_bss /* store the start address of bss in hl */
|
| movw ax, #0 /* load AX reg with zero */
|
| sel rb1 /* bank 1 */
|
| movw ax, #_ebss /* store the end address (size of) bss section in ax */
|
| subw ax,hl ;; store data size
|
| shrw ax,1
|
| 1:
|
| cmpw ax, #0
|
| bz $1f
|
| decw ax
|
| sel rb0 /* bank 0 */
|
| movw [hl], ax
|
| incw hl
|
| incw hl
|
| sel rb1
|
| br $1b
|
| 1:
|
| sel rb0 /* bank 0 */
|
|
|
| /* start user program */
|
|
|
| movw ax, #0
|
| push ax /* envp */
|
| push ax /* argv */
|
| push ax /* argc */
|
| call !!_main
|
|
|
|
|
| /* call to exit*/
|
| _exit:
|
| br $_exit
|
|
|
| .end
|