?login_element?

Subversion Repositories NedoOS

Rev

Rev 992 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;(C)1991,92  Graphic  Library V1.1 for UFO2
  2. ;Mednonogov V.S.
  3. NOP_    EQU     0
  4. OR_     EQU     #B6
  5. XOR_    EQU     #AE
  6. AND_    EQU     #A6
  7. NEG_    EQU     #2F
  8.  
  9. PUTATR  PUSHs;$
  10.         LD      A,31
  11.         SUB     L
  12.         JR      C,RETPAT
  13.         INC     A
  14.         CP      B
  15.         JR      C,PUTAT0
  16.         LD      A,B
  17. PUTAT0  SUB     B
  18.         NEG
  19.         LD      (PUTAT4+1),A
  20.         SUB     B
  21.         NEG
  22.         LD      (PUTAT2+1),A
  23.         LD      A,H
  24.         RRCA
  25.         RRCA
  26.         RRCA
  27.         LD      B,A
  28.         AND     %11100000
  29.         OR      L
  30.         LD      L,A
  31.         LD      A,B
  32.         AND     %0000011
  33. SELAT1  ADD     A,#58
  34.         LD      H,A
  35. PUTAT1  LD      A,H
  36. SELAT2  CP      #5B
  37.         JR      NC,RETPAT
  38.         PUSH    HL
  39. PUTAT2  LD      B,#FF
  40. PUTAT3  LD      A,(DE)
  41.         INC     DE
  42.         LD      (HL),A
  43.         INC     HL
  44.         DJNZ    PUTAT3
  45. PUTAT4  LD      HL,0
  46.         ADD     HL,DE
  47.         EX      DE,HL
  48.         POP     HL
  49.         LD      A,L
  50.         ADD     A,%00100000
  51.         LD      L,A
  52.         JR      NC,PUTAT7
  53.         INC     H
  54. PUTAT7  DEC     C
  55.         JR      NZ,PUTAT1
  56. RETPAT  POPs;$
  57.         RET
  58.  
  59. PUTSIM  PUSHs;$ ;HL(0-23,0-31)
  60.         LD      A,31
  61.         SUB     L
  62.         JR      C,RETSIM
  63.         INC     A
  64.         CP      B
  65.         JP      C,   PUTSI0
  66.         LD      A,B
  67. PUTSI0  SUB     B
  68.         NEG
  69.         LD      (PUTSI4+1),A
  70.         SUB     B
  71.         NEG
  72.         LD      (PUTSI2+1),A
  73. PUTSI1  LD      A,H
  74.         CP      24
  75.         JR      NC,RETSIM
  76.         PUSH    HL
  77.         PUSH    DE
  78.         EX      DE,HL
  79.         CALL    SCOORD
  80.         POP     DE
  81. PUTSI2  LD      B,0
  82.         PUSH    HL
  83. PUTSI3  LD      A,(DE)
  84.         INC     DE
  85. PUTSID  OR      (HL)
  86.         LD      (HL),A
  87.         INC     L
  88.         DJNZ    PUTSI3
  89. PUTSI4  LD      HL,0
  90.         ADD     HL,DE
  91.         EX      DE,HL
  92.         POP     HL
  93.         INC     H
  94.         LD      A,%00000111
  95.         AND     H
  96.         JR      NZ,PUTSI2
  97.         POP     HL
  98.         INC     H
  99.         DEC     C
  100.         JR      NZ,PUTSI1
  101. RETSIM  POPs;$
  102.         RET
  103.  
  104. PRINBT  DEFB    0
  105. PRINT   PUSH    AF
  106.         LD      (PRINBT),A
  107.         LD      A,D
  108.         CP      24
  109.         JR      NC,RETPRI
  110. PRIN2   LD      A,E
  111.         CP      32
  112.         JR      C,PRIN9
  113.         LD      E,0
  114.         INC     D
  115.         LD      A,D
  116.         CP      24
  117.         JR      NC,RETPRI
  118. PRIN9   PUSHs;$
  119. PRIN8   LD      L,(HL)
  120.         LD      H,0
  121.         ADD     HL,HL
  122.         ADD     HL,HL
  123.         ADD     HL,HL
  124.         ADD     HL,BC
  125.         PUSH    HL
  126.         CALL    SCOORD
  127.         POP     DE
  128.         LD      B,8
  129. PRIN1   LD      A,(DE)
  130. PRINCD  OR      (HL)
  131.         LD      (HL),A
  132.         INC     DE
  133.         INC     H
  134.         DJNZ    PRIN1
  135.         POPs;$
  136.         INC     HL
  137.         INC     E
  138.         LD      A,(PRINBT)
  139.         DEC     A
  140.         LD      (PRINBT),A
  141.         JR      NZ,PRIN2
  142. RETPRI  POP     AF
  143.         RET
  144.  
  145. GETSIM  PUSHs;$
  146.         LD      A,B
  147.         LD      (GETSI2+1),A
  148. GETSI1  PUSH    HL
  149.         PUSH    DE
  150.         EX      DE,HL
  151.         CALL    SCOORD
  152.         POP     DE
  153. GETSI2  LD      B,0
  154.         PUSH    HL
  155. GETSI3  LD      A,(HL)
  156.         LD      (DE),A
  157.         INC     DE
  158.         INC     L
  159.         DJNZ    GETSI3
  160.         POP     HL
  161.         INC     H
  162.         LD      A,%00000111
  163.         AND     H
  164.         JR      NZ,GETSI2
  165.         POP     HL
  166.         INC     H
  167.         DEC     C
  168.         JR      NZ,GETSI1
  169.         POPs;$
  170.         RET
  171.  
  172. GETATR  PUSHs;$
  173.         LD      A,B
  174.         LD      (GETAT2+1),A
  175.         LD      A,H
  176.         RRCA
  177.         RRCA
  178.         RRCA
  179.         LD      B,A
  180.         AND     %11100000
  181.         OR      L
  182.         LD      L,A
  183.         LD      A,B
  184.         AND     %00000011
  185. SELAT3  ADD     A,#5B
  186.         LD      H,A
  187. GETAT2  LD      B,#FF
  188.         PUSH    HL
  189. GETAT3  LD      A,(HL)
  190.         LD      (DE),A
  191.         INC     DE
  192.         INC     HL
  193.         DJNZ    GETAT3
  194.         POP     HL
  195. GETAT6  LD      A,L
  196.         ADD     A, %00100000
  197.         LD      L,A
  198.         JR      NC,GETAT7
  199.         INC     H
  200. GETAT7  DEC     C
  201.         JR      NZ,GETAT2
  202.         POPs;$
  203.         RET
  204.  
  205. SELSCR  LD      (SCOSCR+1),A ;A-screen address
  206.         LD      (BCOSCR+1),A
  207.         LD      (PCOSCR+1),A
  208.         ADD     A,#18
  209.         LD      (SELAT1+1),A; A-attr address
  210.         LD      (SELAT3+1),A
  211.         ADD     A,3
  212.         LD      (SELAT2+1),A
  213.         RET
  214.  
  215. PUTSPR  PUSHs;$ ;(de)--(hl)(0-191,0-255):b*c
  216.         LD      A,L
  217.         AND     %00000111
  218.         LD      (SHIFTS+1),A
  219.         LD      A,L
  220.         AND     %11111000
  221.         RRCA
  222.         RRCA
  223.         RRCA
  224.         LD      L,A
  225.         LD      A,B
  226. PUTSP0  LD      (PUTSP2+1),A
  227. PUTSP2  LD      B,0
  228.         LD      A,H
  229.         CP      %11000000
  230.         JR      NC,RETPSP
  231.         PUSH    HL
  232.         PUSH    DE
  233.         EX      DE,HL
  234.         CALL    BCOORD
  235.         POP     DE
  236. PUTSP1  PUSH    BC
  237.         XOR     A
  238.         LD      C,A
  239. SHIFTS  OR      0
  240.         LD      B,A
  241.         LD      A,(DE)
  242.         JR      Z,PTSPD1
  243. SHFTDO  RRA
  244.         RR      C
  245.         DJNZ    SHFTDO
  246. PTSPD1  OR      (HL)
  247.         LD      (HL),A
  248.         LD      A,L
  249.         AND     %00011111
  250.         CP      %00011111
  251.         JR      NC,PUTSP6
  252.         LD      A,C
  253.         INC     L
  254. PTSPD2  OR      (HL)
  255.         LD      (HL),A
  256.         INC     DE
  257.         POP     BC
  258.         DJNZ    PUTSP1
  259. PUTSP3  POP     HL
  260.         INC     H
  261.         DEC     C
  262.         JR      NZ,PUTSP2
  263. RETPSP  POPs;$
  264.         RET
  265. PUTSP6  POP     BC
  266. PUTSP7  INC     DE
  267.         DJNZ    PUTSP7
  268.         JR      PUTSP3
  269.  
  270. BCOORD  LD      A,D ;de(0-191,0-31) -- hl
  271.         RRCA
  272.         RRCA
  273.         RRCA
  274.         AND     %00011000
  275.         LD      H,A
  276.         LD      A,D
  277.         AND     %00000111
  278.         ADD     A,H
  279. BCOSCR  ADD     A,%01000000
  280.         LD      H,A
  281.         LD      A,D
  282.         RLA
  283.         RLA
  284.         AND     %11100000
  285.         OR      E
  286.         LD      L,A
  287.         RET
  288.  
  289. PUTSCR  PUSHs;$ ;(de)--(hl)(0-191,0-31):b*c
  290.         LD      A,31
  291.         SUB     L
  292.         JR      C,RETPTS
  293.         INC     A
  294.         CP      B
  295.         JR      C,PUTSCB
  296.         LD      A,B
  297. PUTSCB  SUB     B
  298.         NEG
  299.         LD      (PUTSC4+1),A
  300.         SUB     B
  301.         NEG
  302.         LD      (PUTSC2+1),A
  303. PUTSC2  LD      B,0
  304.         LD      A,H
  305.         CP      %11000000
  306.         JR      NC,RETPTS
  307.         PUSH    HL
  308.         PUSH    DE
  309.         EX      DE,HL
  310.         CALL    BCOORD
  311.         POP     DE
  312. PUTSC1  LD      A,(DE)
  313. PUTSCD  OR      (HL)
  314.         LD      (HL),A
  315.         INC     DE
  316.         INC     L
  317.         DJNZ    PUTSC1
  318. PUTSC4  LD      HL,0
  319.         ADD     HL,DE
  320.         EX      DE,HL
  321.         POP     HL
  322.         INC     H
  323.         DEC     C
  324.         JR      NZ,PUTSC2
  325. RETPTS  POPs;$
  326.         RET
  327.  
  328. SCOORD  LD      A,D ;de(0-23,0-31)--hl
  329.         AND     %00011000
  330. SCOSCR  ADD     A,%01000000
  331.         LD      H,A
  332.         LD      A,D
  333.         RRCA
  334.         RRCA
  335.         RRCA
  336.         AND     %11100000
  337.         OR      E
  338.         LD      L,A
  339.         RET
  340.  
  341. LINE    PUSHs;$ ; line from p1(l,h) to p2(e,d)
  342.         PUSH    IX
  343.         LD      IX,DATA01
  344.         LD      B,#15
  345.         LD      C,#1D
  346.         LD      A,E
  347.         SUB     L
  348.         JR      NC,M1LIN
  349.         NEG
  350.         EX      DE,HL
  351. M1LIN   LD      L,A
  352.         LD      A,D
  353.         SUB     H
  354.         JR      NC,M2LIN
  355.         NEG
  356.         DEC     B
  357. M2LIN   LD      H,A
  358.         CP      L
  359.         JR      C,M3LIN
  360.         LD      A,B
  361.         LD      B,C
  362.         LD      C,A
  363.         LD      A,H
  364.         LD      H,L
  365.         LD      L,A
  366. M3LIN   LD      A,B
  367.         LD      (DEPENC),A
  368.         LD      A,C
  369.         LD      (INDEPC),A
  370.         PUSH    DE
  371.         LD      C,L
  372.         LD      E,L
  373.         LD      L,H
  374.         CALL    DIVB
  375.         LD      A,E
  376.         LD      (SIMLIN+1),A
  377.         LD      L,C
  378.         LD      A,L
  379.         LD      (LDLIN+1),A
  380.         LD      A,D
  381.         LD      (DECLIN+1),A
  382.         OR      A
  383.         LD      B,E
  384.         RR      B
  385.         INC     B
  386.         OR      A
  387.         RR      C
  388.         POP     DE
  389.         INC     L
  390.         JR      L4LIN
  391. SIMLIN  LD      B,#FF
  392. L4LIN   PUSH    HL
  393.         CALL    DOT
  394.         POP     HL
  395. INDEPC  DEC     D
  396.         DEC     L
  397.         JR      Z,RETLIN
  398.         LD      A,C
  399. DECLIN  SUB     #02
  400.         LD      C,A
  401.         JR      C,LDLIN
  402.         DJNZ    L4LIN
  403. DEPENC  DEC     E
  404.         JR      SIMLIN
  405. LDLIN   ADD     A,#FF
  406.         LD      C,A
  407.         JR      L4LIN
  408. RETLIN  POP     IX
  409.         POPs;$
  410.         RET
  411.  
  412. PCOORD  LD      A,D ;de(0-191,0-255) -- hl
  413.         RRCA
  414.         RRCA
  415.         RRCA
  416.         LD      L,A
  417.         AND     %00011000
  418.         LD      H,A
  419.         LD      A,D
  420.         AND     %00000111
  421.         ADD     A,H
  422. PCOSCR  ADD     A,%01000000
  423.         LD      H,A
  424.         LD      A,L
  425.         LD      L,E
  426.         RRA
  427.         RR      L
  428.         RRA
  429.         RR      L
  430.         RRA
  431.         RR      L
  432.         RET
  433.  
  434. DATA01  DEFB    128,64,32,16,8,4,2,1
  435. OUTBT   OR      (HL)
  436.         LD      (HL),A
  437.         RET
  438.  
  439. DOT     LD      A,D  ;POINT(X:=E,Y:=D)
  440.         CP      %11000000
  441.         RET     NC
  442.         LD      A,E
  443.         AND     %00000111
  444.         LD      (DCDOT+2),A
  445.         CALL    PCOORD
  446. DCDOT   LD      A,(IX+0)
  447. DOTREG  OR      (HL)
  448.         LD      (HL),A
  449.         RET
  450.  
  451. CHNGRG  LD      (OUTBT),A
  452.         LD      (PUTSCD),A
  453.         LD      (DOTREG),A
  454.         LD      (PTSPD1),A
  455.         LD      (PTSPD2),A
  456.         LD      (PUTSID),A
  457.         LD      (PRINCD),A
  458.         RET
  459.  
  460. PLOT    PUSH    IX ;*********PLOT E,D
  461.         PUSH    HL
  462.         LD      IX,DATA01
  463.         CALL    DOT
  464.         POP     HL
  465.         POP     IX
  466.         RET
  467.  
  468. ;MATHEMATICAL LIBRARY  MATH-ZX
  469. FREE16  DEFW    #F5F5
  470. MULB2   PUSH    HL       ;HL*E--DE  (C)
  471.         JR      MULENT
  472. MULB    PUSH    HL       ;L*E--DE
  473.         LD      H,0
  474. MULENT  LD      A,E
  475.         LD      E,0
  476.         LD      D,E
  477.         JR      MMULB2
  478. MMULB1  ADD     HL,HL
  479.         JR      C,ENDMUL
  480. MMULB2  OR      A
  481.         JR      Z,ENDMUL
  482.         RRA
  483.         JR      NC,MMULB1
  484.         EX      DE,HL
  485.         ADD     HL,DE
  486.         EX      DE,HL
  487.         JR      MMULB1
  488. ENDMUL  POP     HL
  489.         RET
  490. MUL     PUSH    HL ;HL*DE--DE
  491.         XOR     A
  492.         OR      D
  493.         JR      Z,MULENT
  494.         EX      DE,HL
  495.         XOR     A
  496.         OR      D
  497.         JR      Z,MULENT
  498.         SCF
  499.         POP     HL
  500.         RET
  501. DIVB    LD      D,0 ;E/L--E (MOD in D)
  502. DIVB2   PUSH    HL ;DE/L--E
  503.         PUSH    BC
  504.         LD      B,8
  505.         EX      DE,HL
  506.         LD      D,E
  507.         LD      E,0
  508. DIV1B   OR      A
  509.         RR      D
  510.         RR      E
  511.         SBC     HL,DE
  512.         JR      NC,MDIVB
  513.         ADD     HL,DE
  514. MDIVB   RLA
  515.         DJNZ    DIV1B
  516.         CPL
  517.         LD      D,L
  518.         LD      E,A
  519.         POP     BC
  520.         POP     HL
  521.         RET
  522.  
  523. SYMBOL  PUSH    HL;in L -sym.code
  524.         LD      H,L
  525.         LD      L,#21
  526.         LD      (PRIN8),HL
  527.         CALL    PRINT
  528.         LD      HL,#266E
  529.         LD      (PRIN8),HL
  530.         POP     HL
  531.         RET
  532.  
  533. ATRBAR  PUSH    HL; A -ATTR
  534.         LD      H,A
  535.         LD      L,#3E
  536.         LD      (PUTAT3),HL
  537.         POP     HL
  538.         CALL    PUTATR
  539.         PUSH    HL
  540.         LD      HL,#131A
  541.         LD      (PUTAT3),HL
  542.         POP     HL
  543.         RET
  544.  
  545. SIMBAR  PUSH    HL
  546.         LD      H,A ; A-filled byte
  547.         LD      L,#3E
  548.         LD      (PUTSI3),HL
  549.         POP     HL
  550.         CALL    PUTSIM
  551.         PUSH    HL
  552.         LD      HL,#131A
  553.         LD      (PUTSI3),HL
  554.         POP     HL
  555.         RET
  556. ; GrLib end
  557.         macro ATRs _hl,_bc,_a;$ MAC
  558.         LD      HL,_hl;=0
  559.         LD      BC,_bc;=1
  560.         LD      A,_a;=2
  561.         CALL    ATRBAR
  562.         ENDM
  563.         macro BYTs _hl,_bc,_a;$ MAC
  564.         LD      HL,_hl;=0
  565.         LD      BC,_bc;=1
  566.         LD      A,_a;=2
  567.         CALL    SIMBAR
  568.         ENDM
  569.         macro SYMs _de,_a,_l;$  MAC
  570.         LD      DE,_de;=0
  571.         LD      A,_a;=1
  572.         LD      L,_l;=2
  573.         CALL    SYMBOL
  574.         ENDM
  575.         macro CHNs _a;$ MAC
  576.         LD      A,_a;=0
  577.         CALL    CHNGRG
  578.         ENDM
  579.  
  580.        if 0
  581. ;Декомпрессор
  582. ;HL-откуда DE-куда
  583. DLPCB   DEFS 4
  584. DELPC   PUSH DE
  585.         LD DE,DLPCB
  586.         LD BC,4
  587.         LDIR
  588.         POP DE
  589. xpD0    LD A,(HL)
  590.         BIT 7,A
  591.         JR NZ,xpD1
  592.         PUSH AF
  593.         AND 1
  594.         LD B,A
  595.         LD A,(HL)
  596.         AND #E
  597.         RRCA
  598.         ADD A,3
  599.         LD C,A
  600. xpD0X   INC HL
  601.         LD A,E
  602.         SUB (HL)
  603.         INC HL
  604.         PUSH HL
  605.         LD L,A
  606.         LD A,D
  607.         SBC A,B
  608.         LD H,A
  609.         LD B,0
  610.         LDIR
  611. D00     POP HL
  612.         POP AF
  613.         RLCA
  614.         RLCA
  615.         RLCA
  616.         RLCA
  617.         AND #F
  618.         JR Z,xpD0
  619.         JR xpDRR
  620. xpD1    INC HL
  621.         BIT 6,A
  622.         JR NZ,xpD2
  623.         AND #3F
  624.         JR Z,xpDEND
  625. xpDRR   LD C,A
  626. xpDLO   LD A,(HL) ;неразрушающий
  627.         RRCA
  628.         LD (DE),A
  629.         INC DE
  630.         INC HL
  631.         DEC C
  632.         JP NZ,xpDLO
  633.         JR xpD0
  634. xpD2    AND #3F
  635.         ADD A,4
  636.         LD C,A
  637.         LD A,(HL)
  638.         PUSH AF
  639.         AND #F
  640.         LD B,A
  641.         JR xpD0X
  642. xpDEND  LD HL,DLPCB
  643.         LD C,4
  644.         LDIR
  645.         RET
  646.        endif
  647.  
  648. ;XECUTE MOUSE
  649. ;TAKE COORDINATES FROM CURPOS==MX
  650.  
  651. MOUSE   LD      HL,(COORD)
  652.         LD      BC,#FBDF
  653.         LD      DE,(OLDCO)
  654.         IN      A,(C)
  655.         LD      (OLDCO),A
  656.         SUB     E
  657.         JR      Z,NM_X
  658.         JP      P,MX_PL
  659.         ADD     A,L
  660.         JR      C,ZER_X
  661.         XOR     A
  662. ZER_X   LD      L,A
  663.         JR      NM_X
  664. MX_PL   ADD     A,L
  665.         JR      C,BEX_Z
  666.         CP      #FD     ;MAXIMUM X
  667.         JR      C,BEX_B
  668. BEX_Z   LD      A,#FD   ;MAXIMUM X
  669. BEX_B   LD      L,A
  670. NM_X    LD      B,#FF
  671.         IN      A,(C)
  672.         LD      (OLDCO+1),A
  673.         SUB     D
  674.         JR      Z,NM_Y
  675.         NEG
  676.         JP      P,MY_PL
  677.         ADD     A,H
  678.         JR      C,ZER_Y
  679.         XOR     A
  680. ZER_Y   LD      H,A
  681.         JR      NM_Y
  682. MY_PL   ADD     A,H
  683.         JR      C,BEY_Z
  684.         CP      #BE     ;MAXIMUM Y
  685.         JR      C,BEY_B
  686. BEY_Z   LD      A,#BE   ;MAXIMUM Y
  687. BEY_B   LD      H,A
  688. NM_Y    LD      A,H
  689.         CP      #FF
  690.         JR      C,BIGY
  691.         LD      H,#FF
  692. BIGY    CP      #02     ;MINIMUM Y
  693.         JR      NC,SMALY
  694.         LD      H,#02   ;MINIMUM Y
  695. SMALY   LD      A,L
  696.         CP      #FF
  697.         JR      C,DIRY
  698.         LD      L,#FF
  699. DIRY    CP      #02     ;MINIMUM X
  700.         JR      NC,DIMENS
  701.         LD      L,#02   ;MINIMUM X
  702. DIMENS  LD      (COORD),HL
  703.         LD BC,#FADF
  704.         LD HL,CONTRB
  705.         IN A,(C)
  706.         CPL
  707.         AND 7
  708.         RLCA
  709.         RLCA
  710.         RLCA
  711.         RLCA
  712.         OR (HL)
  713.         LD (HL),A
  714.         RET
  715.  
  716. COORD   DEFW    #8FE4
  717. MX      EQU     COORD
  718. MY      EQU     MX+1
  719. OLDCO   DEFW    0       ;WORKING
  720.  
  721.         macro Ms _a;$   MAC
  722.         LD      A,_a ;=0
  723.         CALL    MEM
  724.         ENDM
  725.  
  726.         macro pushs;$   MAC
  727.         PUSH    BC
  728.         PUSH    HL
  729.         ENDM
  730.         macro pops;pop$ MAC
  731.         POP     HL
  732.         POP     BC
  733.         ENDM
  734.         macro WRDs _hl,_a;$    MAC
  735.         LD HL,_hl;=0
  736.         LD (SX),HL
  737.         LD A,_a;=1
  738.         CALL NWRDM
  739.         ENDM
  740.  
  741. ;=========================================Мeнeджер памяти
  742.         if 0
  743. PT128   LD      A,6;Cтандартная страница
  744.         JR      MEM
  745.  
  746. MEM7    LD      A,7
  747. MEM     OR      %11011000
  748. _128    ;LD     BC,#7FFD
  749.         ;OUT    (C),A
  750.         ld b,tpgs/256
  751.         and 7
  752.         ld c,a
  753.         ld a,(bc)
  754.         SETPGC000
  755.         RET
  756.         endif
  757.  
  758. OFFD    LD      DE,DSCR+#1AFE
  759.         JR      offx
  760.  
  761. OFFS    CALL    MEM7
  762.         LD      DE,SCR+#1AFE
  763. offx    PUSH DE
  764.         POP HL
  765.         INC HL
  766.         LD      BC,768
  767.         LD      (HL),0
  768.         LDDR
  769.         LD      BC,6143
  770.         LD      (HL),255
  771.         LDDR
  772.         RET
  773.  
  774. COLOR   DEFB    #38,#68
  775.  
  776. COPY     ;копир.экр
  777.         LD      BC,6144
  778. CY_     LD      HL,DSCR
  779.         LD      DE,SCR
  780.         LDIR
  781.         RET
  782.  
  783. COPYAT  LD      BC,6912
  784.         JR CY_
  785.  
  786. MNU     CALL INIMNU ;Вывод меню с ожид.
  787.         CALL MENU
  788.         CALL MEM7
  789.         LD HL,#FFFF
  790.         LD (MBEG),HL
  791.         CALL COPYAT
  792. MnU     CALL MARK_
  793.         JR C,MnU
  794. MNu     CALL MARK_
  795.         RET C
  796.         JR MNu
  797.  
  798. STD     LD      A,DSCR/256 ;выбор экрана
  799.         JR      STDS
  800.  
  801. STS     LD      A,SCR/256
  802. STDS    CALL    SELSCR
  803.         XOR A
  804.         JP      CHNGRG
  805.  
  806.  
  807. ;поиск по таблицам
  808. BT      PUSH    HL
  809.         ADD     A,L
  810.         LD      L,A
  811.         JR      NC,BT_
  812.         INC     H
  813. BT_     LD      A,(HL)
  814.         POP     HL
  815.         RET
  816.  
  817. WT      RLCA
  818.         ADD     A,L
  819.         LD      L,A
  820.         JR      NC,WT_
  821.         INC     H
  822. WT_     LD      A,(HL)
  823.         INC     HL
  824.         LD      H,(HL)
  825.         LD      L,A
  826.         RET
  827.  
  828. ;описатели вода текста
  829. SX      DEFB    0
  830. SY      DEFB    0
  831. TXT     DEFW    0
  832. HIGH    DEFB    0 ;высота(1/0)
  833.  
  834. ;вывод слова
  835. WORDHL  LD      (TXT),HL
  836. WORD    LD      HL,(TXT)
  837.         LD      A,(HL)
  838.         INC     HL
  839.         LD      (TXT),HL
  840.         CP      #80
  841.         JR      NC,Compr
  842.         CP      #7E
  843.         RET     NC
  844.         CALL    LETTER
  845.         JR      WORD
  846. Compr   AND     #7F
  847.         LD HL,TWCMPR
  848.         CALL WT
  849.         PUSH HL
  850.         LD A,L
  851.         CALL LETTER
  852.         POP HL
  853.         LD A,H
  854.         CALL LETTER
  855.         JR WORD
  856.  
  857. LETTER  LD      L,A
  858.         LD      H,0
  859.         LD      A,(SY)
  860.         CP      24
  861.         JR      NC,W2
  862.         ADD     HL,HL
  863.         ADD     HL,HL
  864.         ADD     HL,HL
  865.         LD      BC,FONT
  866.         ADD     HL,BC
  867.         LD      DE,(SX)
  868.         LD      A,(HIGH)
  869.         OR      A
  870.         JR      NZ,WH2
  871.         PUSH    HL
  872.         CALL    SCOORD
  873.         POP     DE
  874.         LD      B,8
  875. WH1     LD      A,(DE)
  876.         LD      (HL),A
  877.         INC     DE
  878.         INC     H
  879.         DJNZ    WH1
  880.         JR      W2
  881. WH2     LD      C,2
  882. WH21    PUSH    DE
  883.         PUSH    HL
  884.         CALL    SCOORD
  885.         POP     DE
  886.         LD      B,4
  887. WH22    LD      A,(DE)
  888.         INC     DE
  889.         LD      (HL),A
  890.         INC     H
  891.         LD      (HL),A
  892.         INC     H
  893.         DJNZ    WH22
  894.         EX      DE,HL
  895.         POP     DE
  896.         INC     D
  897.         DEC     C
  898.         JR      NZ,WH21
  899. W2      LD      A,(SX)
  900.         INC     A
  901.         CP      32
  902.         JR      C,W3
  903.         XOR     A
  904. W3      LD      (SX),A
  905.         RET
  906.  
  907. ;вывод текста
  908. TEXT    LD      (TXT),HL  ;выв.текста
  909. TT      CALL    WORD
  910.         PUSH    AF
  911.         LD      HL,(SX)
  912.         LD      L,0
  913.         INC     H
  914.         LD      A,(HIGH)
  915.         AND     A
  916.         JR      Z,TQ
  917.         INC     H
  918. TQ      LD      (SX),HL
  919.         POP     AF
  920.         JR      Z,TT
  921.         RET
  922.  
  923. MWINX   DEFB    1
  924. MWINY   DEFB    1
  925. MMOV    CALL    CONTR
  926. MMOV_   LD      C,A
  927.         LD      HL,(MX)
  928.         RR      C
  929.         JR      NC,_1A
  930.         INC     L
  931.         INC     L
  932. _1A     LD      A,252
  933.         CP      L
  934.         JR      NC,_1
  935.         LD      L,A
  936. _1      RR      C
  937.         JR      NC,_2A
  938.         DEC     L
  939.         DEC     L
  940. _2A     LD      A,(MWINX)
  941.         CP      L
  942.         JR      C,_2
  943.         INC     A
  944.         LD      L,A
  945. _2      RR      C
  946.         JR      NC,_3A
  947.         INC     H
  948.         INC     H
  949. _3A     LD      A,187
  950.         CP      H
  951.         JR      NC,_3
  952.         LD      H,A
  953. _3      RR      C
  954.         JR      NC,_4A
  955.         DEC     H
  956.         DEC     H
  957. _4A     LD      A,(MWINY)
  958.         CP      H
  959.         JR      C,_4
  960.         INC     A
  961.         LD      H,A
  962. _4      LD      (MX),HL
  963.         RR      C
  964.         RET
  965.  
  966. ;---------NUMERIC I/O------
  967. DCM     DEFW    51712,15258
  968.         DEFW    57600,1525
  969.         DEFW    38528,152
  970.         DEFW    16960,15
  971.         DEFW    34464,1
  972.         DEFW    10000,0
  973.         DEFW    1000,0
  974.         DEFW    100,0
  975.         DEFW    10,0
  976.         DEFW    1,0
  977.  
  978. WTRB    LD      L,A;байт в DCS
  979.         LD      H,0
  980. WTRW    EXX        ;слово в DCS
  981.         LD      HL,0
  982.         EXX
  983. WTRD    PUSH    IX ;двойное слово в DCS
  984.         LD      A,15
  985.         LD      (WWB+1),A
  986.         LD      IX,DCM
  987.         LD      BC,DCS
  988.         EX      AF,AF
  989.         LD      A,10
  990. WWW     CP      1
  991.         PUSH    AF
  992.         EX      AF,AF
  993.         POP     AF
  994.         JR      NZ,WW5
  995.         XOR     A
  996.         LD      (WWB+1),A
  997. WW5     PUSH    BC
  998.         LD      C,0
  999.         LD      E,(IX)
  1000.         LD      D,(IX+1)
  1001.         EXX
  1002.         LD      E,(IX+2)
  1003.         LD      D,(IX+3)
  1004.         EXX
  1005.         INC     IX
  1006.         INC     IX
  1007.         INC     IX
  1008.         INC     IX
  1009. WWM     CALL    SUBD
  1010.         INC     C
  1011.         JR      NC,WWM
  1012.         DEC     C
  1013.         CALL    ADDD
  1014.         LD      A,C
  1015.         OR      A
  1016.         JR      Z,WWB
  1017.         XOR     A
  1018.         LD      (WWB+1),A
  1019.         JR      WW4
  1020. WWB     LD      C,0
  1021. WW4     LD      A,C
  1022.         POP     BC
  1023.         LD      (BC),A
  1024.         INC     BC
  1025.         EX      AF,AF
  1026.         DEC     A
  1027.         JR      NZ,WWW
  1028.         POP     IX
  1029.         RET
  1030.  
  1031. DCS     DEFM    "cooperfeet"
  1032.         DEFB    126,103,126 ;$
  1033.  
  1034. SUBDW   EXX
  1035.         LD      DE,0
  1036.         EXX
  1037. SUBD    OR      A
  1038.         SBC     HL,DE
  1039.         EXX
  1040.         SBC     HL,DE
  1041.         EXX
  1042.         RET
  1043.  
  1044. ADDDW   EXX
  1045.         LD      DE,0
  1046.         EXX
  1047. ADDD    ADD     HL,DE
  1048.         EXX
  1049.         ADC     HL,DE
  1050.         EXX
  1051.         RET
  1052.  
  1053. ;вывод байта
  1054. WBHL    LD      A,(HL)
  1055. WB      PUSHs;$
  1056.         EXX
  1057.         PUSH    DE
  1058.         PUSH    HL
  1059.         EXX
  1060.         CALL    WTRB
  1061.         LD      HL,DCS+7
  1062.         JR      WX
  1063. ;вывод слова
  1064. WW      PUSHs;$
  1065.         EXX
  1066.         PUSH    DE
  1067.         PUSH    HL
  1068.         EXX
  1069.         LD      A,(HL)
  1070.         INC     HL
  1071.         LD      H,(HL)
  1072.         LD      L,A
  1073.         CALL    WTRW
  1074.         LD      HL,DCS+5
  1075.         JR      WX
  1076. ;вывод двойного слова
  1077. WD      PUSHs;$
  1078.         EXX
  1079.         PUSH    DE
  1080.         EXX
  1081.         LD      E,(HL)
  1082.         INC     HL
  1083.         LD      D,(HL)
  1084.         INC     HL
  1085.         LD      C,(HL)
  1086.         INC     HL
  1087.         LD      B,(HL)
  1088.         PUSH    BC
  1089.         EXX
  1090.         EX      (SP),HL
  1091.         EXX
  1092.         EX      DE,HL
  1093.         CALL    WTRD
  1094.         LD      HL,DCS
  1095. WX      CALL    WORDHL
  1096.         EXX
  1097.         POP     HL
  1098.         POP     DE
  1099.         EXX
  1100.         POPs;$
  1101.         RET
  1102.  
  1103. ;==================Прямая траектория
  1104. LINini  LD      B,#15 ;инициализ. линии (DE->hl)
  1105.         LD      C,#1D
  1106.         LD      A,E
  1107.         SUB     L
  1108.         JR      NC,M1l
  1109.         NEG
  1110.         DEC     C
  1111. M1l     LD      L,A
  1112.         LD      A,D
  1113.         SUB     H
  1114.         JR      NC,M2l
  1115.         NEG
  1116.         DEC     B
  1117. M2l     LD      H,A
  1118.         CP      L
  1119.         JR      C,M3l
  1120.         LD      A,B
  1121.         LD      B,C
  1122.         LD      C,A
  1123.         LD      A,H
  1124.         LD      H,L
  1125.         LD      L,A
  1126. M3l     LD      A,B
  1127.         LD      (DENC),A
  1128.         LD      A,C
  1129.         LD      (INDC),A
  1130.         PUSH    DE
  1131.         LD      C,L
  1132.         LD      E,L
  1133.         LD      L,H
  1134.         CALL    DIVB
  1135.         LD      A,E
  1136.         LD      (SIMl+1),A
  1137.         LD      L,C
  1138.         LD      A,L
  1139.         LD      (LDl+1),A
  1140.         LD      A,D
  1141.         LD      (DECl+1),A
  1142.         OR      A
  1143.         LD      B,E
  1144.         RR      B
  1145.         INC     B
  1146.         OR      A
  1147.         RR      C
  1148.         POP     DE
  1149.         INC     L
  1150.         LD      A,L
  1151.         LD      (LIN_LN),A
  1152.         LD      (LIN_BC),BC
  1153.         LD      (LIN_XY),DE
  1154.         RET
  1155.  
  1156. LIN_BC  DEFW 0
  1157. LIN_XY  DEFW 0 ;тек.поз
  1158. LIN_LN  DEFB 0 ;длина
  1159.  
  1160. LINnxt  ;след. точка  (DE)
  1161.         LD BC,(LIN_BC)
  1162.         LD DE,(LIN_XY)
  1163. LINnx_
  1164. INDC    DEC     D
  1165.         LD      A,C
  1166. DECl    SUB     00
  1167.         LD      C,A
  1168.         JR      C,LDl
  1169.         DJNZ    L4RT
  1170. DENC    DEC     E
  1171. SIMl    LD      B,#FF
  1172.         JR      L4RT
  1173. LDl     ADD     A,#FF
  1174.         LD      C,A
  1175. L4RT    LD (LIN_BC),BC
  1176.         LD (LIN_XY),DE
  1177.         RET
  1178.  
  1179. ;--------------- Звук -----------------
  1180. EXS1    ;ракетн, диср, термоп, Г-пушка, взрывы
  1181.         DEFB 7,%11010010, 6,1, 4,99, 8,16, 10,16, 5,#C, 1,#F, 12,70, 13,1
  1182.         DEFB 255
  1183.  
  1184. SOU0    ;ракетница, диср
  1185.         DEFB 7,%11111010,  0,0, 4,33, 8,16, 10,16, 5,9, 1,#E, 12,130, 13,1
  1186.         DEFB 255
  1187.  
  1188. SOU4    ;термоп
  1189.         DEFB 7,%11111110,  0,0, 8,16, 1,#C, 12,144, 13,1
  1190.         DEFB 255
  1191.  
  1192. SOU5    ;Г-пушка
  1193.         DEFB 7,%11111010,  0,10, 4,15, 8,16, 10,16, 5,9, 1,9, 12,125, 13,1
  1194.         DEFB 255
  1195.  
  1196. EXS3    ;морт,руж,гарп,газ
  1197.         DEFB 7,%11010111, 6,17, 12,26, 13,1
  1198.         DEFB 255
  1199.  
  1200. SOU2    ; волн.р & м, MC-контр
  1201.         DEFB 7,%11010010, 6,1, 4,100, 8,16, 10,16, 5,12, 1,10, 12,20, 13,1
  1202.         DEFB 255
  1203.  
  1204. SOU6    ; гарп
  1205.         DEFB 7,%11010010, 6,15, 8,16, 10,16, 5,7, 1,7, 12,9, 13,1
  1206.         DEFB 255
  1207.  
  1208. TCH7    ;резаки
  1209.         DEFB 7,%11111010, 8,16, 10,16, 5,8, 1,9, 12,16, 13,1
  1210.         DEFB 255
  1211.  
  1212. TCH8    ;шок, аптечка, тент
  1213.         DEFB 7,%11111010, 8,16, 1,9, 12,3, 13,1
  1214.         DEFB 255
  1215.  
  1216. SOU9    ; газ.р
  1217.         DEFB 7,%11011010, 6,1, 4,10, 8,16, 10,16, 5,14, 1,14, 12,14, 13,1
  1218.         DEFB 255
  1219.  
  1220. BEP10   ;beep
  1221.         DEFB 7,%11111010, 4,200, 8,16, 10,16, 5,1, 1,1, 12,7, 13,1
  1222.         DEFB 255
  1223.        
  1224. tSOUND  DEFW SOU0,EXS1,SOU2,EXS3,SOU4,SOU5,SOU6,TCH7,TCH8,SOU9,BEP10
  1225.  
  1226. NOTA    DEFW 1;текущ нота
  1227. iSOUND  ;инициализ мелодии #A
  1228.         LD HL,tSOUND
  1229.         CALL WT
  1230.         LD (NOTA),HL
  1231.         RET
  1232.  
  1233. SOUNDn  CALL iSOUND ;играть звук А
  1234.  
  1235. ;форматы нот
  1236. ;(254) - конец ноты
  1237. ;(255) - конец мелодии
  1238. ;(0..15) - регистр, (N) - значение
  1239. pSOUND  ;вып. ноту мелодии
  1240.         LD HL,(NOTA)
  1241. pS0     LD A,(HL)
  1242.         CP 254
  1243.         JR Z,pS1
  1244.         RET NC
  1245.         LD BC,#FFFD
  1246.         OUT (C),A
  1247.         INC HL
  1248.         LD A,(HL)
  1249.         LD B,#BF
  1250.         OUT (C),A
  1251.         INC HL
  1252.         LD (NOTA),HL
  1253.         JR pS0
  1254. pS1     INC HL
  1255.         LD (NOTA),HL
  1256.         RET    
  1257.