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