SMPLPLAY
;****************************************************************************** ;***************************SAMPLE-PLAYER 0.9********************************** ;***************************BY HENRIK STOLPE*********************************** ;****************************************************************************** aud0lch = $dff0a0 aud0len = $dff0a4 aud0per = $dff0a6 aud0vol = $dff0a8 aud1lch = $dff0b0 aud1len = $dff0b4 aud1per = $dff0b6 aud1vol = $dff0b8 aud2lch = $dff0c0 aud2len = $dff0c4 aud2per = $dff0c6 aud2vol = $dff0c8 aud3lch = $dff0d0 aud3len = $dff0d4 aud3per = $dff0d6 aud3vol = $dff0d8 execbase = 4 GetMsg = -372 Wait = -318 ReplyMsg = -378 DrawBorder = -108 PrintLText = -216 OpenWorkBench = -210 OpenIff = -90 len = 17728 incdir "dh0:assembler/include/" include exec/exec_lib.i include intuition/intuition.i include intuition/intuition_lib.i s: bsr openall bsr interface bsr inithardware bsr again ;set to again to debug rts openall: moveq #100,d4 moveq #INTUITION_REV,d0 lea int_name(pc),a1 CALLEXEC OpenLibrary tst.l d0 beq exit_false move.l d0,_IntuitionBase move.l _IntuitionBase,a6 jsr OpenWorkBench(a6) moveq.l #0,d0 lea iff_name(pc),a1 CALLEXEC Openlibrary move.l d0,IffBase openwin: lea windowdef,a0 CALLINT OpenWindow move.l d0,MyWindow rts interface: bsr lines bsr textpr rts lines: lea box,a1 move #9,d0 move #14,d1 bsr drawit rts drawit: move.l _IntuitionBase,a6 move.l MyWindow,a0 move.l 50(a0),a0 jsr DrawBorder(a6) rts textpr: lea text,a1 move #10,d0 move #80,d1 bsr printit rts printit: move.l _IntuitionBase,a6 move.l MyWindow,a0 move.l 50(a0),a0 jsr PrintLText(a6) rts loop: move.l MyWindow(pc),a0 move.l wd_UserPort(a0),a0 moveq #0,d1 move.b MP_SIGBIT(a0),d1 moveq #0,d0 bset d1,d0 move.l execbase,a6 CALLEXEC Wait move.l #0,d4 bsr again again: move.l MyWindow,a0 move.l wd_UserPort(a0),a0 move.l execbase,a6 jsr GetMsg(a6) move.l d0,a1 moveq.l #0,d6 moveq #0,d7 move.l $14(a1),d6 ;IDCPM Class move.l $1c(a1),a2 ;Adress move 38(a2),d7 ;gadget Id in Adress *; jsr ReplyMsg(a6) ;disable to debug cmp.l #$200,d6 beq slut *; cmp #1,d7 *; beq load cmp #2,d7 beq play cmp #3,d7 beq filter cmp #4,d7 beq changevol cmp #5,d7 beq changerate cmp #6,d7 beq changeloop bne again ;set to again to debug rts ;routines inithardware: move.l filename,a0 move.l d0,ifffile move.l iffbase,a6 jsr OpenIff(a6) ifffile: blk.b 30000,0 even filename: dc.b 'ram:test',0 even vol = 0064 ;initial volume rate =0200 ;initial read DMA rate kanal0: move.l #ifffile,aud0lch move #[len/2],aud0len move #rate,aud0per move #vol,aud0vol kanal1: move.l #ifffile,aud1lch move #[len/2],aud1len move #rate,aud1per move #vol,aud1vol kanal2: move.l #ifffile,aud2lch move #[len/2],aud2len move #rate,aud2per move #vol,aud2vol kanal3: move.l #ifffile,aud3lch move #[len/2],aud3len move #rate,aud3per move #vol,aud3vol rts filter: bchg #1,$bfe001 bsr again ;set to again to debug rts play: cmp #1,d3 beq killDMA activateDMA: move.w #$800f,$dff096 moveq #1,d3 bsr again ;set to again to debug rts killDMA: move.w #$000f,$dff096 moveq #0,d3 bsr again ;set to again to debug rts changevol: moveq #0,d5 move propinfo4+3,d5 divu #4,d5 ;divide to get 0-63 bounds move d5,aud0vol move d5,aud1vol move d5,aud2vol move d5,aud3vol bsr again ;set to again to debug rts changerate: moveq #0,d5 move propinfo5+3,d5 mulu #2,d5 ;mulu to get a nice range add #100,d5 ;set min value move d5,aud0per move d5,aud1per move d5,aud2per move d5,aud3per bsr again ;set to again to debug rts changeloop: moveq #0,d5 moveq #0,d2 move #len,d2 ;ljud length divu #256,d2 ;dela med max slider get index move propinfo6+3,d5 ;get value of slider mulu d2,d5 ;ggr the index w value divu #2,d5 ;halve move d5,aud0len move d5,aud1len move d5,aud2len move d5,aud3len bsr again ;set to again to debug rts slut: closewin: move.l MyWindow(pc),a0 CALLINT CloseWindow closeint move.l _IntuitionBase(pc),a1 CALLEXEC CloseLibrary exit_false moveq #0,d4 move.l d4,d0 rts ;structures _IntuitionBase dc.l 0 IffBase dc.l 0 MyWindow dc.l 0 INTUITION_REV equ 31 v1.1 int_name INTNAME iff_name dc.l 'iff.library',0 windowdef: dc.w 365 dc.w 15 dc.w 264 dc.w 100 dc.b 2 dc.b 1 dc.l $220 dc.l $200320e dc.l gad1 dc.l 0 dc.l windowname screenhd: dc.l 0 dc.l 0 dc.w 230 dc.w 100 dc.w 320 dc.w 200 dc.w 1 windowname: dc.b 'SAMPLEPLAYER V0.9',0 even windowhd: dc.l 0 even gad1: dc.l gad2 dc.w 17,20 dc.w 80,9 dc.w %00000000 dc.w $3 ;relverify,$100 = toggleselect dc.w 1 dc.l bord dc.l 0 dc.l gad1text dc.l 0 dc.l 0 dc.w 1 dc.l 0 gad1text: dc.b 3,0 dc.b 1 even dc.w 22,1 dc.l 0 dc.l gd1txt dc.l 0 gd1txt: dc.b "LOAD",0 even gad2: dc.l gad3 dc.w 17,40 dc.w 80,9 dc.w %00000000 dc.w $3 ;relverify/gadgimmediate,($100 = toggleselect) dc.w 1 dc.l bord dc.l 0 dc.l gad2text dc.l 0 dc.l 0 dc.w 2 dc.l 0 gad2text: dc.b 3,0 dc.b 1 even dc.w 22,1 dc.l 0 dc.l gd2txt dc.l 0 gd2txt: dc.b "PLAY",0 even gad3: dc.l gad4 dc.w 17,60 dc.w 80,9 dc.w %00000000 dc.w $3 ;relverify/gadgimmediate,($100 = toggleselect) dc.w 1 dc.l bord dc.l 0 dc.l gad3text dc.l 0 dc.l 0 dc.w 3 dc.l 0 gad3text: dc.b 3,0 dc.b 1 even dc.w 16,1 dc.l 0 dc.l gd3txt dc.l 0 gd3txt: dc.b "FILTER",0 even gad4: dc.l gad5 dc.w 125,14 dc.w 24,50 dc.w 3 dc.w 2 dc.w 3 dc.l propimage dc.l 0 dc.l gad4text dc.l 0 dc.l propinfo4 dc.w 4 dc.l 0 gad4text: dc.b 3,0 dc.b 1 even dc.w -11,52 dc.l 0 dc.l gad4txt dc.l 0 gad4txt: dc.b "Volume",0 even propinfo4: dc.w $6 dc.w 0 dc.w 0 dc.w 0 dc.w $ffff/12 dc.w 0 dc.w 0 dc.w 0 dc.w 12 dc.w 0 dc.w 0 dc.w 0 gad5: dc.l gad6 dc.w 175,14 dc.w 24,50 dc.w 3 dc.w 2 dc.w 3 dc.l propimage dc.l 0 dc.l gad5text dc.l 0 dc.l propinfo5 dc.w 5 dc.l 0 gad5text: dc.b 3,0 dc.b 1 even dc.w -4,52 dc.l 0 dc.l gad5txt dc.l 0 gad5txt: dc.b "Rate",0 even propinfo5: dc.w $6 dc.w 0 dc.w 0 dc.w 0 dc.w $ffff/12 dc.w 0 dc.w 0 dc.w 0 dc.w 12 dc.w 0 dc.w 0 dc.w 0 gad6: dc.l 0 dc.w 225,14 dc.w 24,50 dc.w 3 dc.w 2 dc.w 3 dc.l propimage dc.l 0 dc.l gad6text dc.l 0 dc.l propinfo6 dc.w 6 dc.l 0 gad6text: dc.b 3,0 dc.b 1 even dc.w -4,52 dc.l 0 dc.l gad6txt dc.l 0 gad6txt: dc.b "Loop",0 even propinfo6: dc.w 6 dc.w 0,0 dc.w 0 dc.w $ffff/12 dc.w 0 dc.w 0 dc.w 12 dc.w 0 dc.w 0 dc.w 0 propimage: dc.w 0,0 dc.w 16,7 dc.w 1 dc.l propimdata dc.b 1,0 dc.l 0 propimdata: dc.w %0111111111111110 dc.w %0111111111111010 dc.w %0101011111101010 dc.w %0101010110101010 dc.w %0101011111101010 dc.w %0101111111111010 dc.w %0111111111111110 bord: dc.w 0,0 dc.b 1,3 dc.b 0 dc.b 5 dc.l cords dc.l border2 border2: dc.w 0,0 dc.b 2,3 dc.b 0 dc.b 3 dc.l cords2 dc.l 0 cords: dc.w -2,-2 dc.w 80,-2 dc.w 80,9 dc.w -2,9 dc.w -2,-2 cords2: dc.w 80,-2 dc.w -2,-2 dc.w -2,9 box: dc.w 0,0 dc.b 1,3 dc.b 0 dc.b 5 dc.l boxcords dc.l box2 box2: dc.w 0,0 dc.b 2,3 dc.b 0 dc.b 3 dc.l box2cords dc.l 0 boxcords: dc.w 0,0 dc.w 94,0 dc.w 94,59 dc.w 0,59 dc.w 0,0 box2cords: dc.w 94,0 dc.w 0,0 dc.w 0,59 text: dc.b 1,0 dc.b 1 even dc.w 0,0 dc.l 0 dc.l txt dc.l text2 txt: dc.b "By Henrik Stolpe",0 even text2: dc.b 1,0 dc.b 1 even dc.w 0,8 dc.l 0 dc.l txt2 dc.l 0 txt2: dc.b "100% assembler!",0