/* * putpixel (bgi256) — точка (x,y) цветом color, mode 0x81. * ПОЛНОСТЬЬЮ inline: bounds + W3-скобка + запись пикселя в теле, БЕЗ * вызовов _bgi_plot / gfx_putpixel256 / _bgi_plot_raw (устранены * прокладки старой цепочки putpixel→_bgi_plot→gfx_putpixel256→raw). * Адресация: CPU _gfx_addr_base + x, Port_Y (0x89) = y; W3 мапится на * _gfx_bank, сейв восстанавливается. Bounds — compile-time GFX_WIDTH/ * HEIGHT (меньше/быстрее, ≡ runtime _bgi_maxx/_bgi_maxy). */ #include "../_bgi.h" /* File-static скретч (как в _bgi_plot_raw, но свой — putpixel не должен * топтать скретч акселератора/plot_raw, если звать вперемешку). */ static uint8_t _pp_y; static uint16_t _pp_addr; static uint8_t _pp_color; void putpixel(int x, int y, color_t color) { #ifndef GFX_NOCHECK if ((unsigned)x >= GFX_WIDTH || (unsigned)y >= GFX_HEIGHT) return; #endif _bgi_begin(); _bgi_plot_raw(x, y, color); _bgi_end(); return; // _pp_y = (uint8_t)y; // _pp_addr = (uint16_t)(_gfx_addr_base + (unsigned)x); // _pp_color = (uint8_t)color; // __asm // di // in a, (#0xE2) // ld (__gfx_saved_w3), a // ld a, (__gfx_bank) // out (#0xE2), a // ld a, (_pp_y) // out (#0x89), a // ld hl, (_pp_addr) // ld a, (_pp_color) // ld (hl), a // ld a, (__gfx_saved_w3) // out (#0xE2), a // ei // __endasm; }