Re: PC boot block programming madness
From: Erik Larsson (spamtrap_at_crayne.org)
Date: 10/22/04
- Next message: Charles A. Crayne: "Re: PC boot block programming madness"
- Previous message: Charles A. Crayne: "Re: intel compatibility and open architecture"
- In reply to: alex: "Re: PC boot block programming madness"
- Next in thread: Charles A. Crayne: "Re: PC boot block programming madness"
- Reply: Charles A. Crayne: "Re: PC boot block programming madness"
- Reply: Frank Kotler : "Re: PC boot block programming madness"
- Reply: Dirk Wolfgang Glomp : "Re: PC boot block programming madness"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Fri, 22 Oct 2004 05:42:11 +0000 (UTC)
Hey Alex...
Thanx very much for the reply, but I actually know this... and consequently
I have my 0x55aa at offset 510. Maybe I forgot to say.
This is my source code by the way (NASM-style).
--------------------------------------------------------
[BITS 16] ; Generate 16-bit code
start:
; Do a bit of looping to slow things down a bit
mlinit:
mov ax, 0xFFFF
oloop: ; Outer loop
dec ax
mov bx, 0xFF ; Fine tune this to match your processor speed
iloop: ; Inner loop
dec bx
cmp bx, 0x0000
jne iloop
cmp ax, 0x0000
jne oloop
; Finished slowing down...
print:
mov si, OFFSET+s ; Load address to the first character
printl:
lodsb ; Load string (what this acually means, I don't know yet)
mov ah, 0x0E ; Argument to i10,A. 0E = "write text teletype"
mov bx, 0x0 ; Argument to i10,A. Page 0, foreground color 0
int 0x10 ; Call the BIOS VIDEO_IO
cmp si, OFFSET+se ; End of string reached?
jb printl
; Do the whole process again, including the slowdown-loops
jmp mlinit
end: ; End of program
; Here comes the data
s:
dw "Hello world! :)"
dw 13 ; carriage return
dw 10 ; linefeed
se:
; Constants
OFFSET: equ 0x7C00 ; The place in memory where the code is loaded
TIMES 510-($-$$) DB 0 ; make sure that the 512 bytes of the
bootsector are padded with zeros
BootSignature DW 0xAA55 ; boot signature, to make BIOS detect my disk
as bootable?
--------------------------------------------------------
As you can see, the idea is to print "Hello world :)" an infinite number of
times (or at least until I press the reset button =) ) and using a simple
loop to slow the program down.
But my problems remain:
1. A real world computer won't boot from my diskette containing this
512-byte code segment at the beginning of the disk... but Bochs (x86 system
emulator) and VMWare (sort of the same thing) will boot.
2. VMWare and real world computers won't output any visible text. The cursor
moves though. Bochs outputs the text just as I would expect it to be
outputted.
So, if anyone has time to look into this, please do. I don't understand a
thing : )
Erik
"alex" <me@me.com> skrev i meddelandet
news:417833ee$0$4310$afc38c87@news.optusnet.com.au...
> A lot of BIOS's will check for the boot signature 0x55aa at offset 510
> of the bootsector, if this is not found then you may recieve a message
> saying its unbootable.
>
> Cheers
> Alex
>
> "Erik Larsson" <spamtrap@crayne.org> wrote in message
> news:x8Udd.6758$d5.57125@newsb.telia.net...
> > Hello everyone.
> >
> > I've just gotten into assembler programming for the pc, using NASM to
try
> > out programming some boot-code to start from a floppy or whatever.
> > But it totally drives me nuts...
> >
> > 1. First, I want to be able to boot my program... So I write the 512
bytes
> > containing my code to the beginning of a floppy, and try to boot it.
> > Testing it in Bochs and VMware indicates that it recognizes and boots
the
> > program, but when inserting the disk into a 'real' computer it isn't
> > recognized as a bootable disk.
> > What properties must be satisfied for the bios to recognize the disk as
> > bootable?
> >
> > 2. I want to print something to be able to see that I've actually
achieved
> > something. As far as I understand it, you do the 'int 0x10' thing with
ah
> > =
> > 0xE (write text teletype), bh = 0 (page number), bl = 0 (or whatever
color
> > you want) and al = ascii code of the character to print.
> > This works fine in bochs, but not in vmware or in the real world. In
bochs
> > the text is printed just as it should be, but in the real world, it
seems
> > that it tries to print something (the cursor moves) but nothing comes
out
> > =).
> >
> > If anyone has experience with boot-programming or can supply me with a
> > working nasm source code example that I can play around with... that
would
> > be great. : )
> >
> > Erik
> >
>
>
- Next message: Charles A. Crayne: "Re: PC boot block programming madness"
- Previous message: Charles A. Crayne: "Re: intel compatibility and open architecture"
- In reply to: alex: "Re: PC boot block programming madness"
- Next in thread: Charles A. Crayne: "Re: PC boot block programming madness"
- Reply: Charles A. Crayne: "Re: PC boot block programming madness"
- Reply: Frank Kotler : "Re: PC boot block programming madness"
- Reply: Dirk Wolfgang Glomp : "Re: PC boot block programming madness"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|