home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / System / XFD / Developer / Sources / ASM / XP10.a < prev    next >
Encoding:
Text File  |  2001-09-16  |  7.1 KB  |  410 lines

  1. *******************************************************
  2. **      XFD external decruncher for XP10 Cruncher    **
  3. **        written by Mr. Larmer / Wanted Team        **
  4. **       shortened and fixed by SDI in 1999           **
  5. *******************************************************
  6.  
  7.         INCLUDE    AINCLUDE:IncDirs.i
  8.         INCLUDE    libraries/xfdmaster.i
  9.  
  10.         * head function for tests
  11. *        INCLUDE    "xfdExeHead.a"
  12.  
  13. ; xfdForeman structure MUST be first thing in all external decrunchers
  14.  
  15. ForeMan        moveq    #-1,d0        ;security
  16.         rts
  17.         dc.l    XFDF_ID        ;id
  18.         dc.w    1        ;version
  19.         dc.w    0
  20.         dc.l    0,0        ;private
  21.         dc.l    S_XP10        ;first slave
  22.  
  23.         dc.b    "$VER: XP10 2.1 (23.12.2000)",0
  24. N_XP10        dc.b    "(XP10) Data Cruncher",0
  25.         EVEN
  26.  
  27. **************************************************
  28.  
  29. ; xfdSlave structure: this one doesn't support segment decrunching
  30.  
  31. S_XP10        dc.l    0        ;no more slaves
  32.         dc.w    2        ;version
  33.         dc.w    39        ;master version
  34.         dc.l    N_XP10        ;name
  35.         dc.w    XFDPFF_DATA|XFDPFF_RECOGLEN|XFDPFF_USERTARGET
  36.         dc.w    0
  37.         dc.l    RB_XP10        ;recog buffer
  38.         dc.l    DB_XP10        ;decrunch buffer
  39.         dc.l    SD_XP10
  40.         dc.l    VD_XP10
  41.         dc.w    0,0
  42.         dc.l    20
  43.  
  44. RB_XP10        MOVEQ    #0,D0
  45.         CMP.L    #"XP10",(A0)
  46.         BNE.B    .Exit
  47.         MOVE.L    4(A0),D0
  48.         MOVE.L    D0,xfdrr_FinalTargetLen(A1)
  49.         ADD.L    #1024,D0
  50.         MOVE.L    D0,xfdrr_MinTargetLen(A1)
  51.         MOVEQ    #20,D0
  52.         ADD.L    16(A0),D0
  53.         MOVE.L    D0,xfdrr_MinSourceLen(A1)
  54.         MOVEQ    #1,D0
  55. .Exit        RTS
  56.  
  57. SD_XP10        MOVEQ    #0,D0
  58.         CMP.L    #"XP10",(A0)
  59.         BNE.B    .end
  60.         MOVEQ    #1,D0
  61. .end        RTS
  62.  
  63. VD_XP10        MOVEQ    #20,D1
  64.         ADD.L    16(A0),D1    ;crlen
  65.         CMP.L    D0,D1        ;crlen > buflen ??
  66.         BGT.B    .Exit
  67.         MOVE.L    4(A0),D0
  68.         SUB.L    16(A0),D0    ;cr > uncr ??
  69.         BMI.B    .Exit
  70.         MOVE.L    D1,D0
  71.         RTS
  72. .Exit        MOVEQ    #0,D0
  73.         RTS
  74.  
  75. ;-------------------------------------------------
  76.  
  77. ;Decrunch buffer function: receives bufferinfo in a0
  78.  
  79. DB_XP10        MOVEM.L    D2-D7/A2-A6,-(A7)
  80.         MOVE.L    A0,A5
  81.         LEA    -1024(A7),A7
  82.         MOVE.L    A7,A3
  83.  
  84.         MOVE.L    xfdbi_SourceBuffer(A5),A2
  85.         ADDQ.L    #4,A2
  86.         MOVE.L    xfdbi_UserTargetBuf(A5),A0
  87.         MOVEM.L    (A2)+,D0-D3
  88.         MOVE.L    A0,A6
  89.         ADDA.L    D0,A6
  90.         ADDQ.L    #4,A6
  91.         MOVEA.L    A6,A1
  92.         SUBA.L    D1,A1
  93.         BSR.B    Sub1
  94.         MOVEA.L    A6,A2
  95.         BSR.W    Sub2
  96.         MOVEA.L    A6,A1
  97.         BSR.W    Sub3
  98.  
  99.         LEA    1024(A7),A7
  100.         MOVEQ    #1,D0
  101.         MOVEM.L    (A7)+,D2-D7/A2-A6
  102.         RTS
  103.  
  104. Sub1        MOVE.L    D2,D6
  105.         SUBQ.L    #1,D6
  106.         MOVE.L    D6,D7
  107.         SWAP    D7
  108.         MOVEA.L    A3,A5
  109.         MOVEQ    #0,D0
  110.         MOVEQ    #0,D1
  111.         MOVEQ    #0,D2
  112.         MOVEQ    #0,D3
  113.         MOVEQ    #0,D4
  114.         MOVEQ    #$0010,D5
  115. .S1_01        MOVE.B    (A2)+,D0
  116.         MOVE.B    (A2)+,D1
  117.         ADD.W    D0,D2
  118.         ADD.W    D0,D3
  119.         ADD.W    D1,D4
  120.         MOVE.W    D2,$20(A5)
  121.         MOVE.W    D3,$40(A5)
  122.         SUB.W    D2,$40(A5)
  123.         ADD.W    D1,D2
  124.         MOVE.W    #$80,$60(A5)
  125.         ADD.W    D4,$60(A5)
  126.         SUB.W    D2,$60(A5)
  127.         MOVE.W    D2,(A5)+
  128.         ADD.W    D2,D2
  129.         SUBQ.W    #1,D5
  130.         BNE.B    .S1_01
  131.         LEA    $60(A5),A5
  132.         MOVEA.L    A5,A4
  133.         MOVE.W    D4,D2
  134.         ADD.W    #$80,D2
  135. .S1_02        MOVE.W    (A2)+,(A4)+
  136.         SUBQ.W    #1,D2
  137.         BNE.B    .S1_02
  138.         MOVEA.L    A3,A4
  139.         MOVE.W    (A2)+,D0
  140.         BRA.B    .S1_05
  141.  
  142. .S1_03        MOVEA.L    A3,A4
  143.         MOVEQ    #0,D2
  144.         DBRA    D0,.S1_06
  145. .S1_04        MOVEQ    #$1F,D0
  146. .S1_05        MOVE.L    (A2)+,D1
  147. .S1_06        ADD.L    D1,D1
  148.         ADDX    D2,D2
  149.         CMP.W    (A4)+,D2
  150.         DBCS    D0,.S1_06
  151.         BCC.B    .S1_04
  152.         CMP.W    $1E(A4),D2
  153.         BCC.B    .S1_07
  154.         ADD.W    $3E(A4),D2
  155.         MOVE.B    (A5,D2.W),(A0)+
  156.         DBRA    D6,.S1_03
  157.         DBRA    D7,.S1_03
  158.         RTS    
  159.  
  160. .S1_07        ADD.W    $005E(A4),D2
  161.         ADD.W    D2,D2
  162.         MOVE.B    (A5,D2.W),(A0)+
  163.         MOVE.B    1(A5,D2.W),(A0)+
  164.         SUBQ.W    #2,D6
  165.         BCC.B    .S1_03
  166.         DBRA    D7,.S1_03
  167.         RTS
  168.  
  169. Sub2        MOVEQ    #0,D0
  170.         MOVEA.L    A3,A4
  171. .S2_01        CLR.W    (A4)+
  172.         ADDQ.B    #1,D0
  173.         BNE.B    .S2_01
  174.         LEA    .S2_FTab(PC),A4
  175.         MOVEQ    #4,D1
  176. .S2_02        MOVEQ    #0,D0
  177.         MOVE.B    -(A0),D0
  178.         ADD.W    D0,D0
  179.         MOVE.W    (A4)+,(A3,D0.W)
  180.         DBRA    D1,.S2_02
  181.         MOVE.W    #$70,D1
  182.         MOVEQ    #4,D2
  183. .S2_03        MOVEQ    #0,D0
  184.         MOVE.B    -(A0),D0
  185.         ADD.W    D0,D0
  186.         MOVE.W    D1,(A3,D0.W)
  187.         ADDQ.W    #6,D1
  188.         DBRA    D2,.S2_03
  189.         MOVE.W    #$A4,D1
  190.         MOVEQ    #$11,D2
  191. .S2_04        MOVEQ    #0,D0
  192.         MOVE.B    -(A0),D0
  193.         ADD.W    D0,D0
  194.         MOVE.W    D1,(A3,D0.W)
  195.         ADDQ.W    #6,D1
  196.         DBRA    D2,.S2_04
  197. .S2_05        MOVEQ    #0,D1
  198.         MOVEQ    #0,D2
  199.         MOVE.B    -(A0),D0
  200.         MOVE.B    D0,D2
  201.         ADD.W    D2,D2
  202.         MOVE.W    (A3,D2.W),D2
  203.         JMP    .S2_06(PC,D2.W)
  204. .S2_06        MOVE.B    D0,-(A2)
  205. .S2_07        CMPA.L    A2,A1
  206.         BCS.B    .S2_05
  207.         RTS    
  208. .S2_08        MOVE.B    -(A0),D1
  209.         BEQ.B    .S2_06
  210.         MOVEQ    #6,D2
  211.         BRA.W    .S2_15
  212. .S2_09        MOVE.B    -(A0),D1
  213.         BEQ.B    .S2_06
  214.         MOVE.W    D1,D2
  215.         LSL.W    #8,D1
  216.         MOVE.B    -(A0),D1
  217.         ANDI.W    #$3FF,D1
  218.         LSR.W    #2,D2
  219.         ADDQ.W    #3,D2
  220.         BRA.W    .S2_15
  221. .S2_10        MOVE.B    -(A0),D1
  222.         BEQ.B    .S2_06
  223.         LSL.W    #8,D1
  224.         MOVE.B    -(A0),D1
  225.         MOVEQ    #3,D2
  226.         CMPI.W    #-$4000,D1
  227.         BCS.W    .S2_15
  228.         MOVE.W    #$400,D3
  229. .S2_11        ANDI.W    #$3FFF,D1
  230.         MOVE.W    D1,D2
  231.         LSR.W    #3,D1
  232.         ADD.W    D3,D1
  233.         ANDI.W    #7,D2
  234.         ADDQ.W    #3,D2
  235.         BRA.W    .S2_15
  236. .S2_12        MOVE.B    -(A0),D1
  237.         BEQ.B    .S2_06
  238.         LSL.W    #8,D1
  239.         MOVE.B    -(A0),D1
  240.         MOVE.W    #$0C00,D3
  241.         CMPI.W    #-$4000,D1
  242.         BCC.B    .S2_11
  243.         SUBI.W    #$0100,D1
  244.         MOVEQ    #0,D2
  245.         MOVE.B    -(A0),D2
  246.         BRA.W    .S2_15
  247.         MOVE.W    #$1400,D3
  248.         BRA.B    .S2_13
  249.         MOVE.W    #$3400,D3
  250.         BRA.B    .S2_13
  251.         MOVE.W    #$5400,D3
  252.         BRA.B    .S2_13
  253.         MOVE.W    #$7400,D3
  254.         BRA.B    .S2_13
  255.         MOVE.W    #-$6C00,D3
  256. .S2_13        MOVE.B    -(A0),D1
  257.         BEQ.W    .S2_06
  258.         MOVE.W    D1,D2
  259.         LSL.W    #8,D1
  260.         MOVE.B    -(A0),D1
  261.         ANDI.W    #$1FFF,D1
  262.         ADD.W    D3,D1
  263.         LSR.W    #5,D2
  264.         ADDQ.W    #3,D2
  265.         BRA.B    .S2_15
  266.         MOVE.W    #0,D3
  267.         BRA.B    .S2_14
  268.         MOVE.W    #$003F,D3
  269.         BRA.B    .S2_14
  270.         MOVE.W    #$007E,D3
  271.         BRA.B    .S2_14
  272.         MOVE.W    #$00BD,D3
  273.         BRA.B    .S2_14
  274.         MOVE.W    #$00FC,D3
  275.         BRA.B    .S2_14
  276.         MOVE.W    #$013B,D3
  277.         BRA.B    .S2_14
  278.         MOVE.W    #$017A,D3
  279.         BRA.B    .S2_14
  280.         MOVE.W    #$01B9,D3
  281.         BRA.B    .S2_14
  282.         MOVE.W    #$01F8,D3
  283.         BRA.B    .S2_14
  284.         MOVE.W    #$0237,D3
  285.         BRA.B    .S2_14
  286.         MOVE.W    #$0276,D3
  287.         BRA.B    .S2_14
  288.         MOVE.W    #$02B5,D3
  289.         BRA.B    .S2_14
  290.         MOVE.W    #$02F4,D3
  291.         BRA.B    .S2_14
  292.         MOVE.W    #$0333,D3
  293.         BRA.B    .S2_14
  294.         MOVE.W    #$0372,D3
  295.         BRA.B    .S2_14
  296.         MOVE.W    #$03B1,D3
  297.         BRA.B    .S2_14
  298.         MOVE.W    #$03F0,D3
  299.         BRA.B    .S2_14
  300.         MOVE.W    #$042F,D3
  301. .S2_14        MOVE.B    -(A0),D1
  302.         BEQ.W    .S2_06
  303.         MOVE.W    D1,D2
  304.         LSR.W    #2,D1
  305.         ADD.W    D3,D1
  306.         ANDI.W    #3,D2
  307.         ADDQ.W    #2,D2
  308. .S2_15        LEA    (A2,D1.L),A5
  309. .S2_16        MOVE.B    -(A5),-(A2)
  310.         DBRA    D2,.S2_16
  311.         BRA.W    .S2_07
  312. .S2_17        MOVE.B    -(A0),D1
  313.         BEQ.W    .S2_06
  314.         MOVE.B    D1,D2
  315.         ANDI.B    #$003F,D1
  316.         LSR.B    #5,D2
  317.         ANDI.W    #6,D2
  318.         MOVE.W    .S2_Data(PC,D2.W),D2
  319.         EXT.L    D2
  320.         MOVE.B    -(A0),D3
  321.         LSL.W    #8,D3
  322.         MOVE.B    -(A0),D3
  323.         LSL.L    #8,D3
  324.         MOVE.B    -(A0),D3
  325.         LSL.L    #8,D3
  326.         MOVE.B    -(A0),D3
  327. .S2_18        MOVEQ    #0,D4
  328.         MOVE.B    -(A0),D4
  329.         MOVE.B    D3,-(A2)
  330.         ROR.L    #8,D3
  331.         MOVE.B    D3,-(A2)
  332.         ROR.L    #8,D3
  333.         MOVE.B    D3,-(A2)
  334.         ROR.L    #8,D3
  335.         MOVE.B    D3,-(A2)
  336.         ROR.L    #8,D3
  337.         ADD.L    D2,D4
  338.         SUB.L    D4,D3
  339.         DBRA    D1,.S2_18
  340.         ADDQ.L    #1,A0
  341.         BRA.W    .S2_07
  342.  
  343. .S2_Data    DC.W    -$80
  344.         DC.W    0
  345.         DC.W    $100
  346.         DC.W    $200
  347.  
  348. .S2_FTab    DC.W    .S2_08-.S2_06
  349.         DC.W    .S2_09-.S2_06
  350.         DC.W    .S2_10-.S2_06
  351.         DC.W    .S2_12-.S2_06
  352.         DC.W    .S2_17-.S2_06
  353.  
  354. Sub3        MOVEA.L    A3,A4
  355.         MOVEQ    #0,D0
  356. .S3_01        CLR.B    (A4)+
  357.         ADDQ.B    #1,D0
  358.         BNE.B    .S3_01
  359.         MOVE.B    (A2)+,D0
  360.         MOVE.B    #8,(A3,D0.W)
  361.         MOVE.B    (A2)+,D0
  362.         MOVE.B    #$0014,(A3,D0.W)
  363.         MOVE.B    (A2)+,D0
  364.         MOVE.B    #$001C,(A3,D0.W)
  365. .S3_02        MOVEQ    #0,D1
  366.         MOVE.B    (A2)+,D0
  367.         MOVE.B    (A3,D0.W),D1
  368.         JMP    .S3_03(PC,D1.W)
  369. .S3_03        MOVE.B    D0,(A0)+
  370. .S3_04        CMPA.L    A1,A0
  371.         BCS.B    .S3_02
  372.         RTS    
  373.         MOVE.B    (A2)+,D1
  374.         BEQ.B    .S3_03
  375.         MOVE.B    D1,(A0)+
  376.         MOVE.B    D1,(A0)+
  377.         MOVE.B    D1,(A0)+
  378.         BRA.B    .S3_04
  379.         MOVE.B    (A2)+,D1
  380.         BEQ.B    .S3_03
  381.         MOVEQ    #0,D2
  382.         BRA.B    .S3_05
  383.         MOVE.B    (A2)+,D2
  384.         BEQ.B    .S3_03
  385.         MOVE.B    (A2)+,D1
  386. .S3_05        SUBQ.B    #3,D1
  387.         BCS.B    .S3_07
  388.         MOVE.B    D2,(A0)+
  389.         MOVE.B    D2,(A0)+
  390. .S3_06        MOVE.B    D2,(A0)+
  391.         DBRA    D1,.S3_06
  392.         BRA.B    .S3_04
  393. .S3_07        ADDQ.B    #1,D1
  394.         BNE.B    .S3_08
  395.         MOVE.B    (A2)+,D1
  396.         LSL.W    #8,D1
  397.         MOVE.B    (A2)+,D1
  398.         SWAP    D1
  399. .S3_08        MOVE.B    (A2)+,D1
  400.         LSL.W    #8,D1
  401.         MOVE.B    (A2)+,D1
  402.         MOVE.L    D1,D3
  403.         SWAP    D3
  404. .S3_09        MOVE.B    D2,(A0)+
  405.         DBRA    D1,.S3_09
  406.         DBRA    D3,.S3_09
  407.         BRA.B    .S3_04
  408.  
  409.         END
  410.