1 | !BAT
|
---|
2 | # DISK can be 0-9, A-F only
|
---|
3 | # Returns: CAP = Capacity of disk displayed in GB
|
---|
4 | set DISK=1
|
---|
5 | # Get disk capacity
|
---|
6 | write 0x60000 0x42
|
---|
7 | write 0x60010 0 > nul
|
---|
8 | # get size of disk from INT 13h AH=48 into memory at DS:DI+10h - edx=80h is hard disk 0, 81h would be hard disk 1
|
---|
9 | /%grub%/bios int=0x13 eax=0x4800 edx=0x8%DISK% ds=0x6000 edi=0x0 > nul
|
---|
10 | read 0x60010 > nul
|
---|
11 | set /A A=%@retval% & 0xffffffff > nul
|
---|
12 | set /a CAP=%A%>>21&0xffffffff > nul
|
---|
13 | # Get most significant dword
|
---|
14 | read 0x60014 > nul
|
---|
15 | set /A B=%@retval% & 0x1ffff > nul
|
---|
16 | set /a CAP=%B% * 0x800 + %CAP% > nul
|
---|
17 | echo DISK %DISK% = %CAP%GiB (LS_DWORD=%A% MS_DWORD=%B%, TOTAL SECTORS=%B%%%A:~2,999%)
|
---|
18 | set /A LAST=%A%-1
|
---|
19 | cat --hex --length=0x100 (hd%DISK%)%LAST%+1
|
---|
20 | exit
|
---|
21 |
|
---|
22 |
|
---|