Login

Subversion Repositories NedoOS

Rev

Rev 941 | Go to most recent revision | 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

        ld b,high MEM_SLOT1
        xor 2
        ld (_memSlot1),a
        out (c),a

        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

        ld b,high MEM_SLOT1
        xor 2
        ld (_memSlot1),a
        out (c),a

        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
        call setSlot1
        ld a,d
        call 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

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

        call copy_visible_to_shadow

        ld e,SCR_PAGE1
        ld d,SPBUF_PAGE0
        ld hl,#4000
        call convert_screen
        ld e,SCR_PAGE5
        ld d,SPBUF_PAGE1
        ld hl,#4000
        call convert_screen
        ld e,SCR_PAGE1
        ld d,SPBUF_PAGE2
        ld hl,#6000
        call convert_screen
        ld e,SCR_PAGE5
        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
        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
        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
        ld h,high tresprx ;(4 тхЄъш)
        ld l,(hl)
        ld h,high resprx0 ;todo inc h
        jp (hl)



prspr
        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
        ld a,(de) ;addrl(id)
        ld lx,a
        inc d
        ld a,(de) ;addrh(id)
        ld hx,a ;ix=spraddr
        inc d
      ld a,(de) ;pg(id)
        ifdef ATM
        xor 128
        endif
      out (c),a
        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
                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