Plop Boot Manager Six - PBM6Table of Contents - Plop Boot Manager Six - PBM6
PBM6 - BIOS/LegacyThe Plop Boot Manager Six (PBM6) is a new boot manager. It is still a test release, so be careful. Find more information in the Development Blog. This page is about the BIOS/Legacy version. See next page for EFI.
1. DownloadDonations are rare and welcome: Donate
pbm6-20240901.zip (latest) Notes see here 2. Screenshots
3. ManualKnown issues: A lot, its a test release. find more information in the Development Blog. What should work:
Minimum requirements: CPU i386, 46 MB RAM. 3.1. Starting the boot manager
Instructions for Linux Boot ManagersPBM6 can be started like a Linux Kernel by linux loaders. You can start it over the network with Syslinux in the same ways as Plop Boot Manager 5. SYSLINUX You can start PBM6 with the keyword "linux" and "kernel". Examples: label pbm6 menu label ^Plop Boot Manager 6 linux plop/pbm6 OR label pbm6 menu label ^Plop Boot Manager 6 kernel plop/pbm6 GRUB2 You can start PBM6 with the keyword "linux" and "linux16". Examples: menuentry "Plop Boot Manager 6" { linux16 /boot/plop/pbm6 } OR menuentry "Plop Boot Manager 6" { linux /boot/plop/pbm6 } See also https://www.plop.at/en/ploplinux/desktop/grub2.html Example /etc/grub.d/40_custom #!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. insmod ext2 set root='(hd0,1)' menuentry "Plop Linux" { linux /boot/bzImage root=/dev/sda1 } menuentry "Plop Boot Manager 5" { linux16 /boot/plop/plpbt.bin } menuentry "Plop Boot Manager 6" { linux /boot/plop/pbm6 } menuentry "PlopKexec" { linux /boot/plop/plopkexec } menuentry "Memtest" { linux16 /boot/memtest/memtest } LILO Example: image=/boot/plop/pbm6 label="Plop Boot Manager 6" Instructions for Windows Vista/7/8/10UEFI is NOT supported at the moment and will end in an error! Copy "pbm6-nt" to c:\ Add to Windows Boot Menu: ========================= Open the Command Prompt as "Administrator" Run the following commands: bcdedit /create {ntldr} /d "PBM6" bcdedit /set {ntldr} device boot bcdedit /set {ntldr} device partition=c: bcdedit /set {ntldr} path \pbm6-nt bcdedit /displayorder {ntldr} /addlast Remove the entry: ================= Warning! Be careful with this command! bcdedit /delete {ntldr} /f 3.2. Main Menu3.2.1. Boot optionsThe Main Menu lists all detected (IDE, SATA, USB) and mounted (VHD, VHDX) drives. The boot entries are pointing to the boot sector of the boot partition. The boot partition is marked with the boot flag in the MBR. Press Enter to boot. Sub-Menu: Press the key right to open the Sub-Menu. Hex Viewer: Press the key 'v' on a boot option to start the Hex Viewer. File Commander: Press the key 'c' on a boot option to start the File Commander. The File Commander opens, when the boot partition is formatted with a supported file system. 3.2.2. SetupNo special options at the moment. 3.2.3. ShutdownTurn off the computer. This option is available when ACPI provides the power off feature. 3.3. Sub-Menu3.3.1. HDD/SSD/VHD/VHDXThe Master Boot Record and all detected partitions (MBR & GPT) are listed. Master Boot Record:
Partition:
3.3.2. CDROM/DVDEject: Eject the disk. Todo: Using the Hex Viewer and the File Commander. 3.3.3. Drive informationShow drive model and serial. Show used device driver(s). 3.3.4. Screenshots
3.3. Configuration fileDetails coming soon. 3.4. Configuration through kernel command lineDetails coming soon. 3.5. ViewerThe Viewer can be used for drives, partitions and files. For drives and partitions, the viewer is locked to the hex view. There is a simple autodetection for files to set hex view for binary files and text view for text files. You can switch the view with the key F4.
Keys:
File Text View, Hex View
Drive Hex View - MBR
3.6. File CommanderYou can navigate through supported file systems, view files and mount VHD/VHDX files.
More features are planed. File Commander showing a directory, on NTFS
File Commander showing VHD and VHDX files, on exFAT
3.7. VHD/VHDXDynamic and fixed size images are supported. You can view image details with the File Commander and also mount the images. Mounted images are listed in the Main Menu and can be used like any other boot option. VHD Image Details, VHDX Image Details
Main Menu with mounted VHDX Image, driver details
Video: VHDX Win10 Boot Test Jan/2022
4. PC SpeakerPBM6 has PC Speaker support for a simple screen reader and notifications. This will help blind and visually impaired people to use the boot manager. The Morse Code is used for the text. There is a sound notification when the boot manager is ready to use. In the main menu, you hear a short information with two chars. For boot entries, the first char is the drive type and the second char is the bus type. Example: Hard disk IDE is HI. CD-ROM SATA is CS. Hard disk USB is HU. Static menu entries: Setup is SE. About is AB. Shutdown is SH. With a hotkey, you hear the whole text of the menu entry. Attaching and removing an USB drive gives a notification sound. The PC Speaker feature will be available in the next Test Version. Use CTRL-F5 to enable/disable the PC Speaker support. Pressing F5 will beep the current text as Morse Code. Demonstration videoExternal content blocked. Watch on YouTube Download as MP3: pbm6-pcspeaker.mp3 Download as text: pbm6-pcspeaker.txt 5. pbm6-dos.exepbm6-dos.exe is a DOS program to start PBM6. You can also start PlopKexec or a Linux Kernel. What can you do?
You can use the program with some parameters. Parameters: /? This help. /v Print program version. /d Debug mode. /e <file name> Write loader to file. /k <file name> Load Boot Manager or Linux Kernel. /i <file name> Load initrd file. /a <parameters> Append, parameters for the boot manager / kernel. Use " here for multiple parameters. /s xxxx Load real mode loader to segment (hex). Example: /s 9000 /d: Some debug information. /e <file name>: Extract the loader. You can append another program to the loader. pbm6-dos /e ldr.exe Attach a new program in DOS: copy ldr.exe+pbm6 newpbm6.exe PlopKexec: copy ldr.exe+plopkexec plpkexec.exe Or a Linux Kernel: copy ldr.exe+bzImage linux.exe PBM6 - EFIThe Plop Boot Manager Six (PBM6) is a new boot manager. It is still a test release, so be careful. Find more information in the Development Blog. This page is about the EFI version. See previous page for BIOS/Legacy. Important: Secure Boot must be disabled to use PBM6-EFI. But thats a security risk. Its up to you to disable Secure Boot.
1. DownloadDonations are rare and welcome: Donate pbm6-efi-20230206.zip LICENCE.txt
pbm6-efi-20230125.zip 2. Screenshots
3. Main Menu and InstructionsThe boot manager is under development. More and better instructions coming soon. Important: Secure Boot must be disabled to use PBM6-EFI. But thats a security risk. Its up to you to disable Secure Boot. In the main menu use the left/right keys to change the screen. On the boot option use the Tabulator key or 'e' to open the sub-menu for more options. How to start PBM6-EFI:
4. Config fileDownload sample: pbm6.cfg # Test configuration # # Note: All is case sensitive at the moment. # # Paths: # \efi\plop\pbm6.cfg # or # \efi\boot\pbm6.cfg [Main] # Countdown - Wait for booting with a countdown. # This can be used also with StartHidden. # Valid values: true, false # Default: false #Countdown false Countdown false # CountdownValue - Wait number of seconds to boot. # Default: 10 #CountdownValue 10 # LastBootedOption - This will be set by the boot manager. It can be overwritten by # Third Party Software. # # Examples: # LastBootedOption "Firmware/Boot0001" # LastBootedOption "Detected/Start Memtest" # LastBootedOption "MyBootOptions/Boot0001" # DefaultBoot - Selected on boot manager start. # This can be used also with StartHidden. # Valid values: LastBootedOption, entry title # # Examples: # DefaultBoot LastBootedOption # DefaultBoot "Plop Linux" # DefaultBoot "Boot00001" # # Limited to Firmware: # DefaultBoot Firmware/Boot0001 # # Limited to options in [MyBootOptions]: # DefaultBoot MyBootOptions/Boot0001 # # From boot drive: # DefaultBoot \efi\memtest.efi # DefaultBoot \efi\grub\grubx64.efi # StartScreen - Active screen on boot manager start. # Valid values: Firmware, Detected, MyBootOptions # Default: When there are entries in [MyBootOptions] - MyBootOptions # Else - Detected #StartScreen Detected # StartHidden - Hide boot manager. # Valid values: true, false # Default: false #StartHidden false # UnhideOnDeviceChange - Used in combination with StartHidden. Unhide the # boot manager when the stored device list is different to the current device # list. For example, you connect an additional USB drive. This would unhide # the boot manager. Without the additional drive, the boot manager is not # shown while booting. # Valid values: true, false # Default: false #UnhideOnDeviceChange false # UnhideOnKey - Used in combination with StartHidden. Unhide the boot manager # when a key has been pressed. # This can be used also with a countdown/countdown value. # Valid values: any, ESC, none # Default: any #UnhideOnKey any # FontWeight - Select boot manager font weight. # Valid values: normal, bold # Default: normal #FontWeight normal # ScreenHeight - Find resolution closest to this value. # If you set a value of 1000, then the boot manager scans all # possible resolutions of your graphic card to find the closest # screen resolution. It prefer wide screen resolutions. # Depending on your graphic card it can end up for example in # 1024x768 or 1280x1024. # The default value of 768 will find usually a resolution # of 1024x768. # Default: 768 #ScreenHeight 768 # BootScreenHeight - Set screen resolution on boot. # When the value is set, then the boot manager set the closest # resolution to this value on booting. # Default: disabled #BootScreenHeight 768 # Background - Currently not implemented. # Valid values: none, Starfield #Background Starfield [MyBootOptions] # Syntax: # "TITLE" "PATH" # "TITLE" "PATH" "PARAMETERS" # "PATH" # Note: The quotes are optional but needed to keep a space. # # Examples: # Wrong: Output of efibootmgr, but is not compatible "MemTest Vbox HD" HD(1,GPT,0a71dc5a-53b0-4a99-81b7-3c548adda764)/File(\efi\memtest.efi) # Wrong: Output of efibootmgr, but is not compatible MemTest HD(1,GPT,591b2b2f-1f74-42d7-a55e-a5eec36b418b,0x800,0x96000)/\EFI\memtest.efi # Wrong: Output of efibootmgr, but is not compatible "Plop Linux" HD(1,GPT,591b2b2f-1f74-42d7-a55e-a5eec36b418b,0x800,0x96000)/\EFI\BOOT\bzImage "root=/dev/sda2" # Wrong: "\EFI\BOOT\bzImage root=/dev/sda2" # # Valid: #"Plop Linux Live" \syslinux\kernel\bzImage initrd=\syslinux\kernel\initramfs.gz #"MemTest" \efi\memtest.efi #"Plop Linux SDA2" HD(1,GPT,0a71dc5a-53b0-4a99-81b7-3c548adda764)/\plop\bzImage "root=/dev/sda2" # Firmware boot entry. #Boot0001 # Firmware boot entry with custom title. #"firmware cdrom" Boot0001 # Simple entry without title #HD(1,GPT,0a71dc5a-53b0-4a99-81b7-3c548adda764)/\efi\memtest.efi # Simple entry without title. #\efi\memtest.efi [KnownDevices] 5. Install exampleSee installation example in the video Install Plop Linux - Desktop - UEFI. 6. Todo
Development BlogThe new boot manager is written from scratch. Planed features are
Donations are rare and welcome: Donate 2024-09-01 - Various fixes and changesPBM6 hang on some computers
Caused by: Timer IRQ not working after using VESA mode. Solution: Enable IRQ0 when the boot manager starts an OS. Floppy detectionFixed: Floppy motor not stopping after floppy drive detection. Boot from floppyFixed: Reading the whole file did not work correctly. The last cluster of the file hasn't been readed. Floppy image and ISO file
Added pbm6-nt, pbm6-dos.exe and Changelog.txt to floppy image and ISO file. Various
Renamed pbm6nt to pbm6-nt. 2024-03-01 - PBM6 - BIOS/Legacy - USB EHCI bugfix, floppy (FAT12) loader updateEHCI Controller freezeSome EHCI Controllers reading the entry of the Periodic Frame List even when the entry is marked as terminated. This ends in an error when no QH structure is linked. Fix: Fill the Periodic Frame List with a pointer to an empty/inactive QH. Mark the entry as terminated. Start PBM6 from floppyFixed, FAT12 loader rewritten from scratch. 2023-08-18 - PBM6 - BIOS/Legacy - A20Update: Query A20 status. 2023-08-14 - PBM6 - BIOS/Legacy: Bug fixes and pbm6-dos.exeNew/updated features
Bugfixes
Information about OS/2Booting OS/2 from PBM6 hang on loading the IBM1S506.ADD driver or fails to boot. OS/2 boots fine when you replace the IBM1S506.ADD with the driver PTI1S506.ADD. In your file 'c:\config.sys' disable the old driver rem BASEDEV=IBM1S506.ADD Enable the new driver. Add this line below the IBM1S506.ADD BASEDEV=PTI1S506.ADD pbm6-dos.exeI have been asked for a tool that runs under DOS to start PBM6 and continue to boot an OS from USB. The idea was to transfer the tool and the boot manager through a serial port connection to computers without (or broken) floppy drive, CD drive and no ability to boot from network, but booting DOS from the hard disk still works. pbm6-dos.exe is a tool for this. Thanks to Lys for the idea and testing. pbm6-dos.exe is a DOS program to start PBM6. You can also start PlopKexec or a Linux Kernel. What can you do?
You can use the program with some parameters. Parameters: /? This help. /v Print program version. /d Debug mode. /e <file name> Write loader to file. /k <file name> Load Boot Manager or Linux Kernel. /i <file name> Load initrd file. /a <parameters> Append, parameters for the boot manager / kernel. Use " here for multiple parameters. /s xxxx Load real mode loader to segment (hex). Example: /s 9000 /d: Some debug information. /e <file name>: Extract the loader. You can append another program to the loader. pbm6-dos /e ldr.exe Attach a new program in DOS: copy ldr.exe+pbm6 newpbm6.exe PlopKexec: copy ldr.exe+plopkexec plpkexec.exe Or a Linux Kernel: copy ldr.exe+bzImage linux.exe 2023-02-14 - PBM6 - EFISee installation example in the video Install Plop Linux - Desktop - UEFI. 2023-02-06 - PBM6 - EFIMinor fix: Hide message "Found ...." when booting in hidden mode. 2023-01-25 - GNU-EFI patch - UEFI functions with 11 parametersgnu-efi 3.0.15 supports UEFI functions with at maximum ten parameters. This is my patch for gnu-efi 3.0.15 to extend the support for UEFI functions that have eleven parameters. I came over the problem when I added the USB gamepad support to PBM6-EFI last year. The EFI_USB2_HC_PROTOCOL - USB Control Transfer function has eleven parameters. Sidenote: The EFI_USB2_HC_PROTOCOL works, but finally I used the EFI_USB_IO_PORTOCOL for the gamepad support. Download: gnu-efi-3.0.15.patch 2023-01-25 - PBM6 - EFI: Some fixes
Download: pbm6-efi-20230125.zip
QEMU EFI: Download OVMF.fd from GitHub
(Clear Linux* Project Page).
2022-11-18 - PBM6 - BIOS/Legacy: Bug fixesThe IRQ/INT handling for real mode <-> protected mode has been rewritten. This should solve a lot of issues. Download: pbm6-test-20221118.zip, pbm6-test-20221118-serial.zip 2022-11-04 - PBM6 - BIOS/Legacy: Native PXE boot, bug fixes
This release includes a new file called pbm6.pxe. Use it for native boot from network with PXE. Valdo H. asked for that feature. This release has some bug fixes but other fixes are still missing. A better version comes soon. A lot of documentation is still missing. Download: pbm6-test-20221104.zip, pbm6-test-20221104-serial.zip 2022-11-04 - PBM6 - EFI: ISO fixThe ISO did not work under VMware. It is fixed now. Download: pbm6-efi-20221104.zip 2022-10-25 - PBM6 - EFI: Xbox 360 Controller & PlayStation 3 Dualshock ControllerI received the request to add support for the SteamDeck to navigate through the menu with the SteamDeck controls. As I have no SteamDeck, the development is a bit more complicated. But SteamDeck support will come. Meanwhile, today I added two simple drivers to navigate with the Microsoft Xbox 360 Controller and the Sony PlayStation 3 Dualshock Controller through the menu. Mapping: Left Stick, D-Pad: Up, down, left, right Supported Vendor/Product IDs: 045e:028e - Xbox 360 Controller Download: pbm6-efi-20221025.zip 2022-07-04 - Error - value too large for defined data typeDuring bug fixing of the serial console support I stumbled over a strange bug when booting Linux. I used two old laptops, connected with a serial cable. To be sure that the serial ports are working fine, I booted Plop Linux 22.2 for i486. The laptops have 32 bit processors. Suddenly, booting stopped and I got the error "value too large for defined data type". I was surprised, because booting Plop Linux worked always fine on those machines. So I tried older versions of Plop Linux and finally the version 19.4 booted fine. I figured out that newer glibc versions causing the error. Plop Linux 19.4 is using glibc 2.30, later glibc 2.33 and 2.35 was used. Another reason for the error is the hardware clock of the laptops. As they are very old and the CMOS battery is empty, they have a default date for example with the year 1998. A correct date does not matter for the serial test, so I booted with the BIOS default values, which failed with the newer glibc (but worked with glibc 2.30). When I set the current date in the BIOS, then booting worked fine with the newer glibc. I played around and saw that a year before 2000 is problematic. In short, to avoid the glibc error 'value too large for defined data type' on old machines (32 bit) set a date with the year 2000 or later and recent glibc will work fine. 2022-07-03 - PBM6 - BIOS/Legacy: Serial Console FixFixed serial console support. For testing the configuration is hard coded to COM1, 115200 baud, 8 bits, no parity, one stop bit. Details coming tomorrow. Download: pbm6-test-20220719-serial.zip - Use this special version only when you want to try/use the serial console support! 2022-06-11 - PBM6 - BIOS/Legacy: Serial Console SupportSerial console support has been added. For testing the configuration is hard coded to COM1, 9600 baud, 8 bits, no parity, one stop bit. This will be configurable later. VT100 codes are used for the interface. When the serial console feature is used, then the boot manager automatically switches to the screen resolution text mode 80x25. Download: Removed because of bugs See the demonstration video. Note, keyboard input from serial console & remote computer. External content blocked. Watch on YouTube 2022-05-29 - PBM6 - BIOS/Legacy bug fix release
exFAT fix 2022-05-06 - PBM6 - BIOS/Legacy: Temporary release notesWindows boot from VHD works with this release. Instructions to create a Windows VHD coming soon. Basically just install Microsoft Windows as usual in Hyper-V or VirtualBox to a VHD disk and add a custom VHD boot entry. Boot from VHDX should work too, but is untested at the moment. (Have no time) This release has some boot fixes. External content blocked. Watch on YouTube 2022-04-06 - PBM6 - BIOS/Legacy: Temporary release notesJust an overview. Details coming soon....
Minor USB driver fixes. External content blocked. Watch on YouTube 2021-09-09 - PBM6 - BIOS/Legacy: USB 3 fixes
USB 3.0 driver updated. 2021-07-23 - PBM6 - EFI
Bugfix release + new setup options. 2021-06-16 - PBM6 - EFI
Initial test release of PBM6-EFI. Written in C using GNU-EFI. 2021-01-25 - DirectoriesI renamed the directories in the pbm6-test-20210119.zip. The "native" directory is now the first one. That version is using my drivers from start. The BIOS version freezes on keypress on some computers. 2021-01-19 - USB 3 fixes, ACPI
Updated: USB 3.0 driver, USB HUB driver. There was a break for many months, because I am working on other projects. The most interesting is the work with the Unreal Game Engine. Here are some screenshots, see more here.
A few weeks ago I started to fix the USB 3 problem. I fixed the USB 3 initialization bug that I had with the ASMedia Technology Inc. ASM1142 chipset. One big problem was that the host did not fire an IRQ. I had no clue why. I thought, maybe it works only with the APIC, but I didn't really believed that. Anyway I implemented ACPI which is the base requirement for APIC and then I added the support for Local APIC and IO APIC. That worked fine, but the USB 3 host still did not fire an IRQ. So the bug search continued. Finally, the problem was that I initialized the ERSTBA register before the ERSTSZ register. For easy handling of the specification documents, I always write the page number of the PDF to the comments. So I can find the related sections quickly. By luck I saw that the ERSTSZ init is one page before the ERSTBA page. So I moved the ERSTSZ part up and the chip started to work. However, it wasn't easy to find that. It took days. Here is the related code. Not easy to fix when you have no idea whats wrong.
With the working ASMEDIA chipset I was able to remove some other USB 3 bugs and I added USB 3 support to the USB HUB driver. Additionally, I fixed a HUB driver bug. With the ACPI driver, the shutdown function should work now fine. APIC is disabled, because at first it works fine now with the classic PIC and the second reason is that there would be problems with starting DOS. 2020-04-08 - Minor updatesFixed:
Known USB 3 driver issues: The event ring does not report anything on ASMedia Technology Inc. ASM1142 and NEC Corporation uPD720200 host controllers. I don't know why at the moment. 2020-03-19 - USB 3 xHCI added, some IDE fixes, partition detection fixUSB 3 support added. The xHCI driver is almost complete. Booting USB 3 devices works. I tried some operating systems, all booted fine. Also Windows 10 PE and it booted from USB very fast without problems. Finally USB 3 is a simple concept and easy to implement. I like it. The xHCI driver adds only 9.5 KB. USB 3 Status: USB drives and keyboards are working. But there is a problem with disconnecting and reconnecting a device. USB HUBs are currently not working. They need a special handling. But HUB support for USB 3 will come. Release fixes:
Some screenshots 2020-03-07 - USB 3 - xHCIThis week I started with USB 3. Reading the specification document of the USB Controller. The eXtensible Host Controller Interface for Universal Serial Bus (xHCI). Very interesting and different to USB 1.1 and USB 2.0 controllers. It took some time to put all the information together in my brain, but finally I understood it (the most I think). I wrote a test program and SUCCESS - I am able to read data from an USB device. It was not so easy as it sounds, but thats past and doesn't matter now. The basics are done. Next stage is to clean up the code, create a lot of functions and finally create the USB 3 driver. Thats a lot of work, but I have a good feeling. Source code screenshot 2020-02-20 - Many bug fixesI spent a lot of time for bug fixing and I am quite happy with the result. I made also important changes in the internal program structure. Bug fixes:
The test version is available for download. 2020-02-12 - Nightly build with fixes releasedOfficial test release with bug fixes comes in a few days. 2020-02-05 - Nightly build with fixes releasedOfficial test release with bug fixes comes in a few days. 2019-12-19 - USB 2.0 fixA bug for some USB 2.0 controllers has been fixed. I forgot to check bit 0 of the HCCPARAMS register. If the bit is set, you have to use larger data structures (EHCI Specs. Apendix B). Ignoring that was the reason that memory area has been suddenly overwritten which resulted in an error. Also some minor bugs have been fixed. Download: See top of this page 2019-11-29 - Many fixes and beepsThis release has a lot of bug fixes. It comes also with the new PC Speaker support, see the post from 2019-11-17 for more information. Sound card support with additional features is planed. Use CTRL-F5 to enable/disable the PC Speaker support. Pressing F5 will beep the current text as Morse Code. Download: [removed - outdated] 2019-11-17 - PC SpeakerPBM6 has PC Speaker support for a simple screen reader and notifications. This will help blind and visually impaired people to use the boot manager. The Morse Code is used for the text. There is a sound notification when the boot manager is ready to use. In the main menu, you hear a short information with two chars. For boot entries, the first char is the drive type and the second char is the bus type. Example: Hard disk IDE is HI. CD-ROM SATA is CS. Hard disk USB is HU. Static menu entries: Setup is SE. About is AB. Shutdown is SH. With a hotkey, you hear the whole text of the menu entry. Attaching and removing an USB drive gives a notification sound. The PC Speaker feature will be available in the next Test Version. Demonstration video: Download as MP3: pbm6-pcspeaker.mp3 Download as text: pbm6-pcspeaker.txt 2019-11-04 - Boot Manager Name - Test Release - Starting the boot manager - DownloadAt first I have to say, I have chosen a name for the new boot manager. Some people sent me various names, and I say thank you, but none made me happy. The new boot manager will be called 'PBM6' (Plop Boot Manager Six). I know, not really extraordinary. You may ask why I searched for a different name. There are different reasons, but mostly to avoid just saying 'plop' to the boot manager. I am still thinking about an alternative name, but I think 'PBM6' is fine. Test ReleaseI think, the time has come to release a test version. The test version is not perfect, so don't expect too much. There is much left to do. Many features are missing. Known issues:
What should work:
Some notes:
Starting the boot manager
Instructions for Linux Boot ManagersPBM6 can be started like a Linux Kernel by linux loaders. You can start it over the network with Syslinux in the same ways as Plop Boot Manager 5. SYSLINUX You can start PBM6 with the keyword "linux" and "kernel". Examples: label pbm6 menu label ^Plop Boot Manager 6 linux plop/pbm6 label plp6 menu label ^Plop Boot Manager 6 kernel plop/pbm6 GRUB2 You can start PBM6 with the keyword "linux" and "linux16". Examples: menuentry "Plop Boot Manager 6" { linux16 /boot/plop/pbm6 } OR menuentry "Plop Boot Manager 6" { linux /boot/plop/pbm6 } See also https://www.plop.at/en/ploplinux/desktop/grub2.html Example /etc/grub.d/40_custom #!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. insmod ext2 set root='(hd0,1)' menuentry "Plop Linux" { linux /boot/bzImage root=/dev/sda1 } menuentry "Plop Boot Manager 5" { linux16 /boot/plop/plpbt.bin } menuentry "Plop Boot Manager 6" { linux /boot/plop/pbm6 } menuentry "PlopKexec" { linux /boot/plop/plopkexec } menuentry "Memtest" { linux16 /boot/memtest/memtest } LILO Example: image=/boot/plop/pbm6 label="Plop Boot Manager 6" Instructions for Windows Vista/7/8/10UEFI is NOT supported at the moment and will end in an error! Copy "pbm6nt" to c:\ Add to Windows Boot Menu: ========================= Open the Command Prompt as "Administrator" Run the following commands: bcdedit /create {ntldr} /d "PBM6" bcdedit /set {ntldr} device boot bcdedit /set {ntldr} device partition=c: bcdedit /set {ntldr} path \pbm6nt bcdedit /displayorder {ntldr} /addlast Remove the entry: ================= Warning! Be careful with this command! bcdedit /delete {ntldr} /f DownloadDownload: [removed - outdated] 2019-08-28 - No special newsI had to do other various work over the last weeks, so no real progress. But the NTFS loader looks really good. Today I fixed a bug in a simple program, that is used for the window development. Its also used as sample program. Weeks ago, I did a heavy but needed code adjustment. A lot of code had to be modified. Required to put the program data on any RAM location. I planed to do that earlier, but it it never happened. Meanwhile all works, also the sample program. Parallel I spend this week to build a fresh Plop Linux release (Xfce 4.14 is here, yes). Not every updated program compiles flawless. I have to do a lot of things to make it flawless. I have to do more with the new Blender 2.80, which is amazing. So many new things and changes. Although I have 10 years Blender experience, I feel like a beginner. Unfortunately, I have no time. 2019-07-19 - NTFS supportSince yesterday, I am working on a simple NTFS driver. My goal is to simplify the process of adding the boot manager to the Windows Boot Menu. Later, the NTFS driver could be used for other tasks too. My driver will not have full write support. Maybe I add some limited write access for existing files to modify bytes and write to a config file. Support for compressed or encrypted files is not planed. Over twenty years ago (1998, 1999) I also worked on a program with NTFS read access. A lot of analyzing with a Hexeditor was required. Bytes, sectors and so on, figure out how the files are stored on the drive. Nowadays, you find a lot of documentation in the web. This makes the programming much easier. But a Hexeditor is still used, some things will never change. Today, I was looking at my source code from the past. The program was never finished, but important things worked. I was wondering how fast the time goes by. My goal for today was reading directories and files. A lot of important functions are still missing, but directory listing and file reading works. Goal for today reached. 2019-06-27 - Boot CD/DVD "El Torito"I used four days exclusive to extend the INT 13h functions with "El Torito" functionality. This specification handles booting CD-ROMs. The Plop Boot Manager supports only IDE drives. The new boot manager supports now booting CD/DVD on IDE, SATA (AHCI) and USB (UHCI, OHCI, EHCI) without the help of a BIOS. At first, I support only the "No emulation" media type. It is the standard media type since (maybe 20) years. First tests are looking good and disc reading is fast. I tested successful some Linux Distros and various Microsoft Windows install DVDs. Next goal is to improve the user interface and some additional hardware tests. A first public test release is coming closer, but still so much left to do. It seems, the new boot manager name won't be "ehBoot" or "eh-boot". Still searching for a name without "Plop". 2019-06-12 - USB 2.0 HUB and a videoAt first, my USB HUB driver works great. The news are not really news. The most happened weeks ago. Lets talk about the USB HUB driver. I was worried about the split transactions, which are required on USB 2.0 HUBs to connect USB 1.1 devices to the USB HUB. But it was no problem to implement it. So the USB Keyboard (USB 1.1) works also fine when its connected to the USB 2.0 HUB. Although the HUB driver was working properly, I was not happy with the code. So I rewrote it completely a few weeks ago. It took two days, but I felt better. I tested USB boot from a thumb drive with various operating systems. All booted fine. The USB Keyboard works as long as the OS did not grab it. That means, you can use the keyboard with other boot managers and also with DOS when you boot from USB. Remember, thats not possible with the Plop Boot Manager 5. There was a surprise with ReactOS. It booted very slow. Loading the RamDisk takes ages. That's also stated at the ReactOS Wiki RAM Boot under "Known issues". It took much time with the BIOS USB and also with my new USB driver. But goes really fast with my old Plop Boot Manager 5. I was confused, because usually, the new driver is faster than the old driver. Then I remembered, that I added a simple caching system to the boot manager. I did the same again with the new boot manager, and now it boots also fast. It seems the ReactOS loader reads only one sector after another, instead of many sectors at once, which would be much faster. This could be the reason for the slow RamDisk loading. Just a speculation. I did not check the code. I created a not very spectacular video, comparing the USB boot process BIOS vs EH-BOOT. Note, I am a fan of the ReactOS project. I hope they have enough power to create a stable MS Windows compatible release. Meanwhile I think, I will call the new boot manager "eh-boot" or "ehboot". But I don't know how it sounds from a native English speaker. Checkout the video. At first, you see the setup with the Asus Eee PC, the USB 2.0 HUB which has the USB Keyboard and Thumb drive connected. Then comes the boot process with a timer that measures the USB part and some time warps when it boots with the BIOS. Recorded by night, because of the lights. Spoiler alarm: BIOS takes 7:22, the new boot manager takes 0:51. External content blocked. Watch on YouTube 2019-02-22 - Status update - USB Boot, USB KeyboardI was busy with other work, but there was also some progress on the new boot manager. Meanwhile, I wrote the INT 13h handler required to boot native from hard disks without the help of a BIOS. It works native with IDE, SATA and USB hard disk drives. CDROM and Floppy is left to do for for the INT 13 handler. SATA is not tested very well. USB drives bigger than 2 TB are supported, so you can even boot from an 8 TB USB drive. USB read and write is supported. For development purpose, I focused on UHCI. OHCI and EHCI will be added easily when all works fine with UHCI. Currently, DOS and Linux boot fine. Under DOS I copied successful a lot of files using my USB driver, but it has to be tested later by others too. USB write support is experimental. Also, I almost finished the USB Keyboard driver and the INT 16h handler, required to use an USB keyboard under DOS or another boot manager. It works fine under DOS and also reduces the CPU usage when DOS is idle, because of using the 'hlt' command. For those who are interested how the driver looks like, find the source code of my USB Keyboard driver below. You have to collapse it :) The PS/2 keyboard driver has been updated too. Note: There is still no release date for the new boot manager!
Download: usb_kbd.inc, code_table.inc 2018-12-15 - Status update - ISO 9660 File System, Boot MenuThe ISO 9660 file system has been implemented quickly two weeks ago. What a nice file system. My driver supports also the Rock Ridge extension. That means long file names and so on. Currently I am working on the menu. A few boot modes are now working, but you have to wait for a test release! As in the Plop Boot Manager, there is a fallback mode to an amazing text mode 80x50. See the screen shot. There will be also a Plop Boot Manager theme with the modified borders. Using the menu When you press Enter at the drive entry, then the device will be booted in the standard way. This is for hard disks the MBR, for CDROMs the boot volume and for floppies the boot sector. Pressing key right. I know, it looks similar to the graphic mode, but its text mode and this is the amazing part, as it was in the Plop Boot Manager :) The binary size is currently 57 KB. Without textures, no USB, but native IDE and SATA and a lot of other important things. I have to be careful to add one driver after another. The USB drivers needs some adaptions and will be added later. Note: I saw the new features of Blender and also the new features of the Unity Game Engine. Wow, especially Blender!!! I have to finish the boot manager to continue with my Armored Eye Story/Game. Cyberpunk :) 2018-11-29 - Loader for CDROMImplementing the loader to start the boot manager from CDROM was quite easy. Now continuing with the ISO 9660 file system. Its a simple file system and I am sure, I will need it later. Great to see that old and simple concepts like ISO 9660, El Torito and also FAT FS are still important nowadays. 2018-11-27 - Window based menu systemUSB HUB driver The driver for USB 1.1 works fine. The driver for USB 2.0 is left to do. Window based menu I wrote routines for a window based menu system. As the Plop Boot Manager, it supports text and graphic mode, various resolutions (also wide screen), various fonts. The new system supports background images and textures with alpha support to enable window shadows. Todo • Theme system to customize the look easily. This is a list of the functions from the current window library.
Hello world window code sample
I am coming closer to put all together. The window based menu system is good enough for the moment. It will be improved later. Now, I focus on booting. I have to write a simple loader to start the menu from CD-ROM. 2018-10-05 - USB HUB driver status - continuedDevice enumeration works. The driver works for USB 1.1. Next: Improving and cleanup the code. Do some testing. Add support for USB 2.0 to the driver. 2018-10-04 - USB HUB driver statusThe USB HUB driver is still under development. Yesterday, I found myself in some kind of a dead end. The HUB worked and I was able to enumerate a fresh connected device. But my code was not good enough to run in an Interrupt Service Routine (ISR). Today, I rewrote mostly and now I am a big step forward. Device connect/disconnect on any port is recognized in the ISR. Device enumeration does not work at the moment, but this comes tomorrow. Here are two pictures of my current test machine running the HUB driver. It is my old Gericom Webboy, bought (I think) in the year 2000. 2018-09-18 - UHCI, USB HUB, Synthetic DNA MenuFor a long time nothing Boot Manager related happened. But last week, I made the required code update for the UHCI driver. Then I started to write the USB HUB driver. For testing, I want an USB HUB that supports only USB 1.1. I gave my old USB 1.1 HUB away for a few cents many years ago :(. So bought and received a new one last week. Last week (Thursday), I also had an idea about an extra ordinary menu. The Synthetic DNA Menu. I realized a concept with Blender. But it's only an idea/dream. Too heavy for a boot manager that has only some basic 3D processing routines. It's just a boot manager :) Maybe, I use this menu with the Armored Eye project. More about the Synthetic DNA Menu is here. VideoExternal content blocked. Watch on YouTube Images2018-08-07 - USB mass storage with UHCI/EHCI and the USB floppy driveThe mass storage function call synchronization for UHCI, OHCI and EHCI is almost complete. Hard disks, thumb drives and CDROM drives are working fine with the same function calls for all three controller types. My USB 1.1 floppy drive did not work on OHCI and UHCI. My fault was to ignore the Interface Protocol value from the device. This drive has to be accessed in another way than Bulk-Only drives. You have to send the ATAPI Command Block over the Control Endpoint and send/receive the data over the Bulk Endpoints. Now, the floppy drive access works fine for OHCI. Some code cleanup and updating the UHCI code is needed. What comes after the code update? There is still the USB HUB driver missing. The USB keyboard driver needs a lot of updates. 2018-07-24 - USB DVD driveThe first work I did today was to check why the USB DVD drive did not work. I found the problem quickly. I allocated only 512 bytes instead of 2048 bytes for the sector read destination buffer. 2048 bytes is the block size of CD ROMs. Because of the wrong size there was overlapped memory that created invalid data. The invalid data was the reason for the drive reset. Now the drive works perfect. The USB Floppy drive still makes problems. I have to check whats going on on the USB bus. But now there is some work to do for EHCI and UHCI. 2018-07-23 - Just a status updateI synchronized the OHCI and EHCI code that the access to the shared USB functions works in the same way. UHCI is left to synchronize. The base programs for those drivers lived in their own environment and function calls changed during development. Word sized parameters became dword size, here and there is an additional parameter required. Assembler is not flexible as a high level language, even with my macros ;). So you have to take care by yourself to submit the correct parameters in the correct size to a function call. That means more and overall a clean work, but at the end its also more fun for the software developer, in a funny or strange matter ;). I also cleaned up and simplified the USB Bulk driver, needed to access mass storage devices. I added nearly all required functions like inquiry, read capacity, read sector, write sector and so on. It works fine with the OHCI driver and hard disks/thumb drives. I also tried my USB Floppy Drive and USB DVD Drive. Unfortunately, one drive hung and the other resets itself. In other words, both did not work. That's life. It was a bit disappointing, but I will fix it. For EHCI, I have to update the USB Pipe logic and then test the bulk driver. But that comes later. 2018-07-21 - ReactOS/FreeLoader/Plop Boot ManagerIt has partially to do with the new boot manager. But its also important. I created a dirty fix to start the Plop Boot Manager from the FreeLdr boot menu. It has to be tested. See https://forum.plop.at/index.php/topic,1840.msg7424.html Some notes about ReactOS ReactOS error message "Userinit failed to start the installer!". You are using the wrong ReactOS CD for installation. Don't use the ReactOS Live CD, choose the other one. ReactOS boot error message "hive header failed" or blue screen. Maybe your virtual hard disk is too small. Use at least a size of 4 GB. 2018-07-11 - USB OHCI driver 16/32 bit testToday, I tested my USB OHCI code in my 32 bit environment. The code was written and tested in a 16 bit environment. The plan was/is to run the code in 16 and 32 bit CPU mode. In this experimental stage, the driver is not loaded dynamically. I had to prepare and hard code a few things and then.... It gave me a chill! It was great to see that the code worked fine in the same way as in the 16 bit environment. I am really happy :) Note: 16/32 bit code runs also on a 64 bit CPU. 2018-07-09 - USB OHCI driver implementationI started to add the USB OHCI routines to the boot manager test program as a driver. I was struggling for many hours with a mysteries bug. Finally I fixed the bug (again). The bug was an old "friend". Elmar, just set the device as PCI bus master! Rolling eyes! That was the problem. That hurts. Okay, now I can continue with the driver stuff. There are still tests and a stable workflow required to implement a dynamic driver loading. The OHCI routines have to be tested in various CPU modes too. Its time for a Pizza... 2018-07-06 - Minor updatesI finished only a few things. INT 13h hook for drive swapping works fine. I extended the FAT read support to FAT12 and FAT32. 2018-06-18 - FAT16, Linux Kernel, NTLDRNo update since one month. What happened? Nothing special. Just some booting. But don't expect too much! FAT16 reading works fine. I can change directories and read files. FAT16 writing and FAT12/32 support is left to do. But with the FAT16 reading support, I was able to do some interesting things. Native Linux Kernel booting works (from FAT16). I can load the kernel and an initrd file and boot Linux. I can also set the Linux Kernel Command Line. Native Windows XP booting with direct loading of the NTLDR works (from FAT16). More recent Windows booting should work too. That's not an important feature, but nice to have. MBR loading and booting works too. What comes next? There are still a lot of things to do. I am far away from any beta testing. Many things that are working are splitted up in own parts and have to put together. But this comes later. Next steps are • Boot sector loading and booting. That should not be difficult.That's a heavy to-do list for the next steps! 2018-05-07 - Are you dreaming in hex?Maybe sometimes! Hexadecimal is part of my life. File Allocation Table Artwork :) I started with FAT file system support. Currently required for native Linux kernel loading tests. The boot manager will need FAT support too. I began with FAT16. Directory listing works. Of course with long file name support (optional only 8.3 format). Cluster reading works too. Next step is a working "read file" routine. And then modify the code for FAT12 and FAT32. 2018-05-03 - MBR Partition Table / GUID Partition TableThe Master Boot Record partition table support has been finished. Classic and cascaded extended partitions are supported. Now, I am numbering the partitions in the same way as Linux. Primary partitions get a number from 1 to 4, according to the position in the partition table. The first logical partition starts with 5. I also wrote the support for GUID Partition Tables (GPT). All various partitions are accessed by the same shared ReadSector/WriteSector function call. It works very well :) 2018-04-28 - Drive access layerI did some code cleanup and various fixes. I also added a layer to access various drives with the same function call. Now it doesn't matter if its a DVD drive or a hard disk (floppy is not done yet). The drives are registered during PATA/SATA enumeration. I also added a simple support for the classic MBR to access primary partitions. The partitions are registered too and can be also accessed by a shared function call. Full MBR support and GPT support will be implemented on Monday/Thursday.
Read boot sector of partition 1 from drive 3.
Drive registration. Using wrapper functions for standardized calls. Dynamic registering for USB drives is not done yet.
Current drive register routine
2018-04-19 - ATAPI CDROM drive driversThe ATAPI drivers for IDE (PATA) and AHCI (SATA) for CDROM (and similar) drives are almost done. There is a strange behavior with the AHCI ATAPI driver. The first ATAPI command ends in an error. After this, all tested ATAPI commands are working fine. At the moment, I have no idea why the first command fails.
Drivers tested only on two machines. 2018-03-28 - Relocate addresses for program/driver loadingFor long time, nothing important happened. Now, I spent two days for a simple address relocation system which is needed to support dynamic loading of programs and drivers. I wrote two PHP scripts which are analyzing the list file, generated by NASM with the '-l' parameter. The first PHP script (syscalls.php) generates a file with jumps to the kernel system functions (syscalls.inc). This generated file is included by the program/driver (my_program.asm) to make it easy to call the kernel functions. NASM generates all addresses according to the ORG command. Those addresses must be updated when the program/driver has been loaded into the memory. The second PHP script (relocate.php) creates a file with two tables (relocate_table.inc). This tables are holding the positions of all addresses used by the program/driver. This file has to be included too. The addresses, which are now stored in the header of the program, are updated by a simple routine in the kernel (relocation code), before the kernel can start the program. Here is an overview with source codes. It may change in the future. It is just the first version. Maybe it looks difficult, but I tried to keep it simple. Explaining is not my strength. Sample code to load a program:
Simple program header:
Address relocation code:
Sample syscalls.inc:
Sample program (my_program.asm):
Simple PHP script to export kernel function calls (syscalls.php):
Simple PHP script to create the relocation table (relocate.php):
2017-12-29 - NASM HelperAt the beginning of the new boot manager development, I wrote some macros to make the use of function calls easier in Assembler. The macros are written for NASM. Now, I released them under the name "NASM Helper". NASM Helper
At the bottom of the page, you will find a complex routine called QueueControlTransfer. Its from my OHCI USB driver. I know, its useless without the other functions, but its a nice example for a more complex function. 2017-12-20OHCI Enumeration bug fixed. Rewriting UHCI code done. 2017-12-18 - Bug killedI found the bug, without converting the old code. I figured out that the host suddenly stopped sending frames. Very mysterious. Finally I found the reason for this behavior. Unintentionally, I set the USB port into suspend mode. I used "OR" to write a bit, without modifying the other bits, in the port register. But for this register, its required to set the bit with "MOV" without other bits set. The strange thing is, that the "OR" works on other hardware, which seem to be more tolerant in this case. This bug wasted a lot of time, but it works now. Now there is a new issue with the enumeration process on that machine, but it should not be difficult to fix it. Asking again, is the code from 2007 better? No, the new code is better now :) 2017-12-16 - Hmm, bugsHmm, what should I say. I hoped to have finished a lot of things. But I didn't. I was ill in November. Then I had various things to do in the rest of November and in December. And now I am struggling with a crazy "new boot manager" driver bug since a week. Its the OHCI USB driver. I thought it works fine, but then I used it on my old Gericom Webboy Laptop. A simple USB resquest ends in a DeviceNotResponding error. The frustrating thing is, my driver of 2007 works flawless. I cannot figure out whats wrong. Data structures and register values are the same. Frustrating. I am not able to fix that for one week!!!! The old code was written for LZASM. Now I am using NASM. Since days I try to find the bug without converting the old code to NASM. But I fear, I reached the point to accept that I have to convert the old code to find the difference.... Is the code from 2007 better? Hmmm, yes and no. 2017-10-13 - What do I have so farIts time for a development status. The code is written in pure assembler. I am using NASM. The goal is to operate in various CPU modes on i386 CPUs and better. Most of the code is currently tested in the 'unreal mode' (16/32 bit). With just a few modifications, the code will run in native 32 bit too. This code will also run fine on 64 bit CPUs. The device access (except video mode switching) happens native without BIOS. This is required to work in various CPU modes in the same way, regardless if I have a BIOS in the background or not. Why do I need various CPU modes? Because I want to support old and modern computers. DOS should be able to use the boot manager drivers without additional software. But don't dream about DOS and UEFI. This will not work. Basic system routines Memory management: Done. Driver development stage 1 Keyboard PS/2: Key read done. What means development stage 1? In this stage the drivers are working in their own environment. But its too early to put them together. 2017-10-06 - A driver development adventureLast week I started to write the USB 2.0 EHCI driver from scratch. Everything looked fine and worked as expected, but then I tried it with VirtualBox. You know, the Plop Boot Manager 5.0.x hangs when you use the USB 2.0 EHCI driver to boot from USB in VirtualBox. I tried my new code and ........... it hangs too. I said okay, I try to figure out whats wrong. I am motivated and I want to fix this problem. Then I struggled with the problem for one week. It was frustrating. The queue heads haven't been processed. Only malformed queue heads resulted in a transaction error. But nothing happened on correct queue heads with correct transfer descriptors. For some time I thought the port reset is the problem and the USB device is in a problematic state. You have to know, in VirtualBox, the port reset ends immediately after starting the reset. According to the EHCI Specification, the reset has to be ended by the software and not the host. Then I thought that the host cannot transmit to device 0 because the USB device is still configured with an address because of the strange port reset behavior. So I created queue heads for every possible device number. Hmmmm, I received no errors and no transactions. Nothing! When there is no response, then its really frustrating. Accepting that my code does not work in VirtualBox became an option for me. But finally I can not accept it. Meanwhile it looks like I am in an endless loop. Doing the same things with the same disappointing result. Then by luck, I made a mistake. And now comes an important information for those who plan to write an EHCI driver. As first transfer descriptor, I linked a transfer descriptor without any data except the 'Next qTD Pointer' to a SETUP transfer descriptor. And suddenly, the SETUP transfer descriptor has been processed as expected. Strange. When the first transfer descriptor is empty, then the following transfer descriptors are processed. I don't know why, but this works on other EHCI controllers too, so I accept that and I am happy that my code works now also in VirtualBox. I will fix the EHCI driver of the Plop Boot Manager 5.0.15 that the USB 2.0 boot works also in VirtualBox. But thats enough for today. 2017-09-17 - UEFII spent some time for UEFI and created a simple menu to boot Plop Linux and Windows with UEFI. This was just a funny test. There is no dynamic OS detection or config file. All is hard coded, just to see how software development with UEFI works.
External content blocked. Watch on YouTube 2017-07-12Programming the new boot manager, but it's a slow process. Nothing to show at the moment... 2017-02-12New development start is April 2017. 2016-07-29My desk. Developing a driver at night. During rewriting the USB drivers, I found some bugs in the old code. The chances are good, that I release a 5.1 version of the old 5.0.15 boot manager with fixed USB drivers. But who knows... 2016-06-28No news, no time to update this page. Coding has been stop at beginning of 05/2016. Maybe I find time in august 2016. 2016-04-22Continue coding :) 2016-03-14Coding paused because of other work. 2016-03-13I created a concept art of the GUI. The final product will look different, but this could be a nice design. No line of code has been written for the GUI, booting has priority ;) A release date is far far away. There will be also a hidden mode and a simple text mode interface like in the current Plop Boot Manager. 2016-02-02Work in progress... © 2024 by
Elmar Hanlhofer |