*
                     
* 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

Takaisin

(C) Marko, Suomen Atari-sivut / ArkiSTo 2003