www.pudn.com > schdgurd.zip > HDPART.ASM
PartLoad equ 600h
BootLoc equ 7c00h
.MODEL tiny
.CODE
org 0
Head:
start:
cli
xor ax,ax
mov ss,ax
mov sp,7c00h
mov si,sp
push ax
pop es
push ax
pop ds
sti
cld
mov di,PartLoad
mov cx,100h
repne movsw
db 0EAh
dw offset Continue+600H,0000h
Continue:
mov si,PartLoad+1BEH
mov bl,4
FindBoot:
cmp byte ptr [si],80h
je SaveRec
cmp byte ptr [si],0
jne Invalid
add si,10h
dec bl
jnz FindBoot
int 18h
SaveRec:
mov dx,[si]
mov cx,[si+2]
mov bp,si
FindNext:
add si,10h
dec bl
jz SetRead
cmp byte ptr [si],0
je FindNext
Invalid:
mov si,offset ErrMsg1+600h
PrintStr:
lodsb
cmp al,0
je DeadLock
push si
mov bx,7
mov ah,0Eh
int 10h
pop si
jmp short PrintStr
DeadLock:
jmp short DeadLock
SetRead:
mov di,5
ReadBoot:
mov bx,BootLoc
mov ax,201h
push di
int 13h
pop di
jne GoBoot
xor ax,ax
int 13h
dec di
jnz ReadBoot
mov si,offset ErrMsg2+600h
jmp short PrintStr
GoBoot:
mov si,offset ErrMsg3+600h
mov di,7c00H+1FEH
cmp word ptr [di],0AA55h
jne PrintStr
mov si,bp
db 0EAh,00h,7ch,00h,00h
ErrMsg1 db 'Invalid partition table',0
ErrMsg2 db 'Error loading operating system',0
ErrMsg3 db 'Missing operating system',0
Tail:
FillNum equ 1BEH-(Tail-Head)
db FillNum dup (0)
PartTable db 80h,01h,01h,00h,04h,04h
db 0D1h,02h,11h,00h,00h,00h
db 0EEh,0FFh,00h,00h,00h,00h
db 0C1h,03h,05h,04h,0D1h,0FEh
db 0FFh,0FFh,00h,00h,0ACh,53h
db 00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h,00h,00h
db 00h,00h,00h,00h
MagicID dw 0AA55h
end start