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 >
Wrap
Text File
|
1990-05-03
|
9KB
|
406 lines
; MED - music editor by Teijo Kinnunen 1989, 1990
; V2.00 screen updating assembler-routines
xref _soittimennum
xref _PaivitaSoittimennimi
xref _piirtorp
xref _wrp
xref _tmpA
xref _piirtobm
xref _GfxBase
xref _klevx
xref _nykyinenosio
xref _screen
xref _soittorivi
xref _soittolohko
xref _TulostaLohkoJaSoitin
xref _TulostaSoittoLohkot
xref _kursorix
xref _lohko
xref _topaz8 ;fontti
xref _plane0ptr ;bittikartta
xref _firstdisptrk
xref _specialupd
xref _SpecialUpdate
xref _currtrk
xref _currpos
xref _editline
xdef _SeurSoitin
xdef _EdSoitin
xdef _Korosta
xdef _PaivitaNaytto
xdef _NaytaKursori
code
_SeurSoitin: ;next instrument (by the way, this was my first useful
move.w _soittimennum,d0 ;assembler routine!!!)
cmp.w #31,d0
beq.b poisss
addq.w #1,_soittimennum
paivss: jsr _PaivitaSoittimennimi(pc)
poisss: rts
_EdSoitin: ;previous one
move.w _soittimennum,d0
cmp.w #1,d0
beq.b poisss
subq.w #1,_soittimennum
bra.b paivss
_NaytaKursori: ;show the cursor
movem.l d3-d4/a3/a6,-(sp)
clr.l d3
move.w _kursorix,d3 ;d3 = kx
clr.l d4
lea _klevx,a0
move.b 0(a0,d3.w),d4 ;d4 = klevx[kx]
lsl.w #3,d3 ;d3 = kx * 8
addq.w #4,d3 ;d3 = absx = kx * 8 + 4
add.w d3,d4 ;d4 = klevx[kx]+absx
movea.l _wrp,a1 ;a1 = wrp
movea.l a1,a3 ;a3 = wrp
move.b #4,24(a3) ;wrp->Mask = 4
movea.l _GfxBase,a6
moveq.l #2,d0
jsr -$162(a6) ; SetDrMd(wrp,COMPLEMENT);
move.l d3,d0
movea.l a3,a1
move.l #141,d1
jsr -$f0(a6) ; Move()
movea.l a3,a1
move.l d4,d0
move.l #141,d1
jsr -$f6(a6) ; Draw()
movea.l a3,a1
move.l d4,d0
move.l #131,d1
jsr -$f6(a6) ; Draw()
movea.l a3,a1
move.l d3,d0
move.l #131,d1
jsr -$f6(a6) ; Draw()
movea.l a3,a1
move.l d3,d0
move.l #140,d1
jsr -$f6(a6) ; Draw()
movea.l a3,a1
moveq.l #1,d0
jsr -$162(a6) ; SetDrMd(wrp,JAM2);
move.b #$ff,24(a3) ; wrp->Mask = 0xff
movem.l (sp)+,d3-d4/a3/a6
rts
_Korosta: ; a0 = gadgptr, d0 = tila *** Highlight gadgets!!!
movem.l d2-d4/a2/a6,-(sp)
movea.l a0,a2 ;save Gadgptr
move.w d0,d4 ;save state
move.w $26(a2),d1 ;gg_GadgetID
andi.w #$0f00,d1
lsr.w #8,d1
cmp.w _nykyinenosio,d1
bne.s kloppu
clr.b d3
move.w $26(a2),d1 ;gg_GadgetID
btst #12,d1 ;already highlighted?
beq.s tstv2 ;no..
tst.w d0 ;is lighted, should I highlight??
bne.s kloppu ;yes, yes, it is highlighted
bra.s rev ;remove highlighting
tstv2: tst.w d0 ;not highlighted, should I??
beq.s kloppu ;no..
rev: movea.l _wrp,a1
move.b #3,24(a1) ;wrp->Mask = 3 (no red!!!!!)
movea.l _GfxBase,a6
moveq.l #2,d0
jsr -$162(a6) ;SetDrMd(wrp,COMPLEMENT)
move.w 4(a2),d0 ;LeftEdge
ext.l d0
move.w 6(a2),d1 ;TopEdge
ext.l d1
move.l d0,d2
move.l d1,d3
add.w 8(a2),d2 ;Width
subq.w #1,d2
add.w 10(a2),d3 ;Height
subq.w #1,d3
movea.l _wrp,a1
jsr -$132(a6) ;RectFill()
movea.l _wrp,a1
move.b #$ff,24(a1) ;normal mask again
moveq.l #1,d0
jsr -$162(a6) ;SetDrMd(wrp,JAM2)
kloppu:
tst.w d4
beq.s gfalse
ori.w #$1000,$26(a2) ;GadgetID
bra.s exitk
gfalse:
andi.w #$0fff,$26(a2)
exitk: movem.l (sp)+,d2-d4/a2/a6
rts
_PaivitaNaytto: ;update screen
movem.l d2-d7/a2/a6,-(sp)
move.w _soittorivi,d7
move.w _soittolohko,d4 ;don't bother with these cryptic
movea.l _GfxBase,a6 ;comments below
cmp.w #63,d7 ;if(srivi > 63) srivi = 63
ble.s lt64
move.w #63,d7
lt64: move.w d7,d3
subq.w #7,d3 ;nykylin = srivi - 7
move.w d3,d5 ;mennytylospain = nykylin - entylin
sub.w entylin(pc),d5
move.w d3,entylin
cmp.w entsolo(pc),d4
bne.s pruus
cmp.w #1,d0 ;piirrauusi = TRUE
beq.s pruus
cmp.w #6,d5
bgt.s pruus
cmp.w #-6,d5
bge.s eipruus
pruus:
lea _lohko,a0
move.w d4,d0
lsl.w #2,d0
movea.l 0(a0,d0.w),a0
clr.w d0
move.b _firstdisptrk,d0
cmp.b (a0),d0 ;firstdisptrk > lohko[xx].numtracks
blt.s no0fdt
clr.b _firstdisptrk
move.w _currpos,_currtrk
no0fdt: moveq.l #14,d6 ;for(rivilaskin=0...
prl1: move.l d6,d0
move.w d7,d1
move.w d4,d2
bsr _PaivitaRivi
dbf d6,prl1
jsr _TulostaLohkoJaSoitin(pc)
jsr _TulostaSoittoLohkot(pc)
bra endpfl
eipruus:
cmp.w #1234,d0
bne.s eipk0
move.b #1,updedit
eipk0: movem.l a2/d2-d7,-(sp)
lea _piirtobm,a0
moveq.l #0,d0
movea.l a0,a1
moveq.l #0,d2
move.l #312,d4
move.l #$c0,d6
moveq.l #1,d7
lea _tmpA,a2
tst.w d5 ;if(mennytylospain > 0)...
ble.s oktst2
clr.l d1
move.w d5,d1
lsl.w #3,d1
moveq.l #0,d3
moveq.l #120,d5 ;siirretään 120 - 8 * mennytylöspäin pix.
sub.w d1,d5
jsr -$1e(a6) ;BltBitMap()
bra.s rf2
oktst2: tst.w d5 ;if(mennytylospain < 0)...
bge.s rf2
moveq.l #0,d1
neg.w d5
lsl.w #3,d5
move.w d5,d3
ext.l d3
moveq.l #120,d5 ;siirretään 120 - 8 * (-mennytylöspäin) pix
sub.w d3,d5
jsr -$1e(a6)
rf2: movem.l (sp)+,a2/d2-d7
tst.b updedit
beq.s eipk
clr.b updedit
move.w d4,d2
move.w d7,d1
move.w _editline,d0
sub.w d7,d0
addq.w #7,d0
bmi.s eipk
cmp.b #14,d0
bgt.s eipk
bsr.s _PaivitaRivi
eipk: tst.w d5
ble.s alle0 ;if(mennytylospain > 0):
move.w d5,d6
subq.w #1,d6
move.w d4,d2
loop2: moveq.l #14,d0
sub.w d6,d0
move.w d7,d1
bsr.s _PaivitaRivi
dbf d6,loop2
bra.s endpfl
alle0: tst.w d5
bge.s endpfl
clr.l d0
move.w d5,d6
not.w d6 ;sama kuin neg.w d6, subq.w #1,d6
move.w d4,d2
loop3: move.w d6,d0
move.w d7,d1
bsr.s _PaivitaRivi
dbf d6,loop3
endpfl: move.w d4,entsolo
lea _piirtobm,a0
clr.l d0
clr.l d1
movea.l _screen,a1
lea $b8(a1),a1
moveq.l #4,d2
moveq.l #77,d3
move.l #312,d4
moveq.l #120,d5
move.l #$c0,d6
moveq.l #1,d7
movea.l #0,a2
jsr -$1e(a6) ;BltBitMap()
tst.b _specialupd
beq.s noupd
jsr _SpecialUpdate(pc)
noupd: movem.l (sp)+,d2-d7/a2/a6
rts
entylin: dc.w 0
entsolo: dc.w 0
updedit: dc.w 0
_PaivitaRivi: ;d0 = rivin numero (0-14), d1 = soit. rivi ja d2 = lohko
movem.l d2-d7/a2-a3,-(sp) ;update line
moveq.l #0,d7 ;I was so lazy that I didn't translate the comments
move.w d0,d7
subq.w #7,d7
add.w d1,d7 ;relsr(d7) = srivi + (num - 7)
tst.w d7
blt.s blnk
cmp.w #63,d7
ble.s noblnk
blnk: move.w d0,d6
jsr -$e4(a6) ;WaitBlit() tehdään vasta nyt
movea.l _plane0ptr,a0
mulu.w #320,d6 ;alkuosoite
adda.l d6,a0
moveq.l #79,d0 ;80 pitkää sanaa = 320 tavua
clrlp: clr.l (a0)+
dbf d0,clrlp
movem.l (sp)+,d2-d7/a2-a3 ;ja pois....
rts
noblnk: move.l d7,d5
divu #10,d5
add.b #'0',d5
move.b d5,txt40
swap d5
add.b #'0',d5
move.b d5,txt40+1 ;kokoa numero
lea _lohko,a2 ;a2 = 1. lohkon osoite
lsl.w #2,d2
movea.l 0(a2,d2.w),a2 ;lohkon osoite taulukosta
clr.w d4
move.b (a2),d4 ;otetaan raitojen määrä
addq.l #4,a2 ;ohitetaan tulevaisuus....a2 = nyk.lohko
mulu #3,d4 ;yhden rivin pituus
mulu d4,d7 ;kerrottuna nykyisellä rivinumerolla
adda.l d7,a2 ;a2 = nyk. rivin alkuosoite
clr.w d4
move.b _firstdisptrk,d4
mulu #3,d4
adda.l d4,a2 ;vihdoin a2 = nyk. nuotin alkuosoite
clr.b d6 ;raitacnt
lea txt40+4,a3 ;mihin seur. mrk.
rloop: clr.b d1 ;ei ylempi soitin (vielä)
move.b (a2)+,d4 ;d4 = numero
move.b (a2)+,d3 ;d3 = extra (1. tavu)
lsl.w #8,d3
move.b (a2)+,d3 ;(2. tavu)
tst.b d4
beq.s noper ;jos periodi = 0...
btst #7,d4
beq.s eiyls ;ei soitin G-V
bclr #7,d4
move.b #16,d1 ;ylempi soitin
tst.b d4 ;jos nuottia ei jääkään jäljelle
beq.s noper
eiyls: clr.l d5
move.b d4,d5
subq.b #1,d5
lea namet(pc),a1
lsl.l #2,d5
adda.l d5,a1 ;nimen osoite
move.b (a1),(a3)
move.b 1(a1),1(a3)
move.b 2(a1),2(a3) ;kopsataan nimi
bra.s dspxtr
noper: move.b #'-',(a3) ;ei nimeä
move.b #'-',1(a3)
move.b #'-',2(a3) ;3 viivaa
dspxtr: lea hexat(pc),a1
move.w d3,d5 ;d5:een käsiteltäväksi
lsr.w #8,d5
lsr.w #4,d5
add.b d1,d5
move.b 0(a1,d5.w),4(a3) ;1. luku - lisätään koska ylsoitin on jo.
move.w d3,d5
lsr.w #8,d5
andi.w #$000f,d5
move.b 0(a1,d5.w),5(a3) ;2. luku
move.w d3,d5
lsr.w #4,d5
andi.w #$000f,d5
move.b 0(a1,d5.w),6(a3) ;3. luku
andi.w #$000f,d3 ;extraa ei enää tartte
move.b 0(a1,d3.w),7(a3)
adda.l #9,a3
addq.b #1,d6
cmp.b #4,d6 ;joka raita!!!
blt rloop
lea txt40(pc),a2 ;a2 = tekstin alku
move.w d0,d6 ;rivin numero dkuuteen
jsr -$e4(a6) ;WaitBlit() tehdään vasta nyt
dsptxt: ;****************************************************************
;**** This is the super-fast text rendering routine !!!!!! ****
;****************************************************************
mulu.w #320,d6 ;alkuosoite
movea.l _plane0ptr,a0 ;bitmapin alku
adda.l d6,a0
clr.w d2
clr.l d7
movea.l _topaz8,a1
move.w 38(a1),d7 ;Modulo -> d7
move.b 32(a1),d0 ;tf_LoChar -> d0
moveq.l #38,d1
charloop: move.b (a2)+,d2
cmp.b #' ',d2
beq.s nextchar
sub.b d0,d2 ;tf_LoChar pois
movea.l 34(a1),a3 ;tf_CharData
moveq.l #7,d5
move.b 0(a3,d2.w),(a0)
adda.l d7,a3 ;tf_Modulo lisätään
move.b 0(a3,d2.w),40(a0)
adda.l d7,a3
move.b 0(a3,d2.w),80(a0)
adda.l d7,a3
move.b 0(a3,d2.w),120(a0)
adda.l d7,a3
move.b 0(a3,d2.w),160(a0)
adda.l d7,a3
move.b 0(a3,d2.w),200(a0)
adda.l d7,a3
move.b 0(a3,d2.w),240(a0)
adda.l d7,a3
move.b 0(a3,d2.w),280(a0)
nextchar: addq.l #1,a0
dbf d1,charloop
;**** Ends here...quite short, isn't it?? **********************
movem.l (sp)+,d2-d7/a2-a3
rts ; huh huh !!!
txt40: dc.b ' '
spc40: dc.b ' '
hexat: dc.b '0123456789ABCDEFGHIJKLMNOPQRSTUV'
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 '
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 '
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 '
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 '
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 '
dc.b 'C-6 C#6 D-6 '
end