home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / archiver / jampak3 / unpack.s < prev   
Text File  |  1991-03-30  |  6KB  |  351 lines

  1.  
  2.  move.w #$2,-(sp)
  3.  pea fname(pc)
  4.  move.w #$3d,-(sp)
  5.  trap #1
  6.  addq.l #8,sp
  7.  move.l d0,d7
  8.  
  9.  move.l #$80000,-(sp)
  10.  move.l #$fffff,-(sp)
  11.  move.w d7,-(sp)
  12.  move.w #$3f,-(sp)
  13.  trap #1
  14.  add.l #12,sp
  15.  MOVE.L D0,D6
  16.  
  17.  move.w d7,-(sp)
  18.  move.w #$3e,-(sp)
  19.  trap #1
  20.  addq.l #4,sp
  21.  
  22.  MOVE.L #$80000,A5
  23.  MOVE.L #$A0000,A6
  24.  
  25.  clr.l -(sp)
  26.  move.w #$20,-(sp)
  27.  trap #1
  28.  addq.l #6,sp
  29.  move.l d0,-(sp)
  30.  
  31.  MOVE.W $FFFF8240,-(SP)
  32.  
  33.  BSR UNPACK
  34.  
  35.  MOVE.W (SP)+,$FFFF8240
  36.  move.w #$20,-(sp)
  37.  trap #1
  38.  addq.l #6,sp 
  39.  
  40.  CLR.W -(SP)
  41.  TRAP #1
  42.  
  43.  
  44. fname: dc.b 'TEST.CR',00
  45.  
  46.  EVEN
  47.  
  48. * DEPACKER V3.0
  49. *
  50. * USAGE:
  51. * LEA $ADDRESS OF PACKED DATA,A5
  52. * LEA $ADDRESS TO UNPACK DATA TO,A6
  53. * BSR DEPACK
  54. *
  55. * NOTE: Must save registers before executing depack if they will be
  56. *       required later.
  57.  
  58. RESET   MOVEM.W D0-D1/D3/D5,-(A7)
  59.     MOVEA.L A1,A2
  60.     MOVEQ   #$00,D2
  61.     MOVEQ   #-$02,D4
  62.     MOVEQ   #$00,D1
  63.     MOVE.W  #$0139,D5
  64. OUTER    ADDQ.W  #2,D4
  65.     CMP.W   (A2)+,D7
  66.     BHI.S   OUTER
  67.     MOVE.W  $00(A3,D4.W),D3
  68.     ADDQ.W  #1,D3
  69.     LSR.W   #1,D3
  70.     CMP.W   -$02(A3,D2.W),D3
  71.     BLS.S     BIDDLE
  72.     MOVE.W  $00(A3,D1.W),D0
  73.     ADD.W   $02(A3,D1.W),D0
  74.     CMP.W   D0,D3
  75.     BLS.S    BIDDLE
  76. BITH    MOVE.W  D0,$00(A3,D2.W)
  77.     MOVE.W  D1,$00(A1,D2.W)
  78.     MOVE.W  D2,$00(A0,D1.W)
  79.     MOVE.W  D2,$02(A0,D1.W)
  80.     ADDQ.W  #2,D2
  81.     ADDQ.L  #4,D1
  82.     MOVE.W  $00(A3,D1.W),D0
  83.     ADD.W   $02(A3,D1.W),D0
  84.     CMP.W   D0,D3
  85.     BHI.S    BITH
  86. BIDDLE    MOVE.W  D3,$00(A3,D2.W)
  87.     MOVE.W  $00(A1,D4.W),D0
  88.     MOVE.W  D0,$00(A1,D2.W)
  89.     MOVE.W  D2,$00(A0,D0.W)
  90.     ADDQ.W  #2,D2
  91.     DBF     D5,OUTER
  92. MAKETABLE2
  93.     MOVE.W  $00(A3,D1.W),D0
  94.     ADD.W   $02(A3,D1.W),D0
  95.     MOVE.W  D0,$00(A3,D2.W)
  96.     MOVE.W  D1,$00(A1,D2.W)
  97.     MOVE.W  D2,$00(A0,D1.W)
  98.     MOVE.W  D2,$02(A0,D1.W)
  99.     ADDQ.W  #2,D2
  100.     ADDQ.L  #4,D1
  101.     CMP.W   D7,D2
  102.     BNE.S    MAKETABLE2
  103.     MOVEM.W (A7)+,D0-D1/D3/D5
  104.     RTS     
  105.  
  106. CREATE  MOVE.L    TABLE7(PC),A0
  107.     LEA     TDATA1(PC),A1
  108.     MOVEQ   #$00,D0
  109.     MOVEQ   #$1F,D1
  110.     MOVEQ   #$00,D2
  111. LOOP1   MOVE.B  D0,(A0)+
  112.     DBF     D1,LOOP1
  113.     DBF     D2,EXIT1
  114.     MOVE.W  (A1)+,D3
  115.     MOVEQ   #$03,D2
  116. EXIT1   ROL.W   #4,D3
  117.     MOVE.W  D3,D1
  118.     ANDI.W  #$000F,D1
  119.     ADDQ.B  #4,D0
  120.     BCC.S   LOOP1
  121.     MOVE.L    TABLE8(PC),A0
  122.     LEA     TDATA2(PC),A1
  123.     MOVEQ   #$05,D0
  124.     MOVEQ   #$03,D1
  125. LOOP2   MOVE.B  $00(A1,D0.W),D2
  126.     EXT.W   D2
  127. LOOP3   MOVE.B  D1,(A0)+
  128.     DBF     D2,LOOP3
  129.     ADDQ.W  #1,D1
  130.     DBF     D0,LOOP2
  131.     RTS
  132.  
  133. CREATE2 MOVE.L    TABLE1(PC),A0
  134.     MOVE.L    TABLE5(PC),A1
  135.     MOVE.L    TABLE4(PC),A2
  136.     MOVEQ   #$01,D1
  137.     MOVE.W  #$04E6,D2
  138.     MOVEQ   #$00,D4
  139.     MOVE.W  #$0139,D0
  140. CONTINUE
  141.     MOVE.W  D1,(A0)+
  142.     MOVE.W  D2,(A1)+
  143.     MOVE.W  D4,(A2)+
  144.     ADDQ.W  #2,D2
  145.     ADDQ.W  #2,D4
  146.     DBF     D0,CONTINUE
  147.     MOVE.L    TABLE1(PC),A0
  148.     MOVE.L    TABLE2(PC),A3
  149.     MOVE.L    TABLE6(PC),A1
  150.     MOVE.L    TABLE3(PC),A2
  151.     MOVE.W  #$0274,D2
  152.     MOVEQ   #$00,D4
  153.     MOVE.W  #$0138,D0
  154. DOMORE    MOVE.W  (A0)+,D1
  155.     ADD.W   (A0)+,D1
  156.     MOVE.W  D1,(A3)+
  157.     MOVE.W  D4,(A1)+
  158.     MOVE.W  D2,(A2)+
  159.     MOVE.W  D2,(A2)+
  160.     ADDQ.W  #4,D4
  161.     ADDQ.W  #2,D2
  162.     DBF     D0,DOMORE
  163.     MOVE.W  #$FFFF,(A3)
  164.     CLR.W   (A2)
  165.     RTS     
  166.  
  167. RESTORE BSR     RESET
  168.     BRA     BACK
  169.  
  170. TABLE1 DC.L 00
  171. TABLE2 DC.L 00
  172. TABLE3 DC.L 00
  173. TABLE4 DC.L 00
  174. TABLE5 DC.L 00
  175. TABLE6 DC.L 00
  176. TABLE7 DC.L 00
  177. TABLE8 DC.L 00
  178.  
  179. ;PARAMETERS
  180. ;A5 - SOURCE
  181. ;A6 - DESINATION
  182. EXIT
  183.     ADDQ.L    #4,A7
  184.     RTS
  185.  
  186. UNPACK
  187.     LEA    TABLE1(PC),A0
  188.     MOVE.L    #0,(A0)        ;SET UP RELATIVE TABLE OFFSETS
  189.     MOVE.L    #$274,4(A0)
  190.     MOVE.L    #$4E8,8(A0)
  191.     MOVE.L    #$9CE,12(A0)
  192.     MOVE.L    #$C42,16(A0)
  193.     MOVE.L    #$EB6,20(A0)
  194.     MOVE.L    #$112A,24(A0)
  195.     MOVE.L    #$122A,28(A0)
  196.  
  197.     MOVE.L    A7,D1        ;GET STACK POSITON
  198.     sub.l    #$1500,D1    ;TABLES START ADDRESS IN D1
  199.  
  200.     MOVE.W    #7,D0
  201. TABLOOP
  202.     ADD.L    D1,(A0)+    ;ADD TABLE BASE ADDRESS TO OFFSETS
  203.     DBF    D0,TABLOOP
  204.     
  205.     BSR    CREATE
  206.     BSR     CREATE2
  207.     MOVE.L    TABLE3(PC),A0
  208.     MOVE.L    TABLE5(PC),A1
  209.     MOVE.L    TABLE1(PC),A3
  210.     MOVE.L  A6,-(A7)
  211.     ADD.L    4(A5),A6
  212.     ADD.L    8(A5),A5
  213.     ADD.L    #$0C,A5
  214.     MOVE.L    A6,A4
  215.                 ;THIS IS REQUIRED!
  216.     MOVE.W    #59,D0        ;MOVE 60 SPACES TO END OF UNPACKED AREA
  217. SPACES    MOVE.B    #$20,(A4)+    ;SHOULD PROBABLY SAVE THIS DATA BEFORE
  218.     DBF    D0,SPACES    ;WIPING IT OUT!
  219.  
  220.     MOVEQ   #$08,D6
  221.     MOVE.B  -(A5),D5
  222.     MOVE.W  #$04E6,D7
  223.     MOVE.L    TABLE8(PC),A4
  224.  
  225. TOP    MOVE.W    D5,$FFFF8240
  226.     CMPA.L  (A7),A6
  227.     BLE    EXIT
  228.  
  229.     MOVE.W  $04E4(A1),D0
  230. MORE    DBF     D6,NOTEMPTY
  231.     MOVEQ   #$07,D6
  232.     MOVE.B  -(A5),D5
  233. NOTEMPTY
  234.     ADD.B   D5,D5
  235.     BCC.S   ZERO
  236.     ADDQ.W  #2,D0
  237. ZERO    MOVE.W  $00(A1,D0.W),D0
  238.     CMP.W   D7,D0
  239.     BLT.S   MORE
  240.     MOVE.W  D0,D1
  241.     SUB.W   D7,D0
  242.     MOVE.W  $04E4(A3),D4
  243.     BMI    RESTORE
  244.  
  245. BACK    MOVE.W  $00(A0,D1.W),D1
  246. SCAN    LEA     $00(A3,D1.W),A2
  247.     ADDQ.W  #1,(A2)
  248.     CMPM.W  (A2)+,(A2)+
  249.     BCS.S   FRSTGTR
  250.     MOVE.W  $00(A0,D1.W),D1
  251.     BNE.S   SCAN
  252.     LSR.W   #1,D0
  253.     CMP.W   #$0100,D0
  254.     BGE.S   GTE256
  255. WRITE    MOVE.B    D0,-(A6)
  256.     BRA.S   TOP
  257.  
  258. FRSTGTR SUBQ.W  #1,-$0004(A2)
  259.     MOVE.W  -$0004(A2),D4
  260. SAME    CMP.W   (A2)+,D4
  261.     BEQ.S   SAME
  262.     SUBQ.L  #4,A2
  263.     ADDQ.W  #1,(A2)
  264.     SUBA.L  A3,A2
  265.     MOVE.W  $00(A1,D1.W),D4
  266.     MOVE.W  A2,$00(A0,D4.W)
  267.     CMP.W   D7,D4
  268.     BCC.S   SKIP
  269.     MOVE.W  A2,$02(A0,D4.W)
  270. SKIP    MOVE.W  $00(A1,A2.W),D2
  271.     MOVE.W  D4,$00(A1,A2.W)
  272.     MOVE.W  D1,$00(A0,D2.W)
  273.     CMP.W   D7,D2
  274.     BCC.S   SKIP2
  275.     MOVE.W  D1,$02(A0,D2.W)
  276. SKIP2   MOVE.W  D2,$00(A1,D1.W)
  277.     MOVE.W  $00(A0,A2.W),D1
  278.     BNE.S   SCAN
  279.     LSR.W   #1,D0
  280.     CMP.W   #$0100,D0
  281.     BLT.S   WRITE
  282. GTE256    MOVE.B  -1(A5),D1
  283.     MOVEQ   #$00,D2
  284.     LSR.B   D6,D1
  285.     OR.B    D5,D1
  286.     MOVE.B  $00(A4,D1.W),D2
  287.     SUB.W   D2,D6
  288.     BPL.S   POSITIVE
  289.     MOVE.B  -(A5),D5
  290.     MOVE.B  D5,D4
  291.     ADDQ.W  #2,D6
  292.     BMI.S   OVERFLOW
  293.     BEQ.S   MODD4
  294.     LSR.B   #1,D4
  295.     LSL.B   #7,D5
  296.     BRA.S   MODD4
  297. READONE MOVE.B  -(A5),D5
  298.     MOVE.B  D5,D4
  299.     LSL.B   #6,D5
  300.     MOVEQ   #$02,D6
  301.     LSR.B   D6,D4
  302.     BRA.S   DOCOPY
  303. POSITIVE
  304.     BEQ.S   READONE
  305.     MOVE.B (A5),D5
  306.     SUBQ.W  #6,D6
  307. OVERFLOW
  308.     NEG.W   D6
  309.     LSL.B   D6,D5
  310.     MOVE.B  D5,D4
  311.     MOVE.B  -(A5),D5
  312.     MOVE.B  D5,D2
  313.     LSL.B   D6,D5
  314.     SUBQ.W  #8,D6
  315.     NEG.W   D6
  316.     LSR.B   D6,D2
  317.     OR.B    D2,D4
  318. MODD4   ANDI.W  #$003F,D4
  319. DOCOPY    MOVE.L    TABLE7(PC),A0
  320.     MOVE.B  (A0,D1.W),D2
  321.     LSL.W   #4,D2
  322.     OR.B    D4,D2
  323.     ;NEG.W   D2
  324.     LEA     $01(A6,D2.W),A0
  325.     SUBI.W  #$00FE,D0
  326.     MOVE.W  D0,D1
  327. COPY    MOVE.B  -(A0),D0
  328.     MOVE.B  D0,-(A6)
  329.     DBF     D1,COPY
  330.     MOVE.L    TABLE3(PC),A0
  331.     BRA    TOP
  332.  
  333. TDATA2    BTST    D7,$2F3F(A7)
  334.     MOVE.L  (A7)+,-(A7)
  335. TDATA1
  336.     DC.W    $FFF7
  337.     DC.W    $7777
  338.     DC.W    $7773
  339.     DC.W    $3333
  340.     DC.W    $3333
  341.     DC.W    $3331
  342.     MOVE.B  (A1),-(A0)
  343.     MOVE.B  (A1),-(A0)
  344.     MOVE.B  (A1),-(A0)
  345.     MOVE.B  (A1),-(A0)
  346.     MOVE.B  (A1),-(A0)
  347.     MOVE.B  (A0),-(A0)
  348.     ORI.B   #$00,D0
  349.     ORI.B   #$00,D0
  350.  
  351.