/* * _bgi_read_raw — прочитать пиксель (x,y), mode 0x81 (register-only asm). * * "Raw" = W3-naive: вызывающий уже сделал _bgi_begin (W3 на видеобанке, DI). * Для блиттинга: getimage/putimage читают тысячи пикселей в одной скобке. * За пределами экрана возвращает 0. * * __sdcccall(1): x→HL, y→DE (E=low); возврат uint8_t в A. Всё в регистрах, * без статик-скретча (единый стиль с _bgi_plot_raw). */ #include "../_bgi.h" uint8_t _bgi_read_raw(int x, int y) __naked __preserves_regs(d,e) { (void)x; (void)y; __asm .globl __gfx_addr_base #ifndef GFX_NOCHECK ld a, l sub a, #0x40 ld a, h sbc a, #0x01 jr NC, rr_zero ; (unsigned)x >= 320 ld a, d or a, a jr NZ, rr_zero ; (unsigned)y >= 256 #endif ld a, e out (#0x89), a ; Port_Y = y ld bc, (__gfx_addr_base) add hl, bc ; HL = base + x ld a, (hl) ; A = пиксель (возврат) ret #ifndef GFX_NOCHECK rr_zero: xor a, a ret #endif __endasm; }