Ignore:
Timestamp:
May 22, 2016, 12:26:57 PM (8 years ago)
Author:
krille_n_
Message:

Changes:

  • BIOS: Fixed a purely cosmetic bug from r542 where, in builds containing MODULE_EBIOS, the boot menu would display an incorrect drive size (0.4 kB with MODULE_STRINGS_COMPRESSED or 0.5 kB without) for old drives with no support for LBA.
  • Fixed a bug from r392 where Vision_DetectAndReturnIDinAXandPortInDXifControllerPresent would return the ID in AL instead of AH (if DANGEROUS_DETECTION had been defined).
  • Fixed a bug from r587 in AdvAtaInit.asm that would prevent detection of QDI Vision controllers.
  • Also changed how the QDI Vision IDs are defined (removed the need for shifting) to avoid confusion. This fixed a potential bug from r587 in AdvAtaInit.asm where some IDs were not being shifted.
  • Fixed a bug in PDC20x30.asm from r587 where GetPdcIDtoAX would not return with the IDE base port in DX so DisablePdcProgrammingMode would fail.
  • Made some changes to ModuleDependency.inc and other files so that MODULE_ADVANCED_ATA now requires USE_386. Consequently it is no longer included in the regular AT-builds, only in the 386_8k-build.
  • Moved the UNROLL_SECTORS_IN_CX_TO_xWORDS macros from IDE_8bit.inc to IdeIO.inc which means it's now possible to build a BIOS without MODULE_8BIT_IDE.
  • XTIDECFG: Added a minimum DOS version check (since it needs DOS version 2+) to allow the program to quit gracefully in the unlikely scenario where someone tries to run it under DOS version 1.
  • Made some changes to Drive.asm to improve drive enumeration. The old method using GET_DOS_DRIVE_PARAMETER_BLOCK_FOR_SPECIFIC_DRIVE worked well in Windows XP but not in Windows 98 SE (in Windows or in DOS mode). The two problems were; 1) The function call would access the drives which on single floppy drive systems would cause Windows to swap between A: and B: (throwing a blue screen asking the user to insert a disk etc). 2) Only floppy drives and FAT16 drives would be available in the list of drives, no FAT32/optical/network drives.
  • Improved code in IdeControllerMenu.asm so that the default port addresses for all IDE interfaces are now restored when (re-)selecting the (same) type of IDE device.
  • Also made it impossible to select a device type unless the required module is included in the loaded BIOS.
  • The version check done when loading a BIOS now uses the FLASH_SIGNATURE definition from Version.inc. Any changes affecting RomVars now only requires updating that definition. This means that changes to RomVars must be implemented in both the BIOS and XTIDECFG before being committed to the repository.
  • Added a compatibility fix for 3Com 3C503 cards to the ROM checksumming code in Buffers.asm (Buffers_GenerateChecksum).
  • SerDrive: Made some minor changes to file names and paths to improve compatibility with case sensitive environments.
  • BIOSDRVS: Made a minor size optimization which as a side effect also makes it compatible with all DOS versions including DOS version 1.
  • Library: Renamed the WAIT_RETRACE_IF_NECESSARY_THEN macro to CALL_WAIT_FOR_RETRACE_IF_NECESSARY_THEN and made a tail-call-optimized version of it (JMP_WAIT_FOR_RETRACE_IF_NECESSARY_THEN).
  • A speed optimization to the eRCL_IM macro for 386 and higher. This change breaks emulation in the sense that the macro will fail when given a memory operand as the first parameter.
  • Other minor optimizations and fixes.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdePioBlock.asm

    r580 r589  
    2929; --------------------------------------------------------------------------------------------------
    3030
    31 
    3231%ifdef MODULE_8BIT_IDE
    33 
    3432;--------------------------------------------------------------------
    3533; IdePioBlock_ReadFromXtideRev1
     
    5755
    5856;--------------------------------------------------------------------
     57; 8-bit PIO from a single data port.
     58;
    5959; IdePioBlock_ReadFrom8bitDataPort
    60 ;
    61 ; 8-bit PIO from a single data port.
    62 ;
    6360;   Parameters:
    6461;       CX:     Block size in 512 byte sectors
     
    6865;       Nothing
    6966;   Corrupts registers:
    70 ;       AX, BX, CX
     67;       AX, CX
    7168;--------------------------------------------------------------------
    7269ALIGN JUMP_ALIGN
     
    8784    ret
    8885%endif
    89 
    90 %endif  ; MODULE_8BIT_IDE
    91 
    92 
    93 ;--------------------------------------------------------------------
     86%endif ; MODULE_8BIT_IDE
     87
     88
     89;--------------------------------------------------------------------
     90; 16-bit and 32-bit PIO from a single data port.
     91;
    9492; IdePioBlock_ReadFrom16bitDataPort
    95 ;
    96 ; 16-bit PIO from a single data port.
    97 ;
     93; IdePioBlock_ReadFrom32bitDataPort
    9894;   Parameters:
    9995;       CX:     Block size in 512 byte sectors
     
    10399;       Nothing
    104100;   Corrupts registers:
    105 ;       AX, BX, CX
     101;       AX, CX
    106102;--------------------------------------------------------------------
    107103ALIGN JUMP_ALIGN
    108104IdePioBlock_ReadFrom16bitDataPort:
    109105%ifdef USE_186
    110     xchg    cl, ch  ; Sectors to WORDs
     106    xchg    cl, ch      ; Sectors to WORDs
    111107    rep insw
    112108    ret
     
    126122
    127123;--------------------------------------------------------------------
     124%ifdef MODULE_ADVANCED_ATA
    128125ALIGN JUMP_ALIGN
    129126IdePioBlock_ReadFrom32bitDataPort:
    130     db      0C1h        ; SHL
    131     db      0E1h        ; CX
    132     db      7           ; 7 (Sectors to DWORDs)
    133     rep
    134     db      66h         ; Override operand size to 32-bit
    135     db      6Dh         ; INSW/INSD
    136     ret
    137 
     127    shl     cx, 7       ; Sectors to DWORDs
     128    rep insd
     129    ret
     130%endif ; MODULE_ADVANCED_ATA
    138131
    139132
     
    145138
    146139%ifdef MODULE_8BIT_IDE
    147 
    148140;--------------------------------------------------------------------
    149141; IdePioBlock_WriteToXtideRev1
     
    151143;       CX:     Block size in 512-byte sectors
    152144;       DX:     IDE Data port address
    153 ;       ES:SI:  Normalized ptr to buffer containing data
     145;       DS:SI:  Normalized ptr to buffer containing data
    154146;   Returns:
    155147;       Nothing
     
    159151ALIGN JUMP_ALIGN
    160152IdePioBlock_WriteToXtideRev1:
    161     push    ds
    162153    UNROLL_SECTORS_IN_CX_TO_QWORDS
    163154    mov     bl, 8       ; Bit mask for toggling data low/high reg
    164     push    es
    165     pop     ds
    166155ALIGN JUMP_ALIGN
    167156.OutswLoop:
     
    170159    %endrep
    171160    loop    .OutswLoop
    172     pop     ds
    173161    ret
    174162
     
    179167;       CX:     Block size in 512-byte sectors
    180168;       DX:     IDE Data port address
    181 ;       ES:SI:  Normalized ptr to buffer containing data
    182 ;   Returns:
    183 ;       Nothing
    184 ;   Corrupts registers:
    185 ;       AX, BX, CX
     169;       DS:SI:  Normalized ptr to buffer containing data
     170;   Returns:
     171;       Nothing
     172;   Corrupts registers:
     173;       AX, CX
    186174;--------------------------------------------------------------------
    187175ALIGN JUMP_ALIGN
    188176IdePioBlock_WriteToXtideRev2:
    189177    UNROLL_SECTORS_IN_CX_TO_QWORDS
    190     push    ds
    191     push    es
    192     pop     ds
    193178ALIGN JUMP_ALIGN
    194179.WriteNextQword:
     
    197182    %endrep
    198183    loop    .WriteNextQword
    199     pop     ds
    200184    ret
    201185
     
    206190;       CX:     Block size in 512-byte sectors
    207191;       DX:     IDE Data port address
    208 ;       ES:SI:  Normalized ptr to buffer containing data
    209 ;   Returns:
    210 ;       Nothing
    211 ;   Corrupts registers:
    212 ;       AX, BX, CX
     192;       DS:SI:  Normalized ptr to buffer containing data
     193;   Returns:
     194;       Nothing
     195;   Corrupts registers:
     196;       AX, CX
    213197;--------------------------------------------------------------------
    214198ALIGN JUMP_ALIGN
     
    216200%ifdef USE_186
    217201    shl     cx, 9       ; Sectors to BYTEs
    218     es                  ; Source is ES segment
    219202    rep outsb
    220203    ret
     
    222205%else ; 808x
    223206    UNROLL_SECTORS_IN_CX_TO_QWORDS
    224     push    ds
    225     push    es
    226     pop     ds
    227207ALIGN JUMP_ALIGN
    228208.WriteNextQword:
     
    232212    %endrep
    233213    loop    .WriteNextQword
    234     pop     ds
    235     ret
    236 %endif
    237 
     214    ret
     215%endif
    238216%endif ; MODULE_8BIT_IDE
    239217
     
    245223;       CX:     Block size in 512-byte sectors
    246224;       DX:     IDE Data port address
    247 ;       ES:SI:  Normalized ptr to buffer containing data
    248 ;   Returns:
    249 ;       Nothing
    250 ;   Corrupts registers:
    251 ;       AX, BX, CX
     225;       DS:SI:  Normalized ptr to buffer containing data
     226;   Returns:
     227;       Nothing
     228;   Corrupts registers:
     229;       AX, CX
    252230;--------------------------------------------------------------------
    253231ALIGN JUMP_ALIGN
     
    255233%ifdef USE_186
    256234    xchg    cl, ch      ; Sectors to WORDs
    257     es                  ; Source is ES segment
    258235    rep outsw
    259236    ret
     
    261238%else ; 808x
    262239    UNROLL_SECTORS_IN_CX_TO_QWORDS
    263     push    ds
    264     push    es
    265     pop     ds
    266240ALIGN JUMP_ALIGN
    267241.WriteNextQword:
     
    271245    %endrep
    272246    loop    .WriteNextQword
    273     pop     ds
    274     ret
    275 %endif
    276 
    277 ;--------------------------------------------------------------------
     247    ret
     248%endif
     249
     250;--------------------------------------------------------------------
     251%ifdef MODULE_ADVANCED_ATA
    278252ALIGN JUMP_ALIGN
    279253IdePioBlock_WriteTo32bitDataPort:
    280     db      0C1h        ; SHL
    281     db      0E1h        ; CX
    282     db      7           ; 7 (Sectors to DWORDs)
    283     es                  ; Source is ES segment
    284     rep
    285     db      66h         ; Override operand size to 32-bit
    286     db      6Fh         ; OUTSW/OUTSD
    287     ret
     254    shl     cx, 7       ; Sectors to DWORDs
     255    rep outsd
     256    ret
     257%endif ; MODULE_ADVANCED_ATA
Note: See TracChangeset for help on using the changeset viewer.