Login

Subversion Repositories NedoOS

Rev

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

;******** вспом п/п PAGE 4 ***** 256bt

;----ВЫБОР ГЕРОЕВ--------
outBOX 
        if 1==0
        CALL _TST#8
        endif
        LD A,(begBOX)
        OR A
        RET Z
        LD HL,(MX)
        LD A,L
        CP 190
        JR C,oB1
        LD L,190
oB1     LD DE,(BOXX)
        XOR A
        PUSH HL
        SBC HL,DE
        POP HL
        RET Z
        ld ix,0xf0c0
        ld hy,0xff ;white
outboxpp
;de=top left
;hl=bottom right
       if EGA==0
        CALL STD ;выбор теневого экрана
       endif
       if EGA
        ;push de
        ;push hl
        call setpgsscr40008000
        ;pop hl
        ;pop de
        ld bc,setpgsmain40008000
        push bc
       endif
        ;jr $
        PUSH DE
        LD E,L
       if EGA
       push hl
       endif
        CALL vLINE
       if EGA
       pop hl
       endif
        POP DE
        PUSH DE
        LD D,H
       if EGA
       push hl
       endif
        CALL hLINE
       if EGA
       pop hl
       endif
        POP DE
       if EGA
       push de
       push hl
       endif
        CALL vLINE
       if EGA
       pop hl
       pop de
       endif
        CALL hLINE
        LD HL,LMask
        RRC (HL)
        RET

        if EGA
outBOXsolid_nomargins
        ld ix,0xffff
        ld hy,0x36 ;yellow
        jr outBOXsolid_ix
outBOXsolid
;de=top left
;hl=bottom right
;a'=mask
        ld ix,0xf0c0
        ld hy,0xff ;white
outBOXsolid_ix
        ld a,(LMask)
        push af
        ex af,af'
        ld (LMask),a
        call outboxpp
        pop af
        ld (LMask),a
        ret
        endif

hLINE   ;гориз уч DE->L;
        LD A,(LMask)
        LD (LMask_),A
         if EGA ;для выделения домиков
         ld a,d
         cp 192
         ret nc
         ld a,e
         cp lx;192
         jr c,hlinenoclipleft
         ld e,0
hlinenoclipleft
         ld a,l
         cp hx;-16
         ret nc
         cp lx;191
         jr c,hlinenoclipright
         ld l,191
hlinenoclipright
         endif
        LD A,L
        CP E
        RET Z
        PUSH HL
        PUSH DE
        JR NC,hL1
        LD L,E
        LD E,A
hL1     PUSH HL
        PUSH DE
        LD A,E
       if EGA
        AND 0xfe
       else
        AND #F8
       endif
        LD E,A
        LD A,L
       if EGA
        AND 0xfe
       else
        AND #F8
       endif
        SUB E
       if EGA
        CP #2
       else
        CP #8
       endif
        JR C,hLA
        JR NZ,hLC
        LD B,0
        JR hLB
hLC    
       if EGA
        RRCA
       else
        RRCA
        RRCA
        RRCA
       endif
        LD B,A
        DEC B
hLB     POP DE
        PUSH DE
        CALL PCOORD
        POP DE
       if EGA
        ld a,0xff ;L+R
        bit 0,e
        jr z,$+4
        ld a,0xb8 ;R only
       else
        LD A,E
        AND 7
        LD DE,MLtab1 ;#FF,#7F,#3F,#1F,#F,#7,#3,#1
        ADD A,E
        LD E,A
        LD A,(DE)
       endif
        CALL pMASK ;A-маска;HL-коорд
        LD A,B
        OR A
        JR Z,hLC1
hLC0    LD A,#FF
        CALL pMASK
        DJNZ hLC0
hLC1    POP DE
       if EGA
        ld a,0x47 ;L
        bit 0,e
        jr z,$+4
        ld a,0xff ;L+R
       else
        LD A,E
        AND 7
        LD DE,MLtab2 ;#80,#C0,#E0,#F0,#F8,#FC,#FE,#FF
        ADD A,E
        LD E,A
        LD A,(DE)
       endif
        JR hLA1
hLA     POP DE
        PUSH DE
        CALL PCOORD
        POP DE
       if EGA
        ld a,0xff ;L+R
        bit 0,e
        jr z,$+4
        ld a,0xb8 ;R only
        pop de
        bit 0,e
        jr nz,$+4
        and 0x47 ;keep L
       else
        LD A,E
        AND 7
        LD DE,MLtab1 ;#FF,#7F,#3F,#1F,#F,#7,#3,#1
        ADD A,E
        LD E,A
        LD A,(DE)
        LD C,A
        POP DE
        LD A,E
        AND 7
        LD DE,MLtab2 ;#80,#C0,#E0,#F0,#F8,#FC,#FE,#FF
        ADD A,E
        LD E,A
        LD A,(DE)
        AND C
       endif
hLA1    CALL pMASK
        POP DE
        POP HL
        RET

pMASK   ;выв байта LMask по маске А в (HL)
       if EGA
        LD C,A
        or (HL)
         xor c
        LD (HL),A ;black
        LD A,(LMask_)
        RLCA
        RLCA
        LD (LMask_),A
        jr c,pMASKq
        ld a,c
         and hy;0x36
        XOR (HL)
        LD (HL),A ;white
pMASKq
        ld de,0x4000
        ld a,0x9f;0xa0
        cp h
        adc hl,de ;de = 0x4000 - ((sprhgt-1)*40)
        ret pe
;8000->с000 (надо 6000) или a000->e001 (надо 4001)
         inc a
        xor h
        ld h,a
        ret
       else
        LD C,A
        OR (HL)
        LD (HL),A
        LD A,(LMask_)
        AND C
        XOR (HL)
        LD (HL),A
        INC L
        RET
       endif ;~EGA

pvMASK
       if EGA
        LD A,C
        OR (HL)
         xor c
        LD (HL),A ;black
        LD A,(LMask_)
        RLCA
        LD (LMask_),A
        jr c,pvMASKq
        ld a,c
         and hy;0x36
        XOR (HL)
        LD (HL),A ;white
pvMASKq
        ld de,40
        add hl,de
        ret
       else
        LD A,C
        OR (HL)
        LD (HL),A
        LD A,(LMask_)
        RLCA
        LD (LMask_),A
        AND C
        XOR (HL)
        LD (HL),A
        INC H
        LD A,H
        AND 7
        RET NZ
        LD A,L
        ADD A,32
        LD L,A
        RET C
        LD A,H
        SUB 8
        LD H,A
        RET
       endif ;~EGA

vLINE   ;верт.линияDE->H
        LD A,(LMask)
        LD (LMask_),A
         if EGA ;для выделения домиков
         ld a,e
         cp lx;192
         ret nc
         ld a,d
         cp 192
         jr c,vlinenocliptop
         ld d,0
vlinenocliptop
         ld a,h
         cp -16
         ret nc
         cp lx;192;191
         jr c,vlinenoclipbottom
         ld h,192;191
vlinenoclipbottom
         endif
        LD A,D
        CP H
        RET Z
        PUSH HL
        PUSH DE
        JR C,vG1
        LD D,H
        LD H,A
vG1     PUSH DE
        LD A,H
        SUB D
        LD B,A
        POP DE
        PUSH DE
        CALL PCOORD
        POP DE
       if EGA
        ld c,0x47 ;L
        bit 0,e
        jr z,$+4
        ld c,0xb8 ;R
       else
        LD A,E
        AND 7
        LD DE,MLtabV
        ADD A,E
        LD E,A
        LD A,(DE)
        LD C,A ;один бит
       endif
vG2     CALL pvMASK
        DJNZ vG2
        POP DE
        POP HL
        RET