SECTIONS
{
    /* start of ewram */
    . = 0x02000000;
    ewram (NOLOAD) :
    ALIGN(4)
    {
<EWRAM>
        /* COMMON starts at ??? */
<COMMON>
    }

    /* start of iwram */
    . = 0x03000000;
    iwram (NOLOAD) :
    ALIGN(4)
    {
        /* .bss starts at 0x3000000 */
<BSS>
        . = 0x7400;
        /* .bss.code starts at 0x3007400 */
        src/m4a.o(.bss.code);

        . = 0x8000;
    }

    /* start of ROM */
    . = 0x08000000;
    .text :
    {
        src/rom_header.o(.text);
        src/crt0.o(.text);
        src/util.o(.text);
        src/main.o(.text);
        src/gbplayer.o(.text);
        src/link.o(.text);
        src/bonus_field_select.o(.text);
        src/ereader.o(.text);
        src/pokedex.o(.text);
        src/field_select.o(.text);
        src/intro.o(.text);
        src/high_scores.o(.text);
        src/display.o(.text);
        src/titlescreen.o(.text);
        src/all_board_process5.o(.text);
        src/all_board_process7.o(.text);
        src/all_board_process6_collision.o(.text);
        src/ruby_collision.o(.text);
        src/sapphire_collision.o(.text);
        src/dusclops_collision.o(.text);
        src/kecleon_collision.o(.text);
        src/kyogre_collision.o(.text);
        src/groudon_collision.o(.text);
        src/rayquaza_collision.o(.text);
        src/spheal_collision.o(.text);
        src/game_idle.o(.text);
        src/all_board_process4.o(.text);
        src/ruby_process3.o(.text);
        src/all_board_state_transitions_and_idle.o(.text);
        src/ruby_process3_entities.o(.text);
        src/all_board_banners.o(.text);
        src/ruby_catch_holes.o(.text);
        src/main_board_catch_holes.o(.text);
        src/all_board_portrait_display.o(.text);
        src/ruby_process3_entities_2.o(.text);
        src/main_board_charge_spinner.o(.text);
        src/ruby_trigger_targets.o(.text);
        src/main_board_pichu_entity.o(.text);
        src/main_board_to_be_split.o(.text);
        src/main_board_catch_tile_logic.o(.text);
        src/main_board_intro_mode.o(.text);
        src/main_board_travel_mode.o(.text);
        src/main_board_evolution_mode.o(.text);
        src/main_board_catch_normal_and_jirachi_modes.o(.text);
        src/main_board_catch_tile_particles.o(.text);
        src/main_board_center_capture_hole.o(.text);
        src/ruby_ramp.o(.text);
        src/main_board_launcher_and_cutscenes.o(.text);
        src/sapphire_pond_and_zigzagoon.o(.text);
        src/main_board_bumpers.o(.text);
        src/sapphire_seedot_egg_shop.o(.text);
        src/main_board_edge.o(.text);
        src/main_board_catch_hatch_picker.o(.text);
        src/sapphire_process3.o(.text);
        src/dusclops_process3.o(.text);
        src/bonus_complete_scoring_transition.o(.text);
        src/kecleon_process3.o(.text);
        src/kyogre_process3.o(.text);
        src/groudon_process3.o(.text);
        src/rayquaza_process3.o(.text);
        src/spheal_process3.o(.text);
        src/all_board_setup.o(.text);
        src/all_board_process1.o(.text);
        src/all_board_mode_change_and_debug_menu.o(.text);
        src/all_board_pause_game.o(.text);
        src/all_board_pinball_game_main.o(.text);
        src/save_and_restore_game.o(.text);
        src/all_board_process8.o(.text);
        src/all_board_process2.o(.text);
        src/ruby_board_indicators.o(.text);
        src/sapphire_board_indicators.o(.text);
        src/all_board_process0_sprite_init.o(.text);
        src/options.o(.text);
        src/pokemon_cry.o(.text);
        src/save.o(.text);
        src/m4a_1.o(.text);
        src/m4a.o(.text);
        src/libagbsyscall.o(.text);
        src/agb_sram.o(.text);
        *libgcc.a:_call_via_rX.o(.text);
        *libgcc.a:_divsi3.o(.text);
        *libgcc.a:_dvmd_tls.o(.text);
        *libgcc.a:_modsi3.o(.text);
        *libgcc.a:_udivsi3.o(.text);
        *libgcc.a:_umodsi3.o(.text);
        *libc.a:memcpy.o(.text);
        *libc.a:memset.o(.text);
        *libc.a:strlen.o(.text);
    }=0

    .rodata :
    {
        . = ALIGN(4); data/rom_1.o(.rodata)
        . = ALIGN(4); src/m4a_tables.o(.rodata);
        . = ALIGN(4); data/sound_data.o(.rodata)
        . = ALIGN(4); src/agb_sram.o(.rodata);
        . = ALIGN(4); data/sound_data_2.o(.rodata)
        . = ALIGN(4); src/data.o(.rodata)
        . = ALIGN(4); data/rom_2.o(.rodata)
    }=0xFF

    /* Debug sections - address 0 so they don't affect ROM layout */
    .debug_info     0 : { *(.debug_info) }
    .debug_abbrev   0 : { *(.debug_abbrev) }
    .debug_line     0 : { *(.debug_line) }
    .debug_str      0 : { *(.debug_str) }
    .debug_loc      0 : { *(.debug_loc) }
    .debug_ranges   0 : { *(.debug_ranges) }
    .debug_frame    0 : { *(.debug_frame) }

    /* Discard everything not specifically mentioned above. */
    /DISCARD/ :
    {
        *(*);
    }
}

/* m4a parameters */
gMaxLines = 0x3C;
gNumMusicPlayers = 0x4;
