60 - Add Plop to your grub4dos menu

Unique hits free hit counter

If you have a >128GiB bootable USB hard disk (and even 8GB for some systems!) and you try to boot to a partition that extends beyond 128GiB or access a file that extends beyond 128GiB from within grub4dos, you may find that on some systems, grub4dos will fail to boot or report errors - but on other systems the same USB HDD and menu option boots just fine. The problem is not with grub4dos however - the problem is with the USB BIOS on the target system. A tell-tale sign that the target system's BIOS is to blame is to check that your test menu entry does work correctly under QEMU - if it does then the fault must lie with the target system's USB BIOS!

Another issue with some BIOSes is that some old BIOSes only support booting at USB 1 speeds and so are very slow when booting a large OS from a USB drive.

Plop is a boot manager that contains it's own USB 1 and USB 2.0 read-only drivers. This means that as long as you can boot from something and run Plop, then Plop will allow you to boot from a USB drive using it's own USB 2 drivers and therefore usually at USB 2.0 speeds.
  
Plop is normally run by booting from a CD or DVD or from your hard disk. Once Plop runs you can use it to boot from a USB device even if your BIOS does not support USB booting. 

More information on Plop can be found here.

But 'Wait!' I hear you cry - 'If I can already boot from my USB drive why would I need Plop!". Well the answer is that some BIOSes do not like drives over 128GiB when accessing them through the USB BIOS.The USB BIOS has not been coded correctly and some do not like large sector addresses (>1024x255x63). The ATA BIOS code for IDE/SATA hard disk drives may have been modified correctly so that it works just fine with internal hard disks larger than 128GiB, but some BIOS developers seem to have forgotten to also fix the code in the USB BIOS and so if you try to access or boot from any sector at a position greater than 128GiB via USB (some BIOSes have an 8GB limit!), you may get errors reported and the drive will not boot to your intended OS even though it boots from grub4dos!

A second reason is for faster loading from USB if your BIOS only supports USB 1.0 mode booting. Plop has a USB 2.0 driver and so by loading Plop, you can dramatically reduce boot times of large OS's from a USB drive by loading Plop first if the BIOS only supports USB 1.0 boot speeds. 

So, it is very handy to be able to have Plop as a menu entry in your USB drive's grub4dos menu. You can download the Plop zip file from here. Plop is free for personal use but not free for commercial use (same as RMPrepUSB licence).

In this tutorial, I will show you how to add Plop to your USB drive's grub4dos menu so that you can run Plop after you have booted from your USB drive (assuming your BIOS has some sort of USB boot support). 

1. Download Plop from here.
2. Extract the plpbt.bin file from the zip file and copy the file to your USB drive (e.g. copy to the /plpbt folder)
3. Add the following menu entry to your grub4dos menu.lst to load it as a kernel (just check the file path matches where you put it!)

title Run Plop Boot Manager\nSelect USB if you are having problems booting USB drives larger than 128GiB
kernel /plpbt/plpbt.bin

plpbt.bin can also be passed some parameters:

Parameter Meaning
hiddenusbshort version of "stm=hidden cnt=on cntval=1 dbt=usb"
hiddencdromshort version of "stm=hidden cnt=on cntval=1 dbt=cdrom"
usb1=1Force USB 1.1 Mode 1 (ignore the EHCI controller)
usb1=2 Force USB 1.1 Mode 2 (force EHCI ports to usb 1.1)
 vmtext Switch to text mode
 fntbios Switch font to bios font
 int19hon Use INT19h instead of booting usb

Example grub4dos menu.lst entry for CD or hard disk to autoboot from USB:

          title Boot to USB using Plop
# run Plop, install Plop USB drivers and immediately boot to the USB device
kernel /plpbt.bin hiddenusb

Using Plop to fix buggy USB BIOSes

Boot from your USB drive as normal. Now if you are having problems booting to an OS from the USB drive menu, you can try booting through Plop instead. Plop will replace the BIOSes USB boot code with it's own and so may work better if you have a buggy USB BIOS.

1. Boot from your large USB drive as usual to the grub4dos menu
2. Choose the Plop boot menu entry that you have added when you followed the instructions above but delete the 'hiddenusb' word from the menu
3. Plop should now run and you will see a Plop menu similar to that shown below:



4. Now choose the USB menu entry (as shown selected in the above screenshot) and press Enter - Plop should now boot from the USB drive again and reload your USB grub4dos menu.
5. Now choose the same menu entry that would not work or worked slowly previously (e.g. boot a linux ISO or boot Windows 7 or whatever) - if the problem was that you had a buggy USB BIOS in the target system, then it should now work without any errors or much faster than before.

Note: if you have a USB keyboard, you may lose the keyboard once plop! loads - if so, try a PS/2 keyboard instead or use the hiddenusb keyword to autoboot from USB without needing a keyboard - see below for details.

Tip: The Plop menu allows you to boot from HDA Partition 1 which is the USB first partition if you booted from USB in the first place. If you install grub4dos to the PBR as well as the MBR, then you can use this entry as a failsafe to boot back to the grub4dos menu. On the other hand, if you have a bootable hd0,0 partition on your USB drive, you can use this entry to boot to it.

Configure plpbt.bin

You can easily configure Plop to autoboot from USB using the hiddenusb parameter (see example above or read the next section). You can also 'hard code' the plopbt.bin file using plpcfgbtGUI.exe, as follows:
Using the Windows utility plpcfgbtGUI.exe, you can configure the plpbt.bin file to boot to a default device after a timeout.



Detecting if Plop is installed

You can then use the modified version of plopbt.bin (settings as shown above) to make a grub4dos menu that automatically loads PLOP every time it boots and has a 5 second countdown, by using the modified plpbt.bin file and this line at the top of your menu.lst file:

cat --hex --locate="PoLPu@" (md)0x3d0+0x130 > nul || kernel /plpbt/plpbt.bin

This searches memory for the Plop signature and if it is not found it will load Plop. When Plop loads it counts down from 5 seconds and then boots from the USB drive (set as the default now) and when menu.lst reloads, because Plop is now loaded it does not reload Plop again.

Another method is to check to see if the BIOS has been patched by Plop. This uses the grub4dos executable file BIOS which can be obtained from the grubutils download area. This example requires plpbt.bin and bios to both be in the /plpbt folder on the USB drive. A modified version of plpbt.bin is not required as we are using the hiddenusb parameter to force Plop to boot to USB immediately.

# if plop is not installed, then run it to reboot from USB in USB 2.0 mode
/plpbt/bios int=0x13 eax=0x504c6f50 ebp=0x43484b44 > (md)0x300+1 &&  cat --locate="EAX=79657320" (md)0x300+1  || kernel /plpbt/plpbt.bin hiddenusb

The single line is in three parts:
  1. Run the BIOS executable with registers set to special values and redirect the output to memory (sector 1) at address 0x300
  2. If successful, look for EAX=79657320 at that location - if Plop is loaded then when you call int 13 with eax and ebp set with the previous values, plop will return the register EAX with 'yes ' = 79657320 - if plop driver is not loaded then the BIOS will not understand the call and just return garbage.
  3. If the bios call did not return 'yes ' then run plop - this will cause the plop menu to appear and boot again from USB (hopefully this time in USB 2.0 mode)

Autorun using Plop

You can autoload Plop with no extra user keypresses just before you run a menu item like this:


# suppress commands echoing values to display
debug off
# set no timeout  by default

timeout 0
# load default menu entry from /default file

default /default
# if Plop is not loaded then always set default to menu 0
/plpbt/bios int=0x13 eax=0x504c6f50 ebp=0x43484b44 > (md)0x300+1 && cat --locate="EAX=79657320" (md)0x300+1 || echo Plop driver not present && default 0
# if Plop is loaded the set timeout to 1 (default menu entry will have been set previously)

/plpbt/bios int=0x13 eax=0x504c6f50 ebp=0x43484b44 > (md)0x300+1 && cat --locate="EAX=79657320" (md)0x300+1 && echo Plop driver is loaded! && timeout 1
# let the dog see the rabbit!

pause --wait=1


title My Magic Key
root ()

title Run Plop and boot to DOS
find --set-root /default
# save this menu number as the default if Plop is not loaded (avoids error message if Plop is loaded)
cat --hex --locate="PoLPu@" (md)0x3d0+0x130 > nul && savedefault
# if plop is not installed, then run it to reboot from USB in USB 2.0 mode
/plpbt/bios int=0x13 eax=0x504c6f50 ebp=0x43484b44 > (md)0x300+1 && cat --locate="EAX=79657320" (md)0x300+1 || pause --wait=3 loading Plop! && kernel /plpbt/plpbt.bin hiddenusb && boot
map /dos622.ima (fd0)
map --hook
map --floppies=1
root (fd0)
chainloader /io.sys


title Hirens Boot CD 15.1 using Plop\nISO file must be contiguous (requires /HBCD folder on USB drive also)
find --set-root /default
# save this menu number as the default if Plop is not loaded (avoids error message if Plop is loaded)
cat --hex --locate="PoLPu@" (md)0x3d0+0x130 > nul && savedefault
# if plop is not installed, then run it to reboot from USB in USB 2.0 mode
/plpbt/bios int=0x13 eax=0x504c6f50 ebp=0x43484b44 > (md)0x300+1 && cat --locate="EAX=79657320" (md)0x300+1 || pause --wait=3 loading Plop! && kernel /plpbt/plpbt.bin hiddenusb && boot
map /Hiren's.BootCD.15.1.iso (0xff)
map --hook
root (0xff)
chainloader (0xff) 

You will need the special grub4dos file called default to be present in the root of the USB pen (available from the Beta Downloads area) and the /plpbt folder must contain both bios and plpbt.bin files.
Note that the lines that begins '/plpbt/bios int...' are long lines that may wrap on your screen - if you cut and paste the bold text it should work in your menus. 

Alternative way to detect the Plop driver not requiring the /plpbt/bios file (may not be as reliable)...

default /default
timeout 5

title Hirens Boot CD 15.1 using Plop\nISO file must be contiguous (requires /HBCD folder on USB drive also)
find --set-root /default
savedefault
# if plop is not installed, then run it to reboot from USB in USB 2.0 mode
cat --hex --locate="PoLPu@" (md)0x3d0+0x130 > nul   || pause --wait=3 loading Plop! && kernel /plpbt/plpbt.bin hiddenusb && boot
find --set-root /default
#now any normal grub4dos commands to run an OS, etc.
map /Hiren's.BootCD.15.1.iso (0xff)
map --hook
root (0xff)
chainloader (0xff)