?login_element?

Subversion Repositories NedoOS

Rev

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

  1. ;******** вспом п/п PAGE 4 ***** 256bt
  2.  
  3. ;----ВЫБОР ГЕРОЕВ--------
  4. outBOX 
  5.         if 1==0
  6.         CALL _TST#8
  7.         endif
  8.         LD A,(begBOX)
  9.         OR A
  10.         RET Z
  11.         LD HL,(MX)
  12.         LD A,L
  13.         CP 190
  14.         JR C,oB1
  15.         LD L,190
  16. oB1     LD DE,(BOXX)
  17.         XOR A
  18.         PUSH HL
  19.         SBC HL,DE
  20.         POP HL
  21.         RET Z
  22.         ld ix,0xf0c0
  23.         ld hy,0xff ;white
  24. outboxpp
  25. ;de=top left
  26. ;hl=bottom right
  27.        if EGA==0
  28.         CALL STD ;выбор теневого экрана
  29.        endif
  30.        if EGA
  31.         ;push de
  32.         ;push hl
  33.         call setpgsscr40008000
  34.         ;pop hl
  35.         ;pop de
  36.         ld bc,setpgsmain40008000
  37.         push bc
  38.        endif
  39.         ;jr $
  40.         PUSH DE
  41.         LD E,L
  42.        if EGA
  43.        push hl
  44.        endif
  45.         CALL vLINE
  46.        if EGA
  47.        pop hl
  48.        endif
  49.         POP DE
  50.         PUSH DE
  51.         LD D,H
  52.        if EGA
  53.        push hl
  54.        endif
  55.         CALL hLINE
  56.        if EGA
  57.        pop hl
  58.        endif
  59.         POP DE
  60.        if EGA
  61.        push de
  62.        push hl
  63.        endif
  64.         CALL vLINE
  65.        if EGA
  66.        pop hl
  67.        pop de
  68.        endif
  69.         CALL hLINE
  70.         LD HL,LMask
  71.         RRC (HL)
  72.         RET
  73.  
  74.         if EGA
  75. outBOXsolid_nomargins
  76.         ld ix,0xffff
  77.         ld hy,0x36 ;yellow
  78.         jr outBOXsolid_ix
  79. outBOXsolid
  80. ;de=top left
  81. ;hl=bottom right
  82. ;a'=mask
  83.         ld ix,0xf0c0
  84.         ld hy,0xff ;white
  85. outBOXsolid_ix
  86.         ld a,(LMask)
  87.         push af
  88.         ex af,af'
  89.        ld (LMask),a
  90.        call outboxpp
  91.        pop af
  92.        ld (LMask),a
  93.        ret
  94.        endif
  95.  
  96. hLINE   ;гориз уч DE->L;
  97.         LD A,(LMask)
  98.         LD (LMask_),A
  99.         if EGA ;для выделения домиков
  100.         ld a,d
  101.         cp 192
  102.         ret nc
  103.         ld a,e
  104.         cp lx;192
  105.         jr c,hlinenoclipleft
  106.         ld e,0
  107. hlinenoclipleft
  108.         ld a,l
  109.         cp hx;-16
  110.         ret nc
  111.         cp lx;191
  112.         jr c,hlinenoclipright
  113.         ld l,191
  114. hlinenoclipright
  115.         endif
  116.         LD A,L
  117.         CP E
  118.         RET Z
  119.         PUSH HL
  120.         PUSH DE
  121.         JR NC,hL1
  122.         LD L,E
  123.         LD E,A
  124. hL1     PUSH HL
  125.         PUSH DE
  126.         LD A,E
  127.       if EGA
  128.         AND 0xfe
  129.       else
  130.         AND #F8
  131.       endif
  132.         LD E,A
  133.         LD A,L
  134.       if EGA
  135.         AND 0xfe
  136.       else
  137.         AND #F8
  138.       endif
  139.         SUB E
  140.       if EGA
  141.         CP #2
  142.       else
  143.         CP #8
  144.       endif
  145.         JR C,hLA
  146.         JR NZ,hLC
  147.         LD B,0
  148.         JR hLB
  149. hLC    
  150.       if EGA
  151.        RRCA
  152.       else
  153.        RRCA
  154.         RRCA
  155.         RRCA
  156.       endif
  157.         LD B,A
  158.         DEC B
  159. hLB     POP DE
  160.         PUSH DE
  161.         CALL PCOORD
  162.         POP DE
  163.       if EGA
  164.        ld a,0xff ;L+R
  165.        bit 0,e
  166.        jr z,$+4
  167.        ld a,0xb8 ;R only
  168.       else
  169.         LD A,E
  170.         AND 7
  171.         LD DE,MLtab1 ;#FF,#7F,#3F,#1F,#F,#7,#3,#1
  172.         ADD A,E
  173.         LD E,A
  174.         LD A,(DE)
  175.       endif
  176.         CALL pMASK ;A-маска;HL-коорд
  177.         LD A,B
  178.         OR A
  179.         JR Z,hLC1
  180. hLC0    LD A,#FF
  181.         CALL pMASK
  182.         DJNZ hLC0
  183. hLC1    POP DE
  184.       if EGA
  185.        ld a,0x47 ;L
  186.        bit 0,e
  187.        jr z,$+4
  188.        ld a,0xff ;L+R
  189.       else
  190.         LD A,E
  191.         AND 7
  192.         LD DE,MLtab2 ;#80,#C0,#E0,#F0,#F8,#FC,#FE,#FF
  193.         ADD A,E
  194.         LD E,A
  195.         LD A,(DE)
  196.       endif
  197.         JR hLA1
  198. hLA     POP DE
  199.         PUSH DE
  200.         CALL PCOORD
  201.         POP DE
  202.       if EGA
  203.        ld a,0xff ;L+R
  204.        bit 0,e
  205.        jr z,$+4
  206.        ld a,0xb8 ;R only
  207.        pop de
  208.        bit 0,e
  209.        jr nz,$+4
  210.        and 0x47 ;keep L
  211.       else
  212.         LD A,E
  213.         AND 7
  214.         LD DE,MLtab1 ;#FF,#7F,#3F,#1F,#F,#7,#3,#1
  215.         ADD A,E
  216.         LD E,A
  217.         LD A,(DE)
  218.         LD C,A
  219.         POP DE
  220.         LD A,E
  221.         AND 7
  222.         LD DE,MLtab2 ;#80,#C0,#E0,#F0,#F8,#FC,#FE,#FF
  223.         ADD A,E
  224.         LD E,A
  225.         LD A,(DE)
  226.         AND C
  227.       endif
  228. hLA1    CALL pMASK
  229.         POP DE
  230.         POP HL
  231.         RET
  232.  
  233. pMASK   ;выв байта LMask по маске А в (HL)
  234.       if EGA
  235.         LD C,A
  236.         or (HL)
  237.         xor c
  238.         LD (HL),A ;black
  239.         LD A,(LMask_)
  240.         RLCA
  241.         RLCA
  242.         LD (LMask_),A
  243.        jr c,pMASKq
  244.         ld a,c
  245.         and hy;0x36
  246.         XOR (HL)
  247.         LD (HL),A ;white
  248. pMASKq
  249.        ld de,0x4000
  250.        ld a,0x9f;0xa0
  251.        cp h
  252.        adc hl,de ;de = 0x4000 - ((sprhgt-1)*40)
  253.        ret pe
  254. ;8000->с000 (надо 6000) или a000->e001 (надо 4001)
  255.         inc a
  256.        xor h
  257.        ld h,a
  258.        ret
  259.       else
  260.         LD C,A
  261.         OR (HL)
  262.         LD (HL),A
  263.         LD A,(LMask_)
  264.         AND C
  265.         XOR (HL)
  266.         LD (HL),A
  267.         INC L
  268.         RET
  269.       endif ;~EGA
  270.  
  271. pvMASK
  272.       if EGA
  273.         LD A,C
  274.         OR (HL)
  275.         xor c
  276.         LD (HL),A ;black
  277.         LD A,(LMask_)
  278.         RLCA
  279.         LD (LMask_),A
  280.        jr c,pvMASKq
  281.         ld a,c
  282.         and hy;0x36
  283.         XOR (HL)
  284.         LD (HL),A ;white
  285. pvMASKq
  286.        ld de,40
  287.        add hl,de
  288.        ret
  289.       else
  290.         LD A,C
  291.         OR (HL)
  292.         LD (HL),A
  293.         LD A,(LMask_)
  294.         RLCA
  295.         LD (LMask_),A
  296.         AND C
  297.         XOR (HL)
  298.         LD (HL),A
  299.         INC H
  300.         LD A,H
  301.         AND 7
  302.         RET NZ
  303.         LD A,L
  304.         ADD A,32
  305.         LD L,A
  306.         RET C
  307.         LD A,H
  308.         SUB 8
  309.         LD H,A
  310.         RET
  311.       endif ;~EGA
  312.  
  313. vLINE   ;верт.линияDE->H
  314.         LD A,(LMask)
  315.         LD (LMask_),A
  316.         if EGA ;для выделения домиков
  317.         ld a,e
  318.         cp lx;192
  319.         ret nc
  320.         ld a,d
  321.         cp 192
  322.         jr c,vlinenocliptop
  323.         ld d,0
  324. vlinenocliptop
  325.         ld a,h
  326.         cp -16
  327.         ret nc
  328.         cp lx;192;191
  329.         jr c,vlinenoclipbottom
  330.         ld h,192;191
  331. vlinenoclipbottom
  332.         endif
  333.         LD A,D
  334.         CP H
  335.         RET Z
  336.         PUSH HL
  337.         PUSH DE
  338.         JR C,vG1
  339.         LD D,H
  340.         LD H,A
  341. vG1     PUSH DE
  342.         LD A,H
  343.         SUB D
  344.         LD B,A
  345.         POP DE
  346.         PUSH DE
  347.         CALL PCOORD
  348.         POP DE
  349.       if EGA
  350.        ld c,0x47 ;L
  351.        bit 0,e
  352.        jr z,$+4
  353.        ld c,0xb8 ;R
  354.       else
  355.         LD A,E
  356.         AND 7
  357.         LD DE,MLtabV
  358.         ADD A,E
  359.         LD E,A
  360.         LD A,(DE)
  361.         LD C,A ;один бит
  362.       endif
  363. vG2     CALL pvMASK
  364.         DJNZ vG2
  365.         POP DE
  366.         POP HL
  367.         RET
  368.