rickjr/rickjr.ld

129 lines
3.8 KiB
Text

/* RickJr Linker Script
*/
/* fake C Stack */
PROVIDE(__stack = 0xA000);
/* entry point to my program */
PROVIDE(__f256_start = 0x300);
/* page size of a block of memory */
PROVIDE(__BLOCK_SIZE = 0x2000);
/* f256k uses first 16 bytes of ZP for mmu control? */
__rc0 = 0x10;
INCLUDE imag-regs.ld
ASSERT(__rc0 == 0x10, "Inconsistent zero page map.")
ASSERT(__rc31 == 0x2f, "Inconsistent zero page map.")
MEMORY {
/* kernel uses 0xf0-0xff for parameter passing */
zp : ORIGIN = __rc31 + 1, LENGTH = 0xF0 - (__rc31 + 1)
ram (rw) : ORIGIN = __f256_start, LENGTH = 0xA000-__f256_start
}
/* LMAs */
__fixed_lma = 0x0000a000;
__block8_lma = 0x01a000;
__block9_lma = 0x02a000;
__block10_lma = 0x03a000;
__block11_lma = 0x04a000;
__block12_lma = 0x05a000;
__block13_lma = 0x06a000;
__block14_lma = 0x07a000;
__block15_lma = 0x08a000;
__block16_lma = 0x09a000;
__block17_lma = 0x0Aa000;
__block18_lma = 0x0Ba000;
__block19_lma = 0x0Ca000;
__block20_lma = 0x0Da000;
__block21_lma = 0x0Ea000;
__block22_lma = 0x0Fa000;
__block23_lma = 0x10a000;
MEMORY {
block8 : ORIGIN = __block8_lma, LENGTH = __BLOCK_SIZE
block9 : ORIGIN = __block9_lma, LENGTH = __BLOCK_SIZE
block10 : ORIGIN = __block10_lma, LENGTH = __BLOCK_SIZE
block11 : ORIGIN = __block11_lma, LENGTH = __BLOCK_SIZE
block12 : ORIGIN = __block12_lma, LENGTH = __BLOCK_SIZE
block13 : ORIGIN = __block13_lma, LENGTH = __BLOCK_SIZE
block14 : ORIGIN = __block14_lma, LENGTH = __BLOCK_SIZE
block15 : ORIGIN = __block15_lma, LENGTH = __BLOCK_SIZE
block16 : ORIGIN = __block16_lma, LENGTH = __BLOCK_SIZE
block17 : ORIGIN = __block17_lma, LENGTH = __BLOCK_SIZE
block18 : ORIGIN = __block18_lma, LENGTH = __BLOCK_SIZE
block19 : ORIGIN = __block19_lma, LENGTH = __BLOCK_SIZE
block20 : ORIGIN = __block20_lma, LENGTH = __BLOCK_SIZE
block21 : ORIGIN = __block21_lma, LENGTH = __BLOCK_SIZE
block22 : ORIGIN = __block22_lma, LENGTH = __BLOCK_SIZE
block23 : ORIGIN = __block23_lma, LENGTH = __BLOCK_SIZE
fixed : ORIGIN = __fixed_lma, LENGTH = __BLOCK_SIZE
}
REGION_ALIAS("c_writeable", ram)
/* REGION_ALIAS("c_readonly", fixed) */
/* I want to use the lower 40k */
REGION_ALIAS("c_readonly", ram)
SECTIONS {
INCLUDE c.ld
.fixed : { *(.fixed .fixed.*) } >fixed
.block8 : { *(.block8 .block8.*) } >block8
.block9 : { *(.block9 .block9.*) } >block9
.block10 : { *(.block10 .block10.*) } >block10
.block11 : { *(.block11 .block11.*) } >block11
.block12 : { *(.block12 .block12.*) } >block12
.block13 : { *(.block13 .block13.*) } >block13
.block14 : { *(.block14 .block14.*) } >block14
.block15 : { *(.block15 .block15.*) } >block15
.block16 : { *(.block16 .block16.*) } >block16
.block17 : { *(.block17 .block17.*) } >block17
.block18 : { *(.block18 .block18.*) } >block18
.block19 : { *(.block19 .block19.*) } >block19
.block20 : { *(.block20 .block20.*) } >block20
.block21 : { *(.block21 .block21.*) } >block21
.block22 : { *(.block22 .block22.*) } >block22
.block23 : { *(.block23 .block23.*) } >block23
}
/* OUTPUT_FORMAT { FULL(cart_rom) } */
OUTPUT_FORMAT {
FULL(block8)
FULL(block9)
FULL(block10)
FULL(block11)
FULL(block12)
FULL(block13)
FULL(block14)
FULL(block15)
FULL(block16)
FULL(block17)
FULL(block18)
FULL(block19)
FULL(block20)
FULL(block21)
FULL(block22)
FULL(block23)
FULL(fixed)
}
/*
__attribute__((section(".bank30.rodata"))) const char bank30_s[] = "bank thirty";
...
__attribute__((noinline, section(".bank2.text"))) signed char bank2_fn(void) {
asm volatile("nop");
puts(bank2_s);
asm volatile("nop");
return 5;
}
*/