/* * getpixel (bgi256) — цвет пикселя (x,y), mode 0x81. Полностью inline * (bounds + W3-скобка + чтение пикселя), без вызовов _bgi_read/raw. * Возвращает 0 вне экрана. */ #include "../_bgi.h" static uint8_t _gp_y; static uint16_t _gp_addr; static uint8_t _gp_color; unsigned getpixel(int x, int y) { if ((unsigned)x >= GFX_WIDTH || (unsigned)y >= GFX_HEIGHT) return 0; _gp_y = (uint8_t)y; _gp_addr = (uint16_t)(_gfx_addr_base + (unsigned)x); __asm di in a, (#0xE2) ld (__gfx_saved_w3), a ld a, (__gfx_bank) out (#0xE2), a ld a, (_gp_y) out (#0x89), a ld hl, (_gp_addr) ld a, (hl) ld (_gp_color), a ld a, (__gfx_saved_w3) out (#0xE2), a ei __endasm; return _gp_color; }