home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / INC_MAG / INC_2_5.MSA / PRG / TINYVIEW.S < prev   
Text File  |  1990-05-28  |  4KB  |  219 lines

  1. *
  2. *  .TN? Decompator, converted from GFA to Devpac by Mr. Nice Guy!
  3. * Original in ST World article, sorry but I forgot the name of the author.
  4. *
  5.  
  6.     move.w    #3,-(sp)
  7.     trap    #14
  8.     addq.l    #2,sp
  9.     move.l    d0,logbase
  10.  
  11. * Set screen resolution to low or medium
  12.     move.w    #4,-(sp)
  13.     trap    #14
  14.     addq.l    #2,sp
  15.     move.w    d0,d7    screen resolution
  16.     lea    tiny,a6
  17.     move.b    (a6),d0    picture resolution
  18.     move.b    d0,res    Store for future use
  19.     cmp.b    #2,d0    is picture meant for monochrome
  20.     beq    mono    in that case special routine
  21.     cmp.b    #2,d7    is screen monochrome then
  22.     beq    exit_imposs
  23.     move.w    d0,-(sp)    otherwise set the correct resolution
  24.     pea    -1    don't change the screens
  25.     pea    -1
  26.     move.w    #5,-(sp)
  27.     trap    #14
  28.     add.l    #12,sp
  29.     bra    continue    with decompacting the screen
  30. mono    cmp.w    #2,d7    check is the picture is for other resolution
  31.     bne    exit_imposs
  32. continue
  33. * Get size and position of Control & Data bytes
  34. * a6 = a%
  35.     cmp.b    #2,res
  36.     bgt    color_cyc
  37.     moveq    #0,d0
  38.     move.b    33(a6),d0
  39.     lsl.w    #8,d0
  40.     move.b    34(a6),d0
  41.     move.w    d0,c_bytes
  42.     move.b    35(a6),d0
  43.     lsl.w    #8,d0
  44.     move.b    36(a6),d0
  45.     move.w    d0,d_words
  46.  
  47.     move.l    a6,d0
  48.     addq.l    #1,d0
  49.     move.l    d0,pal
  50.     move.l    a6,d0
  51.     add.l    #37,d0
  52.     move.l    d0,control
  53.     bra    no_color
  54. * Colour cycling picture
  55. color_cyc
  56.     move.b    37(a6),d0
  57.     lsl.w    #8,d0
  58.     move.b    38(a6),d0
  59.     move.w    d0,c_bytes
  60.     move.b    39(a6),d0
  61.     lsl.w    #8,d0
  62.     move.b    40(a6),d0
  63.     move.w    d0,d_words
  64.  
  65.     move.l    a6,d0
  66.     addq.l    #5,d0
  67.     move.l    d0,pal
  68.     move.l    a6,d0
  69.     add.l    #41,d0
  70.     move.l    d0,control
  71. no_color
  72.     move.l    control,a0
  73.     add.w    c_bytes,a0
  74.     move.l    a0,data
  75.  
  76. * Copy palette bytes into array
  77.  
  78.     move.l    #palette,a0
  79.     move.l    pal,a1
  80.     moveq    #14,d0
  81. non    move.b    (a1)+,d1
  82.     lsl.w    #8,d1
  83.     move.b    (a1)+,d1
  84.     move.w    d1,(a0)+
  85.     dbra    d0,non
  86.  
  87. * Set palette
  88.     move.l    #palette,-(sp)
  89.     move.w    #6,-(sp)
  90.     trap    #14
  91.     addq.l    #6,sp
  92.     moveq.l    #0,d4
  93.     move.l    d4,a2
  94.     move.w    #1,d3
  95.     moveq.l    #0,d2
  96.     move.l    d4,a3
  97.     move.l    logbase,a6
  98.  
  99. repeat    bsr    get_control
  100.     cmp.w    #0,d7
  101.     beq    case0
  102.     cmp.w    #1,d7
  103.     beq    case1
  104.     cmp.w    #2,d7
  105.     blt    no2
  106.     cmp.w    #128,d7
  107.     blt    case2to127
  108. no2    cmp.w    #129,d7
  109.     blt    no128
  110.     cmp.w    #256,d7
  111.     blt    case128to255
  112. no128    bra    endselect
  113. case0
  114. *  Repeat next data word (128 to 32767) d6 times
  115.     bsr    get_control
  116.     move.l    d7,d6
  117.     lsl.l    #8,d6
  118.     bsr    get_control
  119.     add.l    d7,d6
  120.     bsr    get_data
  121.     subq.w    #1,d6
  122. forn1    move.w    d5,(a6)
  123.     bsr    next_scr_word
  124.     dbra    d6,forn1
  125.     bra    endselect
  126. case1
  127. *  Get (128 to 32767) d6 words of unique data
  128.     bsr    get_control
  129.     move.l    d7,d6
  130.     lsl.w    #8,d6
  131.     bsr    get_control
  132.     add.l    d7,d6
  133.     subq.l    #1,d6
  134. forn2      bsr    get_data
  135.     move.w    d5,(a6)
  136.     bsr    next_scr_word
  137.     dbra    d6,forn2
  138.     bra    endselect
  139. case2to127
  140. * Get 1 word of data and repeat (1 to 127) d7 times
  141.     move.l    d7,d6
  142.     bsr    get_data
  143.     subq.w    #1,d6
  144. forn3    move.w    d5,(a6)
  145.     bsr    next_scr_word
  146.     dbra    d6,forn3
  147.     bra    endselect
  148. case128to255
  149. * Get (1 to 127) words of unique data
  150.     move.w    #255,d6
  151.      sub.w    d7,d6
  152. forn4      bsr    get_data
  153.     move.w    d5,(a6)
  154.     bsr    next_scr_word
  155.     dbra    d6,forn4
  156.  
  157. endselect    move.w    a3,d0
  158.     move.w    c_bytes,d1
  159.     cmp.w    d0,d1
  160.     bne    repeat
  161.  
  162.     move.w    #7,-(sp)
  163.     trap    #1
  164.     addq.l    #2,sp
  165. exit_imposs
  166.     clr.w    -(sp)
  167.     trap    #1
  168.  
  169. get_control
  170.     moveq    #0,d7
  171.     move.l    control,a0
  172.     move.b    (a0),d7
  173.     add.l    #1,control
  174.     add.w    #1,a3
  175.     rts
  176.  
  177. get_data    moveq    #0,d5
  178.     move.l    data,a1
  179.     move.b    (a1),d5
  180.     lsl.w    #8,d5
  181.     move.b    1(a1),d5
  182.     add.l    #2,data
  183.     rts
  184.  
  185. next_scr_word
  186.     add.w    #2,d2
  187.     add.w    #1,d3
  188.     cmp.w    #201,d3
  189.     bne    else
  190.     move.w    #1,d3
  191.     add.w    #1,d4
  192.     cmp.w    #20,d4
  193.     bne    endif1
  194.     moveq.l    #0,d4
  195.     add.w    #2,a2
  196. endif1    move.l    logbase,a6
  197.     move.l    d4,d0
  198.     lsl.w    #3,d0
  199.     add.w    d0,a6
  200.     add.w    a2,a6
  201. else    lea    160(a6),a6
  202. endif    rts
  203.  
  204. logbase    ds.l    1
  205. pal    ds.l    1
  206. data    ds.l    1
  207. control    ds.l    1
  208.  
  209. palette    ds.w    16
  210.  
  211. c_bytes    ds.w    1
  212. d_words    ds.w    1
  213. res    ds.b    1
  214.  
  215.  
  216.     even
  217.  
  218. tiny    incbin    *.tn?
  219.