Changeset 568 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h


Ignore:
Timestamp:
Dec 21, 2014, 5:37:53 PM (10 years ago)
Author:
krille_n_@…
google:author:
krille_n_@hotmail.com
Message:

Changes:

  • SerDrive: Using named pipe mode (serdrive -p) now works under Windows XP/2000/Server 2003.
  • checksum.pl: Added a compatibility fix for 3Com 3C503 cards.
  • XTIDECFG will now scan every possible segment address to find and load the BIOS and/or its settings from EEPROM. This should simplify things for people using combined option ROMs.
  • Fixed a bug from r521 in BootSector.asm where the BIOS would not display a timeout error if it failed to load the boot sector from harddrive.
  • Fixed a bug from r541 in CompatibleDPT.asm where CompatibleDPT_CreateDeviceParameterTableExtensionToESBXfromDPTinDSSI would generate an invalid checksum in the DPTE.
  • Optimizations and other fixes.
Location:
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH4h_HVerify.asm

    r526 r568  
    3838;   Returns with INTPACK in SS:BP:
    3939;       AH:     Int 13h/40h floppy return status
    40 ;       AL:     Number of sectors actually verified (only valid if CF set for someBIOSes)
     40;       AL:     Number of sectors actually verified (only valid if CF set for some BIOSes)
    4141;       CF:     0 if successful, 1 if error
    4242;--------------------------------------------------------------------
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/EBIOS/AH43h_ExtendedWriteSectors.asm

    r526 r568  
    4848    mov     ah, [cs:bx+g_rgbWriteCommandLookup]
    4949    mov     bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_DRQ, FLG_STATUS_DRQ)
    50 %ifdef USE_186
    51     push    AH42h_ReturnFromInt13hAfterStoringErrorCodeFromAHandTransferredSectorsFromCX
    52     jmp     Idepack_ConvertDapToIdepackAndIssueCommandFromAH
    53 %else
    5450    call    Idepack_ConvertDapToIdepackAndIssueCommandFromAH
    5551    jmp     SHORT AH42h_ReturnFromInt13hAfterStoringErrorCodeFromAHandTransferredSectorsFromCX
    56 %endif
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/EBIOS/AH44h_ExtendedVerifySectors.asm

    r526 r568  
    4343    mov     ah, [cs:bx+g_rgbVerifyCommandLookup]
    4444    mov     bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_DRQ, FLG_STATUS_DRDY)
    45 %ifdef USE_186
    46     push    AH42h_ReturnFromInt13hAfterStoringErrorCodeFromAHandTransferredSectorsFromCX
    47     jmp     Idepack_ConvertDapToIdepackAndIssueCommandFromAH
    48 %else
    4945    call    Idepack_ConvertDapToIdepackAndIssueCommandFromAH
    5046    jmp     SHORT AH42h_ReturnFromInt13hAfterStoringErrorCodeFromAHandTransferredSectorsFromCX
    51 %endif
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/EBIOS/AH48h_GetExtendedDriveParameters.asm

    r550 r568  
    147147    ; from previously scanned drive.
    148148.DoNotSetChsFlag:
    149     eMOVZX  dx, BYTE [es:si+DPT.bPchsHeads]
     149    eMOVZX  dx, [es:si+DPT.bPchsHeads]
    150150    mov     [di+EDRIVE_INFO.dwHeads], dx
    151151    mov     [di+EDRIVE_INFO.dwHeads+2], cx
     
    159159    mov     [di+EDRIVE_INFO.dwCylinders+2], cx
    160160
    161 .ReturnWithSuccess:
    162     xor     ax, ax
    163 .ReturnWithError:
     161    xor     ax, ax      ; Success
    164162    jmp     Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/Tools/Address.asm

    r542 r568  
    3737ALIGN JUMP_ALIGN
    3838Address_ExtractLCHSparametersFromOldInt13hAddress:
    39     mov     bl, cl              ; Copy sector number...
    40     and     bl, 3Fh             ; ...and limit to 1...63
     39    mov     bl, 3Fh             ; Load sector number mask
     40    and     bl, cl              ; Sector number now in BL
    4141    sub     cl, bl              ; Remove from cylinder number high
    4242    eROL_IM cl, 2               ; High bits to beginning
     
    7575    ; (LCylinder << n) + (LHead / PHeadCount)
    7676    mov     dx, cx                  ; Copy L-CHS Cylinder number to DX
    77     mov     cl, [di+DPT.bFlagsLow]  ; Load shift count
    78     and     cl, MASKL_DPT_CHS_SHIFT_COUNT
     77    mov     cl, MASKL_DPT_CHS_SHIFT_COUNT   ; Load shift count mask
     78    and     cl, [di+DPT.bFlagsLow]  ; Shift count now in CL
    7979    shl     dx, cl                  ; DX = LCylinder << n
    8080    add     ax, dx                  ; AX = P-CHS Cylinder number
     
    8383    ret
    8484
     85; *FIXME* The above function description doesn't match the code.
     86; If CX has a maximum value of 1023 on entry then there is no way CX can be 16382 on return.
     87; 1023 SHL 3 (MASKL_DPT_CHS_SHIFT_COUNT) is 8184. With the addition of AX (at most 255?)
     88; the result is 8439.
    8589
    8690;--------------------------------------------------------------------
     
    102106ALIGN JUMP_ALIGN
    103107Address_OldInt13hAddressToIdeAddress:
    104         call    Address_ExtractLCHSparametersFromOldInt13hAddress
    105         ACCESSDPT__GET_UNSHIFTED_TRANSLATE_MODE_TO_AXZF
     108    call    Address_ExtractLCHSparametersFromOldInt13hAddress
     109    mov     al, [di+DPT.bFlagsLow]
     110    and     al, MASKL_DPT_TRANSLATEMODE
    106111
    107112;;; 0: ADDRESSING_MODE_NORMAL
    108         jz      SHORT DoNotConvertLCHS
     113    jz      SHORT DoNotConvertLCHS
    109114
    110115;;; 1: ADDRESSING_MODE_LARGE
    111         test    al, FLGL_DPT_ASSISTED_LBA
    112         jz      SHORT ConvertLargeModeLCHStoPCHS
     116    test    al, FLGL_DPT_ASSISTED_LBA
     117    jz      SHORT ConvertLargeModeLCHStoPCHS
    113118
    114119;;; 2: ADDRESSING_MODE_ASSISTED_LBA
    115         ; Fall through to ConvertAssistedLBAModeLCHStoLBARegisterValues
     120    ; Fall to ConvertAssistedLBAModeLCHStoLBARegisterValues
    116121
    117122
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/Tools/Prepare.asm

    r567 r568  
    4646    ; Make sure that sector count is valid
    4747%ifdef USE_UNDOC_INTEL
    48     eSALC   ; Clear AL using CF (CF is cleared since JB above fell through)
     48    salc    ; Clear AL using CF (CF is cleared since JB above fell through)
    4949    or      al, [es:si+DAP.wSectorCount]
    5050%else
Note: See TracChangeset for help on using the changeset viewer.