home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / LEDGERS / LEDG_07B.MSA / SOURCE / MR_MUSIC.V2 / PLAYXRT.S < prev    next >
Text File  |  1985-11-20  |  2KB  |  87 lines

  1. ;
  2. ; Example player for version 2 of Mr Music (40% at 11Khz).
  3. ;
  4. ; Programmed by The Phantom of Electronic Images.
  5. ;
  6. ; Mr Music is programmed by The Phantom and Griff of Electronic Images.
  7. ;
  8. ; Please note that Mr Music uses register D7 and USP so therefore you must
  9. ; be in supervisor mode when playing the music.
  10. ;
  11.  
  12.     clr.l    -(sp)            ; Set supervisor mode.
  13.     move.w    #$20,-(sp)
  14.     trap    #1
  15.     addq.w    #6,sp
  16.     move.l    d0,oldsp        ; Store old stack pointer.
  17.  
  18.     move.w    #$2700,sr        ; No interrupts.
  19.     lea    oldmfp(pc),a0        ; Start storing MFP variables.
  20.     move.b    $fffffa07.w,(a0)+
  21.     move.b    $fffffa09.w,(a0)+
  22.     move.b    $fffffa13.w,(a0)+
  23.     move.b    $fffffa15.w,(a0)+
  24.     move.l    $70.w,(a0)+    
  25.     move.b  #0,$fffffa07.w        ; Stop all interrupts.
  26.     move.b    #0,$fffffa09.w    
  27.     move.b  #0,$fffffa13.w
  28.     move.b    #0,$fffffa15.w
  29.     move.l    #vbl,$70.w        ; Install our VBL.
  30.  
  31.     move.l    #tune,rotfile+24    ; Give Mr music the tune address.
  32.     move.l    #vceset,rotfile+28     ; Give it voice set address.
  33.     move.l    #notetab,rotfile+32    ; And spare 32768 bytes for tables.
  34.     bsr    rotfile            ; Now initialise & start music.
  35.  
  36.     move.w    #$2300,sr        ; Enable interrupts
  37.  
  38. key:    cmpi.b    #57,$fffffc02.w        ; Wait for space bar to be pressed.
  39.     bne.s    key
  40.  
  41. out:    move.w    #$2700,sr        ; Stop interrupts.
  42.     bsr    rotfile+8        ; Stop Mr Music & de-initialise.
  43.     lea    oldmfp(pc),a0        ; Now start restoring MFP.
  44.     move.b    (a0)+,$fffffa07.w 
  45.     move.b    (a0)+,$fffffa09.w
  46.     move.b    (a0)+,$fffffa13.w
  47.     move.b    (a0)+,$fffffa15.w
  48.     move.l    (a0)+,$70.w
  49.  
  50. flush:    btst.b    #0,$fffffc00.w        ; Flush out keyboard buffer.
  51.     beq.s    fl_done
  52.     move.b    $fffffc02.w,d0
  53.     bra.s    flush
  54. fl_done:
  55.  
  56.     move.w    #$2300,sr        ; Enable interrupts.
  57.  
  58.     move.l    oldsp(pc),-(sp)        ; Restore old stack pointer & mode.
  59.     move.w    #$20,-(sp)
  60.     trap    #1
  61.     addq.w    #6,sp
  62.  
  63.     clr.w    -(sp)            ; End program.
  64.     trap    #1
  65.  
  66.  
  67. ;
  68. ; Our VBL.  Please note that the music driver should roughly be called at
  69. ; the same point every frame.  It can tolerate differences when it was
  70. ; last called to about +-3% or so (to a 50th of a second).  This isn't
  71. ; important, but I thought you ought to know just in case!
  72. ;
  73. vbl:    bsr    rotfile+12        ; Call Mr Music.
  74.     rte
  75.  
  76. oldsp:    ds.l    1
  77. oldmfp:    ds.l    5
  78.  
  79. rotfile:
  80.     incbin    mr_music.xrt
  81.  
  82. tune:    incbin thursday.sng
  83. vceset:    incbin thursday.eit
  84.  
  85. ; 32768 spare bytes for note tables from here.
  86. notetab:
  87.