home *** CD-ROM | disk | FTP | other *** search
- ; MED-vbserv.a: Vertical blank interrupt
- xref _pylvkork
- xdef _PiirraPylvas
- xdef _PylvKesk
- xdef DrawEqualizer
- xref _pylvasalku0
- xref _pylvasalku1
- xref _pylvasalku2
- xref _midiactive
- xref _AddMIDIData
- xref _firstdisptrk
- xref _soittotila
- xref _specialupd
- xref _equalizerok
-
- code
- ; build equalizer: Plane0 = $5a, Plane1 = $3c, Plane3 = $ff
- _PiirraPylvas: ;instr. number in d0, height = d1
- movem.l a2/a3/d2-d3,-(sp)
- tst.l _pylvasalku0
- beq.s ex0
- lea _pylvkork,a3
- move.w d0,d2
- clr.b 0(a3,d2.w) ;clear height
- movea.l _pylvasalku0,a0
- movea.l _pylvasalku1,a1
- movea.l _pylvasalku2,a2
- add.w #1240,d0 ;d0 = offset of the lowest byte
- move.b d1,d3 ;save height
- subq.l #1,d1
- ppl: move.b #$5a,0(a0,d0.w) ;directly to screen bitmap
- move.b #$3c,0(a1,d0.w)
- move.b #$ff,0(a2,d0.w)
- sub.w #40,d0 ;from down to up
- dbf d1,ppl
- moveq.l #31,d1
- sub.b d3,d1
- bmi.s nopclr
- ppl2: st.b 0(a0,d0.w)
- st.b 0(a1,d0.w)
- clr.b 0(a2,d0.w)
- sub.w #40,d0
- dbf d1,ppl2
- nopclr: move.b d3,0(a3,d2.w) ;height
- ex0: movem.l (sp)+,a2/a3/d2-d3
- rts
- _PylvKesk: ;interrupt handler
- tst.b _midiactive
- beq.s nomidi
- subq.b #1,actsens
- bne.s nomidi
- move.b #15,actsens
- move.l a1,-(sp)
- moveq.l #1,d0
- lea actsens+1(pc),a0
- jsr _AddMIDIData(pc)
- move.l (sp)+,a1
- nomidi: move.l a2,-(sp)
- tst.l _pylvasalku0
- beq.s ex1
- movea.l _pylvasalku0,a0
- movea.l _pylvasalku1,a2
- movea.l _pylvasalku2,a5
- moveq.l #30,d0
- ckloop: tst.b 0(a1,d0.w)
- ble.s nxloop ;no this "column" (equalizer)
- moveq.l #32,d1
- sub.b 0(a1,d0.w),d1 ;how many lines from the beginning
- mulu #40,d1 ;every line = 40 bytes
- add.w d0,d1
- st.b 0(a0,d1.w)
- st.b 0(a2,d1.w)
- clr.b 0(a5,d1.w)
- subq.b #1,0(a1,d0.w) ;subtract from the variable
- nxloop: dbf d0,ckloop
- ex1:
- tst.b _equalizerok
- beq.s ex2
- moveq.l #0,d0 ;handle the channel-equalizer
- moveq.l #0,d1
- lea eqheight(pc),a2
- lea clrptrs(pc),a0
- equalloop: movea.l (a0),a1
- move.b 0(a2,d1.w),d0
- ble.s equalend
- clr.l (a1)+
- addq.l #8,(a0)
- subq.b #2,0(a2,d1.w)
- bmi.s equalend
- clr.l (a1)
- equalend: addq.l #4,a0
- addq.b #1,d1
- cmp.b #4,d1
- blt.s equalloop
-
- ex2: btst #6,$bfe001 ;Panic-stop (both mousebuttons)
- bne.s exvb
- btst #10,$dff016
- bne.s exvb
- addq.b #1,panic
- bne.s exvb2
- clr.w _soittotila
- or.b #2,_specialupd
- exvb: clr.b panic
- exvb2: move.l (sp)+,a2
- moveq.l #0,d0
- rts ;return control to Exec
- actsens: dc.b 0,$FE
- panic: dc.w 0
-
- xref _eq1
- xref _eq2
- xref _eq3
- xref _eq4
-
- clrptrs: dc.l 0,0,0,0
- eqptrs: dc.l _eq1,_eq2,_eq3,_eq4
- eqheight: dc.b 0,0,0,0
-
- DrawEqualizer: tst.b _equalizerok ;draw it??
- beq.s enddeql3 ;no...
- movem.l a2/d0-d4,-(sp) ;this routine draws the channel-
- sub.b _firstdisptrk,d0 ;equalizer (track = d0, vol = d2)
- bmi.s enddeql2
- cmp.b #4,d0
- bge.s enddeql2
- lea eqheight(pc,d0.w),a2
- clr.b (a2)
- move.l #$c0033fff,d3
- lsl.b #2,d0
- lea clrptrs(pc,d0.w),a0
- movea.l 16(a0),a1
- adda.l #256,a1
- cmp.b #63,d2
- ble.s no64
- moveq.l #63,d2
- no64: move.w d2,d4
- subq.b #1,d2
- bmi.s vol0
- dsprl: move.l d3,-(a1)
- dbf d2,dsprl
- move.l a1,(a0)
- vol0: moveq.l #63,d2
- sub.b d4,d2
- beq.s enddeql
- subq.b #1,d2
- moveq.l #0,d3
- dsprl2: move.l d3,-(a1)
- dbf d2,dsprl2
- enddeql: move.b d4,(a2)
- enddeql2: movem.l (sp)+,a2/d0-d4
- enddeql3: rts
-
- end
-