Nekorektní VBR – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nekorektní VBR – Assembler – Fórum – Programujte.comNekorektní VBR – Assembler – Fórum – Programujte.com

 

Matěj Andrle
~ Anonymní uživatel
1347 příspěvků
17. 6. 2013   #1
-
0
-

Dobrý den,

tak nějak se mi nedaří dát dokupy VBR:

BITS 16

jmp short Boot
nop

OEMLabel db "SMA-BOOT"				; Disk label
BytesPerSector dw 512				; Bytes per sector
SectorsPerCluster db 1				; Sectors per Cluster
ReservedForBoot dw 1				; Reserved sectors for boot record
NumberOfDSPs db 2					; Number of copies of the DSP
RootDirEntries dw 224				; Number of entries in root dir
								; (224 * 32 = 7168 = 14 sectors to read)
LogicalSectors dw 2880				; Number of logical sectors
MediumByte db 0F0h					; Medium descriptor byte
SectorsPerDSP dw 9					; Sectors per DSP
SectorsPerTrack dw 18				; Sectors per track (36/cylinder)
Sides dw 2						; Number of sides/heads
HiddenSectors dd 0					; Number of hidden sectors
LargeSectors dd 0					; Number of LBA sectors
DriveNo dw 0						; Drive No: 0
Signature db 41						; Drive signature: 41 for disk
VolumeID dd 00000000h
VolumeLabel db "SMA-OP     "
FileSystem db "DSP     "

Boot:

	mov ax, 07C0h					; Set up 4K of stack space above Buffer
	add ax, 544					; 8k Buffer = 512 paragraphs + 32 paragraphs (loader)
	cli							; Disable interrupts while changing stack
	mov ss, ax
	mov sp, 4096
	sti							; Restore interrupts

	cmp dl, 0						; A few early BIOSes are reported to improperly set DL
	je NoChange

	mov [bootDev], dl				; Save boot device number
	mov ah, 8h					; Get drive parameters
	int 13h

	jc FataldiskError

NoChange:

	mov eax, 0

DiskOK:

	mov si, Buffer					; Set ES:BX to point to our Buffer (see End of code)
	mov bx, ds
	mov es, bx
	mov bx, si

	mov ah, 2					; Params for int 13h: read disk sectors
	mov al, 14					; And read 14 of them

	pusha						; Prepare to enter loop

	call SMA.Load
	
	jc FataldiskError
	
	mov ax, 0
	mov bx, 0
	mov cx, 0
	mov dx, 0
	mov di, 0
	mov si, 0

	jmp 7c00h

PrintString:

	pusha

	mov ah, 0Eh

.write:

	lodsb

	cmp al, 0
	je .done

	int 10h
	jmp short .write

.done:

	popa
	ret

SMA.Load:

	mov ah, 42h
	mov si, .SMA.Load.Params
	mov dl, 80h
	int 13h

	ret

.SMA.Load.Params:

	dw 10h						; structure length
	dw 38						; sector count
	dw 7c00h 						; buffer address (offset)
	dw 0							; buffer address (segment)
	dd 0							; Secntor number (low 32 bits)
	dd 2							; Sector number (high 32 bits)

FataldiskError:

	mov si, diskError
	call PrintString

Reboot:

	mov ax, 0
	int 16h						; Wait for keystroke

	mov ax, 0
	int 19h

diskError db "Disk error! Press any key...", 0
bootDev db 0						; Boot device number

times 510-($-$$) db 0				; Pad remainder of boot sector with zeros
dw 0AA55h						; Boot signature (DO NOT CHANGE!)

Buffer:							; Disk Buffer begins (8k after this, stack starts)

Nechce se mi počítat hlavy, dráhy atd. Tak se snažím o "Extended Read Sectors From Drive". O co GO? Kernel je hned za VBR, takže pokud se do 42h počítá VBR, je kernel od 1. sektoru po 39. sektor. Pokud se VBR nepočítá, kernel by měl být mezi 0. a 38. sektorem. Takže první věc - počítá se VBR? Druhá věc - proč mi to nefunguje? Doufám, že je problém jen se zařízením, které netuším jak odhledat. Aktuálně bootuji ve VirtualBoxu z PLOP do USB. 80h v tomto případě znamená který disk? (virtuální/USB) Jestli je 80h, které jsem také zkoušel, pro disk, na kterém je onen VBR, tak tím jen líp. Jenže jak jsem psal - ani s 80h to nešlo.

Děkuji.

Děkuji.

Nahlásit jako SPAM
IP: 78.136.180.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 22 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý