?login_element?

Subversion Repositories NedoOS

Rev

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

  1. ;Kурсор на прерываниях  ******
  2.  
  3. BLITER  ;обновл экр с уч прерыв
  4.         ;jr $
  5.        if EGA==0
  6.         CALL MEM7
  7.         XOR A
  8.         LD (P_FLAG),A
  9.         DEC A
  10.         LD (V_LINE),A
  11.        endif
  12.        if EGA
  13.         call changescrpg
  14.        else
  15.        endif
  16.        if EGA==0
  17.         LD A,2
  18.         LD (V_FLAG),A
  19.         CALL V_GET2
  20.         CALL V_MRK2
  21.         LD A,1
  22.         LD (V_FLAG),A
  23.        endif
  24.        if EGA==0
  25.         CALL DS2SC
  26.        endif
  27.        if EGA==0
  28.         CALL V_copy ;м.быть уч P_FLAG=1 :)
  29.         XOR A
  30.         LD (V_FLAG),A
  31.        endif
  32.         RET
  33.  
  34.         if EGA==0
  35. DS2SC   ;регенер экр
  36.         LD HL,DSCR
  37.         LD DE,SCR
  38.         LD B,192
  39. DSS0    LD A,H
  40.         CPL
  41.         AND %11000
  42.         RET Z
  43.         PUSH BC
  44.         PUSH DE
  45.         PUSH HL
  46.         LDI;
  47.         LDI
  48.         LDI
  49.         LDI
  50.         LDI
  51.         LDI
  52.         LDI
  53.         LDI
  54.         LDI;
  55.         LDI
  56.         LDI
  57.         LDI
  58.         LDI
  59.         LDI
  60.         LDI
  61.         LDI
  62.         LDI;
  63.         LDI
  64.         LDI
  65.         LDI
  66.         LDI
  67.         LDI
  68.         LDI
  69.         LDI
  70.         LD HL,V_LINE
  71.         INC (HL)
  72.         POP HL
  73.         POP DE
  74.         POP BC
  75.         INC H
  76.         INC D
  77.         LD A,H
  78.         AND 7
  79.         JR NZ,DSS1
  80.         LD A,L
  81.         ADD A,32
  82.         LD L,A
  83.         LD E,A
  84.         JR C,DSS1
  85.         LD A,H
  86.         SUB 8
  87.         LD H,A
  88.         LD A,D
  89.         SUB 8
  90.         LD D,A
  91. DSS1    LD A,(P_FLAG)
  92.         OR A
  93.         CALL NZ,V_BLIT
  94.         DJNZ DSS0
  95.         RET
  96.  
  97. Vforce  ;принудительный выв A строк
  98.         EXX
  99.         LD B,8
  100.         CALL DSS0
  101.         EXX
  102.         RET
  103.  
  104. V_BLIT  ;выв курс во время рефреша
  105.         DI
  106.         EXX
  107.         XOR A
  108.         LD (P_FLAG),A
  109.         LD HL,V_LINE
  110.         LD A,(G_MY) ;очистка
  111.         CP (HL)
  112.         JR C,vbt1
  113.         JR NZ,vbt2
  114. vbt1    ADD A,8
  115.         CP (HL)
  116.         JR C,vbt4
  117.         CALL Vforce
  118. vbt4    CALL V_copy
  119. vbt2    CALL V_PUT1
  120.         CALL V_PUT2
  121.         LD HL,(MX)  ;взятие в буф
  122.         LD (G_MX),HL
  123.         LD A,H
  124.         LD HL,V_LINE
  125.         CP (HL)
  126.         JR C,vpt1
  127.         JR NZ,vpt2
  128. vpt1    ADD A,8
  129.         CP (HL)
  130.         JR C,vpt4
  131.         CALL Vforce
  132. vpt4    CALL V_GET1
  133.         CALL V_GET2
  134.         LD A,(GBAD2+1)
  135.         XOR #60
  136.         LD (GBAD1+1),A
  137.         CALL V_copy
  138.         CALL V_MRK1
  139.         JR vptR
  140. vpt2    CALL V_GET1
  141.         CALL V_GET2
  142.         CALL V_MRK1
  143.         CALL V_MRK2
  144. vptR    EXX
  145.         EI
  146.         RET
  147.         endif ;~EGA
  148.  
  149.         if 1==0
  150. ON256   LD      A,%10000
  151.         JR      M2
  152. OFF256  XOR     A
  153. M2      LD      BC,#1FFD ;скорп
  154.         OUT     (C),A
  155.         LD      A,%11000
  156.         LD      B,#7F
  157.         OUT     (C),A ;пент
  158.         RET
  159.         endif
  160.  
  161. INAR0   ;Обр прерываний
  162.         PUSHs
  163.         EXX
  164.         PUSHs
  165.         PUSH AF
  166.         EX AF,AF
  167.         PUSH AF
  168.         PUSH IX
  169.         PUSH IY
  170.         LD A,(R128)
  171.         LD (IR128),A
  172.         if EGA
  173.         ld a,(curpg16k) ;ok
  174.         push af
  175.         ld a,(curpg32klow) ;ok
  176.         push af
  177.         ld a,(pgmain4000)
  178.         SETPG16K
  179.         ld a,(pgmain8000)
  180.         SETPG32KLOW
  181.          ;ld a,(curscrnum)
  182.          ;push af
  183.          ;ld a,(curscrnum_physical)
  184.          ;ld (curscrnum),a
  185.          ld hl,timer
  186.          inc (hl)
  187.         endif
  188.         if 1==0 ;???
  189.         ;анти-теневик
  190. antiTM  LD HL,(G_MX) ;[**]
  191.         LD A,H
  192.         OR #C0
  193.         LD H,A
  194.         CALL ON256
  195.         LD E,(HL) ;д.быть #A4 байт-заполнитель или (HL)
  196.         CALL OFF256
  197.         LD A,E
  198.         CP #A4
  199.         JR Z,INAMM
  200.         CP (HL)
  201.         RET NZ
  202. INAMM  
  203.         endif
  204.         ;музыка
  205.         CALL MEM6
  206.         LD A,(MUSONF)
  207.         OR A
  208.         JR Z,INA0FX
  209.         ;патч к музыке
  210.          XOR A
  211.          LD (#EEC9),A
  212.          LD (#F221),A
  213.         CALL WMUSIC+6  ;6
  214.         JR INA0M
  215. INA0FX  LD BC,#FFFD
  216.         LD A,7
  217.         OUT (C),A
  218.         LD A,B
  219.         LD B,#BF
  220.         OUT (C),A
  221.         LD (#EEC9),A
  222. INA0M   CALL pSOUND ;эффекты
  223.         CALL MMOV
  224.        ;if EGA==0
  225.         LD A,(V_FLAG)
  226.         CP 1
  227.         JR Z,INA01
  228.         JR NC,INA02
  229.        ;endif
  230.         CALL MEM7
  231.         LD HL,(JP_SUB+1)
  232.         PUSH HL
  233.         LD HL,(SET_SP+1)
  234.         PUSH HL
  235.         LD HL,(SCRADR)
  236.         PUSH HL
  237.         CALL V_PUT1 ;восстановление старой стрелочки
  238.         LD HL,(MX)
  239.         LD (G_MX),HL
  240.         CALL V_GET1 ;взятие с экрана из-под новой стрелочки
  241.         CALL V_MRK1 ;рисование стрелочки
  242.         POP HL
  243.         LD (SCRADR),HL
  244.         POP HL
  245.         LD (SET_SP+1),HL
  246.         POP HL
  247.         LD (JP_SUB+1),HL
  248.         JR INA02
  249. INA01   LD (P_FLAG),A
  250. INA02   ;LD A,(IR128)
  251. IR128=$+1
  252.         ld a,0
  253.         CALL MEM
  254.          ;SETPG32KHIGH
  255.         if EGA
  256.         GET_KEY
  257.         cp key_redraw
  258.         jr nz,$+5
  259.         ld (wascurkeyredraw),a ;иначе не пишем
  260.        
  261.          ;pop af
  262.          ;ld (curscrnum),a
  263.         pop af ;ld a,(curpg8000)
  264.         ;ld (curpg8000),a
  265.         SETPG32KLOW
  266.         pop af ;ld a,(curpg4000)
  267.         ;ld (curpg4000),a
  268.         SETPG16K
  269.         endif
  270.         POP IY
  271.         POP IX
  272.         POP AF
  273.         EX AF,AF
  274.         POP AF
  275.         POPs
  276.         EXX
  277.         POPs
  278.         RET
  279.  
  280.  
  281. ;---------------------------------------
  282.  
  283.         if EGA==0
  284. G_IMG1  DEFB %11111100,%11111100 ;обычн курсор
  285.         DEFB %11111110,%10000110
  286.         DEFB %11111110,%10000010
  287.         DEFB %11111110,%10000110
  288.         DEFB %11111111,%10000011
  289.         DEFB %11111111,%11010001
  290.         DEFB %01111111,%01111011
  291.         DEFB %00001110,%00001110
  292.  
  293. G_MAP1  DEFB %11111100,%00000000 ;курсор на карте/при нажатом FIRE
  294.         DEFB %11111110,%01111000
  295.         DEFB %11111110,%01000100
  296.         DEFB %11111110,%01001000
  297.         DEFB %11111111,%01010100
  298.         DEFB %11111111,%00101010
  299.         DEFB %01111111,%00000100
  300.         DEFB %00001110,%00000000
  301.  
  302. G_FIX1  DEFB %11111100,%00000000 ;курсор при зафикс. цели
  303.         DEFB %11111110,%01111000
  304.         DEFB %11111110,%01111100
  305.         DEFB %11111110,%01111000
  306.         DEFB %11111111,%01111100
  307.         DEFB %11111111,%00101110
  308.         DEFB %01111111,%00000100
  309.         DEFB %00001110,%00000000
  310.         endif
  311.  
  312.         if EGA==0
  313. V_copy  ;gbu2->gbu1
  314.         LD BC,16
  315.         LD HL,GBU2
  316.         LD DE,GBU1
  317.         LDIR
  318.         RET
  319.         endif
  320.  
  321. V_PUT1onint
  322.         if EGA
  323.          ld a,(curscrnum)
  324.          or a
  325.          ld hl,arbuf0
  326.          jr z,$+5
  327.          ld hl,arbuf1
  328.         jp rearr
  329.         endif
  330. V_PUT1  ;  gbu1->[SCR]
  331.         if EGA
  332. ;на видимом экране
  333.         call setpgsscr40008000_current
  334.          ld a,(curscrnum)
  335.          or a
  336.          ld hl,arbuf0
  337.          jr z,$+5
  338.          ld hl,arbuf1
  339.         else
  340.         LD HL,(GBAD1)
  341.          ld a,h
  342.          or a
  343.          ret z
  344.         LD DE,GBU1
  345.         endif
  346.         JR v1pEN
  347.  
  348. V_PUT2  ;  gbu2->[DSCR]
  349.         if EGA
  350. ;на рисуемом экране
  351.         call setpgsscr40008000;_current
  352.          ld a,(curscrnum)
  353.          or a
  354.          ld hl,arbuf0
  355.          jr nz,$+5
  356.          ld hl,arbuf1
  357.         else
  358.         LD HL,(GBAD2)
  359.         LD DE,GBU2
  360.         endif
  361. v1pEN
  362.         if EGA
  363.         ;LD hl,(G_MX)
  364.         ;ld a,h
  365.         ;ld h,0
  366.         call rearr
  367.         jp setpgsmain40008000
  368.        
  369.         else
  370.         CALL v1p0
  371.         LD A,L
  372.         AND 31
  373.         CP 31
  374.         RET Z
  375.         INC L
  376. v1p0    LD B,8
  377.         PUSH HL
  378. v1p1    LD A,(DE)
  379.         LD (HL),A
  380.         INC DE
  381.         INC H
  382.         LD A,H
  383.         AND 7
  384.         JR NZ,v1p2
  385.         LD A,L
  386.         ADD A,32
  387.         LD L,A
  388.         JR C,v1p3
  389.         LD A,H
  390.         SUB 8
  391.         LD H,A
  392.         JR v1p2
  393. v1p3    LD A,H
  394.         CPL
  395.         AND %11000
  396.         JR Z,v1p6
  397. v1p2    DJNZ v1p1
  398.         POP HL
  399.         RET
  400. v1p5    INC DE
  401. v1p6    DJNZ v1p5
  402.         POP HL
  403.         RET
  404.         endif
  405.  
  406. V_GET1onint
  407.         if EGA
  408.          ld a,(curscrnum)
  409.          or a
  410.          ld de,arbuf0
  411.          jr z,$+5
  412.          ld de,arbuf1
  413.         LD hl,(G_MX)
  414.         ld a,h
  415.         ld h,0
  416.         jp getarr
  417.         endif
  418. V_GET1  ; HL->gbad1  [SCR]->gbu1
  419. ;выв гр курс
  420.         if EGA
  421. ;на видимом экране
  422.         call setpgsscr40008000_current
  423.          ld a,(curscrnum)
  424.          or a
  425.          ld de,arbuf0
  426.          jr z,$+5
  427.          ld de,arbuf1
  428. V_GETgo
  429.         LD hl,(G_MX)
  430.         ld a,h
  431.         ld h,0
  432.         call getarr
  433.         jp setpgsmain40008000
  434.        
  435.         else
  436.         LD DE,(G_MX)
  437.         CALL STS
  438.         CALL PCOORD
  439.         LD (GBAD1),HL
  440.         LD DE,GBU1
  441.         CALL v1g0
  442.         INC L
  443. v1g0    LD B,8
  444.         PUSH HL
  445. v1g1    LD A,(HL)
  446.         LD (DE),A
  447.         INC DE
  448.         INC H
  449.         LD A,H
  450.         AND 7
  451.         JR NZ,v1g2
  452.         LD A,L
  453.         ADD A,32
  454.         LD L,A
  455.         JR C,v1g2
  456.         LD A,H
  457.         SUB 8
  458.         LD H,A
  459. v1g2    DJNZ v1g1
  460.         POP HL
  461.         RET
  462.         endif
  463.  
  464. V_GET2  ; HL->gbad2  [DSCR]->gbu2
  465. ;выв гр курс
  466.         if EGA
  467. ;на рисуемом экране
  468.         call setpgsscr40008000;_current
  469.          ld a,(curscrnum)
  470.          or a
  471.          ld de,arbuf0
  472.          jr nz,$+5
  473.          ld de,arbuf1
  474.         jp V_GETgo
  475.         else
  476.         LD DE,(G_MX)
  477.         CALL STD
  478.         CALL PCOORD
  479.         LD (GBAD2),HL
  480.         LD DE,GBU2
  481.         CALL v2g0
  482.         INC L
  483. v2g0    LD B,8
  484.         LD A,L
  485.         AND 31
  486.         CP 24
  487.         JR C,v2g00
  488.         PUSH HL
  489.         LD HL,GBU1-GBU2
  490.         ADD HL,DE
  491.         LD BC,8
  492.         LDIR
  493.         POP HL
  494.         RET
  495. v2g00   PUSH HL
  496. v2g1    LD A,(HL)
  497.         LD (DE),A
  498.         INC DE
  499.         INC H
  500.         LD A,H
  501.         AND 7
  502.         JR NZ,v2g2
  503.         LD A,L
  504.         ADD A,32
  505.         LD L,A
  506.         JR C,v2g2
  507.         LD A,H
  508.         SUB 8
  509.         LD H,A
  510. v2g2    DJNZ v2g1
  511.         POP HL
  512.         RET
  513.         endif
  514.  
  515.         if EGA
  516. V_GET_MRK2
  517. ;гарантирует, что считаем фон и рисуем в одном и том же месте
  518. ;на рисуемом экране
  519.         call setpgsscr40008000;_current
  520.         LD HL,(G_MX)
  521.         push hl
  522.          ld a,(curscrnum)
  523.          or a
  524.          ld de,arbuf0
  525.          jr nz,$+5
  526.          ld de,arbuf1
  527.         ld a,h
  528.         ld h,0
  529.         call getarr
  530.         pop hl
  531.         ld a,h
  532.         ld h,0
  533.         call prarr
  534.         jp setpgsmain40008000
  535.        
  536.         endif
  537.        
  538. V_MRK2  ;mrk->SCR
  539.         if EGA
  540. ;на рисуемом экране
  541.         call setpgsscr40008000;_current
  542.         else
  543.         LD BC,(GBAD2)
  544.         endif
  545.         JR vmr1
  546.  
  547. V_MRK1onint
  548.         if EGA
  549.         LD hl,(G_MX)
  550.         ld a,h
  551.         ld h,0
  552.         jp prarr
  553.         endif
  554. V_MRK1  ;mrk->SCR
  555.         if EGA
  556. ;на видимом экране
  557.         call setpgsscr40008000_current
  558.         else
  559.         LD BC,(GBAD1)
  560.          ld a,b
  561.          or a
  562.          ret z
  563.         endif
  564. vmr1    LD HL,(G_MX)
  565.  
  566.         if EGA
  567.         ld a,h
  568.         ld h,0
  569.         call prarr
  570.         jp setpgsmain40008000
  571.        
  572.         else
  573.  
  574.         LD A,H
  575.         SUB 185
  576.         JR C,vmr2
  577.         XOR 7
  578.         JR vmr3
  579. vmr2    LD A,8
  580. vmr3    LD (G_SIZE),A
  581.         LD A,L
  582.         AND 7
  583.         LD HL,HE_N
  584.         CALL WT
  585.         LD (JP_SUB+1),HL
  586.         LD HL,(G_IMG)
  587.         LD E,(HL)
  588.         INC HL
  589.         LD D,(HL)
  590.         INC HL
  591.         LD (SET_SP+1),SP
  592.         LD SP,HL
  593.         LD L,C
  594.         LD H,B
  595.         LD A,(G_SIZE)
  596.         LD B,A
  597.         JP JP_SUB
  598.  
  599.         endif ;~EGA
  600.