Ignore:
Timestamp:
Jan 29, 2012, 1:33:44 PM (12 years ago)
Author:
aitotat@…
google:author:
aitotat@gmail.com
Message:

Changes to XTIDE Universal BIOS:

  • EBIOS functions now work in lite mode.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/AccessDPT.asm

    r200 r227  
    4040    ret
    4141
    42        
     42
    4343;--------------------------------------------------------------------
    44 ; AccessDPT_GetLCHS
     44; AccessDPT_GetLCHStoAXBLBH
    4545;   Parameters:
    4646;       DS:DI:  Ptr to Disk Parameter Table
    4747;   Returns:
    48 ;       AX:     Number of L-CHS sectors per track
    49 ;       BX:     Number of L-CHS cylinders
    50 ;       DX:     Number of L-CHS heads
     48;       AX:     Number of L-CHS cylinders
     49;       BL:     Number of L-CHS heads
     50;       BH:     Number of L-CHS sectors per track
    5151;   Corrupts registers:
    52 ;       CX
     52;       CX, DX
    5353;--------------------------------------------------------------------
    54 AccessDPT_GetLCHS:
    55     ; Load CHS from DPT
    56     eMOVZX  ax, BYTE [di+DPT.bSectors]
    57     mov     bx, [di+DPT.dwCylinders]
    58     cwd
    59     mov     dl, [di+DPT.bHeads]
     54AccessDPT_GetLCHStoAXBLBH:
     55    ; Return LBA-assisted CHS if LBA addressing used
     56    test    BYTE [di+DPT.bFlagsLow], FLG_DRVNHEAD_LBA
     57    jz      SHORT .ConvertPchsToLchs
    6058
    61     ; Only need to limit sectors for LBA assist
    62     test    BYTE [di+DPT.bFlagsLow], FLG_DRVNHEAD_LBA
    63     jz      SHORT AccessDPT_ShiftPCHinBXDXtoLCH
     59    call    AccessDPT_GetLbaSectorCountToBXDXAX
     60    call    AtaID_GetLbaAssistedCHStoDXAXBLBH
     61    test    dx, dx
     62    jnz     SHORT .LimitAXtoMaxLCHScylinders
     63    cmp     ax, MAX_LCHS_CYLINDERS
     64    jbe     SHORT .returnLCHS
     65.LimitAXtoMaxLCHScylinders:
     66    mov     ax, MAX_LCHS_CYLINDERS
     67.returnLCHS:
     68    ret
    6469
    65     cmp     WORD [di+DPT.dwCylinders+2], BYTE 0
    66     jnz     SHORT .Return_MAX_LCHS_CYLINDERS
     70.ConvertPchsToLchs:
     71    mov     ax, [di+DPT.wPchsCylinders]
     72    mov     bx, [di+DPT.wPchsHeadsAndSectors]
     73    jmp     SHORT AccessDPT_ShiftPCHinAXBLtoLCH
    6774
    68     ; Limit cylinders to 1024
    69     cmp     bx, MAX_LCHS_CYLINDERS
    70     jb      SHORT .Return
    71 ALIGN JUMP_ALIGN
    72 .Return_MAX_LCHS_CYLINDERS:
    73     mov     bx, MAX_LCHS_CYLINDERS
    74 ALIGN JUMP_ALIGN, ret
    75 .Return:
     75
     76;--------------------------------------------------------------------
     77; AccessDPT_GetLbaSectorCountToBXDXAX
     78;   Parameters:
     79;       DS:DI:  Ptr to Disk Parameter Table
     80;   Returns:
     81;       BX:DX:AX:   48-bit sector count
     82;   Corrupts registers:
     83;       Nothing
     84;--------------------------------------------------------------------
     85AccessDPT_GetLbaSectorCountToBXDXAX:
     86    mov     ax, [di+DPT.twLbaSectors]
     87    mov     dx, [di+DPT.twLbaSectors+2]
     88    mov     bx, [di+DPT.twLbaSectors+4]
    7689    ret
    7790
    7891
    7992;--------------------------------------------------------------------
    80 ; AccessDPT_ShiftPCHinBXDXtoLCH
     93; AccessDPT_ShiftPCHinAXBLtoLCH
    8194;   Parameters:
    82 ;       BX:     P-CHS cylinders (1...16383)
    83 ;       DX:     P-CHS heads (1...16)
     95;       AX:     P-CHS cylinders (1...16383)
     96;       BL:     P-CHS heads (1...16)
    8497;   Returns:
    85 ;       BX:     Number of L-CHS cylinders (1...1024)
    86 ;       DX:     Number of L-CHS heads (1...255)
     98;       AX:     Number of L-CHS cylinders (1...1024)
     99;       BL:     Number of L-CHS heads (1...255)
    87100;       CX:     Number of bits shifted
    88101;   Corrupts registers:
    89102;       Nothing
    90103;--------------------------------------------------------------------
    91 AccessDPT_ShiftPCHinBXDXtoLCH:
     104AccessDPT_ShiftPCHinAXBLtoLCH:
    92105    xor     cx, cx
    93106.ShiftLoop:
    94     cmp     bx, MAX_LCHS_CYLINDERS      ; Need to shift?
     107    cmp     ax, MAX_LCHS_CYLINDERS      ; Need to shift?
    95108    jbe     SHORT .LimitHeadsTo255      ;  If not, return
    96109    inc     cx                          ; Increment shift count
    97     shr     bx, 1                       ; Halve cylinders
    98     shl     dx, 1                       ; Double heads
     110    shr     ax, 1                       ; Halve cylinders
     111    shl     bl, 1                       ; Double heads
    99112    jmp     SHORT .ShiftLoop
    100113.LimitHeadsTo255:                       ; DOS does not support drives with 256 heads
    101     sub     dl, dh                      ; DH set only when 256 logical heads
    102     xor     dh, dh
     114    cmp     bl, cl                      ; Set CF if BL is zero
     115    sbb     bl, ch                      ; If BL=0 then BL=255
    103116    ret
    104117
    105        
     118
    106119;--------------------------------------------------------------------
    107120; Returns pointer to DRVPARAMS for master or slave drive.
     
    144157    and     al, MASKL_DPT_ADDRESSING_MODE
    145158%endmacro
    146 
    147        
Note: See TracChangeset for help on using the changeset viewer.