Changeset 324 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/CreateDPT.asm
- Timestamp:
- Mar 11, 2012, 6:45:03 PM (13 years ago)
- google:author:
- aitotat@gmail.com
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/CreateDPT.asm
r294 r324 87 87 jz SHORT .StoreCHSfromAXBHBL ; Small old drive with CHS addressing only 88 88 89 ; Check if 48-bit LBA supported 90 test BYTE [es:si+ATA6.wSetSup83+1], A6_wSetSup83_LBA48>>8 91 jz SHORT .StoreLBA28addressing 92 or BYTE [di+DPT.bFlagsLow], ADDRESSING_MODE_LBA48<<ADDRESSING_MODE_FIELD_POSITION 93 .StoreLBA28addressing: 94 or BYTE [di+DPT.bFlagsLow], ADDRESSING_MODE_LBA28<<ADDRESSING_MODE_FIELD_POSITION 89 ; Store LBA 28/48 addressing and total sector count 95 90 call AtaID_GetTotalSectorCountToBXDXAXfromAtaInfoInESSI 96 mov [di+DPT.twLbaSectors], ax 97 mov [di+DPT.twLbaSectors+2], dx 98 mov [di+DPT.twLbaSectors+4], bx 99 call AtaID_GetLbaAssistedCHStoDXAXBLBH 91 call StoreLbaAddressingAndTotalSectorCountFromBXDXAX 92 93 ; Replace sector count with user defined if necessary 94 call AccessDPT_GetPointerToDRVPARAMStoCSBX 95 test BYTE [cs:bx+DRVPARAMS.wFlags], FLG_DRVPARAMS_USERLBA 96 jz SHORT .KeepTotalSectorsFromAtaID 97 mov ax, [cs:bx+DRVPARAMS.dwMaximumLBA] 98 mov dx, [cs:bx+DRVPARAMS.dwMaximumLBA+2] 99 xor bx, bx 100 101 ; Compare user defined and ATA-ID sector count and select smaller 102 cmp bx, [di+DPT.twLbaSectors+4] 103 jb SHORT .StoreUserDefinedSectorCountToDPT 104 cmp dx, [di+DPT.twLbaSectors+2] 105 jb SHORT .StoreUserDefinedSectorCountToDPT 106 ja SHORT .KeepTotalSectorsFromAtaID 107 cmp ax, [di+DPT.twLbaSectors] 108 jae SHORT .KeepTotalSectorsFromAtaID 109 .StoreUserDefinedSectorCountToDPT: 110 call StoreLbaAddressingAndTotalSectorCountFromBXDXAX 111 112 ; Calculate L-CHS for old INT 13h 113 .KeepTotalSectorsFromAtaID: 114 mov bx, [di+DPT.twLbaSectors+4] ; Restore BX 115 call AccessDPT_ConvertSectorCountFromBXDXAXtoLbaAssistedCHSinDXAXBLBH 100 116 mov [di+DPT.bLbaHeads], bl 101 117 jmp SHORT .StoreBlockMode … … 233 249 ret 234 250 251 252 ;-------------------------------------------------------------------- 253 ; StoreLbaAddressingAndTotalSectorCountFromBXDXAX 254 ; Parameters: 255 ; BX:DX:AX: Total Sector Count 256 ; DS:DI: Ptr to Disk Parameter Table 257 ; Returns: 258 ; Nothing 259 ; Corrupts registers: 260 ; CX 261 ;-------------------------------------------------------------------- 262 StoreLbaAddressingAndTotalSectorCountFromBXDXAX: 263 mov [di+DPT.twLbaSectors], ax 264 mov [di+DPT.twLbaSectors+2], dx 265 mov [di+DPT.twLbaSectors+4], bx 266 267 and BYTE [di+DPT.bFlagsLow], ~MASKL_DPT_ADDRESSING_MODE 268 test bx, bx 269 jnz SHORT .SetLba48AddressingToDPT 270 test dh, 0F0h 271 jz SHORT .SetLba28AddressingToDPT 272 .SetLba48AddressingToDPT: 273 or BYTE [di+DPT.bFlagsLow], ADDRESSING_MODE_LBA48<<ADDRESSING_MODE_FIELD_POSITION 274 .SetLba28AddressingToDPT: 275 or BYTE [di+DPT.bFlagsLow], ADDRESSING_MODE_LBA28<<ADDRESSING_MODE_FIELD_POSITION 276 ret
Note:
See TracChangeset
for help on using the changeset viewer.