home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / xfd_developer / sources / asm / pack.a < prev    next >
Encoding:
Text File  |  2000-06-27  |  5.3 KB  |  323 lines

  1. *******************************************************
  2. **     XFD external decruncher for pack 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_pack        ;first slave
  22.  
  23.         dc.b    "$VER: pack 2.0 (04.12.1999)",0
  24. N_pack        dc.b    "(pack) Data Cruncher",0
  25.         EVEN
  26.  
  27. **************************************************
  28.  
  29. ; xfdSlave structure: this one doesn't support segment decrunching
  30.  
  31. S_pack        dc.l    0        ;no more slaves
  32.         dc.w    2        ;version
  33.         dc.w    39        ;master version
  34.         dc.l    N_pack        ;name
  35.         dc.w    XFDPFF_DATA|XFDPFF_USERTARGET|XFDPFF_RECOGLEN
  36.         dc.w    0
  37.         dc.l    RB_pack        ;recog buffer
  38.         dc.l    DB_pack        ;decrunch buffer
  39.         dc.l    0        ;recog segment
  40.         dc.l    0        ;decrunch segment
  41.         dc.w    0,0
  42.         dc.l    8+2
  43.  
  44. RB_pack        MOVEQ    #0,D0
  45.         CMP.L    #"pack",(A0)
  46.         BNE.B    .Exit
  47.         MOVE.L    4(A0),D0
  48.         MOVE.L    D0,xfdrr_FinalTargetLen(A1)
  49.         MOVE.L    D0,xfdrr_MinTargetLen(A1)
  50.         MOVE.L    D0,xfdrr_MinSourceLen(A1)
  51.         MOVEQ    #1,D0
  52. .Exit        RTS
  53.  
  54. ;-------------------------------------------------
  55.  
  56. DB_pack        MOVEM.L    D2-D7/A2-A6,-(A7)
  57.         MOVE.L    xfdbi_UserTargetBuf(A0),A6
  58.         MOVE.L    xfdbi_SourceBuffer(A0),A5
  59.  
  60.         LEA    -$C80(A7),A7
  61.         MOVE.L    A7,A3
  62.         BSR.B    D_pack
  63.         ; return result is set correctly
  64.         LEA    $C80(A7),A7
  65.         TST.L    D0
  66.         BNE.B    .Exit
  67.         MOVE.W    #XFDERR_CORRUPTEDDATA,xfdbi_Error(a5)
  68. .Exit        MOVEM.L    (A7)+,D2-D7/A2-A6
  69.         RTS
  70.  
  71. **************************************************
  72.  
  73. D_pack        movem.l    D0-D7/A0-A6,-(SP)
  74.         move.l  (A5)+,D0    * skip ID
  75.         move.l    (A5)+,-(SP)
  76.         move.l    (A5)+,D6
  77.         moveq    #$1F,D7
  78.         moveq    #$20,D0
  79.         lea    (A3),A0
  80.         bsr.w    lbC00013E
  81.         moveq    #0,D0
  82.         lea    $80(A3),A0
  83.         bsr.w    lbC00013E
  84.         moveq    #0,D0
  85.         lea    $480(A3),A0
  86.         bsr.w    lbC00013E
  87.         moveq    #0,D0
  88.         lea    $880(A3),A0
  89.         bsr.w    lbC00013E
  90.         move.l    (SP)+,D0
  91.         moveq    #$1F,D5
  92.         sub.w    D7,D5
  93.         asl.l    D5,D6
  94.         lea    lbW0001D8(PC),A1
  95.         lea    lbL000214(PC),A2
  96. lbC00006E:
  97.         lea    $80(A3),A0
  98.         bsr.w    lbC00010A
  99.         moveq    #0,D4
  100.         move.b    D2,D4
  101.         cmpi.b    #$FF,D4
  102.         bcs.s    lbC00009C
  103. lbC000080:
  104.         moveq    #0,D2
  105.         moveq    #7,D3
  106. lbC000084:
  107.         add.l    D6,D6
  108.         addx.l    D2,D2
  109.         dbra    D7,lbC000090
  110.         move.l    (A5)+,D6
  111.         moveq    #$1F,D7
  112. lbC000090:
  113.         dbra    D3,lbC000084
  114.         add.w    D2,D4
  115.         cmpi.w    #$FF,D2
  116.         beq.s    lbC000080
  117. lbC00009C:
  118.         move.w    D4,D1
  119.         beq.s    lbC0000AC
  120.         lea    $880(A3),A0
  121. lbC0000A4:
  122.         bsr.s    lbC00010A
  123.         move.b    D2,(A6)+
  124.         subq.w    #1,D1
  125.         bne.s    lbC0000A4
  126. lbC0000AC:
  127.         sub.l    D4,D0
  128.         bmi.w    lbC0001BC
  129.         beq.s    lbC000104
  130.         lea    (A3),A0
  131.         bsr.s    lbC00010A
  132.         moveq    #0,D1
  133.         moveq    #0,D3
  134.         move.b    D2,D3
  135.         add.w    D3,D3
  136.         move.w    0(A2,D3.W),D2
  137.         beq.s    lbC0000DA
  138.         subq.w    #1,D2
  139. lbC0000CA:
  140.         add.l    D6,D6
  141.         addx.l    D1,D1
  142.         dbra    D7,lbC0000D6
  143.         move.l    (A5)+,D6
  144.         moveq    #$1F,D7
  145. lbC0000D6:
  146.         dbra    D2,lbC0000CA
  147. lbC0000DA:
  148.         or.w    0(A1,D3.W),D1
  149.         lea    $480(A3),A0
  150.         bsr.b    lbC00010A
  151.         moveq    #0,D3
  152.         move.b    D2,D3
  153.         move.w    D3,D2
  154.         lea    (A6),A4
  155.         suba.w    D2,A4
  156.         suba.w    D1,A4
  157.         subq.w    #1,D2
  158. lbC0000F4:
  159.         move.b    (A4)+,(A6)+
  160.         dbra    D2,lbC0000F4
  161.         sub.l    D3,D0
  162.         bmi.w    lbC0001BC
  163.         bne.w    lbC00006E
  164. lbC000104:
  165.         movem.l    (SP)+,D0-D7/A0-A6
  166.         moveq    #1,D0
  167.         rts
  168.  
  169. lbC00010A:
  170.         moveq    #0,D2
  171. lbC00010C:
  172.         moveq    #0,D3
  173.         add.l    D6,D6
  174.         addx.w    D3,D3
  175.         add.w    D3,D3
  176.         add.w    D3,D2
  177.         move.w    0(A0,D2.W),D2
  178.         bmi.s    lbC000134
  179. lbC00011C:
  180.         dbra    D7,lbC00010C
  181.         move.l    (A5)+,D6
  182.         moveq    #$1F,D7
  183.         moveq    #0,D3
  184.         add.l    D6,D6
  185.         addx.w    D3,D3
  186.         add.w    D3,D3
  187.         add.w    D3,D2
  188.         move.w    0(A0,D2.W),D2
  189.         bpl.s    lbC00011C
  190. lbC000134:
  191.         dbra    D7,lbC00013C
  192.         move.l    (A5)+,D6
  193.         moveq    #$1F,D7
  194. lbC00013C:
  195.         rts
  196. lbC00013E:
  197.         lea    (A0),A1
  198.         clr.l    (A1)+
  199.         moveq    #0,D1
  200. lbC000144:
  201.         bsr.s    lbC000192
  202.         beq.s    lbC00018A
  203.         moveq    #5,D5
  204.         bsr.s    lbC0001A2
  205.         move.w    D4,D3
  206.         move.w    D4,D5
  207.         bsr.s    lbC0001A2
  208.         lea    (A0),A2
  209.         moveq    #0,D2
  210.         subq.w    #1,D3
  211.         beq.s    lbC000176
  212. lbC00015A:
  213.         btst    D3,D4
  214.         beq.s    lbC000160
  215.         addq.w    #2,D2
  216. lbC000160:
  217.         move.w    0(A0,D2.W),D5
  218.         bne.s    lbC000170
  219.         move.l    A1,D5
  220.         sub.l    A0,D5
  221.         move.w    D5,0(A0,D2.W)
  222.         clr.l    (A1)+
  223. lbC000170:
  224.         move.w    D5,D2
  225.         subq.w    #1,D3
  226.         bne.s    lbC00015A
  227. lbC000176:
  228.         btst    D3,D4
  229.         beq.s    lbC00017C
  230.         addq.w    #2,D2
  231. lbC00017C:
  232.         tst.w    0(A0,D2.W)
  233.         bne.s    lbC0001C0
  234.         move.b    D1,1(A0,D2.W)
  235.         st    0(A0,D2.W)
  236. lbC00018A:
  237.         addq.b    #1,D1
  238.         cmp.b    D0,D1
  239.         bne.s    lbC000144
  240.         rts
  241. lbC000192:
  242.         move.w    D7,D4
  243.         move.l    D6,D5
  244.         dbra    D7,lbC00019E
  245.         moveq    #$1F,D7
  246.         move.l    (A5)+,D6
  247. lbC00019E:
  248.         btst    D4,D5
  249.         rts
  250. lbC0001A2:
  251.         moveq    #0,D4
  252.         subq.w    #1,D5
  253.         bmi.s    lbC0001BA
  254. lbC0001A8:
  255.         btst    D7,D6
  256.         beq.s    lbC0001AE
  257.         bset    D5,D4
  258. lbC0001AE:
  259.         dbra    D7,lbC0001B6
  260.         moveq    #$1F,D7
  261.         move.l    (A5)+,D6
  262. lbC0001B6:
  263.         dbra    D5,lbC0001A8
  264. lbC0001BA:
  265.         rts
  266. lbC0001BC:
  267.         movem.l    (SP)+,D0-D7/A0-A6
  268.         moveq    #0,D0
  269.         rts
  270. lbC0001C0:
  271.         pea    lbC0001BC(pc)
  272.         rts
  273.  
  274. lbW0001D8:
  275.         dc.w    0
  276.         dc.w    1
  277.         dc.w    2
  278.         dc.w    3
  279.         dc.w    4
  280.         dc.w    6
  281.         dc.w    8
  282.         dc.w    12
  283.         dc.w    $10
  284.         dc.w    $18
  285.         dc.w    $20
  286.         dc.w    $30
  287.         dc.w    $40
  288.         dc.w    $60
  289.         dc.w    $80
  290.         dc.w    $C0
  291.         dc.w    $100
  292.         dc.w    $180
  293.         dc.w    $200
  294.         dc.w    $300
  295.         dc.w    $400
  296.         dc.w    $600
  297.         dc.w    $800
  298.         dc.w    $C00
  299.         dc.w    $1000
  300.         dc.w    $1800
  301.         dc.w    $2000
  302.         dc.w    $3000
  303.         dc.w    $4000
  304.         dc.w    $6000
  305. lbL000214:
  306.         dc.l    0
  307.         dc.l    0
  308.         dc.l    $10001
  309.         dc.l    $20002
  310.         dc.l    $30003
  311.         dc.l    $40004
  312.         dc.l    $50005
  313.         dc.l    $60006
  314.         dc.l    $70007
  315.         dc.l    $80008
  316.         dc.l    $90009
  317.         dc.l    $A000A
  318.         dc.l    $B000B
  319.         dc.l    $C000C
  320.         dc.l    $D000D
  321.  
  322.         END
  323.