?login_element?

Subversion Repositories NedoOS

Rev

Rev 1000 | 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.  
  722. ;=========================================Мeнeджер памяти
  723.         if 0
  724. PT128   LD      A,6;Cтандартная страница
  725.         JR      MEM
  726.  
  727. MEM7    LD      A,7
  728. MEM     OR      %11011000
  729. _128    ;LD     BC,#7FFD
  730.         ;OUT    (C),A
  731.         ld b,tpgs/256
  732.         and 7
  733.         ld c,a
  734.         ld a,(bc)
  735.         SETPGC000
  736.         RET
  737.         endif
  738.  
  739. OFFD    LD      DE,DSCR+#1AFE
  740.         JR      offx
  741.  
  742. OFFS    CALL    MEM7
  743.         LD      DE,SCR+#1AFE
  744. offx    PUSH DE
  745.         POP HL
  746.         INC HL
  747.         LD      BC,768
  748.         LD      (HL),0
  749.         LDDR
  750.         LD      BC,6143
  751.         LD      (HL),255
  752.         LDDR
  753.         RET
  754.  
  755. COLOR   DEFB    #38,#68
  756.  
  757. COPY     ;копир.экр
  758.         LD      BC,6144
  759. CY_     LD      HL,DSCR
  760.         LD      DE,SCR
  761.         LDIR
  762.         RET
  763.  
  764. COPYAT  LD      BC,6912
  765.         JR CY_
  766.  
  767. MNU     CALL INIMNU ;Вывод меню с ожид.
  768.         CALL MENU
  769.         CALL MEM7
  770.         LD HL,#FFFF
  771.         LD (MBEG),HL
  772.         CALL COPYAT
  773. MnU     CALL MARK_
  774.         JR C,MnU
  775. MNu     CALL MARK_
  776.         RET C
  777.         JR MNu
  778.  
  779. STD     LD      A,DSCR/256 ;выбор экрана
  780.         JR      STDS
  781.  
  782. STS     LD      A,SCR/256
  783. STDS    CALL    SELSCR
  784.         XOR A
  785.         JP      CHNGRG
  786.  
  787.  
  788. ;поиск по таблицам
  789. BT      PUSH    HL
  790.         ADD     A,L
  791.         LD      L,A
  792.         JR      NC,BT_
  793.         INC     H
  794. BT_     LD      A,(HL)
  795.         POP     HL
  796.         RET
  797.  
  798. WT      RLCA
  799.         ADD     A,L
  800.         LD      L,A
  801.         JR      NC,WT_
  802.         INC     H
  803. WT_     LD      A,(HL)
  804.         INC     HL
  805.         LD      H,(HL)
  806.         LD      L,A
  807.         RET
  808.  
  809. ;описатели вода текста
  810. SX      DEFB    0
  811. SY      DEFB    0
  812. TXT     DEFW    0
  813. HIGH    DEFB    0 ;высота(1/0)
  814.  
  815. ;вывод слова
  816. WORDHL  LD      (TXT),HL
  817. WORD    LD      HL,(TXT)
  818.         LD      A,(HL)
  819.         INC     HL
  820.         LD      (TXT),HL
  821.         CP      #80
  822.         JR      NC,Compr
  823.         CP      #7E
  824.         RET     NC
  825.         CALL    LETTER
  826.         JR      WORD
  827. Compr   AND     #7F
  828.         LD HL,TWCMPR
  829.         CALL WT
  830.         PUSH HL
  831.         LD A,L
  832.         CALL LETTER
  833.         POP HL
  834.         LD A,H
  835.         CALL LETTER
  836.         JR WORD
  837.  
  838. LETTER  LD      L,A
  839.         LD      H,0
  840.         LD      A,(SY)
  841.         CP      24
  842.         JR      NC,W2
  843.         ADD     HL,HL
  844.         ADD     HL,HL
  845.         ADD     HL,HL
  846.         LD      BC,FONT
  847.         ADD     HL,BC
  848.         LD      DE,(SX)
  849.         LD      A,(HIGH)
  850.         OR      A
  851.         JR      NZ,WH2
  852.         PUSH    HL
  853.         CALL    SCOORD
  854.         POP     DE
  855.         LD      B,8
  856. WH1     LD      A,(DE)
  857.         LD      (HL),A
  858.         INC     DE
  859.         INC     H
  860.         DJNZ    WH1
  861.         JR      W2
  862. WH2     LD      C,2
  863. WH21    PUSH    DE
  864.         PUSH    HL
  865.         CALL    SCOORD
  866.         POP     DE
  867.         LD      B,4
  868. WH22    LD      A,(DE)
  869.         INC     DE
  870.         LD      (HL),A
  871.         INC     H
  872.         LD      (HL),A
  873.         INC     H
  874.         DJNZ    WH22
  875.         EX      DE,HL
  876.         POP     DE
  877.         INC     D
  878.         DEC     C
  879.         JR      NZ,WH21
  880. W2      LD      A,(SX)
  881.         INC     A
  882.         CP      32
  883.         JR      C,W3
  884.         XOR     A
  885. W3      LD      (SX),A
  886.         RET
  887.  
  888. ;вывод текста
  889. TEXT    LD      (TXT),HL  ;выв.текста
  890. TT      CALL    WORD
  891.         PUSH    AF
  892.         LD      HL,(SX)
  893.         LD      L,0
  894.         INC     H
  895.         LD      A,(HIGH)
  896.         AND     A
  897.         JR      Z,TQ
  898.         INC     H
  899. TQ      LD      (SX),HL
  900.         POP     AF
  901.         JR      Z,TT
  902.         RET
  903.  
  904. MWINX   DEFB    1
  905. MWINY   DEFB    1
  906. MMOV    CALL    CONTR
  907. MMOV_   LD      C,A
  908.         LD      HL,(MX)
  909.         RR      C
  910.         JR      NC,_1A
  911.         INC     L
  912.         INC     L
  913. _1A     LD      A,252
  914.         CP      L
  915.         JR      NC,_1
  916.         LD      L,A
  917. _1      RR      C
  918.         JR      NC,_2A
  919.         DEC     L
  920.         DEC     L
  921. _2A     LD      A,(MWINX)
  922.         CP      L
  923.         JR      C,_2
  924.         INC     A
  925.         LD      L,A
  926. _2      RR      C
  927.         JR      NC,_3A
  928.         INC     H
  929.         INC     H
  930. _3A     LD      A,187
  931.         CP      H
  932.         JR      NC,_3
  933.         LD      H,A
  934. _3      RR      C
  935.         JR      NC,_4A
  936.         DEC     H
  937.         DEC     H
  938. _4A     LD      A,(MWINY)
  939.         CP      H
  940.         JR      C,_4
  941.         INC     A
  942.         LD      H,A
  943. _4      LD      (MX),HL
  944.         RR      C
  945.         RET
  946.  
  947. ;---------NUMERIC I/O------
  948. DCM     DEFW    51712,15258
  949.         DEFW    57600,1525
  950.         DEFW    38528,152
  951.         DEFW    16960,15
  952.         DEFW    34464,1
  953.         DEFW    10000,0
  954.         DEFW    1000,0
  955.         DEFW    100,0
  956.         DEFW    10,0
  957.         DEFW    1,0
  958.  
  959. WTRB    LD      L,A;байт в DCS
  960.         LD      H,0
  961. WTRW    EXX        ;слово в DCS
  962.         LD      HL,0
  963.         EXX
  964. WTRD    PUSH    IX ;двойное слово в DCS
  965.         LD      A,15
  966.         LD      (WWB+1),A
  967.         LD      IX,DCM
  968.         LD      BC,DCS
  969.         EX      AF,AF
  970.         LD      A,10
  971. WWW     CP      1
  972.         PUSH    AF
  973.         EX      AF,AF
  974.         POP     AF
  975.         JR      NZ,WW5
  976.         XOR     A
  977.         LD      (WWB+1),A
  978. WW5     PUSH    BC
  979.         LD      C,0
  980.         LD      E,(IX)
  981.         LD      D,(IX+1)
  982.         EXX
  983.         LD      E,(IX+2)
  984.         LD      D,(IX+3)
  985.         EXX
  986.         INC     IX
  987.         INC     IX
  988.         INC     IX
  989.         INC     IX
  990. WWM     CALL    SUBD
  991.         INC     C
  992.         JR      NC,WWM
  993.         DEC     C
  994.         CALL    ADDD
  995.         LD      A,C
  996.         OR      A
  997.         JR      Z,WWB
  998.         XOR     A
  999.         LD      (WWB+1),A
  1000.         JR      WW4
  1001. WWB     LD      C,0
  1002. WW4     LD      A,C
  1003.         POP     BC
  1004.         LD      (BC),A
  1005.         INC     BC
  1006.         EX      AF,AF
  1007.         DEC     A
  1008.         JR      NZ,WWW
  1009.         POP     IX
  1010.         RET
  1011.  
  1012. DCS     DEFM    "cooperfeet"
  1013.         DEFB    126,103,126 ;$
  1014.  
  1015. SUBDW   EXX
  1016.         LD      DE,0
  1017.         EXX
  1018. SUBD    OR      A
  1019.         SBC     HL,DE
  1020.         EXX
  1021.         SBC     HL,DE
  1022.         EXX
  1023.         RET
  1024.  
  1025. ADDDW   EXX
  1026.         LD      DE,0
  1027.         EXX
  1028. ADDD    ADD     HL,DE
  1029.         EXX
  1030.         ADC     HL,DE
  1031.         EXX
  1032.         RET
  1033.  
  1034. ;вывод байта
  1035. WBHL    LD      A,(HL)
  1036. WB      PUSHs;$
  1037.         EXX
  1038.         PUSH    DE
  1039.         PUSH    HL
  1040.         EXX
  1041.         CALL    WTRB
  1042.         LD      HL,DCS+7
  1043.         JR      WX
  1044. ;вывод слова
  1045. WW      PUSHs;$
  1046.         EXX
  1047.         PUSH    DE
  1048.         PUSH    HL
  1049.         EXX
  1050.         LD      A,(HL)
  1051.         INC     HL
  1052.         LD      H,(HL)
  1053.         LD      L,A
  1054.         CALL    WTRW
  1055.         LD      HL,DCS+5
  1056.         JR      WX
  1057. ;вывод двойного слова
  1058. WD      PUSHs;$
  1059.         EXX
  1060.         PUSH    DE
  1061.         EXX
  1062.         LD      E,(HL)
  1063.         INC     HL
  1064.         LD      D,(HL)
  1065.         INC     HL
  1066.         LD      C,(HL)
  1067.         INC     HL
  1068.         LD      B,(HL)
  1069.         PUSH    BC
  1070.         EXX
  1071.         EX      (SP),HL
  1072.         EXX
  1073.         EX      DE,HL
  1074.         CALL    WTRD
  1075.         LD      HL,DCS
  1076. WX      CALL    WORDHL
  1077.         EXX
  1078.         POP     HL
  1079.         POP     DE
  1080.         EXX
  1081.         POPs;$
  1082.         RET
  1083.  
  1084. ;==================Прямая траектория
  1085. LINini  LD      B,#15 ;инициализ. линии (DE->hl)
  1086.         LD      C,#1D
  1087.         LD      A,E
  1088.         SUB     L
  1089.         JR      NC,M1l
  1090.         NEG
  1091.         DEC     C
  1092. M1l     LD      L,A
  1093.         LD      A,D
  1094.         SUB     H
  1095.         JR      NC,M2l
  1096.         NEG
  1097.         DEC     B
  1098. M2l     LD      H,A
  1099.         CP      L
  1100.         JR      C,M3l
  1101.         LD      A,B
  1102.         LD      B,C
  1103.         LD      C,A
  1104.         LD      A,H
  1105.         LD      H,L
  1106.         LD      L,A
  1107. M3l     LD      A,B
  1108.         LD      (DENC),A
  1109.         LD      A,C
  1110.         LD      (INDC),A
  1111.         PUSH    DE
  1112.         LD      C,L
  1113.         LD      E,L
  1114.         LD      L,H
  1115.         CALL    DIVB
  1116.         LD      A,E
  1117.         LD      (SIMl+1),A
  1118.         LD      L,C
  1119.         LD      A,L
  1120.         LD      (LDl+1),A
  1121.         LD      A,D
  1122.         LD      (DECl+1),A
  1123.         OR      A
  1124.         LD      B,E
  1125.         RR      B
  1126.         INC     B
  1127.         OR      A
  1128.         RR      C
  1129.         POP     DE
  1130.         INC     L
  1131.         LD      A,L
  1132.         LD      (LIN_LN),A
  1133.         LD      (LIN_BC),BC
  1134.         LD      (LIN_XY),DE
  1135.         RET
  1136.  
  1137. LIN_BC  DEFW 0
  1138. LIN_XY  DEFW 0 ;тек.поз
  1139. LIN_LN  DEFB 0 ;длина
  1140.  
  1141. LINnxt  ;след. точка  (DE)
  1142.         LD BC,(LIN_BC)
  1143.         LD DE,(LIN_XY)
  1144. LINnx_
  1145. INDC    DEC     D
  1146.         LD      A,C
  1147. DECl    SUB     00
  1148.         LD      C,A
  1149.         JR      C,LDl
  1150.         DJNZ    L4RT
  1151. DENC    DEC     E
  1152. SIMl    LD      B,#FF
  1153.         JR      L4RT
  1154. LDl     ADD     A,#FF
  1155.         LD      C,A
  1156. L4RT    LD (LIN_BC),BC
  1157.         LD (LIN_XY),DE
  1158.         RET
  1159.  
  1160. ;--------------- Звук -----------------
  1161. EXS1    ;ракетн, диср, термоп, Г-пушка, взрывы
  1162.         DEFB 7,%11010010, 6,1, 4,99, 8,16, 10,16, 5,#C, 1,#F, 12,70, 13,1
  1163.         DEFB 255
  1164.  
  1165. SOU0    ;ракетница, диср
  1166.         DEFB 7,%11111010,  0,0, 4,33, 8,16, 10,16, 5,9, 1,#E, 12,130, 13,1
  1167.         DEFB 255
  1168.  
  1169. SOU4    ;термоп
  1170.         DEFB 7,%11111110,  0,0, 8,16, 1,#C, 12,144, 13,1
  1171.         DEFB 255
  1172.  
  1173. SOU5    ;Г-пушка
  1174.         DEFB 7,%11111010,  0,10, 4,15, 8,16, 10,16, 5,9, 1,9, 12,125, 13,1
  1175.         DEFB 255
  1176.  
  1177. EXS3    ;морт,руж,гарп,газ
  1178.         DEFB 7,%11010111, 6,17, 12,26, 13,1
  1179.         DEFB 255
  1180.  
  1181. SOU2    ; волн.р & м, MC-контр
  1182.         DEFB 7,%11010010, 6,1, 4,100, 8,16, 10,16, 5,12, 1,10, 12,20, 13,1
  1183.         DEFB 255
  1184.  
  1185. SOU6    ; гарп
  1186.         DEFB 7,%11010010, 6,15, 8,16, 10,16, 5,7, 1,7, 12,9, 13,1
  1187.         DEFB 255
  1188.  
  1189. TCH7    ;резаки
  1190.         DEFB 7,%11111010, 8,16, 10,16, 5,8, 1,9, 12,16, 13,1
  1191.         DEFB 255
  1192.  
  1193. TCH8    ;шок, аптечка, тент
  1194.         DEFB 7,%11111010, 8,16, 1,9, 12,3, 13,1
  1195.         DEFB 255
  1196.  
  1197. SOU9    ; газ.р
  1198.         DEFB 7,%11011010, 6,1, 4,10, 8,16, 10,16, 5,14, 1,14, 12,14, 13,1
  1199.         DEFB 255
  1200.  
  1201. BEP10   ;beep
  1202.         DEFB 7,%11111010, 4,200, 8,16, 10,16, 5,1, 1,1, 12,7, 13,1
  1203.         DEFB 255
  1204.        
  1205. tSOUND  DEFW SOU0,EXS1,SOU2,EXS3,SOU4,SOU5,SOU6,TCH7,TCH8,SOU9,BEP10
  1206.  
  1207. NOTA    DEFW 1;текущ нота
  1208. iSOUND  ;инициализ мелодии #A
  1209.         LD HL,tSOUND
  1210.         CALL WT
  1211.         LD (NOTA),HL
  1212.         RET
  1213.  
  1214. SOUNDn  CALL iSOUND ;играть звук А
  1215.  
  1216. ;форматы нот
  1217. ;(254) - конец ноты
  1218. ;(255) - конец мелодии
  1219. ;(0..15) - регистр, (N) - значение
  1220. pSOUND  ;вып. ноту мелодии
  1221.         LD HL,(NOTA)
  1222. pS0     LD A,(HL)
  1223.         CP 254
  1224.         JR Z,pS1
  1225.         RET NC
  1226.         LD BC,#FFFD
  1227.         OUT (C),A
  1228.         INC HL
  1229.         LD A,(HL)
  1230.         LD B,#BF
  1231.         OUT (C),A
  1232.         INC HL
  1233.         LD (NOTA),HL
  1234.         JR pS0
  1235. pS1     INC HL
  1236.         LD (NOTA),HL
  1237.         RET    
  1238.