Page 2 of 2
Re: ATAPI driver reads nothing
Posted: Tue Feb 18, 2020 8:28 am
by DeletedAccount2431
Code: Select all
xorriso -as mkisofs -R -J \
-b disk.img -no-emul-boot -boot-load-size 1 \
-o mybootcd2.iso cd_img
i've changed command for creating iso so am i able to have binary size more than 2880 kbs?
also, i cant make my code working normally when i read it from iso by myself from 34 sector where my code is located at drive
it works but instead of printing string it prints some strange symbols and cant load GDT saying "fetch_raw_descriptor: GDT: index (f) 1 > limit (0)" (when i load code by int 13, ah=0x2 it works normally without any errors)
but dumps of memory where i load stage 2 absolutely identical (except of in second case i also load my stage1 (512 bytes) to memory so i simply add 0x200 to start address in memory) and i dont know what to do with that
Code: Select all
load_disk_lba :
push ax
push si
mov ah, 0x42
mov si, lba_read_packet
mov byte [lba_read_packet], 0x10
mov word [lba_read_packet + 2], cx
mov word [lba_read_packet + 4], di
mov word [lba_read_packet + 6], ds
mov word [lba_read_packet + 8], bx
int 0x13
jc disk_error
pop si
pop ax
ret
disk_error :
jmp $
align 8
lba_read_packet times 16 db 0
Code: Select all
load_kernel :
push ds
pusha
mov dl, [BOOT_DRIVE]
xor ax, ax
mov ds, ax
mov es, ax
mov di, 0x1000
mov bl, 0x22
mov cx, 0x3
call load_disk_lba
popa
pop ds
ret
Re: ATAPI driver reads nothing
Posted: Tue Feb 18, 2020 8:59 am
by Octocontrabass
alicedeveloper wrote:i've changed command for creating iso so am i able to have binary size more than 2880 kbs?
Yes, but you could have done that anyway by telling the BIOS to stop floppy disk emulation.
alicedeveloper wrote:also, i cant make my code working normally when i read it from iso by myself from 34 sector where my code is located at drive
it works but instead of printing string it prints some strange symbols and cant load GDT saying "fetch_raw_descriptor: GDT: index (f) 1 > limit (0)" (when i load code by int 13, ah=0x2 it works normally without any errors)
but dumps of memory where i load stage 2 absolutely identical (except of in second case i also load my stage1 (512 bytes) to memory so i simply add 0x200 to start address in memory) and i dont know what to do with that
It sounds like your code needs to run at a specific address, and you're running it at an address 512 bytes higher. It could also be caused by bad assumptions about the value of segment registers (especially CS).
Re: ATAPI driver reads nothing
Posted: Tue Feb 18, 2020 9:31 am
by DeletedAccount2431
It sounds like your code needs to run at a specific address, and you're running it at an address 512 bytes higher. It could also be caused by bad assumptions about the value of segment registers (especially CS).
thank you very much ! i've changed value in linker command from 0x100000 to 0x100200 and now my stage 2 works ! also i've changed value in linker command for kernel and it works too !
now i know more possible solutions for new problems and understand why my atapi driver works different from as it was intended
thank you again !