home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 4: Demo 1 / almathera_demo1.bin / sourcecode / xmas / xmas.s < prev    next >
Text File  |  1995-03-17  |  8KB  |  456 lines

  1.  
  2.      section merry-xmas,code_c    ; Put into chip memory
  3.      opt     c-,o+            ; No case sensitivity, Optimize on
  4.  
  5.  
  6.      lea     gfxlib,a1
  7.      moveq     #0,d0
  8.      move.l  4.w,a6
  9.      jsr     -$228(a6)         ; Open Graphics library
  10.      tst     d0
  11.      beq     error
  12.      move.l  D0,gfxbse
  13.  
  14.                     ; generate snow-fields
  15.     lea     sprite0,a0    
  16.     move.l     #$2c002d00,d0        ; first longword
  17.     moveq     #69,d1            ; 60 sprites
  18. spr0lp    swap    d0
  19.     move.b     $dff007,d2
  20.     eor.b     d2,d0
  21.     swap     d0
  22.     
  23.     mulu d3,d3    
  24.     mulu d3,d3
  25.     mulu d3,d3
  26.     mulu d3,d3
  27.  
  28.     move.l d0,(a0)+
  29.     move.l #$10000,(a0)+
  30.     add.l #$02000200,d0    
  31.     dbra d1,spr0lp    
  32.  
  33.     move.l #sprite0,d0
  34.     move.w d0,sp0l
  35.     swap d0
  36.     move.w d0,sp0h
  37.  
  38.                 
  39.     lea     sprite1,a0    
  40.     move.l     #$2d002e00,d0        ; first longword
  41.     moveq     #69,d1            ; 60 sprites
  42. spr1lp    swap    d0
  43.     move.b     $dff007,d2
  44.     eor.b     d2,d0
  45.     swap     d0
  46.     
  47.     mulu d3,d3    
  48.     mulu d3,d3
  49.     mulu d3,d3
  50.     mulu d3,d3
  51.  
  52.     move.l d0,(a0)+
  53.     move.l #$10000,(a0)+
  54.     add.l #$03000300,d0    
  55.     dbra d1,spr1lp    
  56.  
  57.     move.l #sprite1,d0
  58.     move.w d0,sp1l
  59.     swap d0
  60.     move.w d0,sp1h
  61.  
  62.     lea     sprite2,a0    
  63.     move.l     #$2c002d00,d0        ; first longword
  64.     moveq     #69,d1            ; 60 sprites
  65. spr2lp    swap    d0
  66.     move.b     $dff007,d2
  67.     eor.b     d2,d0
  68.     swap     d0
  69.     
  70.     mulu d3,d3    
  71.     mulu d3,d3
  72.     mulu d3,d3
  73.     mulu d3,d3
  74.  
  75.     move.l d0,(a0)+
  76.     move.l #$10000,(a0)+
  77.     add.l #$02000200,d0    
  78.     dbra d1,spr2lp    
  79.  
  80.     move.l #sprite2,d0
  81.     move.w d0,sp2l
  82.     swap d0
  83.     move.w d0,sp2h
  84.  
  85.                 
  86.     lea     sprite3,a0    
  87.     move.l     #$2d002e00,d0        ; first longword
  88.     moveq     #69,d1            ; 60 sprites
  89. spr3lp    swap    d0
  90.     move.b     $dff007,d2
  91.     eor.b     d2,d0
  92.     swap     d0
  93.     
  94.     mulu d3,d3    
  95.     mulu d3,d3
  96.     mulu d3,d3
  97.     mulu d3,d3
  98.  
  99.     move.l d0,(a0)+
  100.     move.l #$10000,(a0)+
  101.     add.l #$03000300,d0    
  102.     dbra d1,spr3lp    
  103.  
  104.     move.l #sprite3,d0
  105.     move.w d0,sp3l
  106.     swap d0
  107.     move.w d0,sp3h
  108.  
  109.      move.l  #logo,d0        ; Store screen address in
  110.      move.w  d0,pl0l            ; Copper list
  111.      swap    d0
  112.      move.w  d0,pl0h
  113.     swap    d0
  114.     add.l     #3920,d0
  115.     move.w     d0,pl1l
  116.     swap    d0
  117.     move.w    d0,pl1h
  118.     swap     d0
  119.     add.l     #3920,d0
  120.     move.w     d0,pl2l
  121.     swap    d0
  122.     move.w    d0,pl2h
  123.     swap     d0
  124.     add.l     #3920,d0
  125.     move.w     d0,pl3l
  126.     swap    d0
  127.     move.w    d0,pl3h
  128.     swap     d0
  129.     add.l    #3920,d0
  130.  
  131.     
  132.     lea topcols,a1
  133.     move.l d0,a0
  134.     move.w #$180,d0
  135.     moveq #15,d1
  136. toplp    move.w d0,(a1)+
  137.     move.w (a0)+,(a1)+
  138.     addq.w #2,d0
  139.     dbra d1,toplp
  140.  
  141.  
  142.      move.l  #piccy,d0        ; Store screen address in
  143.      move.w  d0,mp0l            ; Copper list
  144.      swap    d0
  145.      move.w  d0,mp0h
  146.     swap    d0
  147.     add.l     #6440,d0
  148.     move.w     d0,mp1l
  149.     swap    d0
  150.     move.w    d0,mp1h
  151.     swap     d0
  152.     add.l     #6440,d0
  153.     move.w     d0,mp2l
  154.     swap    d0
  155.     move.w    d0,mp2h
  156.     swap     d0
  157.     add.l     #6440,d0
  158.     move.w     d0,mp3l
  159.     swap    d0
  160.     move.w    d0,mp3h
  161.     swap     d0
  162.     add.l    #6440,d0
  163.     move.w     d0,mp4l
  164.     swap     d0
  165.     move.w    d0,mp4h
  166.     swap    d0
  167.     add.l     #6440,d0
  168.  
  169.     
  170.     lea botcols,a1
  171.     move.l d0,a0
  172.     move.w #$180,d0
  173.     moveq #31,d1
  174. botlp    move.w d0,(a1)+
  175.     move.w (a0)+,(a1)+
  176.     addq.w #2,d0
  177.     dbra d1,botlp
  178.  
  179.  
  180.      move.l  gfxbse,a6        ; Set up copper list
  181.      add.l    #$32,a6
  182.      move.w  #$80,$dff096
  183.      move.l  (a6),oldcpr
  184.      move.l  #newcpr,(a6)
  185.      move.w  #$8080,$dff096
  186.      move.w  #$8010,$dff09a
  187.      move.l  $6c.w,old
  188.      move.l  #new,$6c.w
  189.  
  190. WAIT:    btst    #6,$bfe001        ; Test for left mousebutton
  191.      bne.s     wait
  192.  
  193.      move.l  old,$6c.w        ; Return to workbench
  194.      move.l  gfxbse,a6        ; copper list
  195.      add.l    #$32,a6
  196.      move.w    #$0080,$dff096
  197.      move.l  oldcpr,(a6)
  198.      move.w  #$8080,$dff096
  199.     
  200.     move.l    gfxbse,a1        ; Close graphics library
  201.     move.l  $4.w,a6
  202.     jsr     -$19e(a6)
  203.  
  204. error:     clr.l  d0            ; exit routine
  205.      rts
  206.  
  207. new:     movem.l d0-d7/a0-a6,-(sp)    ; save all registers
  208.      and.w     #$10,$dff01e            ; check if it is 
  209.      beq.s     out
  210.      move.w     #$10,$dff09c
  211.  
  212.     bsr starmov
  213.  
  214.     bsr scroll
  215.  
  216. out:    movem.l (sp)+,d0-d7/a0-a6
  217.      dc.w     $4ef9            ; jsr instruction
  218. old:     dc.l     0            
  219.  
  220.  
  221. prnchr: lea     font,a0
  222.     lea     logo+40,a1            ; destination
  223.     sub.b     #32,d0            ; de-ascii
  224.     mulu     #512,d0            ; find position in font
  225.     add.l     d0,a0
  226.     moveq     #3,d1
  227. lp1    moveq     #31,d2
  228.     move.l     a1,a2
  229. lp2    move.l    (a0)+,(a2)
  230.     add.l #44,a2
  231.     dbra d2,lp2
  232.     add.l #3920,a1
  233.     dbra d1,lp1
  234.     rts
  235.  
  236. SCROLL    cmp.b #0,scrlctd
  237.     beq.s scrl2
  238.     subq.b #1,scrlctd
  239.     rts
  240. scrl2    bsr blitscr
  241.     move.b scrlptr,d0
  242.     subq.b #1,d0
  243.     beq.s zero
  244.      move.b d0,scrlptr
  245.     rts
  246. zero    move.b #8,scrlptr
  247.     move.l txtptr,a0
  248.     moveq #0,d0
  249.     move.b (a0)+,d0
  250.     cmp.b #0,d0
  251.      bne.s charok
  252.     move.l #text,txtptr
  253.     bra.s zero
  254. charok    cmp.b #254,d0
  255.     bne.s notpuse
  256.     move.b #80,scrlctd
  257.     move.l a0,txtptr
  258.     moveq #32,d0
  259.     bsr prnchr
  260.     rts
  261. notpuse move.l a0,txtptr
  262.     bsr prnchr
  263.     rts    
  264.  
  265.  
  266.  
  267. blitscr    
  268.     moveq     #3,d0
  269.     lea     logo,a0
  270.  
  271. blitlp    btst     #14,$dff002
  272.     bne.s     blitlp
  273.     move.l     a0,$dff050
  274.     move.l     a0,a1
  275.     subq.l     #2,a1
  276.     move.l     a1,$dff054
  277.     clr.l     $dff064
  278.     move.l     #-1,$dff044
  279.     move.w     #%1101100111110000,$dff040
  280.     clr.w    $dff042
  281.     move.w    #22+33*64,$dff058
  282.     add.l     #3920,a0
  283.     dbra d0,blitlp
  284. blitfin    btst     #14,$dff002
  285.     bne.s    blitfin    
  286.     rts
  287.  
  288.  
  289. starmov    bsr      move0
  290.     bsr     move1
  291.     bsr     move2
  292.     bsr     move3
  293.     rts
  294.  
  295. move0    lea sprite0+69*8,a0
  296.     moveq #68,d0
  297.     move.b 1(a0),saveval
  298. mv0lp    move.b -7(a0),1(a0)
  299.     subq.l #8,a0
  300.     dbra d0,mv0lp
  301.     move.b    saveval,d0
  302.     move.b $dff007,d1
  303.     eor.b d1,d0    
  304.     move.b d0,1(a0)
  305.     rts
  306.  
  307. move1    lea sprite1+69*8,a0
  308.     moveq #68,d0
  309.     move.b 1(a0),saveval
  310. mv1lp    move.b -7(a0),1(a0)
  311.     subq.l #8,a0
  312.     dbra d0,mv1lp
  313.     move.b    saveval,d0
  314.     move.b $dff007,d1
  315.     eor.b d1,d0    
  316.     move.b d0,1(a0)
  317.     rts
  318.  
  319.  
  320. move2    lea sprite2+69*8,a0
  321.     moveq #68,d0
  322.     move.b 1(a0),saveval
  323. mv2lp    move.b -7(a0),1(a0)
  324.     subq.l #8,a0
  325.     dbra d0,mv2lp
  326.     move.b    saveval,d0
  327.     move.b $dff007,d1
  328.     eor.b d1,d0    
  329.     move.b d0,1(a0)
  330.     rts
  331.  
  332. move3    lea sprite3+69*8,a0
  333.     moveq #68,d0
  334.     move.b 1(a0),saveval
  335. mv3lp    move.b -7(a0),1(a0)
  336.     subq.l #8,a0
  337.     dbra d0,mv3lp
  338.     move.b    saveval,d0
  339.     move.b $dff007,d1
  340.     eor.b d1,d0    
  341.     move.b d0,1(a0)
  342.     rts
  343.  
  344.  
  345. saveval    dc.b     0
  346. scrlptr    dc.b    6
  347. scrlctd    dc.b    0
  348.     even
  349. txtptr    dc.l     text
  350. text    dc.b     " IT'S KRISTMAS TIME!,",254," AND TIME FOR A FAIRLY SEASONAL AMIGA COMPUTING DEMO. "
  351.     ;     0123456789
  352.     dc.b    "  AMIGA!  ",254
  353.     dc.b    " FIRSTLY I "
  354.     DC.B     "MUST APOLOGISE TO MY FAN FOR NOT DOING A DEMO LAST MONTH, BUT THINGS GOT TOO BUSY! SORRY! "
  355.     dc.b     "     SPECIAL MESSAGES AND ADVERTISMENTS....  HAVE YOU GOT A MODEM? PHONE THE BEST BBS IN THE WHOLE "
  356.     DC.B     "WORLD, MAX!  PHONE MAX ON (0905) 52536/56610/57822/754127/754151 NOW!   ALL SPEEDS FROM 300 BAUD (SLOOOOOOW) "
  357.     DC.B     "TO MEGA-SUPER-DOOPER FAST 19.2K BAUD WITH HST AND MNP LEVEL 5 ERROR CORRECTION (LOG ON AND SAY - I SAW THIS ADVERT "
  358.     DC.B     " GET ON AND BOOGY DOWN TO THE HOTTEST BOARD THIS SIDE OF THE UKRAINE. "
  359.     dc.b     " SORRY TO MARK FOR FORGETTING YOU IN THE LAST DEMO. ERM. SORRY I'VE FORGOTTEN WHAT YOU ASKED ME TO SAY.  PERHAPS "
  360.     DC.B     "THE NEXT ONE.  ",0  
  361.     DC.B     "OH YES, THE CREDITS... CODE CODED BY THE ONE AND ONLY (EXCEPT FOR ALL THE OTHERS) ---- JOLYON RALPH ----   "
  362.     DC.B     "MOST GRAPHICS BY THE MY GOOD OLE BUDDY ---- RUSS WARK ----  WATCH OUT FOR HIS WEIRD CARTOONS IN THE MAGAZINE - SMUT - "
  363.     DC.B     0
  364.  
  365. oldcpr: dc.l    0            ; Workbench copperlist
  366. newcpr:    dc.w     $100,$4200,$102,$0,$104,0,$108,4,$10a,4
  367.      dc.w     $92,$38,$94,$d0,$8e,$2c81,$90,$2cc1,$e0
  368. pl0h:     dc.w    0,$e2
  369. pl0l:     dc.w    0,$e4
  370. pl1h:     dc.w     0,$e6
  371. pl1l:     dc.w    0,$e8
  372. pl2h:    dc.w    0,$ea
  373. pl2l:     dc.w    0,$ec
  374. pl3h:    dc.w    0,$ee    
  375. pl3l:    dc.w    0,$120
  376. sp0h:    dc.w    0,$122
  377. sp0l:    dc.w    0,$124
  378. sp1h:    dc.w    0,$126
  379. sp1l:    dc.w    0,$128
  380. sp2h:    dc.w    0,$12a
  381. sp2l:    dc.w    0,$12c
  382. sp3h:    dc.w    0,$12e
  383. sp3l:    dc.w    0
  384. topcols    ds.w    32
  385.     dc.w    $180,0,$182,0
  386.  
  387.  
  388.     dc.w $3009,$fffe,$186,$1
  389.     dc.w $3109,$fffe,$186,$2
  390.     dc.w $3209,$fffe,$186,$3
  391.     dc.w $3309,$fffe,$186,$4
  392.     dc.w $3409,$fffe,$186,$5
  393.     dc.w $3509,$fffe,$186,$6
  394.     dc.w $3609,$fffe,$186,$7
  395.     dc.w $3709,$fffe,$186,$8
  396.     dc.w $3809,$fffe,$186,$9
  397.     dc.w $3909,$fffe,$186,$a
  398.  
  399.     dc.w $4109,$fffe,$186,$1a
  400.     dc.w $4209,$fffe,$186,$3a
  401.     dc.w $4309,$fffe,$186,$4a
  402.     dc.w $4409,$fffe,$186,$5a
  403.     dc.w $4509,$fffe,$186,$6a
  404.     dc.w $4609,$fffe,$186,$7a
  405.     dc.w $4709,$fffe,$186,$8a
  406.     dc.w $4809,$fffe,$186,$9a
  407.     dc.w $4909,$fffe,$186,$aa
  408.  
  409.  
  410.     dc.w $7709,$fffe,$108,0,$10a,0,$104,$a
  411.  
  412.     dc.w $7809,$fffe,$100,$5200
  413.     dc.w $e0
  414. mp0h    dc.w 0,$e2
  415. mp0l    dc.w 0,$e4
  416. mp1h    dc.w 0,$e6
  417. mp1l     dc.w 0,$e8
  418. mp2h    dc.w 0,$ea
  419. mp2l    dc.w 0,$ec
  420. mp3h    dc.w 0,$ee
  421. mp3l    dc.w 0,$f0
  422. mp4h    dc.w 0,$f2
  423. mp4l    dc.w 0
  424. botcols    ds.w    64
  425.  
  426.  
  427.  
  428.     dc.w $f009,$fffe
  429.     dc.w    $9c,$8010
  430.       dc.w    $ffff,$fffe         ; End copper
  431.  
  432. gfxlib: dc.b     "graphics.library",0    ; library name
  433.  
  434.      even
  435.  
  436. gfxbse: dc.l     0    
  437.  
  438. dummy    dc.l 0
  439.  
  440. sprite0    ds.l 2*70
  441. sprite1    ds.l 2*70
  442. sprite2 ds.l 2*70
  443. sprite3 ds.l 2*70
  444.  
  445. logo    ds.b 15712-32
  446.     dc.w 0,$fff,$eee,$ddd,$ccc,$bbb,$aaa,$999,$888,$777
  447.     dc.w $666,$555,$444,$333,$222,$111
  448.  
  449.  
  450.      ds.b 1000
  451. font     ds.b    512
  452.     incbin sources:xmas/font2 
  453.  
  454.  
  455. piccy    incbin sources:xmas/mountains
  456.