/* * mouse_text_cursor — форма курсора в текстовых режимах (RST 30h, * fn $0A CURSOR_TEXT_MODES): * B = 0 * H = AND-маска символа L = XOR-маска символа * D = AND-маска атрибута E = XOR-маска атрибута * * SDCC __sdcccall(1) для 4×uint8_t даёт: * sym_and в A, sym_xor в L, attr_and/attr_xor парой на стеке. */ #include void mouse_text_cursor(uint8_t sym_and, uint8_t sym_xor, uint8_t attr_and, uint8_t attr_xor) __naked { (void)sym_and; (void)sym_xor; (void)attr_and; (void)attr_xor; __asm ;; SDCC __sdcccall(1) для 4×uint8_t: ;; arg1 sym_and → A ;; arg2 sym_xor → L ;; arg3 attr_and → младший байт пары на стеке ;; arg4 attr_xor → старший байт пары pop iy ; адрес возврата pop bc ; C = attr_and (low), B = attr_xor (high) push ix ;; Цель: H=sym_and, L=sym_xor, D=attr_and, E=attr_xor, B=0 ld h, a ; H = sym_and (из A) ; L уже держит sym_xor ld d, c ; D = attr_and ld e, b ; E = attr_xor ld b, #0 ld c, #0x0A ; CURSOR TEXT MODE rst #0x30 ; MOUSE pop ix jp (iy) __endasm; }