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

/* crt0_banked.s reads this constant to know how many banks to load. */
const uint8_t n_banks = 2;

void bank1_func(int x) __banked;
void bank2_func(int x) __banked;

extern uint8_t bank_pages[];   /* filled by crt0_banked.s */

static void show_w3(const char *who)
{
    puts(who);
    hex8(_io_page_w3);     /* current physical page mapped in window 3 */
    putchar('\n');
}

int main(void)
{
    puts("HOME: program start.");
#ifdef DEBUG_RT
    printf("HOME: w2_self_allocated = %u\n", w2_self_allocated);
#endif
    show_w3("HOME: window 3 phys page = ");

    puts("HOME: bank_pages[1] (BANK1 phys) = ");
    hex8(bank_pages[1]);
    putchar('\n');
    puts("HOME: bank_pages[2] (BANK2 phys) = ");
    hex8(bank_pages[2]);
    putchar('\n');

    puts("HOME: calling bank1_func(42)...");
    bank1_func(42);
    show_w3("HOME: back, window 3 phys = ");

    puts("HOME: calling bank2_func(123)...");
    bank2_func(123);
    show_w3("HOME: back, window 3 phys = ");

    puts("HOME: done.");
    puts("Press any key to exit...");
    (void)getchar();
    return 0;
}
