/* * res.c — РЕЗИДЕНТНЫЙ модуль окна W3 (--w3): лежит на 0xC000 и вызывается * напрямую из W1/W2. Рисует через готовые примитивы libbgi — это законно: * скобку _bgi_begin/_bgi_end они открывают внутри себя (сам W3-код открывать * её НЕ имеет права, иначе исполняемая страница подменяется видеобанком). */ #include #include uint8_t res_page_seen; /* какая страница была в W3 во время вызова */ /* Текущая страница W3 (порт 0xE2). ОТДЕЛЬНОЙ __naked-функцией: инлайновый * `in a,(0xE2)` посреди тела затирает A, куда SDCC уже положил параметр — * в первой версии пробника из-за этого цвет заливки становился номером * страницы (0xF3 = чёрный), и «резидент не рисовал». */ static uint8_t w3_page(void) __naked { __asm__("in a, (#0xE2)\n\tret"); } void res_draw(int y, int color) { res_page_seen = w3_page(); setfillstyle(SOLID_FILL, color); bar(10, y, 60, y + 12); }