/* * wrchar — записать символ ch с атрибутом attr в позицию (x, y), не * трогая курсор. ESTEX WRCHAR ($58). * * SDCC __sdcccall(1): x в A, y в L (2 uint8 → A, L); ch и attr * упакованы и запушены на стек одной 16-битной парой (вызывающий * делает `ld hl, #(attr<<8)|ch; push hl`). Раскладка после CALL: * [SP+0..1] = адрес возврата * [SP+2] = ch (младшая половина пары) * [SP+3] = attr (старшая половина) * Void-возврат → callee снимает 2 байта стековых аргументов через * `pop bc` + jp (iy). */ #include "_conio.h" void wrchar(uint8_t x, uint8_t y, char ch, uint8_t attr) __naked { (void)x; (void)y; (void)ch; (void)attr; __asm pop iy ; адрес возврата pop bc ; C = ch, B = attr push ix ld d, l ; D = row (y) ld e, a ; E = col (x) ld a, c ; A = ch ld c, #0x58 ; ESTEX WRCHAR rst #0x10 pop ix jp (iy) __endasm; }