;+++++ Opening a super hires Screen
:+++++ Source by YRAGAEL (April 1993)

	section prg,code_c
	include "df1:sources/registres.s"

;*************** INDEX FONCTIONS ***************

openlib=-552
closelib=-414
allocmem=-198
freemem=-210
permit=-138
forbid=-132

;*************** PARAMETRES DE L'ECRAN ***************

nbplane=1
sizex=1280
sizey=256

startx=129				;depart horizontal du tracé
starty=45				;depart vertical du tracé

tracex=1280				;largeur de l'image a tracer à ...
					;... partir de startx

displayx=1280				;largeur de l'image a visualiser à ...
					;... partir de startdisplayx
displayy=sizey				;hauteur de l'image a visualiser à ...
					;... partir de starty

startdisplayx=129			;debut horizontal visible de l'image

stopx=displayx/4+startdisplayx-256	;fin horizontale visible de l'image 
stopy=displayy+starty-256		;fin verticale visible de l'image

ddf_strt=(startx-5)/2 
ddf_stop=ddf_strt+(tracex/8-8)

modulo_pair=(sizex-tracex)/8
modulo_impair=(sizex-tracex)/8

planesize=sizey*sizex/8

;*************** CONSTANTES ***************

;----- divers -----

execbase=$4
memory=2+$10000
copsize=32*4+10*4+8*nbplane+4

;32*4 (palette)
;10*4 (parametres ecran)
;8*nbplane (adresses bitplanes)
;4 (FFFFFFFE)

;*************** PROGRAMME PRINCIPAL ***************

	bsr.w init

;----- attente -----

boucle:
	btst #6,$bfe001
	bne boucle

	bsr fin
	rts

;*************** INITIALISATION ***************

init:

;----- forbid -----

	move.l execbase,a6
	jsr forbid(a6)

;----- reservation de la memoire copper -----

	move.l execbase,a6
	move.l #copsize,d0
	move.l #memory,d1
	jsr allocmem(a6)
	move.l d0,copadr

;----- creation de la copperlist -----

	move.l copadr,a0

	move.l #$01800000,(a0)+
	move.l #$01820FFF,(a0)+
	rept 30
	move.w d0,(a0)+
	addq.w #2,d0
	move.w #0,(a0)+
	endr

	move.w #$008E,(a0)+		;DIWSTRT
	move.w #starty*256+startdisplayx,(a0)+
	move.w #$0090,(a0)+		;DIWSTOP
	move.w #stopy*256+stopx,(a0)+
	move.w #$0100,(a0)+		;BPLCON0
	move.w #nbplane,d0
	ror.w #4,d0
	bset #9,d0
	bset #6,d0
	move.w d0,(a0)+
	move.w #$0102,(a0)+		;BPLCON1
	move.w #$0000,(a0)+
	move.w #$0104,(a0)+		;BPLCON2
	move.w #$0000,(a0)+
	move.w #$0092,(a0)+		;DDFSTRT
	move.w #ddf_strt,(a0)+
	move.w #$0094,(a0)+		;DDFSTOP
	move.w #ddf_stop,(a0)+
	move.w #$0108,(a0)+		;BPL1MOD
	move.w #modulo_pair,(a0)+
	move.w #$010A,(a0)+		;BPL2MOD
	move.w #modulo_impair,(a0)+
	move.l #$01FC0000,(a0)+

	move.l #plane0adr,d0
	move.w #$E0,(a0)+
	swap d0
	move.w d0,(a0)+
	move.w #$E2,(a0)+
	swap d0
	move.w d0,(a0)+

	move.l #$FFFFFFFE,(a0)

;modif DMA,...
	
	move.w #$03F0,dmacon		;couper tous les DMA
	move.l copadr,cop1lch		;adresse coplist1
	clr.w copjmp1			;copjump1
	move.w #$87C0,dmacon		;COPEN et BPLEN et BLTPRI et BLTEN

	rts

;*************** FIN DE PROGRAMME ***************

fin:	

;----- restaurer la copperlist dos -----

	move.l execbase,a6
	move.l #gfxname,a1
	jsr openlib(a6)
	move.l d0,a1
	move.l 38(a1),cop1lch
	clr.w copjmp1
	jsr closelib(a6)

;----- liberation de la memoire copper -----

	move.l copadr,a1
	move.l #copsize,d0
	jsr freemem(a6)

;----- restaurer les canaux DMA -----

	move.w #$83F0,dmacon

;----- permit -----

	jsr permit(a6)

	rts

;*************** VARIABLES ***************

plane0adr:	incbin "df1:graphics/superhires.raw"
copadr:		dc.l 0
gfxname:	dc.b "graphics.library",0
	even
