# linker config to produce simple NEC PC-Engine cartridge (.pce)

SYMBOLS {
    __STACKSIZE__: type = weak, value = $0300; # 3 pages stack
}

MEMORY {
    # FIXME: is this correct? the first 3? bytes cant be used?
    ZP:   file = "", start = $0003, size = $00FD, type = rw,  define = yes;

    # reset-bank and hardware vectors
    ROM0: file = %O, start = $E000, size = $1FF6, fill = yes, define = yes;
    ROMV: file = %O, start = $FFF6, size = $000A, fill = yes;

    # first RAM page (also contains stack and zeropage)
    RAM:  file = "", start = $2200, size = $1e00,             define = yes;
}

SEGMENTS {
    ZEROPAGE: load = ZP,              type = zp,  define = yes;
    EXTZP:    load = ZP,              type = zp,  define = yes, optional = yes;
    APPZP:    load = ZP,              type = zp,  define = yes, optional = yes;
    STARTUP:  load = ROM0,            type = ro,  define = yes;
    ONCE:     load = ROM0,            type = ro,                optional = yes;
    CODE:     load = ROM0,            type = ro,  define = yes;
    RODATA:   load = ROM0,            type = ro,  define = yes;
    DATA:     load = ROM0, run = RAM, type = rw,  define = yes;
    BSS:      load = RAM,             type = bss, define = yes;
    VECTORS:  load = ROMV,            type = rw,  define = yes;
}

FEATURES {
    CONDES: type    = constructor,
            label   = __CONSTRUCTOR_TABLE__,
            count   = __CONSTRUCTOR_COUNT__,
            segment = ONCE;
    CONDES: type    = destructor,
            label   = __DESTRUCTOR_TABLE__,
            count   = __DESTRUCTOR_COUNT__,
            segment = RODATA;
    CONDES: type    = interruptor,
            label   = __INTERRUPTOR_TABLE__,
            count   = __INTERRUPTOR_COUNT__,
            segment = RODATA,
            import  = __CALLIRQ__;
}
