Well, I see a bunch of problems.
The first appears to be that you're assuming what the drive number is. Take for instance:
Code:
ExtRead:
mov dl,159 ;CD
push ecx
mov ah,0x41 ;check extensions
mov bx,0x55aa
int 0x13
jc ExtRead
mov ax,msg_support
call Print
mov si,DAP
mov ah,0x42 ;read
int 0x13
;jc ExtRead
mov ax,msg_read_ok
call Print
pop ecx
ret
The BIOS tells you what the drive number is, or you can attempt to find it by probing, but it could potentially be different on every machine, especially if you're using a no-emulation El Torito boot image. Also, checking for the EDD extensions on a EL-Torito image is one of those possibly buggy things. The El Torito spec says that EDD support in the BIOS is optional, but in practice I've never come across a BIOS that didn't implement EDD if it also implemented El-Torito, and a quick search didn't come up with anything either. It's safe to assume that if you want to boot using a no-emulation El Torito image, EDD support is there.
You're also not handling errors correctly. If the drive number you pass to int 13 (via DL) is incorrect or the extensions aren't supported or there is any other error, int 13 returns with carry set, and puts an error code in AH. Your code, upon seeing the carry flag set, repeats the exact same test indefinitely. You also should test the return values to make sure they are valid. After performing a read, you're not actually testing anything and assuming it worked! There's also no need to test for EDD extensions repeatedly.
You're making a lot of potentially unsafe assumptions as far as the El Torito spec is concerned, as well. You don't verify the sector you read (sector 17) actually does contain the boot record, for instance.
There's a bunch of other problems I see, but that should get you pointed in the right direction.
As far as what you're seeing with sector sizes, when you use floppy emulation, the BIOS will translate sector sizes for you. You'll effectively be accessing a floppy drive using 512 byte sectors. The same goes for hard disk emulation. However, under "no emulation" your sector size will be 2048 bytes. The BIOS knows this and will read the correct sector for you, you don't have to tell it the sector size. If anywhere in your code you compute the sector to read by using the sector size, make sure you are using the correct sector size.