Bootloader things.
-
- Posts: 11
- Joined: Wed Apr 08, 2009 2:21 pm
Bootloader things.
Um, I have a question.
I understand that the load module on hard disk or floppy happens on 0 head, 0 cylinder and 1 sector, that's where the PC is running in the first place, after the BIOS has loaded, but what I don't understand, is for me to write my own boot stamp, do I have to have a partition for that or it's not needed, if I'm not going to do anything more than just load in boot sector.
I understand that the load module on hard disk or floppy happens on 0 head, 0 cylinder and 1 sector, that's where the PC is running in the first place, after the BIOS has loaded, but what I don't understand, is for me to write my own boot stamp, do I have to have a partition for that or it's not needed, if I'm not going to do anything more than just load in boot sector.
Re: Bootloader things.
Hard-disk under a normal file-system would have partitions, in which case the MBR / initial boot-sector would contain a boot loader to scan the partitions, find the active (bootable) one and then load the boot-sector from that partition.
A floppy etc doesn't have partitions so the 1st sector is the one and only boot sector.
At the end of the day it's up to you what you want to do. If you just want to experiment and setup a 512byte bootsector you could initially ignore partitions and then just use that as your disk (floppy or hard-disk) image for an emulator (bochs, qemu etc).
A floppy etc doesn't have partitions so the 1st sector is the one and only boot sector.
At the end of the day it's up to you what you want to do. If you just want to experiment and setup a 512byte bootsector you could initially ignore partitions and then just use that as your disk (floppy or hard-disk) image for an emulator (bochs, qemu etc).
-
- Posts: 11
- Joined: Wed Apr 08, 2009 2:21 pm
Re: Bootloader things.
I'm trying to write MBR boot sector on USB stick (because I don't have a floppy). Assembler code compiles all right, but further I'm trying to write bin file with this command (through XP CMD):
DEBUG boot.bin
- w 100 5 0 1
(USB I have F:)
I'm trying to write MBR, but Windows gives an error (all though USB responds): 'Application popup: 16 bit Windows Subsystem : An application has attempted to directly access the hard disk, which cannot be supported.'
I don't want to use emulator to check out the code, so how can I change from xp usb stick boot sector?
DEBUG boot.bin
- w 100 5 0 1
(USB I have F:)
I'm trying to write MBR, but Windows gives an error (all though USB responds): 'Application popup: 16 bit Windows Subsystem : An application has attempted to directly access the hard disk, which cannot be supported.'
I don't want to use emulator to check out the code, so how can I change from xp usb stick boot sector?
Re: Bootloader things.
I think it should be possible with dd or similar things.
Maybe this can help you:
http://www.chrysocome.net/dd
I don't know how to use it, I just read it can write on usb devices, so it should be the right for you.
Maybe someone else can help you with dd.
Maybe this can help you:
http://www.chrysocome.net/dd
I don't know how to use it, I just read it can write on usb devices, so it should be the right for you.
Maybe someone else can help you with dd.
Re: Bootloader things.
The partition table is not a BIOS thing. It just reads the first sector checks that it has proper signature and executes the code. You don't need to conform to boot sector layout or partition table format unless you want any other OS to be able to recognize the MBR.
Re: Bootloader things.
under XP if you want to write your boot-sector image/bin to a usb stick you can use HxD (a hex editor that can open images and physical disks).
Copy from your image (ctrl-c) and paste-write into the disk at sector 0 (ctrl-b)... careful to make sure you open the right physical disk... or you might have a bad day
sometimes i use my own little tool to do it as well.. but hxd does the job perfectly.
booting from usb you might find you run into lots of fun problems
#1 is the usb stick bootable ? (some aren't)
#2 does your bios support booting from usb (without bugs)
#3 when the bios boots from usb it does so by emulating either a hard-disk or floppy-disk, it all depends on the bios, so your boot code needs to work in both cases
#4 some bioses actually check for a BPB (ive tested this) and without it will NOT boot the usb stick in floppy emulation mode.. so even if you never plan to use the BPB you need it there to ensure that the stick will boot under those conditions.
Copy from your image (ctrl-c) and paste-write into the disk at sector 0 (ctrl-b)... careful to make sure you open the right physical disk... or you might have a bad day
sometimes i use my own little tool to do it as well.. but hxd does the job perfectly.
booting from usb you might find you run into lots of fun problems
#1 is the usb stick bootable ? (some aren't)
#2 does your bios support booting from usb (without bugs)
#3 when the bios boots from usb it does so by emulating either a hard-disk or floppy-disk, it all depends on the bios, so your boot code needs to work in both cases
#4 some bioses actually check for a BPB (ive tested this) and without it will NOT boot the usb stick in floppy emulation mode.. so even if you never plan to use the BPB you need it there to ensure that the stick will boot under those conditions.
-
- Posts: 11
- Joined: Wed Apr 08, 2009 2:21 pm
Re: Bootloader things.
I've tried out like ten bootloader codes (with a start of [BITS 16], but they all don't work. This one is a Hello world bootloader, when I use emulator (emu8086) it doesn't work out and it gives errors. Here's a pic of the error: http://img150.imageshack.us/img150/6334/errorvyc.png
I have no idea what's wrong. Can anyone please help me?
I have no idea what's wrong. Can anyone please help me?
Re: Bootloader things.
emu8086 is a very "different" assembler(and the emulation is very incomplete). Download yasm and then download qemu. Read a tutorial about writing your bootloader to a floppy disk, and then read a tutorial about using qemu with a floppy disk.
http://www.viralpatel.net/taj/tutorial/ ... loader.php that seems to cover most of it.. (yasm and nasm are for the most part interchangeable)
edit:
woops I gave you the same tutorial rofl..
Just make sure to use nasm as the assembler and to use just about anything but emu8086 for emulation. You can use either bochs or qemu. Or you can always use real hardware.. your choice.(I personally think qemu is the easiest to use)
http://www.viralpatel.net/taj/tutorial/ ... loader.php that seems to cover most of it.. (yasm and nasm are for the most part interchangeable)
edit:
woops I gave you the same tutorial rofl..
Just make sure to use nasm as the assembler and to use just about anything but emu8086 for emulation. You can use either bochs or qemu. Or you can always use real hardware.. your choice.(I personally think qemu is the easiest to use)
-
- Posts: 11
- Joined: Wed Apr 08, 2009 2:21 pm
Re: Bootloader things.
Hi all,
I have a few things to ask. I hope I'm not a pain in the ... . HP tools only works with the DOS programs, and it doesn't let me copy in my own Bin file. I tried to work with DD (on Mac) with a boot loader code in assembly, the thing is that it said that everything's okay - it enters all well, but when I use the usually PC (Microsoft) nothing really happens...
Can anyone please share with me a simple assembler language boot loader and how exactly I can write on USB? Because I tried http://www.chrysocome.net/dd and it obviously doesn't work for me.
I have a few things to ask. I hope I'm not a pain in the ... . HP tools only works with the DOS programs, and it doesn't let me copy in my own Bin file. I tried to work with DD (on Mac) with a boot loader code in assembly, the thing is that it said that everything's okay - it enters all well, but when I use the usually PC (Microsoft) nothing really happens...
Can anyone please share with me a simple assembler language boot loader and how exactly I can write on USB? Because I tried http://www.chrysocome.net/dd and it obviously doesn't work for me.
Re: Bootloader things.
You can try DexOS bootloader, it loads a mz exe anywhere from the root dir of a floppy, hdd, usb drive etc.
The name of the file must be "kernel32.exe".
Theres a xp program to put it on a usb fob, see here: http://www.dex4u.com/USBboot.htm
Just replace my kernel32.exe, with yours.
The name of the file must be "kernel32.exe".
Theres a xp program to put it on a usb fob, see here: http://www.dex4u.com/USBboot.htm
Just replace my kernel32.exe, with yours.
- Love4Boobies
- Member
- Posts: 2111
- Joined: Fri Mar 07, 2008 5:36 pm
- Location: Bucharest, Romania
Re: Bootloader things.
There are a bunch of disk tools listed on the OSDev wiki that you might want to look thorugh. First, I'd suggest you learn a little about assembly and the tools you're using since you were trying to assemble NASM code with emu8086.
"Computers in the future may weigh no more than 1.5 tons.", Popular Mechanics (1949)
[ Project UDI ]
[ Project UDI ]
-
- Posts: 11
- Joined: Wed Apr 08, 2009 2:21 pm
Re: Bootloader things.
Bios USB flash recognizes as removable device, it it does not boot in a way it's boots from the floppy. And in usb.org I can't find anything about booting from USB. As though I write floppy bootable image 7c00, but it does not boot, I tried it on three computers and nothing is happening. Why even DOS is booting from USB, but this doesn't boot. Does he really isn't placed on 7c00.
Can anyone please give me an example or even explain why from USB it isn't possible. I don't have a floppy device on my laptop.
Can anyone please give me an example or even explain why from USB it isn't possible. I don't have a floppy device on my laptop.
-
- Member
- Posts: 204
- Joined: Thu Apr 12, 2007 8:15 am
- Location: Michigan
Re: Bootloader things.
Recognizing the flash drive is not necessarily enough. I was almost pulling my hair out trying to get a netbook (no cd/dvd/floppy) to boot a live dvd image off of my roommate's flash USB drive (I couldn't find any of mine). It turns out the flash drive was equipped with "U3" (I'm not exactly sure what U3 is--hardware or software or a combination--apparently the software that came with the flash drive has an option of removing U3 from it, I don't know if that would also make it bootable).likeagunfire wrote:Bios USB flash recognizes as removable device, it it does not boot in a way it's boots from the floppy.
Writing the exact same dvd image to a flash drive unequipped with U3 worked as expected.
I'm fairly certain that the first 512 bytes of the USB drive are loaded to 0x7C00 as any other MBR. However, one possible error is that the BIOS could potentially load your MBR to 0x07C0:0x0000, which is the same physical address, but with an unexpected code (and perhaps data) segment. This might be the case if the computer crashes or freezes when trying to boot from USB rather than displaying some standard error message from the BIOS (No Operating System, No Bootable Drive, etc).likeagunfire wrote:Why even DOS is booting from USB, but this doesn't boot. Does he really isn't placed on 7c00.
When you say that DOS is booting from USB, does that mean you have successfully installed DOS onto the same USB drive and it works? That would indicate that your flash drive does not have the U3 problem, so I'm wondering if you are really writing your boot code to the first 512 bytes of the USB drive, or the first 512 bytes of the first partition of the USB drive (or somewhere else...).
There have been a few tools mentioned in this thread so far, which one have you settled on using? and would you mind explaining the steps you take to write your boot code to the flash drive?
Some people are offended by the verifiable truth; such people tend to remain blissfully unencumbered by fact.
If you are one of these people, my posts may cause considerable discomfort. Read at your own risk.
If you are one of these people, my posts may cause considerable discomfort. Read at your own risk.
Re: Bootloader things.
There is no magic to booting from usb drives, it very simple.
But you must understand one or two things or you will not get it to boot. that is unlike any other method of booting USB does check what its booting.
Eg: normaly the MBR or boot sector is just load into memory at a set address and jump to.
But in the case of USB boot, it checks for BPB, if it users hdd emulation it will boot with or without BPB, if it users floppy emulation and you do not have a BPB, it will NOT boot.
Here are two examples, the one with BPB should work with any emulation, if placed on the disk right (assemble with fasm)
With BPB
Without BPB
But you must understand one or two things or you will not get it to boot. that is unlike any other method of booting USB does check what its booting.
Eg: normaly the MBR or boot sector is just load into memory at a set address and jump to.
But in the case of USB boot, it checks for BPB, if it users hdd emulation it will boot with or without BPB, if it users floppy emulation and you do not have a BPB, it will NOT boot.
Here are two examples, the one with BPB should work with any emulation, if placed on the disk right (assemble with fasm)
With BPB
Code: Select all
;************************************
; By Dex
; Assemble with fasm
; c:\fasm USB1.asm USB1.bin
;
;************************************
org 0x7C00
use16
Boot: jmp start
nop
;------------------------------------------;
; Standard BIOS Parameter Block, "BPB". ;
;------------------------------------------;
bpbOEM db 'MSDOS5.0'
bpbSectSize dw 512
bpbClustSize db 1
bpbReservedSec dw 1
bpbFats db 2
bpbRootSize dw 224
bpbTotalSect dw 2880
bpbMedia db 240
bpbFatSize dw 9
bpbTrackSect dw 18
bpbHeads dw 2
bpbHiddenSect dd 0
bpbLargeSect dd 0
;---------------------------------;
; extended BPB for FAT12/FAT16 ;
;---------------------------------;
bpbDriveNo db 0
bpbReserved db 0
bpbSignature db 41
bpbID dd 1
bpbVolumeLabel db 'BOOT FLOPPY'
bpbFileSystem db 'FAT12 '
;****************************
; Realmode startup code.
;****************************
start:
xor ax,ax
mov ds,ax
mov es,ax
mov ss,ax
mov sp,0x7C00
mov si,Mesage1
call print
jmp $
;****************************
; print.
;****************************
print:
mov ah,0Eh
again1:
lodsb
or al,al
jz done1
int 10h
jmp again1
done1:
ret
Mesage1: db 'USB, with BPB works OK',0
;*************************************
; Make program 510 byte's + 0xaa55
;*************************************
times 510- ($-Boot) db 0
dw 0xaa55
Code: Select all
;************************************
; By Dex
; Assemble with fasm
; c:\fasm USB2.asm USB2.bin
;
;************************************
org 0x7C00
use16
;****************************
; Realmode startup code.
;****************************
start:
xor ax,ax
mov ds,ax
mov es,ax
mov ss,ax
mov sp,0x7C00
mov si,Mesage1
call print
jmp $
;****************************
; print.
;****************************
print:
mov ah,0Eh
again1:
lodsb
or al,al
jz done1
int 10h
jmp again1
done1:
ret
Mesage1: db 'USB, without BPB works OK',0
;*************************************
; Make program 510 byte's + 0xaa55
;*************************************
times 510- ($-start) db 0
dw 0xaa55
-
- Posts: 11
- Joined: Wed Apr 08, 2009 2:21 pm
Re: Bootloader things.
Yes, it is the same flash drive, from this same flash drive I made that Linux (slax) was booting and not only booting was done, but it also worked.madeofstaples wrote:When you say that DOS is booting from USB, does that mean you have successfully installed DOS onto the same USB drive and it works?
You were asking me to give you tools I've used that other people gave me in this thread, so I'm using DD tool for Windows, with manual from it
Code: Select all
dd --list
dd if=/bootfile of=//./f:
But bootfile i'm testing on other PC where is FDD - it loading "Hello World" on boot.
This is the Hello world bootloader source code.
DD manual is taken from Intel http://software.intel.com/en-us/article ... r-windows/.
I've tried serveral other things but nothing works. If I'm working on a floppy (I test it nowhere near my workplace) it goes all right, but not from USB stick. Also, I've tried like three different USB sticks.