Subversion Repositories NedoOS

Rev

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

  1. PACKfil
  2. ;hl=addr
  3. ;[b=size in sectors]
  4. ;[de=first sector]
  5. ;hl'=fout+
  6. ;de'=0?
  7. packfilsz=0x8000
  8.  
  9. ;TODO яЁхфтрЁшЄхы№эю яЁютхЁшЄ№, ўЄю Їрщы ёє∙хёЄтєхЄ
  10.  
  11.         ld a,(filehandle)
  12.         ld b,a
  13.         OS_GETFILESIZE ;dehl=filesize
  14.         ld (filesize),hl
  15.         ld (filesizeHSW),de
  16.  
  17.         ld hl,0
  18.         ;ld (paksz),hl
  19.         ;ld (paksz+2),hl
  20.         ld (unpsz),hl
  21.         ld (unpsz+2),hl
  22.  
  23.         ;ld a,pgTEXT
  24.         ;call OUTME
  25. ;тъы■ўхэр pgTEXT?
  26.         EXX
  27.         LD de,0;D,0 ;saved ;TODO de?
  28.        ;LD (oldsaved),DE ;фы  яхЁхяръютъш т Ёхцшьх store
  29.        ;LD (oldhl_),HL ;фы  яхЁхяръютъш т Ёхцшьх store
  30.        EXX
  31.         LD A,(tmethod)
  32.         SUB "p"
  33.         JR Z,$+4 ;store
  34.         LD A,4   ;pack
  35. dic0
  36.        ;PUSH HL
  37.        ;LD HL,(SAVE1st)
  38.        ;LD (oldSAVE1st),HL ;фы  яхЁхяръютъш т Ёхцшьх store?
  39.        ;LD HL,(lded)
  40.        ;LD (oldlded),HL ;фы  яхЁхяръютъш т Ёхцшьх store
  41. pACKREP
  42.          ;xor a ;"store"
  43.         LD (POISKIP),A
  44.        
  45.         ;LD HL,(unpsz)
  46.         ;LD (remainsz),HL
  47.        
  48.          call BYTEsPP_startfile ;ёюїЁрэшЄ№ шыш яЁюяєёЄшЄ№ яхЁт√х 2 ёхъЄюЁр Їрщыр
  49.        
  50.         LD A,62
  51.         LD (p2NOjr),A ;яхЁт√щ Ёрч яЁюяєёърхь jr
  52.         LD HL,0
  53.         LD (CURCRC),HL
  54.         LD (CURCRC2),HL
  55.        ;POP HL
  56. LZ
  57.        ;PUSH BC
  58.         call OUTpgTEXT
  59.  
  60.         exx
  61.         push bc
  62.         push de
  63.         push hl
  64.         exx
  65.         ld de,-packfilsz
  66.         ld (ADRfrom),de
  67.         ld hl,packfilsz
  68. ;de=buf
  69. ;hl=size
  70.         call readstream_file
  71.          push hl
  72.          ld de,(unpsz)
  73.          add hl,de
  74.          ld (unpsz),hl
  75.          ld hl,(unpsz+2)
  76.          jr nc,$+3
  77.          inc hl
  78.          ld (unpsz+2),hl
  79.          pop hl
  80.          ;ld (remainsz),hl
  81.         exx
  82.         pop hl
  83.         pop de
  84.         pop bc
  85.         exx
  86. ;hl=block length
  87.  
  88. p2NOjr=$
  89.        JR p2NO1stKUS ;яхЁт√щ Ёрч ld a,N
  90. ;яхЁт√щ сыюъ Їрщыр:
  91.         EXX
  92.        PUSH HL ;fheadCRC arc pos
  93.         EXX
  94.        LD A,(THEADON)
  95.        CP "n" ;чруюыютъш ЁрчЁх°хэ√?
  96.          push hl
  97.         LD IX,fihd-2
  98.         LD A,(fihdsz)
  99.         LD B,A
  100.         CALL Z,BLOCK ;чряшё√трхь чруюыютюъ Їрщыр
  101.          pop hl
  102.         EXX
  103.         LD C,1 ;bit collector
  104.        PUSH DE
  105.        PUSH HL ;file start pos
  106.         EXX
  107. p2NO1stKUS
  108.  
  109.          ld a,h
  110.          or l
  111.          jp z,packnoremain ;яєёЄющ Їрщы/яєёЄющ 32ъ сыюъ Їрщыр ;яЁртшы№э√щ т√їюф яЁш фышэх 0 (эр ёЄхъх 3 ўшёыр)
  112.  
  113.        exx
  114.        PUSH BC,DE,HL
  115.        exx
  116.  
  117.         push hl ;block length
  118.        
  119.         call mktcrc ;TODO юфшэ Ёрч яЁш ёЄрЁЄх
  120.         call clearhashes
  121.        
  122.         exx
  123. ;       LD HL,pgLZ*256+pgTEXT ;TODO єсЁрЄ№ ¤Єш ъюэёЄрэЄ√ т ЁхушёЄЁрї
  124. ;      IF k256
  125. ;      LD DE,#352
  126. ;      ELSE
  127. ;       LD DE,#3EC
  128. ;      ENDIF
  129.         ;LD BC,32765
  130.         ;OUT (C),L
  131.         call OUTpgTEXT
  132.         exx
  133.  
  134.        pop bc ;block length      
  135. ADRfrom=$+1
  136.         LD HL,0
  137.         push bc
  138.         push hl
  139. ;hl=addr, bc=length
  140.        call gencrc
  141.  
  142.         ld hl,frqs
  143.         ld bc,frqend-frqs-1
  144.         ld (hl),-1
  145.         call fillmem ;ўшёЄшь frqs
  146.         ld hl,ddfrq
  147.         ld bc,ddfrqend-ddfrq-1
  148.         ld (hl),-1
  149.         call fillmem ;ўшёЄшь ddfrq+rdfrq
  150.  
  151.         pop hl
  152.         pop bc
  153.         LD DE,pakto
  154. ;hl=TEKADR
  155. ;de=PUTBITB=pakto (TODO 0)
  156. ;bc=length
  157.         LD A,1
  158.         LD (PUTBITC),A
  159.         LD (PUTBITB),DE
  160.        PUSH HL
  161.         ADD HL,BC
  162.         LD (INEND),HL
  163.        POP HL ;TEKADR
  164.         ;jr $
  165.         CALL CRUNgo;LZPP
  166.  
  167.         if 1==1
  168.        LD A,(POISKIP) ;method (0=store)
  169.        OR A
  170.        JR Z,NO269 ;store
  171.       ;фюсртшь 269
  172. filesize=$+1
  173.        ld hl,0
  174.        ld de,(unpsz)
  175.        ;or a
  176.        sbc hl,de
  177.        ld a,h
  178.        or l
  179. filesizeHSW=$+1
  180.        ld hl,0
  181.        ld de,(unpsz+2)
  182.        ;or a
  183.        sbc hl,de
  184.        or h
  185.        or l
  186.         ADD A,-1 ;хёыш ¤Єю с√ы яюёыхфэшщ сыюъ Їрщыр (FILEremain=0), Єю сєфхЄ NC - эх чряш°хь ышЄхЁры
  187.        LD A,269&0xff
  188.         CALL C,PUTBYTi ;чряшёрыш ышЄхЁры юсэютыхэш  фхЁхт№хт? яюёых сыюър! Є.х ьхцфє сыюърьш
  189. NO269
  190.         endif
  191.  
  192.        SCF
  193.        SBC A,A
  194.        CALL PUTBIT
  195.        CALL PUTBYTE ;чряшёрыш ышЄхЁры ъюэЎр сыюър (эхтючьюцэ√щ)
  196.         LD B,7
  197.         CALL PUT0
  198.         DJNZ $-3 ;flush сшЄютюую сєЇхЁр
  199.  
  200. ;;Huffman:
  201.        EXX
  202.         ;OUT (C),H
  203.         ld a,pgLZ
  204.         call OUTME
  205.        ;IFN ramdisk
  206.        ; LD A,H
  207.        ; LD (BYTEPG),A
  208.        ;ENDIF
  209.        POP HL,DE,BC
  210.        EXX
  211.        
  212.         call packmktrees
  213.  
  214.        LD HL,LBYTE
  215.        LD A,(POISKIP)
  216.        OR A
  217.        JR Z,infa ;"store"
  218.         call packwrtrees ;т яхЁтюь сыюъх Їрщыр яЁшэєфшЄхы№эю яш°хь фхЁхт№  схч ъюьрэф√, т яюёыхфє■∙шї ¤Єю сєфхЄ яюёых ъюьрэф√ (ъюЄюЁр  т ъюэЎх тёхї сыюъют, ъЁюьх яюёыхфэхую)
  219.        LD HL,PKLHPP
  220. infa
  221.        LD (pkiCALL+1),HL ;PKLHPP (ъюфшЁєхь ўхЁхч фхЁхтю)/LBYTE (яЁюёЄю ъюяшЁєхь срщЄ√)
  222.  
  223.         LD A,24
  224.         LD (p2NOjr),A
  225.        
  226.        IF fastWRI
  227.         LD A,(PUTBITB+1) ;уфх юёЄрэютшыё  LZ ъюфхЁ (HSB)
  228.         CP #C0
  229.         JR NC,$+4 ;LZ ъюфхЁ тё╕ єьхёЄшы т ёЄЁрэшЎє - ьюцэю шьхЄ№ сюы№°ющ сєЇхЁ чряшёш ш ёюїЁрэ Є№ сюы№°шь сыюъюь
  230. ;хёыш lz data т√°ыю чр яЁхфхы√ ёЄЁрэшЎ√ ш єцх т pak9+ - эхы№ч  шьхЄ№ сюы№°ющ сєЇхЁ чряшёш
  231.           LD A,fout/256+2+(svbfsz/256);fout/256+4 ;ё■фр эх яюярфрхь яЁш сыюърї 4K
  232.         LD (BYTEend),A ;рфЁхё (HSB), яЁш фюёЄшцхэшш ъюЄюЁюую яЁюЎхфєЁр BYTE яш°хЄ эр фшёъ
  233.        ENDIF
  234.        
  235.         call packencodehuff
  236.        ;CALL OUTpgTEXT ;!!! Ёрчтх фю ¤Єюую с√ыю эх тъы■ўхэю?
  237.        
  238.        IF fastWRI ;??? TODO
  239.      ;save buf
  240.         EXX
  241.         LD A,H
  242.         CP fout/256+2
  243.        JR C,FremNS ;т сєЇхЁх чряшёш ёухэхЁшЁютрэю эх сюыхх 512 срщЄ
  244.         PUSH BC
  245.        PUSH HL
  246.         CALL BYTEsPP ;ёюїЁрэшыш Ўхыюх ўшёыю ёхъЄюЁют
  247.        ;HL=fout+512
  248.       ;TODO фтшурЄ№ de, хёыш ёюїЁрэ ыш юЄ fout? ёхщўрё ъюёЄ√ы№ т ъюэЎх Їрщыр
  249.         EX DE,HL ;saved
  250.        EX (SP),HL
  251.         LD C,L
  252.         LD B,E
  253.         LD L,E
  254.         INC BC
  255.         LDIR ;юёЄрЄюъ яхЁхэюёшь т fout+512
  256.         DEC DE
  257.         EX DE,HL
  258.        POP DE ;saved TODO
  259.         POP BC
  260. FremNS
  261.         EXX
  262.        ENDIF
  263.      ;фюуЁєчшЄ№
  264.         JP LZ
  265.  
  266. PKST
  267.         EXX
  268.         LD HL,fout
  269.         LD E,L;0
  270.        LD D,L ;for CREATE empty (de=SAVEsz in sectors)
  271.         EXX
  272.         RET
  273.  
  274. packnoremain
  275. ;т ёЄхъх 3 ўшёыр
  276.         LD B,7
  277.        CALL PKBDpp ;фют√уЁєчшЄ№ срщЄ
  278. ;---continue filehead
  279.         EXX
  280.         PUSH DE ;saved ёхщўрё
  281.         EXX
  282.         POP HL
  283.        POP DE ;file start pos
  284.        POP BC ;saved с√ыю
  285.        inc bc
  286.        inc bc ;ъюёЄ√ы№ TODO
  287.         XOR A
  288.         SBC HL,BC ;add H
  289.         LD B,L
  290.         ld C,A ;c=0
  291.       LD A,H
  292.         EXX
  293.         PUSH HL
  294.         EXX
  295.         POP HL ;current outfile pos
  296.         SBC HL,DE
  297.         ADD HL,BC ;add H
  298.       ADC A,C ;c=0
  299.        POP DE ;filehead CRC outfile pos
  300.         LD IX,2
  301.         ADD IX,DE
  302. ;HL=filehead paksz
  303. ;c=0
  304.         LD (paksz),HL ;TODO єсЁрЄ№ (ёхщўрё фы  яюърчр ЎшЇЁ?)
  305.         ;ld bc,0
  306.       LD B,A
  307.        ;EI
  308.        ;ld hl,(paksz)
  309.        ;ld bc,(paksz+2)
  310. ;bchl=paksz
  311.        LD A,(CPn)
  312.        CP "n"
  313.        RET NZ ;no CRC??? TODO
  314.        LD A,(THEADON)
  315.        CP "n"
  316.        ret nz;jr NZ,SAVE_ ;no rar header
  317.         PUSH DE ;filehead CRC outfile pos
  318.         LD (IX+5),L
  319.         LD (IX+6),H
  320.       LD (IX+7),c
  321.       LD (IX+8),b
  322.      
  323.       ld hl,(unpsz)
  324.       ld (ix+9),l
  325.       ld (ix+10),h
  326.       ld hl,(unpsz+2)
  327.       ld (ix+11),l
  328.       ld (ix+12),h
  329.      
  330. POISKIP=$+1
  331.        JR $+6
  332.        LD (IX+23),"0"
  333.         LD HL,(CURCRC)
  334.         LD (IX+14),L
  335.         LD (IX+15),H
  336.         LD HL,(CURCRC2)
  337.         LD (IX+16),L
  338.         LD (IX+17),H
  339.         LD A,(fihdsz)
  340.         SUB 2 ;ЁрчьхЁ чруюыютър - 2
  341.         LD B,A
  342.         CALL UPCRC1
  343.         POP HL ;filehead CRC outfile pos
  344.         LD (HL),E
  345.         INC HL
  346.         LD (HL),D
  347.        
  348.         if 1==1
  349.         ;xor a
  350.         ;jp pACKREP
  351.         ret
  352.         else
  353.        
  354.         LD HL,(unpsz)
  355.         LD BC,(paksz)
  356.        OR A
  357.         SBC HL,BC
  358.        ret nc;jr NC,SAVE_ ;unpsz >= paksz
  359. ;яхЁхёюїЁрэ хь т Ёхцшьх stored
  360. ;TODO
  361.  
  362. ;oldSAVE1st=$+1
  363. ;       LD HL,0
  364. ;       LD (SAVE1st),HL
  365. oldlded=$+1
  366.        LD HL,0
  367.        LD (lded),HL
  368. oldsaved=$+1
  369.         LD DE,0
  370. oldhl_=$+1
  371.         LD HL,0
  372.         EXX
  373.         CALL CON1NAM
  374.         XOR A ;"store"
  375.        PUSH HL
  376.         JP pACKREP
  377.  
  378.         endif
  379.        
  380. ;flush and close outfile
  381. SAVE_
  382.         EXX
  383.         ;LD A,L
  384.         ;LD (SAVElenLS1),A
  385.  
  386.         push hl
  387.         call BYTEsPP_endfile ;ёюїЁрэ хь, ўЄю эх єёяхыш ёюїЁрэшЄ№
  388.        
  389. ;SAVE1st=$+1
  390.         ;LD HL,0 ;1stfree
  391.         ;LD (BYTEsvTS),HL
  392.  
  393.         pop hl
  394.        
  395.          ret;jp SAVECLOSE
  396.  
  397.        IF dolds
  398. copdd
  399.        LD C,48
  400.        LD A,3
  401. copdd0 PUSH BC,DE,HL
  402.        LDIR
  403.        POP HL,DE,BC
  404.        INC H,D
  405.        DEC A
  406.        jr NZ,copdd0
  407.        RET
  408.        ENDIF
  409.  
  410. clearhashes
  411. ;ўшёЄшь ї¤°-ЄрсышЎє
  412.       IF k256
  413.       LD A,k256
  414.       CALL CLPG
  415.       else
  416.         ld hl,keys
  417.         ld bc,+((keymask+1)*512)-1
  418.         ld (hl),0
  419.         call fillmem
  420.       ENDIF
  421.       ;TODO яюЄюь тхЁэєЄ№ ¤Єю єёъюЁхэшх юўшёЄъш
  422.        ;LD A,(ADRfrom+1)
  423.        ;CP #E0
  424.         LD A,3;#17
  425.         CALL CLPG
  426.        ;ret nc ;JR NC,LZncl
  427.         DEC A
  428.         CALL CLPG
  429.        ;LD A,(ADRfrom+1)
  430.        ;CP #C0
  431.        ;ret nc ;JR NC,LZncl
  432.         dec a;LD A,#14
  433.         CALL CLPG
  434.         DEC A
  435.         jp CLPG
  436.  
  437. packmktrees
  438. ;ёхщўрё т frqs ўрёЄюЄ√ тёхї ышЄхЁрыют
  439.         LD HL,ldbit
  440.         LD BC,298
  441.         call HUFFMAN
  442. ;ЄхяхЁ№ т ldbit - фышэ√ ъюфют ш ёрьш ъюф√
  443.         LD DE,lens
  444.         LDIR
  445.         PUSH DE
  446. ;ёЄЁюшь фхЁхтю dd
  447.         ;jr $
  448.         LD HL,ddfrq
  449.         LD DE,frqs
  450.         LD BC,298*2
  451.         LDIR
  452.         LD HL,ddbit
  453.         LD C,48
  454.         call HUFFMAN
  455.         POP DE
  456.         LDIR
  457.        IF dolds
  458.        PUSH DE
  459. ;фхЁхтю rd
  460.        LD HL,ddfrq;rdfrq ;(rd ыхцшЄ ъръ ышЄхЁры√ 48..75 т dd)
  461.        LD DE,frqs
  462.        LD BC,298*2
  463.        LDIR
  464.         LD HL,frqs
  465.         LD B,2*48 ;ышёЄ№  dd
  466.         LD (HL),-1 ;эх тёЄЁхўрышё№
  467.         INC L
  468.         DJNZ $-3
  469.      LD HL,ddbit
  470.      LD DE,ddbit+48+28 ;Єшїюх ьхёЄю
  471.      PUSH DE
  472.      push HL
  473.      CALL copdd
  474.         LD HL,ddbit;rdbit
  475.         LD C,48+28;28
  476.         call HUFFMAN
  477.      POP DE
  478.      pop HL
  479.      CALL copdd
  480.       LD HL,rdbit
  481.        POP DE
  482.        LD C,28
  483.        LDIR
  484.        ELSE
  485.         LD H,D
  486.         ld L,E
  487.         INC DE
  488.         LD C,27
  489.         LD (HL),B
  490.         LDIR
  491.        ENDIF
  492.        LD A,-1
  493.        LD (DE),A
  494. ;ёЄЁюшь фхЁхтю bd
  495. ;фы  эрўрыр яЁхюсЁрчєхь lens
  496. ;ъюф√ 16,17,18 - т 2-срщЄэюь ЇюЁьрЄх
  497.         LD HL,lens-1
  498.         LD D,H
  499.         ld E,L
  500. prlensN
  501.         LD A,(HL)
  502. prlensD LD (DE),A
  503.         INC HL
  504.         inc DE
  505.         LD BC,255 ;тьхёЄю -1;INC B:DJNZ
  506.         LD A,(HL)
  507.         CP C
  508.         JR Z,prlensQ
  509.         PUSH HL
  510. prlensR INC BC
  511.         inc HL
  512.         CP (HL)
  513.         JR Z,prlensR
  514.         POP HL
  515.         OR A
  516.         LD A,C
  517.         JR Z,prlensZ
  518.         DJNZ prlR256
  519.         CP 4-1
  520.         JR C,prlensN
  521.         CP 4+4-1
  522.         JR C,prlen16
  523. prlR256 LD BC,4+3-1 ;max repeat
  524. prlen16 LD A,(HL)
  525.         ADD HL,BC
  526.         LD (DE),A
  527.         INC DE
  528.         LD A,16
  529.         LD (DE),A
  530.         INC DE
  531.         LD A,C
  532.         SUB 4-1
  533.         JR prlensD
  534. prlensZ
  535.         DJNZ prlZ256
  536.         CP 3-1
  537.         JR C,prlensN
  538.         CP 11-1
  539.         JR C,prlen17
  540.         CP 11+128-1
  541.         JR C,prlen18
  542. prlZ256 LD BC,11+127-1 ;max repeat zero
  543. prlen18 ADD HL,BC
  544.         LD A,18
  545.         LD (DE),A
  546.         INC DE
  547.         LD A,C
  548.         SUB 11-1
  549.         JR prlensD
  550. prlen17 ADD HL,BC
  551.         LD A,17
  552.         LD (DE),A
  553.         INC DE
  554.         LD A,C
  555.         SUB 3-1
  556.         JR prlensD
  557. prlensQ
  558.         LD (DE),A ;-1
  559.         LD HL,frqs
  560.       ;PUSH HL
  561.         LD BC,298*2
  562.         LD (HL),A;-1
  563.         CALL fillmem;CLSA
  564.        DEC B
  565.         LD HL,lens
  566.       ;POP DE
  567.         LD DE,frqs
  568. FRQL0   PUSH HL
  569.         LD L,(HL)
  570.        LD H,B;0
  571.         ADD HL,HL
  572.         ADD HL,DE
  573.         INC (HL)
  574.         JR NZ,$+4
  575.         INC HL
  576.         INC (HL)
  577.         POP HL
  578.        BIT 4,(HL)
  579.        JR Z,$+3
  580.        INC HL
  581.         INC HL
  582.         LD A,(HL)
  583.         INC A
  584.         JR NZ,FRQL0
  585.         LD HL,bdbit
  586.         LD C,19
  587.         jp HUFFMAN
  588.  
  589. packwrtrees
  590.              ;no MMC
  591.         CALL bit0
  592.              ;clear old
  593.         CALL bit0
  594. ;---tree
  595.         LD HL,bdbit
  596.         LD C,19
  597. pkbdli
  598.         LD A,(HL)
  599.         RLA
  600.         RLA
  601.         RLA
  602.         RLA
  603.         INC L
  604.         LD B,4
  605.         CALL PKBDpp
  606.         DEC C
  607.         JR NZ,pkbdli
  608.  
  609.         LD HL,lens
  610. pkiL    PUSH HL
  611.         LD L,(HL)
  612.         LD H,bdbit/256
  613.         CALL PKNNpp ;яш°хь ъюф ╒рЇЇьрэр (т hl ўхЁхч 256: фышэр, HSB, LSB) - яш°хь ёЄрЁ°шх сшЄ√
  614.         POP HL
  615.        LD A,(HL)
  616.         CP 16
  617.         JR C,pkLN16
  618.         CP 17
  619.         INC HL
  620.         LD A,(HL)
  621.         LD B,3
  622.         JR Z,pkL17
  623.         DEC B
  624.         JR C,pkL16
  625.         LD B,7
  626.         RLA
  627.         JR pkLadd
  628. pkL17   RRCA
  629. pkL16   RRCA
  630.         RRCA
  631. pkLadd  CALL PKBDpp
  632. pkLN16  INC HL
  633.         LD A,(HL)
  634.         INC A
  635.         JR NZ,pkiL
  636.         ret
  637.  
  638. packencodehuff
  639.         LD HL,pakto
  640.        LD DE,(ADRfrom) ;фы  opt2s
  641.         LD A,128
  642. pki0
  643.         ADD A,A
  644.         JR NZ,GET9Q
  645.         LD A,(HL)
  646.         INC L
  647.         CALL Z,INCH
  648.         RLA
  649. GET9Q
  650.         PUSH HL
  651.         LD L,(HL)
  652.        LD H,ldbit/512
  653.        RL H
  654.         LD B,(HL)
  655.         INC H
  656.         inc H
  657.         LD C,(HL)
  658.         INC H
  659.         inc H
  660.        EXA
  661.         LD A,H
  662.         RRA
  663.         JR NC,pkiNC
  664.         LD A,L
  665.         OR A
  666.         JP M,pki0Q ;ышЄхЁры ъюэЎр ЄхъёЄр (эхтючьюцэ√щ)
  667.         SUB 261&0xff
  668.         CP 8
  669.        JP C,pkiL2
  670.          LD A,1
  671. pkiNC
  672.        LD A,H
  673. pkiCALL CALL PKLHPP ;/LBYTE фы  "store"
  674.         POP HL
  675.        CP ldbit/256+5
  676.        JP NZ,pkiN ;byte
  677.         LD A,(HL)
  678.        IF dolds
  679.          OR A
  680.          JP Z,pkiYOLD
  681.        ENDIF
  682.         CP 269&0xff
  683.         JP Z,pkinewtrees;pkiNDE ;юсэютыхэшх фхЁхт№хт?
  684.         INC L
  685.         CALL Z,INCH
  686.        IF dolds
  687.         CP 261&0xff
  688.         JR NC,pkiN4
  689. ;olddisp 257..260=+1..4,len8
  690.         LD B,A
  691.        PUSH HL
  692.         LD A,(HL) ;len
  693.         DJNZ $+5
  694.         LD HL,(OLDSMES)
  695.         DJNZ $+5
  696.         LD HL,(OL2SMES)
  697.         DJNZ $+5
  698.         LD HL,(OL3SMES)
  699.         DJNZ $+5
  700.         LD HL,(OL4SMES)
  701.         LD (SMESH),HL
  702.         LD (pkiOLD),A
  703.        POP HL
  704.       INC L
  705.       CALL Z,INCH
  706.         LD A,(HL) ;ёъюЁЁхъЄшЁютрээ√щ len
  707.         CALL LZMID
  708.       ;C=Єюъхэ
  709.         PUSH BC,HL
  710.       ;A=юёЄрЄюъ,B=ўшёыю сшЄ
  711.        PUSH AF
  712.         LD A,C
  713.         ADD A,rdbit&0xff
  714.         LD L,A ;ышЄхЁры√ 48..75 тьхёЄю 0..27
  715.        POP AF
  716.         LD H,rdbit/256
  717.         LD B,(HL)
  718.         INC H
  719.         LD C,(HL)
  720.         INC H
  721.         LD L,(HL)
  722.         LD H,C
  723.         ADD HL,HL
  724.         CALL bit
  725.         DJNZ $-4
  726.         POP HL,BC
  727.         INC B
  728.         DEC B
  729.         JR Z,pkioQ
  730.        CPL ;!
  731.         LD C,B
  732.         RRCA
  733.         DJNZ $-1
  734.         LD B,C
  735.         RLA
  736.         CALL bit
  737.         DJNZ $-4
  738. pkioQ   JP pkiYOLD
  739. pkiN4
  740.        ENDIF
  741.         CP 278&0xff
  742.         JP NC,pkiLL
  743. ;len<=10 270..277=+E..15,-disp16
  744.         SUB 0xff&(270-3)
  745.        LD (pkiOLD),A
  746.         JP pkiLQ
  747. ;len=2 261..268=+5..C,-disp8
  748. pkiL2
  749.       ;dolds яюёых len=2 эх сєфхЄ 4 Ёрчр
  750.         LD L,(HL)
  751.         LD H,C
  752.        LD (codeL2),HL
  753.         POP HL
  754.         INC L
  755.         CALL Z,INCH
  756.        IF dolds
  757.        LD A,-1
  758.        LD (SMESH+1),A
  759.        ENDIF
  760.         LD A,(HL)
  761.        IF dolds
  762.        LD (SMESH),A
  763.        ENDIF
  764.       PUSH HL
  765.         PUSH BC
  766.         CALL LZLITPP
  767.       ;A=юёЄрЄюъ,B=ўшёыю сшЄ
  768.        CPL ;!
  769.         LD C,B
  770.         RRCA
  771.         DJNZ $-1
  772.         LD B,C
  773.         ld C,A
  774.         POP AF
  775.        IF opt2s
  776.         ADD A,B
  777.         LD LX,A
  778. ;ёўшЄрхь 2 срщЄр т DE, хёыш шї эх чрЄхЁыш
  779. ;ш хёыш юэш хёЄ№ т tree (р юэш хёЄ№, Є.ъ. tree юфэю)
  780.         LD HL,(PUTBITB) ;HL' эх трцхэ
  781.         LD A,H
  782.        ADD A,pak9/256
  783.        LD H,A
  784.        JR C,pkiL2CP
  785.         SBC HL,DE
  786.        INC DE
  787.         JR NC,pkiL2Z ;чрЄхЁыш
  788.        DEC DE
  789. pkiL2CP PUSH BC
  790.        LD A,pgTEXT;16
  791.        CALL OUTNO ;тЁхьхээю тъы■ўрхь 0-■ ёЄЁрэшЎє
  792.         LD A,(DE)
  793.         INC DE
  794.         LD L,A
  795.         LD H,ldbit/256+4
  796.         LD C,(HL)
  797.         DEC H
  798.         dec H
  799.         LD B,(HL)
  800.         DEC H
  801.         dec H
  802.        LD (code1),BC
  803.         LD B,(HL)
  804.         EX DE,HL
  805.         LD E,(HL)
  806.         EX DE,HL
  807.        CALL BYTEPG-1 ;тъы■ўрхь ёЄрЁє■ ёЄЁрэшЎє TODO
  808.         LD A,B
  809.         ADD A,(HL)
  810.        PUSH HL
  811.         INC H
  812.         inc H
  813.         LD C,(HL)
  814.         INC H
  815.         inc H
  816.         CP LX
  817.         LD A,(HL)
  818.         JR NC,pkiL2Y ;т√уюфэхх ёё√ыър
  819.       ;т√уюфэхх ёшьтюы√
  820. code1=$+1
  821.         LD HL,0
  822.        CALL PKHLPP
  823.        POP HL
  824.         LD B,(HL)
  825.         LD H,C
  826.         ld L,A
  827.        CALL PKHLPP
  828.         POP AF
  829.         JR pkiNPOPnSSYL
  830. pkiL2Y POP AF
  831.         POP BC
  832. pkiL2Z  LD A,LX
  833.         SUB B
  834.        ENDIF
  835. codeL2=$+1
  836.         LD HL,0
  837.        PUSH BC
  838.        LD B,A
  839.        CALL PKHLPP
  840.        POP BC
  841.         LD A,C
  842.         CALL PKBDpp
  843.      ;IFN dolds ;т v0.33 єцх чръюььхэЄшЁютрэю
  844.      ;LD A,2
  845.      ;LD (pkiOLD),A
  846.      ;ENDIF
  847.         JR pkiNPOP
  848. ;len>10 278..297=+16..29,len8,-disp16
  849. pkiLL
  850.         LD A,(HL)
  851.        LD (pkiOLD),A
  852.       DEC A ;len фхъЁхьхэЄшЁютрэ
  853.         CALL LZMIDPP
  854.       ;A=юёЄрЄюъ,B=ўшёыю сшЄ
  855.        CPL ;!
  856.         LD C,B
  857.         RRCA
  858.         DJNZ $-1
  859.         LD B,C
  860.         CALL PKBDpp
  861.         INC L
  862.         CALL Z,INCH
  863. pkiLQ
  864. ;фы  юс√ўэ√ї ёё√ыюъ Єшяр >=3 ш Єшяр >=11
  865.        PUSH DE
  866.         LD E,(HL)
  867.         INC L
  868.         CALL Z,INCH
  869.         LD D,(HL)
  870.        IF dolds
  871.        LD (SMESH),DE
  872.        ENDIF
  873.         PUSH HL
  874.        LD HL,#1FFF
  875.        ADD HL,DE
  876.        JR C,$+6
  877.        LD HL,pkiOLD
  878.        INC (HL) ;>=#2000
  879.      ;DE=-disp16
  880.         CALL LZDISPP
  881.      ;A=dd code
  882.      ;HL=юёЄрЄюъ,B=ўшёыю сшЄ+1
  883.         PUSH BC
  884.         DEC B
  885.         JR Z,pkiLRQ
  886.         RR H
  887.         rr L
  888.         rr D
  889.         rr E
  890.         DJNZ $-8
  891. pkiLRQ ;PUSH DE
  892.         LD L,A
  893.         LD H,ddbit/256
  894.         CALL PKNNpp
  895.        ;POP HL
  896.        EX DE,HL
  897.        CALL INVHL
  898.         POP BC
  899.      ;HL=юёЄрЄюъ<<,B=ўшёыю сшЄ+1
  900.         DEC B
  901.         CALL NZ,PKHLPP
  902. ;;
  903.         POP HL
  904.        POP DE
  905. pkiYOLD
  906. ;ъюф 256, ъюэхЎ юсЁрсюЄъш 257..260 ш яЁюёЄ√ї ёё√ыюъ
  907.         PUSH HL
  908. pkiOLD=$+1 ;фы  256 ш фы  opt2s
  909.         LD HL,0
  910.       DEC HL
  911.         ADD HL,DE
  912.         EX DE,HL
  913. pkiNPOP
  914. ;ъюэхЎ юсЁрсюЄъш len=2:ёё√ыър (INC DE Єрь тэєЄЁш)
  915.        IF dolds
  916.         CALL LZPUTQQ ;ёфтшу сєЇхЁр SMESH'хщ
  917.        ENDIF
  918. pkiNPOPnSSYL
  919. ;ъюэхЎ юсЁрсюЄъш len=2:ёшьтюы√
  920.         POP HL
  921. pkiN
  922.         ;or a
  923.         ;jr z,$
  924.         ;cp 3
  925.         ;jr z,$
  926.        INC DE ;эхяръ. рфЁхё фы  opt2s
  927. pkinewtrees
  928. pkiNDE  INC L
  929.         CALL Z,INCH
  930.        EXA
  931.         JP pki0
  932. pki0Q
  933.         POP HL
  934.         ret
  935.