home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / ST_USER / 1990 / USERNV90.MSA / LISTINGS_SCROLLER.S < prev    next >
Text File  |  1990-05-24  |  8KB  |  357 lines

  1. ** NEW AND IMPROVED SCROLLY INTRO FOR ST USER
  2. ** WITH ADDED ZIP, POW AND PEZAZ.
  3. ** by Bryan Kennerley.    28/4/90
  4.  
  5.     bra progbit
  6.  
  7. ***********************************************
  8. screenbases    dc.l 0,0,0
  9. currlogno    dc.w 0
  10. currphysno    dc.w 0
  11. currlogbase    dc.l 0
  12. currphysbase    dc.l 0
  13.  
  14.     dc.b "Coded by Bryan Kennerley, 21 Graham Drive, "
  15.     dc.b "Rhyl, Clwyd. LL18 3RS.",0
  16.     even
  17. pathname
  18.     dc.b "A:\AUTO\TITLE.PC1",0
  19.     even
  20.  
  21. filehandle    dc.w 0
  22. vfine        dc.w 0            curr line no.
  23.  
  24. drawscrollflag    dc.w 0            1 if redraw needed
  25. screenswitchedflag
  26.         dc.w 0
  27.  
  28. exitflag    dc.w 0
  29. scrollmode    dc.w 0            0=slow up, 1=stop, 2=fast up
  30.  
  31. waitcount    dc.w -1            delay counter for middle pause
  32.     even
  33. ***********************************************
  34. ** PROGRAM INITIALIZATION
  35.  
  36. progbit    bsr gosuper
  37.     move.b #3,$FFFFFC04.w        disable midi (master reset)
  38.     bsr mouseoff            disable mouse
  39.  
  40.     bsr savesysscreen        save system display
  41.  
  42.     bsr gen3screens            get 3 screens & wipe 'em
  43.     move.l screenbases,currphysbase
  44.     move #0,currphysno
  45.     move.l screenbases+4,currlogbase
  46.     move #1,currlogno
  47.  
  48.     bsr setlowrez            set up low rez display
  49.  
  50. *******************************************
  51. ** THIS LOADS A COMPRESSED DEGAS PICTURE
  52.  
  53.     move #0,-(sp)            open file
  54.     move.l #pathname,-(sp)
  55.     move #$3D,-(sp)
  56.     trap #1
  57.     add.l #8,sp
  58.  
  59.     move D0,filehandle
  60.     tst.l D0            exit right now if file not found
  61.     bmi exitprog2
  62.  
  63. ********
  64.     move.l #picbuff,-(sp)        load base
  65.     move.l #32034,-(sp)        length
  66.     move D0,-(sp)            file handle
  67.     move #$3F,-(sp)
  68.     trap #1                load the file
  69.     add.l #12,sp
  70.  
  71.     tst.l D0            exit if something's dicky
  72.     bmi exitprog2
  73.  
  74.     move filehandle,-(sp)        close file
  75.     move #$3E,-(sp)
  76.     trap #1
  77.     add.l #4,sp
  78.  
  79. *******************************************
  80.     movem.l $FFFF8240.w,D0-D7    save system colors
  81.     movem.l D0-D7,syspal
  82.     movem.l picbuff+2,D0-D7        set new palette
  83.     movem.l D0-D7,$FFFF8240.w
  84.  
  85.     lea picbuff+34,A0        compressed data base
  86.     lea backbuff,A1            temp 32000 byte buffer
  87.     bsr decomppc1            decompress pic
  88.  
  89. ******
  90.     lea backbuff,A0            clear start/end of backdrop
  91.     jsr clearscreen
  92.     lea backbuff+64000,A0
  93.     jsr clearscreen
  94.  
  95.     lea picbuff+34,A0        draw pic backwards
  96.     lea backbuff+64000,A1        to middle of backdrop
  97.     move #199,D7            200 lines
  98. insl1    movem.l (A0)+,D0-D6/A2-A4
  99.     movem.l D0-D6/A2-A4,-(A1)
  100.     movem.l (A0)+,D0-D6/A2-A4
  101.     movem.l D0-D6/A2-A4,-(A1)
  102.     movem.l (A0)+,D0-D6/A2-A4
  103.     movem.l D0-D6/A2-A4,-(A1)
  104.     movem.l (A0)+,D0-D6/A2-A4
  105.     movem.l D0-D6/A2-A4,-(A1)
  106.     dbra D7,insl1
  107.  
  108. ***********************************************
  109. ** START IT RUNNING
  110.  
  111.     move #0,exitflag
  112.     move #400,vfine            point to last screen
  113.     move #1,drawscrollflag        draw screen
  114.     move #0,screenswitchedflag
  115.     move #0,scrollmode        up slowly first
  116.     move.l #scrollvb,$4EA.w        enable vertical blank routine
  117.  
  118.     bsr mainloop
  119.  
  120.     move.l #0,$4EA.w        disable vertical blank routine
  121.  
  122. ***********************************************
  123. exitprog
  124.     movem.l syspal,D0-D7        reset sys palette
  125.     movem.l D0-D7,$FFFF8240.w
  126.  
  127. exitprog2
  128.     bsr restoresysscreen
  129.  
  130.     bsr mouseon
  131.     move.b #$95,$FFFFFC04.w        enable midi again
  132.     bsr gouser
  133.  
  134.     clr -(sp)            exit program
  135.     trap #1
  136.  
  137. ***********************************************
  138. mainloop
  139.     bsr dscreen            draw the screen if necessary
  140.     bsr movescreen            do any screen movement
  141.     bsr testkeys            check for key pressed
  142.  
  143.     tst exitflag            test for exit
  144.     beq mainloop            and loop if not
  145.     rts
  146.  
  147. ***********************************************
  148. * Remove these 3 semi-colons to see just how much
  149. * processor time is used. The white section of the
  150. * screen shows just how much is left. You may have
  151. * to adjust your screen 'cos there ain't much of it!
  152.  
  153. dscreen    tst drawscrollflag        no update if no movement
  154.     beq xdds18
  155.  
  156.     move #0,drawscrollflag
  157. ;    move $FFFF8240.w,-(sp)
  158. ;    move #$700,$FFFF8240.w
  159.     bsr drawscroll
  160. ;    move (sp)+,$FFFF8240.w
  161.  
  162. wtl1    tst screenswitchedflag        only switch once per frame
  163.     bne wtl1
  164.  
  165.     move.l currlogbase,D0        switch screenbases
  166.     move.l D0,currphysbase
  167.     lsr #8,D0
  168.     move.b D0,$FFFF8203.w        video base low
  169.     swap D0
  170.     move.b D0,$FFFF8201.w        video base high
  171.     move #1,screenswitchedflag    
  172.  
  173.     move currlogno,D0        get next logical screen no.
  174.     addq #1,D0
  175.     cmp #3,D0
  176.     bne jki1
  177.     moveq #0,D0
  178. jki1    cmp currphysno,D0        don't overwrite current screen
  179.     beq jki1
  180.  
  181.     move D0,currlogno        get logical screen pointer
  182.     lsl #2,D0
  183.     lea screenbases,A0
  184.     move.l 0(A0,D0.w),currlogbase
  185. xdds18    rts
  186.  
  187. ***********************************************
  188. movescreen
  189.     cmp #2,scrollmode
  190.     beq moveend
  191.     cmp #1,scrollmode
  192.     beq midpause
  193.  
  194. ****
  195. movestart
  196.     move #1,drawscrollflag        first stage, slowly up
  197.     move vfine,D0
  198.     subq #1,D0
  199.     cmp #200,D0            stop when middle reached
  200.     bne xms1
  201.     move #1,scrollmode        set for middle wait
  202.     move #175,waitcount        of 3.5 secs
  203. xms1    move D0,vfine
  204.     rts
  205.  
  206. ****
  207. midpause
  208.     rts                do nothing
  209.  
  210. ****
  211. moveend    move #1,drawscrollflag        end stage, fast up
  212.     move vfine,D0
  213.     subq #2,D0
  214.     bcs xme1
  215.     move D0,vfine
  216.     rts
  217.  
  218. xme1    move #1,exitflag        exit when top reached
  219.     rts
  220.  
  221. ***********************************************
  222. testkeys
  223.     bsr testskey            test for key pressed
  224.     tst.l D0            negative if key pressed
  225.     bmi gkey
  226. xtk1    rts
  227.  
  228. *********
  229. gkey    bsr getskey            get keycode
  230.     bclr #23,D0            ignore if key off bit set
  231.     bne xtk1
  232.  
  233.     swap D0
  234.     cmp.b #1,D0            ESC exits direct
  235.     beq dexprog
  236.  
  237.     cmp.b #$39,D0            space exits normally
  238.     bne xtk1
  239.     move #2,scrollmode
  240.     rts
  241.  
  242. dexprog    move #1,exitflag
  243.     rts
  244.  
  245. ***********************************************
  246. scrollvb
  247.     move currphysno,D0        signal next screen displayed
  248.     addq #1,D0
  249.     cmp #3,D0
  250.     bne jki3
  251.     moveq #0,D0
  252. jki3    move D0,currphysno
  253.     move #0,screenswitchedflag
  254.  
  255.     cmp #-1,waitcount        no count
  256.     beq xsvb
  257.     subq #1,waitcount        decrease counter
  258.     bcc xsvb
  259.     move #2,scrollmode        exit if timer expired
  260.  
  261. xsvb    rts
  262.  
  263. ***********************************************
  264. drawscroll
  265.     move.l currlogbase,A1        point to end of logical screen
  266.     add.l #32000,A1
  267.     lea backbuff,A0            point to source data
  268.     move vfine,D0
  269.     mulu #160,D0
  270.     add.l D0,A0
  271.  
  272.     moveq #24,D7
  273.  
  274. cl1    movem.l (A0)+,D2-D6/A2-A6    25*8 lines
  275.     movem.l D2-D6/A2-A6,-(A1)
  276.     movem.l (A0)+,D2-D6/A2-A6
  277.     movem.l D2-D6/A2-A6,-(A1)
  278.     movem.l (A0)+,D2-D6/A2-A6
  279.     movem.l D2-D6/A2-A6,-(A1)
  280.     movem.l (A0)+,D2-D6/A2-A6
  281.     movem.l D2-D6/A2-A6,-(A1)
  282.  
  283.     movem.l (A0)+,D2-D6/A2-A6
  284.     movem.l D2-D6/A2-A6,-(A1)
  285.     movem.l (A0)+,D2-D6/A2-A6
  286.     movem.l D2-D6/A2-A6,-(A1)
  287.     movem.l (A0)+,D2-D6/A2-A6
  288.     movem.l D2-D6/A2-A6,-(A1)
  289.     movem.l (A0)+,D2-D6/A2-A6
  290.     movem.l D2-D6/A2-A6,-(A1)
  291.  
  292.     movem.l (A0)+,D2-D6/A2-A6
  293.     movem.l D2-D6/A2-A6,-(A1)
  294.     movem.l (A0)+,D2-D6/A2-A6
  295.     movem.l D2-D6/A2-A6,-(A1)
  296.     movem.l (A0)+,D2-D6/A2-A6
  297.     movem.l D2-D6/A2-A6,-(A1)
  298.     movem.l (A0)+,D2-D6/A2-A6
  299.     movem.l D2-D6/A2-A6,-(A1)
  300.  
  301.     movem.l (A0)+,D2-D6/A2-A6
  302.     movem.l D2-D6/A2-A6,-(A1)
  303.     movem.l (A0)+,D2-D6/A2-A6
  304.     movem.l D2-D6/A2-A6,-(A1)
  305.     movem.l (A0)+,D2-D6/A2-A6
  306.     movem.l D2-D6/A2-A6,-(A1)
  307.     movem.l (A0)+,D2-D6/A2-A6
  308.     movem.l D2-D6/A2-A6,-(A1)
  309.  
  310.     movem.l (A0)+,D2-D6/A2-A6
  311.     movem.l D2-D6/A2-A6,-(A1)
  312.     movem.l (A0)+,D2-D6/A2-A6
  313.     movem.l D2-D6/A2-A6,-(A1)
  314.     movem.l (A0)+,D2-D6/A2-A6
  315.     movem.l D2-D6/A2-A6,-(A1)
  316.     movem.l (A0)+,D2-D6/A2-A6
  317.     movem.l D2-D6/A2-A6,-(A1)
  318.  
  319.     movem.l (A0)+,D2-D6/A2-A6
  320.     movem.l D2-D6/A2-A6,-(A1)
  321.     movem.l (A0)+,D2-D6/A2-A6
  322.     movem.l D2-D6/A2-A6,-(A1)
  323.     movem.l (A0)+,D2-D6/A2-A6
  324.     movem.l D2-D6/A2-A6,-(A1)
  325.     movem.l (A0)+,D2-D6/A2-A6
  326.     movem.l D2-D6/A2-A6,-(A1)
  327.  
  328.     movem.l (A0)+,D2-D6/A2-A6
  329.     movem.l D2-D6/A2-A6,-(A1)
  330.     movem.l (A0)+,D2-D6/A2-A6
  331.     movem.l D2-D6/A2-A6,-(A1)
  332.     movem.l (A0)+,D2-D6/A2-A6
  333.     movem.l D2-D6/A2-A6,-(A1)
  334.     movem.l (A0)+,D2-D6/A2-A6
  335.     movem.l D2-D6/A2-A6,-(A1)
  336.  
  337.     movem.l (A0)+,D2-D6/A2-A6
  338.     movem.l D2-D6/A2-A6,-(A1)
  339.     movem.l (A0)+,D2-D6/A2-A6
  340.     movem.l D2-D6/A2-A6,-(A1)
  341.     movem.l (A0)+,D2-D6/A2-A6
  342.     movem.l D2-D6/A2-A6,-(A1)
  343.     movem.l (A0)+,D2-D6/A2-A6
  344.     movem.l D2-D6/A2-A6,-(A1)
  345.  
  346.     dbra D7,cl1
  347.     rts
  348.  
  349. ***********************************************
  350.     include STUFF.S
  351.  
  352. ***********************************************
  353. picbuff                    ;buffer for screen loading
  354. backbuff    =    picbuff+32034    ;backdrop definition
  355. thing        =    backbuff+96000    ;end of program
  356.  
  357.