Files
snark13 4a081501d8 libc: сплит «1 функция = 1 модуль» — вся библиотека, wildcard-сборка
- bios/conio/env/errno/gfx/io/mem/mouse/stdio/stdlib/string/sys/time/
  video разложены по модулям: общие статики и helpers — в internal
  _-модулях (_conio.h/_mouse.h/_gfx.h/_palette.h/_atexit.h/_time.h)
- lib/Makefile: LIBC_C = wildcard libc/*/*.c — гранулярность файлов
  = гранулярность DCE линкера
- эффект _CODE: gfx_text 6986→2568 Б, gfx_mous −1745, gfx_demo/d16
  −542; ранее timedir −3270, ls −3098, stattest −2995
- комментарии оставшихся модулей переведены на русский; puts: убран
  мёртвый pchars; videomode_raw разложен на get/set
- docs/libc-split-asm-cases.md — правила asm-связок между модулями;
  docs/libc-roadmap.md — план этапа
- восстановлен examples/mdview/SAMPLE.MD (нужен make floppy)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 16:08:58 +03:00

47 lines
1.6 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* mouse_read — снять состояние мыши в *st (RST 30h, fn $03).
* Возвращает: A=кнопки, HL=x, DE=y — RST портит HL/DE/A, поэтому
* указатель на структуру не удержать в регистрах: результат идёт через
* приватный скретч в BSS, потом копируется в *st.
* Раскладка mouse_state_t: x(2), y(2), buttons(1).
*/
#include <mouse.h>
/* Скретч только для mouse_read. */
static uint16_t mb_x, mb_y;
static uint8_t mb_buttons;
void mouse_read(mouse_state_t *st) __naked
{
(void)st;
__asm
;; HL = указатель на структуру на входе.
push ix
push hl ; спрятать указатель через RST
ld c, #0x03 ; READ MOUSE STATE
rst #0x30 ; MOUSE
;; Возврат: A=кнопки, HL=x, DE=y (CF=err здесь игнорируем)
ld (_mb_x), hl
ld (_mb_y), de
ld (_mb_buttons), a
pop hl ; вернуть указатель
pop ix
;; Скопировать скретч *st. Раскладка: x(2), y(2), buttons(1).
ld de, (_mb_x)
ld (hl), e
inc hl
ld (hl), d
inc hl
ld de, (_mb_y)
ld (hl), e
inc hl
ld (hl), d
inc hl
ld a, (_mb_buttons)
ld (hl), a
ret
__endasm;
}