home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_06 / PP82.ZIP / PP82.MSA / JAMPACK3 / DEPJAM3.S next >
Text File  |  1991-05-24  |  13KB  |  723 lines

  1. ; SIMPLE TRAP #1 FILE DEPACKER FOR JAM PACKER V3.0 LZH COMPRESSION.
  2. ; WRITTEN BY SHARAZ JEK.
  3.  
  4. savebuf        =    $200
  5. YES        equ    1
  6. NO        equ    0
  7. LSEEKROUTINE    EQU     YES    ;WHEN PROG USES LSEEK TO DETERMINE FILE LENGTH
  8. SFIRSTROUTINE    EQU    YES    ;WHEN PROG USES SFIRST TO DETERMINE FILE LENGTH
  9.  
  10. BEGINNING:
  11.  BRA.S    START
  12. fname: dc.b 'PLAYER.PRG',$00
  13.  EVEN
  14.  
  15. START:
  16.  MOVEA.L A7,A5 
  17.  LEA BEGINNING(PC),A7
  18.  MOVE.L 4(A5),A5
  19.  MOVE.L $C(A5),D0
  20.  ADD.L $14(A5),D0
  21.  ADD.L $1C(A5),D0
  22.  ADD.L #$100,D0
  23.  
  24.  MOVE.L  D0,-(A7)
  25.  MOVE.L  A5,-(A7)
  26.  MOVE.W  #$0000,-(A7)
  27.  MOVE.W  #$004A,-(A7)
  28.  TRAP    #1
  29.  ADDA.L  #$0000000C,A7
  30.  
  31.  clr.l -(sp)
  32.  move.w #$20,-(sp)
  33.  trap #1
  34.  addq.l #6,sp
  35.  move.l d0,d7
  36.  
  37.  MOVE.L    #$2000,-(SP)
  38.  MOVE.W #$48,-(SP)
  39.  TRAP #1        ;RESERVE SOME SPACE FOR LZH DEPACK TABLES
  40.  ADDQ.L #6,SP
  41.  MOVE.L D0,BUFPOS
  42.  
  43.  move.l $84.W,oldtrap1vector
  44.  move.l #trapit,$84.W
  45.  
  46.  move.l d7,-(sp)
  47.  move.w #$20,-(sp)
  48.  trap #1
  49.  addq.l #6,sp
  50.  
  51.  MOVE.L #NULL,-(SP)
  52.  MOVE.L #NULL,-(SP)
  53.  PEA    fname(PC)
  54.  MOVE.W #0,-(SP)
  55.  MOVE.W #$4B,-(SP)
  56.  TRAP    #1
  57.  add.l #14,sp
  58.  
  59. ;ENSURE THAT YOU CAN QUIT OUT OF PROGRAMS WITHOUT A CRASH
  60.  clr.l -(sp)
  61.  move.w #$20,-(sp)
  62.  trap #1
  63.  addq.l #6,sp
  64.  
  65.  move.l oldtrap1vector(pc),$84.w
  66.  
  67.  move.l d0,-(sp)
  68.  move.w #$20,-(sp)
  69.  trap #1
  70.  addq.l #6,sp
  71.  
  72.  clr.w -(sp)
  73.  trap #1
  74.  
  75. trapit:
  76.  btst #$05,(a7)
  77.  bne.S super
  78.  move.l usp,a0
  79.  bra.S after
  80. super:
  81.  move.l a7,a0
  82.  addq.l #6,a0
  83. after:
  84.  cmp.w #$3d,(a0)
  85.  beq doopen
  86.  cmp.w #$3f,(a0)
  87.  beq.s load
  88.  IFNE LSEEKROUTINE
  89.  cmp.w #$42,(a0)
  90.  beq.s down
  91.  ENDC
  92.  IFNE SFIRSTROUTINE
  93.  cmp.w #$4e,(a0)
  94.  beq.s dosfirst
  95.  cmp.w #$2f,(a0)
  96.  beq.s dogetdta
  97.  cmp.w #$1a,(a0)
  98.  ENDC
  99.  bne dotrap1
  100.  
  101.  IFNE SFIRSTROUTINE
  102.  lea retsetdta(pc),a0
  103.  move.l 2(a7),(a0)
  104.  lea setdta(pc),a0
  105.  move.l a0,2(a7)
  106.  bra dotrap1
  107.  
  108. dogetdta:
  109.  lea retgetdta(pc),a0
  110.  move.l 2(a7),(a0)
  111.  lea getdta(pc),a0
  112.  move.l a0,2(a7)
  113.  bra dotrap1
  114.  ENDC
  115.  
  116. doopen:
  117.  lea retopen(pc),a0
  118.  move.l 2(a7),(a0)
  119.  lea open(pc),a0
  120.  move.l a0,2(a7)
  121.  bra dotrap1
  122.  
  123. ;here starts the stuff for SFIRST
  124.  
  125.  IFNE SFIRSTROUTINE
  126. dosfirst:
  127.  lea retsfirst(pc),a0
  128.  move.l 2(a7),(a0)
  129.  lea sfirst(pc),a0
  130.  move.l a0,2(a7)
  131.  bra.s dotrap1
  132.  ENDC
  133.  
  134. ;here start the stuff for LSEEK
  135.  IFNE LSEEKROUTINE
  136. down:
  137.  lea retlseek(pc),a0
  138.  move.l 2(a7),(a0)
  139.  lea lseek(pc),a0
  140.  move.l a0,2(a7)
  141.  bra.s dotrap1
  142.  ENDC
  143.  
  144. load:
  145.  move.w inopen(pc),d0
  146.  cmp.w #1,d0
  147.  beq.s dotrap1            ;if checking depack marker, do real trap1!
  148.  move.w seekflag(pc),d0
  149.  cmp.w #1,d0
  150.  beq.s dotrap1            ;if called from seek handler, exit!
  151.  move.w mustdecrun(pc),d0
  152.  cmp.w #1,d0
  153.  bne.s dotrap1            ;if marker not present, don't decrunch!
  154.  
  155.  move.l a7,d0
  156.  movem.l a1-a3,-(sp) 
  157.  
  158.  sub.l #$20,8(a0)
  159.  lea buffer(pc),a1
  160.  move.l 8(a0),(a1)
  161.  
  162.  move.l d0,a2
  163.  lea return(pc),a1
  164.  move.l 2(a2),(a1)
  165.  lea decrunch(pc),a1
  166.  move.l a1,2(a2)
  167.  
  168.  move.l buffer(pc),a1
  169.  lea savebuf,a2
  170.  move.l #$20,a3
  171. loadloop:
  172.  move.b (a1)+,(a2)+
  173.  subq.l #1,a3
  174.  cmp.l #0,a3
  175.  bne.s loadloop
  176.  movem.l (sp)+,a1-a3
  177.  
  178.  
  179. dotrap1:
  180.  dc.w $4ef9
  181. oldtrap1vector:
  182.  dc.l $00
  183.  
  184.  
  185. ;**************************
  186. open:
  187.  tst.l d0
  188.  bmi exitopen2
  189.  
  190.  movem.l a1-a3,-(sp)
  191.  move.l d0,a3
  192.  lea inopen(pc),a1
  193.  move.w #1,(a1)
  194.  
  195.  pea test(pc)
  196.  move.l #8,-(sp)
  197.  move.w a3,-(sp)
  198.  move.w #$3f,-(sp)
  199.  trap #1
  200.  add.l #12,sp
  201.  tst.l d0            ;ADDED TO FIX ZERO LENGTH FILE
  202.  beq.s notcrun            ;DITTO
  203.  
  204.  move.l magic(pc),d0
  205.  cmp.l test(pc),d0
  206.  bne.s notcrun
  207.  lea mustdecrun(pc),a1
  208.  move.w #1,(a1)
  209.  bra.s skipit
  210. notcrun:
  211.  lea mustdecrun(pc),a1
  212.  move.w #0,(a1)
  213. skipit:
  214.  
  215.  move.w #1,-(sp)
  216.  move.w a3,-(sp)
  217.  move.l #-8,-(sp)
  218.  move.w #$42,-(sp)
  219.  trap #1
  220.  add.l #10,sp
  221.  
  222.  move.l a3,d0
  223. exitopen:
  224.  lea inopen(pc),a1
  225.  move.w #0,(a1)
  226.  movem.l (sp)+,a1-a3
  227.  
  228. exitopen2:
  229.  dc.w $4ef9
  230. retopen:                               ;exit
  231.  dc.l $00
  232.  
  233. inopen:
  234.  dc.w 0
  235. test:
  236.  dc.l 0
  237. unpaklen:
  238.  dc.l 0
  239. mustdecrun:
  240.  dc.w 0
  241. magic:
  242.  dc.b 'LZH!'
  243.  
  244.  IFNE SFIRSTROUTINE
  245. ;***************************
  246. getdta:
  247.  lea dta(pc),a0
  248.  move.l d0,(a0)
  249.  dc.w $4ef9
  250. retgetdta:
  251.  dc.l $00
  252.  
  253. ;****************************
  254. setdta:
  255.  lea dta(pc),a0
  256.  move.l 2(a7),(a0)
  257.  dc.w $4ef9
  258. retsetdta:
  259.  dc.l $00
  260.  
  261. ;***********************************     FOR $4E (SFIRST)
  262. sfirst:
  263.  tst.l d0
  264.  bne pissoff
  265.  
  266.  move.l 2(a7),a0
  267.  
  268.  movem.l a1-a3,-(sp)
  269.  
  270.  move.w #$2,-(sp)
  271.  move.l a0,-(sp)
  272.  move.w #$3d,-(sp)
  273.  trap #1
  274.  addq.l #8,sp
  275.  lea sfirsthandle(pc),a1
  276.  move.w d0,(a1)
  277.  
  278.  move.w mustdecrun(pc),d0
  279.  cmp.w #1,d0
  280.  beq.s change
  281.  bra.s afterchange
  282.  
  283. change:
  284.  move.l dta(pc),a0
  285.  add.l #26,a0
  286.  move.l unpaklen(pc),d0
  287.  move.l d0,(a0)
  288.  
  289. afterchange:
  290.  move.w sfirsthandle(pc),-(sp)
  291.  move.w #$3e,-(sp)
  292.  trap #1
  293.  addq.l #4,sp
  294.  
  295.  movem.l (sp)+,a1-a3
  296.  
  297. pissoff:
  298.  dc.w $4ef9
  299. retsfirst:                               ;exit
  300.  dc.l $00
  301.  ENDC
  302.  
  303. ;***********************************     FOR $42 (LSEEK) IN TRAP1
  304.  IFNE LSEEKROUTINE
  305. lseek:
  306.  cmp.w #2,8(a7)
  307.  bne vamos3
  308.  cmp.l #0,2(a7)
  309.  bne vamos3
  310.  lea seekhandle(pc),a0
  311.  move.w 6(a7),(a0)
  312.  lea sd0save(pc),a0
  313.  move.l d0,(a0)
  314.  
  315.  move.w mustdecrun(pc),d0
  316.  cmp.w #1,d0
  317.  bne.s vamos 
  318.  move.l unpaklen(pc),d0
  319.  bra.s vamos3
  320.  
  321. vamos:
  322.  move.l sd0save(pc),d0
  323. vamos3:
  324.  dc.w $4ef9
  325. retlseek:                            ;exit
  326.  dc.l $00
  327.  ENDC
  328.  
  329. ;************************************    FOR $3F (READ) IN TRAP1
  330. decrunch:
  331.          ;a0 - start of crunched data
  332.          ;a1 - beginning of uncrunching area
  333.  
  334.  movem.l d0-d7/a0-a6,-(sp)
  335.  move.l buffer(pc),a0
  336.  lea origlen(pc),a1
  337.  move.l 4(a0),(a1)
  338.  
  339.  move sr,d1
  340.  btst #13,d1
  341.  bne nochange
  342.  
  343.  clr.l -(sp)
  344.  move.w #$20,-(sp)
  345.  trap #1
  346.  addq.l #6,sp
  347.  lea jek(pc),a6
  348.  move.l d0,(a6)
  349.  
  350.  lea mode(pc),a1
  351.  move.w #1,(a1)      ;1 denotes must return to user mode
  352.  
  353. nochange:
  354.  lea colstore(pc),a1
  355.  move.w $fff8240,(a1)
  356.  move.l buffer(pc),a0
  357.  move.l a0,a1
  358.  add.l #$20,a1
  359.  BSR DEPACK
  360.  move.w colstore(pc),$fff8240
  361.  
  362.                 ;restore memory saved in buffer
  363.  move.l buffer(pc),a1
  364.  lea savebuf,a2
  365.  move.l #$20,a3
  366. loadloop2:
  367.  move.b (a2)+,(a1)+
  368.  subq.l #1,a3
  369.  cmp.l #0,a3
  370.  bne.s loadloop2
  371.  
  372.  move.w mode(pc),d0
  373.  cmp.w #1,d0
  374.  bne nochange2
  375.  
  376.  move.l jek(pc),-(sp)
  377.  move.w #$20,-(sp)
  378.  trap #1
  379.  addq.l #6,sp
  380.  
  381. nochange2:
  382.  lea mode(pc),a1
  383.  move.w #$00,(a1)
  384.  movem.l (sp)+,d0-d7/a0-a6
  385.  move.l origlen(pc),d0
  386.  dc.w $4ef9
  387. return:                            ;exit decrunch module
  388.  dc.l $00
  389.  
  390.  
  391. * DEPACKER V3.0; For use with the JAM (Jek And Moose) Packer V3.0
  392. *
  393. * USAGE:
  394. * LEA $ADDRESS OF PACKED DATA,A5
  395. * LEA $ADDRESS TO UNPACK DATA TO,A6
  396. * BSR DEPACK
  397. *
  398. * NOTE: Must save registers before executing depack if original
  399. *       contents are required.
  400.  
  401. RESET   MOVEM.W D0-D1/D3/D5,-(A7)
  402.     MOVEA.L A1,A2
  403.     MOVEQ   #$00,D2
  404.     MOVEQ   #-$02,D4
  405.     MOVEQ   #$00,D1
  406.     MOVE.W  #$0139,D5
  407. OUTER    ADDQ.W  #2,D4
  408.     CMP.W   (A2)+,D7
  409.     BHI.S   OUTER
  410.     MOVE.W  $00(A3,D4.W),D3
  411.     ADDQ.W  #1,D3
  412.     LSR.W   #1,D3
  413.     CMP.W   -$02(A3,D2.W),D3
  414.     BLS.S     BIDDLE
  415.     MOVE.W  $00(A3,D1.W),D0
  416.     ADD.W   $02(A3,D1.W),D0
  417.     CMP.W   D0,D3
  418.     BLS.S    BIDDLE
  419. BITH    MOVE.W  D0,$00(A3,D2.W)
  420.     MOVE.W  D1,$00(A1,D2.W)
  421.     MOVE.W  D2,$00(A0,D1.W)
  422.     MOVE.W  D2,$02(A0,D1.W)
  423.     ADDQ.W  #2,D2
  424.     ADDQ.L  #4,D1
  425.     MOVE.W  $00(A3,D1.W),D0
  426.     ADD.W   $02(A3,D1.W),D0
  427.     CMP.W   D0,D3
  428.     BHI.S    BITH
  429. BIDDLE    MOVE.W  D3,$00(A3,D2.W)
  430.     MOVE.W  $00(A1,D4.W),D0
  431.     MOVE.W  D0,$00(A1,D2.W)
  432.     MOVE.W  D2,$00(A0,D0.W)
  433.     ADDQ.W  #2,D2
  434.     DBF     D5,OUTER
  435. MAKETABLE2
  436.     MOVE.W  $00(A3,D1.W),D0
  437.     ADD.W   $02(A3,D1.W),D0
  438.     MOVE.W  D0,$00(A3,D2.W)
  439.     MOVE.W  D1,$00(A1,D2.W)
  440.     MOVE.W  D2,$00(A0,D1.W)
  441.     MOVE.W  D2,$02(A0,D1.W)
  442.     ADDQ.W  #2,D2
  443.     ADDQ.L  #4,D1
  444.     CMP.W   D7,D2
  445.     BNE.S    MAKETABLE2
  446.     MOVEM.W (A7)+,D0-D1/D3/D5
  447.     RTS     
  448.  
  449. CREATE  MOVE.L    TABLE7(PC),A0
  450.     LEA     TDATA1(PC),A1
  451.     MOVEQ   #$00,D0
  452.     MOVEQ   #$1F,D1
  453.     MOVEQ   #$00,D2
  454. LOOP1   MOVE.B  D0,(A0)+
  455.     DBF     D1,LOOP1
  456.     DBF     D2,EXIT1
  457.     MOVE.W  (A1)+,D3
  458.     MOVEQ   #$03,D2
  459. EXIT1   ROL.W   #4,D3
  460.     MOVE.W  D3,D1
  461.     ANDI.W  #$000F,D1
  462.     ADDQ.B  #4,D0
  463.     BCC.S   LOOP1
  464.     MOVE.L    TABLE8(PC),A0
  465.     LEA     TDATA2(PC),A1
  466.     MOVEQ   #$05,D0
  467.     MOVEQ   #$03,D1
  468. LOOP2   MOVE.B  $00(A1,D0.W),D2
  469.     EXT.W   D2
  470. LOOP3   MOVE.B  D1,(A0)+
  471.     DBF     D2,LOOP3
  472.     ADDQ.W  #1,D1
  473.     DBF     D0,LOOP2
  474.     RTS
  475.  
  476. CREATE2 MOVE.L    TABLE1(PC),A0
  477.     MOVE.L    TABLE5(PC),A1
  478.     MOVE.L    TABLE4(PC),A2
  479.     MOVEQ   #$01,D1
  480.     MOVE.W  #$04E6,D2
  481.     MOVEQ   #$00,D4
  482.     MOVE.W  #$0139,D0
  483. CONTINUE
  484.     MOVE.W  D1,(A0)+
  485.     MOVE.W  D2,(A1)+
  486.     MOVE.W  D4,(A2)+
  487.     ADDQ.W  #2,D2
  488.     ADDQ.W  #2,D4
  489.     DBF     D0,CONTINUE
  490.     MOVE.L    TABLE1(PC),A0
  491.     MOVE.L    TABLE2(PC),A3
  492.     MOVE.L    TABLE6(PC),A1
  493.     MOVE.L    TABLE3(PC),A2
  494.     MOVE.W  #$0274,D2
  495.     MOVEQ   #$00,D4
  496.     MOVE.W  #$0138,D0
  497. DOMORE    MOVE.W  (A0)+,D1
  498.     ADD.W   (A0)+,D1
  499.     MOVE.W  D1,(A3)+
  500.     MOVE.W  D4,(A1)+
  501.     MOVE.W  D2,(A2)+
  502.     MOVE.W  D2,(A2)+
  503.     ADDQ.W  #4,D4
  504.     ADDQ.W  #2,D2
  505.     DBF     D0,DOMORE
  506.     MOVE.W  #$FFFF,(A3)
  507.     CLR.W   (A2)
  508.     RTS     
  509.  
  510. RESTORE BSR     RESET
  511.     BRA     BACK
  512.  
  513. TABLE1 DC.L 00
  514. TABLE2 DC.L 00
  515. TABLE3 DC.L 00
  516. TABLE4 DC.L 00
  517. TABLE5 DC.L 00
  518. TABLE6 DC.L 00
  519. TABLE7 DC.L 00
  520. TABLE8 DC.L 00
  521. BUFPOS: DC.L 00
  522.  
  523. EXIT
  524.     ADDQ.L    #4,A7
  525.     RTS
  526.  
  527. DEPACK
  528.     MOVE.L    A0,A5
  529.     MOVE.L    A1,A6
  530.     LEA    TABLE1(PC),A0
  531.     MOVE.L    #0,(A0)        ;SET UP RELATIVE TABLE OFFSETS
  532.     MOVE.L    #$274,4(A0)
  533.     MOVE.L    #$4E8,8(A0)
  534.     MOVE.L    #$9CE,12(A0)
  535.     MOVE.L    #$C42,16(A0)
  536.     MOVE.L    #$EB6,20(A0)
  537.     MOVE.L    #$112A,24(A0)
  538.     MOVE.L    #$122A,28(A0)
  539.  
  540.     MOVE.L    BUFPOS(PC),D1
  541.     TST.L D1
  542.     BNE.S DONTUSESCREEN
  543.     
  544. USESCREEN:
  545.     MOVE.B $FFFF8201.W,D6
  546.     MOVE.B $FFFF8203.W,D7
  547.     LSL.L #8,D6
  548.     MOVE.B D7,D6
  549.     LSL.L #8,D6
  550.     MOVE.L D6,D1
  551.  
  552. DONTUSESCREEN:
  553. ;    MOVE.L    A7,D1        ;GET STACK POSITON
  554. ;    sub.l    #$1500,D1    ;TABLES START ADDRESS IN D1
  555.                 ;STORE UNDER STACK
  556.     MOVE.W    #7,D0
  557. TABLOOP
  558.     ADD.L    D1,(A0)+    ;ADD TABLE BASE ADDRESS TO OFFSETS
  559.     DBF    D0,TABLOOP
  560.     
  561.     BSR    CREATE
  562.     BSR     CREATE2
  563.     MOVE.L    TABLE3(PC),A0
  564.     MOVE.L    TABLE5(PC),A1
  565.     MOVE.L    TABLE1(PC),A3
  566.     MOVE.L  A6,-(A7)
  567.     ADD.L    4(A5),A6
  568.     ADD.L    8(A5),A5
  569.     ADD.L    #$0C,A5
  570.     MOVE.L    A6,A4
  571.                 ;THIS IS REQUIRED!
  572.     MOVE.W    #59,D0        ;MOVE 60 SPACES TO END OF UNPACKED AREA
  573. SPACES    MOVE.B    #$20,(A4)+    ;NOTE: SHOULD PROBABLY SAVE THIS DATA
  574.     DBF    D0,SPACES    ;      BEFORE WIPING IT OUT!
  575.  
  576.     MOVEQ   #$08,D6
  577.     MOVE.B  -(A5),D5
  578.     MOVE.W  #$04E6,D7
  579.     MOVE.L    TABLE8(PC),A4
  580.  
  581. TOP    NOT.W    $FFFF8240.W
  582.     CMPA.L  (A7),A6
  583.     BLE    EXIT
  584.  
  585.     MOVE.W  $04E4(A1),D0
  586. MORE    DBF     D6,NOTEMPTY
  587.     MOVEQ   #$07,D6
  588.     MOVE.B  -(A5),D5
  589. NOTEMPTY
  590.     ADD.B   D5,D5
  591.     BCC.S   ZERO
  592.     ADDQ.W  #2,D0
  593. ZERO    MOVE.W  $00(A1,D0.W),D0
  594.     CMP.W   D7,D0
  595.     BLT.S   MORE
  596.     MOVE.W  D0,D1
  597.     SUB.W   D7,D0
  598.     MOVE.W  $04E4(A3),D4
  599.     BMI    RESTORE
  600.  
  601. BACK    MOVE.W  $00(A0,D1.W),D1
  602. SCAN    LEA     $00(A3,D1.W),A2
  603.     ADDQ.W  #1,(A2)
  604.     CMPM.W  (A2)+,(A2)+
  605.     BCS.S   FRSTGTR
  606.     MOVE.W  $00(A0,D1.W),D1
  607.     BNE.S   SCAN
  608.     LSR.W   #1,D0
  609.     CMP.W   #$0100,D0
  610.     BGE.S   GTE256
  611. WRITE    MOVE.B    D0,-(A6)
  612.     BRA.S   TOP
  613.  
  614. FRSTGTR SUBQ.W  #1,-$0004(A2)
  615.     MOVE.W  -$0004(A2),D4
  616. SAME    CMP.W   (A2)+,D4
  617.     BEQ.S   SAME
  618.     SUBQ.L  #4,A2
  619.     ADDQ.W  #1,(A2)
  620.     SUBA.L  A3,A2
  621.     MOVE.W  $00(A1,D1.W),D4
  622.     MOVE.W  A2,$00(A0,D4.W)
  623.     CMP.W   D7,D4
  624.     BCC.S   SKIP
  625.     MOVE.W  A2,$02(A0,D4.W)
  626. SKIP    MOVE.W  $00(A1,A2.W),D2
  627.     MOVE.W  D4,$00(A1,A2.W)
  628.     MOVE.W  D1,$00(A0,D2.W)
  629.     CMP.W   D7,D2
  630.     BCC.S   SKIP2
  631.     MOVE.W  D1,$02(A0,D2.W)
  632. SKIP2   MOVE.W  D2,$00(A1,D1.W)
  633.     MOVE.W  $00(A0,A2.W),D1
  634.     BNE.S   SCAN
  635.     LSR.W   #1,D0
  636.     CMP.W   #$0100,D0
  637.     BLT.S   WRITE
  638. GTE256    MOVE.B  -1(A5),D1
  639.     MOVEQ   #$00,D2
  640.     LSR.B   D6,D1
  641.     OR.B    D5,D1
  642.     MOVE.B  $00(A4,D1.W),D2
  643.     SUB.W   D2,D6
  644.     BPL.S   POSITIVE
  645.     MOVE.B  -(A5),D5
  646.     MOVE.B  D5,D4
  647.     ADDQ.W  #2,D6
  648.     BMI.S   OVERFLOW
  649.     BEQ.S   MODD4
  650.     LSR.B   #1,D4
  651.     LSL.B   #7,D5
  652.     BRA.S   MODD4
  653. READONE MOVE.B  -(A5),D5
  654.     MOVE.B  D5,D4
  655.     LSL.B   #6,D5
  656.     MOVEQ   #$02,D6
  657.     LSR.B   D6,D4
  658.     BRA.S   DOCOPY
  659. POSITIVE
  660.     BEQ.S   READONE
  661.     MOVE.B (A5),D5
  662.     SUBQ.W  #6,D6
  663. OVERFLOW
  664.     NEG.W   D6
  665.     LSL.B   D6,D5
  666.     MOVE.B  D5,D4
  667.     MOVE.B  -(A5),D5
  668.     MOVE.B  D5,D2
  669.     LSL.B   D6,D5
  670.     SUBQ.W  #8,D6
  671.     NEG.W   D6
  672.     LSR.B   D6,D2
  673.     OR.B    D2,D4
  674. MODD4   ANDI.W  #$003F,D4
  675. DOCOPY    MOVE.L    TABLE7(PC),A0
  676.     MOVE.B  (A0,D1.W),D2
  677.     LSL.W   #4,D2
  678.     OR.B    D4,D2
  679.     ;NEG.W   D2
  680.     LEA     $01(A6,D2.W),A0
  681.     SUBI.W  #$00FE,D0
  682.     MOVE.W  D0,D1
  683. COPY    MOVE.B  -(A0),D0
  684.     MOVE.B  D0,-(A6)
  685.     DBF     D1,COPY
  686.     MOVE.L    TABLE3(PC),A0
  687.     BRA    TOP
  688.  
  689. TDATA2    DC.W    $0F2F
  690.     DC.W    $2F3F
  691.     DC.W    $2F1F
  692. TDATA1
  693.     DC.W    $FFF7
  694.     DC.W    $7777
  695.     DC.W    $7773
  696.     DC.W    $3333
  697.     DC.W    $3333
  698.     DC.W    $3331
  699.     DC.W    $1111
  700.     DC.W    $1111
  701.     DC.W    $1111
  702.     DC.W    $1111
  703.     DC.W    $1111
  704.     DC.W    $1110
  705.     DC.L    $00
  706.     DC.L    $00
  707.  
  708.  SECTION DATA
  709. origlen:    dc.l $00
  710. oldssp:        dc.l $00
  711. buffer:        dc.l $00
  712. mode:        dc.l $00
  713. jek:        dc.l $00
  714. length:        dc.l $00
  715. colstore:    dc.l $00
  716. seekflag:    dc.w $00
  717. seekhandle:    dc.w $00
  718. sd0save:    dc.l $00
  719. rtlseeksav:    dc.l $00
  720. sfirsthandle:    dc.l $00
  721. dta:        dc.l $00
  722. oldsize:    dc.l $00
  723. NULL:        DC.L $00