Login

Subversion Repositories NedoOS

Rev

Rev 942 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

        ;export _sprites_start
        ;export _sprites_stop

;win0: background layer; screen procedure
;win1: screen layers 0,2
;win2: screen layers 1,3
;win3: code,stack,interrupt



;ъюяшЁютрэшх тшфшьюую ¤ъЁрэр т Єхэхтющ

copy_visible_to_shadow
        ;ld a,(_screenActive)
        ;ld bc,MEM_SLOT2
        ;ld (_memSlot2),a
        ;out (c),a
        call getuser_scr_low
        SETPG8000

        ;ld b,high MEM_SLOT1
        ;xor 2
        ;ld (_memSlot1),a
        ;out (c),a
        call getuser_scr_low_cur
        call copy_visible_to_shadow_setldirpage ;SETPG4000

        ;ld hl,16384
        ;ld de,32768
        ;ld b,h
        ;ld c,l
        ;call _fast_ldir

        ;ld a,(_screenActive)
        ;ld bc,MEM_SLOT2
        ;sub 4
        ;ld (_memSlot2),a
        ;out (c),a
        call getuser_scr_high
        SETPG8000

        ;ld b,high MEM_SLOT1
        ;xor 2
        ;ld (_memSlot1),a
        ;out (c),a
        call getuser_scr_high_cur
copy_visible_to_shadow_setldirpage
        SETPG4000

        ld hl,16384
        ld de,32768
        ld b,h
        ld c,l
        jp _fast_ldir



;ъюяшЁютрэшх ¤ъЁрэр т сєЇхЁ Їюэр фы  ёяЁрщЄют
;¤ЄюЄ сєЇхЁ шёяюы№чєхЄё  фы  ёЄшЁрэш  ёяЁрщЄют
;ш шьххЄ ёяхЎшры№э√щ ЇюЁьрЄ Єшяр H=x L=y
;сєЇхЁ чрэшьрхЄ ўхЄ√Ёх ёЄЁрэшЎ√ фы  єёъюЁхэш  ёЄшЁрэш 

convert_screen
        push bc
        ld a,e ;screen page (physical)
        SETPG4000;call setpg4000;setSlot1
        ld a,d
        call setpg8000;setSlot2

        ld c,200
        ex de,hl
        ld hl,#8000
.l1
        push hl
        ld b,40
.l2
        ld a,(de)
        ld (hl),a
        inc de
        inc h
        djnz .l2
        pop hl
        inc l
        dec c
        jr nz,.l1

        pop bc
        ret



;чряєёъ ёяЁрщЄют
;юўш∙рхЄ ёяшёюъ ёяЁрщЄют
;ъюяшЁєхЄ тшфшь√щ ¤ъЁрэ т Єхэхтющ
;ъюяшЁєхЄ Єхэхтющ ¤ъЁрэ т сєЇхЁ ёяЁрщЄют
;ЁрчЁх°рхЄ т√тюф ёяЁрщЄют



_sprites_start
        ;xor a
        ;ld (spritesActive),a
        call _sprites_stop

        ld hl,_sprqueue
        ld de,_sprqueue+1
        ld bc,511
        ld (hl),255
        ldir

        call copy_visible_to_shadow

        ;ld e,SCR_PAGE1
         call getuser_scr_low
         ld e,a
        ld d,SPBUF_PAGE0
        ld hl,#4000
        call convert_screen
        ;ld e,SCR_PAGE5
         call getuser_scr_high
         ld e,a
        ld d,SPBUF_PAGE1
        ld hl,#4000
        call convert_screen
        ;ld e,SCR_PAGE1
         call getuser_scr_low_cur
         ld e,a
        ld d,SPBUF_PAGE2
        ld hl,#6000
        call convert_screen
        ;ld e,SCR_PAGE5
         call getuser_scr_high_cur
         ld e,a
        ld d,SPBUF_PAGE3
        ld hl,#6000
        call convert_screen

        MRestoreMemMap12

        ld a,1
        ld (spritesActive),a


        ret



;юёЄрэютър ёяЁрщЄют

_sprites_stop
        xor a
        ld (spritesActive),a
        ret



        align 256
taby
        dup 200-16
        db high ((low $)*40)+#40
        edup
        dup 256-(low $)
        db high ((200-16)*40)+#40
        edup

        dup 200-16
        db low ((low $)*40)
        edup
        dup 256-(low $)
        db low ((200-16)*40)
        edup
;tabx
        dup 160-8
        db (low $)/4
        edup
        dup 256-(low $)
        db (160-8)/4
        edup
;tprsprx
        dup 64
        db low prsprx0
        db low prsprx1
        db low prsprx2
        db low prsprx3
        edup
tresprx
        dup 64
        db low resprx0
        db low resprx1
        db low resprx2
        db low resprx3
        edup

       ;ds .(-$)
toutd
;TODO яхЁхёўшЄрЄ№ т Ёхры№э√х ёЄЁрэшЎ√
        db SPBUF_PAGE1;2
        db SPBUF_PAGE2;1
        db SPBUF_PAGE3;0
        db SPBUF_PAGE0;3
        db SPBUF_PAGE1;2
        db SPBUF_PAGE2;1
        db SPBUF_PAGE3;0

resprx0
        ;display /h,$
         ld h,a ;H=x
         ex af,af' ;'
         ld l,a ;L=y
        ld a,b
        push bc
         push hl
       add a,64
       ld b,a
        push bc
         push hl
       sub 32
        ld b,a
        push bc
         push hl
       add a,64
       ld b,a
        push bc
         push hl
        ;ld bc,MEM_SLOT0 ;background window port
        ld hl,toutd+6 ;фы  outd ;ьюцэю dec l
        jp (ix)

resprx1
        ;display /h,$
         ld h,a
         ex af,af' ;'
         ld l,a ;L=y
       ld a,b
       add a,64
       ld b,a
        push bc
         push hl
       sub 32
       ld b,a
        push bc
         push hl
       add a,64
       ld b,a
        push bc
         push hl
       sub 96
        ld b,a
        inc bc
        push bc
         inc h
         push hl
        ;ld bc,MEM_SLOT0 ;background window port
        ld hl,toutd+3 ;фы  outd ;ьюцэю b
        jp (ix)

resprx2
        ;display /h,$
         ld h,a
         ex af,af' ;'
         ld l,a ;L=y
       ld a,b
       add a,32
       ld b,a
        push bc
         push hl
       add a,64
       ld b,a
        push bc
         push hl
       sub 96
        ld b,a
        inc bc
        push bc
         inc h
         push hl
       ld a,b
       add a,64
       ld b,a
        push bc
         push hl
        ;ld bc,MEM_SLOT0 ;background window port
        ld hl,toutd+4 ;фы  outd ;ьюцэю c
        jp (ix)

resprx3
        ;display /h,$
         ld h,a
        ld l,b
        ld a,b
        add a,96
        ld b,a
        push bc
        ld b,l
         ex af,af' ;'
         ld l,a ;L=y
         push hl
        inc bc
        push bc
         inc h
         push hl
        ld a,b
       add a,64
       ld b,a
        push bc
         push hl
        sub 32
        ld b,a
        push bc
         push hl
        ;ld bc,MEM_SLOT0 ;#37f7 ;background window port
        ld hl,toutd+5 ;фы  outd ;ьюцэю h
        jp (ix)

prsprx0
        ;display /h,$
        ld b,a
        push bc
       add a,64
       ld b,a
        push bc
       sub 32
        ld b,a
        push bc
       add a,64
       ld b,a
        push bc
        exx
        jp (ix)

prsprx1
        ;display /h,$
        ld h,a
        add a,64
        ld b,a
        push bc
        sub 32
        ld b,a
        push bc
       add a,64
       ld b,a
        push bc
        ld b,h
        inc bc
        push bc
        exx
        jp (ix)

prsprx2
        ;display /h,$
        ld h,a
        add a,32
        ld b,a
        push bc
       add a,64
       ld b,a
        push bc
        ld b,h
        inc bc
        push bc
       ld a,b
       add a,64
       ld b,a
        push bc
        exx
        jp (ix)

prsprx3
        ;display /h,$
        ld h,a
        add a,96
        ld b,a
        push bc
        ld b,h
        inc bc
        push bc
       ld a,b
       add a,64
       ld b,a
        push bc
        sub 32
        ld b,a
        push bc
        exx
        jp (ix)

respr
       ;ret      
        ld hl,_sprqueue
                ld a,(_screenActive)
                and 2
                jr nz,$+3
                inc h
        exx
        ld ix,squareremover
        ld iy,respr0
        ld bc,40
        exx
  jr respr0go
respr0
  inc e
  ret z ;end of queue
        exd
respr0go
  ld d,(hl) ;high id
  inc d
  ret z ;end of queue
        inc l
        inc l
        ld d,high taby
        ld e,(hl) ;y
        inc l
         ld a,e
         ex af,af' ;'
        ld a,(de) ;addrh(y)
        ld b,a
        inc d
        ld a,(de) ;addrl(y)
        inc d ;'tabx
        ld e,(hl) ;x
        exd
        add a,(hl) ;x/4
        ld c,a
        adc a,b
        sub c
        ld b,a
         ld a,(hl) ;x/4
          or 0xc0
        ld h,high tresprx ;(4 тхЄъш)
        ld l,(hl)
        ld h,high resprx0 ;todo inc h
        jp (hl)



prspr
       ;ret
        ld iy,prspr0
        ld bc,40
        exx
        ld de,_sprqueue
                ld a,(_screenActive)
                and 2
                jr nz,$+3
                inc d
  jr prspr0go
prspr0
        exx
  inc e
  ret z ;end of queue
prspr0go
        exd
        ld d,(hl) ;high id
  inc d
  ret z ;end of queue
         inc l
         ld e,(hl)
         inc l
      ld a,SPTBL_PAGE
      ;ld bc,MEM_SLOT0 ;#37f7 ;sprites window port
      ;out (c),a
      call setpgc000
      ld a,d
      or 0xc0
      ld d,a
        ld a,(de) ;addrl(id)
        ld lx,a
        inc d
        ld a,(de) ;addrh(id)
      or 0xc0
        ld hx,a ;ix=spraddr
        inc d
      ld a,(de) ;pg(id)
        ;ifdef ATM
        ;xor 128
        ;endif
      ;out (c),a
      cpl
      call setpgc000
        ld d,high taby
        ld e,(hl) ;y
        inc hl
        ld a,(de) ;addrh(y)
        ld b,a
        inc d
        ld a,(de) ;addrl(y)
        inc d ;'tx
        ld e,(hl) ;x
        exd
        add a,(hl) ;x/4
        ld c,a
        adc a,b
        sub c
        inc h ;'tprsprx (4 тхЄъш)
        ld l,(hl)
        ld h,high prsprx0
        jp (hl)



squareremover
       dup 4
        ;outd ;background page
                ld a,(hl)
                ;out (c),a
                call setpgc000
                dec l
        exx
        pop de ;buf
        pop hl ;screen

       dup 7

        ld a,(de)
        ld (hl),a
        inc hl
        inc d
        ld a,(de)
        ld (hl),a
        inc e
        add hl,bc
        ld a,(de)
        ld (hl),a
        dec hl
        dec d
        ld a,(de)
        ld (hl),a
        inc e
        add hl,bc

       edup ;7*2 lines
        ld a,(de)
        ld (hl),a
        inc hl
        inc d
        ld a,(de)
        ld (hl),a
        inc e
        add hl,bc
        ld a,(de)
        ld (hl),a
        dec hl
        dec d
        ld a,(de)
        ld (hl),a

        exx
       edup ;4 layers
        jp (iy) ;respr0