Grub4dos Example Menus


The menu code below cannot just be cut and pasted into one large menu.lst file!

You need to just take the bits that you need!


EXAMPLES

The grub4dos menus and code snippets below should be copied into your own menu - DO NOT JUST COPY THIS WHOLE PAGE!

Please search this site for the relevant tutorials!

#check version of grub4dos is later than 01-02-2012
checkrange 20120201:-1 read 0x8278 || pause --wait=3 Please use grub4dos-0.4.5c-2012-02-01 or later! && exit 1

#reset key map
setkey

#change key map for UK keyboard
setkey
setkey at doublequote
setkey doublequote at
setkey tilde bar
setkey numbersign backslash

#French
setkey
setkey less backquote
setkey greater tilde
setkey ampersand 1
setkey 1 exclam
setkey tilde 2
setkey 2 at
setkey doublequote 3
setkey 3 numbersign
setkey quote 4
setkey 4 dollar
setkey parenleft 5
setkey 5 percent
setkey minus 6
setkey 6 caret
setkey backquote 7
setkey 7 ampersand
setkey underscore 8
setkey 8 asterisk
setkey backslash 9
setkey 9 parenleft
setkey at 0
setkey 0 parenright
setkey parenright minus
setkey numbersign underscore
:: no change for equal
:: no change for plus
setkey a q
setkey A Q
setkey z w
setkey Z W
setkey caret bracketleft
:: no equivalent for diaresis => we keep the US braceleft
setkey dollar bracketright
:: no equivalent for pound => we keep the US braceright
setkey q a
setkey Q A
setkey m semicolon
setkey M colon
setkey bracketleft quote
setkey percent doublequote
setkey asterisk backslash
setkey bracketright bar
setkey w z
setkey W Z
setkey comma m
setkey question M
setkey semicolon comma
setkey period less
setkey colon period
setkey slash greater
setkey exclam slash
setkey bar question

#Japan 106
setkey
setkey at bracketleft
setkey doublequote at
setkey ampersand caret
setkey quote ampersand
setkey parenleft asterisk
setkey parenright parenleft
setkey underscore parenright
setkey equal underscore
setkey plus colon
setkey colon quote
setkey asterisk doublequote
setkey bracketleft bracketright
setkey braceleft braceright
setkey bracketright backslash
setkey braceright bar
setkey backslash backquote
setkey tilde plus
setkey caret equal
setkey backquote braceleft
setkey bar tilde


# to set a german keyboard use these setkey commands before the first title command
setkey
setkey yz 
setkey zy 
setkey YZ 
setkey ZY 
setkey equal parenright 
setkey parenright parenleft 
setkey parenleft asterisk 
setkey doublequote at 
setkey plus bracket right 
setkey minus slash 
setkey slash ampersand 
setkey ampersand percent 
setkey percent caret 
setkey underscore question 
setkey question underscore 
setkey semicolon less 
setkey less number sign 
setkey number sign backslash 
setkey colon greater 
setkey greater bar 
setkey asterisk braceright

# set AZERTY ketyboard
setkey
setkey a q
setkey A Q
setkey z w
setkey Z W
setkey q a
setkey Q A
setkey m semicolon
setkey M colon
setkey w z
setkey W Z
setkey comma m
setkey question M
setkey semicolon comma
setkey period less
setkey colon period
setkey slash greater
setkey exclam slash
setkey dollar bracketright
setkey asterisk backslash
setkey percent doublequote
setkey ampersand 1
setkey 1 exclam
setkey tilde 2
setkey 2 at
setkey doublequote 3
setkey 3 numbersign
setkey quote 4
setkey 4 dollar
setkey parenleft 5
setkey 5 percent
setkey minus 6
setkey 6 caret
setkey backquote 7
setkey 7 ampersand
setkey underscore 8
setkey 8 asterisk
setkey caret 9
setkey 9 parenleft
setkey at 0
setkey 0 parenright
setkey parenright minus
setkey less backquote
setkey greater tilde
setkey numbersign braceright
setkey backslash question
setkey bracketright braceleft
setkey braceleft quote
setkey braceright underscore

#QWERTZ keyboard
setkey
setkey y z
setkey z y
setkey Y Z
setkey Z Y
setkey equal parenright
setkey parenright parenleft
setkey parenleft asterisk
setkey doublequote at
setkey backquote equal
setkey plus bracketright
setkey minus slash
setkey slash ampersand
setkey ampersand percent
setkey percent caret
setkey underscore question
setkey question underscore
setkey semicolon less
setkey less numbersign
setkey numbersign backslash
setkey colon greater
setkey greater bar
setkey asterisk braceright
setkey caret backquote
setkey backslash minus



# ensure not in debug=2 mode or gfxmenu will need two key presses!
debug 1
gfxmenu /message
color black/cyan yellow/cyan
timeout 1
default 0
# line below will ensure the gfxmenu is always loaded even after an error
configfile (bd)/menu.lst

# if booting from a USB Flash drive get the UUID like this
debug 1
uuid (bd) > (md)0x220+1
cat --skip=18 --length=9 (md)0x220+1 | set UUID=
# if booting from HDD use --length=16
echo UUID of boot device is %UUID%

# Ignore boot device and boot to Windows XP, Vista, 7 or 8 from the internal hard disk
# This works by mapping the boot device (bd) which may have bootmgr or ntldr on it, to a virtual memory drive so that files on it are not found by the find command
title Boot to Windows from an internal hard disk
map --mem (md)+8 (bd)
map --hook
find --set-root --ignore-floppies --ignore-cd /bootmgr || find --set-root --ignore-floppies --ignore-cd /ntldr
map (bd) (bd)
map --rehook
chainloader /bootmgr || chainloader /ntldr


#This entry sends an ESC character which can be used to exit from the GFXMenu back to the grub4dos text menu (or the user can just press ESC instead)
#The file esc.txt must exist and contain the ESC character (0x1b or 27 or 033 octal) - the esc.txt file is in Beta Downloads section if you want it!
title grub4dos menu
cat /esc.txt && clear

title List partitions
clear
cat (hd0,0)+1 > (md)800+1 && parttype (hd0,0) && echo Contents of (hd0,0): && ls (hd0,0)/ && echo && echo --------
cat (hd0,1)+1 > (md)800+1 && parttype (hd0,1) && echo Contents of (hd0,1): && ls (hd0,1)/ && echo && echo --------
cat (hd0,2)+1 > (md)800+1 && parttype (hd0,2) && echo Contents of (hd0,2): && ls (hd0,2)/ && echo && echo --------
cat (hd0,3)+1 > (md)800+1 && parttype (hd0,3) && echo Contents of (hd0,3): && ls (hd0,3)/ && echo && echo --------
cat (hd0,4)+1 > (md)800+1 && parttype (hd0,4) && echo Contents of (hd0,4): && ls (hd0,4)/ && echo && echo --------
cat (hd1,0)+1 > (md)800+1 && parttype (hd1,0) && echo Contents of (hd1,0): && ls (hd1,0)/ && echo && echo --------
cat (hd1,1)+1 > (md)800+1 && parttype (hd1,1) && echo Contents of (hd1,1): && ls (hd1,1)/ && echo && echo --------
cat (hd1,2)+1 > (md)800+1 && parttype (hd1,2) && echo Contents of (hd1,2): && ls (hd1,2)/ && echo && echo --------
cat (hd1,3)+1 > (md)800+1 && parttype (hd1,3) && echo Contents of (hd1,3): && ls (hd1,3)/ && echo && echo --------
cat (hd1,4)+1 > (md)800+1 && parttype (hd1,4) && echo Contents of (hd1,4): && ls (hd1,4)/ && echo && echo --------
echo
pause --wait=10 Please check available partitions...
configfile (bd)/menu.lst

title Reboot
reboot

title Switch Off
halt

#hotkey and autonumber example
color white/blue
write 0x8274 0x2001
## run hotkey once to enable hotkey.
/hotkey
## show this menu only if /ntldr can be found
iftitle [find /ntldr] ^Ctrl+F1 Press Ctrl+F1 to boot /ntldr
find --set-root /ntldr
chainloader /ntldr


# Check this CD/USB drive is not too old - see Tutorial #71 for details
#  Usage: /checkdate.g4b <Release Year> <Release Month> <Release DayOfMonth> <ExpiresInDays>  [<SILENT>]
/checkdate.g4b 2012 12 3 2
pause
if NOT "%CHECKDATE%"=="OK" reboot

#Boot using the original backup MBR sector (copied to LBA1 by grub4dos on install)
#This will boot the system as it would before grub4dos was installed
title Normal Windows Boot 
rootnoverify (hd0) 
chainloader (hd0)1+1

#this assumes you have booted from a USB drive and you want to boot from the hard disk
title Boot from 1st Hard Disk \nBoot from MBR of first hard disk
map (hd0) (hd1)
map (hd1) (hd0)
map --hook
chainloader (hd0)+1
rootnoverify (hd0)


title FreeDOS 
find --set-root /kernel.sys
chainloader /kernel.sys

title MSDOS
find --set-root /io.sys
chainloader /io.sys

title FreeDOS (AS HDD)
map (hd0) (hd1)
map (hd1) (hd0)
map --hook
rootnoverify (hd1,0)
chainloader /kernel.sys

title FreeDOS (AS FLOPPY)
map (hd0,0)+1 (fd0)
map (hd0) (hd1)
map (hd1) (hd0)
map --hook
chainloader (fd0)/kernel.sys
rootnoverify (fd0)
map --floppies=1

title MS-DOS (AS HDD)
rootnoverify (hd0,0)
chainloader (hd0,0)/io.sys

title Always boot from USB to MS-DOS AS FLOPPY DISK A: 
checkrange 0x80 read 0x8280 && map (hd0,0)+1 (fd0)
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
ls (fd0)/io.sys && clear && pause --wait=1 /IO.SYS found on floppy disk
ls (fd0)/io.sys || pause --wait=3 /IO.SYS not found on floppy disk
ls (fd0)/io.sys && chainloader (fd0)/io.sys
ls (fd0)/io.sys && rootnoverify (fd0)
ls (fd0)/io.sys && map --floppies=1
ls (fd0)/io.sys && map --harddrives=1
clear
boot

title MS-DOS (AS FLOPPY) AND HDD as HDD0
map (hd0,0)+1 (fd0)
# map the first partition of the hard disk as a floppy disk
map (hd0) (hd32)
# map the UFD as a virtual cd
map (hd1) (hd0)
# map the real hard disk as hard disk 0
map --hook
# hook Int13 interrupts so all map changes take affect
chainloader (fd0)/io.sys
# load the io.sys code into memory from the floppy disk (now ufd is fd0)
rootnoverify (fd0)
# set the file root as the floppy disk
map --floppies=1
map --harddrives=1
# Tweak BIOS device numbers so DOS sees 1 floppy and 1 hd


title MS-DOS (AS FLOPPY) AND HDD as HDD0 (no comments)
map (hd0,0)+1 (fd0)
map (hd0) (hd32)
map (hd1) (hd0)
map --hook
chainloader (fd0)/io.sys
rootnoverify (fd0)
map --floppies=1
map --harddrives=1

 http://www.partition-saving.com/ 
title savepart.iso
# map the iso file as a virtual cd
map /savepart.iso (0xff)
# hook the int 13 interrupt so the BIOS sees it as a CD
map --hook
# set the root path to the new virtual CD
root (0xff)
# boot from the CD
chainloader (0xff)

title spartbdk.img
# map the 1.44MB floppy image as fd0
map /spartbdk.img (fd0)
map --hook
root (fd0)
# load the freedos kernel.sys as the boot file
chainloader /kernel.sys

# Use SHIFT to boot linux in safe mode
title Run Linux\nPress SHIFT+ENTER for safe mode 
/bios int=0x16 eax=0x00000200 > (md)0x300+1 && cat --skip=12 --length=2 (md)0x300+1 | set /a n=0x > nul 
set /a n=%n% & 0x03 > nul && if %n%>=1 echo SHIFT PRESSED! 
#LShift=01,RShift=02,CTRL=04,ALT=08,SCROLL=10,NUM=20,CAPS=40,INS=80 
#set /a n=%n% & 0x04 > nul && if %n%>=1 echo CTRL PRESSED! 
set sf=
if %n%>=1 set sf=acpi=off irqpoll noapic noapm nodma nomce nolapic nosmp 
kernel /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper %sf% splash 
initrd /casper/initrd.img


title WinPe v2
map  /bootmgr (rd)
chainloader (rd)+1
root ()

;Note:  make sure the 'cheat code'  fromusb is present and also the bootfromiso path to the iso file on the USB drive starts with a forward slash / 
;The ISO filename needs to be 8.3 and is case sensitive too!
title PCLinuxOS LiveCD \n * Boot direct from ISO file
map --unhook
map --unmap=0:0xff
find --set-root --ignore-floppies /pclos.iso
map --heads=0 --sectors-per-track=0 /pclos.iso (0xff)
map --hook
root (0xff)
kernel (0xff)/isolinux/vmlinuz fromusb bootfromiso=/pclos.iso livecd=livecd root=/dev/rd/3 acpi=on vga=788 keyb=en vmalloc=256M edd=off 
initrd (0xff)/isolinux/initrd.gz

title BackTrack 4 Final LiveCD (extracted ISO contents to bt4 folder) 
find --set-root /bt4/boot/vmlinuz 
kernel /bt4/boot/vmlinuz BOOT=/bt4/casper boot=/bt4/casper nopersistent rw quiet vga=0x315 
initrd /bt4/boot/initrd.gz 

title MEMTEST86+ 
find --set-root /mt410.iso 
map /mt410.iso (hd32) 
map --hook 
root (hd32) 
chainloader (hd32)

#This method of running memtest86+ works on more PCs than the previous one 
title memtest.img (memtest.img obtained from ISO)
find --set-root /memtest.img
map /memtest.img (fd0)
map --hook
chainloader (fd0)+1 
rootnoverify (fd0) 
map --floppies=1

title memtest86+ (bin file) 
find --set-root /memtest.bin 
kernel /memtest.bin
 

# USB Boot -> Fat32 Formatted
title Norton Ghost 15 (hd32)
find --set-root /iso/Ghost15.iso
map /iso/Ghost15.iso (hd32)
map --hook
root (hd32)
chainloader /BOOTMGR


title Ultimate Boot CD (UBCD) v5.0 final\nthis is the 14 May 2010 edition,its an all in one Free Bootable CD for IT Pros, the cd consolidate as many diagnostic tools as possible into one bootable CD. 
find --set-root /ubcd50.iso 
map /ubcd50.iso (hd32) 
map --hook 
root (hd32) 
chainloader (hd32)


title Ultimate Boot CD (UBCD) v5.11 \nthis is the August 2011 edition,its an all in one Free Bootable CD for IT Pros, the cd consolidate as many diagnostic tools as possible into one bootable CD.
find --set-root /ubcd511.iso
map /ubcd511.iso (hd32)
map --hook
root (hd32)
chainloader (hd32)

# only about 2MB is saved by using 7zip to compress the iso to a .gz file
title Hirens Boot CD 13.1 using  firadisk \nBoot to Hirens Boot CD in RAM 
find --set-root --ignore-floppies --ignore-cd /HirensBCD.13.1.iso.gz
map --mem /firadisk.gz (fd0)
map --mem /HirensBCD.13.1.iso.gz (0xff)
map --hook
root (0xff)
chainloader (0xff)


#iPXE boot - see the iPXE Tutorial for details
title ipxe
map /ISO/ipxe.iso (0xff) || map --mem /ISO/ipxe.iso (0xff)
map --hook
root (0xff)
chainloader (0xff)

# ---- GPARTED ---
title 1 GParted Live (0.8.1-3)
find --set-root --ignore-floppies  /live/vmlinuz
kernel /live/vmlinuz  boot=live config  noswap noprompt  ip=frommedia  nosplash
initrd /live/initrd.img

title 2 GParted Live (0.8.1-3) ToRAM
find --set-root --ignore-floppies  /live/vmlinuz
kernel /live/vmlinuz  boot=live config  noswap noprompt  toram=filesystem.squashfs ip=frommedia  nosplash
initrd /live/initrd.img

title 3 GParted Live (0.8.1-3) without framebuffer
find --set-root --ignore-floppies  /live/vmlinuz
kernel /live/vmlinuz  boot=live config  noswap noprompt ip=frommedia nomodeset vga=normal nosplash
initrd /live/initrd.img

title 4 GParted Live (0.8.1-3) failsafe
find --set-root --ignore-floppies  /live/vmlinuz
kernel /live/vmlinuz boot=live config  noswap noprompt acpi=off irqpoll noapic noapm nodma nomce nolapic nosmp ip=frommedia nomodeset vga=normal nosplash
initrd /live/initrd.img

#Note: if using FAT filesystem, the findiso pathname is CaSeSeNsItIvE!
title gparted 11.0 live from ISO
find --set-root /gparted-live-0.11.0-10.iso
map /gparted-live-0.11.0-10.iso (0xff) || map --mem /gparted-live-0.11.0-10.iso (0xff)
map --hook
root (0xff)
kernel /live/vmlinuz  boot=live config union=aufs noswap noprompt vga=788 ip=frommedia   findiso= /gparted-live-0.11.0-10.iso   toram=filesystem.squashfs 
initrd /live/initrd.img

#Note: if using FAT filesystem, the findiso pathname is CaSeSeNsItIvE!
# http://sourceforge.net/projects/gparted/files/latest/download
title gparted 0.12.1-5 live from ISO
find --set-root /gparted-live-0.12.1-5.iso
map /gparted-live-0.12.1-5.iso (0xff) || map --mem /gparted-live-0.12.1-5.iso (0xff)
map --hook
root (0xff)
kernel /live/vmlinuz  boot=live config ip=frommedia   findiso=/gparted-live-0.12.1-5.iso
initrd /live/initrd.img
# for failsafe add ...
#noapic noapm nodma nomce nolapic nomodeset nosmp vga=normal

# -----

http://hdt-project.org/wiki/hdt-0.5.0#Downloads - examine the hardware PCIID's etc. in a system (v small and quick!)
title HDT (Hardware Detection Tool\nhdt-project.org\nType MENU for a GUI menu
map /hdt-0.5.0.iso (0xff)
map --hook
root (0xff)
chainloader (0xff)

#You must first copy the /slax folder from the ISO file and place it on your USB pen
title slax 6.1.2
map /iso/slax-6.1.2.iso (0xff) || map --mem /iso/slax-6.1.2.iso (0xff)
map --hook
root (0xff)
kernel /boot/vmlinuz from=/iso/slax-6.1.2.iso ramdisk_size=6666 root=/dev/ram0 rw
initrd /boot/initrd.gz

title Kasperksy AV 2010 Rescue.iso
map /rescue/rescue.iso (0xff) || --mem /rescue/rescue.iso (0xff)
map --hook
root (0xff)
chainloader (0xff)

title BartPE (from \MININT)
find --set-root /minint/SETUPLDR.BIN
chainloader /minint/SETUPLDR.BIN

title SeaTools ISO
map /SeaToolsDOS223ALL.ISO (0xff)
map --hook
map (0xff)/seatools.ima (fd0)
map --hook
root (fd0)
chainloader /kernel.sys

# boot from the .iso file (160MB) or use 7Zip to compress it to a .gz file (68MB)
title BartPE ISO using  firadisk \nBoot to BartPE in RAM 
find --set-root --ignore-floppies --ignore-cd /Bartpe.iso
map --mem /firadisk.gz (fd0)
map --mem /Bartpe.iso (0xff)
map --hook
root (0xff)
chainloader (0xff)

title DSLinux ISO
find --set-root /dsl4410.iso
map /dsl4410.iso (hd32)
map --hook
root (hd32)
chainloader (hd32)

# boot knoppix from ISO file (no need to modify ISO with 6.7+)
# works with iso in root or subfolder (thanks to cdob from reboot.pro for workaround for subfolder!)
# ISO boot discussion at http://reboot.pro/16252/
# iso path and filename are Case Sensitive!!!
# Knoppix cheat codes listed at http://www.pendrivelinux.com/knoppix-cheatcodes/
# Set a unique variable (e.g. K1109) in each iftitle line
iftitle [if exist /_ISO/ ADRIANE-KNOPPIX_V6.7.1CD-2011-09-14-EN.iso  set K1109=/_ISO/ ADRIANE-KNOPPIX_V6.7.1CD-2011-09-14-EN.iso ] Boot %K1109%
set ISO=%K1109%
ls %ISO% > nul || find --set-root --devices=hf %ISO%
map %ISO% (0xff) || echo %ISO% not contiguous - so need to load it all into memory... && map --mem %ISO% (0xff)
map --hook
root (0xff)
kernel /boot/isolinux/linux bootfrom=/./%ISO% noeject noprompt ramdisk_size=100000 lang=en vt.default_utf8=0 apm=power-off nomce libata.force=noncq hpsa.hpsa_allow_any=1 loglevel=1 tz=localtime
initrd /boot/isolinux/minirt.gz

iftitle [if exist /KNOPPIX_V7.0.4CD-2012-08-20-EN.iso] Boot KNOPPIX 
set ISO=/KNOPPIX_V7.0.4CD-2012-08-20-EN.iso
ls %ISO% > nul || find --set-root --devices=hf %ISO%
map %ISO% (0xff) || echo %ISO% not contiguous - so need to load it all into memory... && map --mem %ISO% (0xff)
map --hook
root (0xff)
kernel /boot/isolinux/linux bootfrom=/./%ISO% noeject noprompt ramdisk_size=100000 lang=en vt.default_utf8=0 apm=power-off nomce libata.force=noncq hpsa.hpsa_allow_any=1 loglevel=1 tz=localtime
initrd /boot/isolinux/minirt.gz


title KNOPPIX\nAt boot prompt type - knoppix bootfrom=/dev/hda0/KNOPPIX155.iso
map /KNOPPIX511.iso (hd32) || map --mem /KNOPPIX511.iso (hd32)
map --hook
root (hd32)
chainloader (hd32)

title Knoppix 7
#http://www.knopper.net/knoppix-info/index-en.html
set lang=en
set ISOfile=/images/KNOPPIX_V7.0.5.iso
cat --length=0 %ISOfile% > nul || find --set-root --devices=hf %ISOfile%
map %ISOfile% (0xff)
map --hook
root (0xff)
kernel /boot/isolinux/linux bootfrom=/dev/*%ISOfile% noeject noprompt ramdisk_size=100000 lang=%lang% vt.default_utf8=0 apm=power-off nomce libata.force=noncq hpsa.hpsa_allow_any=1 loglevel=1 tz=localtime
initrd /boot/isolinux/minirt.gz


title KNOPPIX 6.2.1\nNote: Must use modified initrd.gz to boot from ISO - Note: version specific - does not work with 6.7.0!
#http://knol.google.com/k/yoshihide-nomura/how-to-boot-knoppix-directly-from-iso/2vzr3sm0dzndc/1#
#http://www.knoppix.net/wiki/Cheat_Codes
#http://archive.yoshimov.com/knoppix/initrd-mod-6.2.1.gz has modified initrd file
#iso file and modifed initrd placed in ISO folder in this example
find --set-root /iso/KNOPPIX_V6.2.1CD-2010-01-31-EN.iso
map /iso/KNOPPIX_V6.2.1CD-2010-01-31-EN.iso (hd32) || map --mem /iso/KNOPPIX_V6.2.1CD-2010-01-31-EN.iso (hd32) 
map --hook
root (hd32)
echo "Loading kernel.."
kernel /boot/isolinux/linux ramdisk_size=100000 lang=en vt.default_utf8=0 apm=power-off vga=791 nomce noeject noprompt quiet loglevel=0 tz=localtime fromiso=iso/KNOPPIX_V6.2.1CD-2010-01-31-EN.iso edd=off --
echo "Loading modified initrd downloaded from http://archive.yoshimov.com/knoppix/initrd-mod-6.2.1.gz"
initrd (bd)/iso/initrd-mod-6.2.1.gz || initrd (hd0,0)/iso/initrd-6.2.1.gz

# -- PUPPY LINUX -----

# Only the ISO file is required for this menu - 4th ptn on USB drive must be empty! 
iftitle [if exist (bd)/_ISO/Linux/precise-5.4.3.iso] Puppy Precise 5.4.3\n Puppy with persistence
partnew (hd0,3) 0x00 (bd)/_ISO/Linux/precise-5.4.3.iso 
map  (bd)/_ISO/Linux/precise-5.4.3.iso (0xff) 
map --hook
root (0xff)
kernel /vmlinuz pmedia=usbflash psavemark=1 fix=fsck
#You need to use pmedia=usbhd if you are booting from a USB HDD.
#kernel /vmlinuz pmedia=usbhd psavemark=1 fix=fsck
initrd /initrd.gz


# if get puppy_precise_5.4.3 not found. Dropping out to initial-ramdisk console error - check name and case of the .sfs file!
# Extract files to /precise (only vmlinuz, initrd.gz and sfs needed)
# rename PUPPY_PR.SFS to lower case puppy_precise_5.4.3.sfs
title Puppy Precise
kernel /precise/vmlinuz pmedia=usbflash psubdir=precise fix=fsck psavemark=1
initrd /precise/initrd.gz

# Extract sfs to /precise
# rename PUPPY_PR.SFS to lower case puppy_precise_5.4.3.sfs and place in \precise folder
title Puppy Precise boot from ISO
map /_ISO/Linux/precise-5.4.3.iso (0xff)
map --hook
root (0xff)
kernel /vmlinuz pmedia=usbflash psavemark=1 fix=fsck psubdir=precise
initrd /initrd.gz


# -- CLONEZILLA ---

title CLONEZILLA (wait 2-3 minutes and hit Enter twice!)
;long wait at splash screen but it works!
kernel /live/vmlinuz1 locale=us boot=live persistent
initrd /live/initrd1.img

title CLONEZILLA hd0<->hd1 (wait 2-3 minutes and hit Enter twice!) 
;long wait at splash screen but it works! 
map (hd0) (hd1) 
map (hd1) (hd0) 
kernel /live/vmlinuz1 locale=us boot=live persistent 
initrd /live/initrd1.img

title Parted Magic /ISO/pmagic_2013_02_28.iso (booting the kernel) 
map /ISO/pmagic_2013_02_28.iso (0xff) 
map --hook 
root (0xff) 
kernel /pmagic/bzImage edd=off  load_ramdisk=1 prompt_ramdisk=0 rw vga=normal sleep=10 loglevel=0 max_loop=256 vmalloc=384MiB keymap=us iso_filename=/ISO/pmagic_2013_02_28.iso 
initrd /pmagic/initrd.img

title pmagic_2012_06_07.iso
#name must be in pmagic-yyyy_mm_dd.iso format and in root folder or will not find the .sqfs file 
find --set-root /pmagic_2012_06_07.iso 
map --heads=0 --sectors-per-track=0 /pmagic_2012_06_07.iso (0xff) 
map --hook 
root (0xff) 
chainloader (0xff) 

title Parted Magic 4.10 ISO 
find --set-root /pmagic.iso 
map /pmagic.iso (hd32) 
map --hook 
root (hd32) 
kernel /pmagic/bzImage noapic load_ramdisk=1 prompt_ramdisk=0 rw vga=791 sleep=10 loglevel=0 keymap=uk iso_filename=/pmagic.iso 
initrd /pmagic/initramfs 
map --unmap=0:0xff 

title Parted Magic 5.2 (direct memory mapping and booting the kernel) 
find --set-root /pm52.iso 
map --mem /pm52.iso (hd32) 
map --hook 
root (hd32) 
kernel /pmagic/bzImage noapic load_ramdisk=1 prompt_ramdisk=0 rw vga=791 sleep=10 loglevel=0 keymap=us iso_filename=/pm52.iso 
initrd /pmagic/initramfs 
map --unmap=0:0xff

title Acronis True Image 2009 / 2013
find --set-root /acronis.iso 
map /acronis.iso (hd32) 
map --hook 
root (hd32) 
chainloader (hd32) 

title Acronis Recovery 2013
kernel /Recovery\ Manager/kernel.dat quiet media_for_linux vga=ask
initrd /Recovery\ Manager/ramdisk.dat

title Windows Password reset 
find --set-root /cd100627.iso 
map /cd100627.iso (0xff) 
map --hook 
chainloader (0xff) 

title OphCrack Password Cracker XP 2.3.1 
find --set-root /ophcrack_xp/boot/bzImage 
kernel /ophcrack_xp/boot/bzImage rw root=/dev/null vga=normal ophcrack=lowram lang=C kmap=uk screen=1024x768x16 autologin 
initrd /ophcrack_xp/boot/rootfs.gz 

title OphCrack Password Cracker Vista 2.3.1 
find --set-root /ophcrack_vista/boot/bzImage 
kernel /ophcrack_vista/boot/bzImage rw root=/dev/null vga=normal ophcrack=lowram lang=C kmap=uk screen=1024x768x16 autologin 
initrd /ophcrack_vista/boot/rootfs.gz

#name must be in pmagic-x.y.iso format or will not find sqfs file 
title PC CMOS Cleaner and Parted Magic 5.7 ISO 
find --set-root /pmagic-5.7.iso 
map --heads=0 --sectors-per-track=0 /pmagic-5.7.iso (hd32) 
map --hook 
root (hd32) 
chainloader (hd32)

title Slitaz 4 RC1 Live
find --set-root /slitaz-4.0-RC1.iso
map --heads=0 --sectors-per-track=0 /slitaz-4.0-RC1.iso (0xff)
map --hook
root (0xff)
chainloader /boot/isolinux/isolinux.bin

title SliTaz Cooking (may be no kbd in GUI?) 
find --set-root /slitaz-cooking.iso 
map --heads=0 --sectors-per-track=0 /slitaz-cooking.iso (0xff) 
map --hook 
root (0xff) 
kernel /boot/bzImage rw root=/dev/null 
#vga=normal lang=C kmap=uk screen=1024x768x16 autologin 
initrd /boot/rootfs.gz

title SliTaz 3.0 
find --set-root /slitaz-3.0.iso 
map --heads=0 --sectors-per-track=0 /slitaz-3.0.iso (0xff) 
map --hook 
root (0xff) 
kernel /boot/bzImage rw root=/dev/null 
#vga=normal lang=C kmap=uk screen=1024x768x16 autologin 
initrd /boot/rootfs.gz 

# - - - - - - - - - #

# GENERIC ANY LINUX BOOT FROM ISO TECHNIQUE!
# See Tutorial 93 for details

# This menu can be used for to boot any linux iso file
# It is especially useful if your boot drive is NTFS but linux does not understand NTFS once it boots and so cannot boot further
# WARNING: permanently alters the boot device's partition table (adds a 4th ptn entry)!
#         Use with care as it will obliterate ptn 4 on the boot device if it already exists!

iftitle [if exist /tails-i386-0.15.iso] Tails (boot from ISO)
set ISO=tails-i386-0.15.iso
find --set-root %ISO%
parttype (hd0,3) | set check=
set check=%check:~-5,4% 
if %check%==0x00 partnew (hd0,3) 0x00 %ISO%
if NOT %check%==0x00 echo ERROR: Partion Table entry 4 already exists! && pause --wait=3 && configfile /menu.lst 
map /%ISO% (0xff)
echo -e \r\n
map --hook
root (0xff)
chainloader (0xff)

#some examples not using iftitle so they will always be listed even if the ISO file does not exist!

title raring-dvd-i386.iso\nEdubuntu 13.04 Alpha 1 Test Build
set ISO=/raring-dvd-i386.iso
find --set-root %ISO%
parttype (hd0,3) | set check=
set check=%check:~-5,4% 
if %check%==0x00 partnew (hd0,3) 0x00 %ISO%
if NOT %check%==0x00 echo ERROR: Partion Table entry 4 already exists! && pause --wait=3 && configfile /menu.lst 
map  %ISO% (0xff)
map --hook
root (0xff)
chainloader (0xff)


title systemrescuecd-x86-3.1.2.iso\nSystemRescueCD
set ISO=/systemrescuecd-x86-3.1.2.iso
find --set-root %ISO%
parttype (hd0,3) | set check=
set check=%check:~-5,4% 
if %check%==0x00 partnew (hd0,3) 0x00 %ISO%
if NOT %check%==0x00 echo ERROR: Partion Table entry 4 already exists! && pause --wait=3 && configfile /menu.lst 
map  %ISO% (0xff)
map --hook
root (0xff)
chainloader (0xff)

# - - - - - - - - END OF GENERIC ISO EXAMPLES - - - - - #


#load a gzipped floppy disk image (convert to .gz using gzip or 7Zip) 

title MSDOS 6.22 using chainloader from gz file 
find --set-root /dos622.ima.gz 
map --mem /dos622.ima.gz (fd0) 
map --hook 
rootnoverify (fd0) 
chainloader (fd0)+1

title PLD RescueCD - Linux RCDx86_298.iso\nhttp://rescuecd.pld-linux.org/
find --set-root /RCDx86_298.iso
map /RCDx86_298.iso (hd32)
map --hook
root (hd32)
chainloader (hd32)

# ActiveBootDisk (pe 3.1 based)
# extract the two files _bootDisk.ini and BOOTDISK.KEY from ISO and place in the root of the drive first!
title Active@ Boot Disk 6.5
map /ISO/ActiveBootDisk.ISO (0xff) || map --mem /ISO/ActiveBootDisk.ISO (0xff)
map --hook
root (0xff)
chainloader (0xff) || chainloader (0xff)/BOOTMGR



#Error 43: The BPB hidden_sectors should not be zero for a hard-disk partition boot sector
#See Wonko's post at http://reboot.pro/topic/16429-easy2boot-development-discussion/page-30#entry185771
# This error may be found when attempting to chainload to a partition - e.g. chainloader (hd0,1)+1
# The following code assumes partition 4 is empty/unused
set BOOTPTN=(hd0,1)
debug normal
parttype (hd0,3) | set check=
set check=%check:~-5,4% 
#create new ptn4 (also fixes up the BPB hidden sectors in %BOOTPTN%)
if %check%==0x00 partnew (hd0,3) 0x00 %BOOTPTN%
# remove new partition entry
if %check%==0x00 partnew (hd0,3) 0 0 0 0
if NOT %check%==0x00 echo ERROR: Partion Table entry 4 already exists! && pause --wait=3 && configfile /menu.lst 
chainloader %BOOTPTN%+0x50
boot


#MEMDISK is not really needed as the built in grub4dos CHAINLOADER command is similar in action and allows for direct drive remapping, However, it is useful in being able to load .zip files which chainloader cannot (chainloader can load .gz compressed files however).
#MEMDISK allows booting legacy operating systems. MEMDISK can boot floppy images, hard disk images and some ISO images see here for details.

#MEMDISK simulates a disk by claiming a chunk of high memory for the disk and a (very small - 2K typical) chunk of low (DOS) memory for the driver itself, then hooking the INT 13h (disk driver) and INT 15h (memory query) BIOS interrupts. The memdisk binary can be obtained from the syslinux project here .

#initrd loads the specified file into the ramdrive (initialise ramdrive)


title Memtest 86+
kernel /memdisk raw
initrd /memtest.img


title MEMTEST86+ iso using memdisk
kernel /memdisk iso
initrd /mt410.iso

#use raw mode (raw access to protected mode)
title MSDOS floppy disk image
kernel /memdisk raw
initrd /dos622.ima

title MSDOS 6.22 using memdisk raw from zip file of floppy disk image (1.44MB image compressed as .zip file)
kernel /memdisk raw
initrd /dos622.zip

title MSDOS 6.22 using memdisk raw from .gz file of floppy disk image (1.44MB image compressed as .gz file)
kernel /memdisk raw
initrd /dos622.ima.gz

# http://www.mepis.org/
# Mount the SimplyMEPIS-1.5G_11.0.12_32.iso file
# Copy the mepis folder to your USB drive
# Copy the boot folder to the inside of the mepis folder 
# USB Drive folders:
# /mepis  has large mepis file
# /mepis/boot  has initrd.gz and vmlinuz
# Use either "root" for user and "root" for password, or "demo" for user and "demo" for password.

title SimpleMEPIS Default
kernel /mepis/boot/vmlinuz vga=788 quiet splash
initrd /mepis/boot/initrd.gz

title SimpleMEPIS AUFS_rw_filesystem\nNothing is stored on the flash drive, all changes are temporary
kernel /mepis/boot/vmlinuz vga=788 quiet splash aufs
initrd /mepis/boot/initrd.gz



# Look for specific BIOS or System type
#0x680 = D000:0 - the start of the DMI and BIOS area
#0x180 = 30000h - the length of the search, so it will finish at F000:FFFFh - i.e. end of BIOS area
#So if the DMI string was 'EeePC' on one system and 'DELL' on another, then use
set SYSTEM= 
if "%SYSTEM%"=="" cat --locate=\x45\x65\x65\x50\x43 (md)0x680+0x180 > nul && set SYSTEM=EeePC
if "%SYSTEM%"=="" cat --locate=\x44\x45\x4C (md)0x680+0x180 > nul && set SYSTEM=DELL 
<more here> 
if "%SYSTEM%"=="" pause --wait=3 ERROR: No BIOS strings found that I recognise! && configfile /menu.lst
echo "%SYSTEM%" found: 
# Next line displays the hex string and following bytes for user interest!
cat --hex --length=0x80 --skip=%?% (md)0x680+0x180 
if "%SYSTEM%"=="DELL" set MYISO=/dell.iso 
if "%SYSTEM%"=="EeePC" set MYISO=/EeePC.iso 
<more here> 
 # now do stuff with the correct ISO!


# check mainboard MAC address - e.g. MAC address is 00:23:54:58:32:6b
cat --locate=\x00\x23\x54\x58\x32\x6b (md)0x680+0x180 || pause --wait=3 WRONG SYSTEM! && halt


# Lock a menu entry to a MAC address (so that this will only work on one system which has MAC address = 00:23:54:58:32:6b!) 
# Use SCANBIOH.exe DOS tool from Beta Downloads page to find the correct memory location that contains your MAC address
# You can also use this technique to match against your mainboard serial number or model type

title Run MSSS only on my EeePC!
#prevent checkrange from printing contents on the screen so it looks neater!
debug off
#check for the MAC address in BIOS RAM area
checkrange 0x58542300 read 0xf0757 && checkrange 0x6b32 calc *0xf075b & 0xffff && echo OK - MAC ADDRESS 00:23:54:58:32:6b FOUND
#if not correct MAC address then reload menu
checkrange 0x58542300 read 0xf0757 || pause --wait=3 INCORRECT MAC ADDRESS! && exit
checkrange 0x6b32 calc *0xf075b & 0xffff || pause --wait=3 INCORRECT MAC ADDRESS! && exit
#now do any commands as normal
find --set-root /MSSS_Media32.iso
map /MSSS_Media32.iso (0xff) || map /MSSS_Media32.iso (0xff)
map --hook
chainloader (0xff)


#Note: if you want to check a byte at any memory location use:
checkrange 0x32 calc *0xf075b & 0xff || pause --wait=3 INCORRECT MAC ADDRESS! && exit
#Note: if you want to check a word at any memory location use:
checkrange 0x6b32 calc *0xf075b & 0xffff || pause --wait=3 INCORRECT MAC ADDRESS! && exit
#Note: if you want to check a 3 bytes at any memory location use:
checkrange 0x066b32 calc *0xf075b & 0xffffff || pause --wait=3 INCORRECT MAC ADDRESS! && exit
#Note: if you want to check a DWORD (4 bytes) at any memory location use:
checkrange 0x05066b32 read 0xf075b || pause --wait=3 INCORRECT MAC ADDRESS! && exit
or
checkrange 0x05066b32 calc *0xf075b & 0xFFFFffff || pause --wait=3 INCORRECT MAC ADDRESS! && exit

checkrange can also be used to check a range of values - e.g. checkrange 0x00:0x10   or  checkrange 0x00,0x02,0x04

#is64bit - checks 64bit and PAE status
#returns value bit0=PAE supported, bit1=AMD64/Intel64 supported"
iftitle [checkrange 0,1 is64bit] 32bit system
#(menu here)
iftitle [checkrange 2,3 is64bit] 64bit system
#(menu here)
iftitle [checkrange 1,3 is64bit] PAE system
#(menu here)
iftitle [checkrange 0,1 read 0x82Bc] 32Bit system
#(menu here)

#Example for calc
calc *0x6000=0x8280+4   - put result of adding 0x8280 + 4 into memory at 0x6000



#Norton Bootable Recovery Tool
#The ISO is WinPE 3 based. To make it work, it needs to find the NBRTSTRT.exe file in the root of the drive 
#and also you need to copy two folders from inside the ISO to your USB drive, so as well as the ISO file on your USb drive you need:
#
#\NBRTSTRT.exe 
#\Sources\DRIVERS
#\Sources\SYMANTEC_NBRT
title NBRT
map /_ISO/NBRT.iso (0xff)
map --hook
chainloader (0xff)

#COMODO RESCUE DISK - antivirus cleaning tool inc. COMODO CLEANING ESSENTIALS
#Copy the contents of the ISO /boot folder to /comodo/boot on the USB drive
splashimage /comodo/boot/grub/SPLASH_X.GZ
title Comodo Rescue Disk 1.1.232326.14
kernel /comodo/boot/bzimage
initrd /comodo/boot/rootfs.gz

title Comodo Rescue Disk 1.1.232326.14
map /comodo_rescue_disk_1.1.232326.14.iso (0xff)
map --hook
root (0xff)
kernel /boot/bzimage
initrd /boot/rootfs.gz

title DaRT70Win764\nMS DART ISO
set MYISO=dartwin70.iso
map /images/%MYISO% (0xff)
map (hd0) (hd1)
map (hd1) (hd0)
map --hook
chainloader (0xff)/BOOTMGR || chainloader (0xff) 

Click here to see the 'God-on-a-stick' menu.lst and folder contents for lots more examples of menu.lst entries.

For booting ISOs with persistence see the example .mnu files in the Easy2Boot download.



FAT+NTFS TWO Partition USB Drive

This code will swap over the grub4dos ptn table first two entries to make the NTFS ptn the first ptn (if it is not already)

title set NTFS as 1st partition
debug off
# This always sets the first partition to NTFS (if NTFS+FAT32 in ptn table)

# first get MBR into two areas of memory
dd if=(hd0) of=(md)0x3000+1 count=1
dd if=(hd0) of=(md)0x3100+1 count=1
echo PTN TABLE WAS...
cat --hex --length=32 --skip=446 (md)0x3000+1

#Now overwrite 2nd copy with tables from 1st copy but change the order...
set /A m=*0x6001be
write     0x6201ce %m%
set /A m=*0x6001c2
write     0x6201d2 %m%
set /A m=*0x6001c6
write     0x6201d6 %m%
set /A m=*0x6001ca
write     0x6201da %m%

set /A m=*0x6001ce
write     0x6201be %m%
set /A m=*0x6001d2
write     0x6201c2 %m%
set /A m=*0x6001d6
write     0x6201c6 %m%
set /A m=*0x6001da
write     0x6201ca %m%
echo NEW TABLE WILL BE...
cat --hex --length=32 --skip=446 (md)0x3100+1

# get value of original 1st ptn ID = 7=NTFS
set /A n=*0x6001c2 & 0xff
if /i "%n%"=="0x7" echo 1st ptn entry is already NTFS - NO NEED TO SWAP!
set /A m=*0x6201c2 & 0xff
if not /i "%m%"=="0x7" echo WARNING: NO NTFS FOUND IN 1st OR 2nd PARTITION (1st=%n% 2nd=%m%)!
set ASK=N && echo 
if /i "%m%"=="0x7" set /p ASK=OK TO RE-ORDER PTN TABLE AND WRITE MBR TO (hd0) (Y/N)? : 
if /i "%m%"=="0x7" if not /i "%ASK%"=="Y" configfile /menu.lst
if /i "%ASK%"=="Y" dd if=(md)0x3100+1 of=(hd0) count=1 
if /i "%m%"=="0x7" clear && echo -e \r\nNOW PTN TABLE SET TO... 
if /i "%m%"=="0x7" cat --hex --length=0x20 --skip=0x1be (hd0)+1
pause
# Now boot or whatever!



Example menu to map a disk image to the next available device

title boot from dos image as next available hard disk
find --set-root /DOS.img
map /DOS.img (hd) || map --mem /DOS.img (hd)
map --hook
root (hd-1,0)
chainloader /IO.SYS


clear
#turn off echo of values on screen
debug off
#make sure all drives are unmapped as this can change the count
#reset hdcount in BIOS to default
map --unhook
map --unmap=0:0xff
root (bd)
#set number of hard disks in system from BIOS location 475h
set /a HDCNT=*0x475 & 0xff
set NEWHD=(hd%HDCNT%)
if %HDCNT%>=2 echo %HDCNT% Hard disks in system, next free drive is %NEWHD% && pause --wait=3


title map floppy image as next hd
map --unmap=0:0xff
map --unhook
#set number of hard disks in system from BIOS location 475h
set /a HDCNT=*0x475 & 0xff
set NEWHD=(hd%HDCNT%)
if %HDCNT%>=2 echo %HDCNT% Hard disks in system, next free drive is %NEWHD% && pause --wait=3
echo Mapping /fd002880.ima as %NEWHD%
map /fd002880.ima %NEWHD%
map --hook
root %NEWHD%
ls %NEWHD%/
pause
chainloader %NEWHD%+1


title Map as a new HD from test.ima from PXE root folder
set /a hdn=*0x475 & 0xff
map --mem (pd)/test.ima (hd%hdn%)
map --hook
 

OR just use:

map --mem (pd)/test.ima (hd)
map --hook
 

Example to find correct 'devices' switch (using 'fh' to include floppy disks when there is no floppy drive can cause long delays of 5 minutes or more!)

#bit 0 in 410 indicates a boot floppy is present
set /a FLP=*0x410 & 0x01
echo There is a boot floppy present && pause
set dev=h
if %FLP%>=1 set dev=fh && set ignore=
--ignore-floppies 
find --set-root %ignore% --ignore-cd /ntldr 
#alternatively use
find --set-root --devices=%dev% /myfile.iso
#add rest of commands here...