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.