home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / programming / assembler / thesource / volume1 / source / scrollers / timesrc.lha / Time.s < prev   
Encoding:
Text File  |  1992-12-24  |  15.1 KB  |  531 lines

  1. ***********************************************************
  2. * 1991 Epsilon
  3. * Writen by the Dancing Fool.  Use it, abuse it, but don't
  4. * release it and say you wrote it! :^)
  5. * This isn't the world's best sine scroll, but it works
  6. * and it'll give you an idea how to write your own.
  7. *
  8. * Here's basically how a sine scroll works:
  9. *
  10. * You set up an off screen area, a scroll_pad, where you will scroll your
  11. * text.  Every frame you point to the bottom right hand corner of the pad
  12. * and blit it to itself in decending mode with a shift value equal to however
  13. * fast you want to scroll it.  This is a plain scroller and is done by my
  14. * 'Scroller' routine.  If you do this on screen you will see an old C64
  15. * demo! :^)
  16. *
  17. * Now comes the tricky part.  Every frame you have to take each group of
  18. * pixels, depending on how big your splits are (mine are two pixels), and
  19. * copy them to the screen, each time at a different horizontal position.
  20. * You of course know that the blitter will only handle words, so how do you
  21. * do this?  Easy.  You just set up a mask with the correct number of bits
  22. * set (for two pixel splits I use 3) for your splits.  You blit each word
  23. * of your scroll pad a set number of times (for 2 pixel splits, you do it
  24. * 8 times), each time rotating your mask and getting a new horizontal position.
  25. * You repeat this for every word and wa-la!  You have a sine-scroller!
  26. *
  27. * Enjoy!
  28. ***********************************************************
  29.  
  30. WaitBlit    MACRO
  31.         tst.b    2(a5)        ; test it once and ignore
  32. .\@:        btst.b    #6,2(a5)    ; test blit busy bit in DMACON
  33.         bne.b    .\@        ; not done yet...
  34.         ENDM
  35.         
  36. ***********************************************************
  37.  
  38. FROM_RIGHT    EQU    1            ; try this as a 0
  39.  
  40. NUM_STARS    EQU    13            ; number of stars at each speed
  41. STAR_START    EQU    $2c            ; raster for stars to start at
  42. SKIP        EQU    35*40            ; number of bytes to skip in
  43.                         ;   bpl to get desired raster
  44.                         ;   position.
  45.  
  46. ***********************************************************
  47.  
  48.         bsr.w    TakeSystem
  49. MouseWait:    btst.b    #6,$bfe001        ; wait for left mouse button
  50.         bne.s    MouseWait
  51.  
  52.         bsr.w    RestoreSystem
  53.         rts
  54.  
  55. ***********************************************************    
  56.  
  57. MyLevel3:
  58.         move.l    ActiveBmap,d0
  59.         move.l    VisualBmap,a6        ; load for later...
  60.         move.l    a6,ActiveBmap
  61.         move.l    d0,VisualBmap
  62.  
  63.         lea    bmapptrs+2,a0        ; install new bit map
  64.         move.w    d0,4(a0)        ;   in my copper list
  65.         swap    d0
  66.         move.w    d0,(a0)
  67.  
  68.         adda.l    #SKIP,a6        ; see above (in with EQU's)
  69.  
  70.         bsr.b    Put_Scroll        ; write text to screen
  71.         bsr.w    Scroller        ; move text
  72.         bsr.w    Up_Date_Stars        ; move star field
  73.  
  74.         addq.l    #2,sin_ptr        ; update sine pointer for
  75.         move.l    sin_ptr,a3        ;   next time.
  76.         tst.w    (a3)            ; end of list?
  77.         bpl.b    ret_ml31        ; no
  78.         move.l    #sin_table,sin_ptr    ; reset
  79.  
  80. ret_ml31:    move.w    #$20,$dff09c    ; set bit in interrupt request reg.
  81.         rte
  82.  
  83. ***********************************************************    
  84.  
  85. Put_Scroll:    WaitBlit
  86.         
  87.     ; This nutty routine is the fastest way to clear a chunk of memory!
  88.         move.w    #-1,$44(a5)    ; this is for later...
  89.         move.l    a6,$54(a5)    ; a6 is pre loaded with addr. of bpl
  90.         move.l    #0,$66(a5)    ; no modulo
  91.         move.l    #$01000000,$40(a5) ; set only the dest. bit in bltcon
  92.          move.w    #(64*65)+40,$58(a5); size to clear
  93.  
  94.  IFNE    FROM_RIGHT
  95.         adda.l    #38,a6            ; right edge of bpl
  96.         lea    scroll_pad+38,a2    ; edge of scroll text
  97.         moveq    #$0003,d4        ; initial blt. mask
  98.  ELSE
  99.         lea    scroll_pad,a2        ; edge of scroll text
  100.         move.w    #$3000,d4        ; initial blt. mask
  101.  ENDIF
  102.  
  103.         move.l    sin_ptr,a3        ; pointer to sine wave table
  104.  
  105.         moveq    #19,d6            ; (width of bpl in words) - 1
  106.  
  107.     ; pre-write modulos and minterms to save time in the loop
  108.         WaitBlit
  109.         move.w    #$0027,$62(a5)        ; modulo
  110.         move.l    #$00280027,$64(a5)    ; modulo
  111.         move.w    #$0dfc,$40(a5)        ; A + B = D
  112.  
  113. .loop:        tst.w    (a3)            ; end of sine table?
  114.         bpl.b    .ret_value        ; no
  115.         lea    sin_table,a3        ; reset to start
  116. .ret_value:    move.w    (a3)+,d1        ; get sine value
  117.  
  118.         lea    (a6,d1.w),a0        ; find the correct row
  119.         move.l    a0,a4
  120.         
  121.         WaitBlit
  122.         movem.l    a0/a2/a4,$4c(a5)    ; dest, src, dest
  123.         move.w    d4,$46(a5)        ; mask
  124.          move.w    #(64*12)+1,$58(a5)    ; bltsize
  125.  
  126.  IFNE    FROM_RIGHT
  127.         rol.w    #2,d4            ; get new blit mask
  128.  ELSE
  129.         ror.w    #2,d4            ; get new blit mask
  130.  ENDIF
  131.         bcc.b    .loop            ; if no bits were rotated out,
  132.                         ;   then we're on the same char
  133.  
  134.  IFNE    FROM_RIGHT
  135.         subq.w    #2,a6            ; get next spot on screen
  136.         subq.w    #2,a2            ; get next spot in scroll pad
  137.  ELSE
  138.         addq.w    #2,a6            ; get next spot on screen
  139.         addq.w    #2,a2            ; get next spot in scroll pad
  140.  ENDIF
  141.  
  142.         dbf    d6,.loop        ; loop
  143.         rts
  144.  
  145. ************************************************************
  146.  
  147. Scroller:    tst.l    stop            ; is stop value 0?
  148.         beq.b    scrl            ; yes
  149.         subq.l    #1,stop            ; dec. by one
  150.         rts                ; return to caller
  151.  
  152. scrl:        cmpi.w    #8,scrolls        ; is it time for another char?
  153.         blt.w    move_it            ; no
  154.         clr.w    scrolls            ; set to 0
  155.  
  156.         move.l    ScrollTextPtr,a3    ; get pointer to next chr. in text
  157.         tst.b    (a3)            ; is it end of text?
  158.         bpl.b    nextchar        ; no
  159.         lea    ScrollText,a3        ; reset to start
  160.  
  161. nextchar:    moveq    #0,d0            ; clear upper 3 bytes
  162.         move.b    (a3)+,d0        ; get char
  163.         move.l    a3,ScrollTextPtr    ; save new pos. in text
  164.     
  165.         cmpi.b    #'a',d0            ; is it speed change?
  166.         bne.s    b            ; no
  167.         move.l    #$10000000,scroll_speed ; new speed
  168.         move.w    #1,scroll_add        ;  "    "
  169.         bra.s    nextchar        ; get a REAL char!
  170.  
  171. b:        cmpi.b    #'b',d0            ; same as above
  172.         bne.s    c
  173.         move.l    #$20000000,scroll_speed
  174.         move.w    #2,scroll_add
  175.         bra.s    nextchar
  176.  
  177. c:        cmpi.b    #'c',d0            ; same as above
  178.         bne.s    d
  179.         move.l    #$40000000,scroll_speed
  180.         move.w    #4,scroll_add
  181.         bra.s    nextchar
  182.  
  183. d:        cmpi.b    #'s',d0            ; is it the stop char?
  184.         bne.s    do_char            ; no
  185.         add.l    #150,stop        ; add to wait value
  186.         bra.s    nextchar        ; get a real char!
  187.  
  188. do_char:    bsr.b    PutChar            ; stamp char. down
  189.  
  190. move_it:    lea    scroll_pad+(11*42),a0    ; dest.
  191.         move.l    scroll_speed,d2        ; shift value
  192.         move.w    scroll_add,d4        ; 
  193.         or.l    #$09f00002,d2        ; bltcon + shift value
  194.  
  195.         moveq    #0,d0            ; modulo
  196.         moveq    #-1,d3            ; mask
  197.         move.l    a0,a1
  198.  
  199.         WaitBlit
  200.  
  201.         movem.l    d2/d3,$40(a5)
  202.         movem.l    a0/a1,$50(a5)
  203.         move.l    d0,$64(a5)
  204.          move.w    #(64*12)+20,$58(a5)    
  205.      
  206.         add.w    d4,scrolls
  207.         rts
  208.         
  209. ***********************************************************    
  210. *d0:character
  211.  
  212. PutChar:    lea    scroll_pad+40,a0 ; dest.
  213.         lea    Font,a1        ; pointer to font gfx.
  214.  
  215.         moveq    #40,d1
  216.  
  217.         subi.b    #32,d0        ; 0 is now for ' '
  218.         cmp.b    d1,d0        ; the font has 40 chars. in the first
  219.         blt.b    BelowG        ;   line.
  220.         add.w    #400,a1        ; add to get to next line of font
  221. BelowG:        add.l    d0,a1        ; addr. in font gfx of desired char.
  222.     
  223.         rept    10
  224.         move.b    (a1),(a0)
  225.         add.w    d1,a1
  226.         add.w    #$2a,a0
  227.         endr
  228.  
  229.         move.b    (a1),(a0)
  230.         rts
  231.  
  232. ***********************************************************    
  233.  
  234. Up_Date_Stars:
  235.         move.l    #NUM_STARS,d0    ; how many stars?
  236.         lea    stars1+1,a1    ; addr. of first star's x pos.
  237.  
  238. stars_top:    addq.b    #5,(a1)        ; move the stars to the left at
  239.         addq.w    #8,a1        ;   four different speeds
  240.         addq.b    #2,(a1)
  241.         addq.w    #8,a1
  242.         addq.b    #3,(a1)
  243.         addq.w    #8,a1
  244.         addq.b    #5,(a1)
  245.         addq.w    #8,a1
  246.         addq.b    #1,(a1)
  247.         addq.w    #8,a1
  248.         dbra    d0,stars_top    ; loop
  249.         rts
  250.  
  251. ***********************************************************************    
  252.  
  253. init_stars:
  254.         move.l    #NUM_STARS,d0
  255.         move.b    #STAR_START,d1
  256.         lea    stars1,a0
  257. makestars:
  258.         move.b    d1,(a0)+        ; y coord
  259.         move.b    $5a(a5),d2
  260.         mulu    $6(a5),d2
  261.         eor.b    #$34,d2
  262.         move.b    d2,(a0)+        ; random x coord
  263.         addq.b    #1,d1
  264.         move.b    d1,(a0)+        ; y stop
  265.         addq.b    #2,d1
  266.         move.b    #0,(a0)+
  267.         moveq.l    #0,d2
  268.         move.l    #$00010001,(a0)+    ; star bit map
  269.         move.b    d1,(a0)+        ; y coord
  270.         move.b    $7(a5),d2
  271.         mulu    $6(a5),d2
  272.         eor.b    d0,d2
  273.         move.b    d2,(a0)+        ; random x coord
  274.         addq.b    #1,d1
  275.         move.b    d1,(a0)+        ; y stop
  276.         addq.b    #1,d1
  277.         move.b    #0,(a0)+
  278.         moveq.l    #0,d2
  279.         move.l    #$00010000,(a0)+    ; star bit map
  280.         move.b    d1,(a0)+        ; y coord
  281.         move.b    $7(a5),d2
  282.         mulu    d0,d2
  283.         eor.b    d0,d2
  284.         move.b    d2,(a0)+        ; random x coord
  285.         addq.b    #1,d1
  286.         move.b    d1,(a0)+        ; y stop
  287.         addq.b    #1,d1
  288.         move.b    #0,(a0)+
  289.         moveq.l    #0,d2
  290.         move.l    #$00000001,(a0)+        ; star bit map    
  291.         move.b    d1,(a0)+        ; y coord
  292.         move.b    $6(a5),d2
  293.         mulu    #34,d2
  294.         eor.b    d0,d2
  295.         move.b    d2,(a0)+        ; random x coord
  296.         addq.b    #1,d1
  297.         move.b    d1,(a0)+        ; y stop
  298.         addq.b    #1,d1
  299.         move.b    #0,(a0)+
  300.         moveq.l    #0,d2
  301.         move.l    #$000c0003,(a0)+    ; star bit map
  302.         move.b    d1,(a0)+        ; y coord
  303.         move.b    $6(a5),d2
  304.         mulu    #18,d2
  305.         eor.b    d0,d2
  306.         move.b    d2,(a0)+        ; random x coord
  307.         addq.b    #1,d1
  308.         move.b    d1,(a0)+        ; y stop
  309.         addq.b    #1,d1
  310.         move.b    #0,(a0)+
  311.         moveq.l    #0,d2
  312.         move.l    #$000c0000,(a0)+     ; star bit map
  313.         dbra    d0,makestars
  314.         rts
  315.         
  316. ***********************************************************    
  317.  
  318. TakeSystem:    movea.l    4.w,a6        ; ExecBase
  319.         jsr    -$84(a6)    ; Forbid() multitasking
  320.     
  321.         move.l    #$dff000,a5    ; Custom chip base
  322.         move.w    $2(a5),d0    ; Save DMACON
  323.         move.w    $1c(a5),d1    ; Save INTENA
  324.         or.w    #$8000,d0    ; OR in the SET bit for when we...
  325.         or.w    #$c000,d1    ;    rewrite these registers
  326.         move.w    d0,DMACONSave    ; Keep it
  327.         move.w    d1,INTENASave    ; Keep it
  328.  
  329.         move.w    #$7fff,$9a(a5)    ; Kill all interrupts!
  330.         move.w    #$7fff,$96(a5)    ; Kill all DMA!
  331.  
  332.         bsr.w    InstallSprites
  333.         bsr.w    init_stars
  334.         bsr.w    InstallBmap
  335.  
  336.         move.l    #Copper,$80(a5)    ; install copper
  337.  
  338.         move.l    $6c.w,Level3Save; Keep ptr to level 3 interrupt
  339.         move.l    #MyLevel3,$6c.w    ; Install my level 3 interrupt
  340.  
  341.         move.w    #$83e0,$96(a5)    ; Turn on only certain DMA channels
  342.         move.w    #$c020,$9a(a5)    ; Turn on VBLANK (lev 3) interrupt only
  343.         rts            ; Done
  344.  
  345. ***********************************************************
  346.  
  347. RestoreSystem:    move.l    #$dff000,a5    ; Custom chip base
  348.         move.w    #$7fff,$96(a5)    ; Again, kill all DMA
  349.         move.w    #$7fff,$9a(a5)    ; Kill all interrupts
  350.         move.l    Level3Save,$6c.w ; Install old level 3 interrupt
  351.  
  352.         movea.l    4.w,a6        ; ExecBase
  353.         lea    GraphicsName,a1    ; "graphics.library"
  354.         jsr    -$198(a6)    ; OldOpenLibrary()
  355.         move.l    d0,a1        ; Copy ptr to GfxBase
  356.         move.l    $26(a1),$80(a5)    ; Install old system copperlist
  357.         jsr    -$19e(a6)    ; CloseLibrary()
  358.  
  359.         move.w    DMACONSave,$96(a5) ; Activate old DMA channels
  360.         move.w    INTENASave,$9a(a5) ; Reenable old interrupts
  361.         jsr    -$8a(a6)    ; Permit() multitasking
  362.         rts            ; Done
  363.  
  364. ***********************************************************    
  365.  
  366. InstallBmap:    lea    bmapptrs+2,a0
  367.         move.l    VisualBmap,d0
  368.         move.w    d0,4(a0)
  369.         swap    d0
  370.         move.w    d0,(a0)
  371.         rts
  372.  
  373. ***********************************************************    
  374.  
  375. InstallSprites:    lea    sprptrs+2,a0
  376.         move.l    #NullSprite,d0
  377.         move.w    d0,4(a0)
  378.         move.w    d0,12(a0)
  379.         move.w    d0,20(a0)
  380.         move.w    d0,28(a0)
  381.         move.w    d0,36(a0)
  382.         move.w    d0,44(a0)
  383.         move.w    d0,60(a0)
  384.         swap    d0
  385.         move.w    d0,(a0)
  386.         move.w    d0,8(a0)
  387.         move.w    d0,16(a0)
  388.         move.w    d0,24(a0)
  389.         move.w    d0,32(a0)
  390.         move.w    d0,40(a0)
  391.         move.w    d0,56(a0)
  392.  
  393.         move.l    #stars1,d0
  394.         move.w    d0,52(a0)
  395.         swap    d0
  396.         move.w    d0,48(a0)
  397.         rts
  398.  
  399. ***********************************************************
  400.  
  401.         section fish_sticks,data
  402.  
  403. ActiveBmap:    dc.l    Bmap1
  404. VisualBmap:    dc.l    Bmap2
  405.  
  406. GraphicsName:    dc.b    'graphics.library',0
  407.         EVEN
  408.  
  409. scroll_add:    dc.w    1
  410.  
  411. ScrollTextPtr:    dc.l    ScrollText
  412. ScrollText:    dc.b    ' a HELLO IS THIS SINE SCROLL WORKING?  '
  413.         DC.B    'THIS IS A SPEED OF ONE....       '
  414.         DC.B    ' b THIS IS A SPEED OF TWO....       '
  415.         DC.B    ' c AND THIS IS A SPEED OF FOUR....       '
  416.         DC.B    ' a          HERE IS THE STOPPER          s       '
  417.         DC.B    'CONTACT EPSILON AT:     EPSILON     P.O.B. 1914 '
  418.         DC.B    '    BEAVERTON, OR  97075-1914     U.S.A.     -OR- '
  419.         DC.B    '    SEND ME E-MAIL AT:  IDR@RIGEL.CS.PDX.EDU     '
  420.         DC.B    'TEXT RESTARTS.....                 '
  421.         dc.b    $ff
  422.         even
  423.     
  424. sin_ptr:    dc.l    sin_table
  425. sin_table:    include    'sine1'
  426.         dc.w    $ffff
  427.     
  428. ***********************************************************
  429.  
  430.         section    squid,data_c
  431.  
  432. Font:        incbin    'slimfont.raw'
  433.  
  434. Copper:        dc.w    $0100,$1200,$0102,$0000,$0104,$0000,$0108,$0000
  435.         dc.w    $010a,$0000,$0180,$0000
  436.         dc.w    $01ba,$0555,$01bc,$0fff,$01be,$0888
  437.         dc.w    $008e,$2c71,$0090,$14d1,$0092,$0036,$0094,$00ce
  438. bmapptrs:    dc.w    $00e0,$0000,$00e2,$0000
  439. sprptrs:    dc.w    $0120,$0000,$0122,$0000,$0124,$0000,$0126,$0000
  440.         dc.w    $0128,$0000,$012a,$0000,$012c,$0000,$012e,$0000
  441.         dc.w    $0130,$0000,$0132,$0000,$0134,$0000,$0136,$0000
  442.         dc.w    $0138,$0000,$013a,$0000,$013c,$0000,$013e,$0000
  443. color_bars:    dc.w    $5e0f,$fffe,$5f0f,$fffe,$0182,$0011
  444.  
  445.         dc.w    $600f,$fffe,$0182,$0022,$610f,$fffe,$0182,$0033
  446.         dc.w    $620f,$fffe,$0182,$0044,$630f,$fffe,$0182,$0055
  447.         dc.w    $640f,$fffe,$0182,$0066,$650f,$fffe,$0182,$0077
  448.         dc.w    $660f,$fffe,$0182,$0088,$670f,$fffe,$0182,$0099
  449.         dc.w    $680f,$fffe,$0182,$00aa,$690f,$fffe,$0182,$00bb
  450.         dc.w    $6a0f,$fffe,$0182,$00cc,$6c0f,$fffe,$0182,$00dd
  451.         dc.w    $6d0f,$fffe,$0182,$00ee,$6e0f,$fffe,$0182,$00ff
  452.         dc.w    $6f0f,$fffe,$0182,$01ef
  453.  
  454.         dc.w    $700f,$fffe,$0182,$02df,$710f,$fffe,$0182,$03cf
  455.         dc.w    $720f,$fffe,$0182,$04bf,$730f,$fffe,$0182,$05af
  456.         dc.w    $740f,$fffe,$0182,$069f,$750f,$fffe,$0182,$078f
  457.         dc.w    $760f,$fffe,$0182,$087f,$770f,$fffe,$0182,$096f
  458.         dc.w    $780f,$fffe,$0182,$0a5f,$790f,$fffe,$0182,$0b4f
  459.         dc.w    $7a0f,$fffe,$0182,$0c3f,$7b0f,$fffe,$0182,$0d2f
  460.         dc.w    $7c0f,$fffe,$0182,$0e1f,$7d0f,$fffe,$0182,$0f0f  
  461.         dc.w    $7e0f,$fffe,$0182,$0e1e,$7f0f,$fffe,$0182,$0d2d
  462.  
  463.         dc.w    $800f,$fffe,$0182,$0c3c,$810f,$fffe,$0182,$0b4b
  464.         dc.w    $820f,$fffe,$0182,$0a5a,$830f,$fffe,$0182,$0969
  465.         dc.w    $840f,$fffe,$0182,$0878,$850f,$fffe,$0182,$0787
  466.         dc.w    $860f,$fffe,$0182,$0696,$870f,$fffe,$0182,$05a5
  467.         dc.w    $880f,$fffe,$0182,$04b4,$890f,$fffe,$0182,$03c3
  468.         dc.w    $8a0f,$fffe,$0182,$02d2,$8b0f,$fffe,$0182,$01e1
  469.         dc.w    $8c0f,$fffe,$0182,$00f0,$8d0f,$fffe,$0182,$01f0
  470.         dc.w    $8e0f,$fffe,$0182,$02f0,$8f0f,$fffe,$0182,$03f0
  471.  
  472.         dc.w    $900f,$fffe,$0182,$04f0,$910f,$fffe,$0182,$05f0
  473.         dc.w    $920f,$fffe,$0182,$06f0,$930f,$fffe,$0182,$07f0
  474.         dc.w    $940f,$fffe,$0182,$08f0,$950f,$fffe,$0182,$09f0
  475.         dc.w    $960f,$fffe,$0182,$0af0,$970f,$fffe,$0182,$0bf0
  476.         dc.w    $980f,$fffe,$0182,$0cf0,$990f,$fffe,$0182,$0df0
  477.         dc.w    $9a0f,$fffe,$0182,$0ef0,$9b0f,$fffe,$0182,$0ff0
  478.         dc.w    $9c0f,$fffe,$0182,$0ff1,$9d0f,$fffe,$0182,$0ff2
  479.         dc.w    $9e0f,$fffe,$0182,$0ff3,$9f0f,$fffe,$0182,$0ff4
  480.  
  481.         dc.w    $a00f,$fffe,$0182,$0ff5,$a10f,$fffe,$0182,$0ff6
  482.         dc.w    $a20f,$fffe,$0182,$0ff7,$a30f,$fffe,$0182,$0ff8
  483.         dc.w    $a40f,$fffe,$0182,$0ff9,$a50f,$fffe,$0182,$0ffa
  484.         dc.w    $a60f,$fffe,$0182,$0ffb,$a70f,$fffe,$0182,$0ffc
  485.         dc.w    $a80f,$fffe,$0182,$0ffd,$a90f,$fffe,$0182,$0ffe
  486.         dc.w    $aa0f,$fffe,$0182,$0fff,$ab0f,$fffe,$0182,$0fee
  487.         dc.w    $ac0f,$fffe,$0182,$0fdd,$ad0f,$fffe,$0182,$0fcc
  488.         dc.w    $ae0f,$fffe,$0182,$0fbb,$af0f,$fffe,$0182,$0faa
  489.  
  490.         dc.w    $b00f,$fffe,$0182,$0f99,$b10f,$fffe,$0182,$0f88
  491.         dc.w    $b20f,$fffe,$0182,$0f77,$b30f,$fffe,$0182,$0f66
  492.         dc.w    $b40f,$fffe,$0182,$0f55,$b50f,$fffe,$0182,$0f44
  493.         dc.w    $b60f,$fffe,$0182,$0f33,$b70f,$fffe,$0182,$0f22
  494.         dc.w    $b80f,$fffe,$0182,$0f11,$b90f,$fffe,$0182,$0f00
  495.         dc.w    $ba0f,$fffe,$0182,$0e00,$bb0f,$fffe,$0182,$0d00
  496.         dc.w    $bc0f,$fffe,$0182,$0c00,$bd0f,$fffe,$0182,$0b00
  497.         dc.w    $be0f,$fffe,$0182,$0a00,$bf0f,$fffe,$0182,$0900
  498.  
  499.         dc.w    $c00f,$fffe,$0182,$0800,$c10f,$fffe,$0182,$0700
  500.         dc.w    $c20f,$fffe,$0182,$0600,$c30f,$fffe,$0182,$0500
  501.         dc.w    $c40f,$fffe,$0182,$0400,$c50f,$fffe,$0182,$0300
  502.         dc.w    $c60f,$fffe,$0182,$0200,$c70f,$fffe,$0182,$0100
  503.         dc.w    $c80f,$fffe,$0182,$0000
  504.  
  505.         dc.w    $cc0f,$fffe
  506.         dc.w    $0108,-120    ; display up through the bpl
  507.         dc.w    $010a,-120    ;   backwards!  (flip it vertically)
  508.         dc.w    $0180,$0004,$0182,$0444
  509.         dc.l    -2
  510.  
  511. ***********************************************************
  512.  
  513.         section nein_farb,bss
  514.  
  515. scroll_speed:    ds.l    1
  516. scrolls:    ds.w    1
  517. DMACONSave:    ds.w    1
  518. INTENASave:    ds.w    1
  519. Level3Save:    ds.l    1            
  520. stop:        ds.l    1
  521.         
  522. ***********************************************************
  523.  
  524.         section farb,bss_c
  525. NullSprite:    ds.l    3    ; 2 controll words,2 data words,2 blank word
  526.         ds.l    3*42
  527. scroll_pad:    ds.b    12*42
  528. Bmap1:        ds.b    7000
  529. Bmap2:        ds.b    7000
  530. stars1:        ds.l    (NUM_STARS*15)
  531.