home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0600 / CCE_0689.ZIP / CCE_0689 / LHA3_SRC.LZH / SOURCE / DECODOLD.S < prev    next >
Text File  |  1994-04-03  |  5KB  |  287 lines

  1.  
  2.             EXPORT        DecodeOld
  3.  
  4.             IMPORT        OpenOut
  5.             IMPORT        ProcInd
  6.             IMPORT        shipout_decode
  7.             IMPORT        fill_buf
  8.             IMPORT        block_crc
  9.  
  10.             IMPORT        text_buf
  11.             IMPORT        codesize
  12.             IMPORT        blocksize
  13.             IMPORT        file1
  14.             IMPORT        outrec_decode
  15.             IMPORT        has_crc
  16.             IMPORT        buffer_3
  17.  
  18. N            .equ    4096
  19. F            .equ    18
  20. THRESHOLD    .equ    2
  21.  
  22.  
  23. _empty_1:    MOVE.L        A5,4(A4)
  24.             MOVE.L        D2,(A4)
  25.             MOVEA.L        A4,A0
  26.             BSR            fill_buf
  27.             MOVE.B        D0,D3
  28.             MOVE.L        (A4),D2
  29.             MOVEA.L        4(A4),A5
  30.             BRA            _got_1
  31.  
  32. _empty_2:    MOVE.L        A5,4(A4)
  33.             MOVE.L        D2,(A4)
  34.             MOVEA.L        A4,A0
  35.             BSR            fill_buf
  36.             MOVE.L        (A4),D2
  37.             MOVEA.L        4(A4),A5
  38.             BRA            _got_2
  39.  
  40. _empty_3:    MOVE.L        A5,4(A4)
  41.             MOVE.L        D2,(A4)
  42.             MOVEA.L        A4,A0
  43.             BSR            fill_buf
  44.             MOVE.W        D0,D1
  45.             MOVE.L        (A4),D2
  46.             MOVEA.L        4(A4),A5
  47.             BRA            _got_3
  48.  
  49. _empty_4:    MOVE.L        A5,4(A4)
  50.             MOVE.L        D2,(A4)
  51.             MOVEA.L        A4,A0
  52.             BSR            fill_buf
  53.             MOVE.L        (A4),D2
  54.             MOVEA.L        4(A4),A5
  55.             BRA            _got_4
  56.  
  57. ; void DecodeOld(void)
  58. DecodeOld:    MOVEM.L     D3-D7/A2-A6,-(A7)
  59.  
  60. ;    ProcInd();
  61.             JSR         ProcInd
  62.  
  63. ;    OpenOut(&outrec_decode);
  64.             LEA.L        outrec_decode(PC),A0
  65.             MOVE.L        buffer_3,A1
  66.             BSR         OpenOut
  67.             LEA.L        outrec_decode(PC),A1
  68.             MOVEA.L        (A1)+,A6
  69.             MOVE.L        (A1),D7
  70.  
  71.             MOVE.W        #N-1,A2
  72.  
  73. ;    register int r=N-F,*tbuf=(int *) text_buf;
  74.             MOVE.W        #N-F,D4
  75.             LEA.L        text_buf,A3
  76.  
  77. ;    long todo=codesize,done=blocksize;
  78.             MOVE.L        blocksize(PC),D6
  79.             MOVE.L        codesize(PC),D5
  80.  
  81. ;    uint flags=0;
  82.             MOVEQ.L        #0,D3
  83.  
  84. ;    for (c=0x2020,k=(N-F)>>1;--k>=0;)
  85.             MOVE.W        #$2020,D0
  86.             MOVE.W        #((N-F)>>1)-1,D1
  87.             MOVEA.L     A3,A0
  88.  
  89. ;       *tbuf++=c;
  90. tbuf_init:    MOVE.W        D0,(A0)+
  91.             DBRA        D1,tbuf_init
  92.  
  93. ;    for (;;)
  94.             MOVEA.L     file1(PC),A4
  95.             MOVE.L        (A4),D2
  96.             MOVEA.L        4(A4),A5        ; file1->_ptr
  97.  
  98. for:
  99. ;        if (!((flags>>=1) & 256))
  100.             LSR.W        D3
  101.             BTST.B        #8,D3
  102.             BNE.B        no_flags
  103.  
  104.             MOVE.W        #$FF00,D3
  105. ;            flags=getc(file1)|0xff00;
  106.             DBRA        D2,_get_1    ; _cnt
  107.             ADDQ.W        #1,D2
  108.             SUBQ.L        #1,D2
  109.             BMI            _empty_1
  110.  
  111. _get_1:
  112.             MOVE.B        (A5)+,D3    ; *_ptr++
  113. _got_1:
  114. ;            if (--todo<0) break;
  115.             SUBQ.L        #2,D5
  116.             BPL.B        cont_0
  117.             BRA            break
  118.  
  119. no_flags:
  120. ;        if (--todo<0) break;
  121.             DBRA        D5,cont_0
  122.             ADDQ.W        #1,D5
  123.             SUBQ.L        #1,D5
  124.             BMI             break
  125.  
  126. cont_0:
  127. ;        if (flags & 1)
  128.             MOVEQ.L        #1,D0
  129.             AND.W        D3,D0
  130.             BEQ.B        flag_bit_0_eq
  131.  
  132. ;            c=getc(file1);
  133.             DBRA        D2,_get_2    ; _cnt
  134.             ADDQ.W        #1,D2
  135.             SUBQ.L        #1,D2
  136.             BMI            _empty_2
  137.  
  138. _get_2:
  139.             MOVE.B        (A5)+,D0    ; *_ptr++
  140. _got_2:
  141. ;            text_buf[r++]=c;
  142.             MOVE.B        D0,(A3,D4.W)
  143.             ADDQ.W        #1,D4
  144.  
  145. ;            r&=m;
  146.             AND.W        #N-1,D4
  147.  
  148. ;            putc(c);
  149.             MOVE.B        D0,(A6)+
  150.             DBRA        D7,_buf_exit_1
  151.             ADDQ.W        #1,D7
  152.             SUBQ.L        #1,D7
  153.             BPL.B        _buf_exit_1
  154.  
  155.             BSR            ship
  156.  
  157. _buf_exit_1:
  158. ;            if (--done>0)
  159.             DBRA        D6,for
  160.             ADDQ.W        #1,D6
  161.             SUBQ.L        #1,D6
  162.             BPL.B        for
  163.  
  164. ;                ProcInd();
  165.             MOVE.L        D2,-(SP)
  166.             JSR         ProcInd
  167.             MOVE.L        (SP)+,D2
  168.             LEA.L        outrec_decode+4(PC),A1
  169.  
  170. ;                done=blocksize;
  171.             MOVE.L        blocksize(PC),D6
  172.             BRA.B         for
  173.  
  174. ;        else
  175.  
  176.  
  177. flag_bit_0_eq:
  178. ;            i=getc(file1);
  179.             DBRA        D2,_get_3    ; _cnt
  180.             ADDQ.W        #1,D2
  181.             SUBQ.L        #1,D2
  182.             BMI            _empty_3
  183.  
  184. _get_3:
  185.             MOVEQ.L        #0,D1
  186.             MOVE.B        (A5)+,D1    ; *_ptr++
  187.  
  188. _got_3:
  189. ;            if (--todo<0) break;
  190.             DBRA        D5,cont_1
  191.             ADDQ.W        #1,D5
  192.             SUBQ.L        #1,D5
  193.             BMI         break;
  194.  
  195. cont_1:
  196. ;            i|=(((k=getc(file1)) & 0xf0)<<4);
  197.             DBRA        D2,_get_4    ; _cnt
  198.             ADDQ.W        #1,D2
  199.             SUBQ.L        #1,D2
  200.             BMI            _empty_4
  201.  
  202. _get_4:
  203.             MOVE.B        (A5)+,D0    ; *_ptr++
  204. _got_4:
  205.             EXG.L        D2,A2
  206.             SWAP        D3
  207.             MOVE.W        D0,D3
  208.             AND.W        #$0F,D3
  209.             EOR.W        D3,D0
  210.             LSL.W        #4,D0
  211.             OR.W        D0,D1
  212.  
  213. ;            k=(k & 0x0f) + THRESHOLD;
  214.             ADDQ.W        #THRESHOLD,D3
  215.  
  216. for_k:
  217. ;                c=text_buf[i & m];
  218.             AND.W        D2,D1
  219.             MOVE.B        (A3,D1.W),D0
  220.  
  221. ;                text_buf[r++]=c;
  222.             MOVE.B        D0,(A3,D4.W)
  223.             ADDQ.W        #1,D4
  224.  
  225. ;                r&=m;
  226.             AND.W        D2,D4
  227.  
  228. ;                putc(c);
  229.             MOVE.B        D0,(A6)+
  230.             DBRA        D7,_buf_exit_2
  231.             ADDQ.W        #1,D7
  232.             SUBQ.L        #1,D7
  233.             BPL.B        _buf_exit_2
  234.  
  235.             BSR            ship
  236.  
  237. _buf_exit_2:
  238. ;                if (--done<0)
  239.             DBRA        D6,not_done
  240.             ADDQ.W        #1,D6
  241.             SUBQ.L        #1,D6
  242.             BPL.B        not_done
  243.  
  244. ;                    ProcInd();
  245.             MOVE.W        D1,-(SP)
  246.             JSR         ProcInd
  247.             MOVE.W        #N-1,D2
  248.             MOVE.W        (SP)+,D1
  249.             LEA.L        outrec_decode+4(PC),A1
  250.  
  251. ;                    done=blocksize;
  252.             MOVE.L        blocksize(PC),D6
  253.  
  254. not_done:
  255. ;            for (;--k>=0;i++)
  256.             ADDQ.W        #1,D1
  257.             DBRA        D3,for_k
  258.             EXG.L        D2,A2
  259.             SWAP        D3
  260.             BRA         for
  261.  
  262. break:
  263.             MOVE.L        A5,4(A4)
  264.             MOVE.L        D2,(A4)
  265. ;    shipout_decode();
  266.             bsr            ship
  267. ;}
  268.             MOVEM.L     (A7)+,D3-D7/A2-A6
  269.             RTS
  270.  
  271.  
  272. ship:        MOVE.L        D7,(A1)
  273.             MOVE.L        A6,-(A1)
  274.  
  275.             TST.B        has_crc
  276.             BEQ.B        no_crc
  277.  
  278.             MOVE.L        8(A1),A0
  279.             MOVE.L        A6,D0
  280.             SUB.L        A0,D0
  281.             JSR            block_crc
  282.  
  283. no_crc:        BSR            shipout_decode
  284.             MOVEA.L        (A1)+,A6
  285.             MOVE.L        (A1),D7
  286.             RTS
  287.