?login_element?

Subversion Repositories NedoOS

Rev

Rev 771 | Blame | Compare with Previous | Last modification | View Log | Download

  1.         DEVICE ZXSPECTRUM128
  2.         include "../../_sdk/sys_h.asm"
  3.        
  4. ;CLIENT=1
  5.        
  6. ObWa=16
  7. Cont=6
  8. R7i=%10000000
  9. IRAs=15
  10. IRBl=14
  11. ;Font=#C000
  12. ;Sprites=#D000
  13. ;Maps=#D100
  14.        
  15. STACK=0x4000
  16.  
  17.         macro HALTER
  18.         call yielder
  19.         endm
  20.        
  21.         ORG PROGSTART
  22. begin
  23.         ld sp,STACK
  24.         OS_HIDEFROMPARENT
  25.  
  26.         ld e,3|0x80
  27.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  28.         ld e,0 ;color byte
  29.         OS_CLS
  30.        
  31.         ld a,(user_scr0_high) ;ok
  32.         SETPG16K
  33.  
  34.         ;CALL Im2     ;Включаем IM 2
  35.         LD A,R
  36.         LD (SEED),A
  37.         LD A,R
  38.         LD (SEED+1),A
  39.  
  40.        ifdef CLIENT
  41.         ld de,0x0203
  42.         OS_NETSOCKET
  43.         ld a,l
  44.         ld (soc),a
  45.         or a
  46.         jp m,inet_exiterr_nosoc
  47. inet_exiterr_nosoc
  48.         if CLIENT==0
  49.         ld a,(soc)
  50.         LD DE,port_ia
  51.         OS_BIND
  52.         ld a,l
  53.         or a
  54.         jp m,inet_exiterr
  55.         endif
  56.        
  57.         if 1==0
  58.         ld a,(soc)
  59.         LD DE,port_ia
  60.         OS_NETCONNECT
  61.         ld a,l
  62.         or a
  63.         jp m,inet_exiterr
  64.         endif
  65.  
  66. ;начальная синхронизация        
  67. ;если master - при этом посылаем свои клавиши, если slave - принимаем клавиши
  68. ;TODO для двух игроков:
  69. ;???
  70.         if CLIENT ;посылаем событие старта
  71.         ld a,1
  72.         call sendbyte
  73.         else ;slave - принимаем событие старта
  74. waitbegin0
  75.         call receivebyte
  76.         jr z,waitbegin0
  77.         endif
  78.        endif
  79.  
  80.         CALL Init
  81. Start   LD HL,#4000
  82.         LD DE,#4001
  83.         LD BC,#17FF
  84.         LD (HL),L
  85.         LDIR
  86.         XOR A
  87.         LD (FragLim),A
  88.         LD (TimeLim),A
  89.         LD BC,TGame1
  90.         CALL PrintText
  91.         LD IX,MGame1
  92.         CALL Menu
  93.         PUSH AF
  94.         CALL Init
  95.         POP AF
  96.         CP 1
  97.         JR Z,Rede
  98.         CP 2
  99.         JR Z,Info
  100.         CP 3
  101.         JP Z,Chat
  102.         JP StartGame
  103. Info
  104.         LD HL,#4000
  105.         LD DE,#4001
  106.         LD BC,#17FF
  107.         LD (HL),L
  108.         LDIR
  109.         LD BC,TInfo1
  110.         CALL PrintText
  111.         LD IX,MInfo1
  112.         CALL Menu
  113.         JP Start
  114.  
  115. inet_exitcode
  116. inet_exiterr
  117. quit
  118.         QUIT
  119.         ret
  120.        
  121. yielder
  122.         push af
  123.         push bc
  124.         push de
  125.         push hl
  126.         push ix
  127.         push iy
  128.         YIELD
  129.         pop iy
  130.         pop ix
  131.         pop hl
  132.         pop de
  133.         pop bc
  134.         pop af
  135.         ret
  136.  
  137. Rede
  138.         LD HL,#4000
  139.         LD DE,#4001
  140.         LD BC,#17FF
  141.         LD (HL),L
  142.         LDIR
  143. Rede1   LD BC,TRede1
  144.         CALL PrintText
  145.         LD IX,MRede1
  146.         CALL Menu
  147.         CP 0
  148.         JP Z,RedeLeft
  149.         CP 1
  150.         JP Z,RedeRight
  151.         CP 2
  152.         JP Z,RedeUp
  153.         CP 3
  154.         JP Z,RedeDown
  155.         CP 4
  156.         JP Z,RedeFire
  157.         CP 5
  158.         JP Z,RedeCGun
  159.         CP 6
  160.         JP Z,RedeQuit
  161.         CP 7
  162.         JP Z,RedeExit
  163.         JP Start
  164. RedeExit
  165.         LD BC,(KeyLeftBC)
  166.         LD A,(KeyLeftA)
  167.         LD (KeyMe51+1),A
  168.         LD (KeyMe5+1),BC
  169.  
  170.         LD BC,(KeyRightBC)
  171.         LD A,(KeyRightA)
  172.         LD (KeyMe41+1),A
  173.         LD (KeyMe4+1),BC
  174.  
  175.         LD BC,(KeyUpBC)
  176.         LD A,(KeyUpA)
  177.         LD (KeyMe21+1),A
  178.         LD (KeyMe2+1),BC
  179.  
  180.         LD BC,(KeyDownBC)
  181.         LD A,(KeyDownA)
  182.         LD (KeyMe31+1),A
  183.         LD (KeyMe3+1),BC
  184.  
  185.         LD BC,(KeyFireBC)
  186.         LD A,(KeyFireA)
  187.         LD (KeyMe11+1),A
  188.         LD (KeyMe1+1),BC
  189.  
  190.         LD BC,(KeyCGunBC)
  191.         LD A,(KeyCGunA)
  192.         LD (KeyMe61+1),A
  193.         LD (KeyMe6+1),BC
  194.  
  195.         LD BC,(KeyExitBC)
  196.         LD A,(KeyExitA)
  197.         LD (KeyMe71+1),A
  198.         LD (KeyMe7+1),BC
  199.         JP Start
  200.  
  201.  
  202. RedeLeft
  203.         LD A," "
  204.         LD (TRede2+8),A
  205.         LD BC,TRede1
  206.         CALL PrintText
  207.         DUP 5
  208.         HALTER
  209.         EDUP
  210. RedeLeft1 HALTER
  211.         CALL RedeKeyn
  212.         CP 255
  213.         JR Z,RedeLeft1
  214.         LD (TRede2+8),A
  215.         CALL KEyAny
  216.         LD (KeyLeftBC),BC
  217.         LD (KeyLeftA),A
  218.         JP Rede1
  219. RedeRight
  220.         LD A," "
  221.         LD (TRede3+8),A
  222.         LD BC,TRede1
  223.         CALL PrintText
  224.         DUP 5
  225.         HALTER
  226.         EDUP
  227. RedeRight1 HALTER
  228.         CALL RedeKeyn
  229.         CP 255
  230.         JR Z,RedeRight1
  231.         LD (TRede3+8),A
  232.         CALL KEyAny
  233.         LD (KeyRightBC),BC
  234.         LD (KeyRightA),A
  235.         JP Rede1
  236. RedeDown
  237.         LD A," "
  238.         LD (TRede5+8),A
  239.         LD BC,TRede1
  240.         CALL PrintText
  241.         DUP 5
  242.         HALTER
  243.         EDUP
  244. RedeDown1 HALTER
  245.         CALL RedeKeyn
  246.         CP 255
  247.         JR Z,RedeDown1
  248.         LD (TRede5+8),A
  249.         CALL KEyAny
  250.         LD (KeyDownBC),BC
  251.         LD (KeyDownA),A
  252.         JP Rede1
  253. RedeUp
  254.         LD A," "
  255.         LD (TRede4+8),A
  256.         LD BC,TRede1
  257.         CALL PrintText
  258.         DUP 5
  259.         HALTER
  260.         EDUP
  261. RedeUp1 HALTER
  262.         CALL RedeKeyn
  263.         CP 255
  264.         JR Z,RedeUp1
  265.         LD (TRede4+8),A
  266.         CALL KEyAny
  267.         LD (KeyUpBC),BC
  268.         LD (KeyUpA),A
  269.         JP Rede1
  270. RedeFire
  271.         LD A," "
  272.         LD (TRede6+8),A
  273.         LD BC,TRede1
  274.         CALL PrintText
  275.         DUP 5
  276.         HALTER
  277.         EDUP
  278. RedeFire1 HALTER
  279.         CALL RedeKeyn
  280.         CP 255
  281.         JR Z,RedeFire1
  282.         LD (TRede6+8),A
  283.         CALL KEyAny
  284.         LD (KeyFireBC),BC
  285.         LD (KeyFireA),A
  286.         JP Rede1
  287.  
  288. RedeCGun
  289.         LD A," "
  290.         LD (TRede7+8),A
  291.         LD BC,TRede1
  292.         CALL PrintText
  293.         DUP 5
  294.         HALTER
  295.         EDUP
  296. RedeCGun1 HALTER
  297.         CALL RedeKeyn
  298.         CP 255
  299.         JR Z,RedeCGun1
  300.         LD (TRede7+8),A
  301.         CALL KEyAny
  302.         LD (KeyCGunBC),BC
  303.         LD (KeyCGunA),A
  304.         JP Rede1
  305.  
  306. RedeQuit
  307.         LD A," "
  308.         LD (TRede8+8),A
  309.         LD BC,TRede1
  310.         CALL PrintText
  311.         DUP 5
  312.         HALTER
  313.         EDUP
  314. RedeQuit1 HALTER
  315.         CALL RedeKeyn
  316.         CP 255
  317.         JR Z,RedeQuit1
  318.         LD (TRede8+8),A
  319.         CALL KEyAny
  320.         LD (KeyExitBC),BC
  321.         LD (KeyExitA),A
  322.         JP Rede1
  323.  
  324.  
  325.  
  326.  
  327. PrintText
  328.         LD DE,(PrintY)
  329.         SRL D
  330.         LD A,E
  331.         AND 7
  332.         RRCA
  333.         RRCA
  334.         RRCA
  335.         ADD A,D
  336.         LD D,E
  337.         LD E,A
  338.         LD A,D
  339.         AND #18
  340.         OR #40
  341.         LD D,A
  342.         LD (PrinLine),DE
  343. PrintTx LD A,(BPrintAtr)
  344.         LD (PrintAtr),A
  345.  
  346.         LD A,(BC)
  347.         INC BC
  348.         CP 22
  349.         JR Z,PrintXYcom
  350.         CP 16
  351.         JR Z,PrintAtrcom
  352.         CP 0
  353.         RET Z
  354.         CP 8
  355.         CALL C,PntAtr
  356.         PUSH BC
  357.         CALL Pall
  358.         POP BC
  359.         JP PrintTx
  360. PrintXYcom LD A,(BC)
  361.         INC BC
  362.         LD (PrintY),A
  363.         LD A,(BC)
  364.         INC BC
  365.         LD (PrintX),A
  366.         LD DE,(PrintY)
  367.         SRL D
  368.         LD A,E
  369.         AND 7
  370.         RRCA
  371.         RRCA
  372.         RRCA
  373.         ADD A,D
  374.         LD D,E
  375.         LD E,A
  376.         LD A,D
  377.         AND #18
  378.         OR #40
  379.         LD D,A
  380.         LD (PrinLine),DE
  381.         JP PrintTx
  382. PrintAtrcom LD A,(BC)
  383.         INC BC
  384.         LD (PrintAtr),A
  385.         LD (BPrintAtr),A
  386.         JP PrintTx
  387. PntAtr
  388.         LD (BPrintAtr),A
  389.         RET
  390. Pall
  391.         CALL Pfast
  392.         LD A,(PrintX)
  393.         CP 64
  394.         RET NC
  395.         CALL Pcolor
  396.         RET
  397.  
  398.  
  399. Print   PUSH AF
  400.  
  401.         LD DE,(PrintY)
  402.         SRL D
  403.         LD A,E
  404.         AND 7
  405.         RRCA
  406.         RRCA
  407.         RRCA
  408.         ADD A,D
  409.         LD D,E
  410.         LD E,A
  411.         LD A,D
  412.         AND #18
  413.         OR #40
  414.         LD D,A
  415.         LD (PrinLine),DE
  416.         POP AF
  417.  
  418. Pfast   PUSH AF
  419.         LD A,(PrintX)
  420.         AND %1
  421.         JP NZ,PrintRight
  422.         JP Z,PrintLeft
  423. Pcolor  EX DE,HL
  424.         SRL H
  425.         SRL H
  426.         SRL H
  427.         SET 4,H
  428.         SET 6,H
  429.  
  430.  
  431.         LD A,(PrintAtr)
  432.         LD (HL),A
  433.         LD A,(PrintX)
  434.         INC A
  435.         LD (PrintX),A
  436.         RET
  437. PrintLeft POP AF
  438.            LD L,A
  439.         LD H,Font/256+9
  440.         LD A,(PrintX)
  441.         CP 64
  442.         RET NC
  443.         LD DE,(PrinLine)
  444.         INC D
  445.         DUP 7
  446.         LD A,(DE)
  447.         AND %00001111
  448.         OR (HL)
  449.         LD (DE),A
  450.         INC H
  451.         INC D
  452.         EDUP
  453.         DEC D
  454.         RET
  455. PrintRight POP AF
  456.         LD L,A
  457.         LD H,Font/256+#1
  458.         LD A,(PrintX)
  459.         CP 64
  460.         RET NC
  461.         LD DE,(PrinLine)
  462.         INC D
  463.         DUP 7
  464.         LD A,(DE)
  465.         AND %11110000
  466.         OR (HL)
  467.         LD (DE),A
  468.         INC H
  469.         INC D
  470.         EDUP
  471.         PUSH DE
  472.         LD DE,(PrinLine)
  473.         INC DE
  474.         LD (PrinLine),DE
  475.         POP DE
  476.         DEC D
  477.         RET
  478. PrinLine  DW 0
  479. PrintY  DB 0
  480. PrintX  DB 0
  481. PrintAtr DB 7
  482. BPrintAtr DB 7
  483. Menu
  484.         LD A,(IX+5)
  485.         LD (MenuY),A
  486. MenuCi  HALTER
  487.         CALL MenuPrint
  488.         HALTER
  489.         CALL MenuPrint
  490.         CALL KeyMe
  491.         LD A,(Key)
  492.         BIT 3,A
  493.         CALL Z,MenuCQ
  494.         LD A,(Key)
  495.         BIT 2,A
  496.         CALL Z,MenuCA
  497.         LD A,(Key)
  498.         BIT 4,A
  499.         JR NZ,MenuCi
  500.         LD A,(MenuY)
  501.         LD (IX+5),A
  502.         RET
  503. MenuCQ  LD A,(MenuY)
  504.         CP 0
  505.         RET Z
  506.         DEC A
  507.         LD (MenuY),A
  508.         RET
  509. MenuCA  LD B,(IX+3)
  510.         DEC B
  511.         LD A,(MenuY)
  512.         CP B
  513.         RET NC
  514.         INC A
  515.         LD (MenuY),A
  516.         RET
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525. MenuPrint LD L,(IX)
  526.         LD A,(MenuY)
  527.         LD C,A
  528.  
  529.         LD A,(IX+4)
  530.         DEC A
  531.         CP 0
  532.         LD B,A
  533.         LD A,C
  534.         JR Z,$+5
  535.         ADD A,A
  536.         DJNZ $-1
  537.  
  538.         ADD A,L
  539.         LD L,A
  540.         LD H,(IX+1)
  541.         LD A,H
  542.         ADD HL,HL
  543.         ADD HL,HL
  544.         ADD HL,HL
  545.         LD H,#16
  546.         ADD HL,HL
  547.         ADD HL,HL
  548.         ADD A,L
  549.         LD L,A
  550.         LD A,H
  551.         OR #40
  552.         LD H,A
  553.         LD B,(IX+2)
  554. MenuC1  LD A,(HL)
  555.         XOR %001000
  556.         LD (HL),A
  557.         INC HL
  558.         DJNZ MenuC1
  559.  
  560.         RET
  561. KEyAny  LD E,8
  562.         LD BC,#7FFE
  563. KEyNotR IN A,(C)
  564.         LD L,0
  565.         LD D,5
  566. KEyNotP BIT 0,A
  567.         JR Z,KEyPush
  568.         RRCA
  569.         INC L
  570.         DEC D
  571.         JR NZ,KEyNotP
  572.         LD A,B
  573.         RRCA
  574.         LD B,A
  575.         DEC E
  576.         JR NZ,KEyNotR
  577.         RET
  578. KEyPush
  579.         LD A,L
  580.         RET
  581. KeyMe   LD D,0
  582.  
  583. KeyMe7  LD BC,#BFFE      ;Exit
  584.         IN A,(C)
  585.         LD E,A
  586. KeyMe71 LD A,4           ;Bit
  587.         INC A
  588.         LD B,A
  589.         LD A,E
  590.         RRCA
  591.         DJNZ $-1
  592.         RL D
  593.  
  594. KeyMe6  LD BC,#7FFE      ;Exit
  595.         IN A,(C)
  596.         LD E,A
  597. KeyMe61 LD A,2           ;Bit
  598.         INC A
  599.         LD B,A
  600.         LD A,E
  601.         RRCA
  602.         DJNZ $-1
  603.         RL D
  604.  
  605. KeyMe1  LD BC,#7FFE      ;Fire
  606.         IN A,(C)
  607.         LD E,A
  608. KeyMe11 LD A,0           ;Bit
  609.         INC A
  610.         LD B,A
  611.         LD A,E
  612.         RRCA
  613.         DJNZ $-1
  614.         RL D
  615.  
  616. KeyMe2  LD BC,#FBFE      ;Down
  617.         IN A,(C)
  618.         LD E,A
  619. KeyMe21 LD A,0           ;Bit
  620.         INC A
  621.         LD B,A
  622.         LD A,E
  623.         RRCA
  624.         DJNZ $-1
  625.         RL D
  626.  
  627. KeyMe3  LD BC,#FDFE      ;Up
  628.         IN A,(C)
  629.         LD E,A
  630. KeyMe31 LD A,0           ;Bit
  631.         INC A
  632.         LD B,A
  633.         LD A,E
  634.         RRCA
  635.         DJNZ $-1
  636.         RL D
  637.  
  638. KeyMe4  LD BC,#DFFE      ;Right
  639.         IN A,(C)
  640.         LD E,A
  641. KeyMe41 LD A,0           ;Bit
  642.         INC A
  643.         LD B,A
  644.         LD A,E
  645.         RRCA
  646.         DJNZ $-1
  647.         RL D
  648.  
  649. KeyMe5  LD BC,#DFFE      ;Left
  650.         IN A,(C)
  651.         LD E,A
  652. KeyMe51 LD A,1           ;Bit
  653.         INC A
  654.         LD B,A
  655.         LD A,E
  656.         RRCA
  657.         DJNZ $-1
  658.         RL D
  659.  
  660.         LD A,D
  661.         LD (Key),A
  662.         RET
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669. MenuY    DB 0
  670. TGame1   DB 22, 0,24,16,7,"Q U A K E    I"
  671.          DB 22, 9,24,16,7,"  Start Game"
  672.          DB 22,10,24,16,7,"Redefine  Keys"
  673.          DB 22,11,24,16,7," Information"
  674.          DB 22,12,24,16,7,"    Chat    "
  675.          DB 22,23,0,16,7,"Code:Firestarter             "
  676.          DB "Hackerz' Design Software 23.08.2003",0
  677. MGame1   DB 9,10,11,4,1,0 ;X,Y,LEN,кол-во,STEP,Стрый Y
  678.  
  679. TRede1  DB 22,0,24,16,7,"Redefine  Keys"
  680.         DB 22,6,26,16,7
  681. TRede2  DB " Left: ",34,"o",34
  682.         DB 22,7,26,16,7
  683. TRede3  DB "Right: ",34,"p",34
  684.         DB 22,8,26,16,7
  685. TRede4  DB "   Up: ",34,"q",34
  686.         DB 22,9,26,16,7
  687. TRede5  DB " Down: ",34,"a",34
  688.         DB 22,10,26,16,7
  689. TRede6  DB " Fire: ",34," ",34
  690.         DB 22,11,26,16,7
  691. TRede7  DB "C.Gun: ",34,"m",34
  692.         DB 22,12,26,16,7
  693. TRede8  DB " Exit: ",34,"h",34
  694.         DB 22,13,24,16,7
  695.         DB "     Exit",0
  696. MRede1  DB 6,12,7,8,1,0
  697. KeyLeftBC  DW #DFFE
  698. KeyLeftA   DB 1
  699. KeyRightBC DW #DFFE
  700. KeyRightA  DB 0
  701. KeyDownBC  DW #FDFE
  702. KeyDownA   DB 0
  703. KeyUpBC    DW #FBFE
  704. KeyUpA     DB 0
  705. KeyFireBC  DW #7FFE
  706. KeyFireA   DB 0
  707. KeyCGunBC  DW #7FFE
  708. KeyCGunA   DB 2
  709. KeyExitBC  DW #BFFE
  710. KeyExitA   DB 4
  711. Key        DB 0
  712. Line    DB 22,22,0,16,4
  713.         DS 64,196
  714.         DB 0
  715. TChat1  DB 22,23,0,16,7
  716.         DB "  Edit-Rus/Lat, CS+SS+1...7-Color, Break-Exit,"
  717.         DB " CS+SS+I-Ins/Ovr."
  718.         DB 22,10,11,16,7,"Enter your name:            ",0
  719. Text    DB 16,7
  720. TxtBuffer DB 22,10,28
  721. TxtName DS 13,32
  722. TxtEnd  DB 0
  723.         DB 0
  724.         DB 0
  725. Chat
  726.         CALL Init
  727.         XOR A
  728.         LD (SetChanger),A
  729.  
  730.         LD HL,#4000
  731.         LD DE,#4001
  732.         LD BC,#17FF
  733.         LD (HL),L
  734.         LDIR
  735.         LD BC,TChat1
  736.         CALL PrintText
  737.         LD BC,Line
  738.         CALL PrintText
  739.         CALL Rus_Lat
  740.         CALL Ovr_Ins
  741. Ename   HALTER
  742.         LD BC,TxtBuffer+2
  743.         LD A,(BC)
  744.         PUSH AF
  745.         LD A,28
  746.         LD (BC),A
  747.         LD BC,Text
  748.         CALL PrintText
  749.         POP AF
  750.         LD BC,TxtBuffer+2
  751.         LD (BC),A
  752.         CALL KeyAny
  753.         CALL KeyFont
  754.         CALL KeyWait
  755.         LD HL,TxtBuffer
  756.         LD E,28
  757.         LD B,12
  758.         CALL KeyPrint
  759.         LD A,(KeyAtr)
  760.         BIT 2,A
  761.         JR Z,Ename
  762.         LD HL,TxtEnd
  763. NotName LD A,(HL)
  764.         CP 33
  765.         JR NC,NameWod
  766.         DEC HL
  767.         JR NotName
  768. NameWod
  769.         LD DE,TxtName
  770.         OR A
  771.         SBC HL,DE
  772.         INC HL
  773.         LD A,H
  774.         CP 1
  775.         JR NC,NopName
  776.         PUSH HL
  777.         POP BC
  778.         LD A,C
  779.         LD (NameLen),A
  780.         LD HL,TxtName
  781.         LD DE,NameChater
  782.         LDIR
  783. NopName
  784.         LD HL,#4000
  785.         LD DE,#4001
  786.         LD (HL),L
  787.         LD BC,6143
  788.         LDIR
  789.  
  790.         LD BC,Line
  791.         CALL PrintText
  792.         CALL Rus_Lat
  793.         CALL Ovr_Ins
  794. Snowa
  795.         LD HL,ChatMy1+3
  796.         LD DE,ChatMy1+4
  797.         LD BC,65
  798.         LD (HL),32
  799.         LDIR
  800.         LD HL,NameChater
  801.         LD DE,ChatMy+3
  802.         LD BC,0
  803.         LD A,(NameLen)
  804.         LD C,A
  805.         LDIR
  806.         EX DE,HL
  807.         LD (HL),">"
  808.         INC HL
  809.         LD (HL),0
  810.         LD A,(NameLen)
  811.         INC A
  812.         INC A
  813.         LD (ChatMy1+2),A
  814.         LD (ColBig2+1),A
  815.         LD (ColBig3+1),A
  816.         LD (ColBig1+1),A
  817.         LD B,A
  818.         LD A,64
  819.         SUB B
  820.         LD (ColLen+1),A
  821.         INC A
  822.         INC A
  823.         INC A
  824.         INC A
  825.         LD (ColEnd+1),A
  826.         LD BC,ChatMy
  827.         CALL PrintText
  828.  
  829.  
  830. Chatru
  831.         HALTER
  832.         LD A,(DobKeyAtr)
  833.         BIT 0,A
  834.         CALL NZ,ChDiscon
  835.         CALL Joiner
  836.         HALTER
  837.         LD A,(SetChanger)
  838.         CP 1
  839.         CALL Z,Bukwa
  840.         LD HL,ChatMy1
  841. ColEnd  LD E,0
  842.         LD D,0
  843.         ADD HL,DE
  844.         LD (HL),0
  845.  
  846.         LD BC,ChatMy1+2
  847.         LD A,(BC)
  848.         PUSH AF
  849. ColBig1 LD A,0
  850.         LD (BC),A
  851.         LD BC,Chatmy
  852.         CALL PrintText
  853.         POP AF
  854.         LD BC,ChatMy1+2
  855.         LD (BC),A
  856.         CALL KeyAny
  857.         CALL KeyFont
  858.         CALL KeyWait
  859.         LD (KeyMey),A
  860.         LD HL,ChatMy1
  861. ColBig2 LD E,28
  862. ColLen  LD B,64
  863.         CALL KeyPrint
  864.  
  865.  
  866.  
  867.         LD A,(KeyAtr)
  868.         BIT 0,A
  869.         JR NZ,ChatExit
  870. ChatNoE LD A,(KeyAtr)
  871.         BIT 2,A
  872.         JR Z,Chatru
  873.         LD BC,ChatMy1+2
  874. ColBig3 LD A,0
  875.         LD (BC),A
  876.         LD BC,Chatmy
  877.         CALL PrintText
  878.         CALL ScrollUp
  879.         LD HL,#5B00-32
  880.         LD DE,#5B00-32-32-32
  881.         LD BC,32
  882.         LDIR
  883.         LD HL,#50E0
  884.         LD DE,#50A0
  885.         LD BC,32
  886.         LDIR
  887.         LD HL,#51E0
  888.         LD DE,#51A0
  889.         LD BC,32
  890.         LDIR
  891.         LD HL,#52E0
  892.         LD DE,#52A0
  893.         LD BC,32
  894.         LDIR
  895.         LD HL,#53E0
  896.         LD DE,#53A0
  897.         LD BC,32
  898.         LDIR
  899.         LD HL,#54E0
  900.         LD DE,#54A0
  901.         LD BC,32
  902.         LDIR
  903.         LD HL,#55E0
  904.         LD DE,#55A0
  905.         LD BC,32
  906.         LDIR
  907.         LD HL,#56E0
  908.         LD DE,#56A0
  909.         LD BC,32
  910.         LDIR
  911.         LD HL,#57E0
  912.         LD DE,#57A0
  913.         LD BC,32
  914.         LDIR
  915.         JP Snowa
  916.         RET
  917. ChatExit LD BC,#7FFE
  918.         IN A,(C)
  919.         BIT 0,A
  920.         JP NZ,ChatNoE
  921.         CALL Joiner
  922.         LD BC,#FFFD
  923.         LD DE,#FFBF
  924.         LD B,D
  925.         LD A,IRAs
  926.         OUT (C),A
  927.         LD B,E
  928.         XOR A
  929.         OUT (C),A
  930.         JP Start
  931. ChatMy  DB 22,23,0
  932.         DS 12+4,0
  933. Chatmy  DB 16,7
  934. ChatMy1 DB 22,23,7
  935.         DS 66,32
  936. ChatYou DB 22,21,0
  937.         DS 12+4,0
  938. Chatyou DB 16,7
  939. ChatYou1 DB 22,21,7
  940.         DS 66,32
  941.  
  942. NameLen DB 9
  943. NameChater
  944.         DB 16,7
  945.         DB "No Name"
  946.         DS 9
  947. NameYLen DB 9
  948. NameChaterYou
  949.         DB 16,7
  950.         DB "No Name"
  951.         DS 9
  952. XYchat  DB 22,21,0,0
  953. Joiner  LD (Steck),SP
  954.         LD A,(SetChanger)
  955.         CP 1
  956.         JR Z,Realset
  957.         LD L,IRAs
  958.         LD H,IRBl
  959.         LD BC,#FFFD
  960.         LD DE,#FFBF
  961.  
  962.         OUT (C),L
  963.         LD B,E
  964.         OUT (C),D
  965.  
  966.         LD B,D
  967.  
  968.         OUT (C),H
  969.         IN A,(C)
  970.         AND %10000000 ;TODO
  971.        ld a,%10000000
  972.         CP %10000000
  973.         JR Z,HasJoin
  974.  
  975.         RET
  976. HasJoin
  977.         CALL NameOb
  978.         CALL ScrollUp
  979.         LD BC,XYchat
  980.         CALL PrintText
  981.         LD HL,NameChaterYou
  982.         LD A,(NameYLen)
  983.         LD C,A
  984.         LD B,0
  985.         ADD HL,BC
  986.         LD (HL),0
  987.         LD BC,NameChaterYou
  988.         CALL PrintText
  989.         LD BC,JoinTXT
  990.         CALL PrintText
  991.         LD A,1
  992.         LD (SetChanger),A
  993.         LD HL,NameChaterYou
  994.         LD A,(NameYLen)
  995.         LD C,A
  996.         LD B,0
  997.         ADD HL,BC
  998.         LD (HL),32
  999.         CALL YouLine2
  1000.         HALTER
  1001.         LD A,255
  1002.         LD (KeyYour),A
  1003.         LD A,0
  1004.         LD (DobKeyAtr),A
  1005.         RET
  1006. Realset
  1007.         CALL Sinhro ;Процедура синхронизации
  1008.         LD A,(KeyMey)
  1009.         CALL Obmen
  1010.         LD (KeyYour),A
  1011.         CALL MiniSinhro
  1012.         LD A,(KeyAtr)
  1013.         CALL Obmen
  1014.         LD (DobKeyAtr),A
  1015.         CALL MiniSinhro
  1016.         LD B,0
  1017.         NOP
  1018.         DJNZ $-1
  1019.  
  1020.         RET
  1021. JoinTXT DB 4,"joined",0
  1022. ScrollUp
  1023.         LD DE,#4000
  1024.         LD HL,#4020
  1025.         LD B,21
  1026. Scroll2 PUSH BC
  1027.         PUSH DE
  1028.         PUSH HL
  1029.         LD B,8
  1030. Scroll1 PUSH HL
  1031.         PUSH DE
  1032.         PUSH BC
  1033.         DUP 32
  1034.         LDI
  1035.         EDUP
  1036.         POP BC
  1037.         POP DE
  1038.         POP HL
  1039.         INC H
  1040.         INC D
  1041.         DJNZ Scroll1
  1042.         POP HL
  1043.         POP DE
  1044.         POP BC
  1045.         CALL HL_Down8
  1046.         CALL DE_Down8
  1047.         DJNZ Scroll2
  1048.         LD DE,#5800
  1049.         LD HL,#5820
  1050.         LD BC,21*32
  1051.         LDIR
  1052.         LD HL,#50A0
  1053.         LD B,8
  1054. ScrollX PUSH HL
  1055.         PUSH BC
  1056.         LD A,0
  1057.         DUP 32
  1058.         LD (HL),A
  1059.         INC L
  1060.         EDUP
  1061.  
  1062.         POP BC
  1063.         POP HL
  1064.         INC H
  1065.         DJNZ ScrollX
  1066.         RET
  1067. HL_Down8
  1068.         LD A,L
  1069.         ADD A,32
  1070.         LD L,A
  1071.         RET NC
  1072.         LD A,H
  1073.         ADD A,8
  1074.         LD H,A
  1075.         RET
  1076. DE_Down8
  1077.         LD A,E
  1078.         ADD A,32
  1079.         LD E,A
  1080.         RET NC
  1081.         LD A,D
  1082.         ADD A,8
  1083.         LD D,A
  1084.         RET
  1085.  
  1086.  
  1087. KeyPrint
  1088.         PUSH AF
  1089.         LD A,B
  1090.         ADD A,E
  1091.         LD D,A
  1092.         INC HL
  1093.         LD IX,PrintY
  1094.         LD A,(HL)
  1095.         LD (IX),A
  1096.         INC HL
  1097.         LD A,(HL)
  1098.         LD (IX+1),A
  1099.         LD A,(HL)
  1100.         SUB E
  1101.         LD C,A
  1102.         POP AF
  1103.         CP 255
  1104.         JP Z,KeyCurs
  1105.         CP 12
  1106.         JP Z,KeyDelete
  1107.         CP 8
  1108.         JP Z,KeyLeft
  1109.         CP 9
  1110.         JP Z,KeyRight
  1111.         CP 28
  1112.         JP Z,Rus_Lat
  1113.         CP 27
  1114.         JP Z,Ovr_Ins
  1115.         PUSH AF
  1116.         LD A,(HL)
  1117.         CP D
  1118.         JR Z,Keyend
  1119.         INC C
  1120.         POP AF
  1121.         PUSH HL
  1122.         PUSH DE
  1123.         PUSH BC
  1124.         PUSH BC
  1125.         LD B,0
  1126.         ADD HL,BC
  1127.         POP BC
  1128.         PUSH AF
  1129.         LD A,(KeyAtr)
  1130.         BIT 5,A
  1131.         CALL Z,Insert
  1132.         POP AF
  1133.         LD (HL),A
  1134.         POP BC
  1135.         POP DE
  1136.         POP HL
  1137.         LD A,(HL)
  1138.         CP D
  1139.         JR Z,KeyCurs
  1140.         INC (HL)
  1141.  
  1142. KeyCurs
  1143.  
  1144. KeyCurS LD A,(ChatHidden)
  1145.         CP 1
  1146.         RET Z
  1147.         LD A,(PrintX)
  1148.         CP 64
  1149.         RET NC
  1150.         LD A,(Cursor)
  1151.         CALL Print
  1152.         RET
  1153. Keyend  POP AF
  1154.         RET
  1155. KeyDelete
  1156.         PUSH AF
  1157.         LD A,(HL)
  1158.         CP E
  1159.         JR Z,Keyend
  1160.         POP AF
  1161.         PUSH BC
  1162.         DEC (HL)
  1163.         LD A,(HL)
  1164.         LD (IX+1),A
  1165.         LD A,(HL)
  1166.         SUB E
  1167.         LD C,A
  1168.         INC C
  1169.         LD B,0
  1170.         ADD HL,BC
  1171.         POP BC
  1172.         LD A,(KeyAtr)
  1173.         BIT 5,A
  1174.         JP Z,Insert2
  1175.         LD (HL),32
  1176.         CALL KeyCurS
  1177.         RET
  1178. KeyLeft
  1179.         PUSH HL,DE,BC
  1180.         LD A,(HL)
  1181.         SUB E
  1182.         LD C,A
  1183.         INC C
  1184.         LD B,0
  1185.         ADD HL,BC
  1186.         LD A,(HL)
  1187.         CALL Print
  1188.         POP BC,DE,HL
  1189.         PUSH AF
  1190.         LD A,(HL)
  1191.         CP E
  1192.         JR Z,Keyend
  1193.         POP AF
  1194.         DEC (HL)
  1195.         LD A,(HL)
  1196.         LD (IX+1),A
  1197.         CALL KeyCurs
  1198.         RET
  1199. KeyRight
  1200.         PUSH HL,DE,BC
  1201.         LD A,(HL)
  1202.         SUB E
  1203.         LD C,A
  1204.         INC C
  1205.         LD B,0
  1206.         ADD HL,BC
  1207.         LD A,(HL)
  1208.         CALL Print
  1209.         POP BC,DE,HL
  1210.         PUSH AF
  1211.         LD A,(HL)
  1212.         CP D
  1213.         JR Z,Keyend
  1214.         POP AF
  1215.         INC (HL)
  1216.         LD A,(HL)
  1217.         LD (IX+1),A
  1218.         CALL KeyCurs
  1219.         RET
  1220. Rus_Lat
  1221.         LD A,(KeyAtr)
  1222.         XOR %00010000
  1223.         LD (KeyAtr),A
  1224.         XOR %00010000
  1225.         BIT 4,A
  1226.         JR NZ,_Lat
  1227.         LD A,(ChatHidden)
  1228.         CP 1
  1229.         RET Z
  1230.         LD BC,Rus1
  1231.         CALL PrintText
  1232.         RET
  1233.  
  1234.  
  1235. _Lat    LD A,(ChatHidden)
  1236.         CP 1
  1237.         RET Z
  1238.         LD BC,Lat1
  1239.         CALL PrintText
  1240.         RET
  1241. Ovr_Ins
  1242.         LD A,(KeyAtr)
  1243.         XOR %00100000
  1244.         LD (KeyAtr),A
  1245.         XOR %00100000
  1246.         BIT 5,A
  1247.         JR NZ,_Ins
  1248.         LD A,(ChatHidden)
  1249.         CP 1
  1250.         RET Z
  1251.         LD BC,Ovr1
  1252.         CALL PrintText
  1253.         RET
  1254. _Ins    LD A,(ChatHidden)
  1255.         CP 1
  1256.         RET Z
  1257.         LD BC,Ins1
  1258.         CALL PrintText
  1259.         RET
  1260. Insert  PUSH HL,DE,BC
  1261.         PUSH HL
  1262.         PUSH BC
  1263.         LD A,B
  1264.         SUB C
  1265.         CP 0
  1266.         JR Z,Ines
  1267.         LD B,0
  1268.         LD C,A
  1269.         ADD HL,BC
  1270.         POP BC
  1271.         POP DE
  1272.         PUSH HL
  1273.         OR A
  1274.         SBC HL,DE
  1275.         PUSH HL
  1276.         POP BC
  1277.         POP HL
  1278.         PUSH HL
  1279.         POP DE
  1280.         DEC HL
  1281.         LDDR
  1282.         POP BC,DE,HL
  1283.         RET
  1284. Ines    POP AF
  1285.         POP AF
  1286.         POP BC,DE,HL
  1287.         RET
  1288. Insert2
  1289.         PUSH HL
  1290.         POP DE
  1291.         INC HL
  1292.         LD A,B
  1293.         SUB C
  1294.         INC A
  1295.         CP 0
  1296.         JR Z,Ines2
  1297.         CP 255
  1298.         JR Z,Ines2
  1299.         LD C,A
  1300.         LD B,0
  1301.         LDIR
  1302.  
  1303. Ines2   CALL KeyCurs
  1304.         RET
  1305.  
  1306.  
  1307. Rus1    DB 22,22,9,16,4," ",16,7,"Rus ",0
  1308. Lat1    DB 22,22,9,16,4," ",16,7,"Lat ",0
  1309. Ovr1    DB 22,22,15,16,4," ",16,7,"Ovr ",0
  1310. Ins1    DB 22,22,15,16,4," ",16,7,"Ins ",0
  1311.  
  1312. SetChanger DB 0
  1313.  
  1314. Cursor  DB "█"
  1315. KeyAny
  1316.         CALL Enter
  1317.         CALL Symbol
  1318.         CALL Caps
  1319.  
  1320.         LD E,8
  1321.         LD BC,#7FFE
  1322. KeyNotR IN A,(C)
  1323.         LD L,0
  1324.         LD D,5
  1325. KeyNotP BIT 0,A
  1326.         JR Z,KeyPush
  1327. KeyNext RRCA
  1328.         INC L
  1329.         DEC D
  1330.         JR NZ,KeyNotP
  1331.         RRC B
  1332.         DEC E
  1333.         JR NZ,KeyNotR
  1334.         LD BC,#0000
  1335.         XOR A
  1336.         RET
  1337.  
  1338. KeyPush PUSH AF
  1339.         LD A,B
  1340.         CP #FE
  1341.         JR Z,KeyCaps
  1342.         CP #BF
  1343.         JR Z,KeyCaps; (Enter)
  1344.         CP #7F
  1345.         JR Z,KeySymbol
  1346.         POP AF
  1347.         LD A,L
  1348.         RET
  1349.  
  1350. KeyCaps LD A,L
  1351.         CP 0
  1352.         JR Z,KeyNextP
  1353.         POP AF
  1354.         LD A,L
  1355.         RET
  1356.  
  1357. KeySymbol LD A,L
  1358.         CP 1
  1359.         JR Z,KeyNextP
  1360.         POP AF
  1361.         LD A,L
  1362.         RET
  1363.  
  1364. KeyNextP POP AF
  1365.         JR KeyNext
  1366. Enter   LD BC,#BFFE
  1367.         IN A,(C)
  1368.         BIT 0,A
  1369.         JR NZ,EnterR
  1370.         LD A,(KeyAtr)
  1371.         SET 2,A
  1372.         LD (KeyAtr),A
  1373.         RET
  1374.  
  1375. EnterR  LD A,(KeyAtr)
  1376.         RES 2,A
  1377.         LD (KeyAtr),A
  1378.         RET
  1379. Caps    LD BC,#FEFE
  1380.         IN A,(C)
  1381.         BIT 0,A
  1382.         JR NZ,CapsR
  1383.         LD A,(KeyAtr)
  1384.         SET 0,A
  1385.         LD (KeyAtr),A
  1386.         RET
  1387.  
  1388. CapsR   LD A,(KeyAtr)
  1389.         RES 0,A
  1390.         LD (KeyAtr),A
  1391.         RET
  1392. Symbol  LD BC,#7FFE
  1393.         IN A,(C)
  1394.         BIT 1,A
  1395.         JR NZ,SymbolR
  1396.         LD A,(KeyAtr)
  1397.         SET 1,A
  1398.         LD (KeyAtr),A
  1399.         RET
  1400.  
  1401. SymbolR LD A,(KeyAtr)
  1402.         RES 1,A
  1403.         LD (KeyAtr),A
  1404.         RET
  1405. KeyFont
  1406.         LD L,A
  1407.         LD A,B
  1408.         CP #F7
  1409.         JR Z,_F7FE_
  1410.         CP #EF
  1411.         JR Z,_EFFE_
  1412.         CP #7F
  1413.         JR Z,_7FFE_
  1414.         CP #FB
  1415.         JR Z,_FBFE_
  1416.         CP #DF
  1417.         JR Z,_DFFE_
  1418.         CP #FD
  1419.         JR Z,_FDFE_
  1420.         CP #FE
  1421.         JR Z,_FEFE_
  1422.         CP #BF
  1423.         JR Z,_BFFE_
  1424.         LD A,255
  1425.         RET
  1426. _F7FE_  LD BC,_F7FE
  1427.         JR _FontForm
  1428. _EFFE_  LD BC,_EFFE
  1429.         JR _FontForm
  1430. _7FFE_  LD BC,_7FFE
  1431.         JR _FontForm
  1432. _FBFE_  LD BC,_FBFE
  1433.         JR _FontForm
  1434. _DFFE_  LD BC,_DFFE
  1435.         JR _FontForm
  1436. _FDFE_  LD BC,_FDFE
  1437.         JR _FontForm
  1438. _FEFE_  LD BC,_FEFE
  1439.         JR _FontForm
  1440. _BFFE_  LD BC,_BFFE
  1441.         JR _FontForm
  1442. _FontForm
  1443.         LD H,0
  1444.         ADD HL,HL
  1445.         ADD HL,HL
  1446.         PUSH HL
  1447.         ADD HL,HL
  1448.         POP DE
  1449.         ADD HL,DE
  1450.         ADD HL,BC
  1451.  
  1452.         LD A,(KeyAtr)
  1453.         BIT 0,A
  1454.         JR Z,$+6
  1455.         LD BC,1
  1456.         ADD HL,BC
  1457.         LD A,(KeyAtr)
  1458.         BIT 1,A
  1459.         JR Z,$+6
  1460.         LD BC,2
  1461.         ADD HL,BC
  1462.         LD A,(KeyAtr)
  1463.         BIT 3,A
  1464.         JR Z,$+8
  1465.         LD BC,8
  1466.         ADD HL,BC
  1467.         JR _FontTake
  1468.         LD A,(KeyAtr)
  1469.         BIT 4,A
  1470.         JR Z,$+6
  1471.         LD BC,4
  1472.         ADD HL,BC
  1473. _FontTake
  1474.         LD A,(HL)
  1475.         RET
  1476. KeyWait LD L,A
  1477.         LD A,(KeyOld)
  1478.         CP L
  1479.         JR Z,_KeyWait
  1480.         LD A,10
  1481.         LD (KeyDoble),A
  1482.         LD A,L
  1483.         LD (KeyOld),A
  1484.         RET
  1485. _KeyWait
  1486.         LD A,(KeyDoble)
  1487.         DEC A
  1488.         CP 255
  1489.         JR Z,__KeyWait
  1490.         LD (KeyDoble),A
  1491.         LD A,255
  1492.         RET
  1493. __KeyWait
  1494.         LD A,L
  1495.         RET
  1496.  
  1497.  
  1498.  
  1499. KeyDoble DB 0
  1500. KeyOld  DB 0
  1501. ;           LAT
  1502. ;               RUS
  1503. ;                   UDG
  1504. _F7FE    DB "1",28,"!",1,"1",28,"!",1,1,1,1,1
  1505.          DB "2",29,"@",2,"2",29,"@",2,2,2,2,2
  1506.          DB "33#",3,"33#",3,3,3,3,3
  1507.          DB "44$",4,"44$",4,4,4,4,4
  1508.          DB "5",8,"%",5,"5",8,"%",5,5,5,5,5
  1509. _EFFE    DB "0",12,"__0",12,"Ъ_" ,0,12,0,0
  1510.          DB "99))99)) 9  "
  1511.          DB "8",9,"((8",9,"(( 8  "
  1512.          DB "77'",7,"77'",7,7,7,7,7
  1513.          DB "66&",6,"66&",6,6,6,6,6
  1514. _FBFE    DB "qQ  яЯ  ╔┌╒ "
  1515.          DB "wW  вВ  ╦┬╤ "
  1516.          DB "eE  еЕ  ╗┐╕ "
  1517.          DB "rR<<рР<< 4  "
  1518.          DB "tT>>тТ>> 5  "
  1519. _DFFE    DB "pP",34,34,"пП",34,34," 1  "
  1520.          DB "oO;;оО;; 2  "
  1521.          DB "iI ",27,"иИ ",27," 3  "
  1522.          DB "uU]]уУ]] 4  "
  1523.          DB "yY[[ыЫ[[ 5  "
  1524. _FDFE    DB "aA~~аАчЧ╠├╞ "
  1525.          DB "sS||сСэЭ╬┼╪ "
  1526.          DB "dD  дД  ╣┤╡ "
  1527.          DB "fF{{фФшШ 4  "
  1528.          DB "gG}}гГщЩ 5  "
  1529. _BFFE    DB 13,13,13,13,13,13,13,13,13,13,13,13
  1530.          DB "lL==лЛ== 2  "
  1531.          DB "kK++кК++ 3  "
  1532.          DB "jJ--йЙ-- 4  "
  1533.          DB "hH^^хХ^^ 5  "
  1534. _FEFE    DB 30,30,30,30,30,30,30,30,30,30,30,30
  1535.          DB "zZ::зЗ::╚└╘ "
  1536.          DB "xX``ьЬюЮ╩┴╧ "
  1537.          DB "cC??цЦ??╝┘╛ "
  1538.          DB "vV//жЖ// 5  "
  1539. _7FFE    DB "            "
  1540.          DB 31,31,31,31,31,31,31,31,31,31,31,31
  1541.          DB "mM..мМ.. 3  "
  1542.          DB "nN,,нН,, 4  "
  1543.          DB "bB**бБ** 5  "
  1544. ;31 - Symbol Shift
  1545. ;30 - Caps Shift
  1546. ;29 - Caps Lock
  1547. ;28 - Edit
  1548. ;27 - Ovr/Ins
  1549. ;13 - Enter
  1550. ;╔╦╗═║╒╤╕
  1551. ;╠╬╣  ╞╪╡
  1552. ;╚╩╝  ╘╧╛
  1553. ;┌┬┐─│╓╥╖
  1554. ;├┼┤  ╟╫╢
  1555. ;└┴┘  ╙╨╜
  1556. Init    
  1557.        if 1==0
  1558.         LD BC,#FFFD ;Записываем в регистр R7 число чтение/записи
  1559.         LD DE,#FFBF ;
  1560.         LD A,7
  1561.         OUT (C),A
  1562.         LD B,E
  1563.         LD A,R7i
  1564.         OUT (C),A
  1565.  
  1566.         LD B,D     ;Сбрасиваем 7 бит (то есть программа обмена
  1567.         LD A,IRAs  ;не работает)
  1568.         OUT (C),A
  1569.         LD B,E
  1570.         XOR A
  1571.         OUT (C),A
  1572.        endif
  1573.         RET
  1574. Sinhro
  1575.        ret
  1576.         LD L,IRAs
  1577.         LD H,IRBl
  1578.         LD BC,#FFFD ;Устанвливаем 7 бит что обмен должен быть
  1579.         LD DE,#FFBF ;начат. ждем опонента пока он не установил
  1580.                     ;7 бит
  1581.         OUT (C),L
  1582.         LD B,E
  1583.         OUT (C),D
  1584.  
  1585.         LD B,D     ;Собствено цикл ожидание.
  1586.                    ;Синхронезация до линии бордера (по тактам)
  1587.         OUT (C),H  ;
  1588. Sinhro1
  1589.         IN A,(C)
  1590.         RLA
  1591.         JR NC,Sinhro1
  1592.         OUT (C),L
  1593.         LD B,E
  1594.         XOR A       ;выключаем бит 7 и ждем от другого компа
  1595.         OUT (C),A
  1596.  
  1597.         LD B,D     ;Собствено цикл ожидание.
  1598.                    ;Синхронезация по тактом полностю один в один
  1599.         OUT (C),H  ;
  1600.         PUSH HL
  1601.         LD HL,#0000
  1602. Sinhro2
  1603.         INC HL
  1604.         LD A,H
  1605.         CP #FF
  1606.         JP Z,OffLine
  1607.         IN A,(C)
  1608.         RLA
  1609.         JR C,Sinhro2
  1610.         POP HL
  1611.  
  1612.         OUT (C),L
  1613.         LD B,E     ;Устанавливаем 7 бит
  1614.         OUT (C),D
  1615.  
  1616.         LD B,D     ;Собствено цикл ожидания.
  1617.                    ;Собственно иногда без этого цикла у меня
  1618.         OUT (C),H;почемуто сбоит :( передача (никода не убирать)
  1619. Sinhro3
  1620.         IN A,(C)
  1621.         RLA
  1622.         JR NC,Sinhro3
  1623.         RET
  1624. Obmen
  1625. ;Hа вход регистр A - байт передачи и на выходе A - байт приема
  1626.        ifdef CLIENT
  1627.         if CLIENT
  1628.         push af
  1629.         call sendbyte
  1630.         pop af
  1631. waitkey0
  1632. waitkey_receivebytepatch=$+1
  1633.         call receivebyte
  1634.         jr z,waitkey0
  1635. ;        or a
  1636. ;        jr z,mastergetkeyskipreceiveq
  1637. ;mastergetkeyskipreceive
  1638. ;        ld (curdirection2),a
  1639. ;mastergetkeyskipreceiveq
  1640.         else ;slave (server)
  1641.  
  1642.         push af
  1643. waitkey0
  1644.         call receivebyte
  1645.         jr z,waitkey0
  1646.         ;or a
  1647.         ;jr z,$+5
  1648.         ;ld (curdirection),a
  1649.          ld b,a
  1650.         pop af
  1651.          push bc
  1652.         call sendbyte
  1653.          pop af
  1654.         endif
  1655.        
  1656.        else
  1657.        xor a
  1658.        endif
  1659.        ret
  1660. ;Hа вход регистр A - байт передачи и на выходе A - байт приема
  1661.         LD L,IRAs
  1662.         LD BC,#FFFD
  1663.         LD DE,#FFBF ;начат. ждем оппонента пока он не установил
  1664.         EXX
  1665.         LD L,IRBl
  1666.         LD BC,#FFFD
  1667.         EXX
  1668.         DUP 8
  1669.         LD B,D   ;В это время оба компа записывают бит
  1670.         OUT (C),L
  1671.         LD B,E
  1672.         OUT (C),A
  1673.         RLCA
  1674.         DUP ObWa;Небольшая задержка, потому что с разной тактовой
  1675.         NOP     ;чистотой постепенно происходит рассинхронизация
  1676.         EDUP    ;
  1677.         EXX
  1678.         OUT (C),L ;В это время оба компа читают бит
  1679.         IN E,(C)
  1680.         RL E
  1681.         RL H
  1682.         EXX
  1683.         DUP ObWa;Небольшая задержка, потому что с разной тактовой
  1684.         NOP     ;чистотой постепенно происходит рассинхронизация
  1685.         EDUP    ;
  1686.         EDUP
  1687.  
  1688.  
  1689.  
  1690.         LD B,D     ;Сбрасываем 7 бит
  1691.         OUT (C),L  ;То есть передача окончена
  1692.         LD B,E
  1693.         XOR A
  1694.         OUT (C),A
  1695.         EXX
  1696.         LD A,H
  1697.         RET
  1698. NameOb  CALL Waiting
  1699.         LD HL,NameLen
  1700.         LD DE,NameYLen
  1701.         LD BC,16
  1702.         CALL Cycle
  1703.         LD HL,ChatMy
  1704.         LD DE,ChatYou
  1705.         LD BC,88
  1706.         CALL Cycle
  1707.         RET
  1708. Cycle  
  1709.         ;push bc
  1710.         ;push de
  1711.         ;push hl
  1712.         ;push ix
  1713.         HALTER
  1714.         ;pop ix
  1715.         ;pop hl
  1716.         ;pop de
  1717.         ;pop bc
  1718. Cycle2  PUSH BC
  1719.         PUSH DE
  1720.         PUSH HL
  1721.         CALL Sinhro ;Процедура синхронизации
  1722.         POP HL
  1723.         POP DE
  1724.         POP BC
  1725.  
  1726.         LD A,Cont
  1727. Cycl2   PUSH AF
  1728.         PUSH BC
  1729.         LD A,(HL)
  1730.         PUSH HL
  1731.         PUSH DE
  1732.         CALL Obmen
  1733.         PUSH AF
  1734.         POP AF
  1735.         POP DE
  1736.         POP HL
  1737.         LD (DE),A
  1738.         INC HL
  1739.         INC DE
  1740.  
  1741.         PUSH DE
  1742.         PUSH HL
  1743.         CALL MiniSinhro
  1744.         POP HL
  1745.         POP DE
  1746.         POP BC
  1747.         DEC BC
  1748.         LD A,B
  1749.         OR C
  1750.         JP Z,Ok
  1751.         POP AF
  1752.         DEC A
  1753.         JR NZ,Cycl2
  1754.         PUSH BC
  1755.         LD B,0
  1756.         DJNZ $
  1757.         POP BC
  1758.         JP Cycle
  1759. Ok      POP AF
  1760.         CALL MWaiting
  1761.         LD BC,#FFFD ;Записываем в регистр R7 число чтение/записи
  1762.         LD DE,#FFBF ;
  1763.         LD B,D     ;Сбрасываем 7 бит (то есть программа обмена
  1764.         LD A,IRAs  ;не работает)
  1765.         OUT (C),A
  1766.         LD B,E
  1767.         XOR A
  1768.         OUT (C),A
  1769.         RET
  1770. MiniSinhro
  1771.         LD L,IRAs
  1772.         LD H,IRBl
  1773.         LD BC,#FFFD ;Устанавливаем 7 бит, что обмен должен быть
  1774.         LD DE,#FFBF ;начат. Ждем оппонента, пока он не установил
  1775.         LD B,D
  1776.                     ;7 бит
  1777.         OUT (C),L
  1778.         LD B,E
  1779.         OUT (C),D
  1780.  
  1781.         LD B,D
  1782.  
  1783.         OUT (C),H
  1784. MSinhro
  1785.         IN A,(C)
  1786.         RLA
  1787.         ;JR NC,MSinhro
  1788.         LD B,D
  1789.                     ;7 бит
  1790.         OUT (C),L
  1791.         LD B,E
  1792.         XOR A
  1793.         OUT (C),A
  1794.         RET
  1795. Waiting
  1796.         HALTER
  1797.         HALTER
  1798.         HALTER
  1799.         HALTER
  1800.         LD L,IRAs
  1801.         LD H,IRBl
  1802.         LD BC,#FFFD
  1803.         LD DE,#FFBF
  1804.  
  1805.         OUT (C),L
  1806.         LD B,E
  1807.         XOR A
  1808.         OUT (C),A
  1809.  
  1810.         LD B,D
  1811.         OUT (C),H
  1812. SinhrH
  1813.         IN A,(C)
  1814.         RLA
  1815.         ;JR C,SinhrH
  1816.         LD BC,#FFFD
  1817.         LD DE,#FFBF
  1818.         LD B,D
  1819.         LD A,IRAs
  1820.         OUT (C),A
  1821.         LD B,E
  1822.         XOR A
  1823.         OUT (C),A
  1824.         RET
  1825. MWaiting
  1826.         LD L,IRAs
  1827.         LD H,IRBl
  1828.         LD BC,#FFFD
  1829.         LD DE,#FFBF
  1830.  
  1831.         OUT (C),L
  1832.         LD B,E
  1833.         OUT (C),D
  1834.  
  1835.         LD B,D
  1836.         OUT (C),H
  1837. MSinhrH
  1838.         IN A,(C)
  1839.         RLA
  1840.         ;JR NC,MSinhrH
  1841.         LD BC,#FFFD
  1842.         LD DE,#FFBF
  1843.         LD B,D
  1844.         LD A,IRAs
  1845.         OUT (C),A
  1846.         LD B,E
  1847.         XOR A
  1848.         OUT (C),A
  1849.         RET
  1850.  
  1851.  
  1852. YouLine
  1853.         LD HL,ChatYou1+3
  1854.         LD DE,ChatYou1+4
  1855.         LD BC,65
  1856.         LD (HL),32
  1857.         LDIR
  1858.         LD HL,NameChaterYou
  1859.         LD DE,ChatYou+3
  1860.         LD BC,0
  1861.         LD A,(NameYLen)
  1862.         LD C,A
  1863.         LDIR
  1864.         EX DE,HL
  1865.         LD (HL),">"
  1866.         INC HL
  1867.         LD (HL),0
  1868.         LD A,(NameYLen)
  1869.         INC A
  1870.         INC A
  1871.         LD (ChatYou1+2),A
  1872. YouLine2
  1873.         LD A,(NameYLen)
  1874.         INC A
  1875.         INC A
  1876.         LD (ColBig2Y+1),A
  1877.         LD (ColBig3Y+1),A
  1878.         LD B,A
  1879.         LD A,64
  1880.         SUB B
  1881.         LD (ColLenY+1),A
  1882.         INC A
  1883.         INC A
  1884.         INC A
  1885.         INC A
  1886.         LD (ColEndY+1),A
  1887.         LD A,21
  1888.         LD (ChatYou+1),A
  1889.         LD (ChatYou1+1),A
  1890.         RET
  1891.  
  1892. Bukwa
  1893.         LD A,1
  1894.         LD (ChatHidden),A
  1895.         PUSH AF
  1896.         LD A,(DobKeyAtr)
  1897.         LD B,A
  1898.         LD A,(KeyAtr)
  1899.         LD (DobKeyAtr),A
  1900.         LD A,B
  1901.         LD (KeyAtr),A
  1902.         POP AF
  1903.  
  1904.  
  1905.  
  1906.         LD HL,ChatYou1
  1907. ColEndY LD E,0
  1908.         LD D,0
  1909.         ADD HL,DE
  1910.         LD (HL),0
  1911.  
  1912.  
  1913.         LD A,(KeyYour)
  1914.         LD HL,ChatYou1
  1915. ColBig2Y LD E,28
  1916. ColLenY LD B,64
  1917.         CALL KeyPrint
  1918.         LD A,0
  1919.         LD (ChatHidden),A
  1920.         LD A,(KeyAtr)
  1921.         BIT 2,A
  1922.         PUSH AF
  1923.         LD A,(DobKeyAtr)
  1924.         LD B,A
  1925.         LD A,(KeyAtr)
  1926.         LD (DobKeyAtr),A
  1927.         LD A,B
  1928.         LD (KeyAtr),A
  1929.         POP AF
  1930.         JR NZ,PrintYou
  1931.         RET
  1932. ChDiscon
  1933.         LD A,(KeyYour)
  1934.         CP 32
  1935.         RET NZ
  1936.         CALL ScUpNa
  1937.         LD BC,DiscTXT
  1938.         CALL PrintText
  1939.         CALL OffSet
  1940.         RET
  1941. PrintYou
  1942.         CALL ScrollUp
  1943.         LD BC,ChatYou
  1944.         CALL PrintText
  1945. ColBig3Y LD A,0
  1946.         LD (ChatYou1+2),A
  1947.         LD BC,Chatyou
  1948.         CALL PrintText
  1949.         CALL YouLine
  1950.         RET
  1951. ; ChatYou DB 22,21,0
  1952. ;ChatYou1 DB 22,21,7
  1953. ChatHidden DB 0
  1954. KeyYour DB 0
  1955. DobKeyAtr DB 0
  1956. KeyMey DB 0
  1957. KeyAtr  DB %00010000;-Caps
  1958. ;             |||||
  1959. ;             ||||Symbol
  1960. ;             |||Enter
  1961. ;             ||UDG
  1962. ;             |RUS/LAT
  1963. ;             Ovr/Ins
  1964. Steck    DW 0
  1965. OffLine
  1966.         LD SP,(Steck)
  1967. OfLine1
  1968.         CALL ScUpNa
  1969.         LD BC,DiscTX2
  1970.         CALL PrintText
  1971.         CALL OffSet
  1972.         RET
  1973. DiscTXT DB 4,"Disconect (Quit)",0
  1974. DiscTX2 DB 4,"Disconect (OffLine)",0
  1975. ScUpNa
  1976.         CALL ScrollUp
  1977.         LD BC,XYchat
  1978.         CALL PrintText
  1979.         LD HL,NameChaterYou
  1980.         LD A,(NameYLen)
  1981.         LD C,A
  1982.         LD B,0
  1983.         ADD HL,BC
  1984.         LD (HL),0
  1985.         LD BC,NameChaterYou
  1986.         CALL PrintText
  1987.         RET
  1988. OffSet
  1989.         LD A,0
  1990.         LD (SetChanger),A
  1991.         LD BC,#FFFD
  1992.         LD DE,#FFBF
  1993.         LD B,D
  1994.         LD A,IRAs
  1995.         OUT (C),A
  1996.         LD B,E
  1997.         XOR A
  1998.         OUT (C),A
  1999.         LD A,255
  2000.         LD (KeyYour),A
  2001.         RET
  2002. RedeKeyn
  2003.         CALL KeyAny
  2004.         CALL KeyFont
  2005.         PUSH AF
  2006.         LD A,1
  2007.         LD (KeyAtr),A
  2008.         POP AF
  2009.         CALL KeyWait
  2010.         RET
  2011.        
  2012.        if 1==0
  2013. Im2
  2014.         DI
  2015.         LD HL,#BE00
  2016.         LD A,H
  2017.         LD I,A
  2018.         INC A
  2019. _IM2    LD (HL),A
  2020.         INC L
  2021.         JP NZ,_IM2
  2022.         INC H
  2023.         LD (HL),A
  2024.         LD A,#C3
  2025.         LD (#BFBF),A
  2026.         LD HL,BREAKING_2
  2027.         LD (#BFC0),HL
  2028.         IM 2
  2029.         EI
  2030.         RET
  2031. BREAKING_2
  2032.         EI
  2033.         RET
  2034.        endif
  2035.        
  2036.         INCLUDE "Quake1_2.asm"
  2037.         INCLUDE "Quake1_3.asm"
  2038.  
  2039. getbreak
  2040.         ld a,0x7f
  2041.         in a,(0xfe)
  2042.         rra
  2043.         ret c
  2044.         ld a,0xfe
  2045.         in a,(0xfe)
  2046.         rra
  2047.         ret
  2048.  
  2049.        ifdef CLIENT
  2050. sendbuf
  2051.         db "isnk"
  2052. sendbufdata
  2053. sendbufdatashift=$-sendbuf
  2054. sendbufsz=sendbufdatashift+1 ;1 byte
  2055.         ds sendbuf+256-$
  2056. recvbuf
  2057.         ds 256
  2058.  
  2059. sendbyte
  2060.         ld (sendbufdata),a
  2061.        
  2062.         ld hl,sendbufsz
  2063.         LD      a,(soc)
  2064.         ld ix,sendbuf
  2065.         ld de,port_ia
  2066.         OS_WIZNETWRITE
  2067.         bit 7,h
  2068.         jp nz,inet_exitcode
  2069.  
  2070.         ret
  2071.  
  2072. receivebyte_fake
  2073.         xor a
  2074.         dec a ;nz
  2075.         ld a,0
  2076.         ret
  2077.  
  2078. receivebyte
  2079. ;from UDP
  2080. ;z=no data
  2081.  
  2082. receivebyte0
  2083.         call getbreak
  2084.         jp nc,quit
  2085.  
  2086.         ld hl,sendbufsz
  2087.         LD      a,(soc)
  2088.         ld ix,recvbuf
  2089.         ld de,port_ia
  2090.         OS_WIZNETREAD
  2091.         bit 7,h
  2092.         ;ld a,h
  2093.         ;or l
  2094.         jr nz,receivebyte_fail ;jr z,receivebyte0
  2095.  
  2096.         ld hl,recvbuf
  2097.         ld de,sendbuf
  2098.         ld b,sendbufdatashift
  2099. receivebytecp0
  2100.         ld a,(de)
  2101.         cp (hl)
  2102.         jr nz,receivebyte_fail
  2103.         inc hl
  2104.         inc de
  2105.         djnz receivebytecp0
  2106.         xor a
  2107.         dec a ;nz
  2108.  
  2109.         ld a,(recvbuf+sendbufdatashift)
  2110.         ret
  2111. receivebyte_fail
  2112.         xor a ;z=no data
  2113.         ret
  2114.  
  2115.  
  2116. soc
  2117.         db 0
  2118. ;socrecv
  2119. ;        db 0
  2120.  
  2121. ;struct sockaddr_in {unsigned char sin_family;unsigned short sin_port;
  2122. ;       struct in_addr sin_addr;char sin_zero[8];};
  2123.         if CLIENT
  2124. ;master(net1): from 192.168.1.2 to 192.168.1.177
  2125. port_ia:
  2126.         defb 0
  2127.         db 100,53 ;port (big endian)
  2128.         db 192,168,0,7;127,0,0,1 ;ip (big endian)
  2129. ;port_iarecv:
  2130. ;       defb 0
  2131. ;        db 100,53 ;port (big endian)
  2132. ;        db 192,168,1,177 ;ip (big endian)
  2133.  
  2134.         else
  2135.  
  2136. ;slave(net2): from 192.168.1.177 to 192.168.1.2
  2137. port_ia:
  2138.         defb 0
  2139.         db 100,53 ;port (big endian)
  2140.         db 255,255,255,255 ;ip (big endian)
  2141. ;port_iasend:
  2142. ;       defb 0
  2143. ;        db 100,53 ;port (big endian)
  2144. ;        db 192,168,1,2 ;ip (big endian)
  2145.         endif
  2146.        endif ;ifdef CLIENT
  2147.  
  2148.         ds 0x3f00-$
  2149.         ds 0x8000-$
  2150.         align 256
  2151. Font
  2152.         INCBIN "Fontlr.bin"
  2153.         align 256
  2154. Sprites
  2155.         INCBIN "QuakeSPR.bin"
  2156.         align 256
  2157. Maps
  2158.         INCBIN "MAPS.bin"
  2159. end
  2160.         display "end=",end
  2161.  
  2162.        ifdef CLIENT
  2163.         if CLIENT
  2164.                 savebin "q1_1.com",begin,end-begin
  2165.         else
  2166.                 savebin "q1_2.com",begin,end-begin
  2167.         endif
  2168.        else
  2169.         savebin "q1.com",begin,end-begin
  2170.        endif
  2171.        
  2172.         LABELSLIST "../../../us/user.l"
  2173.