diff --git a/rickjr.ld b/rickjr.ld index 44f85ff..9ba8673 100644 --- a/rickjr.ld +++ b/rickjr.ld @@ -8,6 +8,8 @@ PROVIDE(__stack = 0xA000); PROVIDE(__f256_start = 0x300); /* page size of a block of memory */ PROVIDE(__BLOCK_SIZE = 0x2000); +/* swappable block address */ +PROVIDE(__SLOT_ADDR = 0xA000); /* f256k uses first 16 bytes of ZP for mmu control? */ __rc0 = 0x10; @@ -22,46 +24,41 @@ MEMORY { } /* 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; +__block8_lma = 0x08a000; +__block9_lma = 0x09a000; +__block10_lma = 0x0Aa000; +__block11_lma = 0x0Ba000; +__block12_lma = 0x0Ca000; +__block13_lma = 0x0Da000; +__block14_lma = 0x0Ea000; +__block15_lma = 0x0Fa000; +__block16_lma = 0x10a000; +__block17_lma = 0x11a000; +__block18_lma = 0x12a000; +__block19_lma = 0x13a000; +__block20_lma = 0x14a000; +__block21_lma = 0x15a000; +__block22_lma = 0x16a000; +__block23_lma = 0x17a000; 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 + 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 } REGION_ALIAS("c_writeable", ram) @@ -73,57 +70,66 @@ 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 + .block8 : { *(.block8 .block8.*) } >block8 end_block8 = .; + .block9 : { *(.block9 .block9.*) } >block9 end_block9 = .; + .block10 : { *(.block10 .block10.*) } >block10 end_block10 = .; + .block11 : { *(.block11 .block11.*) } >block11 end_block11 = .; + .block12 : { *(.block12 .block12.*) } >block12 end_block12 = .; + .block13 : { *(.block13 .block13.*) } >block13 end_block13 = .; + .block14 : { *(.block14 .block14.*) } >block14 end_block14 = .; + .block15 : { *(.block15 .block15.*) } >block15 end_block15 = .; + .block16 : { *(.block16 .block16.*) } >block16 end_block16 = .; + .block17 : { *(.block17 .block17.*) } >block17 end_block17 = .; + .block18 : { *(.block18 .block18.*) } >block18 end_block18 = .; + .block19 : { *(.block19 .block19.*) } >block19 end_block19 = .; + .block20 : { *(.block20 .block20.*) } >block20 end_block20 = .; + .block21 : { *(.block21 .block21.*) } >block21 end_block21 = .; + .block22 : { *(.block22 .block22.*) } >block22 end_block22 = .; + .block23 : { *(.block23 .block23.*) } >block23 end_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) -} + BYTE(0x5A) /* pgZ */ +/* ram segment */ + + SHORT(ORIGIN(ram)) + BYTE(0x00) + SHORT(__bss_start-ORIGIN(ram)) + BYTE(0x00) + TRIM(ram) + +/* block8 */ + SHORT(ORIGIN(block8)) + BYTE(0x00) + SHORT(end_block8 - __block8_lma) + TRIM(block8) + +/* block9 */ +/* + SHORT(ORIGIN(block9)) + BYTE(0x00) + SHORT(end_block9 - __block9_lma) + TRIM(block9) +*/ /* -__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; -} + TRIM(block9) + TRIM(block10) + TRIM(block11) + TRIM(block12) + TRIM(block13) + TRIM(block14) + TRIM(block15) + TRIM(block16) + TRIM(block17) + TRIM(block18) + TRIM(block19) + TRIM(block20) + TRIM(block21) + TRIM(block22) + TRIM(block23) */ +} +