Ignore:
Timestamp:
Apr 29, 2011, 7:04:13 PM (13 years ago)
Author:
aitotat
google:author:
aitotat
Message:

Changes to XTIDE Universal BIOS:

  • Redesigned Disk Parameter Tables.
  • Code generalizations for supporting non-IDE devices in the future.
File:
1 edited

Legend:

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

    r99 r150  
    66
    77;--------------------------------------------------------------------
    8 ; Returns L-CHS values from DPT.
    9 ;
     8; AccessDPT_GetDriveSelectByteToAL
     9;   Parameters:
     10;       DS:DI:  Ptr to Disk Parameter Table
     11;   Returns:
     12;       AL:     Drive Select Byte
     13;   Corrupts registers:
     14;       Nothing
     15;--------------------------------------------------------------------
     16ALIGN JUMP_ALIGN
     17AccessDPT_GetDriveSelectByteToAL:
     18    mov     al, [di+DPT.wFlags]
     19    and     al, FLG_DRVNHEAD_LBA | FLG_DRVNHEAD_DRV
     20    or      al, MASK_DRVNHEAD_SET   ; Bits set to 1 for old drives
     21    ret
     22
     23
     24;--------------------------------------------------------------------
     25; AccessDPT_GetDeviceControlByteToAL
     26;   Parameters:
     27;       DS:DI:  Ptr to Disk Parameter Table
     28;   Returns:
     29;       AL:     Device Control Byte
     30;   Corrupts registers:
     31;       Nothing
     32;--------------------------------------------------------------------
     33ALIGN JUMP_ALIGN
     34AccessDPT_GetDeviceControlByteToAL:
     35    xor     al, al
     36    test    BYTE [di+DPT.wFlags], FLG_DPT_ENABLE_IRQ
     37    jnz     SHORT .EnableDeviceIrq
     38    or      al, FLG_DEVCONTROL_nIEN ; Disable IRQ
     39.EnableDeviceIrq:
     40    ret
     41
     42
     43;--------------------------------------------------------------------
     44; AccessDPT_GetAddressingModeForWordLookToBX
     45;   Parameters:
     46;       DS:DI:  Ptr to Disk Parameter Table
     47;   Returns:
     48;       BX:     Addressing Mode (L-CHS, P-CHS, LBA28, LBA48) shifted for WORD lookup
     49;   Corrupts registers:
     50;       Nothing
     51;--------------------------------------------------------------------
     52ALIGN JUMP_ALIGN
     53AccessDPT_GetAddressingModeForWordLookToBX:
     54    mov     bl, [di+DPT.wFlags]
     55    and     bx, BYTE MASK_DPT_ADDRESSING_MODE
     56    eSHR_IM bx, ADDRESSING_MODE_FIELD_POSITION-1
     57    ret
     58
     59
     60;--------------------------------------------------------------------
    1061; AccessDPT_GetLCHSfromPCHS
    1162;   Parameters:
     
    2172AccessDPT_GetLCHSfromPCHS:
    2273    xchg    ax, cx
    23     mov     cl, [di+DPT.bShLtoP]        ; Load shift count
    24     mov     bx, [di+DPT.wPCyls]         ; Load P-CHS cylinders
    25     shr     bx, cl                      ; Shift to L-CHS cylinders
     74    mov     cl, [di+DPT.wFlags]
     75    and     cl, MASK_DPT_CHS_SHIFT_COUNT    ; Load shift count
     76    mov     bx, [di+DPT.wPchsCylinders]     ; Load P-CHS cylinders
     77    shr     bx, cl                          ; Shift to L-CHS cylinders
    2678    xchg    cx, ax
    27     mov     dx, [di+DPT.wLHeads]        ; Load L-CHS heads
    28     eMOVZX  ax, BYTE [di+DPT.bPSect]    ; Load Sectors per track
     79    eMOVZX  dx, BYTE [di+DPT.bLchsHeads]    ; Load L-CHS heads
     80    eMOVZX  ax, BYTE [di+DPT.bPchsSectors]  ; Load Sectors per track
    2981    ret
    3082
    3183
    3284;--------------------------------------------------------------------
    33 ; Tests IDEVARS flags for master or slave drive.
    34 ;
    3585; AccessDPT_TestIdeVarsFlagsForMasterOrSlaveDrive
    3686;   Parameters:
     
    63113ALIGN JUMP_ALIGN
    64114AccessDPT_GetPointerToDRVPARAMStoCSBX:
    65     eMOVZX  bx, [di+DPT.bIdeOff]        ; CS:BX points to IDEVARS
    66     test    BYTE [di+DPT.bDrvSel], FLG_IDE_DRVHD_DRV
    67     jnz     SHORT .ReturnPointerToSlaveDRVPARAMS
    68     add     bx, BYTE IDEVARS.drvParamsMaster
     115    eMOVZX  bx, [di+DPT.bIdevarsOffset]         ; CS:BX points to IDEVARS
     116    add     bx, BYTE IDEVARS.drvParamsMaster    ; CS:BX points to Master Drive DRVPARAMS
     117    test    BYTE [di+DPT.wFlags], FLG_DPT_SLAVE
     118    jz      SHORT .ReturnPointerToDRVPARAMS
     119    add     bx, BYTE DRVPARAMS_size             ; CS:BX points to Slave Drive DRVPARAMS
     120.ReturnPointerToDRVPARAMS:
    69121    ret
    70 ALIGN JUMP_ALIGN
    71 .ReturnPointerToSlaveDRVPARAMS:
    72     add     bx, BYTE IDEVARS.drvParamsSlave
    73     ret
Note: See TracChangeset for help on using the changeset viewer.