home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 369b.lha / MED_v2.0 / Source / medsrc / med-vbserv.a < prev    next >
Text File  |  1990-05-03  |  3KB  |  155 lines

  1. ;    MED-vbserv.a:    Vertical blank interrupt
  2.         xref    _pylvkork
  3.         xdef    _PiirraPylvas
  4.         xdef    _PylvKesk
  5.         xdef    DrawEqualizer
  6.         xref    _pylvasalku0
  7.         xref    _pylvasalku1
  8.         xref    _pylvasalku2
  9.         xref    _midiactive
  10.         xref    _AddMIDIData
  11.         xref    _firstdisptrk
  12.         xref    _soittotila
  13.         xref    _specialupd
  14.         xref    _equalizerok
  15.  
  16.         code
  17. ;    build equalizer: Plane0 = $5a, Plane1 = $3c, Plane3 = $ff
  18. _PiirraPylvas:    ;instr. number in d0, height = d1
  19.         movem.l    a2/a3/d2-d3,-(sp)
  20.         tst.l    _pylvasalku0
  21.         beq.s    ex0
  22.         lea    _pylvkork,a3
  23.         move.w    d0,d2
  24.         clr.b    0(a3,d2.w)    ;clear height
  25.         movea.l    _pylvasalku0,a0
  26.         movea.l    _pylvasalku1,a1
  27.         movea.l    _pylvasalku2,a2
  28.         add.w    #1240,d0    ;d0 = offset of the lowest byte
  29.         move.b    d1,d3        ;save height
  30.         subq.l    #1,d1
  31. ppl:        move.b    #$5a,0(a0,d0.w)    ;directly to screen bitmap
  32.         move.b    #$3c,0(a1,d0.w)
  33.         move.b    #$ff,0(a2,d0.w)
  34.         sub.w    #40,d0        ;from down to up
  35.         dbf    d1,ppl
  36.         moveq.l    #31,d1
  37.         sub.b    d3,d1
  38.         bmi.s    nopclr
  39. ppl2:        st.b    0(a0,d0.w)
  40.         st.b    0(a1,d0.w)
  41.         clr.b    0(a2,d0.w)
  42.         sub.w    #40,d0
  43.         dbf    d1,ppl2
  44. nopclr:        move.b    d3,0(a3,d2.w)    ;height
  45. ex0:        movem.l    (sp)+,a2/a3/d2-d3
  46.         rts
  47. _PylvKesk:            ;interrupt handler
  48.         tst.b    _midiactive
  49.         beq.s    nomidi
  50.         subq.b    #1,actsens
  51.         bne.s    nomidi
  52.         move.b    #15,actsens
  53.         move.l    a1,-(sp)
  54.         moveq.l    #1,d0
  55.         lea    actsens+1(pc),a0
  56.         jsr    _AddMIDIData(pc)
  57.         move.l    (sp)+,a1
  58. nomidi:        move.l    a2,-(sp)
  59.         tst.l    _pylvasalku0
  60.         beq.s    ex1
  61.         movea.l    _pylvasalku0,a0
  62.         movea.l    _pylvasalku1,a2
  63.         movea.l    _pylvasalku2,a5
  64.         moveq.l    #30,d0
  65. ckloop:        tst.b    0(a1,d0.w)
  66.         ble.s    nxloop        ;no this "column" (equalizer)
  67.         moveq.l    #32,d1
  68.         sub.b    0(a1,d0.w),d1    ;how many lines from the beginning
  69.         mulu    #40,d1        ;every line = 40 bytes
  70.         add.w    d0,d1
  71.         st.b    0(a0,d1.w)
  72.         st.b    0(a2,d1.w)
  73.         clr.b    0(a5,d1.w)
  74.         subq.b    #1,0(a1,d0.w)    ;subtract from the variable
  75. nxloop:        dbf    d0,ckloop
  76. ex1:
  77.         tst.b    _equalizerok
  78.         beq.s    ex2
  79.         moveq.l    #0,d0    ;handle the channel-equalizer
  80.         moveq.l    #0,d1
  81.         lea    eqheight(pc),a2
  82.         lea    clrptrs(pc),a0
  83. equalloop:    movea.l    (a0),a1
  84.         move.b    0(a2,d1.w),d0
  85.         ble.s    equalend
  86.         clr.l    (a1)+
  87.         addq.l    #8,(a0)
  88.         subq.b    #2,0(a2,d1.w)
  89.         bmi.s    equalend
  90.         clr.l    (a1)
  91. equalend:    addq.l    #4,a0
  92.         addq.b    #1,d1
  93.         cmp.b    #4,d1
  94.         blt.s    equalloop
  95.  
  96. ex2:        btst    #6,$bfe001    ;Panic-stop (both mousebuttons)
  97.         bne.s    exvb
  98.         btst    #10,$dff016
  99.         bne.s    exvb
  100.         addq.b    #1,panic
  101.         bne.s    exvb2
  102.         clr.w    _soittotila
  103.         or.b    #2,_specialupd
  104. exvb:        clr.b    panic
  105. exvb2:        move.l    (sp)+,a2
  106.         moveq.l    #0,d0
  107.         rts            ;return control to Exec
  108. actsens:    dc.b    0,$FE
  109. panic:        dc.w    0
  110.  
  111.         xref    _eq1
  112.         xref    _eq2
  113.         xref    _eq3
  114.         xref    _eq4
  115.  
  116. clrptrs:    dc.l    0,0,0,0
  117. eqptrs:        dc.l    _eq1,_eq2,_eq3,_eq4
  118. eqheight:    dc.b    0,0,0,0
  119.  
  120. DrawEqualizer:    tst.b    _equalizerok    ;draw it??
  121.         beq.s    enddeql3    ;no...
  122.         movem.l    a2/d0-d4,-(sp) ;this routine draws the channel-
  123.         sub.b    _firstdisptrk,d0 ;equalizer (track = d0, vol = d2)
  124.         bmi.s    enddeql2
  125.         cmp.b    #4,d0
  126.         bge.s    enddeql2
  127.         lea    eqheight(pc,d0.w),a2
  128.         clr.b    (a2)
  129.         move.l    #$c0033fff,d3
  130.         lsl.b    #2,d0
  131.         lea    clrptrs(pc,d0.w),a0
  132.         movea.l    16(a0),a1
  133.         adda.l    #256,a1
  134.         cmp.b    #63,d2
  135.         ble.s    no64
  136.         moveq.l    #63,d2
  137. no64:        move.w    d2,d4
  138.         subq.b    #1,d2
  139.         bmi.s    vol0
  140. dsprl:        move.l    d3,-(a1)
  141.         dbf    d2,dsprl
  142.         move.l    a1,(a0)
  143. vol0:        moveq.l    #63,d2
  144.         sub.b    d4,d2
  145.         beq.s    enddeql
  146.         subq.b    #1,d2
  147.         moveq.l    #0,d3
  148. dsprl2:        move.l    d3,-(a1)
  149.         dbf    d2,dsprl2
  150. enddeql:    move.b    d4,(a2)
  151. enddeql2:    movem.l    (sp)+,a2/d0-d4
  152. enddeql3:    rts
  153.  
  154.         end
  155.