/* 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; } */