
************* Boot-Menu by GRC pour Boot-Master *************


** Programme destiné à être mis en boot et affichant un menu
** de 11 choix maxi

** Voir aussi son complément 'Loader.S'



menustart:
*---------------------------------------------------
	dc.b	"DOS",0
	dc.l	0,$370


menuad:
	movem.l d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6,-(a7)
*---------------------------------------------------


	move.l	#40960+(1024*2),d0
	move.l	#$10002,d1
	jsr	-198(a6)		; allocmem
	tst.l	d0
	beq.w	menu_oups
	lea	menumempos(pc),a1
	move.l	d0,(a1)			; sauve adresse mem 
	move.l	d0,4(a1)

	lea	menu_jmp(pc),a0
	move.l	d0,a5
	move.l	d0,a1
	move.l	#1024,d0
	jsr	-624(a6)		; copy mem

	jmp	(a5)
menu_jmp:

	move.l	a5,d7

	lea	menuecr(pc),a1		; routine calculant
	add.l	#1024*3,d7		; l'adresse des bitplans
	move.w	d7,6(a1)		; a mettre
	swap	d7			; dans la copperlist
	move.w	d7,2(a1)
	swap	d7
	add.l	#$3f00,d7
	move.w	d7,8+6(a1)
	move.w	d7,16+6(a1)
	swap	d7
	move.w	d7,8+2(a1)
	move.w	d7,16+2(a1)

	lea	menugrafname(pc),a1	; graphics.library
	jsr	-408(a6)		; openlib
	lea	grafbase(pc),a0
	move.l	d0,(a0)
	move.l	d0,a6



	lea	menumempos(pc),a0
	add.l	#1024,(a0)
	move.l	(a0),a0
	move.l	#2,d0			; 2 bitplans
	move.l	#320*2,d1		; 640 pixel large ecran
	move.l	#200,d2			; 200 hauteur ecran
	jsr	-390(a6)		; initbitmap
	move.l	menumempos(pc),a0
	move.l	a0,a1
	add.l	#1024*2,a1
	move.l	a1,8(a0)		; mem ecran dans structure
	add.l	#$3f00,a1
	move.l	a1,12(a0)

	move.l	menumempos(pc),a1
	add.l	#$100+1024,a1
	jsr     -198(a6)		; initrastport
	move.l	menumempos(pc),a1
	add.l	#$104+1024,a1
	move.l	menumempos(pc),(a1)
	lea	menumempos(pc),a0
	add.l	#$100+1024,(a0)


	move.w	#$0080,$dff096
	lea	menucopper(pc),a1
	move.l	a1,$32(a6)		; insere ma copper list
	move.w	#$8380,$dff096


	clr.l	d4			; initialise
	clr.l	d7			; les paramètre de la boucle
	move.b	menunumb(pc),d6		; affichant le menu
	add.b	#1,d6
	move.b	menuy(pc),d4
	lea	menufunc(pc),a4
	lea	menubootprogtext(pc),a3

	move.l	#1,d0
	bsr	menucoul		; pen 1

menucol=225

menuloop:				; la commence la folie
	move.l	#menubootprogfintext-menubootprogtext,d2
	move.l	#menucol-25,d3
	bsr	menuecris
	add.l	#menubootprogfintext-menubootprogtext,a3
	add.l	#12,d4
	add.b	#1,3(a4)

	cmp.b	#8,d7
	bne.s	menunumb_ok
	move.w	#"10",3(a4)

menunumb_ok:
	cmp.b	#9,d7
	bne.s	menunumb_ok2
	move.l	#" ESC",1(a4)
menunumb_ok2:
	cmp.b	#10,d7
	bne.s	menunumb_ok3
	move.l	#" DEL",1(a4)
menunumb_ok3:

	add.l	#1,d7
	cmp.b	d6,d7
	bne.s	menuloop


	move.l	menumempos(pc),a1
menu_adjust:
	move.l	#menucol-(16+5),d3
	move.b	menuy2(pc),d4
	bsr	menumove
	lea	menutitle(pc),a0
	move.l	#menufintitle-menutitle,d0
	bsr	menuecris2


	clr.b	$bfec01				; adresse du keyboard

menukey:
	clr.l	d1
	move.b	menunumb(pc),d1
	lea	menukey_table(pc),a0

	move.b	$bfec01,d0			; calcul de la touche
	not.b	d0				; reçu
	lsr.b	#1,d0

menukey_loop:					; boucle déterminant si
	cmp.b	(a0)+,d0			; la touche est correcte
	beq.s	menukey_ok
	dbra	d1,menukey_loop
	bra.s	menukey

menukey_ok:
	sub.b	#$50,d0
	move.l	d0,0.w				; on range le résultat
						; en adresse 0
						; pour que le 'LOADER' le
						; retrouve


*----------------------------------------------------------------

	move.l	4.w,a6
	move.l	menumempos2(pc),a1
	move.l	#40960+(1024*2),d0		; on libère la mem utilisée
	jsr	-210(a6)			; freemem

menu_oups:
	movem.l (a7)+,d0/d1/d2/d3/d4/d5/d6/d7/a0/a1/a2/a3/a4/a5/a6

menustopmenu:
	lea	menudosname(pc),a1
	jsr	-96(a6)				; findresident
	move.l	d0,a0
	move.l	$16(a0),a0
	moveq	#$00,d0

	rts					; bye



menucoul:

* dans d0 coul pen
	move.l	grafbase(pc),a6
	move.l	menumempos(pc),a1		; rastport
	jsr	-342(a6)			; setapen
	rts


menuecris:

* dans a0 pointeur text
* dans d2 nb lettre
* dans d3 coord x
* dans d4 coord y


	move.l	menumempos(pc),a1

	bsr.s	menumove
	move.l	a3,a0
	move.l	d2,d0				; nb lettres
	jsr	-60(a6)				; text()

	move.l	#6,d0
	move.l	a4,a0
	movem.l	d0/a0-a6,-(a7)
	move.l	#2,d0
	bsr.s	menucoul
	movem.l	(a7)+,d0/a0-a6

menuecris2:
	move.l	menumempos(pc),a1
	jsr	-60(a6)				; text()

	movem.l	d0/a0-a6,-(a7)
	move.l	#1,d0
	bsr.s	menucoul
	movem.l	(a7)+,d0/a0-a6

	rts

menumove:
	move.l	d3,d0
	move.l	d4,d1
	jsr	-240(a6)			; move x,y
	rts


* -- donnees copperlist -- *

 even
menucopper:
	dc.w	$0180,$0000

	dc.w	$0100,$a000,$0108,$0000
	dc.w	$0102,$0000,$010a,$0000
	dc.w	$008e,$2c81,$0090,$f4c1
	dc.w	$0092,$0038,$0094,$00d0
menuecr:
	dc.w	$00e0,$0007,$00e2,$0000
	dc.w	$00e4,$0007,$00e6,$0000
	dc.w	$00e8,$0007,$00ea,$3f00

menucouleur:
	dc.w	$0182,$0f80
menutable:
	dc.w	$6401,$fffe,$0182,$0fff,$0184,$0f00

	dc.w	$ffff,$fffe

menugrafname:
	dc.b	"graphics.library",0
menudosname:
	dc.b	"dos.library",0

menufunc:
	dc.b	"[ F1 ]"

menunumb:
	dc.b	11

menuy:
	dc.b	63
menuy2:
	dc.b	47

menukey_table:
	dc.b	$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$45,$46

menutitre:
menutitle:
	dc.b	"GRC PRESENTE SON MENU v1.2"
menufintitle:

* 19 caracteres

menulogiciel:
menubootprogtext:
	dc.b	" SALUT A FABRICE...."
menubootprogfintext:
menubootprogtext2:
	dc.b	" ET A MICHEL etc...."
menubootprogtext3:
	dc.b	" ET A OUI..........."
menubootprogtext4:
	dc.b	" ET A OUI..........."
menubootprogtext5:
	dc.b	" ET A OUI..........."
menubootprogtext6:
	dc.b	" ET A OUI..........."
menubootprogtext7:
	dc.b	" ET A OUI..........."
menubootprogtext8:
	dc.b	" ET A OUI..........."
menubootprogtext9:
	dc.b	" ETMFDN,MNFHV......."
menubootprogtext10:
	dc.b	" ETMFDN,MNFHV......."
menubootprogtext11:
	dc.b	" ET A OUI..........."
menubootprogtext12:
	dc.b	" ETMFDN,MNFHV......."
menubootprogtextfin:

menueffalong=*-menutitre

 even
grafbase:	dc.l	0
menumempos:	dc.l	0
menumempos2:	dc.l	0

	dc.b	"v1.4"
menuendboot:
	dcb.b	1024-(*-menustart),0


