/* w3res.c — резидентный модуль окна W3 (проба подхода A, явная версия).
 *
 * Компилируется с --codeseg W3CODE --constseg W3CODE (БЕЗ --dataseg),
 * линкуется по -Wl-b_W3CODE=0xC000.  Здесь только код + rodata. */

#include <stdio.h>
#include <stdint.h>

/* rodata в W3 (для проверки, что область реально по 0xC000). */
const uint8_t w3_sig = 0x5A;

/* Функция, живущая в W3.  Печатает СВОЙ адрес через printf — а printf
 * лежит в libc (_CODE = W1/W2).  Тем самым проверяем оба направления:
 * W3-код исполняется по 0xC0xx И умеет звать код в W1/W2 обычным call'ом. */
void w3_show(void)
{
    printf("W3 : w3_show @ 0x%04X | w3_sig @ 0x%04X = 0x%02X\n",
           (unsigned)&w3_show, (unsigned)&w3_sig, (unsigned)w3_sig);
}

/* Прямой вызов с возвратом значения: x^0xFF. */
uint8_t w3_probe(uint8_t x)
{
    return (uint8_t)(x ^ 0xFF);
}
