*
* Aloittaessani tekemään tätä alkumenua tarkoituksenani
* oli tehdä latausohjelma,jossa on 4-ääninen musiikkiru-
* tiini.Kiitos DEVPACIN debuggerin ja QUARTET-musiikki-
* ohjelman,onnistuinkin siinä vaihtelevalla menestyksel-
* lä.Varsinkin musiikkirutiinin liittäminen ohjelmaan
* tuotti vaikeuksia.
*
* -ILE-
*
*
* PS.Toivottavasti tästä listauksesta on jotain hyötyä
* aloitteleville assembler-ohjelmoijille
*********************************************************
*Diskettilehden nro 2/90
* alkumenu
*Versio 1.0 09/06/90
*********************************************************
paletti_alku equ $ff8240
******************************************************
musa_on MACRO
move.l prog_ptr,a6 *musiikkirutiinin käynnistys
move.l song_ptr,12(a6)
move.l vset_ptr,16(a6)
jsr 4(a6)
ENDM
******************************************************
musa_ei MACRO
move.l prog_ptr,a6 *musiikkirutiinin pysäytys
jsr 8(a6)
ENDM
******************************************************
mus_lat MACRO
pea env_str *pexec()
pea cmd_str *musiikkirutiinin lataus muistiin
pea prog_nm
move.w #3,-(sp)
move.w #$4b,-(sp)
trap #1
lea 16(sp),sp
ENDM
******************************************************
getrez:
move.w #4,-(sp) *getrez()
trap #14
addq.l #2,sp
oik_res:
cmp.b #2,d0 *onko mustavalkomonitori?
beq hi
cmp.b #0,d0 *onko low-resoluutio?
bne med
move.b #1,r_ok *lehden latauksen esto
bra co
med: cmp.b #1,d0 *onko medium-resoluutio?
beq co
*jos resoluutiota ei tunnistettu,niin poistutaan
*ohjelmasta
clr.w -(sp) *pterm()
trap #1
*asetellaan muuttujat ja osoittimet riippuen siitä
*onko käytössä mustavalko- vai värimonitori
co: move.w d0,res
move.w #0,rez
lea v_kuva+34,a5
move.l a5,kuva
lea v_kuva+2,a5
move.l a5,u_pal
move.l #160,offs
move.l #39,kerr
move.l #199,kier
bra main
hi: move.w d0,res
move.w #2,rez
lea mvkuva+34,a5
move.l a5,kuva
lea mvkuva+2,a5
move.l a5,u_pal
move.l #80,offs
move.l #19,kerr
move.l #399,kier
*********************************************
main:
movea.l sp,a5
move.l sp,pino *entinen pino-osoitin talteen
lea end,sp *uuden pinon alku
movea.l 4(a5),a5
move.l 12(a5),d0
add.l $14(a5),d0
add.l $1C(a5),d0
addi.l #$300,d0
move.l d0,-(sp)
move.l a5,-(sp)
clr.w -(sp)
move.w #$4A,-(sp) *mshrink()
trap #1 *siirretään gemdosin vapaan muistin
lea 12(sp),sp *alku ohjelman loppuun,jotteivat
*myöhemmin ladattavat ohjelmat sotke
*sitä
mus_lat
move.l d0,d1
add.l #256,d0
move.l d0,prog_ptr *musiikkirutiinin alkuosoite
move.l #$4000,-(sp)
move.l d1,-(sp)
clr.w -(sp)
move.w #$4A,-(sp) *mshrink()
trap #1
lea 12(sp),sp
move.l #0,-(sp)
move.w #$20,-(sp) *super()
trap #1 *vaihdetaan prosessori user-tilasta
addq.l #6,sp *supervisor-tilaan
move.l d0,vanha_ssp *entinen supervisor-pino talteen
bsr alkutoimet
bsr musta_paletti
bsr kuva_siirto
bsr paletti_uusi
bsr kuva_näyttö
musa_on
näppäin_luku:
*musiikkirutiini varaa suurimman osan ST:n tehosta,joten
*käyttöjärjestelmän omia näppäimistörutiineja ei voi käyttää.
*Onneksi rutiinissa on oma näppisluku rekisterin a6 kautta.
F1: cmp.b #$3b,(a6) *onko painettu näppäintä F1 ?
bne F2
musa_ei
bsr lehti_lat
musa_on
bra näppäin_luku
F2: cmp.b #$3c,(a6) *onko painettu näppäintä F2 ?
beq loppu
bra näppäin_luku
******************************************************
loppu:
musa_ei
bsr palautus
move.l vanha_ssp,-(sp)
move.w #$20,-(sp) *super()
trap #1 *takaisin user-tilaan
addq.l #6,sp
move.l pino,sp
clr.w -(sp)
move.w #$4c,-(sp) *pterm()
trap #1 *ohjelman lopetus
******************************************************
alkutoimet:
move.w #2,-(sp) *physbase()
trap #14
move.l d0,phybase
move.w #3,-(sp) *logbase()
trap #14
move.l d0,logbase
addq.l #4,sp
movea.l #paletti_alku,a5 * paletti talteen
lea vpal,a6
bsr pal_siirto
lea song,a2 * soitinten ja musiikin
move.l a2,song_ptr * alkuosoitteiden asetus
lea voice,a2
move.l a2,vset_ptr
rts
******************************************************
pal_siirto:
moveq.l #15,d0
pal: move.w (a5)+,(a6)+
dbf d0,pal
rts
******************************************************
musta_paletti:
movea.l #paletti_alku,a6
moveq.l #15,d0
mp: move.w #$0000,(a6)+
dbf d0,mp
rts
******************************************************
paletti_uusi:
movea.l #paletti_alku,a6 * mahtavat värit
move.l u_pal,a5
bsr pal_siirto
rts
******************************************************
kuva_siirto:
lea kuva_alue,a0
move.l a0,d0
clr.b d0
move.l d0,oma_kuva *kuvaruudun alkuosoite
move.w rez,-(sp)
move.l d0,-(sp)
move.l d0,-(sp)
move.w #5,-(sp) *setscreen()
trap #14
lea 12(sp),sp
rts
******************************************************
palautus:
move.w res,-(sp)
move.l phybase,-(sp)
move.l logbase,-(sp)
move.w #5,-(sp) *setscreen()
trap #14
lea 12(sp),sp
movea.l #paletti_alku,a6 * paletti takaisin
lea vpal,a5
bsr pal_siirto
rts
******************************************************
kuva_näyttö:
move.l oma_kuva,a0 *kuvaruudun alkuosoite
move.l oma_kuva,a2
move.l kuva,a1 *kuvan,joko mv tai värillisen alkuosoite
move.l kuva,a4
move.l kier,d6 *kuvaruudun rivien määrä
move.l kier,d3
dsilm:
move.l d3,d2
psilm: move.l a4,a1
move.l kerr,d5
esilm: move.l (a1)+,(a0)+
dbf d5,esilm
*move.l offs,d4 *liittämällä nämä rivit ohjelmaan
*lea d4(a0),a0 *ja muuttamalla muuttujien
dbf d2,psilm *(offs=40,kerr=9,kier=399) arvoja
*ohjelman alussa,saadaan aikaiseksi
*jännä efekti mustavalkomonitorilla
move.l offs,d4
adda.l d4,a4
adda.l d4,a2
move.l a2,a0
subq.l #1,d3
dbf d6,dsilm
rts
******************************************************
no_set:
bsr palautus
rts
******************************************************
me_set:
move.w rez,-(sp)
move.l #-1,-(sp)
move.l #-1,-(sp)
move.w #5,-(sp) *setscreen()
trap #14
move.w #-1,-(sp)
move.l oma_kuva,-(sp)
move.l oma_kuva,-(sp)
move.w #5,-(sp) *setscreen()
trap #14
lea 24(sp),sp
bsr paletti_uusi
rts
******************************************************
lehti_lat:
tst.b r_ok *onko lataus sallittu?
bne l_ohi
bsr no_set
lea tnimi,a5
pea str
pea str
move.l a5,-(sp)
clr.w -(sp)
move.w #$4B,-(sp) *pexec()
trap #1 *lehtiohjelman lataus
lea 16(sp),sp
bsr me_set
l_ohi:
rts
******************************************************
rez: dc.w 0 *menun aikana oleva resoluutio
res: dc.w 0 *alkuperäinen kuvaruututarkkuus eli resoluutio
r_ok: dc.b 0 *muuttuja,josta katsotaan voidaanko lehti ladata
var1: dc.b 0 *täytettä
var2: dc.w 0
logbase: dc.l 0
phybase: dc.l 0
oma_kuva: dc.l 0
kuva: dc.l 0
offs: dc.l 0
kerr: dc.l 0
kier: dc.l 0
u_pal: dc.l 0
vpal: ds.w 16
pino: dc.l 0
vanha_ssp: dc.l 0
prog_ptr: dc.l 0
song_ptr: dc.l 0
vset_ptr: dc.l 0
str: dc.l 0
prog_nm: dc.b "menu290.dt0",0
even
tnimi: dc.b "lehti.prg",0
even
env_str: dc.b 0,0 *musiikkirutiinin latauksessa tarvittavat
cmd_str: dc.b 0,0 *muuttujat
even
täyte: ds.b 256
kuva_alue: ds.b 32000
mvkuva: incbin "menu_290.pi3"
v_kuva: incbin "menu_290.pi1"
*
song: incbin "menu.4v"
voice: incbin "voice.set"
even
stack: ds.w 399
end: dc.w 0
end
|