home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_01 / SPACKER3.LZH / S_PACKER.300 / SPV3_S / UNPACK3.S
Text File  |  1996-03-19  |  5KB  |  290 lines

  1. * UNPACK source for SPACKERv3    (C)THE FIREHAWKS'92
  2. * -------------------------------------------------
  3. * in    a0: even address start packed block
  4. * out    d0: original length or 0 if not SPv3 packed
  5. * =================================================
  6. * Use AUTO_SP3.PRG for multiblk packed files
  7.  
  8. unpack:    moveq    #0,d0
  9.     movem.l    d0-a6,-(sp)
  10.     lea    sp3_53(pc),a6
  11.     movea.l    a0,a1
  12.     cmpi.l    #'SPv3',(a1)+
  13.     bne.s    sp3_02
  14.     tst.w    (a1)
  15.     bne.s    sp3_02
  16.     move.l    (a1)+,d5
  17.     move.l    (a1)+,d0
  18.     move.l    (a1)+,(sp)
  19.     movea.l    a0,a2
  20.     adda.l    d0,a0
  21.     move.l    -(a0),-(a1)
  22.     move.l    -(a0),-(a1)
  23.     move.l    -(a0),-(a1)
  24.     move.l    -(a0),-(a1)
  25.     adda.l    (sp),a1
  26.     lea    sp3_58-sp3_53(a6),a3
  27.     moveq    #128-1,d0
  28. sp3_01:    move.l    (a2)+,(a3)+
  29.     dbf    d0,sp3_01
  30.     suba.l    a2,a3
  31.     move.l    a3,-(sp)
  32.     bsr.s    sp3_03
  33.     bsr    sp3_21
  34.     move.b    -(a0),d0
  35.     adda.l    (sp)+,a0
  36.     move.b    d0,(a0)+
  37.     lea    sp3_58-sp3_53(a6),a2
  38.     bsr    sp3_22
  39.     bsr    sp3_15
  40. sp3_02:    movem.l    (sp)+,d0-a6
  41.     rts
  42. sp3_03:    move.w    SR,d1
  43.     andi.w    #$2000,d1
  44.     beq.s    sp3_04
  45.     move.w    $FFFF8240.W,2(a6)
  46.     btst    #1,$FFFF8260.W
  47.     bne.s    sp3_04
  48.     swap    d5
  49. sp3_04:    clr.w    d5
  50.     move.w    -(a0),d6
  51.     lea    sp3_54-sp3_53(a6),a3
  52.     move.b    d6,(a3)+
  53.     moveq    #1,d3
  54.     moveq    #6,d4
  55. sp3_05:    cmp.b    d6,d3
  56.     bne.s    sp3_06
  57.     addq.w    #2,d3
  58. sp3_06:    move.b    d3,(a3)+
  59.     addq.w    #2,d3
  60.     dbf    d4,sp3_05
  61.     moveq    #$10,d4
  62.     move.b    -(a0),(a3)+
  63.     move.b    d4,(a3)+
  64.     move.b    -(a0),(a3)+
  65.     move.b    d4,(a3)+
  66.     move.b    -(a0),d4
  67.     move.w    d4,(a6)
  68.     lea    sp3_57-sp3_53(a6),a5
  69.     move.b    -(a0),d4
  70.     lea    1(a5,d4.w),a3
  71. sp3_07:    move.b    -(a0),-(a3)
  72.     dbf    d4,sp3_07
  73.     move.b    -(a0),-(a3)
  74.     beq.s    sp3_08
  75.     suba.w    d4,a0
  76. sp3_08:    moveq    #0,d2
  77.     move.b    -(a0),d2
  78.     move.w    d2,d3
  79.     move.b    -(a0),d7
  80. sp3_09:    bsr.s    sp3_10
  81.     bsr.s    sp3_10
  82.     dbf    d2,sp3_09
  83.     rts
  84. sp3_10:    not.w    d4
  85.     add.b    d7,d7
  86.     bne.s    sp3_11
  87.     move.b    -(a0),d7
  88.     addx.b    d7,d7
  89. sp3_11:    bcs.s    sp3_12
  90.     move.w    d2,d0
  91.     subq.w    #1,d3
  92.     sub.w    d3,d0
  93.     add.w    d0,d0
  94.     add.w    d4,d0
  95.     add.w    d0,d0
  96.     neg.w    d0
  97.     move.w    d0,-(a3)
  98.     rts
  99. sp3_12:    moveq    #2,d1
  100.     bsr    sp3_44
  101.     add.w    d0,d0
  102.     beq.s    sp3_13
  103.     move.b    d0,-(a3)
  104.     moveq    #2,d1
  105.     bsr    sp3_44
  106.     add.w    d0,d0
  107.     move.b    d0,-(a3)
  108.     rts
  109. sp3_13:    moveq    #2,d1
  110.     bsr    sp3_44
  111.     move.w    sp3_55-sp3_53(a6),d1
  112.     add.w    d0,d0
  113.     beq.s    sp3_14
  114.     move.w    sp3_55+2-sp3_53(a6),d1
  115. sp3_14:    or.w    d1,d0
  116.     move.w    d0,-(a3)
  117.     rts
  118. sp3_15:    move.w    SR,d1
  119.     andi.w    #$2000,d1
  120.     beq.s    sp3_16
  121.     move.w    2(a6),$FFFF8240.W
  122. sp3_16:    tst.w    d6
  123.     bpl.s    sp3_20
  124.     movea.l    a1,a2
  125.     movea.l    a1,a3
  126.     adda.l    4(sp),a3
  127. sp3_17:    moveq    #3,d6
  128. sp3_18:    move.w    (a2)+,d0
  129.     moveq    #3,d5
  130. sp3_19:    add.w    d0,d0
  131.     addx.w    d1,d1
  132.     add.w    d0,d0
  133.     addx.w    d2,d2
  134.     add.w    d0,d0
  135.     addx.w    d3,d3
  136.     add.w    d0,d0
  137.     addx.w    d4,d4
  138.     dbf    d5,sp3_19
  139.     dbf    d6,sp3_18
  140.     cmpa.l    a2,a3
  141.     blt.s    sp3_20
  142.     movem.w    d1-d4,-8(a2)
  143.     cmpa.l    a2,a3
  144.     bne.s    sp3_17
  145. sp3_20:    rts
  146. sp3_21:    move.b    -(a0),-(a1)
  147. sp3_22:    swap    d5
  148.     beq.s    sp3_23
  149.     move.w    d5,$FFFF8240.W
  150. sp3_23:    lea    sp3_56+2-sp3_53(a6),a3
  151.     cmpa.l    a0,a2
  152.     blt.s    sp3_25
  153.     rts
  154. sp3_24:    adda.w    d3,a3
  155. sp3_25:    add.b    d7,d7
  156.     bcc.s    sp3_28
  157.     beq.s    sp3_27
  158. sp3_26:    move.w    (a3),d3
  159.     bmi.s    sp3_24
  160.     bra.s    sp3_29
  161. sp3_27:    move.b    -(a0),d7
  162.     addx.b    d7,d7
  163.     bcs.s    sp3_26
  164. sp3_28:    move.w    -(a3),d3
  165.     bmi.s    sp3_24
  166. sp3_29:    ext.w    d3
  167.     jmp    sp3_30(pc,d3.w)
  168. sp3_30:    bra.s    sp3_30
  169.     bra.s    sp3_41
  170.     bra.s    sp3_41
  171.     bra.s    sp3_41
  172.     bra.s    sp3_41
  173.     bra.s    sp3_41
  174.     bra.s    sp3_37
  175.     bra.s    sp3_36
  176.     bra.s    sp3_32
  177.     bra.s    sp3_33
  178.     bra.s    sp3_31
  179.     bra.s    sp3_34
  180.     bra.s    sp3_21
  181. sp3_31:    move.b    (a5),-(a1)
  182.     bra.s    sp3_22
  183. sp3_32:    bsr.s    sp3_43
  184.     move.b    1(a5,d0.w),-(a1)
  185.     bra.s    sp3_22
  186. sp3_33:    bsr.s    sp3_43
  187.     add.w    (a6),d0
  188.     move.b    1(a5,d0.w),-(a1)
  189.     bra.s    sp3_22
  190. sp3_34:    moveq    #3,d1
  191.     bsr.s    sp3_44
  192.     lsr.w    #1,d0
  193.     bcc.s    sp3_35
  194.     not.w    d0
  195. sp3_35:    move.b    (a1),d1
  196.     add.w    d0,d1
  197.     move.b    d1,-(a1)
  198.     bra.s    sp3_22
  199. sp3_36:    lea    sp3_52-2-sp3_53(a6),a4
  200.     bsr.s    sp3_48
  201.     addi.w    #16,d0
  202.     lea    1(a1,d0.w),a3
  203.     move.b    -(a3),-(a1)
  204.     move.b    -(a3),-(a1)
  205.     bra    sp3_22
  206. sp3_37:    moveq    #3,d1
  207.     bsr.s    sp3_44
  208.     tst.w    d0
  209.     beq.s    sp3_38
  210.     addq.w    #5,d0
  211.     bra.s    sp3_40
  212. sp3_38:    move.b    -(a0),d0
  213.     beq.s    sp3_39
  214.     addi.w    #20,d0
  215.     bra.s    sp3_40
  216. sp3_39:    moveq    #13,d1
  217.     bsr.s    sp3_44
  218.     addi.w    #276,d0
  219. sp3_40:    move.w    d0,d3
  220.     add.w    d3,d3
  221. sp3_41:    lea    sp3_52-sp3_53(a6),a4
  222.     bsr.s    sp3_48
  223.     lsr.w    #1,d3
  224.     lea    1(a1,d0.w),a3
  225.     move.b    -(a3),-(a1)
  226. sp3_42:    move.b    -(a3),-(a1)
  227.     dbf    d3,sp3_42
  228.     bra    sp3_22
  229. sp3_43:    moveq    #0,d1
  230.     move.b    (a3),d1
  231. sp3_44:    moveq    #0,d0
  232.     cmpi.w    #7,d1
  233.     bpl.s    sp3_47
  234. sp3_45:    add.b    d7,d7
  235.     beq.s    sp3_46
  236.     addx.w    d0,d0
  237.     dbf    d1,sp3_45
  238.     rts
  239. sp3_46:    move.b    -(a0),d7
  240.     addx.b    d7,d7
  241.     addx.w    d0,d0
  242.     dbf    d1,sp3_45
  243.     rts
  244. sp3_47:    move.b    -(a0),d0
  245.     subq.w    #8,d1
  246.     bpl.s    sp3_45
  247.     rts
  248. sp3_48:    moveq    #0,d1
  249.     move.b    (a3),d1
  250.     adda.w    d1,a4
  251.     move.w    (a4),d1
  252.     bsr.s    sp3_44
  253.     tst.b    d6
  254.     beq.s    sp3_51
  255.     move.w    d0,d4
  256.     andi.w    #$FFF0,d4
  257.     andi.w    #$000F,d0
  258.     beq.s    sp3_50
  259.     lsr.w    #1,d0
  260.     beq.s    sp3_49
  261.     roxr.b    #1,d7
  262.     bcc.s    sp3_50
  263.     move.b    d7,(a0)+
  264.     moveq    #-128,d7
  265.     bra.s    sp3_50
  266. sp3_49:    moveq    #2,d1
  267.     bsr.s    sp3_44
  268.     add.w    d0,d0
  269.     or.w    d4,d0
  270.     bra.s    sp3_51
  271. sp3_50:    lea    sp3_54-sp3_53(a6),a3
  272.     or.b    (a3,d0.w),d4
  273.     move.w    d4,d0
  274. sp3_51:    add.w    18(a4),d0
  275.     rts
  276.  
  277.     DC.W    3
  278. sp3_52:    DC.W    4,5,7,8,9,10,11,12
  279.     DC.W    -16
  280.     DC.W    0,32,96,352,864,1888,3936,8032
  281.  
  282. sp3_53:    DS.L    1
  283. sp3_54:    DS.B    8
  284. sp3_55:    DS.W    2*64
  285. sp3_56:    DS.W    2
  286.     DS.B    1
  287. sp3_57:    DS.B    1
  288.     DS.B    2*64
  289. sp3_58:    DS.B    512
  290.