home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / LEDGERS / LEDG_05.MSA / SOURCE / HIGHLAND.ER / UNDEGAS.S < prev   
Text File  |  1987-04-22  |  2KB  |  61 lines

  1. *-------------------------------------------------------------------------*
  2. * Routine to unpack a degas elite screen - ( *.PC? )      Copyright 1991
  3. *                                The Highlander.
  4. *-------------------------------------------------------------------------*
  5. * Call with    a0 :- Pointing to picture file data to be uncompressed
  6. *         a1 :- Palette data output. 32 bytes.
  7. *        a2 :- 32000 byte Screen data dump.
  8. *-------------------------------------------------------------------------*
  9.  
  10.  
  11. UNPACK_DEGAS:
  12.         addq.l    #2,a0        ; skip resolution flag.
  13.         move.l    (a0)+,(a1)+    ; copy over palette.
  14.         move.l    (a0)+,(a1)+
  15.         move.l    (a0)+,(a1)+
  16.         move.l    (a0)+,(a1)+
  17.         move.l    (a0)+,(a1)+
  18.         move.l    (a0)+,(a1)+
  19.         move.l    (a0)+,(a1)+
  20.         move.l    (a0)+,(a1)+
  21.  
  22. ; now the picture area to be uncompressed.
  23.  
  24. ; 0 <= n <= 127        ;    n>=0 and n<=127 then no rept for n+1
  25. ; -127 <= n <= -1    ;    n>=-127 and n<=-1 then rept for -n+1
  26. ; n = -128         ;    no operation.
  27.  
  28.         move.w    #199,d7    ; scan lines
  29. .UNCOMP0:    moveq.w    #3,d6
  30. .UNCOMP1:    lea    _DEGASBUFF(PC),a3
  31. .UNCOMP2:    move.b    (a0)+,d0
  32.         ext.w    d0
  33.         cmp.b    #-128,d0        ; ignore.
  34.         beq.s    .UNCOMP2
  35.         cmp.b    #-1,d0
  36.         ble.s    .REPT
  37. .LOOP1:        move.b    (a0)+,(a3)+        ; no repeat.
  38.         dbra    d0,.LOOP1
  39.         cmp.l    #_DEGASBUFF+40,a3
  40.         blt.s    .UNCOMP2
  41.         bra.s    .DUMP_SCANLINE
  42. .REPT:        neg.w    d0
  43.         move.b    (a0)+,d1
  44. .LOOP2:        move.b    d1,(a3)+        ; repeat.
  45.         dbra    d0,.LOOP2
  46.         cmp.l    #_DEGASBUFF+40,a3
  47.         blt.s    .UNCOMP2
  48.  
  49. .DUMP_SCANLINE:    lea    _DEGASBUFF(PC),a3    ; dump completed 
  50.         move.l    a2,a6            ; uncompressed scan line
  51.         REPT    20            ; plane too screen.
  52.         move.w    (a3)+,(a2)+
  53.         addq.l    #6,a2
  54.         ENDR
  55.         lea.l    2(a6),a2
  56.         dbra    d6,.UNCOMP1
  57.         lea.l    152(a2),a2
  58.         dbra    d7,.UNCOMP0
  59.         rts
  60.  
  61. _DEGASBUFF:    ds.b    40