Changeset 505 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Handlers
- Timestamp:
- Feb 25, 2013, 4:23:09 PM (12 years ago)
- google:author:
- krille_n_@hotmail.com
- Location:
- trunk/XTIDE_Universal_BIOS/Src/Handlers
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH0h_HReset.asm
r503 r505 39 39 AH0h_HandlerForDiskControllerReset: 40 40 ; Reset foreign Floppy and Hard Drives (those handled by other BIOSes) 41 xor bx, bx ; Zero BH to assume no errors42 or bl, dl ; Copy requested drive to BL 41 eMOVZX bx, dl ; Copy requested drive to BL and zero BH to assume no errors 42 43 43 xor ah, ah ; Disk Controller Reset 44 44 call Int13h_CallPreviousInt13hHandler ; Reset floppy drives only or floppy drives and foreign hard disks -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH1Eh_XTCF.asm
r491 r505 102 102 out dx, al 103 103 104 ; We always need to enable 8-bit mode since 16-bit mode is restored 105 ; when controller is reset (AH=00h or 0Dh) 106 ePUSH_T bx, AH23h_Enable8bitPioMode 107 104 108 ; Convert Control Register Contents to device code 105 109 test al, al … … 108 112 jae SHORT .SetMemoryMappedMode 109 113 114 ; We need to limit block size here. Consider this scenario; 115 ; 1. While in PIO mode or memory mapped mode, the drive is set to do 116 ; block transfers larger than XTCF_DMA_MODE_MAX_BLOCK_SIZE. 117 ; 2. A call is subsequently made to change device mode to DEVICE_8BIT_XTCF_DMA. 118 ; 3. The call to AH24h_SetBlockSize fails but the change in device mode has been made. 119 110 120 ; Set DMA Mode 111 121 mov BYTE [di+DPT_ATA.bDevice], DEVICE_8BIT_XTCF_DMA 112 122 mov al, [di+DPT_ATA.bBlockSize] 113 call AH24h_SetBlockSize ; AH=24h limits block size if necessary114 jmp SHORT .Enable8bitPioMode123 MIN_U al, XTCF_DMA_MODE_MAX_BLOCK_SIZE 124 jmp SHORT AH24h_SetBlockSize ; Returns via AH23h_Enable8bitPioMode 115 125 116 126 .SetMemoryMappedMode: 117 mov BYTE [di+DPT_ATA.bDevice], DEVICE_8BIT_XTCF_MEMMAP118 jmp SHORT .Enable8bitPioMode127 mov al, DEVICE_8BIT_XTCF_MEMMAP 128 SKIP2B bx 119 129 120 130 .Set8bitPioMode: 121 mov BYTE [di+DPT_ATA.bDevice], DEVICE_8BIT_XTCF_PIO8 122 ; Fall to .Enable8bitPioMode 123 124 ; We always need to enable 8-bit mode since 16-bit mode is restored 125 ; when controller is reset (AH=00h or 0Dh) 126 .Enable8bitPioMode: 127 jmp AH23h_Enable8bitPioMode 131 mov al, DEVICE_8BIT_XTCF_PIO8 132 mov [di+DPT_ATA.bDevice], al 133 ret ; Via AH23h_Enable8bitPioMode 128 134 129 135 -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH9h_HInit.asm
r493 r505 101 101 call Device_SelectDrive 102 102 STORE_ERROR_FLAG_TO_DPT FLG_INITERROR_FAILED_TO_SELECT_DRIVE 103 %ifdef USE_386 104 jc .ReturnWithErrorCodeInAH 105 %else 103 106 jnc SHORT .ContinueInitializationSinceDriveSelectedSuccesfully 104 107 jmp .ReturnWithErrorCodeInAH 105 108 .ContinueInitializationSinceDriveSelectedSuccesfully: 109 %endif 106 110 107 111 -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h.asm
r493 r505 3 3 4 4 ; 5 ; XTIDE Universal BIOS and Associated Tools 5 ; XTIDE Universal BIOS and Associated Tools 6 6 ; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team. 7 7 ; … … 10 10 ; the Free Software Foundation; either version 2 of the License, or 11 11 ; (at your option) any later version. 12 ; 12 ; 13 13 ; This program is distributed in the hope that it will be useful, 14 14 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 15 15 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 ; GNU General Public License for more details. 16 ; GNU General Public License for more details. 17 17 ; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 18 ; 18 ; 19 19 20 20 ; Section containing code … … 107 107 ; The following macro could be easily inlined below. Why a macro? Depending on the combination 108 108 ; of MODULE_HOTKEYS or MODULE_BOOT_MENU, this code needs to either come before or after the 109 ; call to the boot menu. 109 ; call to the boot menu. 110 110 ; 111 111 %macro TRY_TO_BOOT_DL_AND_DH_DRIVES 0 112 112 push dx ; it's OK if this is left on the stack, if we are 113 ; aresuccessful, the following call does not return113 ; successful, the following call does not return 114 114 call TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot 115 115 pop dx … … 117 117 call TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot 118 118 %endmacro 119 120 %ifdef MODULE_HOTKEYS 121 call HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars 119 120 %ifdef MODULE_HOTKEYS 121 call HotkeyBar_ScanHotkeysFromKeyBufferAndStoreToBootvars 122 122 cmp al, ROM_BOOT_HOTKEY_SCANCODE 123 j z.RomBoot ; CF clear so ROM boot123 je .RomBoot ; CF clear so ROM boot 124 124 %ifdef MODULE_BOOT_MENU 125 125 cmp al, BOOT_MENU_HOTKEY_SCANCODE 126 j z.BootMenu126 je .BootMenu 127 127 %endif 128 128 call HotkeyBar_GetBootDriveNumbersToDX … … 130 130 TRY_TO_BOOT_DL_AND_DH_DRIVES 131 131 ;; falls through to boot menu, if it is present. If not present, falls through to rom boot. 132 %endif 132 %endif ; MODULE_HOTKEYS 133 133 134 134 %ifdef MODULE_BOOT_MENU 135 .BootMenu: 135 .BootMenu: 136 136 call BootMenu_DisplayAndReturnDriveInDLRomBootClearCF 137 137 jnc .RomBoot ; CF clear so ROM boot 138 138 139 139 mov dh, dl ; Setup for secondary drive 140 not dh ; Floppy goes to HD, or vice ver as141 and dh, 080h; Go to first drive of the floppy or HD set140 not dh ; Floppy goes to HD, or vice versa 141 and dh, 80h ; Go to first drive of the floppy or HD set 142 142 143 143 %ifdef MODULE_HOTKEYS 144 144 jmp .TryUsingHotKeysCode 145 145 %else 146 TRY_TO_BOOT_DL_AND_DH_DRIVES 146 TRY_TO_BOOT_DL_AND_DH_DRIVES 147 147 jmp .BootMenu 148 148 %endif 149 %endif 150 151 %ifndef MODULE_HOTKEYS 152 %ifndef MODULE_BOOT_MENU 149 %endif ; MODULE_BOOT_MENU 150 151 %ifndef MODULE_HOTKEYS OR MODULE_BOOT_MENU 153 152 xor dl, dl ; Try to boot from Floppy Drive A 154 153 call TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot 155 154 mov dl, 80h ; Try to boot from Hard Drive C 156 155 call TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot 157 %endif158 156 %endif 159 157 … … 162 160 call DriveXlate_Reset ; Clean up any drive mappings before Rom Boot 163 161 %endif 164 clc 162 clc 165 163 ;; fall through to JumpToBootSector_or_RomBoot 166 164 … … 174 172 ; Parameters: 175 173 ; DL: Drive to boot from (translated, 00h or 80h) 176 ; CF: Set for Boot Sector Boot 174 ; CF: Set for Boot Sector Boot 177 175 ; Clear for ROM Boot 178 176 ; ES:BX: (if CF set) Ptr to boot sector … … 187 185 188 186 ; clear segment registers before boot sector or rom call 189 mov ds, ax 187 mov ds, ax 190 188 mov es, ax 191 189 %ifdef USE_386 … … 202 200 ; Boot by calling INT 18h (ROM Basic of ROM DOS) 203 201 .romboot: 204 int BIOS_BOOT_FAILURE_INTERRUPT_18h ; Never returns 205 206 207 ;-------------------------------------------------------------------- 208 ; TryToBootFromPrimaryOrSecondaryBootDevice 202 int BIOS_BOOT_FAILURE_INTERRUPT_18h ; Never returns 203 204 205 ;-------------------------------------------------------------------- 206 ; TryToBootFromPrimaryOrSecondaryBootDevice_AndBoot 209 207 ; Parameters 210 208 ; DL: Drive selected as boot device … … 229 227 230 228 TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot: 231 ; fall through to BootSector_TryToLoadFromDriveDL_AndBoot 232 %endif 233 234 229 ; fall through to BootSector_TryToLoadFromDriveDL_AndBoot 230 %endif 231 -
trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/BootSector.asm
r492 r505 3 3 4 4 ; 5 ; XTIDE Universal BIOS and Associated Tools 5 ; XTIDE Universal BIOS and Associated Tools 6 6 ; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team. 7 7 ; … … 10 10 ; the Free Software Foundation; either version 2 of the License, or 11 11 ; (at your option) any later version. 12 ; 12 ; 13 13 ; This program is distributed in the hope that it will be useful, 14 14 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 15 15 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 16 ; 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 ; 19 19 20 20 ; Section containing code … … 22 22 23 23 ;-------------------------------------------------------------------- 24 ; BootSector_TryToLoadFromDriveDL 24 ; BootSector_TryToLoadFromDriveDL_AndBoot 25 25 ; Parameters: 26 26 ; DL: Drive to boot from (translated, 00h or 80h) … … 36 36 call DetectPrint_TryToBootFromDL 37 37 call LoadFirstSectorFromDriveDL 38 %ifndef USE_386 38 39 jc SHORT .FailedToLoadFirstSector 40 %else 41 jc DetectPrint_FailedToLoadFirstSector 42 %endif 39 43 40 44 test dl, dl … … 44 48 .AlwaysBootFromFloppyDriveForBooterGames: 45 49 stc 46 jmp SHORT JumpToBootSector_or_RomBoot 50 jmp SHORT JumpToBootSector_or_RomBoot 51 52 %ifndef USE_386 47 53 .FailedToLoadFirstSector: 48 call DetectPrint_FailedToLoadFirstSector 49 ret 54 jmp DetectPrint_FailedToLoadFirstSector 55 %endif 56 50 57 .FirstHardDiskSectorNotBootable: 51 58 mov si, g_szBootSectorNotFound 52 call DetectPrint_NullTerminatedStringFromCSSIandSetCF 53 ret 59 jmp DetectPrint_NullTerminatedStringFromCSSIandSetCF 54 60 55 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 61 %ifndef CHECK_FOR_UNUSED_ENTRYPOINTS 56 62 %ifdef MODULE_DRIVEXLATE 57 63 %if TryToBoot_FallThroughTo_BootSector_TryToLoadFromDriveDL_AndBoot <> BootSector_TryToLoadFromDriveDL_AndBoot … … 79 85 80 86 .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: 83 96 dec di ; Decrement retry counter (preserve CF) 84 97 jz SHORT .Return ; Loop while retries left 85 98 86 99 ; Reset drive and retry 87 xor ax, ax ; AH=0 h, Disk Controller Reset100 xor ax, ax ; AH=00h, Disk Controller Reset 88 101 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) 90 103 int BIOS_DISK_INTERRUPT_13h 91 104 jmp SHORT .ReadRetryLoop 92 105 93 94 ;--------------------------------------------------------------------95 ; .LoadFirstSectorFromDLtoESBX96 ; Parameters:97 ; DL: Drive to boot from (translated, 00h or 80h)98 ; ES:BX: Destination buffer for boot sector99 ; Returns:100 ; AH: INT 13h error code101 ; ES:BX: Ptr to boot sector102 ; CF: Cleared if read successful103 ; Set if any error104 ; Corrupts registers:105 ; AL, CX, DH106 ;--------------------------------------------------------------------107 .LoadFirstSectorFromDLtoESBX:108 mov ax, 0201h ; Read 1 sector109 mov cx, 1 ; Cylinder 0, Sector 1110 xor dh, dh ; Head 0111 int BIOS_DISK_INTERRUPT_13h112 .Return:113 ret
Note:
See TracChangeset
for help on using the changeset viewer.