?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. OTS     EQU #7F00
  2.  
  3. ;PROG ENDS #AFD2
  4. ;57*2=114 bytes UPPR period
  5. FD      EQU 32765
  6. TEAMLEN EQU 16
  7. COLOUR  EQU 7
  8. TITLCOL EQU 71
  9.  
  10. PGMASK  EQU #17
  11. BOMBWMS EQU #C000
  12. MASK    EQU #E000
  13. PGLMN   EQU #14
  14. LMNS    EQU #C000
  15. NLMN    EQU 15
  16.  
  17. WIDTH   EQU 93
  18. MASKWD  EQU 46
  19.  
  20. SCRHGT  EQU 17*8
  21. DOPRSZ  EQU 56
  22. UPPRSZ  EQU SCRHGT-DOPRSZ
  23. DOPRSCR EQU -DOPRSZ*4+#4981
  24.  
  25. MAPHGT  EQU 22*8
  26. MASKHGT EQU MAPHGT/2
  27. DOMAP   EQU 256-MAPHGT
  28. DOMASK  EQU DOMAP/2-4
  29.  
  30. MAPDO   EQU -WIDTH*DOMAP+#C000
  31. MASKDO  EQU -MASKWD*DOMASK+MASK
  32.  
  33. MASKSZ  EQU MAPHGT/2*MASKWD
  34.  
  35. IMTAB   EQU #BE00
  36. IMER    EQU #BFBF
  37. TEXTUR  EQU #5B00
  38.         ORG #6000
  39. FONT
  40. +       INCBIN "w64fnt
  41.        ORG #6200
  42. WATER
  43. +       INCBIN "water
  44. PROGPW  EQU #6300
  45.  
  46. TY4TOP  EQU #6600
  47. TY4LOW  EQU TY4TOP+256
  48. TABROW  EQU #6800
  49. DTNTAB EQU #6A00
  50. TABSIN  EQU #6A00
  51. TABY    EQU #6B00 ;256+256
  52. TAB4    EQU #6D00 ;512
  53.  
  54. LMNBUF  EQU #7000
  55. LMNSZ   EQU #800
  56.  
  57. TABROLL EQU #7A00
  58.  
  59. TPLACES EQU #6A00
  60. TXY     EQU TPLACES+#E0
  61.  
  62. TMASKLN EQU #7B00 ;512
  63.  
  64. WORMXY  EQU #6E00
  65. MAXWXY EQU 98
  66. ;TEAM,WORM,ENERGY,WEAPON,AIM,0
  67. CUWORMS EQU #6EA0 ;96
  68.  
  69. TITBUF  EQU #6F00
  70.         ORG #BF01
  71. BLANK   DS IMER-$
  72.         ORG #7D00
  73. FONT88
  74. +       INCBIN "w88?fnt
  75.        ORG LMNS,PGLMN
  76.        INCBIN "lmn
  77. GUG
  78. +       INCBIN "gug
  79.  
  80.        ORG OTS
  81.        CALL 7766
  82.        CALL NOTWICE
  83.        LD HL,TITBUF
  84.        LD (HL),L
  85. NACHALO
  86.        LD DE,MAPDO
  87.        LD BC,WIDTH
  88.        LD L,B
  89. MKTBROW LD H,'TABROW
  90.        LD (HL),E
  91.        INC H
  92.        LD (HL),D
  93.        BIT 6,D
  94.        JR NZ,$+6
  95.        LD (HL),#C0
  96.        DEC H
  97.        LD (HL),B
  98.        EX DE,HL
  99.        ADD HL,BC
  100.        EX DE,HL
  101.        INC L
  102.        JR NZ,MKTBROW
  103.        LD HL,TLAND
  104. MAPBAK  CALL MTITLE
  105.        LD HL,(STTIT+1)
  106.        CALL UTITLE
  107.        CALL MAPER
  108.        LD HL,TABY
  109.        LD DE,TABY+1
  110.        LD BC,511
  111.        LD (HL),L
  112.        LDIR
  113.        LD DE,#4060
  114.        LD L,C
  115.        LD B,SCRHGT/2
  116. MKTBDHL LD A,L
  117.        AND 7
  118.        JR NZ,$+4
  119.        LD (HL),32
  120.        INC L
  121.        LD (HL),D
  122.        INC D
  123.        CALL DDE
  124.        INC L
  125.        DJNZ MKTBDHL
  126.        CALL MAKPW
  127.        LD DE,#4060
  128.        LD HL,TY4TOP
  129.        LD B,128
  130. MKTY4   LD (HL),E
  131.        INC L
  132.        LD (HL),D
  133.        INC L
  134.        PUSH DE
  135.        LD D,'TY4TOP
  136.        LD A,L
  137.        AND 31
  138.        LD E,A
  139.        LD A,(DE)
  140.        INC E
  141.        LD (HL),A
  142.        INC L
  143.        LD A,(DE)
  144.        LD (HL),A
  145.        POP DE
  146.        CALL DDE
  147.        INC HL
  148.        DJNZ MKTY4
  149.        LD L,B
  150.        LD DE,MASKDO
  151.        LD C,MASKWD
  152. MKTBMSK LD H,'TMASKLN
  153.        LD (HL),E
  154.        INC H
  155.        LD (HL),D
  156.        LD A,L
  157.        CP -8
  158.        JR NC,$+6
  159.        BIT 5,D
  160.        JR NZ,$+7
  161.        LD (HL),'BLANK
  162.        DEC H
  163.        LD (HL),BLANK
  164.        RRA
  165.        JR NC,$+5
  166.        EX DE,HL
  167.        ADD HL,BC
  168.        EX DE,HL
  169.        INC L
  170.        JR NZ,MKTBMSK
  171.        LD H,'TABY
  172. MKTDHLL LD A,L
  173.        RLA
  174.        RLA
  175.        AND #E0
  176.        SUB -96
  177.        LD (HL),A
  178.        INC L
  179.        JR NZ,MKTDHLL
  180.        LD H,'TABSIN
  181.        XOR A
  182.        LD B,22
  183.        DB "w#
  184.         ADD A,B
  185.         DJNZ $-3
  186.         CALL INIMOUS
  187.         LD HL,MESHOM
  188.         CALL MTITLE
  189.         CALL PASCOL
  190.         CALL SETTIM
  191.         CALL ENPANEL
  192.         LD HL,TABROLL
  193.         LD C,1
  194. MKTRL   LD A,L
  195.         AND 31
  196.         JR NZ,$+4
  197.         RRC C
  198.         LD (HL),C
  199.         INC L
  200.         JR NZ,MKTRL
  201.         LD HL,UPPR
  202.         LD DE,#4061
  203.         LD B,UPPRSZ
  204.         CALL MAKEPR
  205.         LD (DOPR+1),HL
  206.         CALL READER
  207.        LD HL,(MOUSE+1)
  208.        LD A,L
  209.        AND 3
  210.        XOR 1
  211.        INC A
  212.        XOR 18
  213.        LD BC,FD
  214.        OUT (C),A
  215.       XOR A
  216.       LD B,A
  217.        LD C,H
  218.        LD A,H
  219.        RLCA
  220.        ADD A,UPPRSZ
  221.       LD H,A
  222.        LD A,L
  223.        RRA
  224.       SRL A
  225.       LD L,H
  226.        LD H,'TABROW
  227.       ADD A,(HL)
  228.       LD LY,A
  229.       INC H
  230.       LD A,B
  231.       ADC A,(HL)
  232.       LD HY,A
  233.       LD A,60
  234.       SUB C
  235.       JR NC,DOPR_-7
  236.       SBC A,C
  237.       SUB C
  238.       LD C,A
  239.       LD L,C
  240.       LD H,B
  241.       DB ")))
  242.       DUP 2
  243.       ADD HL,BC
  244.       DB ")
  245.       EDUP
  246.       DB 1,0
  247.        LD (DOPRHL+1),HL
  248.        INC HL
  249.        CALL READER
  250.       DB 1
  251.       ADD HL,BC
  252.       LD (DOPRA+1),HL
  253.       LD (HL),#DD
  254.       INC HL
  255.       INC HL
  256.       LD (HL),#C9
  257. DOPR_  LD BC,WIDTH
  258.        INC HL
  259.        LD DE,DOPRSCR
  260.        LD B,DOPRSZ
  261.        CALL MAKEPR
  262.        LD BC,-57*90-1
  263.        ADD HL,BC
  264. DOPRHL  LD (0),HL
  265.        LD A,'IMTAB
  266.         CALL MAKINT
  267.         LD IX,-2
  268.         ADD IX,SP
  269.  
  270.        CALL PRnrg
  271.  
  272. START   EI
  273.         HALT
  274.        DI
  275.        LD A,3
  276.        OUT (-2),A
  277.         LD A,-64
  278.         LD HY,'TY4TOP
  279.        CALL WORMS
  280.       LD A,7
  281.       OUT (-2),A
  282. ;        CALL CURSOR
  283. STCNT   LD A,1
  284.        DEC A
  285.        JR NZ,STNOTIT
  286. STTIT   LD HL,TITBUF
  287.        CP (HL)
  288.        CALL NZ,UTITLE
  289.        JR $+5
  290. STNOTIT LD (STCNT+1),A
  291.       LD A,5
  292.       OUT (-2),A
  293. DOPR    CALL 0
  294. DOPRA   LD HL,0
  295.        LD (HL),#FD
  296.        INC HL
  297.        INC HL
  298.        LD (HL),#E1
  299.       LD A,2
  300.       OUT (-2),A
  301.        CALL PRWAT
  302.       LD BC,999
  303.       LD D,B
  304. NOLDIR LDIR
  305.       LD A,3
  306.       OUT (-2),A
  307.        XOR A
  308.        LD HY,'TY4LOW
  309.         CALL WORMS
  310.        XOR A
  311.        OUT (-2),A
  312. ;        CALL CURSOR
  313.         CALL MOUSE
  314.        LD A,4
  315.        OUT (-2),A
  316.         CALL WRMOVE
  317.        LD A,7
  318.        OUT (-2),A
  319. ;        CALL MANAGE
  320.         CALL TIME
  321.        LD A,1
  322.        OUT (-2),A
  323.         CALL CLRTOP
  324.         CALL UPPRU
  325.        XOR A
  326.        OUT (-2),A
  327.        CALL 8020
  328.        RET NC
  329.         LD A,127
  330.         IN A,(-2)
  331.         RRA
  332. ;        CALL NC,FIRE
  333.        LD A,-3
  334.        IN A,(-2)
  335.        BIT 1,A
  336.        CALL Z,SETWMS
  337.        LD A,#FB
  338.        IN A,(-2)
  339.        BIT 3,A
  340.        JP Z,NACHALO
  341.         JP START
  342.  
  343. NOTWICE HALT
  344.         LD A,(23672)
  345.         LD HL,BUF
  346.         LD DE,#4000
  347.         LD BC,#1000
  348.         LDIR
  349.         CP (IY+62)
  350.         LD A,B
  351.         JR Z,$+5
  352.         LD (NOLDIR),A
  353.         LD B,11
  354.         LDIR
  355.         LD HL,TAB4
  356.         LD DE,#C000
  357.         LD BC,64
  358. MAKET4  LD (HL),E
  359.         INC H
  360.         LD (HL),D
  361.         DEC H
  362.         EX DE,HL
  363.         ADD HL,BC
  364.         EX DE,HL
  365.         INC L
  366.         JR NZ,MAKET4
  367.         LD DE,TEXTUR
  368.         LD HL,#4020
  369.         LD B,32
  370. GPATRN  PUSH BC
  371.         LD BC,4
  372.         LDIR
  373.         LD B,4
  374. GP1     DEC L
  375.         LD (HL),C
  376.         DJNZ GP1
  377.         CALL DHL
  378.         POP BC
  379.         DJNZ GPATRN
  380.         LD A,PGMASK
  381.         CALL OUTME
  382.         LD H,'BOMBWMS
  383. GWMSMIR LD C,64 ;SPRITES QUANTITY
  384.        LD E,0
  385. GWMS0   LD L,E
  386.        LD D,64
  387.        PUSH HL
  388.        LD B,8
  389. GWMS1   PUSH BC
  390.        PUSH HL
  391.        LD A,(DE)
  392.        LD C,1
  393.        RRCA
  394.        RL C
  395.        JR NC,$-3
  396.        BIT 0,B
  397.        LD B,A
  398.        LD A,C
  399.        LD (DE),A
  400.        LD C,0
  401.        CALL Z,GETSUB
  402.        CALL NZ,GETSUB2
  403.        POP HL
  404.        INC D
  405.        INC H
  406.        INC H
  407.        POP BC
  408.        DJNZ GWMS1
  409.        POP HL
  410.        INC E
  411.        DEC C
  412.        JR NZ,GWMS0
  413.        LD A,H
  414.        LD H,'BOMBWMS+16
  415.         CP H
  416.         JR NZ,GWMSMIR
  417.         RET
  418. GETSUB  SRL B
  419.         RR C
  420.         SRL B
  421.         RR C
  422.         LD (HL),B
  423.         INC H
  424.         LD (HL),C
  425.         DEC H
  426.         LD A,L
  427.         ADD A,64
  428.         LD L,A
  429.         JR NC,GETSUB
  430.         XOR A
  431.         RET
  432. GETSUB2 SRL B
  433.         RR C
  434.         SRL B
  435.         RR C
  436.         LD (HL),C
  437.         INC H
  438.         LD (HL),B
  439.         DEC H
  440.         LD A,L
  441.         ADD A,64
  442.         LD L,A
  443.         JR NC,GETSUB2
  444.         RET
  445.  
  446. MAKINT  DI
  447.         LD BC,256
  448.         LD H,A
  449.         LD D,A
  450.         LD E,B
  451.         LD L,C
  452.         LD (HL),IMER
  453.         LDIR
  454.         LD L,(HL)
  455.         LD H,L
  456.         LD (HL),251
  457.         INC HL
  458.         LD (HL),201
  459.         LD I,A
  460.         IM 2
  461.         EI
  462.         RET
  463.  
  464. MAKEPR  PUSH BC
  465.         LD (HL),253
  466.         INC HL
  467.         LD (HL),249
  468.         INC HL
  469.         LD B,9
  470. MPR0    LD (HL),225
  471.         INC HL
  472.         LD (HL),34
  473.         INC HL
  474.         LD (HL),E
  475.         INC HL
  476.         LD (HL),D
  477.         INC HL
  478.         INC E
  479.         INC E
  480.         DJNZ MPR0
  481.         CALL READER
  482.        POP HL
  483.        POP DE
  484.        POP AF
  485.        EXX
  486.        POP BC
  487.        POP DE
  488.        POP HL
  489.        DEFB 49,0
  490.         LD A,E
  491.         SUB -12
  492.         LD (HL),A
  493.         SUB 30
  494.         LD E,A
  495.         INC HL
  496.         LD (HL),D
  497.         INC HL
  498.         CALL READER
  499.        PUSH HL
  500.        PUSH DE
  501.        PUSH BC
  502.        EXX
  503.        PUSH AF
  504.        PUSH DE
  505.        PUSH HL
  506.        ADD IY,BC
  507.        NOP
  508.         CALL DDE
  509.         POP BC
  510.         DJNZ MAKEPR
  511.         DEC HL
  512.         DEC HL
  513.         LD (HL),221
  514.         INC HL
  515.         LD (HL),249
  516.         INC HL
  517.         LD (HL),201
  518.         INC HL
  519.         RET
  520.  
  521. MAPER   LD A,22
  522.         CALL OUTME
  523.         LD HL,GUG
  524.         LD (PRGUG+1),HL
  525.         LD HL,(23670)
  526.         LD (MAPERND+1),HL
  527.         CALL MAPERPP
  528.         LD HL,#FFEF
  529.         LD B,WIDTH
  530.         XOR A
  531.         OR (HL)
  532.         DEC HL
  533.         DJNZ $-2
  534.         JR Z,MAPER
  535.         CALL PRGUG
  536.         LD A,16
  537.         CALL OUTME
  538. MAPERND LD HL,0
  539.         LD (23670),HL
  540.         CALL MAPERPP
  541.         CALL PRGUG
  542.         LD HL,#C000
  543.         LD DE,WIDTH
  544.         LD C,E
  545. MAPERF  PUSH HL
  546.         LD B,MAPHGT
  547.         XOR A
  548. MAPERF0 XOR (HL)
  549.         LD (HL),A
  550.         ADD HL,DE
  551.         DJNZ MAPERF0
  552.         POP HL
  553.         INC L
  554.         DEC C
  555.         JR NZ,MAPERF
  556.         CALL PRGUG
  557.         LD HL,#C001
  558.         LD DE,BUF
  559.         PUSH DE
  560.         LD B,88
  561. MAPER41 PUSH BC
  562.         LD B,MASKWD
  563. MAPER42 LD A,(HL)
  564.         DUP 4
  565.         RLA
  566.         RLA
  567.         RL C
  568.         EDUP
  569.         INC HL
  570.         LD A,(HL)
  571.         DUP 4
  572.         RLA
  573.         RLA
  574.         RL C
  575.         EDUP
  576.         INC HL
  577.         LD A,C
  578.         LD (DE),A
  579.         INC DE
  580.         DJNZ MAPER42
  581.         LD C,WIDTH-MASKWD*2
  582.         ADD HL,BC
  583.         POP BC
  584.         DJNZ MAPER41
  585.         CALL PRGUG
  586.  
  587.         LD HL,#C000
  588.         LD DE,WIDTH
  589.         LD B,E
  590.         LD C,D
  591. MAKE4ST PUSH BC
  592.         PUSH HL
  593.         LD B,'TEXTUR
  594. MAKE4SA LD A,(BC)
  595.        AND (HL)
  596.        LD (HL),A
  597.        LD A,C
  598.        SUB -4
  599.        AND 127
  600.        LD C,A
  601.        ADD HL,DE
  602.        JR NC,MAKE4SA
  603.        POP HL
  604.        INC L
  605.        POP BC
  606.        INC C
  607.        RES 2,C
  608.        DJNZ MAKE4ST
  609.        CALL PRGUG
  610.        LD A,22
  611.        CALL OUTME
  612.        LD (MAPERSP+1),SP
  613.        DI
  614.        LD SP,WIDTH
  615.        LD HL,#C000
  616.        LD C,128
  617. MAPERG  LD A,C
  618.        RRC C
  619.        OR C
  620.        LD B,A
  621.        LD (MAPERGQ+1),HL
  622. MAPERG0 LD A,(HL)
  623.        AND C
  624.        JR NZ,MAPERGC
  625. MAPERGA ADD HL,SP
  626.        JR NC,MAPERG0
  627.        JR MAPERGQ
  628. MAPERGC XOR (HL)
  629.        LD (HL),A
  630.        LD DE,SPRGRND
  631.        SBC HL,SP
  632.        JR MAPERGB
  633. MAPERG1 LD A,(HL)
  634.        AND C
  635.        JR NZ,MAPERGA
  636. MAPERGB LD A,(DE)
  637.        OR A
  638.        JR Z,MAPERGE
  639.        AND B
  640.        OR (HL)
  641.        LD (HL),A
  642.        INC DE
  643. MAPERGN ADD HL,SP
  644.        JR NC,MAPERG1
  645.        JR MAPERGQ
  646. MAPERG2 LD A,(HL)
  647.        AND C
  648.        JR NZ,MAPERGA
  649. MAPERGE ADD HL,SP
  650.        JR NC,MAPERG2
  651. MAPERGQ LD HL,0
  652.        RRC C
  653.        JR NC,MAPERG
  654.        INC L
  655.        LD A,L
  656.        CP WIDTH
  657.        JR NZ,MAPERG
  658. MAPERSP LD SP,0
  659.        CALL PRGUG
  660.  
  661.        LD HL,MASKSZ+BUF
  662.        LD BC,MASKWD*256+255
  663.        LD (HL),C
  664.        INC HL
  665.        DJNZ $-2
  666.        LD C,3
  667. LMN0    LD A,10
  668.        CALL RNDA
  669.        ADD A,C
  670.        CP MASKWD-5
  671.        JR NC,LMNQ
  672.        LD C,A
  673.        PUSH BC
  674.        LD A,PGLMN
  675.        CALL OUTME
  676.        LD A,NLMN
  677.        CALL RNDA
  678.        SCF
  679.        RLA
  680.        POP BC
  681.        CALL PRLMN
  682.        JR LMN0
  683. LMNQ
  684.  
  685.        LD A,PGMASK
  686.        CALL OUTME
  687.        POP HL
  688.        LD DE,MASK
  689.        LD BC,MASKSZ
  690.        LDIR
  691.        XOR A
  692.        LD DE,TPLACES
  693.        LD (DE),A
  694.        INC E
  695.        JR NZ,$-2
  696.        DEC HL
  697.        LD LX,C
  698.        LD C,64
  699.        LD E,MASKWD*4-5
  700. SETF    RLC C
  701.        RLC C
  702.        JR NC,$+3
  703.        DEC HL
  704.        PUSH DE
  705.        PUSH HL
  706.        LD DE,-MASKWD
  707.        LD B,MASKHGT-1
  708. SETF0   ADD HL,DE
  709.        LD A,C
  710.        AND (HL)
  711.        JR NZ,SETF1
  712.        DJNZ SETF0
  713.        JR SETFQ
  714. SETF1   ADD HL,DE
  715.        DEC B
  716.        AND (HL)
  717.        JR NZ,SETF1
  718.        INC LX
  719. SETFQ   POP HL
  720.        POP DE
  721.        LD A,B
  722.        LD (DE),A
  723.        DEC E
  724.        JR NZ,SETF
  725.        LD A,16
  726.        CALL OUTME
  727.        LD A,LX
  728.        LD BC,#10FF ;B=QUANTITY OF WORMS
  729.        INC C
  730.        SUB B
  731.        JR NC,$-2
  732.        LD A,C
  733.        CP 7
  734.        JR NC,SETXO
  735.        POP HL
  736.        LD HL,MESWHE
  737.        JP MAPBAK
  738. SETXO
  739. ;C=WIDTH OF WORM PLACE
  740.        EXX
  741.        LD HL,NAMES
  742.        EXX
  743.        LD HL,TXY
  744. SETX    LD B,C
  745.        SRL B
  746.        PUSH BC
  747. SETX0   INC E
  748.        LD A,(DE)
  749.        OR A
  750.        JR Z,SETX0
  751.        DJNZ SETX0
  752.        LD (HL),E
  753.        INC L
  754.        LD A,(DE)
  755.        SUB -DOMASK
  756.        RLCA
  757.        LD (HL),A
  758.        LD C,E
  759.        SRL C
  760.        SUB 13
  761.        LD B,A
  762.        CP DOMAP
  763.        LD A,150
  764.        CALL NC,SPRINT
  765.        POP BC
  766.        LD A,C
  767.        SUB B
  768.        LD B,A
  769. SETX1   INC E
  770.        LD A,(DE)
  771.        OR A
  772.        JR Z,SETX1
  773.        DJNZ SETX1
  774.        INC L
  775.        JR NZ,SETX
  776.        CALL SETWMS
  777.        CALL PRGUG
  778.  
  779.        LD HL,#FFEF
  780. MAK4SOR LD A,22
  781.        CALL OUTME
  782.        LD DE,BUF+#FFB
  783.        LD BC,#FFC
  784.        PUSH HL
  785.        PUSH DE
  786.        PUSH BC
  787.        LDDR
  788.        LD A,16
  789.        CALL OUTME
  790.        POP BC
  791.        POP DE
  792.        EX (SP),HL
  793.        PUSH BC
  794.        PUSH DE
  795.        PUSH HL
  796. M4SOR   LD A,(DE)
  797.        OR (HL)
  798.        LD (HL),A
  799.        LDD
  800.        JP PE,M4SOR
  801.        POP DE
  802.        POP HL
  803.        POP BC
  804.        LD A,19
  805. M4SCR   PUSH BC
  806.        PUSH DE
  807.        PUSH HL
  808.        PUSH BC
  809.        CALL OUTME
  810.        POP BC
  811.        PUSH AF
  812. M4SRL   DUP 11
  813.        RL (HL)
  814.        EX AF,AF'
  815.         RL (HL)
  816.         EX AF,AF'
  817.        LDD
  818.        EDUP
  819.        JP PE,M4SRL
  820.        POP AF
  821.        POP HL
  822.        POP DE
  823.        POP BC
  824.        SUB -3
  825.        AND 23
  826.        CP 20
  827.        JR NZ,M4SCR
  828.        POP HL
  829.        BIT 6,H
  830.        JP NZ,MAK4SOR
  831. PRGUG   LD HL,0
  832.        LD A,PGLMN
  833.        CALL OUTME+3
  834.        LD DE,#482D
  835.        LD B,40
  836. PRGUG0  LD A,E
  837.        DUP 6
  838.        LDI
  839.        EDUP
  840.        LD E,A
  841.        CALL DDE
  842.        DJNZ PRGUG0
  843.        LD (PRGUG+1),HL
  844. PRGA    LD A,0
  845. OUTME   LD (PRGA+1),A
  846.        LD BC,FD
  847.        OUT (C),A
  848.        RET
  849.  
  850. SPRINT  PUSH DE
  851.        PUSH HL
  852.        PUSH AF
  853.        LD H,'TABROW
  854.         LD L,B
  855.         LD A,(HL)
  856.         INC H
  857.         LD H,(HL)
  858.         ADD A,C
  859.         LD L,A
  860.         JR NC,$+3
  861.         INC H
  862.         PUSH HL
  863.         LD DE,WIDTH
  864.         LD B,6
  865. SPRINTX PUSH HL
  866.         EXX
  867.         LD A,(HL)
  868.         INC HL
  869.         SUB 32
  870.         RLA
  871.         RLA
  872.         RLA
  873.         LD E,A
  874.         LD A,(HL)
  875.         CALL SPRINTP
  876.         INC HL
  877.         EXX
  878.         POP HL
  879.         INC HL
  880.         DJNZ SPRINTX
  881.         POP HL
  882.         POP AF
  883.         LD BC,WIDTH*7
  884.         ADD HL,BC
  885.         LD BC,#2F64
  886.         INC B
  887.         SUB C
  888.         JR NC,$-2
  889.         ADD A,C
  890.         PUSH AF
  891.         PUSH HL
  892.         OR A
  893.         LD A,B
  894.         EXX
  895.         LD E,0
  896.         CALL SPRINTP
  897.         EXX
  898.         POP HL
  899.         INC HL
  900.         POP AF
  901.         LD BC,10
  902.         INC B
  903.         SUB C
  904.         JR NC,$-2
  905.         PUSH AF
  906.         LD A,B
  907.         EXX
  908.         SUB -15
  909.         RLCA
  910.         RLA
  911.         RLA
  912.         LD E,A
  913.         POP AF
  914.         SUB -58
  915.         CALL SPRINTP
  916.         EXX
  917.         POP HL
  918.         POP DE
  919.         RET
  920.  
  921. SPRINTP PUSH HL
  922.         LD D,'FONT/2
  923.        LD H,D
  924.        RL D
  925.        SUB 32
  926.        RLA
  927.        RLA
  928.        LD L,A
  929.        ADD HL,HL
  930.        LD B,7
  931. SPRINT0 LD A,(DE)
  932.        INC E
  933.        RLCA
  934.        RLCA
  935.        RLCA
  936.        RLCA
  937.        OR (HL)
  938.        INC L
  939.        EXX
  940.        XOR (HL)
  941.        LD (HL),A
  942.        ADD HL,DE
  943.        EXX
  944.        DJNZ SPRINT0
  945.        POP HL
  946.        RET
  947.  
  948. PRLMN   LD HL,LMNS
  949. PRLMN0  LD E,(HL)
  950.        INC HL
  951.        LD D,(HL)
  952.        INC HL
  953.        DEC A
  954.        JR Z,PRLMNO
  955.        ADD HL,DE
  956.        JR PRLMN0
  957. PRLMNO  LD D,(HL)
  958.        INC HL
  959.        LD E,(HL)
  960.        INC HL
  961.  
  962.        PUSH HL
  963. PRLMN00 LD HL,BUF
  964.        XOR A
  965.        LD B,A
  966.        ADD HL,BC
  967.        LD B,E
  968.        PUSH DE
  969.        LD DE,MASKWD
  970.        OR (HL)
  971.        ADD HL,DE
  972.        DJNZ $-2
  973.        JR NZ,PRLMNhi
  974.        INC B
  975.        OR (HL)
  976.        ADD HL,DE
  977.        JR Z,$-3
  978.        POP DE
  979.        LD A,D
  980.        DEC A
  981.        RRA
  982.        NEG
  983.        ADD A,C
  984.        LD C,A
  985.        JR PRLMNok
  986.  
  987. PRLMNhi INC C
  988.        POP DE
  989.        LD A,C
  990.        CP MASKWD-5
  991.        JR C,PRLMN00
  992.        POP AF
  993.        RET
  994.  
  995. PRLMNok XOR A
  996.        POP HL
  997.  
  998.        PUSH BC
  999.        OR B
  1000.        PUSH HL
  1001.        PUSH DE
  1002.        LD HL,BUF
  1003.        LD DE,MASKWD
  1004.        JR Z,$+5
  1005.        ADD HL,DE
  1006.        DJNZ $-1
  1007.        ADD HL,BC
  1008.        POP BC
  1009.        POP DE
  1010. PRLMN1  PUSH BC
  1011.        PUSH HL
  1012.        LD A,(DE)
  1013.        OR (HL)
  1014.        LD (HL),A
  1015.        INC HL
  1016.        INC DE
  1017.        DJNZ $-5
  1018.        POP HL
  1019.        LD C,MASKWD
  1020.        ADD HL,BC
  1021.        POP BC
  1022.        DEC C
  1023.        JR NZ,PRLMN1
  1024.        LD HL,3
  1025.        ADD HL,DE
  1026.        LD DE,LMNBUF
  1027.        PUSH DE
  1028.        LD BC,LMNSZ
  1029.        LDIR
  1030.        POP HL
  1031.        LD D,(HL)
  1032.        INC HL
  1033.        LD E,(HL)
  1034.        INC HL
  1035.        POP BC
  1036.        PUSH BC
  1037.        XOR A
  1038.        OR B
  1039.        PUSH HL
  1040.        PUSH DE
  1041.        LD HL,#C000
  1042.        LD DE,WIDTH*2
  1043.        JR Z,$+5
  1044.        ADD HL,DE
  1045.        DJNZ $-1
  1046.        ADD HL,BC
  1047.        ADD HL,BC
  1048.        LD A,16
  1049.        CALL OUTME
  1050.        POP BC
  1051.        POP DE
  1052. PRLMN2  PUSH BC
  1053.        PUSH HL
  1054.        LD A,(DE)
  1055.        INC HL
  1056.        OR (HL)
  1057.        LD (HL),A
  1058.        INC DE
  1059.        DJNZ $-5
  1060.        POP HL
  1061.        LD C,WIDTH
  1062.        ADD HL,BC
  1063.        POP BC
  1064.        DEC C
  1065.        JR NZ,PRLMN2
  1066.        LD A,B
  1067.        POP BC
  1068.        ADD A,C
  1069.        LD C,A
  1070.        RET
  1071.  
  1072. MAPERPP LD HL,#C000
  1073.        LD DE,#C001
  1074.        LD BC,#3FFF
  1075.        LD (HL),L
  1076.        LDIR
  1077.        CALL FILLDTN
  1078.        LD E,0 ;SCREEN (X) NO. -1=NOPRINT
  1079.        LD C,E
  1080.        CALL RND
  1081.        AND 127
  1082.        SUB -48
  1083.        LD B,A
  1084.        LD HL,DTNTAB+8   ;14
  1085. MAPER0  LD A,2;4
  1086.        CALL RNDA
  1087.        CP 1;2
  1088.        SBC A,0;1
  1089.        ADD A,L
  1090.        LD D,L
  1091.        LD L,A
  1092.        CALL TESTL
  1093.        LD A,D
  1094.        SUB 5
  1095.        LD D,A
  1096.        LD A,L
  1097.        SUB 5
  1098.        XOR D
  1099.        AND 8
  1100.        CALL NZ,PLOT
  1101.        PUSH HL
  1102.        SLA L
  1103.        LD A,(HL)
  1104.        DEC A
  1105.        POP HL
  1106.        LD A,5
  1107.        JP P,$+5
  1108.        LD A,3
  1109.        CALL RNDA
  1110.        INC A
  1111.        LD D,A
  1112. MAPER1  PUSH HL
  1113.        SLA L
  1114.        LD A,(HL)
  1115.        OR A
  1116.        CALL NZ,PLOT
  1117.        LD A,(HL)
  1118.        CP 128
  1119.        JR C,MAPERFW
  1120.        ADD A,C
  1121.        LD C,A
  1122.        JR C,MAPERBW
  1123.        DEC E
  1124.        JR MAPERBW
  1125. MAPERFW CP 2
  1126.        JR C,MAPERN2
  1127.        INC C
  1128.        JR NZ,$+3
  1129.        INC E
  1130.        CALL PLOT
  1131.        LD A,1
  1132. MAPERN2 ADD A,C
  1133.        LD C,A
  1134.        JR NC,$+3
  1135.        INC E
  1136. MAPERBW INC L
  1137.        LD A,(HL)
  1138.        ADD A,B
  1139.        POP HL
  1140.        CP 208
  1141.        JR C,MAPERNY
  1142.        LD A,17
  1143.        SUB L
  1144.        LD L,A
  1145.        PUSH HL
  1146.        SLI L
  1147.        LD A,(HL)
  1148.        ADD A,B
  1149.        POP HL
  1150. MAPERNY LD B,A
  1151.        DEC D
  1152.        JR NZ,MAPER1
  1153.        LD A,E
  1154.        CP 4 ;LAST SCREEN
  1155.        JR NZ,MAPER0
  1156.        RET
  1157.  
  1158. TESTL   LD A,L
  1159.        CP 2
  1160.        JR NC,TESTLNC
  1161.        SUB -3
  1162.        LD L,A
  1163.        RET
  1164. TESTLNC CP 16
  1165.        RET C
  1166.        SUB 3
  1167.        LD L,A
  1168.        RET
  1169.  
  1170. FILLDTN LD HL,DIRECTN
  1171.        LD DE,DTNTAB
  1172.        LD BC,32
  1173.        LDIR
  1174.        RET
  1175.  
  1176. DIRECTN DW #100,#1FF,#FF,#FF
  1177.        DW -1,#FF00,#FF01,#FF02
  1178.        DW 2,2,#102,#101,#100,#1FF,#FF,#FF
  1179.  
  1180. RND     PUSH BC
  1181.        PUSH HL
  1182.        LD HL,(23670)
  1183.        LD BC,537
  1184.        ADD HL,BC
  1185.        LD (23670),HL
  1186.        PUSH HL
  1187.        LD A,L
  1188.        AND 15
  1189.        SUB -10
  1190.        LD L,H
  1191.        LD H,A
  1192.        LD A,(HL)
  1193.        POP HL
  1194.        RES 7,H
  1195.        RES 6,H
  1196.        XOR (HL)
  1197.        POP HL
  1198.        POP BC
  1199.        RET
  1200.  
  1201. RNDA    PUSH BC
  1202.        LD C,A
  1203.        CALL RND
  1204.        SUB C
  1205.        JR NC,$-1
  1206.        ADD A,C
  1207.        POP BC
  1208.        RET
  1209.  
  1210. SPRGRND DB #29,-1,#DB,#7E,#D5,#AA,0
  1211.      ;DB #52,-1,#BF,-4,#AB,#55,0
  1212.  
  1213. PLOT    LD A,B
  1214.        SUB MAPHGT
  1215.        RET NC
  1216.        PUSH BC
  1217.        PUSH HL
  1218.        LD H,'TABROW
  1219.         LD L,A
  1220.         LD A,C
  1221.         AND -8
  1222.         ADD A,E
  1223.         RRCA
  1224.         RRCA
  1225.         RRCA
  1226.         CP WIDTH
  1227.         JR NC,PLOTQ
  1228.         ADD A,(HL)
  1229.         INC H
  1230.         LD H,(HL)
  1231.         LD L,A
  1232.         JR NC,$+3
  1233.         INC H
  1234.         LD A,C
  1235.         AND 7
  1236.         INC A
  1237.         LD B,A
  1238.         LD A,1
  1239.         RRCA
  1240.         DJNZ $-1
  1241.         XOR (HL)
  1242.         LD (HL),A
  1243. PLOTQ   POP HL
  1244.         POP BC
  1245.         RET
  1246.  
  1247. MTCL    LD C,32
  1248.         XOR A
  1249. MTCL0   LD D,80
  1250.         LD B,8
  1251.         LD (DE),A
  1252.         INC D
  1253.         DJNZ $-2
  1254.         INC E
  1255.         DEC C
  1256.         JR NZ,MTCL0
  1257.         RET
  1258.  
  1259. MTIDEAD LD C,13
  1260.         LD A,32
  1261. FNDLF   DEC HL
  1262.         DEC C
  1263.         CP (HL)
  1264.         JR Z,FNDLF
  1265.         LD A,C
  1266.         LD DE,MESDIE+11
  1267.         LDDR
  1268.         EX DE,HL
  1269.         ADD A,14
  1270.         LD (HL),A
  1271. MTITLE  LD DE,TITBUF
  1272.         LD B,(HL)
  1273.         INC B
  1274. MTITLEC LD A,(HL)
  1275.         LD (DE),A
  1276.         INC HL
  1277.         INC E
  1278.         DJNZ MTITLEC
  1279.         EX DE,HL
  1280.         LD (HL),B
  1281.         LD (MTITLE+1),HL
  1282.         RET
  1283.  
  1284. UTITLE  LD E,#80
  1285.         CALL MTCL
  1286.         PUSH HL
  1287.         CALL PRBT
  1288.         POP HL
  1289.         LD A,15
  1290.         LD (STCNT+1),A
  1291.         LD C,(HL)
  1292.         INC L
  1293.         LD A,32
  1294.         SUB C
  1295.        RET C
  1296.         SCF
  1297.         RRA
  1298.         LD E,A
  1299. MT0     LD A,(HL)
  1300.         INC L
  1301.         CP 32
  1302.         JR Z,MTSPC
  1303.         LD D,80
  1304.         PUSH HL
  1305.         LD H,'FONT88/4
  1306.        RLCA
  1307.        LD L,A
  1308.        DB "))
  1309.        LD B,8
  1310. MT1     LD A,(HL)
  1311.        LD (DE),A
  1312.        INC D
  1313.        INC L
  1314.        DJNZ MT1
  1315.        LD D,90
  1316.        LD A,TITLCOL
  1317.        LD (DE),A
  1318.        POP HL
  1319. MTSPC   INC E
  1320.        DEC C
  1321.        JR NZ,MT0
  1322.        LD (STTIT+1),HL
  1323.        RET
  1324.  
  1325. PASCOL  LD HL,#5860
  1326.        LD DE,COLOUR
  1327.        LD C,17
  1328. PASC0L  LD (HL),D
  1329.        LD B,31
  1330.        INC L
  1331.        LD (HL),E
  1332.        DJNZ $-2
  1333.        LD (HL),D
  1334.        INC HL
  1335.        DEC C
  1336.        JR NZ,PASC0L
  1337.        RET
  1338.  
  1339. ENPANEL LD HL,#4000
  1340.        LD DE,#4001
  1341.        LD BC,#7FF
  1342.        LD (HL),L
  1343.        LDIR
  1344.        LD A,6
  1345.        LD HL,#5800
  1346.        LD (HL),A
  1347.        INC L
  1348.        LD DE,#5802
  1349.        LD C,#5D
  1350.        LD (HL),67
  1351.        LDIR
  1352.        LD (DE),A
  1353.        LD H,A
  1354.        LD L,A
  1355.        LD (#581F),HL
  1356.        LD (#583F),HL
  1357.        LD HL,#4747
  1358.        LD (#580F),HL
  1359.        LD (#582F),HL
  1360.        LD (#584F),HL
  1361.        LD HL,#4401
  1362.        CALL ENRAMKA
  1363.        LD HL,#4411
  1364.        CALL ENRAMKA
  1365.        LD HL,#4601
  1366.        CALL ENFAKE
  1367.        INC H
  1368.        INC H
  1369.        CALL ENFAKE
  1370.        LD HL,#4611
  1371.        CALL ENFAKE
  1372.        INC H
  1373.        INC H
  1374.        CALL ENFAKE
  1375.        LD HL,CUTEAMS
  1376.        LD DE,#4102
  1377.        CALL PRTEAM
  1378.        LD DE,#4042
  1379.        CALL PRTEAM
  1380.        LD DE,#411E
  1381.        CALL PRTEAM
  1382.        LD DE,#405E
  1383.        CALL PRTEAM
  1384.  
  1385.        LD HL,#4000
  1386.        CALL PRSTAR
  1387.        LD HL,#401F
  1388.        CALL PRSTAR
  1389.        LD HL,#4720
  1390.        CALL PRSTAR
  1391.        LD HL,#473F
  1392. PRSTAR  LD DE,SPRSTAR
  1393.        LD B,9
  1394.        BIT 4,L
  1395.        JR NZ,PRSTAR1
  1396. PRSTAR0 LD A,(DE)
  1397.        LD (HL),A
  1398.        INC DE
  1399.        INC A
  1400.        JR NZ,$+6
  1401.        INC L
  1402.        SET 7,(HL)
  1403.        DEC L
  1404.        CALL DHL
  1405.        DJNZ PRSTAR0
  1406.        RET
  1407. PRSTAR1 LD A,(DE)
  1408.        RLCA
  1409.        LD (HL),A
  1410.        INC DE
  1411.        JR NC,$+6
  1412.        DEC L
  1413.        SET 0,(HL)
  1414.        INC L
  1415.        CALL DHL
  1416.        DJNZ PRSTAR1
  1417.        RET
  1418. SPRSTAR DB 8,12,#1C,-1,127,62,62,#66,66
  1419. ENRAMKA LD BC,#DFF
  1420.        LD D,H
  1421.        LD E,L
  1422.        LD (HL),127
  1423.        INC L
  1424.        LD (HL),C
  1425.        DJNZ $-2
  1426.        DEC (HL)
  1427.        LD B,15
  1428. ENRAMK0 CALL DHL
  1429.        SET 1,(HL)
  1430.        EX DE,HL
  1431.        CALL DHL
  1432.        SET 6,(HL)
  1433.        EX DE,HL
  1434.        DJNZ ENRAMK0
  1435.        LD B,13
  1436.        LD (HL),-2
  1437.        DEC L
  1438.        LD (HL),C
  1439.        DJNZ $-2
  1440.        LD (HL),127
  1441.        RET
  1442. ENFAKE  LD E,5
  1443. ENFAKE0 PUSH HL
  1444.        LD (HL),#5F
  1445.        LD B,13
  1446.        INC L
  1447.        LD (HL),C
  1448.        DJNZ $-2
  1449.        LD (HL),-6
  1450.        POP HL
  1451.        CALL DHL
  1452.        DEC E
  1453.        JR NZ,ENFAKE0
  1454.        RET
  1455. PRTEAM  PUSH HL
  1456.        LD BC,TEAMLEN
  1457.        ADD HL,BC
  1458.        PUSH HL
  1459.        LD A,32
  1460.        LD B,C
  1461. PRTEAMF DEC HL
  1462.        CP (HL)
  1463.        JR NZ,PRTEAME
  1464.        DJNZ PRTEAMF
  1465.        INC B
  1466. PRTEAME POP HL
  1467.        EX (SP),HL
  1468.        PUSH DE
  1469.        LD C,0
  1470.        BIT 4,E
  1471.        JR Z,PRTEAM0
  1472.        LD A,E
  1473.        ADD A,A
  1474.        SUB B
  1475.        RRA
  1476.        LD E,A
  1477.        RL C
  1478.        SLA C
  1479. PRTEAM0 LD A,(HL)
  1480.        INC HL
  1481.        CALL PR64
  1482.        DJNZ PRTEAM0
  1483.  
  1484.        POP DE
  1485.        POP HL
  1486.        RET
  1487.  
  1488. PR64    PUSH BC
  1489.        PUSH DE
  1490.        PUSH HL
  1491.        SUB 32
  1492.        ADD A,A
  1493.        LD L,A
  1494.        LD H,'FONT/4
  1495.         ADD HL,HL
  1496.         ADD HL,HL
  1497.         LD B,7
  1498.         DEC C
  1499.         JR Z,PR641
  1500.         DEC C
  1501.         JR Z,PR64R
  1502. PR640   LD A,(HL)
  1503.         RLCA
  1504.         RLCA
  1505.         RLCA
  1506.         RLCA
  1507.         LD (DE),A
  1508.         INC L
  1509.         INC D
  1510.         DJNZ PR640
  1511.         LD D,#58
  1512.         LD A,71
  1513.         LD (DE),A
  1514.         POP HL
  1515.         POP DE
  1516.         POP BC
  1517.         INC C
  1518.         RET
  1519. PR641   LD A,(DE)
  1520.         OR (HL)
  1521.         LD (DE),A
  1522.         INC L
  1523.         INC D
  1524.         DJNZ PR641
  1525.         POP HL
  1526.         POP DE
  1527.         INC E
  1528.         POP BC
  1529.         DEC C
  1530.         RET
  1531. PR64R   LD A,(HL)
  1532.         LD (DE),A
  1533.         INC L
  1534.         INC D
  1535.         DJNZ PR64R
  1536.         LD D,#58
  1537.         LD A,71
  1538.         LD (DE),A
  1539.         POP HL
  1540.         POP DE
  1541.         INC E
  1542.         POP BC
  1543.         LD C,0
  1544.         RET
  1545.  
  1546. SETWMS  LD HL,WORMXY
  1547.         LD DE,TXY
  1548.         LD B,0
  1549. SWMS0   LD A,(DE)
  1550.         INC E
  1551.         LD C,A
  1552. SWMSA   LD A,#80
  1553.         SRL C
  1554.         RRA
  1555.         LD (HL),A
  1556.         INC HL
  1557.         LD (HL),'BOMBWMS+1
  1558.        INC HL
  1559.        LD (HL),C
  1560.        INC HL
  1561.        LD A,(DE)
  1562.        LD (HL),A
  1563.        INC HL
  1564.        LD (HL),B
  1565.        INC HL
  1566.        LD (HL),B
  1567.        INC HL
  1568.        INC E
  1569.        JR NZ,SWMS0
  1570.        INC HL
  1571.        LD (HL),1
  1572.        LD HL,SWMSA+1
  1573.        LD A,(HL)
  1574.        SUB -2
  1575.        OR #80
  1576.        LD (HL),A
  1577.        LD HL,CUWORMS
  1578. MKCUW0  XOR A
  1579. MKCUW1  LD (HL),B
  1580.        INC HL
  1581.        LD (HL),A
  1582.        INC HL
  1583.        LD (HL),150
  1584.        INC HL
  1585.        LD (HL),0
  1586.        INC HL
  1587.        LD (HL),10
  1588.        INC HL
  1589.        INC HL
  1590.        INC A
  1591.        CP 4
  1592.        JR C,MKCUW1
  1593.        INC B
  1594.        CP B
  1595.        JR NZ,MKCUW0
  1596.        RET
  1597.  
  1598. INKEY   LD A,239
  1599.        IN A,(-2)
  1600.        RRCA
  1601.        RLA
  1602.        RLA
  1603.        OR #C2
  1604.        LD C,A
  1605.        LD A,#DF
  1606.        IN A,(-2)
  1607.        RRA
  1608.        JR C,$+4
  1609.        RES 4,C
  1610.        RRA
  1611.        JR C,$+4
  1612.        RES 5,C
  1613.        LD A,-5
  1614.        IN A,(-2)
  1615.        RRA
  1616.        JR C,$+4
  1617.        RES 2,C
  1618.        LD A,-3
  1619.        IN A,(-2)
  1620.        RRA
  1621.        JR C,$+4
  1622.        RES 3,C
  1623.        LD A,-2
  1624.        IN A,(-2)
  1625.        RRA
  1626.        JR C,$+4
  1627.        RES 0,C
  1628.        LD A,#7F
  1629.        IN A,(-2)
  1630.        CPL
  1631.        AND 31
  1632.        RET Z
  1633.        RES 1,C
  1634.        RET
  1635.  
  1636. MOUSE   LD HL,0
  1637.        CALL INKEY
  1638. ARVEL   LD DE,0
  1639.        LD A,C
  1640. KEY     EQU $+1
  1641.        CP 0
  1642.        LD (KEY),A
  1643.        RRA
  1644.        RRA
  1645.        CPL
  1646.        JR NZ,MANTORM
  1647.        AND 15
  1648.        JR NZ,MANNOT
  1649. MANTORM LD A,128
  1650.        CP D
  1651.        JR NC,$+3
  1652.        INC D
  1653.        SRA D
  1654.        CP E
  1655.        JR NC,$+3
  1656.        INC E
  1657.        SRA E
  1658. MANNOT  RRA
  1659.        JR C,$+3
  1660.        INC D
  1661.        RRA
  1662.        JR C,$+3
  1663.        DEC D
  1664.        RRA
  1665.        JR C,$+3
  1666.        DEC E
  1667.        RRA
  1668.        JR C,$+3
  1669.        INC E
  1670.        LD A,-5
  1671.        IN A,(#DF)
  1672. OLDX    LD C,0
  1673.        LD (OLDX+1),A
  1674.        SUB C
  1675.        ADD A,E
  1676.        LD E,A
  1677.        JP Z,MXQ+1
  1678.        JP P,MXP
  1679.        SRA A
  1680.        ADD A,L
  1681.        CALL NC,MXZRO
  1682.        JR MXQ
  1683. MXP     DEC A
  1684.        SRL A
  1685.        SUB -8
  1686.        ADD A,L
  1687.        CALL C,MXZRO
  1688.        SUB 8
  1689. MXQ     LD L,A
  1690.        LD A,-1
  1691.        IN A,(#DF)
  1692. OLDY    LD C,0
  1693.        LD (OLDY+1),A
  1694.        SUB C
  1695.        SUB D
  1696.        JR Z,MYQ+1
  1697.        CPL
  1698.        JP M,MYP
  1699.        SRA A
  1700.        ADD A,H
  1701.        JR C,MYQ
  1702.        XOR A
  1703.        LD D,A
  1704.        JR MYQ
  1705. MYP     INC A
  1706.        SRA A
  1707.        ADD A,H
  1708.        CP 64
  1709.        JR C,MYQ
  1710.        XOR A
  1711.        LD D,A
  1712.        LD A,64
  1713. MYQ     LD H,A
  1714.        LD (MOUSE+1),HL
  1715.        LD (ARVEL+1),DE
  1716.        RET
  1717. MXZRO   XOR A
  1718.        SUB E
  1719.        JP P,$+4
  1720.        INC A
  1721.        SRA A
  1722.        LD E,A
  1723.        XOR A
  1724.        RET
  1725.  
  1726. INIMOUS EI
  1727.        HALT
  1728.        IN A,(-1)
  1729.        INC A
  1730.        JR NZ,NOMOUSE
  1731.        LD BC,#FADF
  1732.        IN C,(C)
  1733.        LD A,-5
  1734.        IN A,(#DF)
  1735.        LD B,A
  1736.        LD (OLDX+1),A
  1737.        LD A,-1
  1738.        IN A,(#DF)
  1739.        LD (OLDY+1),A
  1740.        CP B
  1741.        RET NZ
  1742.        CP C
  1743.        RET NZ
  1744. NOMOUSE LD A,62
  1745.        LD (OLDX-2),A
  1746.        LD (OLDY-2),A
  1747.        XOR A
  1748.        LD (OLDX-1),A
  1749.        LD (OLDY-1),A
  1750.        RET
  1751.  
  1752. SETTIM  LD HL,#3000
  1753.        LD (TIME+1),HL
  1754.        LD HL,#4747
  1755. SETTCLR LD (#5A22),HL
  1756.        LD (#5A42),HL
  1757.        RET
  1758. TIME    LD BC,0
  1759.        LD A,C
  1760.        INC A
  1761.        JR Z,PTIMOUT
  1762. TIM0    LD A,50
  1763.        DEC A
  1764.        JR NZ,TIM1
  1765.        LD A,50
  1766. TIM1    LD (TIM0+1),A
  1767.        JR NZ,TIMPR
  1768.        LD A,C
  1769.        SUB 8
  1770.        LD C,A
  1771.        JR NC,TIM2
  1772.        LD C,72
  1773.        LD A,B
  1774.        SUB 8
  1775.        LD B,A
  1776.        JR NC,TIM2
  1777.        LD HL,MESTIM
  1778.        CALL MTITLE
  1779. PTIMOUT LD HL,(#5A61)
  1780.        LD (#5A22),HL
  1781.        LD (#5A42),HL
  1782.        LD A,-1
  1783.        LD (TIME+1),A
  1784.        RET
  1785. TIM2    LD (TIME+1),BC
  1786. TIMPR   LD D,61
  1787.        LD E,B
  1788.        SET 7,E
  1789.        LD B,D
  1790.        SET 7,C
  1791.        LD HL,#5022
  1792. TIMPR0  LD A,(DE)
  1793.        LD (HL),A
  1794.        INC L
  1795.        LD A,(BC)
  1796.        INC C
  1797.        LD (HL),A
  1798.        INC H
  1799.        LD (HL),A
  1800.        DEC L
  1801.        LD A,(DE)
  1802.        INC E
  1803.        LD (HL),A
  1804.        INC H
  1805.        BIT 3,H
  1806.        JR Z,TIMPR0
  1807.        LD H,80
  1808.        LD A,L
  1809.        SUB -32
  1810.        LD L,A
  1811.        CP 96
  1812.        JR C,TIMPR0
  1813.        RET
  1814.  
  1815. PRBT    LD L,#88
  1816.        LD H,87
  1817.        LD (HL),#E0
  1818.        LD H,90
  1819.        LD (HL),2
  1820.        DEC L
  1821.        DEC L
  1822.        LD DE,BT
  1823.        CALL PRBTP
  1824. PRBTP   DEC L
  1825.        LD H,84
  1826.        LD B,4
  1827. PRBT0   LD A,(DE)
  1828.        INC DE
  1829.        LD (HL),A
  1830.        INC H
  1831.        DJNZ PRBT0
  1832.        LD H,90
  1833.        LD (HL),4
  1834.        RET
  1835.  
  1836. BT      DB #E0,-8,-2,-1,3,7,7,7
  1837.  
  1838. WRMOVEQ LD SP,IX
  1839.        RET
  1840. WRMOVE  LD SP,WORMXY
  1841.        LD BC,FD
  1842.        LD A,PGMASK
  1843.        OUT (C),A
  1844. DOGRAV  LD A,0
  1845.        ADD A,64
  1846.        LD (DOGRAV+1),A
  1847.        SBC A,A
  1848.        AND 36
  1849.        LD (WMGRAV),A
  1850. WM0     POP BC ;SPRITE
  1851.        POP HL ;COORDS
  1852.        POP DE ;SPEED
  1853.        DEC B
  1854.        JR Z,WRMOVEQ
  1855.        LD A,D
  1856.        CP 99
  1857.        JR Z,WM0
  1858.        INC B
  1859.        LD (NEWSPD+1),DE
  1860.        XOR A
  1861.        SRA E
  1862.        RRA
  1863.        SRA E
  1864.        RRA
  1865.        ADD A,C
  1866.        ADC HL,DE
  1867.        BIT 7,D
  1868.        JR NZ,WMGOUP
  1869.        JP C,WMDEAD
  1870.        LD C,A
  1871.        LD A,L
  1872.        CP WIDTH
  1873.        JP NC,WMDEAD
  1874.        EX DE,HL
  1875.        LD L,D
  1876.        LD H,'TMASKLN
  1877.         SRL A
  1878.         ADD A,(HL)
  1879.         INC H
  1880.         LD H,(HL)
  1881.         LD L,A
  1882.        JR NC,$+3
  1883.        INC H
  1884.         LD A,E
  1885.         RRA
  1886.         LD A,(HL)
  1887.         LD L,C
  1888.         RR L
  1889.         LD H,'TABROLL
  1890.        AND (HL)
  1891.        JP Z,NEWSPD
  1892.        DUP 4
  1893.        DEC SP
  1894.        EDUP
  1895.        POP HL ;OLD COORDS
  1896.        POP DE ;OLD SPEED
  1897.        XOR A
  1898.        SUB E
  1899.        LD E,A
  1900.        LD (NEWSPD+1),DE
  1901.        XOR A
  1902.        SRA E
  1903.        RRA
  1904.        SRA E
  1905.        RRA
  1906.        ADD A,C
  1907.        ADC HL,DE
  1908.        JP C,WMDEAD
  1909.        LD C,A
  1910.        LD A,L
  1911.        CP WIDTH
  1912.        JP NC,WMDEAD
  1913.        EX DE,HL ;TODO ЗАКРУТИТЬ
  1914.        LD L,D
  1915.        LD H,'TMASKLN
  1916.         SRL A
  1917.         ADD A,(HL)
  1918.         INC H
  1919.         LD H,(HL)
  1920.         LD L,A
  1921.        JR NC,$+3
  1922.        INC H
  1923.         LD A,E
  1924.         RRA
  1925.         LD A,(HL)
  1926.         LD L,C
  1927.         RR L
  1928.         LD H,'TABROLL
  1929.        AND (HL)
  1930.        JP Z,NEWSPD
  1931.        LD A,(NEWSPD+2)
  1932.        DEC A
  1933.        LD D,99
  1934.        JR Z,$+5
  1935.        LD DE,256
  1936.        PUSH DE
  1937.        POP DE
  1938.       JP WM0
  1939. WMGOUP  JR NC,WMDEAD
  1940.        LD C,A
  1941.        LD A,L
  1942.        CP WIDTH
  1943.        JR NC,WMDEAD
  1944.        EX DE,HL
  1945.        LD L,D
  1946.        LD H,'TMASKLN
  1947.         SRL A
  1948.         ADD A,(HL)
  1949.         INC H
  1950.         LD H,(HL)
  1951.         LD L,A
  1952.        JR NC,$+3
  1953.        INC H
  1954.         LD A,E
  1955.         RRA
  1956.         LD A,(HL)
  1957.         LD L,C
  1958.         RR L
  1959.         LD H,'TABROLL
  1960.        AND (HL)
  1961.        JP Z,NEWSPD
  1962.        DUP 4
  1963.        DEC SP
  1964.        EDUP
  1965.        POP HL
  1966.        POP DE
  1967.        XOR A
  1968.        SUB E
  1969.        LD E,A
  1970.        LD (NEWSPD+1),DE
  1971.        XOR A
  1972.        SRA E
  1973.        RRA
  1974.        SRA E
  1975.        RRA
  1976.        ADD A,C
  1977.        ADC HL,DE
  1978.        JR NC,WMDEAD
  1979.        LD C,A
  1980.        LD A,L
  1981.        CP WIDTH
  1982.        JR C,WMNDEAD
  1983. WMDEAD  LD HL,-6
  1984.        ADD HL,SP
  1985.        LD (WMSP+1),HL
  1986.        EX DE,HL
  1987.        LD HL,6
  1988.        LD B,H
  1989.        ADD HL,DE
  1990.        LD A,MAXWXY
  1991.        SUB L
  1992.        LD C,A
  1993.        LD SP,IX
  1994.        PUSH DE
  1995.        LDIR
  1996.        LD C,A
  1997.        POP DE
  1998.        LD HL,CUWORMS-WORMXY
  1999.        ADD HL,DE
  2000.        LD A,(HL)
  2001.        RLCA
  2002.        RLCA
  2003.        INC HL
  2004.        OR (HL)
  2005.        DEC HL
  2006.        EX DE,HL
  2007.        LD HL,6
  2008.        ADD HL,DE
  2009.        LDIR
  2010.        LD L,A
  2011.        LD C,A
  2012.        LD H,B
  2013.        DB ")
  2014.        ADD HL,BC
  2015.        DB "))
  2016.        LD DE,NAMES+12
  2017.        ADD HL,DE
  2018.        CALL MTIDEAD
  2019. WMSP    LD SP,0
  2020.       JP WM0
  2021. WMNDEAD EX DE,HL
  2022.        LD L,D
  2023.        LD H,'TMASKLN
  2024.         SRL A
  2025.         ADD A,(HL)
  2026.         INC H
  2027.         LD H,(HL)
  2028.         LD L,A
  2029.        JR NC,$+3
  2030.        INC H
  2031.         LD A,E
  2032.         RRA
  2033.         LD A,(HL)
  2034.         LD L,C
  2035.         RR L
  2036.         LD H,'TABROLL
  2037.        AND (HL)
  2038.        JP Z,NEWSPD
  2039.        DUP 4
  2040.        DEC SP
  2041.        EDUP
  2042.        POP HL
  2043.        POP DE
  2044.        XOR A
  2045.        SUB D
  2046.        LD D,A
  2047.        LD (NEWSPD+1),DE
  2048.        XOR A
  2049.        SRA E
  2050.        RRA
  2051.        SRA E
  2052.        RRA
  2053.        ADD A,C
  2054.        ADC HL,DE
  2055.        JR NC,WMDEAD
  2056.        LD C,A
  2057.        LD A,L
  2058.        CP WIDTH
  2059.        JR NC,WMDEAD
  2060.        EX DE,HL
  2061.        LD L,D
  2062.        LD H,'TMASKLN
  2063.         SRL A
  2064.         ADD A,(HL)
  2065.         INC H
  2066.         LD H,(HL)
  2067.         LD L,A
  2068.        JR NC,$+3
  2069.        INC H
  2070.         LD A,E
  2071.         RRA
  2072.         LD A,(HL)
  2073.         LD L,C
  2074.         RR L
  2075.         LD H,'TABROLL
  2076.        AND (HL)
  2077.        JR Z,NEWSPD
  2078.        DUP 4
  2079.        DEC SP
  2080.        EDUP
  2081.        POP DE
  2082.        POP HL
  2083.        LD HL,0
  2084.        JR $+5
  2085. NEWSPD  LD HL,0
  2086. WMGRAV  INC H
  2087.        PUSH HL
  2088.        PUSH DE
  2089.        PUSH BC
  2090.        DUP 3
  2091.        POP BC
  2092.        EDUP
  2093.        JP WM0
  2094.  
  2095. WORMS   LD HL,(MOUSE+1)
  2096.        ADD A,H
  2097.        ADD A,H
  2098.        LD BC,FD
  2099.        LD D,PGMASK
  2100.        OUT (C),D
  2101.        LD C,A
  2102.        XOR A
  2103.        SRL L
  2104.        RRA
  2105. ;DEC L
  2106.        SRL L
  2107.        RRA
  2108.       CPL
  2109.        LD (WORMDX+1),A
  2110.       XOR A
  2111.       SUB L
  2112.       LD B,A
  2113.        LD SP,WORMXY
  2114.        JR W0+1
  2115. WLDISP  LD A,(DE)
  2116.        OR (HL)
  2117.        LD (DE),A
  2118. WSP     LD SP,0
  2119. W0      POP AF ;SPEED
  2120.        POP HL ;SPRITE
  2121.       DEC H
  2122.       JR Z,WORMSQ
  2123.        POP DE ;COORDS
  2124.        LD A,D
  2125.        SUB C
  2126.        ADD A,A
  2127.        JR C,W0
  2128.        RLA
  2129.        JR NC,W0
  2130.        LD LY,A ;HY='TabYfor Top/Low
  2131.         LD A,L
  2132. WORMDX ADC A,0 ;thanx Spencer...
  2133.         LD L,A
  2134.         LD A,E
  2135.         ADC A,B
  2136.        CP 31
  2137.         JR NC,W0
  2138.         LD (WSP+1),SP
  2139.        LD SP,IY
  2140.         POP DE
  2141.         ADD A,E
  2142.         LD E,A
  2143.         RET
  2144. WORMSQ  LD SP,IX
  2145.         RET
  2146.  
  2147. TABPW1  LD A,(DE)
  2148.         OR (HL)
  2149.         LD (DE),A
  2150.         INC H
  2151.         INC E
  2152.         LD A,(DE)
  2153.         OR (HL)
  2154.         LD (DE),A
  2155.         INC D
  2156.        INC H
  2157. TABPW2  LD A,(DE)
  2158.         OR (HL)
  2159.         LD (DE),A
  2160.         INC H
  2161.         DEC E
  2162.         LD A,(DE)
  2163.         OR (HL)
  2164.         LD (DE),A
  2165.        INC D
  2166.         INC H
  2167. TABPW3 LD A,E ;thanx Spencer...
  2168.        SUB -32
  2169.        LD E,A
  2170.        SBC A,A
  2171.        AND -8
  2172.        ADD A,D
  2173.        LD D,A
  2174. TABPW4
  2175.  
  2176. MAKPW   LD DE,PROGPW
  2177.         LD HL,TY4TOP+2
  2178.         LD C,8
  2179. MAKPW0  LD (HL),E
  2180.         INC L
  2181.         LD (HL),D
  2182.         DB ",,,
  2183.        PUSH HL
  2184.        LD B,8
  2185. MAKPW1  LD A,8
  2186.        SUB C
  2187.        CP B
  2188.        JR NZ,MAKPWN
  2189.        PUSH BC
  2190.        LD HL,TABPW3
  2191.        LD BC,TABPW4-TABPW3
  2192.        LDIR
  2193.        POP BC
  2194. MAKPWN  PUSH BC
  2195.        LD HL,TABPW1
  2196.        BIT 0,B
  2197.        JR Z,$+5
  2198.        LD HL,TABPW2
  2199.        LD BC,TABPW2-TABPW1
  2200.        LDIR
  2201.        POP BC
  2202.        DJNZ MAKPW1
  2203.        EX DE,HL
  2204.        LD DE,-5
  2205.        ADD HL,DE
  2206.        LD (HL),195
  2207.        INC HL
  2208.        LD (HL),WLDISP
  2209.        INC HL
  2210.        LD (HL),'WLDISP
  2211.        INC HL
  2212.        EX DE,HL
  2213.        POP HL
  2214.        DEC C
  2215.        JR NZ,MAKPW0
  2216.        RET
  2217.  
  2218. DHL     INC H
  2219.        LD A,H
  2220.        AND 7
  2221.        RET NZ
  2222.        LD A,L
  2223.        ADD A,32
  2224.        LD L,A
  2225.        RET C
  2226.        LD A,H
  2227.        ADD A,-8
  2228.        LD H,A
  2229.        RET
  2230. DHL2    INC H
  2231.        INC H
  2232.        LD A,H
  2233.        AND 6
  2234.        RET NZ
  2235.        LD A,L
  2236.        ADD A,32
  2237.        LD L,A
  2238.        RET C
  2239.        LD A,H
  2240.        ADD A,-8
  2241.        LD H,A
  2242.        RET
  2243. DDE     INC D
  2244.        LD A,D
  2245.        AND 7
  2246.        RET NZ
  2247.        LD A,E
  2248.        ADD A,32
  2249.        LD E,A
  2250.        RET C
  2251.        LD A,D
  2252.        ADD A,-8
  2253.        LD D,A
  2254.        RET
  2255.  
  2256. READER  EX DE,HL
  2257.        EX (SP),HL
  2258.        DEC DE
  2259. READ0   INC DE
  2260.        LD A,(HL)
  2261.        LD (DE),A
  2262.        INC HL
  2263.        OR A
  2264.        JR NZ,READ0
  2265.        EX (SP),HL
  2266.        EX DE,HL
  2267.        RET
  2268.  
  2269. TLAND   DB 18,"CREATING LANDSCAPE
  2270. MESHOM  DB 17,"2X HOMING MISSILE
  2271. MESWHE  DB 16,"NOWHERE TO WORM!"
  2272. MESTIM  DB 11,"TIME IS OUT
  2273.         NOP
  2274. MESDIE  DB "123456789012 IS AN EX-WORM
  2275. MESTEAM
  2276. DB "1234567890123456 TEAM IS NO MORE
  2277. CUTEAMS DB "ALONE CODER     "
  2278.         DB "DAVE            "
  2279.         DB "WORMS           "
  2280.         DB "THE FARM        "
  2281.  
  2282. NAMES   DB "ALCO        "
  2283.         DB "ALCO2       "
  2284.         DB "ALCO3       "
  2285.         DB "ALCO4       "
  2286.         DB "DAVE        "
  2287.         DB "D2          "
  2288.         DB "D3          "
  2289.         DB "D4          "
  2290.         DB "FLAT        "
  2291.         DB "EARTH       "
  2292.         DB "TAPE        "
  2293.         DB "WOOD        "
  2294.         DB "MOO         "
  2295.         DB "HORSE       "
  2296.         DB "PIGGY       "
  2297.         DB "HEN         "
  2298.  
  2299. windRA=#55B9
  2300. windLA=#55B6
  2301. windEA=#50F0
  2302. PRnrg
  2303. wind=$+1 ;1..46,47,48..93
  2304.         LD BC,2+#2F00
  2305.         LD HL,windLA
  2306.         LD E,32
  2307. PRnrg0
  2308.         LD A,B
  2309.         DEC A
  2310.         CP C
  2311.         CALL nrgPLOT
  2312.         RLC E
  2313.         JR NC,$+3
  2314.         DEC HL
  2315.         DJNZ PRnrg0
  2316. windP
  2317.         LD HL,windRA
  2318.         LD B,#2F
  2319.         LD E,4
  2320. PRnrg1
  2321.         LD A,B
  2322.         ADD A,C
  2323.         CP 95
  2324.         CALL nrgPLOT
  2325.         RRC E
  2326.         JR NC,$+3
  2327.         INC HL
  2328.         DJNZ PRnrg1
  2329. PRnrgE
  2330. powr=$+1
  2331.         LD BC,25+#7600
  2332.         LD HL,windEA
  2333.         LD E,4
  2334. PRnrg2
  2335.         LD A,B
  2336.         CP C
  2337.         CALL nrgPLOT
  2338.         RRC E
  2339.         JR NC,$+3
  2340.         INC HL
  2341.         DJNZ PRnrg2
  2342.         RET
  2343.  
  2344. nrgPLOT
  2345.         SBC A,A
  2346.         XOR (HL)
  2347.         AND E
  2348.         XOR (HL)
  2349.         LD (HL),A
  2350.         INC H
  2351.         XOR (HL)
  2352.         AND E
  2353.         XOR (HL)
  2354.         LD (HL),A
  2355.         INC H
  2356.         XOR (HL)
  2357.         AND E
  2358.         XOR (HL)
  2359.         LD (HL),A
  2360.         DEC H
  2361.         DEC H
  2362.         RET
  2363.  
  2364. CLRTOP  LD HL,MOUSE+2
  2365.         LD A,40
  2366.         SUB (HL)
  2367.         RET C
  2368.         RET Z
  2369.         RLCA
  2370.         LD B,A
  2371.         LD HL,#407F
  2372.         LD DE,0
  2373. CLRTOP0 LD SP,HL
  2374.         DUP 15
  2375.         PUSH DE
  2376.         EDUP
  2377.         LD SP,IX
  2378.         CALL DHL
  2379.         DJNZ CLRTOP0
  2380.         RET
  2381.  
  2382. PRWAT   LD A,(MOUSE+2)
  2383.         SUB 61
  2384.         RET C
  2385.         CPL
  2386.         RLCA
  2387.         SUB -87
  2388.         LD H,A
  2389.         LD L,#7F
  2390. PRWATDE LD DE,WATER
  2391.         LD A,E
  2392.         SUB -16
  2393.         LD (PRWATDE+1),A
  2394. PRWAT0  LD A,(DE)
  2395.         INC E
  2396.         LD C,A
  2397.         LD A,(DE)
  2398.         INC E
  2399.         LD B,A
  2400.         LD SP,HL
  2401.         DUP 15
  2402.         PUSH BC
  2403.         EDUP
  2404.         INC H
  2405.         BIT 3,H
  2406.         JR Z,PRWAT0
  2407.         LD SP,IX
  2408.         RET
  2409.  
  2410. UPPRU   LD HL,(MOUSE+1)
  2411.         LD A,L
  2412.         AND 3
  2413.         XOR 1
  2414.         INC A
  2415.         XOR 18
  2416.         LD BC,FD
  2417.         OUT (C),A
  2418.        LD B,0
  2419.         LD A,40
  2420.         SUB H
  2421.         JR NC,$+3
  2422.         XOR A
  2423.         LD C,A
  2424.         LD A,L
  2425.         RRA
  2426.         SLA H
  2427.         RRA
  2428.         LD L,H
  2429.         LD H,'TABROW
  2430.        ADD A,(HL)
  2431.        LD LY,A
  2432.        INC H
  2433.       LD A,B
  2434.        ADC A,(HL)
  2435.        LD HY,A
  2436.        LD L,C
  2437.       LD H,B
  2438.        DUP 2
  2439.        DB ")
  2440.        ADD HL,BC
  2441.        EDUP
  2442.        DB ")))
  2443.        ADD HL,BC
  2444.        DB ")
  2445.        LD DE,UPPR
  2446.        ADD HL,DE
  2447.        LD C,WIDTH
  2448.        JP (HL)
  2449. BUF
  2450.        INCBIN "worm$
  2451. UPPR    EQU BUF
  2452.        ORG OTS