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-newscr.a < prev    next >
Text File  |  1990-05-03  |  9KB  |  406 lines

  1. ;    MED - music editor by Teijo Kinnunen 1989, 1990
  2. ;    V2.00 screen updating assembler-routines
  3.     xref    _soittimennum
  4.     xref    _PaivitaSoittimennimi
  5.     xref    _piirtorp
  6.     xref    _wrp
  7.     xref    _tmpA
  8.     xref    _piirtobm
  9.     xref    _GfxBase
  10.     xref    _klevx
  11.     xref    _nykyinenosio
  12.     xref    _screen
  13.     xref    _soittorivi
  14.     xref    _soittolohko
  15.     xref    _TulostaLohkoJaSoitin
  16.     xref    _TulostaSoittoLohkot
  17.     xref    _kursorix
  18.     xref    _lohko
  19.     xref    _topaz8        ;fontti
  20.     xref    _plane0ptr    ;bittikartta
  21.     xref    _firstdisptrk
  22.     xref    _specialupd
  23.     xref    _SpecialUpdate
  24.     xref    _currtrk
  25.     xref    _currpos
  26.     xref    _editline
  27.     xdef    _SeurSoitin
  28.     xdef    _EdSoitin
  29.     xdef    _Korosta
  30.     xdef    _PaivitaNaytto
  31.     xdef    _NaytaKursori
  32.     code
  33. _SeurSoitin:    ;next instrument (by the way, this was my first useful
  34.     move.w    _soittimennum,d0    ;assembler routine!!!)
  35.     cmp.w    #31,d0
  36.     beq.b    poisss
  37.     addq.w    #1,_soittimennum
  38. paivss:    jsr    _PaivitaSoittimennimi(pc)
  39. poisss:    rts
  40. _EdSoitin:    ;previous one
  41.     move.w    _soittimennum,d0
  42.     cmp.w    #1,d0
  43.     beq.b    poisss
  44.     subq.w    #1,_soittimennum
  45.     bra.b    paivss
  46. _NaytaKursori:    ;show the cursor
  47.     movem.l    d3-d4/a3/a6,-(sp)
  48.     clr.l    d3
  49.     move.w    _kursorix,d3        ;d3 = kx
  50.     clr.l    d4
  51.     lea    _klevx,a0
  52.     move.b    0(a0,d3.w),d4        ;d4 = klevx[kx]
  53.     lsl.w    #3,d3            ;d3 = kx * 8
  54.     addq.w    #4,d3            ;d3 = absx = kx * 8 + 4
  55.     add.w    d3,d4            ;d4 = klevx[kx]+absx
  56.     movea.l    _wrp,a1            ;a1 = wrp
  57.     movea.l    a1,a3            ;a3 = wrp
  58.     move.b    #4,24(a3)        ;wrp->Mask = 4
  59.     movea.l    _GfxBase,a6
  60.     moveq.l    #2,d0
  61.     jsr    -$162(a6)    ; SetDrMd(wrp,COMPLEMENT);
  62.     move.l    d3,d0
  63.     movea.l    a3,a1
  64.     move.l    #141,d1
  65.     jsr    -$f0(a6)    ; Move()
  66.     movea.l    a3,a1
  67.     move.l    d4,d0
  68.     move.l    #141,d1
  69.     jsr    -$f6(a6)    ; Draw()
  70.     movea.l    a3,a1
  71.     move.l    d4,d0
  72.     move.l    #131,d1
  73.     jsr    -$f6(a6)    ; Draw()
  74.     movea.l    a3,a1
  75.     move.l    d3,d0
  76.     move.l    #131,d1
  77.     jsr    -$f6(a6)    ; Draw()
  78.     movea.l a3,a1
  79.     move.l    d3,d0
  80.     move.l    #140,d1
  81.     jsr    -$f6(a6)    ; Draw()
  82.     movea.l    a3,a1
  83.     moveq.l    #1,d0
  84.     jsr    -$162(a6)    ; SetDrMd(wrp,JAM2);
  85.     move.b    #$ff,24(a3)    ; wrp->Mask = 0xff
  86.     movem.l    (sp)+,d3-d4/a3/a6
  87.     rts
  88. _Korosta:    ; a0 = gadgptr, d0 = tila *** Highlight gadgets!!!
  89.     movem.l    d2-d4/a2/a6,-(sp)
  90.     movea.l    a0,a2            ;save Gadgptr
  91.     move.w    d0,d4            ;save state
  92.     move.w    $26(a2),d1        ;gg_GadgetID
  93.     andi.w    #$0f00,d1
  94.     lsr.w    #8,d1
  95.     cmp.w    _nykyinenosio,d1
  96.     bne.s    kloppu
  97.     clr.b    d3
  98.     move.w    $26(a2),d1        ;gg_GadgetID
  99.     btst    #12,d1            ;already highlighted?
  100.     beq.s    tstv2            ;no..
  101.     tst.w    d0            ;is lighted, should I highlight??
  102.     bne.s    kloppu            ;yes, yes, it is highlighted
  103.     bra.s    rev            ;remove highlighting
  104. tstv2:    tst.w    d0            ;not highlighted, should I??
  105.     beq.s    kloppu            ;no..
  106. rev:    movea.l    _wrp,a1
  107.     move.b    #3,24(a1)        ;wrp->Mask = 3 (no red!!!!!)
  108.     movea.l    _GfxBase,a6
  109.     moveq.l    #2,d0
  110.     jsr    -$162(a6)        ;SetDrMd(wrp,COMPLEMENT)
  111.     move.w    4(a2),d0            ;LeftEdge
  112.     ext.l    d0
  113.     move.w    6(a2),d1            ;TopEdge
  114.     ext.l    d1
  115.     move.l    d0,d2
  116.     move.l    d1,d3
  117.     add.w    8(a2),d2            ;Width
  118.     subq.w    #1,d2
  119.     add.w    10(a2),d3            ;Height
  120.     subq.w    #1,d3
  121.     movea.l    _wrp,a1
  122.     jsr    -$132(a6)        ;RectFill()
  123.     movea.l    _wrp,a1
  124.     move.b    #$ff,24(a1)        ;normal mask again
  125.     moveq.l    #1,d0
  126.     jsr    -$162(a6)        ;SetDrMd(wrp,JAM2)
  127. kloppu:    
  128.     tst.w    d4
  129.     beq.s    gfalse
  130.     ori.w    #$1000,$26(a2)            ;GadgetID
  131.     bra.s    exitk
  132. gfalse:
  133.     andi.w    #$0fff,$26(a2)
  134. exitk:    movem.l    (sp)+,d2-d4/a2/a6
  135.     rts
  136.  
  137. _PaivitaNaytto:        ;update screen
  138.     movem.l    d2-d7/a2/a6,-(sp)
  139.     move.w    _soittorivi,d7
  140.     move.w    _soittolohko,d4        ;don't bother with these cryptic
  141.     movea.l    _GfxBase,a6        ;comments below
  142.     cmp.w    #63,d7            ;if(srivi > 63) srivi = 63
  143.     ble.s    lt64
  144.     move.w    #63,d7
  145. lt64:    move.w    d7,d3
  146.     subq.w    #7,d3            ;nykylin = srivi - 7
  147.     move.w    d3,d5            ;mennytylospain = nykylin - entylin
  148.     sub.w    entylin(pc),d5
  149.     move.w    d3,entylin
  150.     cmp.w    entsolo(pc),d4
  151.     bne.s    pruus
  152.     cmp.w    #1,d0            ;piirrauusi = TRUE
  153.     beq.s    pruus
  154.     cmp.w    #6,d5
  155.     bgt.s    pruus
  156.     cmp.w    #-6,d5
  157.     bge.s    eipruus
  158. pruus:    
  159.     lea    _lohko,a0
  160.     move.w    d4,d0
  161.     lsl.w    #2,d0
  162.     movea.l    0(a0,d0.w),a0
  163.     clr.w    d0
  164.     move.b    _firstdisptrk,d0
  165.     cmp.b    (a0),d0            ;firstdisptrk > lohko[xx].numtracks
  166.     blt.s    no0fdt
  167.     clr.b    _firstdisptrk
  168.     move.w    _currpos,_currtrk
  169. no0fdt:    moveq.l    #14,d6            ;for(rivilaskin=0...
  170. prl1:    move.l    d6,d0
  171.     move.w    d7,d1
  172.     move.w    d4,d2
  173.     bsr    _PaivitaRivi
  174.     dbf    d6,prl1
  175.     jsr    _TulostaLohkoJaSoitin(pc)
  176.     jsr    _TulostaSoittoLohkot(pc)
  177.     bra    endpfl
  178. eipruus:
  179.     cmp.w    #1234,d0
  180.     bne.s    eipk0
  181.     move.b    #1,updedit
  182. eipk0:    movem.l    a2/d2-d7,-(sp)
  183.     lea    _piirtobm,a0
  184.     moveq.l    #0,d0
  185.     movea.l    a0,a1
  186.     moveq.l    #0,d2
  187.     move.l    #312,d4
  188.     move.l    #$c0,d6
  189.     moveq.l    #1,d7
  190.     lea    _tmpA,a2
  191.     tst.w    d5            ;if(mennytylospain > 0)...
  192.     ble.s    oktst2
  193.     clr.l    d1
  194.     move.w    d5,d1
  195.     lsl.w    #3,d1
  196.     moveq.l    #0,d3
  197.     moveq.l    #120,d5        ;siirretään 120 - 8 * mennytylöspäin pix.
  198.     sub.w    d1,d5
  199.     jsr    -$1e(a6)        ;BltBitMap()
  200.     bra.s    rf2
  201. oktst2:    tst.w    d5            ;if(mennytylospain < 0)...
  202.     bge.s    rf2
  203.     moveq.l    #0,d1
  204.     neg.w    d5
  205.     lsl.w    #3,d5
  206.     move.w    d5,d3
  207.     ext.l    d3
  208.     moveq.l    #120,d5        ;siirretään 120 - 8 * (-mennytylöspäin) pix
  209.     sub.w    d3,d5
  210.     jsr    -$1e(a6)
  211. rf2:    movem.l    (sp)+,a2/d2-d7
  212.     tst.b    updedit
  213.     beq.s    eipk
  214.     clr.b    updedit
  215.     move.w    d4,d2
  216.     move.w    d7,d1
  217.     move.w    _editline,d0
  218.     sub.w    d7,d0
  219.     addq.w    #7,d0
  220.     bmi.s    eipk
  221.     cmp.b    #14,d0
  222.     bgt.s    eipk
  223.     bsr.s    _PaivitaRivi
  224. eipk:    tst.w    d5
  225.     ble.s    alle0            ;if(mennytylospain > 0):
  226.     move.w    d5,d6
  227.     subq.w    #1,d6
  228.     move.w    d4,d2
  229. loop2:    moveq.l    #14,d0
  230.     sub.w    d6,d0
  231.     move.w    d7,d1
  232.     bsr.s    _PaivitaRivi
  233.     dbf    d6,loop2
  234.     bra.s    endpfl
  235. alle0:    tst.w    d5
  236.     bge.s    endpfl
  237.     clr.l    d0
  238.     move.w    d5,d6
  239.     not.w    d6    ;sama kuin neg.w d6, subq.w #1,d6
  240.     move.w    d4,d2
  241. loop3:    move.w    d6,d0
  242.     move.w    d7,d1
  243.     bsr.s    _PaivitaRivi
  244.     dbf    d6,loop3
  245. endpfl:    move.w    d4,entsolo
  246.     lea    _piirtobm,a0
  247.     clr.l    d0
  248.     clr.l    d1
  249.     movea.l    _screen,a1
  250.     lea    $b8(a1),a1
  251.     moveq.l    #4,d2
  252.     moveq.l    #77,d3
  253.     move.l    #312,d4
  254.     moveq.l    #120,d5
  255.     move.l    #$c0,d6
  256.     moveq.l    #1,d7
  257.     movea.l    #0,a2
  258.     jsr    -$1e(a6)            ;BltBitMap()
  259.     tst.b    _specialupd
  260.     beq.s    noupd
  261.     jsr    _SpecialUpdate(pc)
  262. noupd:    movem.l    (sp)+,d2-d7/a2/a6
  263.     rts
  264. entylin:    dc.w 0
  265. entsolo:    dc.w 0
  266. updedit:    dc.w 0
  267. _PaivitaRivi:    ;d0 = rivin numero (0-14), d1 = soit. rivi ja d2 = lohko
  268.     movem.l    d2-d7/a2-a3,-(sp)    ;update line
  269.     moveq.l    #0,d7    ;I was so lazy that I didn't translate the comments
  270.     move.w    d0,d7
  271.     subq.w    #7,d7
  272.     add.w    d1,d7    ;relsr(d7) = srivi + (num - 7)
  273.     tst.w    d7
  274.     blt.s    blnk
  275.     cmp.w    #63,d7
  276.     ble.s    noblnk
  277. blnk:    move.w    d0,d6
  278.     jsr    -$e4(a6)    ;WaitBlit() tehdään vasta nyt
  279.     movea.l    _plane0ptr,a0
  280.     mulu.w    #320,d6        ;alkuosoite
  281.     adda.l    d6,a0
  282.     moveq.l    #79,d0        ;80 pitkää sanaa = 320 tavua
  283. clrlp:    clr.l    (a0)+
  284.     dbf    d0,clrlp
  285.     movem.l    (sp)+,d2-d7/a2-a3    ;ja pois....
  286.     rts
  287. noblnk:    move.l    d7,d5
  288.     divu    #10,d5
  289.     add.b    #'0',d5
  290.     move.b    d5,txt40
  291.     swap    d5
  292.     add.b    #'0',d5
  293.     move.b    d5,txt40+1    ;kokoa numero
  294.     lea    _lohko,a2    ;a2 = 1. lohkon osoite
  295.     lsl.w    #2,d2
  296.     movea.l    0(a2,d2.w),a2    ;lohkon osoite taulukosta
  297.     clr.w    d4
  298.     move.b    (a2),d4        ;otetaan raitojen määrä
  299.     addq.l    #4,a2        ;ohitetaan tulevaisuus....a2 = nyk.lohko
  300.     mulu    #3,d4        ;yhden rivin pituus
  301.     mulu    d4,d7        ;kerrottuna nykyisellä rivinumerolla
  302.     adda.l    d7,a2        ;a2 = nyk. rivin alkuosoite
  303.     clr.w    d4
  304.     move.b    _firstdisptrk,d4
  305.     mulu    #3,d4
  306.     adda.l    d4,a2        ;vihdoin a2 = nyk. nuotin alkuosoite
  307.     clr.b    d6        ;raitacnt
  308.     lea    txt40+4,a3    ;mihin seur. mrk.
  309. rloop:    clr.b    d1        ;ei ylempi soitin (vielä)
  310.     move.b    (a2)+,d4    ;d4 = numero
  311.     move.b    (a2)+,d3    ;d3 = extra (1. tavu)
  312.     lsl.w    #8,d3
  313.     move.b    (a2)+,d3    ;(2. tavu)
  314.     tst.b    d4
  315.     beq.s    noper        ;jos periodi = 0...
  316.     btst    #7,d4
  317.     beq.s    eiyls        ;ei soitin G-V
  318.     bclr    #7,d4
  319.     move.b    #16,d1        ;ylempi soitin
  320.     tst.b    d4        ;jos nuottia ei jääkään jäljelle
  321.     beq.s    noper
  322. eiyls:    clr.l    d5
  323.     move.b    d4,d5
  324.     subq.b    #1,d5
  325.     lea    namet(pc),a1
  326.     lsl.l    #2,d5
  327.     adda.l    d5,a1        ;nimen osoite
  328.     move.b    (a1),(a3)
  329.     move.b    1(a1),1(a3)
  330.     move.b    2(a1),2(a3)    ;kopsataan nimi
  331.     bra.s    dspxtr
  332. noper:    move.b    #'-',(a3)    ;ei nimeä
  333.     move.b    #'-',1(a3)
  334.     move.b    #'-',2(a3)    ;3 viivaa
  335. dspxtr:    lea    hexat(pc),a1
  336.     move.w    d3,d5        ;d5:een käsiteltäväksi
  337.     lsr.w    #8,d5
  338.     lsr.w    #4,d5
  339.     add.b    d1,d5
  340.     move.b    0(a1,d5.w),4(a3)    ;1. luku - lisätään koska ylsoitin on jo.
  341.     move.w    d3,d5
  342.     lsr.w    #8,d5
  343.     andi.w    #$000f,d5
  344.     move.b    0(a1,d5.w),5(a3)    ;2. luku
  345.     move.w    d3,d5
  346.     lsr.w    #4,d5
  347.     andi.w    #$000f,d5
  348.     move.b    0(a1,d5.w),6(a3)    ;3. luku
  349.     andi.w    #$000f,d3    ;extraa ei enää tartte
  350.     move.b    0(a1,d3.w),7(a3)
  351.     adda.l    #9,a3
  352.     addq.b    #1,d6
  353.     cmp.b    #4,d6        ;joka raita!!!
  354.     blt    rloop
  355.     lea    txt40(pc),a2    ;a2 = tekstin alku
  356.     move.w    d0,d6        ;rivin numero dkuuteen
  357.     jsr    -$e4(a6)    ;WaitBlit() tehdään vasta nyt
  358. dsptxt:    ;****************************************************************
  359.     ;****  This is the super-fast text rendering routine !!!!!!  ****
  360.     ;****************************************************************
  361.         mulu.w    #320,d6        ;alkuosoite
  362.         movea.l    _plane0ptr,a0    ;bitmapin alku
  363.         adda.l    d6,a0
  364.         clr.w    d2
  365.         clr.l    d7
  366.         movea.l    _topaz8,a1
  367.         move.w    38(a1),d7    ;Modulo -> d7
  368.         move.b    32(a1),d0    ;tf_LoChar -> d0
  369.         moveq.l    #38,d1
  370. charloop:    move.b    (a2)+,d2
  371.         cmp.b    #' ',d2
  372.         beq.s    nextchar
  373.         sub.b    d0,d2        ;tf_LoChar pois
  374.         movea.l    34(a1),a3    ;tf_CharData
  375.         moveq.l    #7,d5
  376.         move.b    0(a3,d2.w),(a0)
  377.         adda.l    d7,a3        ;tf_Modulo lisätään
  378.         move.b    0(a3,d2.w),40(a0)
  379.         adda.l    d7,a3
  380.         move.b    0(a3,d2.w),80(a0)
  381.         adda.l    d7,a3
  382.         move.b    0(a3,d2.w),120(a0)
  383.         adda.l    d7,a3
  384.         move.b    0(a3,d2.w),160(a0)
  385.         adda.l    d7,a3
  386.         move.b    0(a3,d2.w),200(a0)
  387.         adda.l    d7,a3
  388.         move.b    0(a3,d2.w),240(a0)
  389.         adda.l    d7,a3
  390.         move.b    0(a3,d2.w),280(a0)
  391. nextchar:    addq.l    #1,a0
  392.         dbf    d1,charloop
  393.     ;****  Ends here...quite short, isn't it?? **********************
  394.     movem.l    (sp)+,d2-d7/a2-a3
  395.     rts            ; huh huh !!!
  396. txt40:    dc.b    '                                        '
  397. spc40:    dc.b    '                                        '
  398. hexat:    dc.b    '0123456789ABCDEFGHIJKLMNOPQRSTUV'
  399. namet:    dc.b    'C-1 C#1 D-1 D#1 E-1 F-1 F#1 G-1 G#1 A-1 A#1 H-1 '
  400.     dc.b    'C-2 C#2 D-2 D#2 E-2 F-2 F#2 G-2 G#2 A-2 A#2 H-2 '
  401.     dc.b    'C-3 C#3 D-3 D#3 E-3 F-3 F#3 G-3 G#3 A-3 A#3 H-3 '
  402.     dc.b    'C-4 C#4 D-4 D#4 E-4 F-4 F#4 G-4 G#4 A-4 A#4 H-4 '
  403.     dc.b    'C-5 C#5 D-5 D#5 E-5 F-5 F#5 G-5 G#5 A-5 A#5 H-5 '
  404.     dc.b    'C-6 C#6 D-6 '
  405.     end
  406.