Changeset 86 in xtideuniversalbios for trunk/XTIDE_Universal_BIOS/Src/Initialization/Interrupts.asm
- Timestamp:
- Jan 25, 2011, 9:13:56 PM (14 years ago)
- google:author:
- krille_n_@hotmail.com
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/XTIDE_Universal_BIOS/Src/Initialization/Interrupts.asm
r33 r86 1 ; File name : Interrupts.asm2 1 ; Project name : IDE BIOS 3 ; Created date : 23.8.20104 ; Last update : 23.8.20105 ; Author : Tomi Tilli6 2 ; Description : Functions for initializing the BIOS. 7 3 … … 18 14 ; Corrupts registers: 19 15 ; All except segments 20 ;-------------------------------------------------------------------- 16 ;-------------------------------------------------------------------- 21 17 ALIGN JUMP_ALIGN 22 18 Interrupts_InitializeInterruptVectors: … … 24 20 call Interrupts_InitializeInt19h 25 21 jmp SHORT Interrupts_InitializeHardwareIrqHandlers 22 ; Maybe all this should be inlined? 26 23 27 24 … … 35 32 ; Corrupts registers: 36 33 ; AX, BX, CX, DX, SI, DI 37 ;-------------------------------------------------------------------- 34 ;-------------------------------------------------------------------- 38 35 ALIGN JUMP_ALIGN 39 36 Interrupts_InitializeInt13hAnd40h: … … 50 47 ; 40h from 13h. That system locks to infinite loop if we copy 13h to 40h. 51 48 call FloppyDrive_IsInt40hInstalled 52 jnc SHORT .InitializeInt40h 53 ret 54 55 ;-------------------------------------------------------------------- 56 ; .InitializeInt40h 57 ; Parameters: 58 ; DX:AX: Ptr to old INT 13h handler 59 ; ES: BDA and Interrupt Vector segment (zero) 60 ; Returns: 61 ; Nothing 62 ; Corrupts registers: 63 ; Nothing 64 ;-------------------------------------------------------------------- 65 ALIGN JUMP_ALIGN 66 .InitializeInt40h: 49 jc SHORT .Return 67 50 mov [es:INTV_FLOPPY_FUNC*4], ax ; Store offset 68 51 mov [es:INTV_FLOPPY_FUNC*4+2], dx ; Store segment 52 .Return: 69 53 ret 70 54 … … 79 63 ; Corrupts registers: 80 64 ; BX, SI 81 ;-------------------------------------------------------------------- 65 ;-------------------------------------------------------------------- 82 66 ALIGN JUMP_ALIGN 83 67 Interrupts_InitializeInt19h: … … 116 100 ; Corrupts registers: 117 101 ; BX, CX, DX, SI, DI 118 ;-------------------------------------------------------------------- 102 ;-------------------------------------------------------------------- 119 103 ALIGN JUMP_ALIGN 120 104 Interrupts_InitializeHardwareIrqHandlers: … … 127 111 call .InstallLowOrHighIrqHandler 128 112 loop .IdeControllerLoop 129 ret 113 .Return: 114 ret ; This ret is shared with .InstallLowOrHighIrqHandler 130 115 131 116 ;-------------------------------------------------------------------- … … 138 123 ; Corrupts registers: 139 124 ; BX, SI 140 ;-------------------------------------------------------------------- 125 ;-------------------------------------------------------------------- 141 126 ALIGN JUMP_ALIGN 142 127 .InstallLowOrHighIrqHandler: 128 test bl, bl 129 jz SHORT .Return ; IRQ not used 143 130 cmp bl, 8 144 jae SHORT .InstallHighIrqHandler 145 test bl, bl 146 jnz SHORT .InstallLowIrqHandler 147 ret ; IRQ not used 131 jb SHORT .InstallLowIrqHandler 132 ; Fall through to .InstallHighIrqHandler 148 133 149 134 ;-------------------------------------------------------------------- … … 156 141 ; Corrupts registers: 157 142 ; BX, SI 158 ;-------------------------------------------------------------------- 159 ALIGN JUMP_ALIGN160 .InstallHighIrqHandler:143 ;-------------------------------------------------------------------- 144 ;ALIGN JUMP_ALIGN 145 ;.InstallHighIrqHandler: 161 146 add bx, BYTE INTV_IRQ8 - 8 ; Interrupt vector number 162 147 mov si, HIRQ_InterruptServiceRoutineForIrqs8to15 … … 172 157 ; Corrupts registers: 173 158 ; BX, SI 174 ;-------------------------------------------------------------------- 159 ;-------------------------------------------------------------------- 175 160 ALIGN JUMP_ALIGN 176 161 .InstallLowIrqHandler: … … 190 175 ; Corrupts registers: 191 176 ; BX 192 ;-------------------------------------------------------------------- 177 ;-------------------------------------------------------------------- 193 178 ALIGN JUMP_ALIGN 194 179 Interrupts_InstallHandlerToVectorInBXFromCSSI: … … 212 197 eMOVZX bx, BYTE [di+DPT.bIdeOff] 213 198 mov al, [cs:bx+IDEVARS.bIRQ] 199 test al, al 200 jz SHORT .Return ; Interrupts disabled 214 201 cmp al, 8 215 jae SHORT .UnmaskHighIrqController 216 test al, al 217 jnz SHORT .UnmaskLowIrqController 218 ret ; Interrupts disabled 202 jb SHORT .UnmaskLowIrqController 203 ; Fall through to .UnmaskHighIrqController 219 204 220 205 ;-------------------------------------------------------------------- … … 227 212 ; AX, DX 228 213 ;-------------------------------------------------------------------- 229 ALIGN JUMP_ALIGN230 .UnmaskHighIrqController:214 ;ALIGN JUMP_ALIGN 215 ;.UnmaskHighIrqController: 231 216 sub al, 8 ; Slave interrupt number 232 217 mov dx, PORT_8259SL_IMR ; Load Slave Mask Register address … … 270 255 out dx, al ; Write modified Interrupt Mask Register 271 256 pop cx 272 ret 257 .Return: 258 ret
Note:
See TracChangeset
for help on using the changeset viewer.