home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaMiscModsCD3.iso / _PROGRAMME / TRACKER / FutureComposer.lha / FutureComposer / SourceCodes / PLAYER.S < prev    next >
Encoding:
Text File  |  1990-08-06  |  7.0 KB  |  380 lines

  1. *******************************************************************
  2. *
  3. * Future Composer Music Driver v1.02  Do the following to play
  4. * your tune:
  5. *
  6. * A0=SONG POS  FIX THIS LINE IN THE SOURCE AT "MUSON"! 
  7. * JSR MUSON  = prepare tune for play
  8. * JSR DRIVER = play tune (call from your Interrupt)
  9. * JSR MUSOFF = clear out all Sound Registers (Tune is over)
  10. *
  11. *******************************************************************
  12.  
  13. ***** This block is for testing only... erase when finished *****
  14. *                                                              ;*
  15. START:    JSR MUSON                                              ;*
  16. MOUSE:    MOVE.W #10000,D1                                       ;*
  17. ML:    DBF D1,ML                                              ;*
  18.     BSR DRIVER                                             ;*
  19.     BTST #6,$BFE001                                        ;*
  20.     BNE MOUSE                                              ;*
  21.     JSR MUSOFF                                             ;*
  22.     RTS                                                    ;*
  23. *                                                              ;*
  24. ***** This block is for testing only... erase when finished *****
  25.  
  26. MUSON:    LEA $80000,A0    ; A0 = LOCATION OF SONG, YOU CHANGE THIS!
  27.     ADDI.L #4,A0
  28.     MOVE.L A0,TRK0
  29.     ADDI.L #$400,A0
  30.     MOVE.L A0,BLOX
  31.     ADDI.L #$4004,A0
  32.     MOVE.L A0,DIGBLOK
  33.     ADDI.L #$3F4,A0
  34.     MOVE.L A0,DIGIDAT
  35.  
  36.     MOVE.L DIGIDAT,A0; BASE ADDRESS OF DIGIS
  37.     MOVE.L DIGBLOK,A1
  38.     MOVE.W #63,D0
  39. PRPLOOP:MOVE.L A0,(A1)
  40.     ADD.L 4(A1),A0
  41.     ADDI.L #16,A1
  42.     DBF D0,PRPLOOP
  43.  
  44.     MOVE.W #2,TEMPO
  45.     MOVE.L #$00100010,D0
  46.     MOVE.L D0,DUR0
  47.     MOVE.L D0,DUR0+4
  48.     LSR.L #4,D0
  49.     MOVE.L D0,RP0
  50.     MOVE.L D0,RP0+4
  51.     MOVE.L #$FFFFFFFF,D0
  52.     MOVE.L D0,BF0
  53.     MOVE.L D0,BF0+4
  54.     LEA CDUR0,A0
  55.     MOVE.W #36,D0
  56. CLDRVS:    CLR.W (A0)+
  57.     DBF D0,CLDRVS
  58.     RTS
  59.  
  60. MUSOFF:    MOVE.W #$000F,$DFF096
  61.     LEA $DFF0A0,A0
  62.     CLR.W $8(A0)
  63.     CLR.W $18(A0)
  64.     CLR.W $28(A0)
  65.     CLR.W $38(A0)
  66.     RTS
  67.  
  68. ********** THE ALMIGHTY INTERRUPT **********
  69.  
  70. IRQ:    MOVEM.L D0-D7/A0-A6,-(A7)
  71.     MOVE $DFF01E,D1
  72.     BTST #4,D1
  73.     BNE IREXIT
  74.     BSR DRIVER
  75. IREXIT:    MOVE #$70,$DFF09C
  76.     MOVEM.L (A7)+,D0-D7/A0-A6
  77.     RTE
  78.  
  79. ********** LET THE MUSIC PLAY... **********
  80.  
  81. DRIVER:    TST.W SONPLAY
  82.     BNE DMOFF
  83.     SUBI.W #1,TMCNT
  84.     BPL DRVEX
  85.     MOVE.W TEMPO,TMCNT
  86.     MOVEQ #3,D5
  87. DRVLP:    BSR DRIVOI
  88.     DBF D5,DRVLP
  89. DRVEX:    RTS
  90. DMOFF:    MOVE.W #$000F,$DFF096
  91.     RTS
  92.  
  93. ********** DRIVE VOICE D5.B **********
  94.  
  95. DRIVOI:    CLR.W INFCHK
  96.     LEA $DFF0A0,A4
  97.     MOVE.W D5,D6
  98.     ASL.W #1,D6
  99.     MOVE.W D5,D7
  100.     ASL.W #4,D7
  101.  
  102.     LEA GLDUD(PC),A3
  103.     TST.W (A3,D6.W)
  104.     BEQ DODRIVE
  105.  
  106.     LEA DETUN0(PC),A2
  107.     MOVE.W (A2,D6.W),D1
  108.     TST.W (A3,D6.W)
  109.     BMI GLIDEUP    
  110.     NEG.W D1
  111.  
  112. GLIDEUP:LEA PERVAL(PC),A3
  113.     ADD.W (A3,D6.W),D1
  114.     ANDI.L #$FFFF,D1
  115.     CMPI.L #127,D1
  116.     BGT CHKDGL
  117.     MOVE.W #127,D1
  118. CHKDGL:    CMPI.L #$0800,D1
  119.     BLT NOCHKP
  120.     MOVE.W #$0800,D1
  121. NOCHKP:    MOVE.W D1,6(A4,D7.W)
  122.     MOVE.W D1,(A3,D6.W)
  123.  
  124. DODRIVE:LEA 1+BF0(PC),A3
  125.     CMPI.B #$FF,(A3,D6.W)
  126.     BNE BLGO
  127. BEGBLK:    LEA BF0(PC),A3
  128.     CLR.W (A3,D6.W)
  129.     LEA RP0(PC),A3
  130.     SUBI.W #1,(A3,D6.W)
  131.     BNE BLGO
  132.  
  133. NXV:    LEA RP0(PC),A3
  134.     MOVE.W #1,(A3,D6.W)
  135. NXVA:    ADDI.W #1,INFCHK    ; THIS TRAPS AN FF VALUE IN
  136.     BTST #8,INFCHK        ; POSITION 0 OF EACH TRACK...
  137.     BNE SONEND
  138.     CLR.L D0
  139.     MOVE.W D5,D0
  140.     ASL.W #8,D0
  141.     MOVE.L TRK0,A0
  142.     ADD.L D0,A0
  143.     LEA V0(PC),A3
  144.     MOVE.W (A3,D6.W),D0
  145.     CLR.W D1
  146.     MOVE.B (A0,D0.W),D1
  147.     CMPI.W #$40,D1
  148.     BLT FBL
  149.     CMPI.W #$80,D1
  150.     BLT RPX
  151.     CMPI.W #$FB,D1
  152.     BGT CTR
  153.     CMPI.B #$BF,D1    
  154.     BGT FILTMOD
  155.  
  156. TRXPOSE:ANDI.W #$3F,D1
  157.     CMPI.W #35,D1
  158.     BGT FILTMOD
  159.     LEA TRX0(PC),A3
  160.     MOVE.W D1,(A3,D6.W)
  161.     BRA VINC
  162.  
  163. FILTMOD:MOVE.B $BFE001,D0
  164.     ANDI.B #$FD,D0
  165.     ANDI.B #1,D1    ; MODIFY FILTER...
  166.     ASL.B #1,D1
  167.     OR.B D1,D0
  168.     MOVE.B D0,$BFE001
  169.     
  170. VINC:    LEA 1+V0(PC),A3
  171.      ADDI.B #1,(A3,D6.W)
  172.     BRA NXVA
  173.  
  174. RPX:    SUBI.W #$3F,D1
  175.     LEA RP0(PC),A3
  176.     MOVE.W D1,(A3,D6.W)
  177.     BRA VINC
  178.  
  179. FBL:    LEA 1+V0(PC),A3
  180.     ADDI.B #1,(A3,D6.W)
  181.     LEA 1+BLK0(PC),A3
  182.     MOVE.B D1,(A3,D6.W)
  183.     BRA BLGO
  184.  
  185. CTR:    CMPI.B #$FC,D1
  186.     BEQ VOL
  187.     CMPI.B #$FD,D1
  188.     BEQ GT
  189.     CMPI.B #$FE,D1
  190.     BEQ SONEND
  191.     CMPI.B #$FF,D1
  192.     BNE VINC
  193.  
  194.     LEA V0(PC),A3    ; THE $FF BYTE
  195.     CLR.W (A3,D6.W)
  196.     BRA NXV
  197.  
  198. SONEND:    ST SONPLAY
  199.     RTS
  200.  
  201. VOL:    ADDI.B #1,D0
  202.     LEA 1+V0(PC),A3
  203.     MOVE.B D0,(A3,D6.W)
  204.     MOVE.B (A0,D0.W),D1
  205.     MOVE.W D1,8(A4,D7.W); SET VOLUME...
  206.     LEA VOL0(PC),A3
  207.     MOVE.W D1,(A3,D6.W)
  208.     BRA VINC
  209.  
  210. GT:    ADDI.B #1,D0
  211.     LEA 1+V0(PC),A3
  212.     MOVE.B (A0,D0.W),(A3,D6.W)
  213.     BRA NXV
  214.  
  215. BLGO:    LEA CDUR0(PC),A3
  216.     SUBI.W #1,(A3,D6.W)
  217.     BEQ BLDO
  218.     BMI BLDO
  219.     RTS
  220.  
  221. BLDO:    ADDI.W #1,INFCHK    ; ENDS SONG IF AN INFINITE
  222.     BTST #8,INFCHK        ; LOOP IS FOUND...
  223.     BNE SONEND
  224.     LEA BF0(PC),A3
  225.     MOVE.W (A3,D6.W),D0
  226.     LEA BLK0(PC),A3
  227.     MOVE.W (A3,D6.W),D1
  228.     ASL.W #8,D1
  229.     ADD.W D1,D0
  230.     MOVE.L BLOX,A0
  231.     CLR.W D1
  232.     MOVE.B (A0,D0.W),D1 ; VAL IN THE BLOCK...
  233.     CMPI.B #$FF,D1
  234.     BEQ BEGBLK
  235.     CMPI.W #$30,D1
  236.     BLT PNOT
  237.     CMPI.W #$70,D1
  238.     BLT DETFIX
  239.     CMPI.W #$80,D1
  240.     BLT TEMFIX
  241.     CMPI.W #$C0,D1
  242.     BLT DURFIX
  243.  
  244.     ANDI.W #$3F,D1        ; GET SOUND NR.
  245.     LEA SN0(PC),A3
  246.     MOVE.W D1,(A3,D6.W)
  247. NXBF:    LEA 1+BF0(PC),A3
  248.     ADDI.B #1,(A3,D6.W)
  249.     BRA BLDO
  250.  
  251. TEMFIX:    ANDI.W #$0F,D1
  252.     MOVE.W D1,TEMPO
  253.     BRA NXBF
  254.  
  255. DETFIX:    LEA GLDUD(PC),A3
  256.     SUBI.W #$30,D1
  257.     CMPI.B #$3D,D1
  258.     BEQ DNGLD
  259.     CMPI.B #$3E,D1
  260.     BEQ NOGLD
  261.     CMPI.B #$3F,D1
  262.     BEQ UPGLD
  263.     ASL.W #1,D1
  264.     LEA DETUN0(PC),A3
  265.     MOVE.W D1,(A3,D6.W)
  266.     BRA NXBF
  267.  
  268. DNGLD:    MOVE.W #$FFFF,(A3,D6.W)     
  269.     BRA NXBF
  270.  
  271. NOGLD:    CLR.W (A3,D6.W)
  272.     BRA NXBF
  273.  
  274. UPGLD:    MOVE.W #$0001,(A3,D6.W)
  275.     BRA NXBF    
  276.  
  277. DURFIX:    ANDI.W #$3F,D1        
  278.     TST.B D1
  279.     BNE DUROK
  280.     MOVE.B #$40,D1
  281. DUROK:    LEA DUR0(PC),A3
  282.     MOVE.W D1,(A3,D6.W)
  283.     BRA NXBF
  284.  
  285. PNOT:    MOVE.W D5,D4
  286.     ASL.W #1,D4
  287.     LEA DMA(PC),A3
  288.     MOVE.W (A3,D4.W),DMV
  289.     
  290.     MOVE.L DIGBLOK,A1
  291.     LEA SN0(PC),A3
  292.     MOVE.W (A3,D6.W),D0
  293.     ASL.W #4,D0
  294.  
  295.     TST.L 4(A1,D0.W)    ; SKIP IF SOUND NOT LOADED...
  296.     BEQ PNENDA
  297.         
  298.     MOVE.W DMV,$DFF096    
  299.     MOVE.W #$1D0,D2        ; LET DMA CATCH UP...
  300. DF:    DBF D2,DF
  301.     MOVE.L 0(A1,D0.W),(A4,D7.W)
  302.     MOVE.L 4(A1,D0.W),D2
  303.     LSR.L #1,D2
  304.     MOVE.W D2,4(A4,D7.W)
  305.     LEA TRX0(PC),A2    ; D1 NOTEVAL + THE TRANSPOSE VALUE...
  306.     ADD.W (A2,D6.W),D1
  307.     ASL.W #1,D1
  308.     LEA PERTAB(PC),A2
  309.     MOVE.W (A2,D1.W),D1
  310.     LEA DETUN0(PC),A3
  311.     ADD.W (A3,D6.W),D1
  312.     MOVE.W D1,6(A4,D7.W)
  313.     LEA PERVAL(PC),A2
  314.     MOVE.W D1,(A2,D6.W)
  315.     ORI.W #$8000,DMV
  316.     MOVE.W DMV,$DFF096
  317.  
  318.     TST.L 12(A1,D0.W)
  319.     BNE WAVE
  320.     MOVE.W #1,4(A4,D7.W)
  321.     BRA PNEND
  322.  
  323. WAVE:    MOVE.W #$30,D1
  324. DMAWT:    DBF D1,DMAWT
  325.     MOVE.L 12(A1,D0.W),D1
  326.     LSR.L #1,D1
  327.     MOVE.W D1,4(A4,D7.W)
  328.     MOVE.L (A1,D0.W),D1
  329.     ADD.L 8(A1,D0.W),D1
  330.     MOVE.L D1,(A4,D7.W)
  331.  
  332. PNEND:    LEA VOL0(PC),A3
  333.     MOVE.W (A3,D6.W),8(A4,D7.W)
  334. PNENDA:    LEA DUR0(PC),A3
  335.     LEA CDUR0(PC),A1
  336.     MOVE.W (A3,D6.W),(A1,D6.W)
  337.     LEA BF0(PC),A3
  338.     ADDI.W #1,(A3,D6.W)
  339.     RTS
  340.  
  341. ********** THE PERIOD TABLE **********
  342.  
  343. PERTAB:    DC.W 1712,1616,1520,1440,1360,1280,1200,1136,1072,1016,960,904
  344.     DC.W 856,808,760,720,680,640,600,568,536,508,480,452
  345.     DC.W 428,404,380,360,340,320,300,284,268,254,240,226
  346.     DC.W 214,202,190,180,170,165,150,142,134,127,120,113
  347.     DC.W 107,101,95,90,85,83,75,71,67,64,60,57 ; TRXPOSE VALS...
  348.     DC.W 54,51,48,45,43,41,38,36,34,32,30,28
  349.     DC.W 27,25,24,23,21,20,19,18,17,16,15,14
  350. DMA:    DC.W $0001,$0002,$0004,$0008
  351. DMV:    DC.W 0
  352.  
  353. ********** VARIABLES USED IN THE DRIVER **********
  354.  
  355. TEMPO:    DC.W 2
  356. TMCNT:    DC.W 0
  357.  
  358. DUR0:    DC.W $10,$10,$10,$10
  359. CDUR0:    DC.W 0,0,0,0
  360. GLDUD:    DC.W 0,0,0,0
  361. TRX0:    DC.W 0,0,0,0
  362. GLDVAL:    DC.W 0,0,0,0
  363. PERVAL:    DC.W 0,0,0,0
  364. BLK0:    DC.W 0,0,0,0
  365. V0:    DC.W 0,0,0,0
  366. DETUN0:    DC.W 0,0,0,0
  367. SN0:    DC.W 0,0,0,0
  368. SONPLAY:DC.W 0
  369. INFCHK:    DC.W 0        ; CHECKS FOR ENDLESS LOOPS IN MUSIC...
  370. BF0:    DC.W $FF,$FF,$FF,$FF
  371. RP0:    DC.W 1,1,1,1
  372. VOL0:    DC.W 64,64,64,64
  373.  
  374. TRK0:    DC.L 0
  375. BLOX:    DC.L 0
  376. DIGBLOK:DC.L 0
  377. DIGIDAT:DC.L 0
  378.  
  379.  
  380.