home *** CD-ROM | disk | FTP | other *** search
/ TCE Demo 2 / TCE_DEMO_CD2.iso / demo_cd_.2 / mags / stosser / stoser20.arj / stoser20.msa / HEADER2 / PRGHEDR.S
Text File  |  1994-12-14  |  9KB  |  470 lines

  1.  
  2. * Display a piccy while STOS prog is unpacking
  3. * Use data packing *not* executable packing!
  4.  
  5. start:
  6.  
  7.         move.l    #0,res          ; 0= LOW, 1=MED, 2=HIGH
  8.  
  9.     bsr    black        ; fade to black
  10.  
  11. * get actual screen address, phys base
  12.  
  13.         move.w  #2,-(sp)
  14.         trap    #14
  15.         addq.l  #2,sp
  16.         move.l  d0,screen     
  17.  
  18.  
  19. * the business
  20.  
  21.     move.l d0,a1        ;move screen address to a1
  22.     lea picture(pc),a0
  23.     bsr tiny
  24.  
  25.     bsr    fcolour        ;fade to the palette created by
  26.                 ; the tiny depack (TINPAL)
  27.  
  28. * piccy on screen now go do depack of STOS program
  29.  
  30.     lea    stos(pc),a0    ;move the start of the STOS prog into a0
  31.     bsr    ice_decrunch_2
  32.  
  33.     bsr    fblack        ; fade to black so the the picture
  34.                 ; doesn't just vanish when we run the
  35.                 ; STOS program
  36.  
  37.     bra    stos    ;and off we go!!
  38.  
  39.         illegal    ;It'll never get here (!?)
  40.  
  41. fblack:        ;fade to black in super mode
  42.     
  43.     moveq.l    #2,d6
  44.  
  45.     move.l    #fade_black,-(sp)
  46.     move    #38,-(sp)
  47.     trap    #14
  48.     addq.l    #6,sp
  49.  
  50.     rts
  51.  
  52. fcolour:    ;now fade back to colours
  53.  
  54.     moveq.l    #5,d6
  55.  
  56.     lea    tinpal(pc),a6
  57.     move.l    #fade,-(sp)
  58.     move    #38,-(sp)
  59.     trap    #14
  60.     addq.l    #6,sp
  61.  
  62.     rts
  63.  
  64. black
  65.         move.l  #black_pal,-(sp)
  66.         move    #6,-(sp)
  67.         trap    #14
  68.         add.l   #6,sp
  69.         rts
  70.  
  71.     even
  72.  
  73. ***************************************************************************
  74. * COLOUR FADE ROUTINES BY POWERMAN OF THE WILD BOYS, (C) TWB 1991         *
  75. * CALL FADE_BLACK TO FADE ALL COLOURS TO BLACK                            *
  76. * CALL FADE TO FADE ALL COLOURS TO A NEW PALETTE, MAKE SURE THAT          *
  77. * A6=ADDRESS OF NEW PALETTE DATA.                                         *
  78. * ON BOTH ROUTINES, D6=SPEED OF FADE (0=FASTEST)              *
  79. * DONT FORGET TO CREDIT ME IF YOU USE THESE ROUTS!                        *
  80. ***************************************************************************
  81.  
  82. FADE        ; Note: A6=source address of new palette
  83.         ;       D6=Speed of fade (0,1,2 etc)
  84.         MOVE.L $70.W,-(A7)
  85.         MOVE.W SR,-(A7)
  86.         MOVE.W #$2300,SR
  87.         MOVE.L #FADE_VBL,$70.W
  88.         MOVEQ.W #8-1,D0                    
  89. .L1        MOVEQ.W #16-1,D1            16 colours
  90.         LEA $FFFF8240.W,A0
  91.         MOVE.L A6,A5
  92. .L2        MOVE.W (A0),D2
  93.         ANDI.W #%0000011101110111,D2
  94.         MOVE.W (A5)+,D7
  95.         BSR FADE_D2_TO_D7
  96.         MOVE.W D2,(A0)+
  97.         DBF D1,.L2
  98.         MOVE.W D6,D5
  99. .L3        BSR WAIT_VBL
  100.         DBF D5,.L3
  101.         DBF D0,.L1    
  102.         MOVE.W (A7)+,SR
  103.         MOVE.L (A7)+,$70.W
  104.         RTS
  105.  
  106. FADE_D2_TO_D7    MOVEM.L D0-D1,-(A7)
  107.         MOVE.W D2,D3
  108.         ANDI.W #$F,D2
  109.         LSR.W #4,D3
  110.         MOVE.W D3,D4
  111.         ANDI.W #$F,D3
  112.         LSR.W #4,D4            D2,D3,D4=R,G,B VALUES OF OLD COLOUR
  113.         ANDI.W #$F,D4
  114.         MOVE.W D7,D0
  115.         ANDI.W #$F,D7
  116.         LSR.W #4,D0
  117.         MOVE.W D0,D1
  118.         ANDI.W #$F,D0
  119.         LSR.W #4,D1            D7,D0,D1=R,G,B VALUES OF NEW COLOUR
  120.         ANDI.W #$F,D1
  121.  
  122.         CMP.W D2,D7
  123.         BEQ .L2
  124.         BLT .L1
  125.         ADDQ.W #1,D2
  126.         BRA .L2
  127. .L1        SUBQ.W #1,D2    
  128. .L2        CMP.W D3,D0
  129.         BEQ .L22
  130.         BLT .L11
  131.         ADDQ.W #1,D3
  132.         BRA .L22
  133. .L11        SUBQ.W #1,D3    
  134. .L22        CMP.W D4,D1
  135.         BEQ .L222
  136.         BLT .L111
  137.         ADDQ.W #1,D4
  138.         BRA .L222
  139. .L111        SUBQ.W #1,D4    
  140. .L222        LSL.W #4,D3
  141.         LSL.W #8,D4
  142.         OR.W D3,D2
  143.         OR.W D4,D2        
  144.         MOVEM.L (A7)+,D0-D1
  145.         RTS        
  146.  
  147. FADE_BLACK    ; Note: D6=Speed of fade
  148.         MOVE.L $70.W,-(A7)
  149.         MOVE.W SR,-(A7)
  150.         MOVE.W #$2300,SR
  151.         MOVE.L #FADE_VBL,$70.W
  152.         MOVEQ.W #8-1,D0                    
  153. .L1        MOVEQ.W #16-1,D1            16 colours
  154.         LEA $FFFF8240.W,A0
  155. .L2        MOVE.W (A0),D2
  156.         BSR FADE_D2
  157.         MOVE.W D2,(A0)+
  158.         DBF D1,.L2
  159.         MOVE.W D6,D5
  160. .L3        BSR WAIT_VBL
  161.         DBF D5,.L3
  162.         DBF D0,.L1    
  163.         MOVE.W (A7)+,SR
  164.         MOVE.L (A7)+,$70.W
  165.         RTS
  166.  
  167. FADE_D2        MOVE.W D2,D3
  168.         ANDI.W #$F,D2
  169.         LSR.W #4,D3
  170.         MOVE.W D3,D4
  171.         ANDI.W #$F,D3
  172.         LSR.W #4,D4            D2,D3,D4=R,G,B VALUES
  173.         ANDI.W #$F,D4
  174.         TST.W D2
  175.         BEQ .L1
  176.         SUBQ.W #1,D2
  177. .L1        TST.W D3
  178.         BEQ .L2
  179.         SUBQ.W #1,D3
  180. .L2        TST.W D4
  181.         BEQ .L3
  182.         SUBQ.W #1,D4
  183. .L3        LSL.W #8,D4
  184.         LSL.W #4,D3
  185.         OR.W D4,D2
  186.         OR.W D3,D2
  187.         RTS
  188.         
  189. WAIT_VBL    CLR.B VBL_FLAG
  190. .L1        TST.B VBL_FLAG
  191.         BEQ .L1    
  192.         RTS
  193.  
  194. VBL_FLAG    DS.W 1
  195.  
  196. FADE_VBL    ST VBL_FLAG    
  197.         RTE
  198.     
  199.     even
  200.  
  201. * Tiny depack (C) Axe of Superior
  202.  
  203. ; the de-packing code !
  204. tiny:    movem.l    d1-d6/a2-a5,-(sp)
  205.     bsr    t_getpal        ; read resolution and palette
  206.     move.l    a4,d5
  207.     move.l    a1,d6
  208.     addi.l    #$7d00,d6
  209.     move.l    a1,d4
  210.     addi.l    #$a0,d4
  211.     bra.s    t17a0a
  212. t179be:    moveq    #0,d0
  213.     move.b    (a5)+,d0
  214.     beq.s    t179ce
  215.     cmpi.b    #1,d0
  216.     beq.s    t179d6
  217.     ext.w    d0
  218.     bra.s    t179de
  219. t179ce:    move.b    (a5)+,d0
  220.     lsl.w    #8,d0
  221.     move.b    (a5)+,d0
  222.     bra.s    t179de
  223. t179d6:    move.b    (a5)+,d0
  224.     lsl.w    #8,d0
  225.     move.b    (a5)+,d0
  226.     neg.w    d0
  227. t179de:    tst.w    d0
  228.     bmi.s    t179ea
  229.     move.b    (a4)+,d3
  230.     lsl.w    #8,d3
  231.     move.b    (a4)+,d3
  232.     bra.s    t17a2e
  233. t179ea:    neg.w    d0
  234.     bra.s    t17a06
  235. t179ee:    move.b    (a4)+,(a1)+
  236.     move.b    (a4)+,(a1)+
  237.     lea    $9e(a1),a1
  238.     cmpa.l    d6,a1
  239.     blt.s    t17a06
  240.     lea    $ffff8308(a1),a1
  241.     cmp.l    d4,a1
  242.     blt.s    t17a06
  243.     lea    $ffffff62(a1),a1
  244. t17a06:    dbra    d0,t179ee
  245. t17a0a:    cmp.l    d5,a5
  246.     blt.s    t179be
  247.     moveq    #1,d0
  248. t_end:    movem.l    (sp)+,d1-d6/a2-a5
  249.     rts
  250. t17a18:    move.w    d3,(a1)+
  251.     lea    $9e(a1),a1
  252.     cmp.l    d6,a1
  253.     blt.s    t17a2e
  254.     lea    $ffff8308(a1),a1
  255.     cmp.l    d4,a1
  256.     blt.s    t17a2e
  257.     lea    $ffffff62(a1),a1
  258. t17a2e:    dbra    d0,t17a18
  259.     cmpa.l    d5,a5
  260.     blt.s    t179be
  261.     moveq    #1,d0
  262.     movem.l    (sp)+,d1-d6/a2-a5
  263.     rts
  264.  
  265. ; find out resolution and palette
  266. t_getpal: cmpi.b    #2,(a0)+        ; Color mode?
  267.     ble.s    t_color
  268.     addq.l    #4,a0
  269. t_color:    moveq    #31,d0        ; install palette
  270.     lea    tinpal(pc),a2
  271. t_copypal:move.b    (a0)+,(a2)+
  272.     dbra    d0,t_copypal
  273.     move.b    (a0)+,d1
  274.     lsl.w    #8,d1
  275.     move.b    (a0)+,d1
  276.     addq.l    #2,a0
  277.     movea.l    a0,a5        ; beginning of Data
  278.     ext.l    d1
  279.     adda.l    d1,a0
  280.     movea.l    a0,a4        ; end of Data
  281.     moveq    #1,d0
  282.     rts
  283.  
  284.  
  285.     even
  286.  
  287. ;*********************************************
  288. ; Unpacking routine of PACK-ICE
  289. ; a0 = AdTRESs of packed data
  290. ; "bsr" or "jsr" to ice_decrunch_2 with register a0 prepared.
  291. ice_decrunch_2
  292.     link    a3,#-120
  293.     movem.L    d0-a6,-(sp)
  294.     lea    120(a0),a4
  295.     move.L    a4,a6
  296.     bsr    .getinfo
  297.     cmpi.L    #'ICE!',d0    
  298.     bne.S    .not_packed
  299.     bsr.s    .getinfo
  300.     lea.L    -8(a0,d0.L),a5
  301.     bsr.s    .getinfo
  302.     move.L    d0,(sp)
  303.     adda.L    d0,a6
  304.     move.L    a6,a1
  305.     moveq    #119,d0
  306. .save    move.B    -(a1),-(a3)
  307.     dbf    d0,.save
  308.     move.L    a6,a3
  309.     move.B    -(a5),d7
  310.     bsr.s    .normal_bytes
  311.     move.L    a3,a5
  312.     bsr    .get_1_bit
  313.     bcc.s    .no_picture
  314.     move.W    #$0f9f,d7
  315.     bsr    .get_1_bit
  316.     bcc.s    .ice_00
  317.     moveq    #15,d0
  318.     bsr    .get_d0_bits
  319.     move.W    d1,d7
  320. .ice_00    moveq    #3,d6
  321. .ice_01    move.W    -(a3),d4
  322.     moveq    #3,d5
  323. .ice_02    add.W    d4,d4
  324.     addx.W    d0,d0
  325.     add.W    d4,d4
  326.     addx.W    d1,d1
  327.     add.W    d4,d4
  328.     addx.W    d2,d2
  329.     add.W    d4,d4
  330.     addx.W    d3,d3
  331.     dbra    d5,.ice_02
  332.     dbra    d6,.ice_01
  333.     movem.W    d0-d3,(a3)
  334.     dbra    d7,.ice_00
  335. .no_picture
  336.     movem.L    (sp),d0-a3
  337.  
  338. .move    move.B    (a4)+,(a0)+
  339.     subq.L    #1,d0
  340.     bne.s    .move
  341.     moveq    #119,d0
  342. .TRESt    move.B    -(a3),-(a5)
  343.     dbf    d0,.TRESt
  344. .not_packed    movem.L    (sp)+,d0-a6
  345.     unlk    a3
  346.     rts
  347. .getinfo    moveq    #3,d1
  348. .getbytes    lsl.L    #8,d0
  349.     move.B    (a0)+,d0
  350.     dbf    d1,.getbytes
  351.     rts
  352. .normal_bytes    
  353.     bsr.s    .get_1_bit
  354.     bcc.s    .test_if_end
  355.     moveq.L    #0,d1
  356.     bsr.s    .get_1_bit
  357.     bcc.s    .copy_direkt
  358.     lea.L    .direkt_tab+20(pc),a1
  359.     moveq.L    #4,d3
  360. .nextgb    move.L    -(a1),d0
  361.     bsr.s    .get_d0_bits
  362.     swap.W    d0
  363.     cmp.W    d0,d1
  364.     dbne    d3,.nextgb
  365. .no_more add.L    20(a1),d1
  366. .copy_direkt    move.B    -(a5),-(a6)
  367.     dbf    d1,.copy_direkt
  368. .test_if_end    cmpa.L    a4,a6
  369.     bgt.s    .strings
  370.     rts    
  371. .get_1_bit    add.B    d7,d7
  372.     bne.s    .Bitfound
  373.     move.B    -(a5),d7
  374.     addx.B    d7,d7
  375. .Bitfound    rts    
  376. .get_d0_bits    
  377.     moveq.L    #0,d1
  378. .hole_bit_loop    
  379.     add.B    d7,d7
  380.     bne.s    .on_d0
  381.     move.B    -(a5),d7
  382.     addx.B    d7,d7
  383. .on_d0    addx.W    d1,d1
  384.     dbf    d0,.hole_bit_loop
  385.     rts    
  386. .strings    lea.L    .Length_tab(pc),a1
  387.     moveq.L    #3,d2
  388. .get_length_bit    
  389.     bsr.s    .get_1_bit
  390.     dbcc    d2,.get_length_bit
  391. .no_length_bit    
  392.     moveq.L    #0,d4
  393.     moveq.L    #0,d1
  394.     move.B    1(a1,d2.W),d0
  395.     ext.W    d0
  396.     bmi.s    .no_über
  397. .get_über    bsr.s    .get_d0_bits
  398. .no_über    move.B    6(a1,d2.W),d4
  399.     add.W    d1,d4
  400.     beq.s    .get_offset_2
  401.     lea.L    .more_offset(pc),a1
  402.     moveq.L    #1,d2
  403. .getoffs    bsr.s    .get_1_bit
  404.     dbcc    d2,.getoffs
  405.     moveq.L    #0,d1
  406.     move.B    1(a1,d2.W),d0
  407.     ext.W    d0
  408.     bsr.s    .get_d0_bits
  409.     add.W    d2,d2
  410.     add.W    6(a1,d2.W),d1
  411.     bpl.s    .depack_bytes
  412.     sub.W    d4,d1
  413.     bra.s    .depack_bytes
  414. .get_offset_2    
  415.     moveq.L    #0,d1
  416.     moveq.L    #5,d0
  417.     moveq.L    #-1,d2
  418.     bsr.s    .get_1_bit
  419.     bcc.s    .Less_40
  420.     moveq.L    #8,d0
  421.     moveq.L    #$3f,d2
  422. .Less_40 bsr.s    .get_d0_bits
  423.     add.W    d2,d1
  424. .depack_bytes
  425.     lea.L    2(a6,d4.W),a1
  426.     adda.W    d1,a1
  427.     move.B    -(a1),-(a6)
  428. .dep_b    move.B    -(a1),-(a6)
  429.     dbf    d4,.dep_b
  430.     bra    .normal_bytes
  431. .direkt_tab    dc.L    $7fff000e,$00ff0007,$00070002,$00030001,$00030001
  432.     dc.L     270-1,    15-1,     8-1,     5-1,     2-1
  433. .Length_tab    dc.B    9,1,0,-1,-1
  434.     dc.B    8,4,2,1,0
  435. .more_offset    dc.B      11,   4,   7,  0    ; Bits lesen
  436.     dc.W    $11f,  -1, $1f    ; Standard Offset
  437. ende_ice_decrunch_2
  438.  
  439.     even 
  440.  
  441. oldssp:    ds.l    1
  442. rez:    ds.w    1
  443. tinpal:    ds.w    16
  444.  
  445.     ds.l    256    ;the actual stack
  446.  
  447. ustk    ds.l    1
  448. res             ds.w    1
  449. screen          ds.l    1
  450.  
  451. black_pal
  452.         ds.w 16
  453.  
  454.     even
  455.  
  456. * Put your Tiny packed picture
  457. * filename here.
  458. * It will be included at compile
  459. * time.
  460.  
  461. picture:
  462.  
  463.     incbin    a:\piccy.tny
  464.  
  465. * Stos program here (* Data * packed remember)
  466.  
  467.     even
  468.  
  469. stos    incbin    a:\stosprog.prg
  470.