/* * gfx_w0_page_prepare — сделать произвольную EMM-страницу безопасной в W0. * * При первом вызове запоминает штатную страницу DSS, затем ставит в целевой * странице переход на общий IRQ-восстановитель и RETN для NMI. Функция * резидентна: она сама временно переключает W3. */ #include #include #include "../_bgi.h" void gfx_w0_page_prepare(uint8_t page) { uint8_t saved=_io_page_w3, *p=(uint8_t *)0xC000; uint16_t stub=(uint16_t)&_gfx_w0_isr; if (!_gfx_w0_dss) _gfx_w0_dss=_io_page_w0; sprinter_page_w3(page); p[0x38]=0xC3; p[0x39]=(uint8_t)stub; p[0x3A]=(uint8_t)(stub >> 8); p[0x66]=0xED; p[0x67]=0x45; sprinter_page_w3(saved); }