Assembly - Read next sector of a virtual disk
- by ali
As any programmer in the world at least once in his/her life, I am trying to create my "revolutionary", the new and only one operating system. :D
Well, I am using a virtual emulator (Oracle VM Virtual Box), for which I create a new unknwon operating system, with a vmdk disk. I like vmdk because they are just plain files, so I can paste my boot-loader over the first 512 bytes of the virtual hard disk.
Now, I am trying to read the next sector of this virtual disk, on which I would paste a simple kernel that would display a message.
I have two questions:
Am I reading the second segment (the first -512 bytes- is occupied by the bootloader) correctly?
CODE:
CitesteDisc:
mov bx, 0x8000 ; segment
mov es, bx
mov bx, 0x0000 ; offset
mov ah, 0x02 ; read function
mov al, 0x01 ; sectors - this might be wrong, trying to read from hd
mov ch, 0x00 ; cylinder
mov cl, 0x02 ; sector
mov dh, 0x00 ; head
mov dl, 0x80 ; drive - trying to read from hd
int 0x13 ; disk int
mov si, ErrorMessage ; - This will display an error message
jc ShowMessage
jmp [es:bx] ; buffer
Here, I get the error message, after checking CF. However, if I use INT 13, 1 to get last
status message, AL is 0 - so no error is saved.
Am I pasting my simple kernel in the correct place inside the vmdk? What I do is pasting it after the 512th byte of the file, the first 512 bytes, as I said, are the boot-loader.
The file would look like this:
BE 45 7C E8 16 00 EB FE B4 0E B7 00 B3 07 CD 10 <- First sector
C3 AC 08 C0 74 05 E8 EF FF EB F6 C3 B4 00 B2 80
CD 13 BE 5D 7C 72 F5 BB 00 80 8E C3 BB 00 00 B4
02 B0 06 B5 00 B1 01 B6 00 B2 07 CD 13 BE 4E 7C
72 CF 26 FF 27 57 65 6C 63 6F 6D 65 21 00 52 65
61 64 69 6E 67 20 65 72 72 6F 72 21 00 52 65 73
65 74 74 69 6E 67 20 65 72 72 6F 72 21 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA <- Boot-loader signature
B4 0E B0 2E CD 10 EB FE 00 00 00 00 00 00 00 00 <- Start of the second sector
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
So, this is the way I am trying to add the kernel to the second sector.
What do you think is wrong with this? Thanks!