Changeset 505 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h


Ignore:
Timestamp:
Feb 25, 2013, 4:23:09 PM (12 years ago)
Author:
krille_n_@…
google:author:
krille_n_@hotmail.com
Message:

Changes:

  • Reverted the changes to MenuEvents.inc done in r492 since they broke the F1 key function in XTIDECFG.
  • Added a tail-call optimized variant of the CALL_DISPLAY_LIBRARY macro (JMP_DISPLAY_LIBRARY).
  • Put a block size limit in AH1Eh_ChangeXTCFmodeBasedOnControlRegisterInAL. I think it's needed but if not, it's easy to remove.
  • Other optimizations and fixes.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/BootSector.asm

    r492 r505  
    33
    44;
    5 ; XTIDE Universal BIOS and Associated Tools 
     5; XTIDE Universal BIOS and Associated Tools
    66; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team.
    77;
     
    1010; the Free Software Foundation; either version 2 of the License, or
    1111; (at your option) any later version.
    12 ; 
     12;
    1313; This program is distributed in the hope that it will be useful,
    1414; but WITHOUT ANY WARRANTY; without even the implied warranty of
    1515; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1616; GNU General Public License for more details.
    17 ; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html               
    18 ;       
     17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
     18;
    1919
    2020; Section containing code
     
    2222
    2323;--------------------------------------------------------------------
    24 ; BootSector_TryToLoadFromDriveDL
     24; BootSector_TryToLoadFromDriveDL_AndBoot
    2525;   Parameters:
    2626;       DL:     Drive to boot from (translated, 00h or 80h)
     
    3636    call    DetectPrint_TryToBootFromDL
    3737    call    LoadFirstSectorFromDriveDL
     38%ifndef USE_386
    3839    jc      SHORT .FailedToLoadFirstSector
     40%else
     41    jc      DetectPrint_FailedToLoadFirstSector
     42%endif
    3943
    4044    test    dl, dl
     
    4448.AlwaysBootFromFloppyDriveForBooterGames:
    4549    stc
    46     jmp     SHORT JumpToBootSector_or_RomBoot       
     50    jmp     SHORT JumpToBootSector_or_RomBoot
     51
     52%ifndef USE_386
    4753.FailedToLoadFirstSector:
    48     call    DetectPrint_FailedToLoadFirstSector
    49     ret
     54    jmp     DetectPrint_FailedToLoadFirstSector
     55%endif
     56
    5057.FirstHardDiskSectorNotBootable:
    5158    mov     si, g_szBootSectorNotFound
    52     call    DetectPrint_NullTerminatedStringFromCSSIandSetCF
    53     ret
     59    jmp     DetectPrint_NullTerminatedStringFromCSSIandSetCF
    5460
    55 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS       
     61%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
    5662  %ifdef MODULE_DRIVEXLATE
    5763    %if TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot <> BootSector_TryToLoadFromDriveDL_AndBoot
     
    7985
    8086.ReadRetryLoop:
    81     call    .LoadFirstSectorFromDLtoESBX
    82     jnc     SHORT .Return
     87    mov     ax, 0201h                       ; Read 1 sector
     88    mov     cx, 1                           ; Cylinder 0, Sector 1
     89    xor     dh, dh                          ; Head 0
     90    int     BIOS_DISK_INTERRUPT_13h
     91    jc      SHORT .FailedToLoadFirstSector
     92.Return:
     93    ret
     94
     95.FailedToLoadFirstSector:
    8396    dec     di                              ; Decrement retry counter (preserve CF)
    8497    jz      SHORT .Return                   ; Loop while retries left
    8598
    8699    ; Reset drive and retry
    87     xor     ax, ax                          ; AH=0h, Disk Controller Reset
     100    xor     ax, ax                          ; AH=00h, Disk Controller Reset
    88101    test    dl, dl                          ; Floppy drive?
    89     eCMOVS  ah, RESET_HARD_DISK             ; AH=Dh, Reset Hard Disk (Alternate reset)
     102    eCMOVS  ah, RESET_HARD_DISK             ; AH=0Dh, Reset Hard Disk (Alternate reset)
    90103    int     BIOS_DISK_INTERRUPT_13h
    91104    jmp     SHORT .ReadRetryLoop
    92105
    93 
    94 ;--------------------------------------------------------------------
    95 ; .LoadFirstSectorFromDLtoESBX
    96 ;   Parameters:
    97 ;       DL:     Drive to boot from (translated, 00h or 80h)
    98 ;       ES:BX:  Destination buffer for boot sector
    99 ;   Returns:
    100 ;       AH:     INT 13h error code
    101 ;       ES:BX:  Ptr to boot sector
    102 ;       CF:     Cleared if read successful
    103 ;               Set if any error
    104 ;   Corrupts registers:
    105 ;       AL, CX, DH
    106 ;--------------------------------------------------------------------
    107 .LoadFirstSectorFromDLtoESBX:
    108     mov     ax, 0201h                       ; Read 1 sector
    109     mov     cx, 1                           ; Cylinder 0, Sector 1
    110     xor     dh, dh                          ; Head 0
    111     int     BIOS_DISK_INTERRUPT_13h
    112 .Return:
    113     ret
Note: See TracChangeset for help on using the changeset viewer.