home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / utility / archiver / imploder / imploder.s < prev    next >
Text File  |  1994-11-27  |  22KB  |  1,256 lines

  1. ;
  2. ; File Imploder, Atari version by Torbjorn 'Hackbear' Ose
  3. ;                another Digital Chaos hack for you.
  4. ;
  5. ; based on an Amiga binary from Claude who said this was a good packer
  6. ; however some tests showed that it's not as good as Atomic or Ice
  7. ; but it depacks fast and in it's own space.  
  8. ;
  9. ; so i've decided not to waste much time on this, but instead release it
  10. ; as it is with source and all..
  11. ;
  12. ;
  13.  
  14.     opt    d-,o+
  15.  
  16.     move.l    4(a7),a5
  17.     move.l    $c(a5),d0
  18.     add.l    $14(a5),d0
  19.     add.l    $1c(a5),d0
  20.     add.l    #$100,d0
  21.     move.l    d0,-(a7)
  22.     move.l    a5,-(a7)
  23.     clr.w    -(a7)
  24.     move.w    #$4a,-(a7)    ; mshrink
  25.     trap    #1
  26.     lea    12(a7),a7
  27.  
  28.     pea    MyDta(pc)
  29.     move.w    #$1a,-(a7)    ; Set DTA
  30.     trap    #1
  31.     addq.l    #6,a7
  32.  
  33.  
  34. ;
  35. ; Parse command line (a5 + 128)
  36. ;
  37.     lea    exeflag(pc),a0
  38.     move.w    #11,(a0)    ; exe off, mode 11 default
  39.     
  40.     lea    129(a5),a5
  41.     lea    MyPath(pc),a6
  42. parsel    move.b    (a5)+,(a6)+
  43.     bne.s    parsel
  44.  
  45.     bsr    chkfile
  46.     cmp.w    #1,d0
  47.     bne.s    NoIm
  48.     lea    DepackTxt(pc),a0
  49.     bsr    YesNo
  50.     bne.s    Exit
  51.     bsr    do_depack
  52.     bra.s    Exit
  53. NoIm    cmp.w    #2,d0
  54.     bne.s    NoE
  55.     lea    ExecutableTxt(pc),a0
  56.     bsr    YesNo
  57.     bne.s    NoE
  58.     lea    exeflag(pc),a0
  59.     st    (a0)
  60. NoE    bsr.s    do_pack
  61.  
  62. Exit    clr.w    -(a7)
  63.     trap    #1
  64. ;
  65. ; Pack a file
  66. ;    
  67. do_pack
  68.     bsr    fsfirst
  69.     bmi.s    Exit
  70.     bsr    alloc
  71.     bmi.s    Exit
  72.     bsr    fopen
  73.     move.l    faddr(pc),a0
  74.     move.l    dta_len(pc),d0
  75.     bsr    fread
  76.     bsr    fclose
  77.  
  78.     move.l    faddr(pc),a0
  79.     move.l    a0,a2
  80.     move.l    dta_len(pc),d0
  81.     moveq    #1,d1
  82.     ror.l    #1,d1
  83.     move.b    pckmode(pc),d1
  84.     swap    d1
  85.     bclr    #7,d1
  86.     Bsr    Implode
  87.     lea    psize(pc),a0
  88.     move.l    d0,(a0)
  89.     
  90.     bsr    fcreate
  91.     move.b    exeflag(pc),d0
  92.     beq.s    nohead
  93.     lea    ExeHeader(pc),a0
  94.     move.l    #ExeEnd-ExeHeader,d0
  95.     lea    SegText(pc),a1
  96.     moveq    #32,d1
  97.     add.l    psize(pc),d1
  98.     add.l    d0,d1
  99.     move.l    d1,(a1)
  100.     bsr    fwrite
  101. nohead    move.l    faddr(pc),a0
  102.     move.l    psize(pc),d0
  103.     bsr.s    fwrite
  104.     move.b    exeflag(pc),d0
  105.     beq.s    nohead2
  106.     lea    Blank(pc),a0
  107.     moveq    #4,d0
  108.     bsr.s    fwrite
  109. nohead2    bsr    fclose
  110.     rts
  111. ;
  112. ;
  113. ;
  114.  
  115. do_depack
  116.     move.l    orglen(pc),d0
  117.     add.l    #1024,d0
  118.     bsr    alloc
  119.     bmi    Exit
  120.     bsr.s    fsfirst
  121.     bmi    Exit
  122.     bsr.s    fopen
  123.     move.l    faddr(pc),a0
  124.     move.l    dta_len(pc),d0
  125.     bsr.s    fread
  126.     bsr.s    fclose
  127.  
  128.     lea    faddr(pc),a1
  129.     move.l    (a1),a0
  130.     cmp.w    #$601a,(a0)
  131.     bne.s    noprog
  132.     lea    ExeEnd-ExeHeader(a0),a0
  133.     move.l    a0,(a1)
  134. noprog    bsr    Explode_Data
  135.  
  136.     bsr.s    fcreate
  137.     move.l    faddr(pc),a0
  138.     move.l    orglen(pc),d0
  139.     bsr.s    fwrite
  140.     bsr.s    fclose
  141.     rts
  142.  
  143.  
  144. ;
  145. ; Boring but essential routs, file handling etc..
  146. ;
  147. fsfirst    clr.w    -(a7)
  148.     pea    MyPath(pc)
  149.     move.w    #$4e,-(a7)
  150.     trap    #1
  151.     addq.l    #8,a7
  152.     tst.w    d0
  153.     bne.s    fsferr
  154.     move.l    dta_len(pc),d0    ; return file lenght if found
  155. fsfx    tst.l    d0
  156.     rts
  157. fsferr    moveq    #-1,d0        ; otherwise negative error message
  158.     bra.s    fsfx
  159.  
  160. fwrite    move.l    a0,-(a7)    ; addr
  161.     move.l    d0,-(a7)    ; size
  162.     move.w    d7,-(a7)    ; handle
  163.     move.w    #$40,-(a7)
  164.     trap    #1
  165.     lea    12(a7),a7
  166.     rts
  167. fread    move.l    a0,-(a7)    ; addr
  168.     move.l    d0,-(a7)    ; size
  169.     move.w    d7,-(a7)    ; handle
  170.     move.w    #$3f,-(a7)
  171.     trap    #1
  172.     lea    12(a7),a7
  173.     rts
  174. fclose    move.w    d7,-(a7)
  175.     move.w    #$3e,-(a7)
  176.     trap    #1
  177.     addq.l    #4,a7
  178. fopen    clr.w    -(a7)
  179.     pea    MyPath(pc)
  180.     move.w    #$3d,-(a7)
  181.     trap    #1
  182.     addq.l    #8,a7
  183.     move.w    d0,d7
  184.     rts
  185. fcreate    clr.w    -(a7)
  186.     pea    MyPath(pc)
  187.     move.w    #$3c,-(a7)
  188.     trap    #1
  189.     addq.l    #8,a7
  190.     move.w    d0,d7
  191.     rts
  192. alloc    move.l    d0,-(a7)
  193.     move.w    #$48,-(a7)
  194.     trap    #1
  195.     addq.l    #6,a7
  196.     lea    faddr(pc),a0
  197.     move.l    d0,(a0)
  198.     tst.l    d0
  199.     rts
  200.  
  201. chkfile    bsr.s    fopen
  202.     lea    ChkBuff(pc),a0
  203.     move.l    #ExeEnd-ExeHeader+12,d0
  204.     bsr.s    fread
  205.     bsr.s    fclose
  206.     moveq    #0,d0
  207.     lea    ChkBuff(pc),a0
  208.     cmp.l    #'IMP!',(a0)
  209.     bne.s    noimp
  210.     move.l    4(a0),-4(a0)
  211.     moveq    #1,d0
  212. noimp    cmp.l    #'IMP!',ExeEnd-ExeHeader(a0)
  213.     bne.s    noimp2
  214.     move.l    ExeEnd-ExeHeader+4(a0),-4(a0)
  215.     moveq    #1,d0
  216.     bra.s    noex
  217. noimp2    cmp.w    #$601a,(a0)
  218.     bne.s    noex
  219.     moveq    #2,d0
  220. noex    rts
  221.  
  222. YesNo    move.l    a0,-(a7)
  223.     move.w    #9,-(a7)
  224.     trap    #1
  225.     move.w    #7,-(a7)
  226.     trap    #1
  227.     addq.l    #8,a7
  228.     or.w    #$20,d0
  229.     cmp.b    #'y',d0
  230.     rts
  231. ;
  232. ;
  233. ;
  234.  
  235.  
  236. ;
  237. ; Packer routs
  238. ;
  239.  
  240.  
  241. Malloc    movem.l    d1-a6,-(a7)
  242.     move.l    d0,-(a7)
  243.     move.l    d0,-(a7)
  244.     move.w    #$48,-(a7)
  245.     trap    #1
  246.     addq.l    #6,a7
  247.     move.l    d0,a0
  248.     move.l    (a7)+,d1    ; size
  249. .clsl    clr.b    (a0)+
  250.     subq.l    #1,d1
  251.     bne.s    .clsl
  252.     movem.l    (a7)+,d1-a6
  253.     rts
  254. MemFree    movem.l    d0-a6,-(a7)
  255.     move.l    a1,-(a7)
  256.     move.w    #$49,-(a7)
  257.     trap    #1
  258.     addq.l    #6,a7
  259.     movem.l    (a7)+,d0-a6
  260.     rts
  261.  
  262. GetMem    movem.l    d1-a6,-(a7)
  263.     move.l    #$40000,d0
  264.     bsr.s    Malloc
  265.     move.l    d0,32(a6)
  266.     beq    GotNMem
  267.     move.l    28(a6),d2
  268.     lsl.l    #3,d2
  269.     sub.l    a2,a2
  270. .gm1    move.l    #$800,d0
  271.     sub.l    d0,d2
  272.     bpl.s    .gm2
  273.     add.l    d2,d0
  274.     moveq    #0,d2
  275. .gm2    addq.l    #8,d0
  276.     move.l    d0,d1
  277.     bsr.s    Malloc
  278.     tst.l    d0
  279.     beq.s    GotNMem
  280.     move.l    d0,36(a6)
  281.     move.l    d0,a0
  282.     move.l    d1,(a0)
  283.     move.l    a2,4(a0)
  284.     move.l    a0,a2
  285.     tst.l    d2
  286.     bne.s    .gm1
  287.     MOVEA.L    32(A6),A0
  288.     MOVEA.L    12(A6),A1
  289.     ADDA.L    28(A6),A1
  290.     MOVEA.L    36(A6),A2
  291. L0085    MOVEA.L    A2,A3
  292.     ADDA.L    (A3),A3
  293.     ADDQ.W    #8,A2
  294. L0086    MOVEQ    #0,D0
  295.     MOVE.B    -1(A1),D0
  296.     LSL.W    #8,D0
  297.     MOVE.B    (A1),D0
  298.     LSL.L    #2,D0
  299.     MOVE.L    0(A0,D0.L),D1
  300.     BEQ.S    L0087
  301.     MOVEA.L    D1,A4
  302.     MOVE.L    A1,-(A3)
  303.     MOVE.L    (A4),-(A3)
  304.     MOVE.L    A3,(A4)
  305.     BRA.S    L0088
  306. L0087    MOVE.L    A1,-(A3)
  307.     SUBQ.L    #4,A3
  308.     MOVE.L    A3,(A3)
  309.     MOVE.L    A3,0(A0,D0.L)
  310. L0088    SUBQ.L    #1,A1
  311.     CMPA.L    A2,A3
  312.     BHI.S    L0086
  313.     MOVEA.L    -(A2),A2
  314.     MOVE.L    A2,D0
  315.     BNE.S    L0085
  316.     MOVEQ    #-1,D0
  317. GetMemX    movem.l    (a7)+,d1-a6
  318.     tst.l    d0
  319.     rts
  320. GotNMem    moveq    #0,d0
  321.     bra.s    GetMemX
  322.  
  323. FreeMem    movem.l    d0-a6,-(a7)
  324.     move.l    32(a6),d0
  325.     beq.s    .fm1
  326.     move.l    d0,a1
  327.     bsr    MemFree
  328. .fm1    move.l    36(a6),a2
  329. .fml    move.l    a2,d0
  330.     beq.s    .fmx
  331.     move.l    4(a2),a1
  332.     exg    a1,a2
  333.     bsr    MemFree
  334.     bra.s    .fml
  335. .fmx    clr.l    36(a6)
  336.     clr.l    32(a6)
  337.     movem.l    (a7)+,d0-a6
  338.     rts
  339.  
  340.  
  341. L008F    MOVE.L    16(A6),D5
  342.     MOVEA.L    44(A6),A5
  343.     MOVEQ    #1,D7
  344.     MOVEA.L    32(A6),A3
  345.     MOVEQ    #0,D0
  346.     MOVE.B    (A5)+,D0
  347.     LSL.W    #8,D0
  348.     MOVE.B    (A5)+,D0
  349.     LSL.L    #2,D0
  350.     MOVE.B    (A5),D3
  351.     ADDA.L    D0,A3
  352.     MOVEA.L    (A3),A0
  353.     MOVEA.L    (A0),A4
  354.     MOVE.L    A4,40(A6)
  355.     CMPA.L    A0,A4
  356.     BNE.S    L0090
  357.     CLR.L    (A3)
  358.     BRA.s    L0096
  359. L0090    MOVEA.L    (A4),A4
  360.     MOVE.L    A4,(A0)
  361.     MOVE.L    A4,D4
  362.     LEA    70(A6),A3
  363.     CLR.L    -(A3)
  364.     CLR.L    -(A3)
  365.     BRA.S    L0092
  366. L0091    MOVEA.L    (A4),A4
  367.     CMP.L    A4,D4
  368.     BEQ.S    L0096
  369. L0092    MOVEA.L    4(A4),A2
  370.     LEA    1(A2),A1
  371.     CMP.B    (A1)+,D3
  372.     BNE.S    L0094
  373.     LEA    1(A5),A0
  374.     MOVE.W    #$FC,D0
  375. L0093    CMPM.B    (A0)+,(A1)+
  376.     DBNE    D0,L0093
  377.     CMPA.L    D5,A1
  378.     BLS.S    L0094
  379.     MOVEA.L    D5,A1
  380. L0094    MOVE.L    A1,D6
  381.     SUB.L    A2,D6
  382.     CMP.W    D6,D7
  383.     BCC.S    L0091
  384.     MOVE.W    D6,D7
  385.     CMP.W    #8,D6
  386.     BHI.S    L0095
  387.     TST.B    -2(A3,D6.W)
  388.     BNE.S    L0091
  389.     MOVE.B    D6,-2(A3,D6.W)
  390.     MOVE.L    A2,D0
  391.     SUB.L    A5,D0
  392.     MOVE.W    D6,D1
  393.     LSL.W    #2,D1
  394.     MOVE.L    D0,0(A3,D1.W)
  395.     BRA.S    L0091
  396. L0095    MOVE.B    D6,7(A3)
  397.     MOVE.L    A2,D0
  398.     SUB.L    A5,D0
  399.     MOVE.L    D0,36(A3)
  400.     CMP.B    #-1,D6
  401.     BNE.S    L0091
  402. L0096    ADDA.L    28(A6),A5
  403.     CMPA.L    D5,A5
  404.     BCC.S    L0098
  405.     SUBQ.L    #2,A5
  406.     MOVEA.L    32(A6),A0
  407.     MOVEA.L    40(A6),A1
  408.     MOVEQ    #0,D0
  409.     MOVE.B    (A5)+,D0
  410.     LSL.W    #8,D0
  411.     MOVE.B    (A5),D0
  412.     LSL.L    #2,D0
  413.     MOVE.L    A5,4(A1)
  414.     ADDA.L    D0,A0
  415.     MOVE.L    (A0),D1
  416.     BEQ.S    L0097
  417.     MOVE.L    A1,(A0)
  418.     MOVEA.L    D1,A0
  419.     MOVE.L    (A0),(A1)
  420.     MOVE.L    A1,(A0)
  421.     SUBQ.B    #1,D7
  422.     RTS
  423. L0097    MOVE.L    A1,(A0)
  424.     MOVE.L    A1,(A1)
  425. L0098    SUBQ.B    #1,D7
  426.     RTS
  427.  
  428. L0099    MOVEA.L    44(A6),A5
  429.     MOVE.L    16(A6),D5
  430.     MOVE.L    A5,D0
  431.     ADD.L    28(A6),D0
  432.     CMP.L    D5,D0
  433.     BLS.S    L009A
  434.     MOVE.L    D5,D0
  435. L009A    MOVE.L    D0,D4
  436.     MOVEA.L    A5,A2
  437.     ADDQ.L    #1,A2
  438.     MOVEA.L    A2,A4
  439.     MOVEQ    #1,D7
  440.     MOVE.B    (A5),D3
  441.     LEA    70(A6),A3
  442.     CLR.L    -(A3)
  443.     CLR.L    -(A3)
  444. L009B    CMP.B    (A2)+,D3
  445.     BEQ.S    L009D
  446.     CMP.B    (A2)+,D3
  447.     BEQ.S    L009D
  448.     CMP.B    (A2)+,D3
  449.     BEQ.S    L009D
  450.     CMP.B    (A2)+,D3
  451.     BEQ.S    L009D
  452.     CMP.B    (A2)+,D3
  453.     BEQ.S    L009D
  454.     CMP.B    (A2)+,D3
  455.     BEQ.S    L009D
  456.     CMP.B    (A2)+,D3
  457.     BEQ.S    L009D
  458.     CMP.B    (A2)+,D3
  459.     BEQ.S    L009D
  460.     CMP.B    (A2)+,D3
  461.     BEQ.S    L009D
  462.     CMP.B    (A2)+,D3
  463.     BEQ.S    L009D
  464.     CMP.B    (A2)+,D3
  465.     BEQ.S    L009D
  466.     CMP.B    (A2)+,D3
  467.     BEQ.S    L009D
  468.     CMP.B    (A2)+,D3
  469.     BEQ.S    L009D
  470.     CMP.B    (A2)+,D3
  471.     BEQ.S    L009D
  472.     CMP.B    (A2)+,D3
  473.     BEQ.S    L009D
  474.     CMP.B    (A2)+,D3
  475.     BEQ.S    L009D
  476.     CMP.L    A2,D4
  477.     BHI.S    L009B
  478. L009C    RTS
  479. L009D    CMP.L    A2,D4
  480.     BLS.S    L009C
  481.     MOVEA.L    A4,A0
  482.     MOVEA.L    A2,A1
  483.     CMPM.B    (A0)+,(A1)+
  484.     BNE.S    L009B
  485.     CMPM.B    (A0)+,(A1)+
  486.     BNE.S    L00A0
  487.     CMPM.B    (A0)+,(A1)+
  488.     BNE.S    L009F
  489.     MOVE.W    #$FB,D0
  490. L009E    CMPM.B    (A0)+,(A1)+
  491.     DBNE    D0,L009E
  492. L009F    CMPA.L    D5,A1
  493.     BLS.S    L00A0
  494.     MOVEA.L    D5,A1
  495. L00A0    MOVE.L    A1,D6
  496.     SUB.L    A2,D6
  497.     CMP.W    D6,D7
  498.     BCC.S    L009B
  499.     MOVE.W    D6,D7
  500.     CMP.W    #8,D6
  501.     BHI.S    L00A1
  502.     TST.B    -2(A3,D6.W)
  503.     BNE.S    L009B
  504.     MOVE.B    D6,-2(A3,D6.W)
  505.     MOVE.L    A2,D0
  506.     SUB.L    A5,D0
  507.     SUBQ.L    #2,D0
  508.     MOVE.W    D6,D1
  509.     LSL.W    #2,D1
  510.     MOVE.L    D0,0(A3,D1.W)
  511.     BRA    L009B
  512. L00A1    MOVE.B    D6,7(A3)
  513.     MOVE.L    A2,D0
  514.     SUB.L    A5,D0
  515.     SUBQ.L    #2,D0
  516.     MOVE.L    D0,36(A3)
  517.     CMP.B    #-1,D6
  518.     BNE    L009B
  519.     RTS
  520.  
  521. L00A2    MOVE.B    54(A6),D2
  522.     MOVE.B    55(A6),D3
  523.     MOVEA.L    48(A6),A0
  524. L00A3    LSR.L    #1,D1
  525.     ROXR.B    #1,D2
  526.     SUBQ.B    #1,D3
  527.     BPL.S    L00A4
  528.     MOVEQ    #7,D3
  529.     MOVE.B    D2,(A0)+
  530.     MOVEQ    #0,D2
  531. L00A4    SUBQ.B    #1,D0
  532.     BNE.S    L00A3
  533.     MOVE.L    A0,48(A6)
  534.     MOVE.B    D3,55(A6)
  535.     MOVE.B    D2,54(A6)
  536.     RTS
  537.  
  538. L00A5    ANDI.W    #$FF,D0
  539.     CMP.B    #$D,D0
  540.     BHI.S    L00A7
  541.     CMP.B    #5,D0
  542.     BHI.S    L00A6
  543.     LEA    L007D(PC),A0
  544.     ADDA.W    D0,A0
  545.     MOVE.B    -2(A0),123(A6)
  546.     MOVE.B    2(A0),115(A6)
  547.     BRA.S    L00A9
  548. L00A6    SUBQ.B    #6,D0
  549.     ORI.B    #-$10,D0
  550.     MOVE.B    D0,123(A6)
  551.     MOVE.B    #8,115(A6)
  552.     BRA.S    L00A8
  553. L00A7    MOVE.B    #$1F,122(A6)
  554.     MOVE.B    D0,123(A6)
  555.     MOVE.B    #$D,115(A6)
  556. L00A8    MOVEQ    #5,D0
  557. L00A9    SUBQ.B    #2,D0
  558.     MOVE.L    58(A6),D2
  559.     LEA    L007C(PC),A1
  560.     LEA    L007B(PC),A0
  561.     ADDA.W    D0,A0
  562.     ADDA.W    D0,A0
  563.     CMP.W    (A0),D2
  564.     BCC.S    L00AA
  565.     MOVE.B    0(A1,D0.W),D6
  566.     MOVE.B    D6,D3
  567.     ADDQ.B    #1,D3
  568.     MOVE.B    #0,125(A6)
  569.     MOVEQ    #0,D4
  570.     BRA.S    L00AD
  571. L00AA    CMP.W    8(A0),D2
  572.     BCC.S    L00AB
  573.     MOVE.B    4(A1,D0.W),D6
  574.     MOVE.B    D6,D3
  575.     ADDQ.B    #2,D3
  576.     MOVE.B    #2,125(A6)
  577.     MOVE.W    (A0),D4
  578.     BRA.S    L00AD
  579. L00AB    CMP.W    16(A0),D2
  580.     BCS.S    L00AC
  581.     MOVEQ    #0,D0
  582.     RTS
  583. L00AC    MOVE.B    8(A1,D0.W),D6
  584.     MOVE.B    D6,D3
  585.     ADDQ.B    #2,D3
  586.     MOVE.B    #3,125(A6)
  587.     MOVE.W    8(A0),D4
  588. L00AD    MOVE.B    D3,116(A6)
  589.     SUB.W    D4,D2
  590.     MOVEQ    #$10,D5
  591.     SUB.B    D6,D5
  592.     LSL.W    D5,D2
  593. L00AE    ADD.W    D2,D2
  594.     ROXL    124(A6)
  595.     SUBQ.B    #1,D6
  596.     BNE.S    L00AE
  597.     LEA    174(A6),A1
  598.     LEA    126(A6),A0
  599.     ADDA.W    D0,A0
  600.     ADDA.W    D0,A0
  601.     ADDA.W    D0,A0
  602.     ADDA.W    D0,A0
  603.     CMP.L    (A0),D1
  604.     BCC.S    L00AF
  605.     MOVE.B    0(A1,D0.W),D6
  606.     MOVE.B    D6,D3
  607.     ADDQ.B    #1,D3
  608.     MOVEQ    #0,D7
  609.     MOVEQ    #0,D4
  610.     BRA.S    L00B2
  611. L00AF:
  612.     CMP.L    16(A0),D1
  613.     BCC.S    L00B0
  614.     MOVE.B    4(A1,D0.W),D6
  615.     MOVE.B    D6,D3
  616.     ADDQ.B    #2,D3
  617.     MOVEQ    #2,D7
  618.     MOVE.L    (A0),D4
  619.     BRA.S    L00B2
  620. L00B0    CMP.L    32(A0),D1
  621.     BCS.S    L00B1
  622.     MOVEQ    #0,D0
  623.     RTS
  624. L00B1    MOVE.B    8(A1,D0.W),D6
  625.     MOVE.B    D6,D3
  626.     ADDQ.B    #2,D3
  627.     MOVEQ    #3,D7
  628.     MOVE.L    16(A0),D4
  629. L00B2    MOVE.B    D3,114(A6)
  630.     SUB.L    D4,D1
  631.     MOVEQ    #$20,D5
  632.     SUB.B    D6,D5
  633.     LSL.L    D5,D1
  634. L00B3    ADD.L    D1,D1
  635.     ADDX.L    D7,D7
  636.     SUBQ.B    #1,D6
  637.     BNE.S    L00B3
  638.     MOVE.L    D7,118(A6)
  639.     MOVEQ    #-1,D0
  640.     RTS
  641.  
  642. L00B4    CLR.W    52(A6)
  643.     CLR.W    56(A6)
  644.     LEA    62(A6),A2
  645.     LEA    70(A6),A3
  646. L00B5    MOVE.L    (A3)+,D1
  647.     MOVE.B    (A2)+,D0
  648.     BEQ.S    L00B7
  649.     BSR    L00A5
  650.     BEQ.S    L00B7
  651.     MOVEQ    #0,D0
  652.     MOVEQ    #0,D1
  653.     MOVE.B    -1(A2),D0
  654.     LSL.W    #3,D0
  655.     ADD.B    115(A6),D1
  656.     ADD.B    114(A6),D1
  657.     ADD.B    116(A6),D1
  658.     SUB.W    D1,D0
  659.     BMI.S    L00B7
  660.     CMP.W    52(A6),D0
  661.     BCS.S    L00B7
  662.     MOVE.W    D0,52(A6)
  663.     MOVE.B    -1(A2),57(A6)
  664.     LEA    102(A6),A0
  665.     LEA    114(A6),A1
  666.     MOVEQ    #$B,D1
  667. L00B6    MOVE.B    (A1)+,(A0)+
  668.     DBF    D1,L00B6
  669. L00B7    MOVE.L    A2,D0
  670.     SUB.L    A6,D0
  671.     CMP.W    #$46,D0
  672.     BNE.S    L00B5
  673.     TST.W    56(A6)
  674.     RTS
  675.  
  676. ;pack
  677. ;regs: - 
  678. ;a0= fileptr
  679. ;a1= donecode=0
  680. ;a2= fileptr
  681. ;a5= lib ptr.
  682. ;d0= size
  683. ;d1= mode 0-11
  684. ;
  685. ;
  686.  
  687.  
  688. Implode    MOVEM.L    A2-A6/D2-D7,-(A7)
  689.     MOVE.W    #$5C,D2
  690. L00B9    CLR.W    -(A7)
  691.     DBF    D2,L00B9
  692.     MOVE.L    A7,A6
  693.     MOVE.L    A5,4(A6)
  694.     CMP.L    #$40,D0
  695.     BCS    L00D9
  696.     LSR.L    #8,D1
  697.     SCS    (A6)
  698.     LSR.L    #8,D1
  699.     SCS    1(A6)
  700.     CMP.B    #$C,D1
  701.     BCS.S    L00BA
  702.     MOVEQ    #0,D1
  703. L00BA
  704.     MOVE.L    A0,12(A6)
  705.     MOVE.L    A0,44(A6)
  706.     MOVE.L    A0,48(A6)
  707.     MOVE.L    D0,20(A6)
  708.     ADDA.L    D0,A0
  709.     MOVE.L    A0,16(A6)
  710.  
  711.     LEA    L007E(PC),A0
  712.     LSL.W    #2,D1
  713.     MOVE.L    0(A0,D1.W),D1
  714.     ADDQ.L    #1,D1
  715.     CMP.L    D0,D1
  716.     BLS.S    L00BB
  717.     MOVE.L    D0,D1
  718.     SUBQ.L    #1,D1
  719. L00BB    MOVE.L    D1,28(A6)
  720.     SUBQ.L    #1,D1
  721.     MOVEQ    #0,D0
  722. L00BC    CMP.L    (A0)+,D1
  723.     BLS.S    L00BD
  724.     ADDQ.B    #1,D0
  725.     BRA.S    L00BC
  726. L00BD    MOVE.B    D0,2(A6)
  727.     LEA    174(A6),A1
  728.     MOVEQ    #$C,D1
  729.     MULU    D1,D0
  730.     LEA    L007F(PC),A0
  731.     ADDA.L    D0,A0
  732.     SUBQ.W    #1,D1
  733. L00BE    MOVE.B    (A0)+,(A1)+
  734.     DBF    D1,L00BE
  735.     LEA    126(A6),A1
  736.     LEA    174(A6),A0
  737.     MOVEQ    #$B,D1
  738. L00BF    MOVE.B    (A0)+,D0
  739.     MOVEQ    #0,D2
  740.     BSET    D0,D2
  741.     MOVE.L    D2,(A1)+
  742.     DBF    D1,L00BF
  743.     LEA    126(A6),A0
  744.     LEA    142(A6),A1
  745.     MOVEQ    #7,D1
  746. L00C0    MOVE.L    (A0)+,D0
  747.     ADD.L    D0,(A1)+
  748.     DBF    D1,L00C0
  749.     TST.B    (A6)
  750.     BEQ.S    L00C3
  751.     LEA    126(A6),A1
  752.     MOVEQ    #7,D0
  753. L00C1    MOVE.L    (A1)+,D1
  754.     MOVE.W    D1,(A2)+
  755.     DBF    D0,L00C1
  756.     LEA    174(A6),A1
  757.     MOVEQ    #$B,D0
  758. L00C2    MOVE.B    (A1)+,(A2)+
  759.     DBF    D0,L00C2
  760. L00C3:
  761.     MOVE.B    #7,55(A6)
  762.     TST.B    1(A6)
  763.     BEQ.S    L00C4
  764.     BSR    GetMem
  765.     BNE.S    L00C4
  766.     SF    1(A6)
  767.     BSR    FreeMem
  768. L00C4    MOVE.L    16(A6),D0
  769.     SUBQ.L    #2,D0
  770.     CMP.L    44(A6),D0
  771.     BLS    L00D1
  772.     TST.B    1(A6)
  773.     BNE.S    L00C5
  774.     BSR    L0099
  775.     BRA.S    L00C6
  776. L00C5    BSR    L008F
  777.     BEQ.S    L00C7
  778. L00C6    BSR    L00B4
  779.     BNE.S    L00C8
  780. L00C7    MOVEA.L    44(A6),A0
  781.     MOVEA.L    48(A6),A1
  782.     MOVE.B    (A0),(A1)
  783.     ADDQ.L    #1,44(A6)
  784.     ADDQ.L    #1,48(A6)
  785.     ADDQ.L    #1,58(A6)
  786.     CMPI.L    #$4012,58(A6)
  787.     BCS.S    L00C4
  788.     BRA    L00D1
  789. L00C8    CLR.L    58(A6)
  790.     TST.B    1(A6)
  791.     BEQ.S    L00CF
  792.     MOVEA.L    44(A6),A2
  793.     ADDQ.L    #1,A2
  794.     MOVEA.L    A2,A3
  795.     ADDA.L    28(A6),A3
  796.     MOVE.W    56(A6),D3
  797.     SUBQ.W    #1,D3
  798.     MOVE.L    16(A6),D2
  799.     SUB.L    A3,D2
  800.     SUBQ.L    #1,D2
  801.     BPL.S    L00C9
  802.     MOVEQ    #0,D2
  803. L00C9    MOVEA.L    32(A6),A4
  804.     MOVEQ    #0,D0
  805.     MOVE.B    (A2)+,D0
  806.     LSL.W    #8,D0
  807.     MOVE.B    (A2),D0
  808.     LSL.L    #2,D0
  809.     ADDA.L    D0,A4
  810.     MOVEA.L    (A4),A0
  811.     MOVEA.L    (A0),A5
  812.     CMPA.L    A0,A5
  813.     BNE.S    L00CA
  814.     CLR.L    (A4)
  815.     BRA.S    L00CB
  816. L00CA    MOVE.L    (A5),(A0)
  817. L00CB    SUBQ.L    #1,D2
  818.     BMI.S    L00CE
  819.     SUBA.L    D0,A4
  820.     MOVEQ    #0,D0
  821.     MOVE.B    (A3)+,D0
  822.     LSL.W    #8,D0
  823.     MOVE.B    (A3),D0
  824.     LSL.L    #2,D0
  825.     ADDA.L    D0,A4
  826.     MOVE.L    A3,4(A5)
  827.     MOVE.L    (A4),D1
  828.     BEQ.S    L00CC
  829.     MOVEA.L    D1,A0
  830.     MOVE.L    (A0),(A5)
  831.     MOVE.L    A5,(A0)
  832.     BRA.S    L00CD
  833. L00CC    MOVE.L    A5,(A5)
  834. L00CD    MOVE.L    A5,(A4)
  835. L00CE    SUBQ.W    #1,D3
  836.     BNE.S    L00C9
  837. L00CF    MOVE.W    56(A6),D0
  838.     EXT.L    D0
  839.     ADD.L    D0,44(A6)
  840.     MOVE.B    102(A6),D0
  841.     MOVE.L    106(A6),D1
  842.     BSR    L00A2
  843.     MOVE.B    104(A6),D0
  844.     MOVE.W    112(A6),D1
  845.     BSR    L00A2
  846.     MOVE.B    103(A6),D0
  847.     MOVE.W    110(A6),D1
  848.     CMP.B    #$D,D0
  849.     BNE.S    L00D0
  850.     MOVEA.L    48(A6),A0
  851.     MOVE.B    D1,(A0)
  852.     ADDQ.L    #1,48(A6)
  853.     MOVEQ    #5,D0
  854.     MOVEQ    #$1F,D1
  855. L00D0    BSR    L00A2
  856.     BRA    L00C4
  857.  
  858. L00D1
  859.     MOVEA.L    44(A6),A0
  860.     MOVEA.L    48(A6),A1
  861.     MOVE.B    (A0),(A1)
  862.     ADDQ.L    #1,44(A6)
  863.     ADDQ.L    #1,48(A6)
  864.     ADDQ.L    #1,58(A6)
  865.     MOVE.L    44(A6),D0
  866.     CMP.L    16(A6),D0
  867.     BNE.S    L00D1
  868.     TST.B    (A6)
  869.     BNE    L00D5
  870.     MOVE.L    48(A6),D0
  871.     SUB.L    12(A6),D0
  872.     CMP.L    #$C,D0
  873.     BCS    L00D9
  874.     MOVE.L    20(A6),D1
  875.     SUB.L    D0,D1
  876.     CMP.L    #$36,D1
  877.     BLS    L00D9
  878.     MOVEA.L    12(A6),A1
  879.     MOVEA.L    48(A6),A0
  880.     MOVE.L    #$FF00,D7
  881.     BTST    #0,D0
  882.     BEQ.S    L00D2
  883.     MOVEQ    #0,D7
  884.     ADDQ.L    #1,D0
  885.     CLR.B    (A0)+
  886. L00D2    MOVE.L    (A1),8(A0)
  887.     MOVE.L    #$494D5021,(A1)
  888.     MOVE.L    4(A1),4(A0)
  889.     MOVE.L    20(A6),4(A1)
  890.     MOVE.L    8(A1),(A0)
  891.     MOVE.L    D0,8(A1)
  892.     ADDI.L    #$2E,D0
  893.     MOVE.L    D0,24(A6)
  894.     MOVE.L    58(A6),12(A0)
  895.     MOVE.B    54(A6),D1
  896.     ANDI.W    #$FE,D1
  897.     MOVE.B    55(A6),D0
  898.     BSET    D0,D1
  899.     OR.W    D7,D1
  900.     MOVE.W    D1,16(A0)
  901.     LEA    126(A6),A1
  902.     ADDA.W    #$12,A0
  903.     MOVEQ    #7,D0
  904. L00D3    MOVE.L    (A1)+,D1
  905.     MOVE.W    D1,(A0)+
  906.     DBF    D0,L00D3
  907.     LEA    174(A6),A1
  908.     MOVEQ    #$B,D0
  909. L00D4    MOVE.B    (A1)+,(A0)+
  910.     DBF    D0,L00D4
  911.     BRA.S    L00D9
  912. L00D5    MOVE.L    48(A6),D0
  913.     SUB.L    12(A6),D0
  914.     MOVE.L    20(A6),D1
  915.     SUB.L    D0,D1
  916.     CMP.L    #6,D1
  917.     BLS.S    L00D9
  918.     MOVE.B    54(A6),D1
  919.     ANDI.B    #-2,D1
  920.     MOVE.B    55(A6),D2
  921.     BSET    D2,D1
  922.     MOVEA.L    48(A6),A0
  923.     BTST    #0,D0
  924.     BEQ.S    L00D6
  925.     MOVE.B    D1,(A0)+
  926.     MOVE.L    58(A6),(A0)
  927.     BRA.S    L00D7
  928. L00D6    MOVE.L    58(A6),(A0)+
  929.     MOVE.B    D1,(A0)
  930. L00D7    ADDQ.L    #5,D0
  931.     MOVE.L    D0,24(A6)
  932.     BRA.S    L00D9
  933. L00D8    MOVEQ    #-1,D0
  934.     BRA.S    L00DA
  935. L00D9    MOVE.L    24(A6),D0
  936. L00DA    MOVEM.L    D0,-(A7)
  937.     BSR    FreeMem
  938.     MOVEM.L    (A7)+,D0
  939.     MOVE.W    #$5C,D2
  940. L00DB    CLR.W    (A7)+
  941.     DBF    D2,L00DB
  942.     MOVEM.L    (A7)+,A2-A6/D2-D7
  943.     TST.L    D0
  944.     RTS
  945.  
  946. ;
  947. ; Executable Header (mostly stolen from Ice Packer)
  948. ;
  949. ExeHeader
  950.     dc.w    $601a
  951. SegText    dcb.l    3,0        ; text, data, bss
  952.     dcb.w    5,0        ; reserved
  953.     dc.w    1        ; progflags
  954.     dc.w    -1        ; relocflag
  955.     
  956. ExeTop
  957.     lea    ExeEnd(pc),a0
  958.     bsr    Explode_Data
  959.     move.l    a0,a4
  960.     move.l    4(a7),a5
  961.     lea    ExeTop(pc),a6
  962.     lea    28(a4),a3
  963.     movem.l    -26(a3),d0-d3
  964.     lea    0(a3,d0.l),a0
  965.     add.l    d1,a0
  966.     add.l    d3,a0
  967.     move.l    a6,d0
  968.     move.l    (A0)+,D1
  969.     beq.s    ExeRx
  970.     add.l    d1,a3
  971.     moveq    #0,d1
  972. ExeR1    add.l    d0,(a3)
  973. ExeR2    move.b    (a0)+,d1
  974.     beq.s    ExeRx
  975.     cmp.b    #1,d1
  976.     bne.s    ExeR3
  977.     lea    $fe(a3),a3
  978.     bra.s    ExeR2
  979. ExeR3    add.l    d1,a3
  980.     bra.s    ExeR1
  981. ExeRx    lea    2(a4),a3
  982.     addq.l    #8,a5
  983.     move.l    (a5)+,a2
  984.     moveq    #0,d2
  985.     sub.l    a2,d2
  986.     move.l    (a3),(a5)+
  987.     add.l    (a3)+,a2
  988.     move.l    a2,(a5)+
  989.     move.l    (a3),(a5)+
  990.     add.l    (a3)+,a2
  991.     add.l    a2,d2
  992.     move.l    a2,(a5)+
  993.     move.l    (a3),(a5)+
  994.     add.l    (a3)+,a2
  995.     lea    710(a2),a2
  996.     movem.l    ExeMov(pc),a3/a0-a1/d3-d5/d0-d1
  997.     movem.l    a3/a0-a1/d3-d5/d0-d1,(a2)
  998.     lea    28(a4),a1
  999.     lsr.l    #3,d2
  1000.     move.l    a6,a3
  1001.     jmp    (a2)
  1002.  
  1003. ExeMov    move.l    (a1)+,(a3)+
  1004.     move.l    (a1)+,(a3)+
  1005.     subq.l    #1,d2
  1006.     bpl.s    ExeMov
  1007.     move.l    -232(a6),a3
  1008.     move.l    -228(a6),d1
  1009.     lsr.l    #3,d1
  1010.     sub.l    a0,a0
  1011. ExeMov2    move.l    a0,(a3)+
  1012.     move.l    a0,(a3)+
  1013.     subq.l    #1,d1
  1014.     bpl.s    ExeMov2
  1015.     jmp    (a6)
  1016.  
  1017. ;
  1018. ;
  1019. ;
  1020. **********************************************************************
  1021. * Data Exploder  a0 = Source/Dest Buffer (must be size of dest!)
  1022. *                          Resource by GROO 1990
  1023. **********************************************************************
  1024. Explode_Data    movem.l    d0-d5/a0-a4,-(sp)
  1025.         move.l    a0,a3
  1026.         move.l    a0,a4
  1027.         cmp.l    #"IMP!",(a0)+
  1028.         bne.s    NotImplDataErr
  1029.         add.l    (a0)+,a4
  1030.         add.l    (a0)+,a3
  1031.         move.l    a3,a2
  1032.         move.l    (a2)+,-(a0)
  1033.         move.l    (a2)+,-(a0)
  1034.         move.l    (a2)+,-(a0)
  1035.         move.l    (a2)+,d2
  1036.         move.w    (a2)+,d3
  1037.         bmi.s    .1
  1038.         subq.l    #1,a3
  1039. .1        lea    -$001C(sp),sp
  1040.         move.l    sp,a1
  1041.         moveq.l    #6,d0
  1042. .2        move.l    (a2)+,(a1)+
  1043.         dbra    d0,.2
  1044.         move.l    sp,a1
  1045.         moveq.l    #0,d4
  1046. Expl1        tst.l    d2
  1047.         beq.s    .3
  1048. .4        move.b    -(a3),-(a4)
  1049.         subq.l    #1,d2
  1050.         bne.s    .4
  1051. .3        cmp.l    a4,a0
  1052.         bcs.s    Expl2
  1053.         lea    $001C(sp),sp
  1054.         moveq.l    #-1,d0
  1055.         cmp.l    a3,a0
  1056.         beq.s    Expl_Exit
  1057. NotImplDataErr    moveq.l    #0,d0
  1058. Expl_Exit    movem.l    (sp)+,d0-d5/a0-a4
  1059.         rts        ; d0 = 0 = error
  1060.  
  1061. Expl2        add.b    d3,d3
  1062.         bne.s    .1
  1063.         move.b    -(a3),d3
  1064.         addx.b    d3,d3
  1065. .1        bcc.s    Expl3
  1066.         add.b    d3,d3
  1067.         bne.s    .2
  1068.         move.b    -(a3),d3
  1069.         addx.b    d3,d3
  1070. .2        bcc.s    Expl4
  1071.         add.b    d3,d3
  1072.         bne.s    .3
  1073.         move.b    -(a3),d3
  1074.         addx.b    d3,d3
  1075. .3        bcc.s    Expl5
  1076.         add.b    d3,d3
  1077.         bne.s    .4
  1078.         move.b    -(a3),d3
  1079.         addx.b    d3,d3
  1080. .4        bcc.s    Expl6
  1081.         add.b    d3,d3
  1082.         bne.s    .5
  1083.         move.b    -(a3),d3
  1084.         addx.b    d3,d3
  1085. .5        bcc.s    .6
  1086.         move.b    -(a3),d4
  1087.         moveq.l    #3,d0
  1088.         bra.s    Expl7
  1089.  
  1090. .6        add.b    d3,d3
  1091.         bne.s    .7
  1092.         move.b    -(a3),d3
  1093.         addx.b    d3,d3
  1094. .7        addx.b    d4,d4
  1095.         add.b    d3,d3
  1096.         bne.s    .8
  1097.         move.b    -(a3),d3
  1098.         addx.b    d3,d3
  1099. .8        addx.b    d4,d4
  1100.         add.b    d3,d3
  1101.         bne.s    .9
  1102.         move.b    -(a3),d3
  1103.         addx.b    d3,d3
  1104. .9        addx.b    d4,d4
  1105.         addq.b    #6,d4
  1106.         moveq.l    #3,d0
  1107.         bra.s    Expl7
  1108.  
  1109. Expl6        moveq.l    #5,d4
  1110.         moveq.l    #3,d0
  1111.         bra.s    Expl7
  1112.  
  1113. Expl5        moveq.l    #4,d4
  1114.         moveq.l    #2,d0
  1115.         bra.s    Expl7
  1116.  
  1117. Expl4        moveq.l    #3,d4
  1118.         moveq.l    #1,d0
  1119.         bra.s    Expl7
  1120.  
  1121. Expl3        moveq.l    #2,d4
  1122.         moveq.l    #0,d0
  1123. Expl7        moveq.l    #0,d5
  1124.         move.w    d0,d1
  1125.         add.b    d3,d3
  1126.         bne.s    .1
  1127.         move.b    -(a3),d3
  1128.         addx.b    d3,d3
  1129. .1        bcc.s    .4
  1130.         add.b    d3,d3
  1131.         bne.s    .2
  1132.         move.b    -(a3),d3
  1133.         addx.b    d3,d3
  1134. .2        bcc.s    .3
  1135.         move.b    Expl_Tab1(pc,d0.w),d5
  1136.         addq.b    #8,d0
  1137.         bra.s    .4
  1138.  
  1139. .3        moveq.l    #2,d5
  1140.         addq.b    #4,d0
  1141. .4        move.b    Expl_Tab2(pc,d0.w),d0
  1142. .5        add.b    d3,d3
  1143.         bne.s    .6
  1144.         move.b    -(a3),d3
  1145.         addx.b    d3,d3
  1146. .6        addx.w    d2,d2
  1147.         subq.b    #1,d0
  1148.         bne.s    .5
  1149.         add.w    d5,d2
  1150.         moveq.l    #0,d5
  1151.         move.l    d5,a2
  1152.         move.w    d1,d0
  1153.         add.b    d3,d3
  1154.         bne.s    .7
  1155.         move.b    -(a3),d3
  1156.         addx.b    d3,d3
  1157. .7        bcc.s    Expl9
  1158.         add.w    d1,d1
  1159.         add.b    d3,d3
  1160.         bne.s    .8
  1161.         move.b    -(a3),d3
  1162.         addx.b    d3,d3
  1163. .8        bcc.s    Expl8
  1164.         move.w    8(a1,d1.w),a2
  1165.         addq.b    #8,d0
  1166.         bra.s    Expl9
  1167.  
  1168. Expl8        move.w    0(a1,d1.w),a2
  1169.         addq.b    #4,d0
  1170. Expl9        move.b    $0010(a1,d0.w),d0
  1171. .1        add.b    d3,d3
  1172.         bne.s    .2
  1173.         move.b    -(a3),d3
  1174.         addx.b    d3,d3
  1175. .2        addx.l    d5,d5
  1176.         subq.b    #1,d0
  1177.         bne.s    .1
  1178.         addq.w    #1,a2
  1179.         add.l    d5,a2
  1180.         add.l    a4,a2
  1181. .3        move.b    -(a2),-(a4)
  1182.         subq.b    #1,d4
  1183.         bne.s    .3
  1184.         bra    Expl1
  1185.  
  1186. Expl_Tab1    dc.l    $060A0A12
  1187. Expl_Tab2    dc.l    $01010101
  1188.         dc.l    $02030304
  1189.         dc.l    $0405070E
  1190.  
  1191. ; =========================================================================
  1192.  
  1193. ExeEnd
  1194. ;
  1195. ;
  1196. ;
  1197.     data
  1198.  
  1199. L007B    DC.B    $00,$02,$00,$02,$00,$02,$00,$02
  1200.     DC.B    $00,$06,$00,$0A,$00,$0A,$00,$12
  1201.     DC.B    $00,$16,$00,'*',$00,$8A,'@',$12
  1202.  
  1203. L007C    DC.B    $01,$01,$01,$01,$02,$03,$03,$04
  1204.     DC.B    $04,$05,$07,$0E
  1205.  
  1206. L007D    DC.B    $00,$02,$06,$0E,$01,$02,$03,$04
  1207.  
  1208. L007E:
  1209.     DC.B    $00,$00,$00,$80,$00,$00,$01,$00
  1210.     DC.B    $00,$00,$02,$00,$00,$00,$04,$00
  1211.     DC.B    $00,$00,$07,$00,$00,$00,$0D,$00
  1212.     DC.B    $00,$00,$15,$00,$00,$00,'%',$00
  1213.     DC.B    $00,$00,'Q',$00,$00,$00,$92,$00
  1214.     DC.B    $00,$01,$09,$00,$00,$01,$09,$00
  1215. L007F:
  1216.     DC.B    $05,$05,$05,$05,$05,$05,$05,$05
  1217.     DC.B    $06,$06,$06,$06,$05,$06,$07,$07
  1218.     DC.B    $06,$06,$06,$06,$07,$07,$06,$06
  1219.     DC.B    $05,$06,$07,$07,$07,$07,$07,$07
  1220.     DC.B    $08,$08,$08,$08,$05,$06,$07,$08
  1221.     DC.B    $07,$07,$08,$08,$08,$08,$09,$09
  1222.     DC.B    $06,$07,$07,$08,$07,$08,$09,$09
  1223.     DC.B    $08,$09,$0A,$0A,$06,$07,$07,$08
  1224.     DC.B    $07,$09,$09,$0A,$08,$0A,$0B,$0B
  1225.     DC.B    $06,$07,$08,$08,$07,$09,$09,$0A
  1226.     DC.B    $08,$0A,$0B,$0C,$06,$07,$08,$08
  1227.     DC.B    $07,$09,$09,$0A,$09,$0A,$0C,$0D
  1228.     DC.B    $06,$07,$07,$08,$07,$09,$09,$0C
  1229.     DC.B    $09,$0A,$0C,$0E,$06,$07,$08,$09
  1230.     DC.B    $07,$09,$0A,$0C,$09,$0B,$0D,$0F
  1231.     DC.B    $06,$07,$08,$08,$07,$0A,$0B,$0B
  1232.     DC.B    $09,$0C,$0D,$10,$06,$08,$08,$09
  1233.     DC.B    $07,$0B,$0C,$0C,$09,$0D,$0E,$11
  1234.  
  1235. ;
  1236. ;
  1237. ;
  1238. ExecutableTxt    dc.b    'Executable? (y/n)',13,10,0
  1239. DepackTxt    dc.b    'Imploder File, Depack? (y/n)',13,10,0
  1240.         even
  1241. Blank        dc.l    0
  1242.     bss
  1243. MyDta    ds.b    21    ; reserved
  1244. dta_att    ds.b    1    ; attrib
  1245. dta_tim    ds.w    1    ; time
  1246. dta_dat    ds.w    1    ; date
  1247. dta_len    ds.l    1    ; lenglt
  1248. dta_nam    ds.b    14    ; name
  1249. faddr    ds.l    1    ; malloc address for input file
  1250. psize    ds.l    1    ; packed size
  1251. exeflag    ds.b    1    ; add exe header?
  1252. pckmode    ds.b    1    ; packing method 0-11
  1253. MyPath    ds.b    512
  1254. orglen    ds.l    1    ; original length from IMP header
  1255. ChkBuff    ds.b    ExeEnd-ExeHeader+12
  1256.