[comp.sources.amiga] v91i104: Bootmenu 1.0 - yet another ntsc/pal switcher, Part01/01

amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (05/18/91)

Submitted-by: "John Davis, chem dept, Uni of Canty, NZ" <CHEM194@cantva.canterbury.ac.nz>
Posting-number: Volume 91, Issue 104
Archive-name: utilities/bootmenu-1.0/part01

[ includes uuencoded executable and icon  ...tad ]

Bootmenu - YANPS (yet another ntsc/pal switcher). This program allows 
you to switch between NTSC and PAL if you have an obese agnus (8372).
Where it differs from the rest (Matt Dillon's BPD and Nico Francois
PALBoot) is that it allows for an interactive choice of options at 
boot time, via a graphical interface. Also, it gives you the option
of turning off ALL your expansion boards, allowing you to disable
your hard-disk (makes it harder for virii to attack it). Can also be
useful in that respect to allow testing of software on a 'bare bones'
machine (as it also turns off any expansion memory). 

Contains code that acts as an alternative to the 1mb chip ram patch
CBM's setpatch installs, curing the problems with the setpatch code
failing on a double-reboot.

Includes assembler source (Hisoft DevPac) - tested on 1.3 and 1.2 ROMs,
unknown if it works on 2.0 (though I somehow doubt it).

#!/bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 1 (of 1)."
# Contents:  bootmenu.doc bootmenu.s bootmenu.uu bootmenu0.uu
# Wrapped by tadguy@ab20 on Fri May 17 21:45:16 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'bootmenu.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bootmenu.doc'\"
else
echo shar: Extracting \"'bootmenu.doc'\" \(10456 characters\)
sed "s/^X//" >'bootmenu.doc' <<'END_OF_FILE'
XBootMenu v1.0
XBy J davis
X09/1990
X
X
XSynopsis
X--------
X
XBootmenu - a program to allow graphical, interactive selection of NTSC/PAL
Xscreen  modes  and  the  enabling/disabling of hard-disks on every reboot.
XAlso  acts  as a partial replacement for CBM's setpatch program.  Includes
Xsource code in Assembler. Version 1.0 (first release). Author - John Davis
X
XPurpose
X-------
X
XBootMenu serves three purposes :-
X
XFirstly  it  allows  you to disable your auto-configing hard-disk (and all
Xother  auto-config  devices)  so  as to minimise the chances of a virus or
Xtrojan  horse  attacking  your  hard-disk when booting of a game disk, and
Xalso to help with running some games/demos that won't run with a hard-disk
Xactive.
X
XSecondly,  for people with the 1mb Fat Agnus (8372), it offers a choice of
XNTSC  and  PAL screen modes.  PAL is useful for in the USA, as it offers a
X25%  increase  in  screen  area (at the expense of being incompatible with
XNTSC  genlocks etc), whilst NTSC is useful for the rest of the world, as a
Xlot  of  games  are  written for NTSC sized screens, and the graphics only
Xdisplay  the correct aspect ratio in NTSC mode ( F/A-18 has to be the best
Xexample  of  this,  playing  f/a-18  on  a  PAL  screen  gives  you a very
X'squished' looking plane!)
X
XThirdly,  it  acts as an improved version of CBM's 'setpatch r' for people
Xwith  1mb  of  chip  memory.   CBM's  reboot handler will only survive ONE
Xreboot,  meaning  that if you use rad, reboot off a floppy and then reboot
Xagain, the contents of rad:  are GONE!!!  The reboot handler this installs
Xis  much  more  reliable  -  it  will  only fail if exec is so damaged the
Xmachine _must_ coldboot.
X
XWhat's  more,  since  it  'wedges' itself into the system you only need to
Xload  it  once - it will survive reboots, which is handy if you're playing
Xseveral games in a row and don't want to have to re-boot off the hard-disk
Xto reselect screen mode, all you do is reboot and BootMenu will let you
Xselect system options once again.
X
XInstallation
X------------
X
XJust  run  BootMenu  -  either  from the CLI or WorkBench (there's an icon
Xprovided,  though  it's no artistic masterpiece - I'm a programmer, not an
Xartist).  You should get a message saying that it's installed ok.
X
XIMPORTANT  -  do  NOT run the WorkBench1.3.2 Setpatch program with the 'r'
Xoption  (option  to  patch  for  rad:   and  1mb  ram)  after you have run
XBootMenu,  as  both  use  the same vector, and hence SetPatch will disable
XBootMenu!  You should run Setpatch _without_ the 'r' option!!
X
XAlso see the section 'virus checkers and BootMenu'
X
XUsage
X-----
X
XOnce it's installed, the next time you reboot you should be presented with
Xa  menu  screen  asking  whether  or  not  to  turn  off all the machine's
Xexpansion  boards.  Click the left button to select 'on' - this will leave
Xyour hard-disk, expansion memory etc enabled, or click the right button to
Xselect 'off' and turn off all the boards.  If you don't make any selection
Xwithin  10  seconds, the program will default to the 'no' option and leave
Xall your boards turned on.
X
XIf  you've  got  a 1mb Obese Agnus fitted, you'll then be presented with a
Xsecond  screen,  allowing a choice of PAL screen modes (click left button)
Xor  NTSC  (click  right  button).   Again,  if no choice is made within 10
Xseconds the program will default to PAL.
X
XThe machine will then carry on it's normal boot sequence ....
X
XTechnical Info
X--------------
X
XThis  program  uses  BOTH a coldcapture and coolcapture handler to do it's
Xwork.
X 
XThe  coldcapture  handler  is  simply  used  to  fix  the KickStart1.x bug
Xregarding  1mb  of  chip  mem.  The bug is that ks1.x treats any amount of
Xchip  memory  greater  than  512k  as  abnormal,  and will do a total cold
Xreboot,  clearing any cold/cool handlers.  Our cold-handler fixes this bug
Xin the rom, mainly so as to make our cool-handler actually get a chance to
Xrun, but as an added bonus it also acts as an improved version of setpatch
Xwith the 'r' option.
X
XThe  trouble  with  the CBM 'setpatch r' is that it doesn't stick around -
Xthe  coldcapture  vector they (and I) use gets cleared after use, hence if
Xyou  want  to survive multiple reboots you need to re-insert yourself into
Xthe  system.  Setpatch fails to do this and hence can fail to protect rad:
Xif  you  reboot twice in a row without reloading setpatch.  We DO reinsert
Xourselves, so unless the system is totally rebooted (as will happen if you
Xget  serious  enough  memory  corruption from a guru, or from some games),
XBootMenu should protect rad:.
X
X       Moral of the story - use BootMenu instead of setpatch r!!!
X
X  Note also that you should ONLY use BootMenu with KickStart 1.x!!!!
X
XThe  main  code  for  running  the screens etc is hung off the coolcapture
Xvector.   Being  on  coolcapture  as  opposed  to coldcapture allows us to
Xaccess  much  more  of  the system, as most of the machine is setup by the
Xtime coolcapture runs (this is important if we want to access exec.library
Xfunctions such as addmem)
X
XThe  menu driver runs all the hardware direct (intuition isn't in a usable
Xstate when coolcapture runs), using the window controls so as to make each
Xscreen  only  take up 1k for it's bitmap as opposed to the usual 21k.  All
Xscreens are only 1 plane deep (to conserve memory).  The copper is used to
Xrun  the screen itself, and also to get more than 1 colour off the 1 plane
Xscreen (reloading the palette on a per-scanline basis)
X
XThe  'core'  of  bootmenu (approx 2.5k of code, of which 2k is the bitmaps
Xfor the display, the actual code fits in approx 512k bytes!) installs onto
Xthe  bottom of the system stack, to avoid having to use kickmemptr to keep
Xour  memory allocated.  As the system stack is 6k, and only 1k is normally
Xused  this  shouldn't  be a problem (bootmenu uses the opposite end of the
Xstack  -  there's  still  at least 2k free).  If worse comes to worse and
Xthe  system  stack  grows  large (due to nested exceptions), all that will
Xhappen will be that BootMenu is overwritten - it will not cause the system
Xto  lock  up  in normal operation.  
X
XAs  we  can't  guarantee  the system stack will be in chip mem, the screen
Xdata  and  copper  list  is  swapped into and out of chip memory (swapping
Xpreserves  the  original memory contents - in case rad:  was somehow using
Xthe  target  memory ).  I haven't tested the effect of using MoveSSP (a pd
Xprogram  which places the system stack in fast ram) but I would guess it's
Xuse  would  prevent  BootMenu  from functioning (as expansion memory isn't
Xaccessible during the reboot process). 
X
XThe NTSC/PAL switch code simply alters the mode bit on the 1mb agnus.
X 
XThe  expansion board disable code is slightly more artistic - it scans for
Xexapansion  boards  waiting  to  be  configured , and either tells them to
Xshuptup  (if they support it) or configures them out of the way.  Hence by
Xthe  time  expansion.library  gets  run  there's  no boards around - hence
Xnothing gets config'd and added to the system.
X
XPeople who bother to read the included source code will notice it possible
Xto  build  a  version  that  will do an AddMem of non-autoconfig memory on
Xreboot.   This  was  done  so as to allow a friend (hi peter!) with an old
XRonin accelerator board to do a 'fake autoconfig' on his memory as opposed
Xto  being  forced  to  run a cli 'addmem' on every reboot.  As most memory
Xboards  are autoconfig nowdays, I haven't released the executable for that
Xversion  -  but  the  source  code be useful for anyone wanting to build a
Xsimple  memory  board.  Note that in the addmem code I set the priority of
Xthe  ram  to  -20  to make sure the 2090a driver uses the chipmem for it's
Xbuffers,  as  the  ronin memory is NOT capable of being DMA'd to.  If your
Xmemory  does support DMA, you should raise it's priority to >0 to make the
Xdriver and libraries use it, as this will maximise the amount of free chip
Xmem you will have after reboot.
X
XThe  program  was assembled using Hisoft's DevPac v2 - it should be fairly
Xsimle to alter the code to assemble under other assemblers however.
X
X
XVirus Checkers and BootMenu
X---------------------------
X
XAs  BootMenu hangs around by much the same mechanism as some viruses, most
Xgood  virus checkers will give you some warning when run about ColdCapture
Xand CoolCapture being set and the possibility that this represents a virus
Xin the system.
X
XIf  you  use  VMK,  you  will  actually be able to see an embedded message
Xconfirming  that  the  program  on cold|coolcapture is only BootMenu, with
Xother packages your actions may need to be different.
X
XIf  you're  at  all unsure that what's on the vectors may NOT be bootmenu,
Xyou  should  re-run  BootMenu,  as  this  will  over-write the vectors and
Xre-install  itself,  disabling  any  virus  that may have been using them.
XSimply  clearing  the  vectors  (thru  your  virus  checker)  will disable
Xbootmenu.
X
XAs  long  as  you get BootMenu's screens on reboot, you can be 90% sure no
Xvirus  is  using  the  coldcapture  and  coolcapture vectors - however you
Xshould still be cautious, as a virus could pass execution to my code if it
Xwanted  to  be  clever (haven't yet seen a virus that clever though!).
X
XAlso,   as   some  newer  viruses  stay  in  memory  _without_  using  the
Xcold/coolcapture vectors, so you should stil run virus checkers!
X
XGeneral Info
X------------
X
XI  would  like to thank all the people on AmigaINFO BBS who helped in beta
Xtesting  this  program,  especially  Peter.B  Mcintyre, John Nettleton and
XStephen  Webber,  all of whom were always only too willing to download new
Xtest  versions  at  weird  hours  to  help  out  with  testing the code on
Xdiffering machine setups.
X
XIf you have any questions about the program, or bug-reports, feel free to
Xcontact me.
X
XThe source code and executable are 100% public domain - use or abuse it as
Xyou  see fit.  If you'd like to use BootMenu on a commercial package, feel
Xfree,  though an acknowledgement (or a free copy of the package!) would be
Xnice!
X
XYou can contact me via the following routes :-
X 
Xmail on internet/usenet/bitnet/janet et al :
X  
X     chem194@canterbury.ac.nz 
X     "meaningful userid's are for wimps" :-)
X
XBBS email:
X 
X     'JOHN DAVIS' on      AmigaINFO BBS
X                          ph NZ+3-3371531
X                          24 hours a day 1200/2400 baud ccitt (v22/v22bis)
X
X
XSnail Mail if you must to:
X 
X     John Davis
X     31 Clarence St
X     ChristChurch 2
X     New Zealand
X
X
X
XENJOY!!!
X
END_OF_FILE
if test 10456 -ne `wc -c <'bootmenu.doc'`; then
    echo shar: \"'bootmenu.doc'\" unpacked with wrong size!
fi
# end of 'bootmenu.doc'
fi
if test -f 'bootmenu.s' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bootmenu.s'\"
else
echo shar: Extracting \"'bootmenu.s'\" \(21253 characters\)
sed "s/^X//" >'bootmenu.s' <<'END_OF_FILE'
X; BootMenu by J Davis 09/1990
X;
X; version 1.0 - beta 05
X;
X; assembled using HiSoft DevPac v2
X;
X; a little program to allow choice of NTSC/PAL screen mode
X; and expansion boards enabled/disabled at boot-time
X;
X; hangs around via both cool and coldcapture (see note 1)
X;
X; on each reboot puts up a menu allowing mode choice
X;
X; if there's no input in 10 secs, it defaults to the left most
X; option ( PAL and boards ON respectively )
X;
X;
X; note 1 : on machines with 1mb of chip, due to a slight oversight
X;          in the 1.3/1.2 kickstart reset routine, EVERY reboot causes
X;	   a TOTAL system rebuild. This of course makes it hard to make
X;          our code hang around.
X;
X;  	   Hence, we add a coldcapture handler that fixes the bug,
X;          then run our menu routine of coolcapture
X;
X;          Hence our coldcapt routine also acts as an IMPROVED setpatch R,
X;          in that two reboots in a row KILLS setpatch r, wheras ours,
X;          hangs around and hence protects RAD: properly. Therefore 
X;          DO NOT use SetPatch r and BootMenu at the same time!
X;
X;
X; note 2 : if do_addemem is set to 1, this will build a version
X;          that does an addmem of memory on the ronin 020 board
X;          on the fly, due to the ronin mem not being dma-able we
X;          have to set a low pri on the mem
X; 
X
X		; turn on debug info and turn off optimising
X		OPT	D+
X		OPT 	O-
X
X;======================
X
Xdo_addmem	equ	0	; flag for whether we do an addmem
X				; for hurricane board as well
X
X;======================
X
X
X	IFNE	do_addmem=1
X		FORMAT 0-,1-,2-
X		LIST
X		; building PBMC_BootMenu
X		NOLIST
X		output	PBMC_BootMenu
X	ELSEIF
X		FORMAT 0-,1-,2-
X		LIST
X		; building normal BootMenu
X		NOLIST
X		output	bootmenu
X	ENDC	
X
Xchip_addr	equ	$40000	; where we swap our chip data to/from
X
X; process structure offsets
X
Xpr_cli		equ	$0Ac	; process cli flag offset
Xpr_msgport	equ	$05c	; process msgport offset
X
X; execbase structure offsets
X
Xcoldcapture	equ	$02a
Xcoolcapture	equ	$02e
Xsysstklower	equ	$03a
X		
X; misc library functions
X
Xforbid		equ	-$084	; offsets for various exec and int calls
Xgetmsg		equ	-$174	; saves long includes and compile times
Xreplymsg	equ	-$17a
Xwaitport	equ	-$180
Xfindtask	equ	-$126
Xautoreq		equ	-$15c
Xopenlib		equ	-$228
Xcloselib	equ	-$19e
X
Xoutput		equ	-$003c		
Xwrite		equ	-$0030
X
Xopenlibrary	equ	-$0228
Xcloselibrary	equ	-$019e
X
Xaddmemlist 	equ	-618	
X
X; hardware equates 
X
Xpotgor		equ	$dff016
Xpotgo		equ	$dff034
X
Xintreq		equ	$dff09c
Xintreqr		equ	$dff01e
X
Xddfstart	equ	$dff092
Xddfstop		equ	$dff094
X
Xdiwstart	equ	$dff08e
Xdiwstop		equ	$dff090
X
Xbpl1mod		equ	$dff108
X
Xbplcon1		equ	$dff102
Xbplcon0		equ	$dff100
X
Xr_color0	equ	$0180
Xr_color1	equ	$0182
X
Xr_bpl1pth	equ	$00e0
Xr_bpl1ptl	equ	$00e2
X
Xcop1lch		equ	$dff080
Xcop1lcl		equ	$dff082
Xcopjmp1		equ	$dff088
X
Xdmacon		equ	$dff096
X
Xagnusdetect	equ	$dff004
X
X;==============================================================
X
Xstartup:	; startup code - determine if run from wb/cli etc
X	
X		move.l	$4,a6
X		move.l	#0,a1
X		jsr	findtask(a6)		; find ourselves
X
X		move.l	d0,a4			; save our process pointer
X
X		move.l	pr_cli(a4),d0
X		bne	fromdos			; was a DOS startup
X
X		; was started from WB
X
Xfromwb:		lea	pr_msgport(a4),a0
X		jsr	waitport(a6)		; wait for startup msg
X		lea	pr_msgport(a4),a0
X		jsr	getmsg(a6)		; get the wb msg
X
X		move.l	d0,wbmsg		; save pointer to our startup msg
X		move.l	#1,wb			; flag we started from wb
X
X		lea	intuiname,a1
X		move.l	#0,d0
X		move.l	$4,a6
X		jsr	openlib(a6) 		; open intuition lib
X
X		move.l	d0,a6			; save ibase
X		
X		move.l	#0,a0			; window to display in
X		move.l	#bodyitext1,a1		; body text
X		move.l	#gaditext,a2 		; postive text
X		move.l	#gaditext,a3  		; negative text
X		move.l	#0,d0			; pflags
X		move.l	#0,d1			; nflags
X		move.l	#370,d2			; width
X		move.l	#80,d3			; height
X		jsr	autoreq(a6)		; request user confirmation
X
X		move.l	a6,a1			; close intuition lib
X		move.l	$4,a6
X		jsr	closelib(A6)
X
X		bsr	install			; install ourselves
X
X		bra	exit
X
Xfromdos:	; was run from dos - output message to stdout
X
X		move.l	$4,a6
X		lea	dosname,a1
X		move.l	#$0,d0
X		jsr	openlibrary(a6)	 	; open dos library
X		
X		move.l	d0,a6		 	; save dos base
X		
X		jsr	output(a6)	 	; get handle on stdout
X		
X		move.l	d0,d1		 	; get file handle
X		move.l	#msgtxt,d2
X		move.l	#etext-msgtxt,d3
X		jsr	write(a6)	 	; put up a message saying we're installed
X		
X		move.l	$4,a6
X		move.l	a6,a1
X		jsr	closelibrary(a6) 	; close dos
X
X		bsr	install		
X
Xexit:		move.l	wb,d0
X		cmp.l	#0,d0			; was this a CLI invocation
X		beq	exit_dos		; DOS - just exit 
X
X		; workbench exit
X
X		move.l	$4,a6
X		jsr	forbid(a6)		; lock out everyone else
X
X		move.l	wbmsg,a1
X		jsr	replymsg(a6)		; reply to Wbstartup msg
X
Xexit_dos:	move.l	#0,d0			; return with return code 0
X		rts			
X
X;=================================================
X		even
Xwb:		dc.l	0			; run mode flag 0=dos process 1=wbprocess
Xwbmsg:		dc.l	0			; where we save our workbench msg
X
X		even
Xintuiname:	dc.b	"intuition.library",0
X		
X		even
Xdosname:	dc.b	"dos.library",0
X
X		; message we output for cli startup
X	IFNE	do_addmem=1
Xmsgtxt:		dc.b	27,"[33mBootMenu PBMC",27,"[0m, by J Davis 09/1990",10
X	ELSEIF
Xmsgtxt:		dc.b	27,"[33mBootMenu v1.0",27,"[0m, by J Davis 09/1990",10
X	ENDC
X		dc.b	"installed ok - menu will become active at next reboot",10,0
Xetext:		dc.b	0
X
X		even
X
X		; stuff for our autorequester for wb usage
Xbodyitext1:	dc.b	2	   	; front pen
X		dc.b	1	   	; back pen
X		dc.b	0	   	; draw mode
X		dc.w	40	   	; leftedge
X		dc.w	6	   	; topedge
X		dc.l	0	   	; textattr = default
X		dc.l	bodytext1  	; actual text
X		dc.l	bodyitext2	 	; next
X
Xbodyitext2:	dc.b	3	   	; front pen
X		dc.b	0	   	; back pen
X		dc.b	0	   	; draw mode
X		dc.w	120	   	; leftedge
X		dc.w	26	   	; topedge
X		dc.l	0	   	; textattr = default
X		dc.l	bodytext2  	; actual text
X		dc.l 	bodyitext3	; next
X
Xbodyitext3:	dc.b	3	   	; front pen
X		dc.b	0	   	; back pen
X		dc.b	0	   	; draw mode
X		dc.w	20	   	; leftedge
X		dc.w	36	   	; topedge
X		dc.l	0	   	; textattr = default
X		dc.l	bodytext3  	; actual text
X		dc.l	0	 	; next
X
Xgaditext:	dc.b	0		; front pen
X		dc.b	0		; back pen
X		dc.b	0		; draw mode
X		dc.w	4		; leftedge
X		dc.w	4		; topedge
X		dc.l	0		; textattr = default
X		dc.l	gadtext		; actual text
X		dc.l	0		; next
X		
X		; actual text for our requester
X
X	IFNE	do_addmem=1
Xbodytext1:	dc.b	"BootMenu PBMC, by J Davis 09/1990",0
X        ELSEIF
Xbodytext1:	dc.b	"BootMenu v1.0, by J Davis 09/1990",0
X	ENDC
Xbodytext2:	dc.b	"installed ok",0
Xbodytext3:	dc.b	"menu will become active at next reboot",0
Xgadtext:	dc.b	"Ok",0
X
X;=====================================================
X
X		even
X
Xinstall:	; this routine does the actual cold/coolcapture
X		; setting 
X
X		; works out where we're going to install to
X		; then copies handler code there and hooks vectors
X		
X		move.l	$4,a6
X		move.l	sysstklower(A6),a0			; get pointer to base of sys-stack
X		move.l	a0,codetarget				; save pointer to address
X
X		move.l	a0,a1
X		add.l	#coldcapt-captstart,a1			; point to coldcapt address
X		move.l	a1,coldcaptaddr				; save address
X
X		move.l	a0,a1
X		add  	#coolcapt-captstart,a1			; point to coolcapt addres
X		move.l	a1,coolcaptaddr				; save address
X
X		; now stuff our code away on the bottom of the system stack
X
X		lea	captstart(pc),a1			; code to copy
X		move.l	codetarget,a2	 			; where to copy to
X		move.l	#endcapt-captstart,d0 			; amount to copy
Xmloop:		move.b	(a1)+,(a2)+
X		dbf	d0,mloop
X
X		; now install a vector to the copied code in execbase.coldcapture
X		
X		move.l	$4,a6		   			; get execbase
X		move.l	coldcaptaddr,a0				; address of our coldcap routine
X		move.l	a0,coldcapture(a6) 			; set coldcapture
X
X		move.l	coolcaptaddr,a0				; address of our coolcap routine
X		move.l	a0,coolcapture(a6)			; set coolcapture to our code
X
X		; finally, recalc the execbase checksum
X		
X		lea	34(a6),a0			 	; start of checksummed area in execbase
X		move.w	#$16,d0		 			; number of checksummed words
X		move.w	#$0,d1		 			; clear counter
X	
Xsum:		add.w	(A0)+,d1	 			; sum execbase and update checksum
X		dbf	d0,sum
X	
X		not.w	d1
X		move.w	d1,82(a6)	 			; set new execbase checksum
X
X		; all done
X		rts
X
X		even
X		
Xcodetarget:	dc.l	0
Xcoolcaptaddr:	dc.l	0
Xcoldcaptaddr:	dc.l	0
X		
X;==============================================================
X;
X; our capture routines
X;
X; since this is going to stick around, we need to copy
X; it somewhere safe - like the SysStack area
X;
X; since we can't guarantee sys-stack will be in chip, we 
X; swap our bitplane data and copper list to chip mem on the fly
X; and then swap it back out ( in case rad: was using the bit where
X; we put our screen ! )
X
X		even
X
Xcaptstart:	
X
Xcoldcapt:	; this is our coldcapture routine - basically
X		; fixes the rebuild problem that SETPATCH R tries
X		; ( but fails ) to
X
X		; CAUTION!! This code is _specific to kickstart 1.x
X		; DO NOT USE WITH KickStart 2.x!!!
X
X		; important - reinsert our code into execbase, as coldcapt
X		; is cleared before it's called!! this is what setpatch r
X		; fails to do (and hence why it's not reliable)!
X
X		lea	coldcapt(pc),a0				; on entry A6=execbase
X		move.l	a0,coldcapture(a6)			; reset our vector in execbase - don't need to resum
X
X		; the following is a kludge to get around exec 34.x
X		; insisting on doing a system rebuild if >512k chip
X		; it is directly based on the rom code in ks1.2/1.3
X		
X		bchg	#1,$bfe001				; toggle led on
X		
X		move.l	$fc0010,d0				; get ks ver no.
X		cmp.l	$14(a6),d0				; compare with execbase ver
X		bne.s	rebuild_all
X
X		; the following is the bit that's wrong with ks1.x
X		; now fixed to work with 1mb chipmem
X		
X		move.l	$3e(a6),a3				; get maxchipmem
X		cmpa.l	#$100000,a3				; more than 1mb chip ?
X		bhi.s	rebuild_all
X		
X		add.l	#$1e,a5					; point A5 past the (incorrect) code we skip
X		jmp	(A5)					; carry on with rest of boot
X
Xrebuild_all:	jmp	$fc01ce					; jump to rom rebuild code
X
X;====================================================================
X
X		even
X
Xcoolcapt:	; our coolcapture routine - actually does the menus etc
X
X		movem.l	d0-d7/a0-a6,-(a7)			; save everything
X
X		bsr	swapmem					; first, copy our bitplane data and copper list to chip mem
X
X		move.w	#$ffff,potgo 				; set for button inputs on mouse
X		
X		; finished setting up - ask whether to turn boards off
X		
X		move.l	#chip_addr+board_mode-chipdata_start,a1	; address where bitplane data is copied to
X		bsr 	doscreen				; put up screen and wait for choice
X
X		btst	#0,d0
X		beq.s	next					; left mouse=leave on so skip
X
X		; user requested expansion board disable - do it
X
X		moveq.l	#$7,d1					; max no boards we fix = 8 
X
Xbchk:		move.w	$e80008,d0				; get flag byte from board
X		not.w	d0					; invert
X		btst.l	#14,d0					; see if board supports shut_up
X		beq.s	shut_up					; bit=0 means board shuts up ok
X
X		; board doesn't support shut up, so 
X		; config board to $200000 (only gap big enough for 8mb boards)
X		
X		move.w	#$0000,$e8004a  			; fake board out to $200000
X		move.w	#$2000,$e80048  
X		
X		bra.s	nboard					; carry on
X
Xshut_up:	move.b	#$ff,$e8004c    			; tell the board to shut up
X
Xnboard:		dbf	d1,bchk					; loop thru all boards
X
X		; now query for screen mode
Xnext:		; see if this machine has the 1mb Agnus
X
X		move.w	agnusdetect,d0
X		and.w	#$2000,d0
X		beq.s	no_8372					; doesn't have obese agnus - skip screen mode choice
X
X		; has the 1mb agnus, offer screen mode choice
X
X		move.l	#chip_addr+scr_mode-chipdata_start,a1	; address where bitplane data is copied to
X		bsr	doscreen				; put up screen and wait for choice
X
X		btst	#0,d0					; left mouse = PAL
X		beq.s	go_pal
X
X		move.w	#$0000,$dff1dc				; set NTSC mode on agnus
X		bra.s	no_8372
X
Xgo_pal:		move.w	#$0020,$dff1dc				; set PAL mode on agnus
X		
Xno_8372:	bsr	swapmem					; finally restore chipmem	
X
X	IFNE do_addmem=1 
X	
X		FORMAT	0-,1-,2-
X		LIST
X		; adding special addmem code!
X		NOLIST
X		
X		; Addmem the 32 bit mem on the Ronin 020 board
X		; into the system
X		;
X		; we add 1mb, starting at $600000
X
X		move.l	$4,a6		; get execbase
X		move.l	#$100000,d0	; amount of mem we're adding ( 1mb )
X		move.l	#$5,d1		; attributes ( memf_fast | memf_public )
X		move.l	#-20,d2		; pri of mem must be low so as to force HD to use chip!!!
X		move.l	#$600000,a0	; where the mem starts ( 6 mb )
X		move.l	#0,a1		; pointer to a name for this block 
X					; don't want one so pass NULL
X		jsr	addmemlist(a6)	; do the deed !!!			
X
X		; you need to be careful after this to NOT run the 
X		; ronin addmem prog - as otherwise you will get the 
X		; same block of mem added TWICE ( can you say 'guru' ? :-)
X	ENDC
X
X		movem.l	(A7)+,d0-d7/a0-a6			; get back all regs
X		rts
X
X
X; ===============================
X; this routine swaps chipdata into/out of a block of chipmem
X
Xswapmem:	lea	chipdata_start(pc),a0			; where to copy from
X		move.l	#chip_addr,a1				; where we copy to
X		move.l	#chipdata_end-chipdata_start,d0		; amount to copy
X
Xcm_loop:	move.b	(a0),d1					; we exchange data in and out
X		move.b	(a1),d2			
X		move.b	d2,(a0)+
X		move.b	d1,(a1)+
X		dbf	d0,cm_loop
X		
X		rts
X
X
X;====================================
X; this subroutine puts up the screen pointed to by a1
X; and return d0=0 for left mouse and d0<>0 for right mouse
X; also trashes d1
X
Xdoscreen:	; setup screen hardware
X
X		move.w	#$1200,bplcon0				; set for lores, 1 plane
X		move.w	#$0000,bplcon1
X		
X		move.w	#$0000,bpl1mod				; modulo = 0
X		
X		move.w	#$0038,ddfstart				; data fetch start
X		move.w	#$00d0,ddfstop 				; data fetch stop
X		
X		move.w	#$7081,diwstart				; display window start
X		move.w	#$89b0,diwstop				; display window stop
X		
X		move.l	a1,d0					; setup up copper list bitplane pointers
X		move.w	d0,chip_addr+screen_l-chipdata_start	; point cop1l load addr to right place
X		swap	d0
X		move.w	d0,chip_addr+screen_h-chipdata_start	; point cop1h load addr to right place
X
X		move.l	#chip_addr+ourcoplist-chipdata_start,cop1lch ; point copper at our copper list
X		
X		move.w	copjmp1,d0				; force copper to our list
X		
X		move.w	#%1000000110000000,dmacon		; enable bitplane and copper dma
X		
X		move.w	#10*50,d1				; 10 secs worth of vblanks before timeout
X
Xwaittof:	move.w	intreqr,d0
X		btst	#5,d0					; vblank int ?
X		beq.s	waittof					; wait until tof true
X	
X		move.w	#$0020,intreq				; clear int
X		
X		btst	#6,$bfe001				; left button down ?
X		beq.s	lmb
X		
X		btst	#10,potgor				; right button down
X		beq.s	rmb
X
X		subq.w	#$1,d1					; dec frame counter
X		cmp.w	#$0,d1					; time up ?
X		beq.s	lmb					; default to left mouse button
X		
X		bra.s	waittof		
X		
Xlmb:		moveq	#0,d0
X		bra.s	_exit_1
X			
Xrmb:		moveq	#1,d0
X
X_exit_1:	; debounce buttons to avoid 'fallthru' - wait for both buttons up
X
X		btst	#10,potgor
X		beq	_exit_1					; wait for user to let go of rmb
X		
X		btst	#6,$bfe001
X		beq	_exit_1					; wait for user to let go of rmb
X
X		; now delay 15 vblanks to allow buttons to settle
X		
X		move.w	#15,d2
X		
X_1waittof:	move.w	intreqr,d1
X		btst	#5,d1					; vblank int ?
X		beq.s	_1waittof				; wait until tof true
X	
X		move.w	#$0020,intreq				; clear int
X
X		subq.w	#1,d2					; dec delay counter
X		cmp.w	#$0,d2
X		bne	_1waittof
X		
X		move.w	#%0000000110000000,dmacon		; disable bitplane and copper dma
X
X		rts
X
X;=========================================
X
X		; message for people running VMK etc 
X
X		dc.b	"  BootMenu v1.0 J Davis - this is NOT a virus!!!  "
X		
X;=========================================
X
X		even
X
Xchipdata_start:
X		
Xourcoplist:	; the following copperlist runs our screen
X
X		dc.w	r_bpl1pth
Xscreen_h	dc.w	0		; set high bitplane address
X
X		dc.w	r_bpl1ptl
Xscreen_l	dc.w	0		; set low bitplane address
X
X		dc.w	r_color0
X		dc.w	$0026		; set background 
X
X		dc.w	$6f01,$ff00	; wait for top of our display
X		
X		dc.w	r_color1
X		dc.w	$0fff		; set fg 
X
X		dc.w	$7101,$ff00	; wait til after top line
X
X		dc.w	r_color1
X		dc.w	$0f08		; set fg 
X
X		dc.w	$7c01,$ff00	; wait for next bit of text
X
X		dc.w	r_color1
X		dc.w	$006c		; set fg
X
X		dc.w	$8801,$ff00	; wait for bottom line
X
X		dc.w	r_color1
X		dc.w	$0fff		; set fg
X
X		dc.w	$ffff,$fffe	; wait for next TOF
X		
X		; the following is the bit map for out first screen
X
Xboard_mode:	dc.l	$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$0000038C,$60000000,$0000000F,$E0000000,$00018000,$000FC000,$0000E000,$00000000,$00000000,$00000000
X		dc.l	$000006CE,$60000000,$00000006,$60000000,$00000000,$00066000,$00006000,$00000000,$71FDFC00,$00000000
X		dc.l	$0007EC6F,$67E00000,$00000006,$063DC3C7,$C3E383C7,$C00663C3,$CEC363E0,$00000000,$D8CCCC00,$00000000
X		dc.l	$07E00C6D,$E007E000,$00000007,$83666066,$66018666,$6007C660,$6766E600,$000000FD,$8CC0C0FC,$00000000
X		dc.l	$00000C6C,$E0000000,$00000006,$01C661E6,$63C18666,$60066661,$E66663C0,$0000FC01,$8CF0F000,$FC000000
X		dc.l	$0007E6CC,$67E00000,$00000006,$6367C666,$60618666,$60066666,$66066060,$00000001,$8CC0C000,$00000000
X		dc.l	$0000038C,$60000000,$0000000F,$E63603B6,$67C3C3C6,$600FC3C3,$BF03B7C0,$000000FC,$D8C0C0FC,$00000000
X		dc.l	$00000000,$00000000,$00000000,$000F0000,$00000000,$00000000,$00000000,$00000000,$71E1E000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$000007E0,$00004000,$00000006,$18C001E0,$07E00000,$7007C000,$00C00001,$E1E018C1,$E1E1E000,$00000000
X		dc.l	$00000330,$0000C000,$00000006,$19C00330,$03300000,$30036000,$00000003,$333031C3,$33333000,$00000000
X		dc.l	$00000331,$E1E1F331,$E3E33003,$30C00370,$03333000,$300331E3,$31C1F003,$733060C3,$33337000,$00000000
X		dc.l	$000003E3,$3330C3BB,$33333003,$30C003F0,$03E33000,$30033033,$30C30003,$F1F0C0C1,$F1F3F000,$00000000
X		dc.l	$00000333,$3330C35B,$F3333001,$E0C003B0,$03333003,$300330F3,$30C1E003,$B03180C0,$3033B000,$00000000
X		dc.l	$00000333,$3330D31B,$03333001,$E0C0C330,$0331E003,$30036331,$E0C03003,$306300C0,$60633000,$00000000
X		dc.l	$000007E1,$E1E06319,$E331D800,$C3F0C1E0,$07E0C001,$E007C1D8,$C1E3E001,$E1C603F1,$C1C1E000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00038000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
X		
X		; the following is the bitmap for our second screen
X		
Xscr_mode:	dc.l	$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$000007E0,$C7800000,$00000000,$00001E00,$00000000,$00410007,$00000000,$0000018C,$FC787800,$00000000
X		dc.l	$00000331,$E3000000,$00000000,$00003300,$00000000,$00630003,$00000000,$000001CC,$B4CCCC00,$00000000
X		dc.l	$0003F331,$E303F000,$00000000,$0000381E,$761E1E3E,$00771E1B,$1E000000,$0000FDEC,$30E180FC,$00000000
X		dc.l	$03F003E3,$330003F0,$00000000,$00001C33,$3B333333,$007F3337,$33000000,$00FC01BC,$30718000,$FC000000
X		dc.l	$00000303,$F3100000,$00000000,$00000730,$333F3F33,$006B3333,$3F000000,$0000019C,$301D8000,$00000000
X		dc.l	$0003F306,$1B33F000,$00000000,$00003333,$30303033,$00633333,$30000000,$0000FD8C,$30CCCCFC,$00000000
X		dc.l	$00000786,$1FF00000,$00000000,$00001E1E,$781E1E33,$00631E1D,$9E000000,$0000018C,$78787800,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$000007E0,$00004000,$00000006,$18C001E0,$07E00000,$7007C000,$00C00001,$E1E018C1,$E1E1E000,$00000000
X		dc.l	$00000330,$0000C000,$00000006,$19C00330,$03300000,$30036000,$00000003,$333031C3,$33333000,$00000000
X		dc.l	$00000331,$E1E1F331,$E3E33003,$30C00370,$03333000,$300331E3,$31C1F003,$733060C3,$33337000,$00000000
X		dc.l	$000003E3,$3330C3BB,$33333003,$30C003F0,$03E33000,$30033033,$30C30003,$F1F0C0C1,$F1F3F000,$00000000
X		dc.l	$00000333,$3330C35B,$F3333001,$E0C003B0,$03333003,$300330F3,$30C1E003,$B03180C0,$3033B000,$00000000
X		dc.l	$00000333,$3330D31B,$03333001,$E0C0C330,$0331E003,$30036331,$E0C03003,$306300C0,$60633000,$00000000
X		dc.l	$000007E1,$E1E06319,$E331D800,$C3F0C1E0,$07E0C001,$E007C1D8,$C1E3E001,$E1C603F1,$C1C1E000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00038000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000,$00000000
X		dc.l	$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff,$ffffffff
X
Xchipdata_end:
X
Xendcapt:	
X
X		END
X
END_OF_FILE
if test 21253 -ne `wc -c <'bootmenu.s'`; then
    echo shar: \"'bootmenu.s'\" unpacked with wrong size!
fi
# end of 'bootmenu.s'
fi
if test -f 'bootmenu.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bootmenu.uu'\"
else
echo shar: Extracting \"'bootmenu.uu'\" \(5981 characters\)
sed "s/^X//" >'bootmenu.uu' <<'END_OF_FILE'
Xbegin 666 bootmenu
XM```#\P`````````!``````````````,I```#Z0```RDL>0````0B?`````!.0
XMKO[:*$`@+`"L9@``@D'L`%Q.KOZ`0>P`7$ZN_HPCP````0@C_`````$```$$Q
XM0_D```$,(#P`````+'D````$3J[]V"Q`('P`````(GP```&.)'P```'*)GP`A
XM``'*(#P`````(CP`````)#P```%R)CP```!03J[^I").+'D````$3J[^8F$`^
XM`:1@``!`+'D````$0_D```$>(#P`````3J[]V"Q`3J[_Q"(`)#P```$J)CP`P
XM``!B3J[_T"QY````!").3J[^8F$``6(@.0```02PO`````!G```6+'D````$6
XM3J[_?")Y```!"$ZN_H8@/`````!.=0``````````:6YT=6ET:6]N+FQI8G)A5
XM<GD`9&]S+FQI8G)A<GD`&ULS,VU";V]T365N=2!V,2XP&ULP;2P@8GD@2B!$S
XM879I<R`P.2\Q.3DP"FEN<W1A;&QE9"!O:R`M(&UE;G4@=VEL;"!B96-O;64@G
XM86-T:79E(&%T(&YE>'0@<F5B;V]T"@````(!````*``&`````````=X```&BX
XM`P````!X`!H````````"`````;8#`````!0`)`````````(-````````````8
XM!``$`````````C0`````0F]O=$UE;G4@=C$N,"P@8GD@2B!$879I<R`P.2\Q=
XM.3DP`&EN<W1A;&QE9"!O:P!M96YU('=I;&P@8F5C;VUE(&%C=&EV92!A="!N3
XM97AT(')E8F]O=`!/:P``+'D````$(&X`.B/(```"K")(T_P`````(\D```*T;
XM(DC2_``V(\D```*P0_H`5"1Y```"K"`\```)[!394<C__"QY````!"!Y```"^
XMM"U(`"H@>0```K`M2``N0>X`(C`\`!8R/```TEA1R/_\1D$]00!23G4`````:
XM``````````!!^O_^+4@`*@AY``$`O^`!(#D`_``0L*X`%&84)FX`/K?\`!``?
XM`&((V_P````>3M5.^0#\`<Y(Y__^80``@#/\__\`W_`T(GP`!``P80``C`@`8
XM``!G+G(',#D`Z``(1D`(```.9Q(S_````.@`2C/\(```Z`!(8`@3_`#_`.@`Z
XM3%')_]8P.0#?\`0"0"``9R(B?``$!!AA``!""````&<*,_P```#?\=Q@"#/\N
XM`"``W_'<80``"$S??_].=4'Z`2XB?``$```@/```"``2$!01$,(2P5'(__9.9
XM=3/\$@``W_$`,_P```#?\0(S_````-_Q"#/\`#@`W_"2,_P`T`#?\)0S_'"!8
XM`-_PCC/\B;``W_"0(`DSP``$``9(0#/```0``B/\``0```#?\(`P.0#?\(@SP
XM_(&``-_PEC(\`?0P.0#?\!X(```%9_0S_``@`-_PG`@Y``8`O^`!9Q0(.0`*J
XM`-_P%F<.4T&R?```9P)@SG``8`)P`0@Y``H`W_`69P#_]@@Y``8`O^`!9P#_/
XMZC0\``\R.0#?\!X(`0`%9_0S_``@`-_PG%-"M'P``&8`_^0S_`&``-_PEDYU*
XM("!";V]T365N=2!V,2XP($H@1&%V:7,@+2!T:&ES(&ES($Y/5"!A('9I<G5S;
XM(2$A("``X````.(```&``"9O`?\``8(/_W$!_P`!@@\(?`'_``&"`&R(`?\`*
XM`8(/______[_________________________________________________G
XM____````````````````````````````````````````````````````````]
XM``````````````````````````````````````````````````````.,8```O
XM``````_@``````&````/P````.`````````````````````&SF`````````&9
XM8```````````!F````!@``````!Q_?P````````'[&]GX```````!@8]P\?#/
XMXX/'P`9CP\[#8^``````V,S,```````'X`QMX`?@``````>#9F!F9@&&9F`'T
XMQF!G9N8`````_8S`P/P````````,;.`````````&`<9AYF/!AF9@!F9AYF9CV
XMP```_`&,\/``_``````'YLQGX```````!F-GQF9@889F8`9F9F8&8&`````!M
XMC,#```````````.,8`````````_F-@.V9\/#QF`/P\._`[?`````_-C`P/P`0
XM``````````````````````\```````````````````````!QX>``````````!
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM````````````````````````````````````````!^```$``````!AC``>`'M
XMX```<`?```#```'AX!C!X>'@``````````,P``#```````89P`,P`S```#`#_
XM8``````#,S`QPS,S,``````````#,>'A\S'CXS`#,,`#<`,S,``P`S'C,<'P5
XM`W,P8,,S,W```````````^,S,,.[,S,P`S#``_`#XS``,`,P,S##``/Q\,#!F
XM\?/P``````````,S,S##6_,S,`'@P`.P`S,P`S`#,/,PP>`#L#&`P#`SL```\
XM```````#,S,PTQL#,S`!X,##,`,QX`,P`V,QX,`P`S!C`,!@8S``````````X
XM!^'AX&,9XS'8`,/PP>`'X,`!X`?!V,'CX`'AQ@/QP<'@````````````````/
XM``````````````.`````````````````````````````````````````````#
XM`````````````````````````````````````````````````````````````
XM``````````````````````````````#_____________________________J
XM____________________________________________________________3
XM_________________P``````````````````````````````````````````S
XM`````````````````````````````````````````````````````````````
XM```````'X,>````````````>````````00`'`````````8S\>'@`````````-
XM`S'C````````````,P```````&,``P````````',M,S,`````````_,QXP/P&
XM`````````#@>=AX>/@!W'AL>``````#][##A@/P``````_`#XS,``_``````)
XM```<,SLS,S,`?S,W,P````#\`;PP<8``_````````P/S$```````````!S`S(
XM/S\S`&LS,S\```````&<,!V``````````_,&&S/P`````````#,S,#`P,P!CQ
XM,S,P``````#]C##,S/P````````'AA_P```````````>'G@>'C,`8QX=G@``>
XM`````8QX>'@`````````````````````````````````````````````````U
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM``````````````````````````````````````````````````````?@``!`G
XM``````88P`'@!^```'`'P```P``!X>`8P>'AX``````````#,```P``````&3
XM&<`#,`,P```P`V```````S,P,<,S,S```````````S'AX?,QX^,P`S#``W`#[
XM,S``,`,QXS'!\`-S,&##,S-P``````````/C,S##NS,S,`,PP`/P`^,P`#`#W
XM,#,PPP`#\?#`P?'S\``````````#,S,PPUOS,S`!X,`#L`,S,`,P`S#S,,'@`
XM`[`Q@,`P,[```````````S,S,-,;`S,P`>#`PS`#,>`#,`-C,>#`,`,P8P#`\
XM8&,P``````````?AX>!C&>,QV`##\,'@!^#``>`'P=C!X^`!X<8#\<'!X```"
XM```````````````````````````#@```````````````````````````````#
XM`````````````````````````````````````````````````````````````
XM````````````````````````````````````````````________________T
XM_____________________________________P```^P````6`````````"P`5
XM```V````/````%H```!@````9@```*(```"Z````V@```/0```&:```!G@``V
XM`:X```&R```!P@```=8```)$```"4@```EX```)H```"@````HH````````#Q
XM\`````%W8@`````!!`````%L;6(````$*`````%R;6(````$+`````%S=6T`_
XM```"G@````%B8VAK```#$`````%E>&ET````V`````%N97AT```#/`````)E%
XM=&5X=````````8P````";6QO;W````````)R`````G=B;7-G```````!"```:
XM``)F<F]M=V(``````!H````"9V]?<&%L``````-B`````FUS9W1X=``````!L
XM*@````)N8F]A<F0``````S@````"7V5X:71?,0````0N`````F-M7VQO;W``E
XM```#A`````)D;W-N86UE`````1X````"96YD8V%P=`````RD`````F9R;VUDZ
XM;W,`````F@````)G861T97AT`````C0````":6YS=&%L;`````(X`````FYOW
XM7S@S-S(````#:@````)S:'5T7W5P`````S`````"<W1A<G1U<```````````R
XM`G-W87!M96T````#=`````)W86ET=&]F`````_8````"8V]L9&-A<'0```*XR
XM`````F-O;VQC87!T```"[@````)D;W-C<F5E;@```Y(````"97AI=%]D;W,`2
XM``#\`````F=A9&ET97AT```!R@````)S8W)?;6]D90``"+P````"<V-R965NW
XM7V@```2F`````G-C<F5E;E]L```$J@````-?,7=A:71T;V8```````1*````+
XM`V)O9'ET97AT,0```````=X````#8F]D>71E>'0R```````"``````-B;V1YA
XM=&5X=#,```````(-`````V-A<'1S=&%R=````````K@````#:6YT=6EN86UEG
XM```````!#`````-B;V%R9%]M;V1E``````34`````V)O9'EI=&5X=#$`````$
XM`8X````#8F]D>6ET97AT,@`````!H@````-B;V1Y:71E>'0S``````&V````,
XM`V-O9&5T87)G970``````JP````#;W5R8V]P;&ES=``````$I`````-R96)U#
XM:6QD7V%L;`````+H`````V-H:7!D871A7V5N9```#*0````#8V]L9&-A<'1AP
XM9&1R```"M`````-C;V]L8V%P=&%D9'(```*P````!&-H:7!D871A7W-T87)TD
X.``````2D`````````_)L)
X``
Xend
Xsize 4244
END_OF_FILE
if test 5981 -ne `wc -c <'bootmenu.uu'`; then
    echo shar: \"'bootmenu.uu'\" unpacked with wrong size!
fi
# end of 'bootmenu.uu'
fi
if test -f 'bootmenu0.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'bootmenu0.uu'\"
else
echo shar: Extracting \"'bootmenu0.uu'\" \(532 characters\)
sed "s/^X//" >'bootmenu0.uu' <<'END_OF_FILE'
Xbegin 666 bootmenu.info
XMXQ```0``````R`!@`",`$0`%``,``0`CNC``````````````````````````F
XM`````R0`(H00`````````6X```!5``&Z>`````````^@````+@%R`)?__P``Y
XM```"0`)_``%=!```````P!*`````````````6@`H_____P`!____Z0``````<
XM`````",`$``"``&\.`,```````!__\````!_X<````!_X<````!_X<````!_*
XM_\````````````````````/ZJ/````/U1'@```/JHC@```/5<1@```.J__@`4
XM``-5__@```*K__@```/___@``````````/____^``/_____``/_____@`/__^
XM___@`/_____@`/_____@`/_____@`/P']0_@`/P.ZH?@`/P=U4?@`/P[BJ?@1
XD`/QW``?@`/SN``?@`,W<``?@`/P```?@``````````````$`?
X``
Xend
Xsize 351
END_OF_FILE
if test 532 -ne `wc -c <'bootmenu0.uu'`; then
    echo shar: \"'bootmenu0.uu'\" unpacked with wrong size!
fi
# end of 'bootmenu0.uu'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
Mail comments to the moderator at <amiga-request@uunet.uu.net>.
Post requests for sources, and general discussion to comp.sys.amiga.misc.