Login

Subversion Repositories NedoOS

Rev

Rev 437 | Rev 1913 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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 не генерируются!
;нельзя спрайт высотой больше экрана!