home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / System / XFD / Developer / Sources / ASM / Z&G!.a < prev    next >
Encoding:
Text File  |  2001-09-16  |  4.3 KB  |  199 lines

  1. ; Zulu & Grey decruncher by Kyzer/CSG
  2. ; look familiar? i'm sure it's a clone of something, but i can't think what...
  3.  
  4.     include    libraries/xfdmaster.i
  5.  
  6. ForeMan    dc.l    $70FF4E75,XFDF_ID    ; id
  7.     dc.w    XFDF_VERSION        ; foreman version
  8.     dcb.w    5,0            ; reserved stuff
  9.     dc.l    ZGdata            ; first slave
  10.  
  11. ZGdata    dc.l    0
  12.     dc.w    2,39
  13.     dc.l    ZGdata_name
  14.     dc.w    XFDPFF_DATA!XFDPFF_RECOGLEN!XFDPFF_USERTARGET,0
  15.     dc.l    ZGdata_recog,ZGdata_decrunch,ZGdata_scan,ZGdata_verify
  16.     dc.l    0,18
  17.  
  18. ZGdata_recog
  19.     cmp.l    #"Z&G!",(a0)+
  20.     bne.s    .fail
  21.     addq.l    #4,a0
  22.     move.l    (a0)+,d0        ; d0 = unpacked length
  23.     beq.s    .fail            ; fail if unpacked length = 0
  24.     move.l    (a0)+,d1        ; d1 = packed length
  25.     beq.s    .fail            ; fail if unpacked length = 0
  26.     cmp.l    d0,d1
  27.     bhi.s    .fail            ; fail if packed length > unpacked
  28.     move.l    d0,xfdrr_FinalTargetLen(a1)
  29.     move.l    d0,xfdrr_MinTargetLen(a1)
  30.     move.l    d1,xfdrr_MinSourceLen(a1)
  31.     moveq    #1,d0            ; return success
  32.     rts
  33. .fail    moveq    #0,d0
  34.     rts
  35.  
  36. ZGdata_decrunch
  37.     movem.l    d2-d7/a2-a6,-(sp)
  38.     move.l    xfdbi_SourceBuffer(a0),a1
  39.     move.l    xfdbi_UserTargetBuf(a0),a0
  40.     addq.l    #4,a1    ; skip ID
  41.     bsr.s    ZGdecrunch
  42.     moveq    #1,d0
  43.     movem.l    (sp)+,d2-d7/a2-a6
  44.     rts
  45.  
  46. ZGdata_scan
  47.     moveq   #0,d0
  48.     cmp.l   #"Z&G!",(a0)
  49.     bne.s    .fail
  50.     moveq    #1,d0
  51. .fail    rts
  52.  
  53. ZGdata_verify
  54.     move.l  12(a0),d1        ; d1 = packed length
  55.     cmp.l   d0,d1
  56.     bhi.s    .fail            ; fail if packed len > remaining len
  57.     cmp.l    8(a0),d1
  58.     bhi.s    .fail            ; fail if packed len > unpacked len
  59.     move.l    d1,d0
  60.     rts
  61. .fail    moveq    #0,d0
  62.     rts
  63.  
  64. ; a1 = in, a0 = out
  65. ZGdecrunch
  66. ;    movem.l    d3-d7/a2/a3,-(sp)    ;48E71F30
  67. ;    cmpi.l    #'Z&G!',(a1)+        ;0C995A264721
  68. ;    beq.b    1$            ;6708
  69. ;    movem.l    (sp)+,d3-d7/a2/a3    ;4CDF0CF8
  70. ;    moveq    #0,d0            ;7000
  71. ;    rts                ;4E75
  72.  
  73. 1$    addq.w    #4,a1            ;5849
  74.     move.l    a0,d4            ;2808
  75.     adda.l    (a1)+,a0        ;D1D9
  76.     adda.l    (a1)+,a1        ;D3D9
  77.     move.w    (a1),d6            ;3C11
  78.     move.w    -(a1),d7        ;3E21
  79.     moveq    #$10,d5            ;7A10
  80.     lea    (18$,pc),a3        ;47FA00EA
  81. 2$    subq.w    #1,d6            ;5346
  82.     bpl.b    3$            ;6A04
  83.     move.w    -(a1),d7        ;3E21
  84.     moveq    #15,d6            ;7C0F
  85. 3$    lsr.w    #1,d7            ;E24F
  86.     blo.b    6$            ;6538
  87.     moveq    #8,d1            ;7208
  88.     move.w    d6,d0            ;3006
  89.     sub.w    d1,d6            ;9C41
  90.     bpl.b    4$            ;6A08
  91.     ror.l    d0,d7            ;E0BF
  92.     move.w    -(a1),d7        ;3E21
  93.     rol.l    d0,d7            ;E1BF
  94.     add.w    d5,d6            ;DC45
  95. 4$    move.w    d7,d0            ;3007
  96.     lsr.l    d1,d7            ;E2AF
  97.     add.w    d1,d1            ;D241
  98.     and.w    (-4,a3,d1.w),d0        ;C07310FC
  99.     move.b    d0,-(a0)        ;1100
  100.     cmp.l    a0,d4            ;B888
  101.     blo.b    2$            ;65D4
  102. ;    movem.l    (sp)+,d3-d7/a2/a3    ;4CDF0CF8
  103. ;    moveq    #1,d0            ;7001
  104.     rts                ;4E75
  105.  
  106. 5$    dc.w    5,0
  107.     dc.w    8,$20
  108.     dc.w    10,$120
  109.     dc.w    12,$520
  110.  
  111. 6$    moveq    #2,d1            ;7202
  112.     move.w    d6,d0            ;3006
  113.     sub.w    d1,d6            ;9C41
  114.     bpl.b    7$            ;6A08
  115.     ror.l    d0,d7            ;E0BF
  116.     move.w    -(a1),d7        ;3E21
  117.     rol.l    d0,d7            ;E1BF
  118.     add.w    d5,d6            ;DC45
  119. 7$    move.w    d7,d0            ;3007
  120.     lsr.l    d1,d7            ;E2AF
  121.     add.w    d1,d1            ;D241
  122.     and.w    (-4,a3,d1.w),d0        ;C07310FC
  123.     add.w    d0,d0            ;D040
  124.     add.w    d0,d0            ;D040
  125.     movem.w    (5$,pc,d0.w),d1/d3    ;4CBB000A00CE
  126.     move.w    d6,d0            ;3006
  127.     sub.w    d1,d6            ;9C41
  128.     bpl.b    8$            ;6A08
  129.     ror.l    d0,d7            ;E0BF
  130.     move.w    -(a1),d7        ;3E21
  131.     rol.l    d0,d7            ;E1BF
  132.     add.w    d5,d6            ;DC45
  133. 8$    move.w    d7,d0            ;3007
  134.     lsr.l    d1,d7            ;E2AF
  135.     add.w    d1,d1            ;D241
  136.     and.w    (-4,a3,d1.w),d0        ;C07310FC
  137.     add.w    d3,d0            ;D043
  138.     lea    (1,a0,d0.w),a2        ;45F00001
  139.     subq.w    #1,d6            ;5346
  140.     bpl.b    9$            ;6A04
  141.     move.w    -(a1),d7        ;3E21
  142.     moveq    #15,d6            ;7C0F
  143. 9$    lsr.w    #1,d7            ;E24F
  144.     blo.b    17$            ;6544
  145.     subq.w    #1,d6            ;5346
  146.     bpl.b    10$            ;6A04
  147.     move.w    -(a1),d7        ;3E21
  148.     moveq    #15,d6            ;7C0F
  149. 10$    lsr.w    #1,d7            ;E24F
  150.     blo.b    16$            ;6536
  151.     subq.w    #1,d6            ;5346
  152.     bpl.b    11$            ;6A04
  153.     move.w    -(a1),d7        ;3E21
  154.     moveq    #15,d6            ;7C0F
  155. 11$    lsr.w    #1,d7            ;E24F
  156.     blo.b    15$            ;6528
  157.     moveq    #0,d3            ;7600
  158. 12$    moveq    #3,d1            ;7203
  159.     move.w    d6,d0            ;3006
  160.     sub.w    d1,d6            ;9C41
  161.     bpl.b    13$            ;6A08
  162.     ror.l    d0,d7            ;E0BF
  163.     move.w    -(a1),d7        ;3E21
  164.     rol.l    d0,d7            ;E1BF
  165.     add.w    d5,d6            ;DC45
  166. 13$    move.w    d7,d0            ;3007
  167.     lsr.l    d1,d7            ;E2AF
  168.     add.w    d1,d1            ;D241
  169.     and.w    (-4,a3,d1.w),d0        ;C07310FC
  170.     add.w    d0,d3            ;D640
  171.     subq.w    #7,d0            ;5F40
  172.     beq.b    12$            ;67E0
  173. 14$    move.b    -(a2),-(a0)        ;1122
  174.     dbra    d3,14$            ;51CBFFFC
  175. 15$    move.b    -(a2),-(a0)        ;1122
  176. 16$    move.b    -(a2),-(a0)        ;1122
  177. 17$    move.b    -(a2),-(a0)        ;1122
  178.     move.b    -(a2),-(a0)        ;1122
  179.     cmp.l    a0,d4            ;B888
  180.     blo.w    2$            ;6500FF22
  181. ;    movem.l    (sp)+,d3-d7/a2/a3    ;4CDF0CF8
  182. ;    moveq    #1,d0            ;7001
  183.     rts                ;4E75
  184.  
  185. 18$    dc.w    %0000000000000011
  186.     dc.w    %0000000000000111
  187.     dc.w    %0000000000001111
  188.     dc.w    %0000000000011111
  189.     dc.w    %0000000000111111
  190.     dc.w    %0000000001111111
  191.     dc.w    %0000000011111111
  192.     dc.w    %0000000111111111
  193.     dc.w    %0000001111111111
  194.     dc.w    %0000011111111111
  195.     dc.w    %0000111111111111
  196.  
  197.  
  198. ZGdata_name    dc.b    '(Z&G!) Data Cruncher',0
  199.