;------------------------------------------------------------------------------ ; REPLAYER SOURCE WITH INFORMATION FOR ALL CODERS ;------------------------------------------------------------------------------ ; WRITTEN BY : mc68000 of TECH ;------------------------------------------------------------------------------ mt_replayinit=0 mt_songinit=2 mt_replayer=6 mt_stopsound=10 mt_fillstruct=14 section "song_replay",code_p ; YOU MUST CALL 2 DIFFERENT INIT ROUTINES, ONE INIT THE WHOLE REPLAYER ROUTINE, ; THE OTHER INIT THE SOUND YOU WANT TO PLAY !!!! ; YOU MUST START THEM BEFORE STARTING THE REPLAYCODE !! (IF NOT -> BYE BYE ...) start lea $dff000,a6 lea mt_data,a5 ;this is my songbase ; FIRST LET US INIT THE REPLAYER !!! ; PARAMETER IN D0 : 0 = USE LEVEL 6 INTERUPT FOR DMA-REGISTER INIT ; 1 = USE STANDART RASTERTIME-WAITING CODE (SLOWER) moveq #0,d0 jsr mt_replayinit(a5) ; NOW LET'S INIT THE SOUND ... ; PARAMETER IN D0 : SONGNUMBER (FIRST = 1) moveq #1,d0 jsr mt_songinit(a5) ; LET'S PLAY THE WHOLE THING USING THE VBLANC INTERUPT ... move.w $1c(a6),d7 bset #15,d7 ;save old interupt status move.w #$7fff,$9a(a6) move.l $6c.w,d6 ;save old vblanc lea newint(pc),a0 move.l a0,$6c.w ;set our new interupt move.w #$c020,$9a(a6) ;and start it .... move.l #$10002,d1 buttwait btst #10,$16(a6) bne.b nonewsong ;rechte maustaste = swap sounds wait2 btst #10,$16(a6) beq.b wait2 move.w #$7fff,$9a(a6) swap d1 move.w d1,d0 jsr mt_songinit(a5) move.w #$c020,$9a(a6) nonewsong btst #6,$bfe001 bne.b buttwait ;wait for the left mousebutton move.w #$7fff,$9a(a6) move.l d6,$6c.w ;start system interupt move.w d7,$9a(a6) ;and init system status jmp mt_stopsound(a5) ;end song ;---------------------------- INTERUPT HANDLER ------------------------------- newint ; THE REPLAYING THING ... ; PARAMETER IN D0 : MAXIMUM VOLUME movem.l d0-a6,-(a7) moveq #64,d0 lea mt_data,a5 jsr mt_replayer(a5) movem.l (a7)+,d0-a6 move.w #$20,$dff09c rte ;--------------------------------- THE SONG ----------------------------------- section "song_data",data_c incdir dh0: mt_data incbin mod.test ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ; ; YOU WANT TO CODE AN EQUILIZER ??? OR A SCOPE ??? OR ANOTHER SOUND SHOWER ??? ; ; N O P R O B L E M ! ! ! ! ; ; IF YOU HAVE CODED A THING LIKE THAT WITH A "NORMAL" REPLAY ROUTINE, IT'S NO ; PROBLEM FOR YOU TO DO THE SAME WITH THIS REPLAYER !!! ; ; I HAVE PUT A LITTLE ROUTINE IN THE REPLYER, THAT FILLS YOU A 28 BYTES LONG ; STRUCTURE WITH POINTERS ON IMPORTENT SONG INFORMATIONS. ; ; STRUCT : ; ; OFFSET: SIZE: MEANING: ; ; 0 4 CHAN_1_TEMP ; 4 4 CHAN_2_TEMP ; 8 4 CHAN_3_TEMP ; 12 4 CHAN_4_TEMP ; 16 4 SONG_POSITION ; 20 4 NOTE_WAIT_COUNTER ; 24 4 PERIODTABLE ; ; BUT HOW TO CALL IT ??? ; ; lea struct(pc),a0 ;POINTER OF YOUR STRUCT ; jsr mt_fillstruct(a5) ;A5=SONGBASE ; ; LOOK IN THE SCOPE_PLAYER HOW TO WORK WITH THIS POINTERS !!! ; ;------------------------------------------------------------------------------ ; ; CHAN_X_TEMP_STRUCT : ; ; OFFSET: SIZE: MEANING: ; 0 2 NEW PERIOD (OR 0 FOR NO PLAY) ; 2 2 REST OF NOTE (1 NOTE = 4 BYTES) ; 4 4 SAMPLESTART ; 8 2 SAMPLE LENGHT ; 10 4 LOOPSTART ; 14 2 LOOPLENGTH ; 16 2 PERIOD ; ... ... NOT IMPORTENT ; 19 1 VOLUME ; ... ... NOT IMPORTENT ; ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------