| 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 |
|
|---|