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/Handlers/Int13h/AH2h_HRead.asm

    r148 r150  
    1313;       DL:     Translated Drive number
    1414;       DS:DI:  Ptr to DPT (in RAMVARS segment)
    15 ;       SS:BP:  Ptr to INTPACK
    16 ;   Parameters on INTPACK in SS:BP:
    17 ;       AL:     Number of sectors to read (1...255)
     15;       SS:BP:  Ptr to IDEPACK
     16;   Parameters on INTPACK:
     17;       AL:     Number of sectors to read (1...255, 0=256)
    1818;       CH:     Cylinder number, bits 7...0
    1919;       CL:     Bits 7...6: Cylinder number bits 9 and 8
     
    2121;       DH:     Starting head number (0...255)
    2222;       ES:BX:  Pointer to buffer recieving data
    23 ;   Returns with INTPACK in SS:BP:
     23;   Returns with INTPACK:
    2424;       AH:     Int 13h/40h floppy return status
    2525;       AL:     Burst error length if AH returns 11h, undefined otherwise
     
    2828ALIGN JUMP_ALIGN
    2929AH2h_HandlerForReadDiskSectors:
    30     test    al, al                      ; Invalid sector count?
    31     jz      SHORT AH2h_ZeroCntErr       ;  If so, return with error
    32 
    33     ; Select sector or block mode command
    34     mov     ah, HCMD_READ_SECT          ; Load sector mode command
    35     cmp     BYTE [di+DPT.bSetBlock], 1  ; Block mode enabled?
    36     eCMOVA  ah, HCMD_READ_MUL           ; Load block mode command
    37 
    38     ; Transfer data
    39     call    HCommand_OutputCountAndLCHSandCommand
    40     jc      SHORT .ReturnWithErrorCodeInAH
    41     mov     bx, [bp+INTPACK.bx]
    42     call    HPIO_ReadBlock              ; Read data from IDE-controller
    43 .ReturnWithErrorCodeInAH:
     30    mov     ah, COMMAND_READ_SECTORS    ; Load sector mode command
     31    test    WORD [di+DPT.wFlags], FLG_DPT_BLOCK_MODE_SUPPORTED
     32    eCMOVNZ ah, COMMAND_READ_MULTIPLE   ; Load block mode command
     33    mov     bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_DRQ, FLG_STATUS_DRQ)
     34    mov     si, [bp+IDEPACK.intpack+INTPACK.bx]
     35%ifdef USE_186
     36    push    Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
     37    jmp     Idepack_TranslateOldInt13hAddressAndIssueCommandFromAH
     38%else
     39    call    Idepack_TranslateOldInt13hAddressAndIssueCommandFromAH
    4440    jmp     Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
    45 
    46 ; Invalid sector count (also for AH=3h and AH=4h)
    47 AH2h_ZeroCntErr:
    48     mov     ah, RET_HD_INVALID          ; Invalid value passed
    49     jmp     Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
     41%endif
Note: See TracChangeset for help on using the changeset viewer.