/* romfs move to __ebss */ | |
#include <asm/linkage.h> | |
#if defined(__H8300H__) | |
.h8300h | |
#endif | |
#if defined(__H8300S__) | |
.h8300s | |
#endif | |
#define BLKOFFSET 512 | |
.text | |
.globl __move_romfs | |
_romfs_sig_len = 8 | |
__move_romfs: | |
mov.l #__sbss,er0 | |
mov.l #_romfs_sig,er1 | |
mov.b #_romfs_sig_len,r3l | |
1: /* check romfs image */ | |
mov.b @er0+,r2l | |
mov.b @er1+,r2h | |
cmp.b r2l,r2h | |
bne 2f | |
dec.b r3l | |
bne 1b | |
/* find romfs image */ | |
mov.l @__sbss+8,er0 /* romfs length(be) */ | |
mov.l #__sbss,er1 | |
add.l er0,er1 /* romfs image end */ | |
mov.l #__ebss,er2 | |
add.l er0,er2 /* distination address */ | |
#if defined(CONFIG_INTELFLASH) | |
add.l #BLKOFFSET,er2 | |
#endif | |
adds #2,er0 | |
adds #1,er0 | |
shlr er0 | |
shlr er0 /* transfer length */ | |
1: | |
mov.l @er1,er3 /* copy image */ | |
mov.l er3,@er2 | |
subs #4,er1 | |
subs #4,er2 | |
dec.l #1,er0 | |
bpl 1b | |
2: | |
rts | |
.section .rodata | |
_romfs_sig: | |
.ascii "-rom1fs-" | |
.end |