?login_element?

Subversion Repositories NedoOS

Rev

Rev 286 | Blame | Compare with Previous | Last modification | View Log | Download

  1. ;XECUTE MOUSE
  2. ;TAKE COORDINATES FROM CURPOS==MX
  3.  
  4. MOUSE   LD      HL,(COORD)
  5.         LD      BC,#FBDF
  6.         LD      DE,(OLDCO)
  7.         IN      A,(C)
  8.         LD      (OLDCO),A
  9.         SUB     E
  10.         JR      Z,NM_X
  11.         JP      P,MX_PL
  12.         ADD     A,L
  13.         JR      C,ZER_X
  14.         XOR     A
  15. ZER_X   LD      L,A
  16.         JR      NM_X
  17. MX_PL   ADD     A,L
  18.         JR      C,BEX_Z
  19.         CP      248     ;MAXIMUM X
  20.         JR      C,BEX_B
  21. BEX_Z   LD      A,248   ;MAXIMUM X
  22. BEX_B   LD      L,A
  23. NM_X    LD      B,#FF
  24.         IN      A,(C)
  25.         LD      (OLDCO+1),A
  26.         SUB     D
  27.         JR      Z,NM_Y
  28.         NEG
  29.         JP      P,MY_PL
  30.         ADD     A,H
  31.         JR      C,ZER_Y
  32.         XOR     A
  33. ZER_Y   LD      H,A
  34.         JR      NM_Y
  35. MY_PL   ADD     A,H
  36.         JR      C,BEY_Z
  37.         CP      #BE     ;MAXIMUM Y
  38.         JR      C,BEY_B
  39. BEY_Z   LD      A,#BE   ;MAXIMUM Y
  40. BEY_B   LD      H,A
  41. NM_Y    LD      A,H
  42.         CP      #FF
  43.         JR      C,BIGY
  44.         LD      H,#FF
  45. BIGY    CP      #00     ;MINIMUM Y
  46.         JR      NC,SMALY
  47.         LD      H,#00   ;MINIMUM Y
  48. SMALY   LD      A,L
  49.         CP      #FF
  50.         JR      C,DIRY
  51.         LD      L,#FF
  52. DIRY    CP      #00     ;MINIMUM X
  53.         JR      NC,DIMENS
  54.         LD      L,#00   ;MINIMUM X
  55. DIMENS  LD      (COORD),HL
  56.         LD BC,#FADF
  57.         LD HL,CONTRB
  58.         IN A,(C)
  59.         CPL
  60.         AND 7
  61.         RLCA
  62.         RLCA
  63.         RLCA
  64.         RLCA
  65.         OR (HL)
  66.         LD (HL),A
  67.         RET
  68.  
  69. ;========================Мeнeджер памяти========
  70.         if 1==1
  71. MEM_kungs
  72. MEM_snd LD A,3 ;страница с эффектами
  73.         JR MEM
  74.         endif
  75. MEM_humans
  76. MEM4    LD A,4
  77.         JR MEM
  78. MEM_char1 ;креат 25-26
  79. MEM0    XOR A
  80.         JR MEM
  81. MEM1    LD A,1
  82.         JR MEM
  83. MEM_char0 ;креат 18-24
  84. MEM6    LD A,6
  85.         JR MEM
  86. MEM7    LD      A,7
  87. MEM    
  88.         if 1==1
  89.         ;OR     %11000
  90.          jp _128
  91.         else
  92.         OR      %11000
  93. _128    LD      BC,#7FFD
  94.         LD      (R128),A
  95.         OUT     (C),A
  96.         RET
  97.         endif
  98.  
  99. ;--------scr сlr/mov
  100. OFFD    LD      DE,DSCR+#1AFE
  101.         JR      offx
  102.  
  103. ;TODO убрать в EGA
  104. OFFS    CALL    MEM7
  105.         LD      DE,SCR+#1AFE
  106. offx    PUSH DE
  107.         POP HL
  108.         INC HL
  109.         LD      BC,768
  110.         LD      (HL),0
  111.         LDDR
  112.         LD      BC,6143
  113.         LD      (HL),255
  114.         LDDR
  115.         RET
  116.  
  117. COPY     ;копир.экр
  118.         if EGA
  119.         ret
  120.         else
  121.         LD      BC,6144
  122. CY_     LD      HL,DSCR
  123.         LD      DE,SCR
  124.         LDIR
  125.         RET
  126.  
  127. COPYAT  LD      BC,6912
  128.         JR CY_
  129.         endif
  130.  
  131. ;поиск по таблицам
  132.  
  133. WT      RLCA
  134.         ADD     A,L
  135.         LD      L,A
  136.         JR      NC,WT_
  137.         INC     H
  138. WT_     LD      A,(HL)
  139.         INC     HL
  140.         LD      H,(HL)
  141.         LD      L,A
  142.         RET
  143.  
  144.  
  145. BT      PUSH    HL
  146.         ADD     A,L
  147.         LD      L,A
  148.         JR      NC,BT_
  149.         INC     H
  150. BT_     LD      A,(HL)
  151.         POP     HL
  152.         RET
  153.  
  154.  
  155. DA      ADD A,A
  156. WA      ADD A,A
  157. BA      ADD A,L
  158.         LD L,A
  159.         LD A,(HL)
  160.         RET NC
  161.         INC H
  162.         LD A,(HL)
  163.         RET
  164.  
  165. ;-----W_GrLib-------------------------------
  166. ;PUTsHL DEFW 0
  167. ;SCRADR DEFB SCR/256
  168. ;ATRADR DEFB #D8
  169. ;FONT   DEFW WFONT
  170.  
  171. PCOORD
  172. ;de(0-191,0-255) -- hl
  173.         if EGA
  174.         ;jr $
  175.         ld a,e ;x
  176.         srl a
  177.         push bc
  178.         ld c,d ;y
  179.         ld b,0
  180.         ld l,c ;y
  181.         srl a ;x bit 0
  182.         ;ld h,0x40/32/2
  183.         ;jr nc,$+4 ;x bit 0
  184.         ; ld h,0x80/32/2
  185.          ld h,b;0
  186.          rl h
  187.          inc h ;0x40/32/2 или 0x80/32/2
  188.         srl a ;x bit 1
  189.          rl h
  190.         add hl,hl
  191.         add hl,hl
  192.         add hl,bc
  193.         add hl,hl
  194.         add hl,hl
  195.         add hl,hl ;y*40+scrbase
  196.          add a,scrbase&0xff
  197. ;a=x/4
  198.         add a,l
  199.         ld l,a
  200.         adc a,h
  201.         sub l
  202.         ld h,a ;hl=scr ;не может быть переполнения при отрицательных x? maxhl = 199*40 + 127 = 8087
  203.         pop bc
  204.         ret
  205.        
  206.         else
  207.         LD      A,D
  208.         RRCA
  209.         RRCA
  210.         RRCA
  211.         LD      L,A
  212.         AND     %00011000
  213.         LD      H,A
  214.         LD      A,D
  215.         AND     %00000111
  216.         ADD     A,H
  217.         LD      H,A
  218.         LD      A,(SCRADR)
  219.         ADD     A,H
  220.         LD      H,A
  221.         LD      A,L
  222.         LD      L,E
  223.         RRA
  224.         RR      L
  225.         RRA
  226.         RR      L
  227.         RRA
  228.         RR      L
  229.         RET
  230.         endif ;~EGA
  231.  
  232.  
  233. SCOORD  LD      A,(SCRADR) ;de(0-23,0-31)--hl
  234.         ADD     A,D
  235.         AND     %11111000
  236.         LD      H,A
  237.         LD      A,D
  238.         RRCA
  239.         RRCA
  240.         RRCA
  241.         AND     %11100000
  242.         OR      E
  243.         LD      L,A
  244.         RET
  245.  
  246. STD     LD      A,DSCR/256 ;выбор тенев.экрана
  247.         JR      SELSCR
  248. STS     LD      A,SCR/256 ;выб.осн.экр
  249. SELSCR  LD      (SCRADR),A ;A-screen address
  250.         ADD     A,#18
  251.         LD      (ATRADR),A; A-attr address
  252.         RET
  253.  
  254. ACOORD  LD A,L ;коорд атр HL->HL
  255.         RLA
  256.         RLA
  257.         RLA
  258.         SRL H
  259.         RRA
  260.         SRL H
  261.         RRA
  262.         SRL H
  263.         RRA
  264.         LD L,A
  265.         LD A,(ATRADR)
  266.         ADD A,H
  267.         LD H,A
  268.         RET
  269.  
  270. ATRBAR  ;HL - adr in scr; BC-size(yx) ;E-COLOR
  271.         if EGA
  272. ;TODO
  273.         ret
  274.         else
  275.         CALL ACOORD
  276. ATRBA0  LD D,L
  277.         LD A,C
  278. ATRBA1  LD (HL),E
  279.         INC L
  280.         DEC A
  281.         JR NZ,ATRBA1
  282.         LD A,D
  283.         ADD A,32
  284.         LD L,A
  285.         JR NC,ATRBA2
  286.         INC H
  287. ATRBA2  DJNZ ATRBA0
  288.         RET
  289.         endif
  290.  
  291.         if EGA==0
  292. PUTSYM
  293. ;HL - adr in scr; DE-adr spr; BC-size(yx)
  294.         PUSH DE
  295.         EX DE,HL
  296.         CALL SCOORD
  297.         LD (PUTsHL),HL
  298.         POP HL
  299.         LD E,(HL)
  300.         INC HL
  301.         LD D,(HL)
  302.         INC HL
  303.         LD (SET_SP+1),SP
  304.         LD SP,HL
  305.         LD HL,(PUTsHL)
  306.         LD A,B
  307. YS2     LD (PUTsHL),HL
  308.         EX AF,AF
  309. YS0     LD (HL),E
  310.         INC H
  311.         LD (HL),D
  312.         INC H
  313.         POP DE
  314.         LD (HL),E
  315.         INC H
  316.         LD (HL),D
  317.         INC H
  318.         POP DE
  319.         LD (HL),E
  320.         INC H
  321.         LD (HL),D
  322.         INC H
  323.         POP DE
  324.         LD (HL),E
  325.         INC H
  326.         LD (HL),D
  327.         INC H
  328.         POP DE
  329.         LD A,L
  330.         ADD A,32
  331.         LD L,A
  332.         JR C,YS1
  333.         LD A,H
  334.         SUB 8
  335.         LD H,A
  336. YS1     DJNZ YS0
  337.         LD HL,(PUTsHL)
  338.         INC L
  339.         EX AF,AF
  340.         LD B,A
  341.         DEC C
  342.         JR NZ,YS2
  343. YSR     JP SET_SP
  344.         endif
  345.  
  346. ;-------------------------------КОНЕЦ W_Gr.Lib
  347.  
  348. PRINTS  ;печать строки HL(конец 127)
  349.         LD A,(HL)
  350.         CP #7F
  351.         RET Z
  352.         CALL PRINT
  353.         INC HL
  354.         JR PRINTS
  355.  
  356. PRINT   ;печать символа А в поз DE(yx)
  357.         PUSHs
  358.         if EGA
  359.         call prchar
  360.         else
  361.         LD C,A
  362.         CALL SCOORD
  363.         EX DE,HL
  364.         LD A,C
  365.         ADD A,A
  366.         LD BC,(FONT)
  367.         LD L,A
  368.         LD H,0
  369.         ADD HL,HL
  370.         ADD HL,HL
  371.         ADD HL,BC
  372.         LD A,(HL)
  373.         LD (DE),A
  374.         INC HL
  375.         INC D
  376.         LD A,(HL)
  377.         LD (DE),A
  378.         INC HL
  379.         INC D
  380.         LD A,(HL)
  381.         LD (DE),A
  382.         INC HL
  383.         INC D
  384.         LD A,(HL)
  385.         LD (DE),A
  386.         INC HL
  387.         INC D
  388.         LD A,(HL)
  389.         LD (DE),A
  390.         INC HL
  391.         INC D
  392.         LD A,(HL)
  393.         LD (DE),A
  394.         INC HL
  395.         INC D
  396.         LD A,(HL)
  397.         LD (DE),A
  398.         INC HL
  399.         INC D
  400.         LD A,(HL)
  401.         LD (DE),A
  402.         INC HL
  403.         INC D
  404.         endif
  405.         POPs
  406.         INC E
  407.         RET
  408.  
  409.         if 1==0
  410. t5inc   LD HL,tst5B ;[**]
  411.         LD B,tst5E-tst5B
  412. t5inc0  INC (HL)
  413.         INC HL
  414.         DJNZ t5inc0
  415.         RET
  416.         endif
  417.  
  418. ;--------РАБОТА С КУРСОРОМ---
  419.  
  420. MMOV    ;обр.управл
  421.         CALL CONTR
  422.         LD BC,#BFFE ;'Enter' || 'x'
  423.         IN A,(C)
  424.         RRA
  425.         JR NC,eMOV
  426.         LD B,#FE
  427.         IN A,(C)
  428.         BIT 2,A
  429.         JR Z,eMOV
  430.         XOR A
  431.         LD (BENTER),A
  432. _422    LD A,(CONTRB)
  433.         LD D,A
  434.         AND #20 ;'Caps' || R.butt?
  435.         LD E,A
  436.         LD BC,#FEFE
  437.         IN A,(C)
  438.         AND 1
  439.         OR E
  440.         LD (BCAP),A
  441.         LD      C,D
  442.         LD      DE,(ENDX)  ;move
  443.         LD      B,D
  444.         LD      HL,(MX)
  445.         LD      (MXOLD),HL
  446.         RR      C
  447.         JR      NC,_1
  448.         LD      A,L
  449.         ADD     A,B
  450.         JR      C,_11A
  451.         CP      E
  452.         JR      C,_11B
  453. _11A    LD      A,E
  454. _11B    LD      L,A
  455.         LD      D,0
  456. _1      RR      C
  457.         JR      NC,_2
  458.         LD      A,L
  459.         SUB     B
  460.         JR      NC,_21
  461.         XOR     A
  462. _21     LD      L,A
  463.         LD      D,0
  464. _2      RR      C
  465.         JR      NC,_3
  466.         LD      A,H
  467.         ADD     A,B
  468.         CP      189
  469.         JR      C,_31
  470.         LD      A,189
  471. _31     LD      H,A
  472.         LD      D,0
  473. _3      RR      C
  474.         JR      NC,_4
  475.         LD      A,H
  476.         SUB     B
  477.         JR      NC,_41
  478.         XOR     A
  479. _41     LD      H,A
  480.         LD      D,0
  481. _4      LD      (MX),HL
  482.         LD      A,D
  483.         OR      A
  484.         LD      A,step_B ;нач шаг
  485.         JR      NZ,_42
  486.         LD      A,(MtSTEP)
  487.         LD      DE,(M_STEP)
  488.         ADD     A,1
  489.         CP      E
  490.         JR      C,_42
  491.         LD      A,E
  492. _42     LD      (MtSTEP),A
  493.         RET
  494. eMOV    LD A,1
  495.         LD (BENTER),A
  496.         LD A,(isMAP)
  497.         OR A
  498.         LD A,0
  499.         JR Z,_42
  500.         CALL MEM7
  501.         CALL MAPwin
  502.         CALL MX3PX
  503.         CALL movWIN
  504.         CALL MAPwin
  505.         JP _422
  506.  
  507. B_OFF   LD HL,B_ONOF
  508.         LD A,(HL)
  509.         OR A
  510.         RET Z
  511.         LD (HL),0
  512.         LD HL,(BATR)
  513.         LD DE,B_ABUF
  514.         LD A,(DE)
  515.         INC DE
  516.         LD (HL),A
  517.         LD HL,(BADR)
  518.         LD B,8
  519. B_o1    LD A,(DE)
  520.         LD (HL),A
  521.         INC DE
  522.         INC H
  523.         DJNZ B_o1
  524.         RET
  525.  
  526. B_IMGM  DEFB #55,#81,#19,#BD,#3D,#99,#01,#FF
  527.  
  528. ;курсор скролла? TODO!!!
  529. BL_ONN  EXX
  530.         LD A,(BY)
  531.         CP B
  532.         JR NZ,_BL
  533.         PUSH BC
  534.         LD HL,(BX) ;модиф B_ONN
  535.         LD (BXOLD),HL
  536.         PUSH HL
  537.         CALL STS
  538.         CALL ACOORD
  539.         LD (UATR),HL
  540.         LD A,(HL)
  541.         LD (U_ABUF),A
  542.         LD A,(COLRsc)
  543.         LD (HL),A
  544.         POP DE
  545.         CALL SCOORD
  546.         LD (UADR),HL
  547.         LD DE,U_BUF
  548.         LD BC,B_IMGM
  549.         LD A,8
  550. B_n4    PUSH AF
  551.         LD A,(HL)
  552.         LD (DE),A
  553.         LD A,(BC)
  554.         LD (HL),A
  555.         INC H
  556.         INC BC
  557.         INC DE
  558.         POP AF
  559.         DEC A
  560.         JR NZ,B_n4
  561.         POP BC
  562. _BL     EXX
  563.         RET
  564.  
  565. B_U2B   LD HL,BY
  566.         LD DE,UBY
  567.         LD BC,14
  568.         LDIR
  569.         LD A,1
  570.         LD (B_ONOF),A
  571.         RET
  572.  
  573. B_SET0  EXX
  574.         LD B,-1
  575.         EXX
  576.         RET
  577.  
  578. B_SETI  EXX
  579.         LD B,26
  580.         EXX
  581.         CALL B_NXTI
  582. B_NXTI  EXX
  583.         DEC B
  584.         LD A,(UBY)
  585.         SUB -2
  586.         JR b_n_
  587.  
  588. B_SETN  EXX
  589.         LD B,-3
  590.         EXX
  591.         CALL B_NXTN
  592. B_NXTN  EXX
  593.         INC B
  594.         LD A,(UBY)
  595.         SUB 2
  596. b_n_    SUB B
  597.         JR NZ,_BL
  598.         PUSH BC
  599.         CALL B_OFF
  600.         POP BC
  601.         EXX
  602.         RET
  603.  
  604. B_NXT0  EXX
  605.         INC B
  606.         LD A,(UBY)
  607.         JR b_n_
  608.  
  609.         if 1==0
  610. t5dec   LD HL,tst5B ;[**]
  611.         LD B,tst5E-tst5B
  612. t5dec0  DEC (HL)
  613.         INC HL
  614.         DJNZ t5dec0
  615.         RET
  616.         endif
  617.  
  618. BMOV    LD HL,(MX) ;преобр MX->BX->PX
  619.            INC L
  620.            INC L ;коррекц
  621.         SRL L
  622.         SRL L
  623.         SRL L
  624.         SRL H
  625.         SRL H
  626.         SRL H
  627.         LD (BX),HL
  628.         LD A,(isMAP)
  629.         OR A
  630.         JR NZ,mB1
  631.         SRL L
  632.         SRL H
  633.         LD DE,(X0)
  634.         ADD HL,DE
  635.         LD (PX),HL
  636.         RET
  637. mB1     CALL MX3PX
  638.         LD (PX),BC
  639.         RET
  640.  
  641.         if 1==0
  642. tst5B   DEFB 1+#AF      ;0:0076 TST#5   XOR A [**]
  643.         DEFB 1+#21,1+#00,1+#C0  ;0:0077     LD HL,#C000
  644.         DEFB 1+#01,1+#00,1+#34  ;0:0078     LD BC,#3400
  645.         DEFB 1+#96      ;0:0079 tst50   SUB (HL)
  646.         DEFB 1+#07      ;0:0080         RLCA
  647.         DEFB 1+#23      ;0:0081         INC HL
  648.         DEFB 1+#0D      ;0:0082         DEC C
  649.         DEFB 1+#20,1+#FA        ;0:0083           JR NZ,tst50
  650.         DEFB 1+#05      ;0:0084         DEC B
  651.         DEFB 1+#20,1+#F7        ;0:0085           JR NZ,tst50
  652.         DEFB 1+#21,1+#AF,1+#F4  ;0:0086     LD HL,#F4AF
  653.         DEFB 1+#BE      ;0:0087         CP (HL)
  654. tst5E   RET
  655.         endif
  656.  
  657. MX3PX   LD HL,(MX) ;MX/3->PX
  658.            INC L
  659.            INC L
  660.         LD E,L
  661.         LD L,3
  662.         CALL DIVB
  663.         LD A,E
  664.         CP 64
  665.         JR C,mB2
  666.         LD A,63
  667. mB2     LD C,A
  668.         LD E,H
  669.         CALL DIVB
  670.         LD B,E
  671.         RET
  672.  
  673.         if 1==0
  674.         PUSH HL
  675. _TST#5  LD A,(isTST5) ;[**]
  676.         OR A
  677.         RET Z
  678.         CALL t5dec
  679.         CALL tst5B
  680.         PUSH AF
  681.         CALL t5inc
  682.         XOR A
  683.         LD (isTST5),A
  684.         POP AF
  685.         RET Z
  686.         POP HL
  687.         CALL OFFD
  688.         endif
  689.