Subversion Repositories NedoOS

Rev

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

  1. ;ъюфшЁютрэшх 9bit (8+1):
  2. ;plain chr 0..255=-0..FF
  3. ;   rept 256     =+0
  4. ;olddisp 257..260=+1..4,len8
  5. ;  len=2 261..268=+5..C,-disp8
  6. ;   tree 269     =+D
  7. ;len3-10 270..277=+E..15,-disp16
  8. ; len>10 278..297=+16..29,len8,-disp16
  9. ;яЁш яхЁхяюыэхэшш 9bit сєЇхЁр эєцэ√ (todo) эют√х фхЁхт№ 
  10. ;todo ёьх°рээ√щ яюЄюъ (шыш юэ єцх ёьх°рээ√щ?)
  11.  
  12. PUT0
  13.         OR A
  14. PUTBIT
  15.         PUSH HL
  16.         LD HL,PUTBITC
  17.         DEC (HL) ;??? TODO
  18.         JR Z,PUTBITZ
  19.         INC (HL)
  20.         RL (HL)
  21.         JR NC,POPHL
  22. BITADR=$+1
  23.         LD HL,0
  24.         PUSH AF
  25. PUTBITC=$+1
  26.         LD A,0
  27.         CALL CORRHL
  28.         POP AF
  29.         LD HL,PUTBITC
  30.         LD (HL),1
  31.         POP HL
  32.         RET
  33. PUTBITZ INC (HL)
  34.         RL (HL)
  35.         LD HL,(PUTBITB)
  36.         LD (BITADR),HL
  37. INCHL   INC HL
  38.         LD (PUTBITB),HL
  39. POPHL   POP HL
  40.         RET
  41. CORRHL
  42. ;hl=c000..>0 (яхЁхїюфшь эр pak9)??? TODO яЁюфюыцрЄ№ фры№°х т ёЄЁрэшЎрї
  43.         PUSH AF
  44.         LD A,H
  45.         ADD A,pak9/256
  46.         JR NC,_B0
  47.         EXX
  48.        ;OUT (C),H
  49.        ld a,pgLZ
  50.        call OUTME
  51.         EXX
  52.         LD A,H
  53. _B0     LD H,A
  54.         POP AF
  55.         LD (HL),A
  56.         EXX
  57.         ;OUT (C),L
  58.        push af
  59.        call OUTpgTEXT
  60.        pop af ;TODO эрфю ыш?
  61.         EXX
  62.         RET
  63. ;todo LDAMINCHL (+18t/b)
  64. INCH
  65.         INC H
  66.         RET NZ
  67.         LD H,pak9/256
  68.        PUSH AF
  69.         CALL OUTpgTEXT ;TODO яЁюфюыцрЄ№ яю ёЄЁрэшЎрь
  70.        POP AF
  71.         RET
  72.  
  73. NACH3
  74.     LD A,#7F
  75.     IN A,(-2)
  76.     RRA
  77.     jr C,$+7
  78.     LD A,#FE
  79.     IN A,(-2)
  80.     RRA ;TODO fix
  81.        JP NC,quitoperation;RELOAD
  82.         ld A,(KOLODIN)
  83.         OR A
  84.         JR NZ,LZPUT
  85.         LD HL,(TEKADR)
  86. NEPAK   ;NC
  87.        IF sureLE
  88.         EXX
  89.         ;OUT (C),L
  90.         call OUTpgTEXT
  91.         EXX
  92.        ENDIF
  93.         LD A,(HL)
  94.         INC HL
  95. PUTBYTi
  96.        PUSH AF,DE,HL
  97.         LD L,A
  98.         LD H,0
  99.         RL H
  100.         ADD HL,HL
  101.         LD DE,frqs
  102.         ADD HL,DE
  103.         INC (HL)
  104.         JR NZ,$+4
  105.         INC HL
  106.         INC (HL)
  107.        POP HL,DE,AF
  108.         CALL PUTBIT
  109. PUTBYTE
  110.         PUSH HL
  111. PUTBITB=$+1
  112.         LD HL,0
  113.        PUSH HL
  114.         CALL CORRHL
  115.        POP HL ;TODO эрфю ыш ёюїЁрэ Є№ A?
  116.         JR INCHL
  117. LZPUT2
  118.        IF dolds
  119.      ;¤Єє ш 3 яЁхф.ёё√ыъш яюЄюь эх яютЄюЁ Є№, шэрўх эхы№ч  opt2s
  120.        LD A,#F0
  121.        LD (LZnorep+1),A
  122.        ENDIF
  123.         LD A,E
  124.         CALL LZLITPP
  125.         LD A,C
  126.        SCF
  127.         CALL PUTBYTi
  128.         LD A,E
  129.         CALL PUTBYTE
  130.        JP LZPUTQ
  131. LZPUT
  132. SMESH=$+1
  133.         LD DE,0
  134. ;;
  135.        IF dolds
  136.        LD HL,doldson
  137.        BIT 0,(HL) ;" "/"+"
  138.        JR Z,LZn256
  139. LZnorep=$+1
  140.         LD HL,0
  141.         ADD HL,HL
  142.         LD (LZnorep),HL
  143. OLDSMES=$+1
  144.         LD HL,0
  145.         JR C,LZn256
  146.        CP 5 ;10
  147.        JR C,LZn256
  148.        ;OR A
  149.         SBC HL,DE
  150.         LD C,1
  151.         JR Z,LZ256
  152.         INC C
  153. OL2SMES=$+1
  154.         LD HL,0
  155.         OR A
  156.         SBC HL,DE
  157.         JR Z,LZ257
  158.         INC C
  159. OL3SMES=$+1
  160.         LD HL,0
  161.         OR A
  162.         SBC HL,DE
  163.         JR Z,LZ257
  164.         INC C
  165. OL4SMES=$+1
  166.         LD HL,0
  167.         OR A
  168.         SBC HL,DE
  169.         JR NZ,LZn256
  170. LZ257
  171.         LD H,D ;SMESH/256
  172.         INC H
  173.         JR Z,LZ257nd ;disp=1..256
  174.         DEC A ;disp>=257
  175.         LD HL,#1FFF
  176.         ADD HL,DE
  177.         JR C,$+3
  178.         DEC A ;disp>=#2000
  179. LZ257nd
  180.         PUSH AF
  181.         LD A,C
  182.        SCF
  183.         CALL PUTBYTi
  184.       ld A,(KOLODIN)
  185.       CALL PUTBYTE
  186.         POP AF
  187.         CALL PUTBYTE
  188.        CALL LZMID
  189.        LD A,C
  190.      ;A=rd code
  191.         ADD A,A
  192.        ADD A,rdfrq&0xff
  193.         LD L,A
  194.         LD H,rdfrq/256
  195.         INC (HL)
  196.         JR NZ,$+4
  197.         INC HL
  198.         INC (HL)
  199.         JR LZPUTQ
  200. LZ256
  201. OLDKOL=$+1
  202.         CP 0
  203.         JR NZ,LZ257
  204.     ;;;CP 20
  205.     ;;;JR C,LZn256
  206.         XOR A
  207.        SCF
  208.         CALL PUTBYTi
  209.         JR LZPUTQ
  210. LZn256
  211.        ENDIF
  212.         CP 2
  213.         JP Z,LZPUT2
  214. ;;
  215.         LD HL,#1FFF
  216.         ADD HL,DE
  217.         JR C,$+3
  218.         DEC A ;>=#2000
  219.         CP 11
  220.         JR NC,LZPUT11
  221.         SUB 0xff&(3-270)
  222.         CALL PUTBYTi
  223. LZDISP
  224.         LD A,E
  225.         CALL PUTBYTE
  226.         LD A,D
  227.         CALL PUTBYTE
  228.      ;DE=-disp16
  229.         CALL LZDISPP
  230.      ;A=dd code
  231.         ADD A,A
  232.         LD L,A
  233.         LD H,ddfrq/256
  234.         INC (HL)
  235.         JR NZ,$+4
  236.         INC HL
  237.         INC (HL)
  238. LZPUTQ
  239.         ld A,(KOLODIN)
  240.       IF dolds
  241.       LD (OLDKOL),A
  242.       ENDIF
  243.         DEC A
  244.         LD LX,A
  245. TEKADR=$+1
  246.         LD BC,0
  247.       ;INC BC
  248.       ;DEC A
  249.       ;JR Z,oboitifilpo
  250.       ;DEC BC
  251.         ;LD (FILLSP),SP ;todo fix
  252. ;bc=Єхъє∙шщ рфЁхё
  253. fILPO1  INC BC
  254.         LD H,B
  255.         ld L,C
  256.        IF sureLE
  257.         EXX
  258.         ;OUT (C),L
  259.         call OUTpgTEXT
  260.         EXX
  261.        ENDIF
  262.         LD D,(HL)
  263.        RLC D
  264.         INC HL
  265.         LD A,(HL)
  266.        RRCA
  267.        XOR D
  268.       IF k3b
  269.       INC HL
  270.       XOR (HL)
  271.       DEC HL
  272.       ENDIF
  273.        LD E,A
  274.        XOR D
  275.       IF k256
  276.       OR #E0
  277.       ELSE
  278.        AND keymask
  279.        OR keys/512
  280.       ENDIF
  281.         LD D,A
  282.         EX DE,HL
  283.         ADD HL,HL
  284.         ;LD SP,HL
  285.       IF k256
  286.       EXX
  287.       LD A,k256
  288.       ;OUT (C),A
  289.       call OUTME
  290.       EXX
  291.       ENDIF
  292. ;hl=ъы■ў*2
  293. ;de=рфЁхё 3-ую ёшьтюыр
  294.         ;POP HL
  295.         ;PUSH DE
  296.         ;EX DE,HL
  297.         push de
  298.         ld a,(hl)
  299.         ld (hl),e
  300.         ld e,a
  301.         inc l
  302.         ld a,(hl)
  303.         ld (hl),d ;юсэютшыш уюыютє Ўхяюўъш
  304.         ld d,a
  305.         pop hl        
  306. ;hl=рфЁхё 3-ую ёшьтюыр
  307. ;de=ёЄрЁюх эрўрыю Ўхяюўъш, яЁюўшЄрээюх шч ї¤°-ЄрсышЎ√
  308.         ADD HL,HL ;яю 2 срщЄр эр ёшьтюы
  309.        LD A,H
  310.        RLCA
  311.        RLCA
  312.         SET 7,H
  313.         set 6,H
  314.         EXX
  315.        AND 3;D
  316.       ;IF k256
  317.       ;ADD A,E
  318.       ;ELSE
  319.       ; CP 2
  320.       ; SBC A,E
  321.       ;ENDIF
  322.         ;OUT (C),A
  323.         call OUTME
  324.         EXX
  325. ;фюяюыэ хь Ўхяюўъє эют√ь рфЁхёюь:
  326.         ;LD SP,HL
  327.         ;POP HL ;эх трцэю
  328.         ;PUSH DE
  329.         ld (hl),e
  330.         inc l
  331.         ld (hl),d ;ёё√ыър эр ёЄрЁюх эрўрыю Ўхяюўъш
  332.        IF sureLE==0
  333.         EXX
  334.         ;OUT (C),L
  335.         call OUTpgTEXT
  336.         EXX
  337.        ENDIF
  338.         DEC LX
  339.         JR NZ,fILPO1
  340.  
  341. ;FILLSP=$+1
  342. ;        LD SP,0
  343. ;oboitifilpo
  344.        INC BC
  345.        IF dolds
  346. ;1:pkiNPOP
  347. LZPUTQQ
  348.         LD HL,(OL3SMES)
  349.         LD (OL4SMES),HL
  350.         LD HL,(OL2SMES)
  351.         LD (OL3SMES),HL
  352.         LD HL,(OLDSMES)
  353.         LD (OL2SMES),HL
  354.         LD HL,(SMESH)
  355.         LD (OLDSMES),HL
  356.        ENDIF
  357.        LD H,B
  358.        ld L,C
  359. ;LZafter=$+1
  360.        ;LD HL,0
  361.         RET
  362. LZPUT11
  363.   ;A=len (хёыш disp>=#2000, Єю len-1)
  364.      ;;;DEC A ;фхяръхЁ єтхышўшЄ
  365.         PUSH AF
  366.       DEC A
  367.         CALL LZMIDPP
  368.         LD A,C
  369.         SUB 0xff&(-270)
  370.         CALL PUTBYTi
  371.         POP AF
  372.         CALL PUTBYTE
  373.        JP LZDISP
  374.  
  375. CRUN0   LD A,R
  376.         ADD A,A ;шэрўх +10s
  377.         CALL Z,PR1234
  378.        POP DE
  379.         LD L,-1
  380. CRUN1
  381. ;L=ьръё.фышэр ёё√ыъш
  382. ;DE=TEKADR
  383. ;lazy evaluation
  384.         CALL POISKm0
  385. ;;хёыш Єрь эрщфхэр ёё√ыър, Єю юэр чрэхёхэр т ї¤°-ЄрсышЎє
  386.         ;jr $
  387.        ld A,(KOLODIN)
  388.        OR A
  389.        CALL Z,FiND2
  390. ;;
  391. CRUN2
  392.         LD HL,(TEKADR)
  393.         INC HL
  394.         EX DE,HL
  395.         LD HL,(INEND)
  396.         XOR A
  397.         SBC HL,DE
  398.        JP Z,NACH3 ;??? яюўхьє TODO
  399.         LD (TEKADR),DE ;!
  400.         OR H
  401.         JR NZ,CRUNLN1
  402.         LD A,L
  403.         ld (MAXPOSL),A
  404. CRUNLN1
  405.         ld A,(KOLODIN)
  406.        IF fast0s
  407.        CP fast0s
  408.        CCF
  409.        JR C,NLQ ;яЁюяєёърхь LE, хёыш ёё√ыър >=fast0s
  410.                 ;(єёъюЁ хЄ фю 3 Ёрч!)
  411.         OR A
  412.         CCF
  413.        ELSE
  414.        SCF
  415.        INC A
  416.        JR Z,NLQ
  417.        DEC A
  418.        ENDIF
  419.        ;CY=1
  420. LEflag  JR Z,NLQ ;JR/JZ
  421.         LD HL,(SMESH)
  422.         PUSH HL
  423.         PUSH AF
  424.         CALL POISK
  425.        IF sureLE
  426.        LD (NLhl),HL
  427.        LD (NLbc),BC
  428.        ENDIF
  429.         POP BC
  430.         POP HL
  431.         ld A,(KOLODIN)
  432.         SCF
  433.         SBC A,B
  434.         JR Z,LONGn2
  435. NLCP    JR NC,LONGER
  436.         LD A,B
  437.         ld (KOLODIN),A
  438.         LD (SMESH),HL
  439.        IF sureLE
  440.    ;POISK яюыюцшы ёЄрЁ√щ ъы■ў т юъэю
  441.    ;тюёёЄрэртыштрхь
  442. NLbc=$+1
  443.         LD BC,0
  444. NLhl=$+1
  445.         LD HL,0
  446. SPoldky=$+1
  447.         LD DE,0
  448.        LD A,(HL)
  449.        LD (DE),A
  450.         LD (HL),C
  451.         INC L
  452.         inc E
  453.        LD A,(HL)
  454.        LD (DE),A
  455.         LD (HL),B
  456.        ELSE
  457.       IF k256
  458.       EXX
  459.       LD A,k256
  460.       ;OUT (C),A
  461.       call OUTME
  462.       EXX
  463.       ENDIF
  464.         ld HL,(LZoldky)
  465. SPoldky=$+1
  466.         LD (0),HL
  467.       IF k256
  468.       EXX
  469.       ;OUT (C),L
  470.       call OUTpgTEXT
  471.       EXX
  472.       ENDIF
  473.        ENDIF
  474.         JR NLQ ;CY
  475. ;1
  476. LONGER ;NC
  477. ;эютр  ёё√ыър ыєў°х
  478. ;эх ъюфшЁютрЄ№ byte ш ёё√ыъє, р чръюфшЁютрЄ№ byte ш яюфюцфрЄ№
  479.      LD HL,(TEKADR)
  480.      DEC HL
  481.      CALL NEPAK ;hl++
  482.      LD (TEKADR),HL ;эх EOF, Є.ъ. фю 2-ую яюшёър с√ыр яЁютхЁър
  483.      JP CRUN2 ;яЁюяєёъ яюшёър, Є.ъ. юэ єцх яЁютхфхэ
  484. ;
  485.  
  486. NLQ    ;CY
  487.         LD HL,(TEKADR)
  488.         DEC HL
  489.        CALL NC,NEPAK ;hl++
  490.         LD (TEKADR),HL
  491.      ;чряшё№ т output
  492.      ;эр юёэютх TEKADR,KOLODIN ш SMESH
  493. CRUNNACH3
  494.         CALL NACH3
  495. CRUNgo
  496. ;hl=TEKADR
  497.         LD (TEKADR),HL
  498.         EX DE,HL
  499. INEND=$+1
  500.         LD HL,0
  501.         XOR A
  502.         SBC HL,DE
  503.         RET Z ;ъюэхЎ єяръют√трхьюую сыюър?
  504.         OR H
  505.         JR Z,CRUN1 ;юёЄрыюё№ <256 срщЄ ;L=ьръё.фышэр ёё√ыъш
  506.        INC A
  507.         PUSH DE
  508.         JP NZ,CRUN0 ;L сєфхЄ=255
  509. ;юёЄрыюё№ юЄЁшЎрЄхы№эюх ўшёыю срщЄ
  510.        jr $ ;TODO error
  511. LONGn2
  512.         BIT 7,L
  513. SETA=$+1
  514.         LD C,#FD
  515.         JR NZ,$+4 ;very short
  516. SETB=$+1
  517.         LD C,#F4
  518.         LD A,H
  519.         INC A
  520.         JR Z,NO
  521.         BIT 7,L
  522. SETC=$+1
  523.         LD C,#F0
  524.        IF nastr
  525.         JR NZ,$+4
  526. SETD=$+1
  527.         LD C,#F0
  528.        ENDIF
  529.         INC A
  530.         JR Z,NO
  531. SETE=$+1
  532.         LD C,#FA
  533.        IF nastr
  534.         INC A
  535.         JR Z,NO
  536.         INC A
  537. SETF=$+1
  538.         LD C,#FA
  539.         JR Z,NO
  540.        ELSE
  541.         ADD A,2
  542.         JR C,NO
  543.        ENDIF
  544. SETG=$+1
  545.         LD C,#F8
  546.         ADD A,2
  547.         JR C,NO
  548. SETH=$+1
  549.         LD C,#F4
  550.         ADD A,2
  551.         JR C,NO
  552. SETI=$+1
  553.         LD C,#F0
  554.         ADD A,4
  555.         JR C,NO
  556. SETJ=$+1
  557.         LD C,#E8
  558.         ADD A,4
  559.         JR C,NO
  560. SETK=$+1
  561.         LD C,#E0
  562.         ADD A,8
  563.         JR C,NO
  564. SETL=$+1
  565.         LD C,#D0
  566.         ADD A,8
  567.         JR C,NO
  568. SETM=$+1
  569.         LD C,#C0
  570.         ADD A,16
  571.         JR C,NO
  572. SETN=$+1
  573.         LD C,#A0
  574.         ADD A,16
  575.         JR C,NO
  576. SETO=$+1
  577.         LD C,#80
  578. NO      LD A,(SMESH+1)
  579.         CP C
  580.        JP NLCP
  581. ;;
  582. ;A=-dispL
  583. LZLITPP
  584.        LD BC,#205
  585.         ADD A,4
  586.         RET C    ;1..4
  587.         INC C
  588.         ADD A,4
  589.         RET C    ;5..8
  590.         INC C
  591.        INC B ;3
  592.         ADD A,8
  593.         RET C    ;9..#10
  594.         INC C
  595.        INC B ;4
  596.         ADD A,16
  597.         RET C    ;11..20
  598.         INC C
  599.        INC B ;5
  600.         ADD A,32
  601.         RET C    ;21..40
  602.         INC C
  603.        INC B ;6
  604.         ADD A,64
  605.         RET C    ;41..80
  606.         INC C
  607.         ADD A,64
  608.         RET C    ;81..C0
  609.         INC C
  610.         ADD A,64
  611.         RET      ;C1..100
  612. LZMID
  613.        LD B,0
  614.         CP 10
  615.         JR NC,LZMIDPP
  616.         SUB 2
  617.         LD C,A
  618.         XOR A
  619.         RET      ;2..9
  620. ;;
  621. LZMIDPP
  622.         NEG
  623.         LD BC,#108
  624.         ADD A,11
  625.         RET C    ;A..B
  626.         INC C
  627.         ADD A,2
  628.         RET C    ;C..D
  629.         INC C
  630.         ADD A,2
  631.         RET C    ;E..F
  632.         INC C
  633.         ADD A,2
  634.         RET C    ;10..11
  635.         INC C
  636.        INC B ;2
  637.         ADD A,4
  638.         RET C    ;12..15
  639.         INC C
  640.         ADD A,4
  641.         RET C    ;16..19
  642.         INC C
  643.         ADD A,4
  644.         RET C    ;1A..1D
  645.         INC C
  646.         ADD A,4
  647.         RET C    ;1E..21
  648.         INC C
  649.        INC B ;3
  650.         ADD A,8
  651.         RET C    ;22..29
  652.         INC C
  653.         ADD A,8
  654.         RET C    ;2A..31
  655.         INC C
  656.         ADD A,8
  657.         RET C    ;32..39
  658.         INC C
  659.         ADD A,8
  660.         RET C    ;3A..41
  661.         INC C
  662.        INC B ;4
  663.         ADD A,16
  664.         RET C    ;42..51
  665.         INC C
  666.         ADD A,16
  667.         RET C    ;52..61
  668.         INC C
  669.         ADD A,16
  670.         RET C    ;62..71
  671.         INC C
  672.         ADD A,16
  673.         RET C    ;72..81
  674.         INC C
  675.        INC B ;5
  676.         ADD A,32
  677.         RET C    ;82..A1
  678.         INC C
  679.         ADD A,32
  680.         RET C    ;A2..C1
  681.         INC C
  682.         ADD A,32
  683.         RET C    ;C2..E1
  684.         INC C
  685.         ADD A,32
  686.         RET      ;E2..101
  687. LZDISPP
  688.        EX DE,HL
  689.         XOR A
  690.         LD DE,1
  691.        LD B,E;0+
  692.         ADD HL,DE
  693.         RET C        ;1
  694.         INC A
  695.         ADD HL,DE
  696.         RET C        ;2
  697.         INC A
  698.         ADD HL,DE
  699.         RET C        ;3
  700.         INC A
  701.         ADD HL,DE
  702.         RET C        ;4
  703.         INC A
  704.        INC B ;1+
  705.         INC E
  706.         ADD HL,DE
  707.         RET C        ;5..6
  708.         INC A
  709.         ADD HL,DE
  710.         RET C        ;7..8
  711.         INC A
  712.        INC B ;2+
  713.         LD E,4
  714.         ADD HL,DE
  715.         RET C        ;9..C
  716.         INC A
  717.         ADD HL,DE
  718.         RET C        ;D..10
  719.         INC A
  720.        INC B ;3+
  721.         LD E,8
  722.         ADD HL,DE
  723.         RET C        ;11..18
  724.         INC A
  725.         ADD HL,DE
  726.         RET C        ;19..20
  727.         INC A
  728.        INC B ;4+
  729.         LD E,#10
  730.         ADD HL,DE
  731.         RET C        ;21..30
  732.         INC A
  733.         ADD HL,DE
  734.         RET C        ;31..40
  735.         INC A
  736.        INC B ;5+
  737.         LD E,#20
  738.         ADD HL,DE
  739.         RET C        ;41..60
  740.         INC A
  741.         ADD HL,DE
  742.         RET C        ;61..80
  743.         INC A
  744.        INC B ;6+
  745.         LD E,#40
  746.         ADD HL,DE
  747.         RET C        ;81..C0
  748.         INC A
  749.         ADD HL,DE
  750.         RET C        ;C1..101
  751.         INC A
  752.        INC B ;7+
  753.         LD E,#80
  754.         ADD HL,DE
  755.         RET C        ;101..180
  756.         INC A
  757.         ADD HL,DE
  758.         RET C        ;181..200
  759.         INC A
  760.        INC B ;8+
  761.         INC H
  762.         RET Z        ;201..300
  763.         INC A
  764.         INC H
  765.         RET Z        ;301..400
  766.         INC A
  767.        INC B ;9+
  768.         LD DE,#200
  769.         ADD HL,DE
  770.         RET C        ;401..600
  771.         INC A
  772.         ADD HL,DE
  773.         RET C        ;601..800
  774.         INC A
  775.        INC B ;10+
  776.         SLA D
  777.         ADD HL,DE
  778.         RET C        ;801..C00
  779.         INC A
  780.         ADD HL,DE
  781.         RET C        ;C01..1000
  782.         INC A
  783.        INC B ;11+
  784.         SLA D
  785.         ADD HL,DE
  786.         RET C        ;1001..1800
  787.         INC A
  788.         ADD HL,DE
  789.         RET C        ;1801..2000
  790.         INC A
  791.        INC B ;12+
  792.         SLA D
  793.         ADD HL,DE
  794.         RET C        ;2001..3000
  795.         INC A
  796.         ADD HL,DE
  797.         RET C        ;3001..4000
  798.         INC A
  799.        INC B ;13+
  800.         SLA D
  801.         ADD HL,DE
  802.         RET C        ;4001..6000
  803.         INC A
  804.         ADD HL,DE
  805.         RET          ;6001..8000
  806.  
  807. POISKm0
  808.         ;jr $
  809.         LD A,L
  810.         ld (MAXPOSL),A
  811.         XOR A
  812.         ld (KOLODIN),A
  813. ;DE=TEKADR
  814. POISK   ;ld (POISKSP),SP ;not fix
  815.        IF sureLE
  816.         EXX
  817.         ;OUT (C),L
  818.         call OUTpgTEXT
  819.         EXX
  820.        ENDIF
  821.          LD A,(dicszM)
  822.          OR A
  823.          JR Z,$+6
  824.        LD A,(POISKIP)
  825.        OR A
  826.        jp Z,LZnfnd ;тьхёЄю dicsz=0k POISKIP=0
  827.         ld A,(MAXPOSL)
  828.        IF fastCPIQ
  829.         DEC A
  830.         ld (MAXPOSLm1),A
  831.         INC A
  832.        ENDIF
  833.         ADD A,-3
  834.        jp NC,LZnfnd
  835.         ld (MAXPOSLm3),A
  836.        ld HL,KOLODIN
  837.        SBC A,(HL)
  838.        jp C,LZnfnd
  839.         LD BC,(PUTBITB) ;#C000..>0
  840.         LD A,B
  841.        ADD A,pak9/256 ;#7C00
  842.        LD B,A
  843. dicszM=$+2
  844.        LD HL,1-#8000 ;тьхёЄю 0 POISKIP=0
  845.        ADD HL,DE ;рЁшЇьхЄшў.эрў.юъэр
  846.        ;ьюцхЄ яюыєўшЄ№ё  <0
  847.        JR NC,pushbc
  848.         PUSH HL
  849.         SBC HL,BC
  850.         JR NC,$+4 ;HL>BC,схЁхь HL
  851.          POP HL   ;HL<=BC,схЁхь BC
  852. pushbc   PUSH BC
  853.         POP IX ;Ёхры№эюх эрў.юъэр
  854.         LD A,(DE)
  855.        RLCA
  856.         LD C,A
  857.         INC DE
  858.         LD A,(DE)
  859.         ld (LZbyte2),A
  860.        RRCA
  861.        XOR C
  862.       IF k3b
  863.       EX DE,HL
  864.       INC HL
  865.       XOR (HL)
  866.       DEC HL
  867.       EX DE,HL
  868.       ENDIF
  869.        LD L,A
  870.        XOR C
  871.       IF k256
  872.       OR #E0
  873.       ELSE
  874.        AND keymask
  875.        OR keys/512
  876.       ENDIF
  877.         LD H,A
  878.         ADD HL,HL
  879.        LD (SPoldky),HL
  880.         ;LD SP,HL
  881.       IF k256
  882.       EXX
  883.       LD A,k256
  884.       ;OUT (C),A
  885.       call OUTME
  886.       EXX
  887.       ENDIF
  888.         ;POP HL
  889.         ;PUSH DE
  890.         push de
  891.         ld a,(hl)
  892.         ld (hl),e
  893.         ld e,a
  894.         inc l
  895.         ld a,(hl)
  896.         ld (hl),d ;юсэютшыш уюыютє Ўхяюўъш
  897.         ld d,a
  898.         ex de,hl
  899.         pop de    
  900. ;hl=ёЄрЁюх эрўрыю Ўхяюўъш, яЁюўшЄрээюх шч ї¤°-ЄрсышЎ√
  901. ;de=рфЁхё 3-ую ёшьтюыр
  902.         ld (LZoldky),HL
  903.         EX DE,HL
  904.         ld (LZnxadr),HL
  905.         INC HL
  906.         ld (LZadol3),HL
  907.         EX DE,HL
  908.         jp LZGO
  909.  
  910. ;cache эрўрыё 
  911.        IF fastCPIQ
  912. LZCPImx
  913. MAXPOSL=$+1
  914.         LD A,0
  915.         ld (KOLODIN),A
  916.         OR A
  917.         SBC HL,DE
  918.         LD (SMESH),HL ;юЄЁшЎрЄхы№эюх ёьх∙хэшх
  919.        jp LZnfnd;SM
  920.        ENDIF
  921. LZCPIQ
  922.         DEC HL
  923.        IF fastCPIQ==0
  924.         INC C
  925. LZCPImx
  926. MAXPOSL=$+1
  927.         LD A,0
  928.        ELSE
  929. MAXPOSLm1=$+1
  930.         LD A,0
  931.        ENDIF
  932.         SUB C ;NC
  933.         SBC HL,DE
  934. LZn3
  935.         ld (KOLODIN),A
  936.         LD (SMESH),HL ;юЄЁшЎрЄхы№эюх ёьх∙хэшх
  937.        IF fast0s
  938. ;todo:
  939. ;хёыш oldSMESH с√ыю SMESH+1, Єю ь√ шьххь фхыю ё яютЄ.срщЄрьш
  940. ;ёўшЄрхь шї ўшёыю юЄ ъєЁёюЁр =L
  941. ;фтшурхь SMESH эрчрф, шэъЁхьхэЄшЁє  KOLODIN, until:
  942.                                      ;срщЄ шчьхэшыё  | KOLODIN>L
  943.        CP 64;fast0s
  944.        JR NC,LZnfnd
  945.    ;  JC LZnf0s ;уы■ъ эр tapecool.W яюёых 8 эєыхщ
  946.    ;  INC A
  947.    ;  j Z,LZnfnd
  948.    ;  LD A,H
  949.    ;  AND L
  950.    ;  INC A
  951.    ;j Z,LZnfnd ;їюЄ  ьюцхЄ с√Є№ ёё√ыър ыєў°х, тъы■ўр■∙р 
  952.                ;ёыхфє■∙шх эхяютЄ.срщЄ√
  953.      ;JNZ LZnf0s
  954.      ;LD HL,(LZadr3)
  955.      ;LD A,(HL)
  956.      ;DEC HL,HL,HL ;-1-щ срщЄ
  957.      ;CP (HL)
  958.      ;JNZ LZnf0s
  959.      ;DEC HL
  960.      ;CP (HL)
  961.      ;JZ $-2
  962.      ;INC HL
  963.      ;INC HL ;2-щ срщЄ
  964.      ;LD DE,(LZadol3)
  965.      ;JR LZokn77
  966. LZnf0s
  967.        ELSE
  968.        INC A
  969.        JR Z,LZnfnd
  970.        ENDIF
  971. LZadol3=$+1
  972. LZcont  LD DE,0 ;рфЁхё ъєЁёюЁэюую 3 срщЄр
  973. LZadr3=$+1
  974.         LD HL,0 ;рфЁхё 3-ую срщЄр
  975. LZbad3  DEC HL
  976. LZbad2  ADD HL,HL ;яю 2 срщЄр эр ёшьтюы
  977.        LD A,H
  978.        RLCA
  979.        RLCA
  980.         SET 7,H
  981.         set 6,H
  982.         EXX
  983.        AND 3;D
  984.       ;IF k256
  985.       ;ADD A,E
  986.       ;ELSE
  987.       ; CP 2
  988.       ; SBC A,E
  989.       ;ENDIF
  990.         ;OUT (C),A
  991.         call OUTME
  992.         EXX
  993.         ;LD SP,HL
  994.         ;POP HL
  995.         ld a,(hl)
  996.         inc l
  997.         ld h,(hl)
  998.         ld l,a
  999. LZGO
  1000. ;hl=ёЄрЁюх эрўрыю Ўхяюўъш, яЁюўшЄрээюх шч ї¤°-ЄрсышЎ√
  1001. ;de=рфЁхё 3-ую ёшьтюыр
  1002.         EXX
  1003.         ;OUT (C),L
  1004.         call OUTpgTEXT
  1005.         EXX
  1006. LZokn77 LD A,HX
  1007.         CP H
  1008.         JR NC,LZokno7 ;ь.с.ъюэўшыюё№ юъэю?
  1009. LZbyte2=$+1
  1010. LZwokne LD A,0  ;яЁютхЁър 2-ую срщЄр, Є.ъ.
  1011.         CP (HL) ;юэ с√ы ьрёъшЁютрэ т ъы■ўх
  1012.        jp NZ,LZbad2
  1013.         INC HL
  1014.      ;ёЁртэштрхь 3-щ срщЄ
  1015.         LD A,(DE)
  1016.         CP (HL)
  1017.        jp NZ,LZbad3
  1018.         ld (LZadr3),HL
  1019.         INC HL
  1020.         inc DE
  1021. MAXPOSLm3=$+1
  1022.         LD BC,0
  1023. KOLODIN=$+1
  1024.        LD A,0
  1025.        SUB 3
  1026.        JR NC,LZPREC
  1027. LZCPI_  LD A,(DE)
  1028.         CPI
  1029.         JR NZ,LZCPIQ
  1030. LZCPIi  INC DE
  1031.         jp PE,LZCPI_
  1032.        jp LZCPImx
  1033.  
  1034. ;KOLODIN>=4
  1035. LZPREC
  1036. ;bc=MAXPOSLm3
  1037.          CP C
  1038.          JR NC,LZnfnd ;ёэрЁъ2
  1039.          ;KOLODIN+1<=MAXPOSL
  1040.         INC A ;>=1
  1041.         LD B,A ;KOLODIN-2 (3 єцх ёЁртэшыш)
  1042. LZPRE0 LD A,(DE)
  1043.        CPI
  1044.        JR NZ,LZcont
  1045.        INC DE
  1046.        DJNZ LZPRE0
  1047. ;ёЁртэшыш KOLODIN+1 срщЄ юъ
  1048.          INC C
  1049.          DEC C
  1050.           jp Z,LZCPImx ;ёэрЁъ2
  1051.         LD A,(DE)
  1052.         CPI
  1053.        JR Z,LZCPIi
  1054. ;+2-щ эх ёютяры - len=KOLODIN+1
  1055.        SCF
  1056.         SBC HL,DE
  1057.         LD A,(SMESH+1)
  1058.         INC A
  1059.        JR Z,LZmF
  1060.         INC A
  1061.        ;IFN cache
  1062.        ; LD A,(SET2)
  1063.        ;ENDIF
  1064.        JR Z,LZmE
  1065. LZmEQ
  1066.         ld A,(KOLODIN)
  1067.         INC A
  1068.        jp LZn3
  1069.  
  1070. LZokno7 JR NZ,LZnfnd
  1071.         LD A,L
  1072.         CP LX
  1073.         JR NC,LZwokne
  1074. LZnfnd
  1075.          ld A,(KOLODIN)
  1076.          CP 3
  1077.          JR NZ,LZnfnn3
  1078.         LD HL,(SMESH)
  1079.         DEC HL
  1080.         LD A,H
  1081.         CP #E0 ;#E000 єцх эхы№ч 
  1082.         JR NC,LZnfnn3
  1083.          XOR A
  1084.          ld (KOLODIN),A
  1085. LZnfnn3
  1086. LZnxadr=$+1
  1087.         LD HL,0
  1088. LZoldky=$+1
  1089.         LD DE,0
  1090.         ADD HL,HL ;яю 2 срщЄр эр ёшьтюы
  1091.        LD A,H
  1092.        RLCA
  1093.        RLCA
  1094.         SET 7,H
  1095.         set 6,H
  1096.         EXX
  1097.        AND 3;D
  1098.       ;IF k256
  1099.       ;ADD A,E
  1100.       ;ELSE
  1101.       ; CP 2
  1102.       ; SBC A,E
  1103.       ;ENDIF
  1104.         ;OUT (C),A
  1105.         call OUTME
  1106.         EXX
  1107.         ;LD SP,HL
  1108.         ;POP BC
  1109.         ;PUSH DE
  1110.         ld c,(hl)
  1111.         ld (hl),e
  1112.         inc l
  1113.         ld b,(hl)
  1114.         ld (hl),d ;юсэютшыш уюыютє Ўхяюўъш
  1115.          dec l
  1116. ;hl=эх эєцэю? TODO
  1117. ;bc=ёЄрЁюх эрўрыю Ўхяюўъш, яЁюўшЄрээюх шч ї¤°-ЄрсышЎ√
  1118.  
  1119.        IF sureLE==0
  1120.         EXX
  1121.         ;OUT (C),L
  1122.         call OUTpgTEXT
  1123.         EXX
  1124.        ENDIF
  1125. ;POISKSP=$+1
  1126. ;        LD SP,#F0F4
  1127.         RET
  1128.  
  1129. LZmF    LD A,H
  1130. SET1=$+1
  1131.         CP #F4
  1132. LZmC    JR NC,LZmEQ
  1133.         jp LZcont
  1134. LZmE    LD A,H
  1135. SET2=$+1
  1136.         CP #F0
  1137.         JR LZmC
  1138.  
  1139. FiND2
  1140.          ret ;TODO ёфхырЄ№ яюЄюь ¤Єш 2-ёшьтюы№э√х ёё√ыъш
  1141.         LD A,(POISKIP)
  1142.         OR A
  1143.         RET Z
  1144.         LD A,(extext)
  1145.         CP "a"
  1146.         RET NZ
  1147.         ld A,(MAXPOSL)
  1148.         CP 2
  1149.         RET C
  1150.         LD HL,(TEKADR)
  1151.         LD DE,(ADRfrom)
  1152.        SBC HL,DE
  1153.        RET Z
  1154.        LD B,L
  1155.        XOR A
  1156.        CP H
  1157.        ADD HL,DE
  1158.        JR Z,$+3
  1159.        LD B,A;-1
  1160.         LD E,(HL)
  1161.         INC HL
  1162.         LD D,(HL)
  1163.         DEC HL
  1164.         LD A,D
  1165. FiND20  CP (HL)
  1166.         DEC HL
  1167.         JR NZ,FiND20N ;RET NZ
  1168.         LD A,(HL)
  1169.         CP E
  1170.         JR Z,FiND20Y
  1171.         LD A,D
  1172. FiND20N DJNZ FiND20
  1173.         RET
  1174. FiND20Y
  1175.         LD A,2
  1176.         ld (KOLODIN),A
  1177.         LD DE,(TEKADR)
  1178.         SBC HL,DE
  1179.         LD (SMESH),HL
  1180.         RET
  1181.