# ooh! test input command file for elftosb 2!
options {
coalesce = yes;
# most elf files are GHS produced
toolset = "GHS";
# set versions
productVersion = "111.222.333";
componentVersion = "999.888.777";
# set file flags
flags = (1 << 0) | (1 << 1);
}
constants {
ocram_start = 0;
ocram_size = 256K;
ocram_end = ocram_start + ocram_size - 1;
# ocram = ocram_start .. ocram_end;
#
# ocram = ocram_start +.. ocram_size;
string_addr = 0x4500;
# boot modes
USB_BM = 0;
JTAG_BM = 7;
newBootMode = USB_BM;
}
sources {
hello = extern(0); # elf
redboot = extern(1); # srec
hostlink = extern(2); # elf
sd_player = extern(3) ( toolset="GCC" ); # elf
datasrc = "test0.key"; # binary
}
section (0) {
# load dcd
load dcd {{ 00 11 22 33 }} > 0;
# same load without dcd
load {{ 00 11 22 33 }} > 0;
call 0xf000;
hab call 0xf0000000 (128);
hab jump 0;
/*
# load a simple IVT to an absolute address
# this fills in the IVT self address field from the target address
load ivt (entry=hello:_start) > 0x1000;
# load simple IVT. the IVT self address is set explicitly in the IVT declaration,
# giving the IVT a natural address so you don't have to tell where to load it.
load ivt (entry=hello:_start, self=0x1000);
load ivt (entry=hello:_start, self=0x1000, csf=0x2000, dcd=0);
# Setting IVT entry point to the default entry point of a source file.
load ivt (entry=hostlink) > 0;
load ivt (entry=hello:_start, self=0x1000);
hab call 0x1000;
# Special syntax that combines the load and call into one statement.
hab call ivt(entry=hello:_start, self=0x1000);
load ivt (
entry = hello:_start,
csf = 0x2000
) > 0x1000;
# All supported IVT fields.
load ivt (
entry = hello:,
dcd = 0,
boot_data = 0,
self = 0,
csf = 0
);
hab call ivt; # Call the last loaded IVT. */
}
section (32) {
# load a string to some address
load "some string" > string_addr;
# byte fill a region
load 0x55.b > ocram_start..ocram_end;
from hostlink {
load $*;
}
# jump to a symbol
jump hostlink:_start (100);
}
section (100)
{
load redboot;
call redboot;
}
section(0x5a)
{
load datasrc > 0..8;
from hostlink
{
# load $* ( $.ocram.*, ~$.sdram.* );
# load $.sdram.*;
# load $.ocram.*;
call :main;
call :_start;
}
# goto 0x5b;
}
section (0x5b)
{
# load $* from sd_player;
# load hello$.text @ 64K;
# load hello$*
load $.text from hello > 0x10000;
call sd_player (0xdeadbeef);
}
section (0x5c)
{
# these loads should produce fill commands with a
# length equal to the pattern word size
load 0x55.b > 0x200;
load 0x55aa.h > 0x400;
load 0x55aa66bb.w > 0x800;
# load 0x55.b to 0x200;
# load 0x55aa.h to 0x400;
# load 0x55aa66bb.w to 0x800;
# load 0x55.b @ 0x200;
# load 0x55aa.h @ 0x400;
# load 0x55aa66bb.w @ 0x800;
# load $.text from hello @ .;
# load hello$.text @ .;
# load hello$* @ .
# this should produce a fill command with a length
# of 0x100
load 0x4c8e.h > 0x100..0x200;
# load [ 0a 9b 77 66 55 44 33 22 11 00 ] @ 0x100;
}
# non-bootable section
section (0x100) <= datasrc;
#section (1K)
#{
# load 0xff.b > hostlink:g_wUsbVID + 4;
#
# load "Fred's Auto Service\x00" > hostlink:g_wUsbVendorName;
#
# from sd_player
# {
# load [ 00 11 22 33 44 55 66 77 ] > :g_data + 16;
# }
#
## (0x10 .. 0x20) + 5 == 0x15 .. 0x25
#}
# section that switches modes
section (2K)
{
mode newBootMode;
}