Rev 437 | Rev 1913 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download
todo вернуть OSCALLS для перехвата клавиш, для этого в оси сделать хук для юзерского обработчика прерываний?
перехват надо уже в юзерспейсе, а в системспейсе надо вызывать заданный обработчик (возможно, другой)
щедулинга при этом нет, но есть выставление палитры
в WREND сейчас страница включается в 8000 (было в 0000), в 4000 экран
в c000 скалер
скалер для стен (64 масштаба в страничке - в The Board II было 14801 b высота 200 без пола):
jr NC,$+4
SET 5,H ;todo LD H,
ADD A,L ;todo skip if L<=-40
LD L,A
jr NC,$+3 ;todo skip if L<=-40
INC H ;todo skip if L<=-40
dup scrhgt ;или меньше для мелких масштабов
[pop de] ;всего 32 шт (выигрыш по сравнению с 64*(ld a,(de):inc e) = 384t)
ld (hl),e/d
add hl,bc
edup
jp (ix)
скалер для спрайтов:
...
ld a,(de)
cp IMPOSSIBLECOLOR ;нельзя or a, т.к. 0 должен быть чёрный, а чёрные пиксели есть в текстурах
jr z,$+4
and b/c ;затенение
ld (hl),a
add hl,sp ;-40 или можно +40, прерывание затрёт SETPG32KHIGH, но должно само восстановить
[inc d(или e)]
;49.5t
надо более компактные (и медленные) процедуры для больших масштабов, или одна процедура:
drawspr00
ld d,h
ld a,(de)
exx
cp e;IMPOSSIBLECOLOR
jr z,$+3
ld (hl),a
add hl,bc
exx
add hl,bc
jp nc,drawspr00 ;флаги P/V и S не генерируются!
;нельзя спрайт высотой больше экрана!