Subversion Repositories NedoOS

Rev

Rev 278 | Go to most recent revision | 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  LD      A,D ;de(0-191,0-255) -- hl
  172.         RRCA
  173.         RRCA
  174.         RRCA
  175.         LD      L,A
  176.         AND     %00011000
  177.         LD      H,A
  178.         LD      A,D
  179.         AND     %00000111
  180.         ADD     A,H
  181.         LD      H,A
  182.         LD      A,(SCRADR)
  183.         ADD     A,H
  184.         LD      H,A
  185.         LD      A,L
  186.         LD      L,E
  187.         RRA
  188.         RR      L
  189.         RRA
  190.         RR      L
  191.         RRA
  192.         RR      L
  193.         RET
  194.  
  195.  
  196. SCOORD  LD      A,(SCRADR) ;de(0-23,0-31)--hl
  197.         ADD     A,D
  198.         AND     %11111000
  199.         LD      H,A
  200.         LD      A,D
  201.         RRCA
  202.         RRCA
  203.         RRCA
  204.         AND     %11100000
  205.         OR      E
  206.         LD      L,A
  207.         RET
  208.  
  209. STD     LD      A,DSCR/256 ;выбор тенев.экрана
  210.         JR      SELSCR
  211. STS     LD      A,SCR/256 ;выб.осн.экр
  212. SELSCR  LD      (SCRADR),A ;A-screen address
  213.         ADD     A,#18
  214.         LD      (ATRADR),A; A-attr address
  215.         RET
  216.  
  217. ACOORD  LD A,L ;коорд атр HL->HL
  218.         RLA
  219.         RLA
  220.         RLA
  221.         SRL H
  222.         RRA
  223.         SRL H
  224.         RRA
  225.         SRL H
  226.         RRA
  227.         LD L,A
  228.         LD A,(ATRADR)
  229.         ADD A,H
  230.         LD H,A
  231.         RET
  232.  
  233. ATRBAR  ;HL - adr in scr; BC-size(yx) ;E-COLOR
  234.         if EGA
  235. ;TODO
  236.         ret
  237.         else
  238.         CALL ACOORD
  239. ATRBA0  LD D,L
  240.         LD A,C
  241. ATRBA1  LD (HL),E
  242.         INC L
  243.         DEC A
  244.         JR NZ,ATRBA1
  245.         LD A,D
  246.         ADD A,32
  247.         LD L,A
  248.         JR NC,ATRBA2
  249.         INC H
  250. ATRBA2  DJNZ ATRBA0
  251.         RET
  252.         endif
  253.  
  254.         if EGA==0
  255. PUTSYM
  256. ;HL - adr in scr; DE-adr spr; BC-size(yx)
  257.         PUSH DE
  258.         EX DE,HL
  259.         CALL SCOORD
  260.         LD (PUTsHL),HL
  261.         POP HL
  262.         LD E,(HL)
  263.         INC HL
  264.         LD D,(HL)
  265.         INC HL
  266.         LD (SET_SP+1),SP
  267.         LD SP,HL
  268.         LD HL,(PUTsHL)
  269.         LD A,B
  270. YS2     LD (PUTsHL),HL
  271.         EX AF,AF
  272. YS0     LD (HL),E
  273.         INC H
  274.         LD (HL),D
  275.         INC H
  276.         POP DE
  277.         LD (HL),E
  278.         INC H
  279.         LD (HL),D
  280.         INC H
  281.         POP DE
  282.         LD (HL),E
  283.         INC H
  284.         LD (HL),D
  285.         INC H
  286.         POP DE
  287.         LD (HL),E
  288.         INC H
  289.         LD (HL),D
  290.         INC H
  291.         POP DE
  292.         LD A,L
  293.         ADD A,32
  294.         LD L,A
  295.         JR C,YS1
  296.         LD A,H
  297.         SUB 8
  298.         LD H,A
  299. YS1     DJNZ YS0
  300.         LD HL,(PUTsHL)
  301.         INC L
  302.         EX AF,AF
  303.         LD B,A
  304.         DEC C
  305.         JR NZ,YS2
  306. YSR     JP SET_SP
  307.         endif
  308.  
  309. ;-------------------------------КОНЕЦ W_Gr.Lib
  310.  
  311. PRINTS  ;печать строки HL(конец 127)
  312.         LD A,(HL)
  313.         CP #7F
  314.         RET Z
  315.         CALL PRINT
  316.         INC HL
  317.         JR PRINTS
  318.  
  319. PRINT   ;печать символа А в поз DE(yx)
  320.         PUSHs
  321.         if EGA
  322.         call prchar
  323.         else
  324.         LD C,A
  325.         CALL SCOORD
  326.         EX DE,HL
  327.         LD A,C
  328.         ADD A,A
  329.         LD BC,(FONT)
  330.         LD L,A
  331.         LD H,0
  332.         ADD HL,HL
  333.         ADD HL,HL
  334.         ADD HL,BC
  335.         LD A,(HL)
  336.         LD (DE),A
  337.         INC HL
  338.         INC D
  339.         LD A,(HL)
  340.         LD (DE),A
  341.         INC HL
  342.         INC D
  343.         LD A,(HL)
  344.         LD (DE),A
  345.         INC HL
  346.         INC D
  347.         LD A,(HL)
  348.         LD (DE),A
  349.         INC HL
  350.         INC D
  351.         LD A,(HL)
  352.         LD (DE),A
  353.         INC HL
  354.         INC D
  355.         LD A,(HL)
  356.         LD (DE),A
  357.         INC HL
  358.         INC D
  359.         LD A,(HL)
  360.         LD (DE),A
  361.         INC HL
  362.         INC D
  363.         LD A,(HL)
  364.         LD (DE),A
  365.         INC HL
  366.         INC D
  367.         endif
  368.         POPs
  369.         INC E
  370.         RET
  371.  
  372.         if 1==0
  373. t5inc   LD HL,tst5B ;[**]
  374.         LD B,tst5E-tst5B
  375. t5inc0  INC (HL)
  376.         INC HL
  377.         DJNZ t5inc0
  378.         RET
  379.         endif
  380.  
  381. ;--------РАБОТА С КУРСОРОМ---
  382.  
  383. MMOV    ;обр.управл
  384.         CALL CONTR
  385.         LD BC,#BFFE ;'Enter' || 'x'
  386.         IN A,(C)
  387.         RRA
  388.         JR NC,eMOV
  389.         LD B,#FE
  390.         IN A,(C)
  391.         BIT 2,A
  392.         JR Z,eMOV
  393.         XOR A
  394.         LD (BENTER),A
  395. _422    LD A,(CONTRB)
  396.         LD D,A
  397.         AND #20 ;'Caps' || R.butt?
  398.         LD E,A
  399.         LD BC,#FEFE
  400.         IN A,(C)
  401.         AND 1
  402.         OR E
  403.         LD (BCAP),A
  404.         LD      C,D
  405.         LD      DE,(ENDX)  ;move
  406.         LD      B,D
  407.         LD      HL,(MX)
  408.         LD      (MXOLD),HL
  409.         RR      C
  410.         JR      NC,_1
  411.         LD      A,L
  412.         ADD     A,B
  413.         JR      C,_11A
  414.         CP      E
  415.         JR      C,_11B
  416. _11A    LD      A,E
  417. _11B    LD      L,A
  418.         LD      D,0
  419. _1      RR      C
  420.         JR      NC,_2
  421.         LD      A,L
  422.         SUB     B
  423.         JR      NC,_21
  424.         XOR     A
  425. _21     LD      L,A
  426.         LD      D,0
  427. _2      RR      C
  428.         JR      NC,_3
  429.         LD      A,H
  430.         ADD     A,B
  431.         CP      189
  432.         JR      C,_31
  433.         LD      A,189
  434. _31     LD      H,A
  435.         LD      D,0
  436. _3      RR      C
  437.         JR      NC,_4
  438.         LD      A,H
  439.         SUB     B
  440.         JR      NC,_41
  441.         XOR     A
  442. _41     LD      H,A
  443.         LD      D,0
  444. _4      LD      (MX),HL
  445.         LD      A,D
  446.         OR      A
  447.         LD      A,step_B ;нач шаг
  448.         JR      NZ,_42
  449.         LD      A,(MtSTEP)
  450.         LD      DE,(M_STEP)
  451.         ADD     A,1
  452.         CP      E
  453.         JR      C,_42
  454.         LD      A,E
  455. _42     LD      (MtSTEP),A
  456.         RET
  457. eMOV    LD A,1
  458.         LD (BENTER),A
  459.         LD A,(isMAP)
  460.         OR A
  461.         LD A,0
  462.         JR Z,_42
  463.         CALL MEM7
  464.         CALL MAPwin
  465.         CALL MX3PX
  466.         CALL movWIN
  467.         CALL MAPwin
  468.         JP _422
  469.  
  470. B_OFF   LD HL,B_ONOF
  471.         LD A,(HL)
  472.         OR A
  473.         RET Z
  474.         LD (HL),0
  475.         LD HL,(BATR)
  476.         LD DE,B_ABUF
  477.         LD A,(DE)
  478.         INC DE
  479.         LD (HL),A
  480.         LD HL,(BADR)
  481.         LD B,8
  482. B_o1    LD A,(DE)
  483.         LD (HL),A
  484.         INC DE
  485.         INC H
  486.         DJNZ B_o1
  487.         RET
  488.  
  489. B_IMGM  DEFB #55,#81,#19,#BD,#3D,#99,#01,#FF
  490.  
  491. ;курсор скролла? TODO!!!
  492. BL_ONN  EXX
  493.         LD A,(BY)
  494.         CP B
  495.         JR NZ,_BL
  496.         PUSH BC
  497.         LD HL,(BX) ;модиф B_ONN
  498.         LD (BXOLD),HL
  499.         PUSH HL
  500.         CALL STS
  501.         CALL ACOORD
  502.         LD (UATR),HL
  503.         LD A,(HL)
  504.         LD (U_ABUF),A
  505.         LD A,(COLRsc)
  506.         LD (HL),A
  507.         POP DE
  508.         CALL SCOORD
  509.         LD (UADR),HL
  510.         LD DE,U_BUF
  511.         LD BC,B_IMGM
  512.         LD A,8
  513. B_n4    PUSH AF
  514.         LD A,(HL)
  515.         LD (DE),A
  516.         LD A,(BC)
  517.         LD (HL),A
  518.         INC H
  519.         INC BC
  520.         INC DE
  521.         POP AF
  522.         DEC A
  523.         JR NZ,B_n4
  524.         POP BC
  525. _BL     EXX
  526.         RET
  527.  
  528. B_U2B   LD HL,BY
  529.         LD DE,UBY
  530.         LD BC,14
  531.         LDIR
  532.         LD A,1
  533.         LD (B_ONOF),A
  534.         RET
  535.  
  536. B_SET0  EXX
  537.         LD B,-1
  538.         EXX
  539.         RET
  540.  
  541. B_SETI  EXX
  542.         LD B,26
  543.         EXX
  544.         CALL B_NXTI
  545. B_NXTI  EXX
  546.         DEC B
  547.         LD A,(UBY)
  548.         SUB -2
  549.         JR b_n_
  550.  
  551. B_SETN  EXX
  552.         LD B,-3
  553.         EXX
  554.         CALL B_NXTN
  555. B_NXTN  EXX
  556.         INC B
  557.         LD A,(UBY)
  558.         SUB 2
  559. b_n_    SUB B
  560.         JR NZ,_BL
  561.         PUSH BC
  562.         CALL B_OFF
  563.         POP BC
  564.         EXX
  565.         RET
  566.  
  567. B_NXT0  EXX
  568.         INC B
  569.         LD A,(UBY)
  570.         JR b_n_
  571.  
  572.         if 1==0
  573. t5dec   LD HL,tst5B ;[**]
  574.         LD B,tst5E-tst5B
  575. t5dec0  DEC (HL)
  576.         INC HL
  577.         DJNZ t5dec0
  578.         RET
  579.         endif
  580.  
  581. BMOV    LD HL,(MX) ;преобр MX->BX->PX
  582.            INC L
  583.            INC L ;коррекц
  584.         SRL L
  585.         SRL L
  586.         SRL L
  587.         SRL H
  588.         SRL H
  589.         SRL H
  590.         LD (BX),HL
  591.         LD A,(isMAP)
  592.         OR A
  593.         JR NZ,mB1
  594.         SRL L
  595.         SRL H
  596.         LD DE,(X0)
  597.         ADD HL,DE
  598.         LD (PX),HL
  599.         RET
  600. mB1     CALL MX3PX
  601.         LD (PX),BC
  602.         RET
  603.  
  604.         if 1==0
  605. tst5B   DEFB 1+#AF      ;0:0076 TST#5   XOR A [**]
  606.         DEFB 1+#21,1+#00,1+#C0  ;0:0077     LD HL,#C000
  607.         DEFB 1+#01,1+#00,1+#34  ;0:0078     LD BC,#3400
  608.         DEFB 1+#96      ;0:0079 tst50   SUB (HL)
  609.         DEFB 1+#07      ;0:0080         RLCA
  610.         DEFB 1+#23      ;0:0081         INC HL
  611.         DEFB 1+#0D      ;0:0082         DEC C
  612.         DEFB 1+#20,1+#FA        ;0:0083           JR NZ,tst50
  613.         DEFB 1+#05      ;0:0084         DEC B
  614.         DEFB 1+#20,1+#F7        ;0:0085           JR NZ,tst50
  615.         DEFB 1+#21,1+#AF,1+#F4  ;0:0086     LD HL,#F4AF
  616.         DEFB 1+#BE      ;0:0087         CP (HL)
  617. tst5E   RET
  618.         endif
  619.  
  620. MX3PX   LD HL,(MX) ;MX/3->PX
  621.            INC L
  622.            INC L
  623.         LD E,L
  624.         LD L,3
  625.         CALL DIVB
  626.         LD A,E
  627.         CP 64
  628.         JR C,mB2
  629.         LD A,63
  630. mB2     LD C,A
  631.         LD E,H
  632.         CALL DIVB
  633.         LD B,E
  634.         RET
  635.  
  636.         if 1==0
  637.         PUSH HL
  638. _TST#5  LD A,(isTST5) ;[**]
  639.         OR A
  640.         RET Z
  641.         CALL t5dec
  642.         CALL tst5B
  643.         PUSH AF
  644.         CALL t5inc
  645.         XOR A
  646.         LD (isTST5),A
  647.         POP AF
  648.         RET Z
  649.         POP HL
  650.         CALL OFFD
  651.         endif
  652.